Added OpenEXR library v1.7.1
authorAndrey Kamaev <andrey.kamaev@itseez.com>
Fri, 24 Aug 2012 20:31:49 +0000 (00:31 +0400)
committerAndrey Kamaev <andrey.kamaev@itseez.com>
Sun, 2 Sep 2012 16:44:04 +0000 (20:44 +0400)
213 files changed:
3rdparty/ilmimf/README [deleted file]
3rdparty/openexr/AUTHORS.ilmbase [new file with mode: 0644]
3rdparty/openexr/AUTHORS.openexr [new file with mode: 0644]
3rdparty/openexr/CMakeLists.txt [new file with mode: 0644]
3rdparty/openexr/ChangeLog.ilmbase [new file with mode: 0644]
3rdparty/openexr/ChangeLog.openexr [new file with mode: 0644]
3rdparty/openexr/Half/eLut.cpp [new file with mode: 0644]
3rdparty/openexr/Half/eLut.h [new file with mode: 0644]
3rdparty/openexr/Half/half.cpp [new file with mode: 0644]
3rdparty/openexr/Half/half.h [new file with mode: 0644]
3rdparty/openexr/Half/halfFunction.h [new file with mode: 0644]
3rdparty/openexr/Half/halfLimits.h [new file with mode: 0644]
3rdparty/openexr/Half/toFloat.cpp [new file with mode: 0644]
3rdparty/openexr/Half/toFloat.h [new file with mode: 0644]
3rdparty/openexr/Iex/Iex.h [new file with mode: 0644]
3rdparty/openexr/Iex/IexBaseExc.cpp [new file with mode: 0644]
3rdparty/openexr/Iex/IexBaseExc.h [new file with mode: 0644]
3rdparty/openexr/Iex/IexErrnoExc.h [new file with mode: 0644]
3rdparty/openexr/Iex/IexMacros.h [new file with mode: 0644]
3rdparty/openexr/Iex/IexMathExc.h [new file with mode: 0644]
3rdparty/openexr/Iex/IexThrowErrnoExc.cpp [new file with mode: 0644]
3rdparty/openexr/Iex/IexThrowErrnoExc.h [new file with mode: 0644]
3rdparty/openexr/IlmBaseConfig.h.cmakein [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfAcesFile.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfAcesFile.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfArray.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfAutoArray.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfB44Compressor.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfB44Compressor.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfBoxAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfBoxAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfCRgbaFile.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfCRgbaFile.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfChannelList.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfChannelList.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfChannelListAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfChannelListAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfCheckedArithmetic.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfChromaticities.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfChromaticities.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfChromaticitiesAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfChromaticitiesAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfCompression.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfCompressionAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfCompressionAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfCompressor.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfCompressor.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfConvert.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfConvert.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfDoubleAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfDoubleAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfEnvmap.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfEnvmap.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfEnvmapAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfEnvmapAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfFloatAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfFloatAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfFrameBuffer.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfFrameBuffer.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfFramesPerSecond.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfFramesPerSecond.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfHeader.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfHeader.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfHuf.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfHuf.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfIO.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfIO.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfInputFile.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfInputFile.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfInt64.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfIntAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfIntAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfKeyCode.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfKeyCode.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfKeyCodeAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfKeyCodeAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfLineOrder.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfLineOrderAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfLineOrderAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfLut.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfLut.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfMatrixAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfMatrixAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfMisc.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfMisc.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfMultiView.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfMultiView.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfName.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfOpaqueAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfOpaqueAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfOutputFile.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfOutputFile.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfPixelType.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfPizCompressor.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfPizCompressor.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfPreviewImage.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfPreviewImage.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfPreviewImageAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfPreviewImageAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfPxr24Compressor.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfPxr24Compressor.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfRational.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfRational.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfRationalAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfRationalAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfRgba.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfRgbaFile.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfRgbaFile.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfRgbaYca.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfRgbaYca.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfRleCompressor.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfRleCompressor.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfScanLineInputFile.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfStandardAttributes.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfStandardAttributes.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfStdIO.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfStdIO.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfStringAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfStringAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfStringVectorAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfStringVectorAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTestFile.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTestFile.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfThreading.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfThreading.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTileDescription.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTileDescriptionAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTileDescriptionAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTileOffsets.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTileOffsets.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTiledInputFile.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTiledInputFile.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTiledMisc.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTiledMisc.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTiledOutputFile.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTiledRgbaFile.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTiledRgbaFile.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTimeCode.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTimeCode.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTimeCodeAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfTimeCodeAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfVecAttribute.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfVecAttribute.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfVersion.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfVersion.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfWav.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfWav.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfXdr.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfZipCompressor.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/ImfZipCompressor.h [new file with mode: 0644]
3rdparty/openexr/IlmImf/b44ExpLogTable.cpp [new file with mode: 0644]
3rdparty/openexr/IlmImf/b44ExpLogTable.h [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThread.cpp [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThread.h [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThreadMutex.cpp [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThreadMutex.h [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThreadMutexPosix.cpp [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThreadMutexWin32.cpp [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThreadPool.cpp [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThreadPool.h [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThreadPosix.cpp [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThreadSemaphore.cpp [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThreadSemaphore.h [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThreadSemaphorePosix.cpp [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThreadSemaphorePosixCompat.cpp [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThreadSemaphoreWin32.cpp [new file with mode: 0644]
3rdparty/openexr/IlmThread/IlmThreadWin32.cpp [new file with mode: 0644]
3rdparty/openexr/Imath/ImathBox.cpp [new file with mode: 0644]
3rdparty/openexr/Imath/ImathBox.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathBoxAlgo.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathColor.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathColorAlgo.cpp [new file with mode: 0644]
3rdparty/openexr/Imath/ImathColorAlgo.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathEuler.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathExc.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathFrame.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathFrustum.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathFrustumTest.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathFun.cpp [new file with mode: 0644]
3rdparty/openexr/Imath/ImathFun.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathGL.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathGLU.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathHalfLimits.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathInt64.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathInterval.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathLimits.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathLine.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathLineAlgo.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathMath.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathMatrix.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathMatrixAlgo.cpp [new file with mode: 0644]
3rdparty/openexr/Imath/ImathMatrixAlgo.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathPlane.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathPlatform.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathQuat.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathRandom.cpp [new file with mode: 0644]
3rdparty/openexr/Imath/ImathRandom.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathRoots.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathShear.cpp [new file with mode: 0644]
3rdparty/openexr/Imath/ImathShear.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathSphere.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathVec.cpp [new file with mode: 0644]
3rdparty/openexr/Imath/ImathVec.h [new file with mode: 0644]
3rdparty/openexr/Imath/ImathVecAlgo.h [new file with mode: 0644]
3rdparty/openexr/LICENSE [moved from 3rdparty/ilmimf/LICENSE with 96% similarity]
3rdparty/openexr/OpenEXRConfig.h.cmakein [new file with mode: 0644]
CMakeLists.txt
cmake/OpenCVFindLibsGrfmt.cmake
modules/highgui/CMakeLists.txt

diff --git a/3rdparty/ilmimf/README b/3rdparty/ilmimf/README
deleted file mode 100644 (file)
index 20494d3..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-ABOUT THE OPENEXR LIBRARIES
-----------------------------
-
-Half is a class that encapsulates our 16-bit floating-point format.
-
-IlmThread is a thread abstraction library for use with IlmImf.  It
-currently supports pthreads and Windows threads.
-
-IlmImf is our "EXR" file format for storing 16-bit FP images.
-
-Imath is a math library.  IlmImf only uses a subset of it,
-but we're releasing the full library because it's easier for us to 
-maintain, and we think it'll be useful to others.
-
-Iex is an exception-handling library.
-
-See the IlmImfExamples directory for some code that demonstrates how
-to use the IlmImf library to read and write OpenEXR files.  The doc
-directory contains some high-level documentation and history about the
-OpenEXR format.
-
-If you have questions about using the OpenEXR libraries, you may want
-to join our developer mailing list.  See http://www.openexr.com for
-details.
-
-
-LICENSE
--------
-
-The OpenEXR source code distribution is free software.  See the file
-named COPYING (included in this distribution) for details.
-
-
-WHAT'S INCLUDED
----------------
-
-Besides the core OpenEXR libraries, the release includes several 
-utilities for reading, writing, viewing, and manipulating OpenEXR 
-images.  These include:
-
-  * exrdisplay, an image viewer.
-  * exrheader, a utility for dumping header information.
-  * exrstdattr, a utility for modifying OpenEXR standard attributes.
-  * exrmaketiled, for generating tiled and rip/mipmapped images.
-  * exrenvmap, for creating OpenEXR environment maps.
-  * exrmakepreview, for creating preview images for OpenEXR files.
-
-exrdisplay requires FLTK 1.1 or greater and OpenGL.  exrdisplay
-supports fragment shaders if you have the Nvidia Cg SDK and a graphics
-card capable of running fp30 profile fragment shaders.  See
-exrdisplay/README for details.
-
-We have also released an OpenEXR display driver for Renderman, a file
-I/O plugin for Shake, and a file I/O plugin for Adobe Photoshop (on
-both Windows and MacOS).  These are packaged separately.  Go to
-http://www.openexr.com to download them.  NOTE: the most recent
-versions of these applications now have native support for OpenEXR, so
-you should only use our open-source versions of the plugins if you
-have an older version of the application.
-
-
-BUILDING OPENEXR
-----------------
-
-Building OpenEXR requires the zlib library.  If you want to build the
-'exrdisplay' image viewer, you'll also need FLTK 1.1, but this program
-is not required to use OpenEXR's libraries in your application.
-exrdisplay can also accelerate the display of OpenEXR images if you
-have the NVIDIA Cg SDK.
-
-Your OS distribution may already include these libraries, or supply
-packages for them.  That is the preferred way to obtain them for use
-with OpenEXR.  If not, you can obtain the source code for zlib and
-FLTK from:
-
-   http://www.zlib.net
-   http://www.fltk.org
-
-and you can download the NVIDIA Cg SDK from
-http://developer.nvidia.com.
-
-If you're building OpenEXR on a Windows platform, see README.win32 for
-instructions on how to build OpenEXR.  The remainder of this file
-applies only to GNU/Linux or other UNIX-like systems.
-
-After installing the required libraries, to build OpenEXR on
-GNU/Linux or other UNIX-like systems, do this:
-
-./configure
-make
-make install
-
-unless you obtained OpenEXR directly from CVS, in which case you
-should first read README.CVS.
-
-If you have the Nvidia Cg SDK and you want to build support for
-fragment shaders into exrdisplay, specify the path to the SDK using
-the "--with-cg-prefix" flag.  There are some additional compile-time
-configuration options available; type `./configure --help` for more
-information.
-
-See README.OSX for details on building OpenEXR in MacOS X.
-
-Do `make check` to run the OpenEXR confidence tests.  They should all
-pass; if you find a test that does not pass on your system, please let
-us know.
-
-Other UNIX variants haven't been tested, but should be easy to build.
-Let us know if you're having problems porting OpenEXR to a particular
-platform.
-
-All include files needed to use the OpenEXR libraries are installed in the 
-OpenEXR subdirectory of the install prefix, e.g. /usr/local/include/OpenEXR.
-
-
-USING OPENEXR IN YOUR APPLICATIONS
-----------------------------------
-
-On systems with support for pkg-config, use `pkg-config --cflags
-OpenEXR` for the C++ flags required to compile against OpenEXR
-headers; and `pkg-config --libs OpenEXR` for the linker flags required
-to link against OpenEXR libraries.
-
diff --git a/3rdparty/openexr/AUTHORS.ilmbase b/3rdparty/openexr/AUTHORS.ilmbase
new file mode 100644 (file)
index 0000000..51c1f9c
--- /dev/null
@@ -0,0 +1,21 @@
+Developers:
+-----------
+
+Florian Kainz <kainz@ilm.com>
+Rod Bogart <rgb@ilm.com>
+Drew Hess <dhess@ilm.com>
+Bill Anderson <wja@ilm.com>
+Wojciech Jarosz <wjarosz@ucsd.edu>
+
+Contributors:
+-------------
+
+Rito Trevino
+Josh Pines
+Christian Rouet
+
+Win32 build system:
+-------------------
+
+Nick Porcino <NPorcino@lucasarts.com>
+Kimball Thurston
diff --git a/3rdparty/openexr/AUTHORS.openexr b/3rdparty/openexr/AUTHORS.openexr
new file mode 100644 (file)
index 0000000..2926b13
--- /dev/null
@@ -0,0 +1,41 @@
+Developers:
+-----------
+
+Florian Kainz <kainz@ilm.com>
+Rod Bogart <rgb@ilm.com>
+Drew Hess <dhess@ilm.com>
+Paul Schneider <paultschneider@mac.com>
+Bill Anderson <wja@ilm.com>
+Wojciech Jarosz <wjarosz@ucsd.edu>
+Andrew Kunz <akunz@ilm.com>
+
+Contributors:
+-------------
+
+Simon Green <SGreen@nvidia.com>
+Rito Trevino <etrevino@ilm.com>
+Josh Pines
+Christian Rouet
+Rodrigo Damazio <rdamazio@lsi.usp.br>
+Greg Ward <gward@lmi.net>
+Joseph Goldstone <joseph@lp.com>
+Loren Carpenter, Pixar Animation Studios
+
+Win32 build system:
+-------------------
+
+Nick Porcino <NPorcino@lucasarts.com>
+Kimball Thurston
+
+Win32 port contributors:
+------------------------
+
+Dustin Graves <dgraves@computer.org>
+Jukka Liimatta <jukka.liimatta@twilight3d.com>
+Baumann Konstantin <Konstantin.Baumann@hpi.uni-potsdam.de>
+Daniel Koch <daniel@eyeonline.com>
+E. Scott Larsen <larsene@cs.unc.edu>
+stephan mantler <step@acm.org>
+Andreas Kahler <AKahler@nxn-software.com>
+Frank Jargstorff <fjargstorff@nvidia.com>
+Lutz Latta
diff --git a/3rdparty/openexr/CMakeLists.txt b/3rdparty/openexr/CMakeLists.txt
new file mode 100644 (file)
index 0000000..3b811e2
--- /dev/null
@@ -0,0 +1,62 @@
+# ----------------------------------------------------------------------------
+#  CMake file for openexr
+#
+# ----------------------------------------------------------------------------
+
+project(openexr CXX)
+
+if(UNIX)
+  set(HAVE_PTHREAD 1)
+  include(CheckIncludeFile)
+  check_include_file(semaphore.h HAVE_POSIX_SEMAPHORES)
+endif()
+
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/IlmBaseConfig.h.cmakein"
+               "${CMAKE_CURRENT_BINARY_DIR}/IlmBaseConfig.h" @ONLY)
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenEXRConfig.h.cmakein"
+               "${CMAKE_CURRENT_BINARY_DIR}/OpenEXRConfig.h" @ONLY)
+               
+set(OPENEXR_INCLUDE_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/Half"
+                          "${CMAKE_CURRENT_SOURCE_DIR}/Iex"
+                          "${CMAKE_CURRENT_SOURCE_DIR}/IlmThread"
+                          "${CMAKE_CURRENT_SOURCE_DIR}/Imath"
+                          "${CMAKE_CURRENT_SOURCE_DIR}/IlmImf")
+
+ocv_include_directories("${CMAKE_CURRENT_BINARY_DIR}" ${ZLIB_INCLUDE_DIR} ${OPENEXR_INCLUDE_PATHS})
+
+file(GLOB lib_srcs Half/half.cpp Iex/*.cpp IlmThread/*.cpp Imath/*.cpp IlmImf/*.cpp)
+file(GLOB lib_hdrs Half/*.h Iex/Iex*.h IlmThread/IlmThread*.h Imath/Imath*.h IlmImf/*.h)
+list(APPEND lib_hdrs "${CMAKE_CURRENT_BINARY_DIR}/IlmBaseConfig.h" "${CMAKE_CURRENT_BINARY_DIR}/OpenEXRConfig.h")
+
+if(WIN32)
+  ocv_list_filterout(lib_srcs Posix.*cpp)
+else()
+  ocv_list_filterout(lib_srcs Win32.cpp)
+endif()
+
+source_group("Include" FILES ${lib_hdrs} )
+source_group("Src" FILES ${lib_srcs})
+
+ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow -Wunused -Wsign-compare -Wundef -Wmissing-declarations -Wuninitialized -Wswitch 
+                     /wd4018 /wd4099 /wd4100 /wd4101 /wd4127 /wd4189 /wd4244 /wd4245 /wd4267 /wd4305 /wd4334 /wd4389 /wd4512 /wd4701 /wd4702 /wd4706 /wd4800)
+
+add_library(IlmImf STATIC ${lib_hdrs} ${lib_srcs})
+target_link_libraries(IlmImf ${ZLIB_LIBRARIES})
+
+set_target_properties(IlmImf
+    PROPERTIES
+    OUTPUT_NAME "IlmImf"
+    DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}"
+    ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH}
+    )
+
+if(ENABLE_SOLUTION_FOLDERS)
+  set_target_properties(IlmImf PROPERTIES FOLDER "3rdparty")
+endif()
+
+if(NOT BUILD_SHARED_LIBS)
+  install(TARGETS IlmImf ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT main)
+endif()
+
+set(OPENEXR_INCLUDE_PATHS ${OPENEXR_INCLUDE_PATHS} PARENT_SCOPE)
+set(OPENEXR_VERSION "1.7.1" PARENT_SCOPE)
diff --git a/3rdparty/openexr/ChangeLog.ilmbase b/3rdparty/openexr/ChangeLog.ilmbase
new file mode 100644 (file)
index 0000000..2e409d2
--- /dev/null
@@ -0,0 +1,109 @@
+Version 1.0.3
+        * Added support for enabling/disabling large stack optimisations, used in
+          halfFunction.h.
+          (Piotr Stanczyk)
+       * Added ImathNoise.(h/cpp) files. Initializes Perlin noise to match the
+         Renderman implmenetation.
+         (Pixar Contribution)
+       * Fixed a number of missing includes to comply with stricter 
+         enforcement by gnu compilers.
+         (Piotr Stanczyk)
+       * Depracated compiler flag: -Wno-long-double since it is no longer
+         supported under OS X.
+         (Piotr Stanczyk)
+       * A minor API change to Imath::Frustum has been made:  the functions
+         'near' and 'far' have been renamed to 'nearPlane' and 'farPlane' due
+         to conflicts with certain windows headers.  The former alternate
+         accessor names for these values on windows ('hither' and 'yon')
+         remain, though should be considered deprecated.
+         (David Lenihan)
+       * Added SVD, eigenvalue solver, and procrustes fit calculations
+         to ImathMatrixAlgo.
+         (Chris Twigg, Ji Hun Yu)
+       * Added Imath::FrustumTest for frustum visibility testing.
+         (Eric Johnston)
+       * Fixed a stack corruption in the matrix minorOf functions.
+         (Nick Rasmussen)
+       * Visual studio 2008 project files have been added to the vc/vc9
+         directory, and several minor visual studio compile fixes have
+         been applied.
+         (Nick Rasmussen)
+       * Updated the so verison to 7.
+         (Piotr Stanczyk)
+       * Depracated the MacCode_Warrior and Shake submodules.
+         (Piotr Stanczyk)
+
+Version 1.0.2
+       * Added support for targetting builds on 64bit Windows and minimising 
+         number of compiler warnings on Windows. Thanks to Ger Hobbelt for his
+         contributions to CreateDLL.
+         (Ji Hun Yu)
+       * Removed a spurious restrict qualifier in the matrix manipulation code
+         that was causing the 64-bit MS compiler to generate code in release 
+         mode that caused incorrect results. 
+         (Ji Hun Yu)
+       * Added patches for improving universal binaries on OS X. Thanks to
+         Paul Schneider for the contribution
+         (Piotr Stanczyk)
+       * Imath::Box optimization: remove loops from methods by partially 
+         specializing the class, for boxes of two and three dimensions.
+         (Piotr Stanczyk)
+       * Added explicit copy constructors to Imath::Matrix33<T> and
+         ImathMatrix44<T> to make conversions between float and double
+         matrices more convenient.
+         (Florian Kainz)
+       * Added slerpShortestArc() and euclideanInnerProduct() functions
+         to Imath::Quat<T>.
+         (Nick Porcino)
+       * Added 4D vector class template Imath::Vec4<T>.
+         (Nick Porcino)
+       * Copy constructors and assignment operators for Matrix33<T>
+         and Matrix44<T> are up to 25% faster.  Added matrix constructors
+         that do not initialize the matrix (this is faster in cases where
+         the initial value of the matrix is immediately overwritten anyway).
+         (Nick Porcino)
+       * Rewrote function closestPointOnBox(point,box).  Shortened
+         the code, improved numerical accuracy, fixed a bug where
+         closestPointOnBox(box.center(),box) would return the center
+         of the +Z side of the box, even if the +/-X or +/-Y sides
+         were closer.
+         (Florian Kainz)
+       * Rewrote function findEntryAndExitPoints() in ImathBoxAlgo.h.
+         Results are now consistent with those from intersect(), also
+         in ImathBoxAlgo.h.
+         (Florian Kainz)
+       * Made Vec2<T>::length() and Vec3<T>::length() more accurate for
+         vectors whose length is less than sqrt(limits<T>::smallest());
+         (Florian Kainz)
+       * Made Quat<T>::angle() more accurate for small angles.
+         (Don Hatch) 
+
+Version 1.0.1:
+       * Removed Windows .suo files from distribution.
+         (Eric Wimmer)
+
+Version 1.0.0:
+       * Bumped DSO version number to 6.0
+         (Florian Kainz)
+       * Rounding during float-to-half conversion now implements
+         "round to nearest even" mode: if the original float value
+         is exactly in the middle between the two closest half values
+         then rounding chooses the half value whose least significant
+         bit is zero.
+         (Florian Kainz)
+       * Installation Tuning:
+         - Corrected version number on dso's (libtool) - now 5.0
+         - Separated ILMBASE_LDFLAGS and ILMBASE_LIBS so that test programs
+           in configure scripts of packages dependent on IlmBase can link
+           with static libraries properly
+         - eliminated some warning messages during install
+         (Andrew Kunz)
+       
+Version 0.9.0:
+       * Initial release of this code as a separate library.
+         Previously the libraries contained were part of
+         version 1.4.0 of OpenEXR
+       * New build scripts for Linux/Unix
+         (Andrew Kunz)
+       * New Windows project files and build scripts
+         (Kimball Thurston)
diff --git a/3rdparty/openexr/ChangeLog.openexr b/3rdparty/openexr/ChangeLog.openexr
new file mode 100644 (file)
index 0000000..58212f4
--- /dev/null
@@ -0,0 +1,666 @@
+Version 1.7.1:
+        * Updated the .so verison to 7.
+         (Piotr Stanczyk)     
+
+Version 1.7.0:
+       * Added support for targetting builds on 64bit Windows and minimising 
+         number of compiler warnings on Windows. Thanks to Ger Hobbelt for his
+         contributions to CreateDLL.
+         (Ji Hun Yu)
+       * Added new atttribute types:
+         M33dAttribute   3x3 double-precision matrix
+         M44dAttribute   4x4 double-precision matrix
+         V2d             2D double-precision vector
+         V3d             3D double-precision vector
+         (Florian Kainz)
+       * Bug fix: crash when reading a damaged image file (found
+         by Apple).  An exception thrown inside the PIZ Huffman
+         decoder bypasses initialization of an array of pointers.
+         The uninitialized pointers are later passed to operator
+         delete.
+         (Florian Kainz)
+       * Bug fix: crash when reading a damaged image file (found by
+         Apple).  Computing the size of input certain buffers may
+         overflow and wrap around to a small number, later causing
+         writes beyond the end of the buffer.
+         (Florian Kainz)
+       * In the "Technical Introduction" document, added
+         Premultiplied vs. Un-Premulitiplied Color section:
+         states explicitly that pixels with zero alpha and non-zero
+         RGB are allowed, points out that preserving such a pixel can
+         be a problem in application programs with un-premultiplied
+         internal image representations.
+         (Florian Kainz)
+       * exrenvmap improvements:
+         - New command line flags set the type of the input image to
+           latitude-longitude map or cube-face map, overriding the
+           envmap attribute in the input file header.
+         - Cube-face maps can now be assembled from or split into six
+           square sub-images.
+         - Converting a cube-face map into a new cube-face map with
+           the same face size copies the image instead of resampling
+           it.  This avoids blurring when a cube-face map is assembled
+           from or split into sub-images.
+         (Florian Kainz)
+       * Updated standard chromaticities in ImfAcesFile.cpp to match
+         final ACES (Academy Color Encoding Specification) document.
+         (Florian Kainz)
+       * Added worldToCamera and worldToNDC matrices to
+         ImfStandardAttributes.h (Florian Kainz)
+       * Increased the maximum length of attribute and channel names
+         from 31 to 255 characters.  For files that do contain names
+         longer than 31 characters, a new LONG_NAMES_FLAG in the fil
+         version number is set.  This flag causes older versions of
+         the IlmImf library (1.6.1 and earlier) to reject files with
+         long names.  Without the flag, older library versions would
+         mis-interpret files with long names as broken.
+         (Florian Kainz)
+       * Reading luminance/chroma-encoded files via the RGBA
+         interface is faster: buffer padding avoids cache thrashing
+         for certain image sizes, redundant calls to saturation()
+         have been eliminated.
+         (Mike Wall)
+       * Added "hemispherical blur" option to exrenvmap.
+         (Florian Kainz)
+       * Added experimental version of I/O classes for ACES file
+         format (restricted OpenEXR format with special primaries
+         and white point); added exr2aces file converter.
+         (Florian Kainz)
+       * Added new constructors to classes Imf::RgbaInputFile and
+         Imf::TiledRgbaInputFile.  The new constructors have a
+         layerName parameter, which allows the caller to specify
+         which layer of a multi-layer or multi-view image will
+         be read.
+         (Florian Kainz)
+       * A number of member functions in classes Imf::Header,
+         Imf::ChannelList and Imf::FrameBuffer have parameters
+         of type "const char *".  Added equivalent functions that
+         take "const std::string &" parameters.
+         (Florian Kainz)
+       * Added library support for Weta Digital multi-view images:
+         StringVector attribute type, multiView standard attribute
+         of type StringVector, utility functions related to grouping
+         channels into separate views.
+         (Peter Hillman, Florian Kainz)
+
+Version 1.6.1:
+       * Removed Windows .suo files from distribution.
+         (Eric Wimmer)
+       * Bug fix: crashes, memory leaks and file descriptor leaks
+         when reading damaged image files (some reported by Apple,
+         others found by running IlmImfFuzzTest).
+         (Florian Kainz)
+       * Added new IlmImfFuzzTest program to test how resilient the
+         IlmImf library is with respect broken input files: the program
+         first damages OpenEXR files by partially overwriting them with
+         random data; then it tries to read the damaged files.  If all
+         goes well, the program doesn't crash.
+         (Florian Kainz)
+
+Version 1.6.0:
+       * Bumped DSO version number to 6.0
+         (Florian Kainz)
+       * Added new standard attributes related to color rendering with
+         CTL (Color Transformation Language): renderingTransform,
+         lookModTransform and adoptedNeutral.
+         (Florian Kainz)
+       * Bug fix: for pixels with luminance near HALF_MIN, conversion
+         from RGB to luminance/chroma produces NaNs and infinities
+         (Florian Kainz)
+       * Bug fix: excessive desaturation of small details with certain
+         colors after repeatedly loading and saving luminance/chroma
+         encoded images with B44 compression.
+         (Florian Kainz)
+       * Added B44A compression, a minor variation of B44: in most cases,
+         the compression ratio is 2.28:1, the same as with B44, but in
+         uniform image areas where all pixels have the same value, the
+         compression ratio increases to 10.66:1.  Uniform areas occur, for
+         example, in an image's alpha channel, which typically contains
+         large patches that are solid black or white, or in computer-
+         generated images with a black background.
+         (Florian Kainz)
+       * Added flag to configure.ac to enable or disable use of large
+         auto arrays in the IlmImf library.  Default is "enable" for
+         Linux, "disable" for everything else.
+         (Darby Johnston, Florian Kainz)
+       * corrected version number on dso's (libtool) - now 5.0
+       * Separated ILMBASE_LDFLAGS and ILMBASE_LIBS so that test programs
+         can link with static libraries properly
+       * eliminated some warning messages during install
+         (Andrew Kunz)
+       
+Version 1.5.0:
+       * reorganized packaging of OpenEXR libraries to facilitate
+         integration with CTL.  Now this library depends on the library
+         IlmBase.  Some functionality has been moved into OpenEXR_Viewers,
+         which depends on two other libraries, CTL and OpenEXR_CTL.
+         Note: previously there were separate releases of
+         OpenEXR-related plugins for Renderman, Shake and Photoshop.
+         OpenEXR is supported natively by Rendermand and Photoshop, so
+         these plugins will not be supported for this or future
+         versions of OpenEXR.
+         (Andrew Kunz)
+       * New build scripts for Linux/Unix
+         (Andrew Kunz)
+       * New Windows project files and build scripts
+         (Kimball Thurston)
+       * float-to-half conversion now preserves the sign of float zeroes
+         and of floats that are so small that they become half zeroes.
+         (Florian Kainz)
+       * Bug fix: Imath::Frustum<T>::planes() returns incorrect planes
+         if the frustum is orthogonal.
+         (Philip Hubbard)
+       * added new framesPerSecond optional standard attribute
+         (Florian Kainz)
+       * Imath cleanup:
+         - Rewrote function Imath::Quat<T>::setRotation() to make it
+           numerically more accurate, added confidence tests
+         - Rewrote function Imath::Quat<T>::slerp() using Don Hatch's
+           method, which is numerically more accurate, added confidence
+           tests.
+         - Rewrote functions Imath::closestPoints(), Imath::intersect(),
+           added confidence tests.
+         - Removed broken function Imath::nearestPointOnTriangle().
+         - Rewrote Imath::drand48(), Imath::lrand48(), etc. to make
+           them functionally identical with the Unix/Linux versions
+           of drand48(), lrand48() and friends.
+         - Replaced redundant definitions of Int64 in Imath and IlmImf
+           with a single definition in ImathInt64.h.
+         (Florian Kainz)
+       * exrdisplay: if the file's and the display's RGB chromaticities
+         differ, the pixels RGB values are transformed from the file's
+         to the display's RGB space.
+         (Florian Kainz)
+       * Added new lossy B44 compression method.  HALF channels are
+         compressed with a fixed ratio of 2.28:1.  UINT and FLOAT
+         channels are stored verbatim, without compression.
+         (Florian Kainz)
+
+Version 1.4.0a:
+       * Fixed the ReleaseDLL targets for Visual Studio 2003.
+         (Barnaby Robson)
+       
+Version 1.4.0: 
+       * Production release.
+       * Bug Fix: calling setFrameBuffer() for every scan line
+         while reading a tiled file through the scan line API
+         returns bad pixel data. (Paul Schneider, Florian Kainz)
+
+Version 1.3.1:
+       * Fixed the ReleaseDLL targets for Visual Studio 2005.
+         (Nick Porcino, Drew Hess)
+       * Fixes/enhancements for createDLL.
+         (Nick Porcino)
+       
+Version 1.3.0:
+       * Removed openexr.spec file, it's out of date and broken to
+         boot.
+         (Drew Hess)
+       * Support for Visual Studio 2005.
+         (Drew Hess, Nick Porcino)
+       * When compiling against OpenEXR headers on Windows, you
+         no longer need to define any HAVE_* or PLATFORM_* 
+         macros in your projects.  If you are using any OpenEXR
+         DLLs, however, you must define OPENEXR_DLL in your
+         project's preprocessor directives.
+         (Drew Hess)
+       * Many fixes to the Windows VC7 build system.
+         (Drew Hess, Nick Porcino)
+       * Support for building universal binaries on OS X 10.4.
+         (Drew Hess, Paul Schneider)
+       * Minor configure.ac fix to accomodate OS X's automake.
+         (Drew Hess)
+       * Removed CPU-specific optimizations from configure.ac,
+         autoconf's guess at the CPU type isn't very useful,
+         anyway.  Closes #13429.
+         (Drew Hess)
+       * Fixed quoting for tests in configure.ac.  Closes #13428.
+         (Drew Hess)
+       * Use host specification instead of target in configure.ac.
+         Closes #13427.
+         (Drew Hess)
+       * Fix use of AC_ARG_ENABLE in configure.ac.  Closes
+         #13426.
+         (Drew Hess)
+       * Removed workaround for OS X istream::read bug.
+         (Drew Hess)
+       * Added pthread support to OpenEXR pkg-config file.
+         (Drew Hess)
+       * Added -no-undefined to LDFLAGS and required libs to LIBADD
+         for library projects with other library dependencies, per
+         Rex Dieter's patch.
+         (Drew Hess)
+       * HAVE_* macros are now defined in the OpenEXRConfig.h header
+         file instead of via compiler flags.  There are a handful of
+         public headers which rely on the value of these macros,
+         and projects including these headers have previously needed
+         to define the same macros and values as used by OpenEXR's
+         'configure', which is bad form.  Now 'configure' writes these
+         values to the OpenEXRConfig.h header file, which is included
+         by any OpenEXR source files that need these macros.  This
+         method of specifying HAVE_* macros guarantees that projects
+         will get the proper settings without needing to add compile-
+         time flags to accomodate OpenEXR.  Note that this isn't
+         implemented properly for Windows yet.
+         (Drew Hess)
+       * Platform cleanups:
+         - No more support for IRIX or OSF1.
+         - No more explicit support for SunOS, because we have no way to
+           verify that it's working.  I suspect that newish versions of 
+           SunOS will just work out of the box, but let me know if not.
+         - No more PLATFORM_* macros (vestiges of the ILM internal build 
+           system).  PLATFORM_DARWIN_PPC is replaced by HAVE_DARWIN.
+           PLATFORM_REDHAT_IA32 (which was only used in IlmImfTest) is
+           replaced by HAVE_LINUX_PROCFS.
+         - OS X 10.4, which is the minimum version we're going to support
+           with this version, appears to have support for nrand48 and friends,
+           so no need to use the Imath-supplied version of them anymore.
+         (Drew Hess)
+       * No more PLATFORM_WINDOWS or PLATFORM_WIN32, replace with 
+         proper standard Windows macros.  (Drew Hess)
+       * Remove support for gcc 2.95, no longer supported.  (Drew Hess)
+       * Eliminate HAVE_IOS_BASE macro, OpenEXR now requires support for
+         ios_base.  (Drew Hess)
+       * Eliminate HAVE_STL_LIMITS macro, OpenEXR now requires the ISO C++
+         <limits> header.  (Drew Hess)
+       * Use double quote-style include dirctives for OpenEXR
+         includes.  (Drew Hess)
+       * Added a document that gives an overview of the on-disk
+         layout of OpenEXR files (Florian Kainz)
+       * Added sections on layers and on memory-mapped file input
+         to the documentation.  (Florian Kainz)
+       * Bug fix: reading an incomplete file causes a deadlock while
+         waiting on a semaphore.  (Florian Kainz)
+       * Updated documentation (ReadingAndWritingImageFiles.sxw) and
+         sample code (IlmImfExamples):
+         Added a section about multi-threading, updated section on
+         thread-safety, changed documentation and sample code to use
+         readTiles()/writeTiles() instead of readTile()/writeTile()
+         where possible, mentioned that environment maps contain
+         redundant pixels, updated section on testing if a file is
+         an OpenEXR file.
+         (Florian Kainz)
+       * Multi-threading bug fixes (exceptions could be thrown
+         multiple times, some operations were not thread safe),
+         updated some comments, added comments, more multithreaded
+         testing.
+         (Florian Kainz)
+       * Added multi-threading support: multiple threads
+         cooperate to read or write a single OpenEXR file.
+         (Wojciech Jarosz)
+       * Added operator== and operator!= to Imath::Frustum.
+         (Andre Mazzone)
+       * Bug fix: Reading a PIZ-compressed file with an invalid
+         Huffman code table caused crashes by indexing off the
+         end of an array.
+         (Florian Kainz)
+
+Version 1.2.2:
+       * Updated README to remove option for building with Visual C++ 6.0.
+         (Drew Hess)
+       * Some older versions of gcc don't support a full iomanip
+         implemenation; check for this during configuration. 
+         (Drew Hess)
+       * Install PDF versions of documentation, remove old/out-of-date
+         HTML documentation.  (Florian Kainz)
+       * Removed vc/vc6 directory; Visual C++ 6.0 is no longer
+         supported.  (Drew Hess)
+       * Updated README.win32 with details of new build system.
+         (Florian Kainz, Drew Hess)
+       * New build system for Windows / Visual C++ 7 builds both
+         static libraries and DLLs.
+         (Nick Porcino)
+       * Removed Imath::TMatrix<T> and related classes, which are not
+         used anywhere in OpenEXR.
+         (Florian Kainz)
+       * Added minimal support for "image layers" to class Imf::ChannelList
+         (Florian Kainz)
+       * Added new isComplete() method to InputFile, TiledInputFile
+         etc., that checks if a file is complete or if any pixels
+         are missing (for example, because writing the file was
+         aborted prematurely).
+         (Florian Kainz)
+       * Exposed staticInitialize() function in ImfHeader.h in order
+         to allow thread-safe library initialization in multithreaded
+         programs.
+         (Florian Kainz)
+       * Added a new "time code" attribute
+         (Florian Kainz)
+       * exrmaketiled: when a MIPMAP_LEVELS or RIPMAP_LEVELS image
+         is produced, low-pass filtering takes samples outside the
+         image's data window.  This requires extrapolating the image.
+         The user can now specify how the image is extrapolated
+         horizontally and vertically (image is surrounded by black /
+         outermost row of pixels repeats / entire image repeats /
+         entire image repeats, every other copy is a mirror image).
+         exrdisplay: added option to swap the top and botton half,
+         and the left and right half of an image, so that the image's
+         four corners end up in the center.  This is useful for checking
+         the seams of wrap-around texture map images.
+         IlmImf library: Added new "wrapmodes" standard attribute
+         to indicate the extrapolation mode for MIPMAP_LEVELS and
+         RIPMAP_LEVELS images.
+         (Florian Kainz)
+       * Added a new "key code" attribute to identify motion picture
+         film frames.
+         (Florian Kainz)
+       * Removed #include <Iex.h> from ImfAttribute.h, ImfHeader.h
+         and ImfXdr.h so that including header files such as
+         ImfInputFile.h no longer defines ASSERT and THROW macros,
+         which may conflict with similar macros defined by
+         application programs.
+         (Florian Kainz)
+       * Converted HTML documentation to OpenOffice format to
+         make maintaining the documents easier:
+             api.html -> ReadingAndWritingImageFiles.sxw
+             details.html -> TechnicalIntroduction.sxw
+         (Florian Kainz)
+
+Version 1.2.1:
+       * exrenvmap and exrmaketiled use slightly less memory
+         (Florian Kainz)
+       * Added functions to IlmImf for quickly testing if a file
+         is an OpenEXR file, and whether the file is scan-line
+         based or tiled. (Florian Kainz)
+       * Added preview image examples to IlmImfExamples.  Added
+         description of preview images and environment maps to
+         docs/api.html (Florian Kainz)
+       * Bug fix: PXR24 compression did not work properly for channels
+         with ySampling != 1.
+         (Florian Kainz)
+        * Made template <class T> become  template <class S, class T> for 
+          the transform(ObjectS, ObjectT) methods. This was done to allow
+          for differing templated objects to be passed in e.g.  say a 
+          Box<Vec3<S>> and a Matrix44<T>, where S=float and T=double.
+          (Jeff Yost, Arkell Rasiah)
+        * New method Matrix44::setTheMatrix(). Used for assigning a 
+          M44f to a M44d. (Jeff Yost, Arkell Rasiah)
+        * Added convenience Color typedefs for half versions of Color3
+          and Color4. Note the Makefile.am for both Imath and ImathTest
+          have been updated with -I and/or -L pathing to Half.
+          (Max Chen, Arkell Rasiah)
+        * Methods equalWithAbsError() and equalWithRelError() are now
+          declared as const. (Colette Mullenhoff, Arkell Rasiah)
+        * Fixes for gcc34. Mainly typename/template/using/this syntax
+          correctness changes. (Nick Ramussen, Arkell Rasiah)
+       * Added Custom low-level file I/O examples to IlmImfExamples
+         and to the docs/api.html document.  (Florian Kainz)
+       * Eliminated most warnings messages when OpenEXR is compiled
+         with Visual C++.  The OpenEXR code uses lots of (intentional
+         and unintended) implicit type conversions.  By default, Visual
+         C++ warns about almost all of them.  Most implicit conversions
+         have been removed from the .h files, so that including them
+         should not generate warnings even at warning level 3.  Most
+         .cpp files are now compiled with warning level 1.
+         (Florian Kainz)
+
+Version 1.2.0:
+       * Production-ready release.
+       * Disable long double warnings on OS X.  (Drew Hess)
+       * Add new source files to VC7 IlmImfDll target.  (Drew Hess)
+       * Iex: change the way that APPEND_EXC and REPLACE_EXC modify
+         their what() string to work around an issue with Visual C++
+         7.1.  (Florian Kainz, Nick Porcino)
+       * Bumped OpenEXR version to 1.2 and .so versions to 2.0.0 in
+         preparation for the release.  (Drew Hess)
+       * Imath: fixed ImathTMatrix.h to work with gcc 3.4.  (Drew Hess)
+       * Another quoting fix in openexr.m4.  (Drew Hess)
+       * Quoting fix in acinclude.m4 for automake 1.8.  (Brad Hards)
+       * Imath: put inline at beginning of declaration in ImathMatrix.h
+         to fix a warning.  (Ken McGaugh)
+       * Imath: made Vec equalWith*Error () methods const.
+       * Cleaned up compile-time Win32 support.  (Florian Kainz)
+       * Bug fix: Reading a particular broken PIZ-compressed file
+         caused crashes by indexing off the end of an array.
+         (Florian Kainz)
+
+Version 1.1.1:
+       * Half: operator= and variants now return by reference rather
+         than by value.  This brings half into conformance with
+         built-in types.  (Drew Hess)
+       * Half: remove copy constructor, let compiler supply its
+         own.  This improves performance up to 25% on some
+         expressions using half.  (Drew Hess)
+       * configure: don't try to be fancy with CXXFLAGS, just use
+         what the user supplies or let configure choose a sensible
+         default if CXXFLAGS is not defined.
+        * IlmImf: fixed a bug in reading scanline files on big-endian
+          architectures.  (Drew Hess)
+       * exrmaketiled: Added an option to select compression type.
+         (Florian Kainz)
+       * exrenvmap: Added an option to select compression type.
+         (Florian Kainz)
+       * exrdisplay: Added some new command-line options.  (Florian Kainz)
+       * IlmImf: Added Pixar's new "slightly lossy" image compression
+         method.  The new method, named PXR24, preserves HALF and
+         UINT data without loss, but FLOAT pixels are converted to
+         a 24-bit representation.  PXR24 appears to compress
+         FLOAT depth buffers very well without losing much accuracy.
+         (Loren Carpenter, Florian Kainz)
+       * Changed top-level LICENSE file to allow for other copyright
+         holders for individual files.
+       * IlmImf: TILED FILE FORMAT CHANGE.  TiledOutputFile was
+         incorrectly interleaving channels and scanlines before
+         passing pixel data to a compressor.  The lossless compressors
+         still work, but lossy compressors do not.  Fix the bug by
+         interleaving channels and scanlines in tiled files in the
+         same way as ScanLineOutputFile does.  Programs compiled with
+         the new version of IlmImf cannot read tiled images produced
+         with version 1.1.0.  (Florian Kainz)
+       * IlmImf: ImfXdr.h fix for 64-bit architectures.  (Florian Kainz)
+       * IlmImf: OpenEXR now supports YCA (luminance/chroma/alpha)
+         images with subsampled chroma channels.  When an image
+         is written with the RGBA convenience interface, selecting
+         WRITE_YCA instead of WRITE_RGBA causes the library to
+         convert the pixels to YCA format.  If WRITE_Y is selected,
+         only luminance is stored in the file (for black and white
+         images).  When an image file is read with the RGBA convenience
+         interface, YCA data are automatically converted back to RGBA.
+         (Florian Kainz)
+       * IlmImf: speed up reading tiled files as scan lines.
+         (Florian Kainz)
+       * Half:  Fixed subtle bug in Half where signaling float NaNs
+         were being converted to inf in half.  (Florian Kainz)
+       * gcc 3.3 compiler warning cleanups.  (various)
+       * Imath: ImathEuler.h fixes for gcc 3.4.  (Garrick Meeker)
+       
+Version 1.1.0:
+       * Added new targets to Visual C++ .NET 2003 project
+         for exrmaketiled, exrenvmap, exrmakepreview, and exrstdattr.
+         (Drew Hess)
+       * A few assorted Win32 fixes for Imath.  (Drew Hess)
+       * GNU autoconf builds now produce versioned libraries.
+         This release is 1:0:0.  (Drew Hess)
+       * Fixes for Visual C++ .NET 2003.  (Paul Schneider)
+       * Updated Visual C++ zlib project file to zlib 1.2.1.
+         (Drew Hess)
+        * exrdisplay: Fixed fragment shader version.  (Drew Hess)
+       * *Test: Fixed some compiler issues.  (Drew Hess)
+       * Imath: Handle "restrict" keyword properly.  (Drew Hess)
+       * IlmImfExamples: Updated to latest versions of example
+         source code, includes tiling and multi-res images.
+         (Florian Kainz)
+       * exrmakepreview: A new utility to create preview images.
+         (Florian Kainz)
+       * exrenvmap: A new utility to create OpenEXR environment
+         maps.  (Florian Kainz)
+       * exrstdattr: A new utility to modify standard 
+         attributes.  (Florian Kainz)
+       * Updated exrheader to print level rounding mode and
+         preview image size.  (Florian Kainz)
+       * Updated exrmaketiled to use level rounding mode.
+         (Florian Kainz)
+       * IlmImf: Changed the orientation of lat-long envmaps to
+         match typical panoramic camera setups.  (Florian Kainz)
+       * IlmImf: Fixed a bug where partially-completed files with
+         DECREASING_Y could not be read.  (Florian Kainz)
+       * IlmImf: Added support for selectable rounding mode (up/down)
+         when generating multiresolution files.  (Florian Kainz)
+       * exrdisplay: Support for tiled images, mip/ripmaps, preview
+         images, and display windows.  (Florian Kainz, Drew Hess)
+       * exrmaketiled: A new utility which generates tiled
+         versions of OpenEXR images.  (Florian Kainz)
+       * IlmImf: Changed Imf::VERSION to Imf::EXR_VERSION to
+         work around problems with autoconf VERSION macro
+         conflict.  (Drew Hess)
+       * exrheader: Support for tiles, mipmaps, environment
+         maps.  (Florian Kainz)
+       * IlmImf: Environment map support.  (Florian Kainz)
+       * IlmImf: Abstracted stream I/O support.  (Florian Kainz)
+       * IlmImf: Support for tiled and mip/ripmapped files;
+         requires new file format.  (Wojciech Jarosz, Florian Kainz)
+       * Imath: TMatrix*, generic 2D matricies and algorithms.
+         (Francesco Callari)
+       * Imath: major quaternions cleanup.  (Cary Phillips)
+       * Imath: added GLBegin, GLPushAttrib, GLPushMatrix objects
+         for automatic cleanup on exceptions.  (Cary Phillips)
+       * Imath: removed implicit scalar->vector promotions and vector
+         comparisons.  (Nick Rasmussen)
+       
+Version 1.0.7:
+       * Fixed a typo in one of the IlmImfTest tests. (Paul Schneider)
+       * Fixed a bug in exrdisplay that causes the image to display
+         as all black if there's a NaN or infinity in an OpenEXR
+         image. (Florian Kainz)
+       * Updated exrheader per recent changes to IlmImf library.
+         (Florian Kainz)
+       * Changed an errant float to a T in ImathFrame.h nextFrame().
+         (Cary Phillips)
+       * Support for new "optional standard" attributes
+         (chromaticities, luminance, comments, etc.).
+         (Florian Kainz, Greg Ward, Joseph Goldstone)
+       * Fixed a buffer overrun in ImfOpaqueAttribute. (Paul Schneider)
+       * Added new function, isImfMagic (). (Florian Kainz)
+       
+Version 1.0.6:
+       * Added README.win32 to disted files.
+       * Fixed OpenEXR.pc.in pkg-config file, OpenEXR now works
+         with pkg-config.
+       * Random fixes to readme files for new release.
+       * Fixed openexr.m4, now looks in /usr by default.
+       * Added Visual Studio .NET 2003 "solution."
+       * Fixes for Visual Studio .NET 2003 w/ Microsoft C++ compiler.
+         (Various)
+       * Random Imath fixes and enhancements.  Note that 
+         extractSHRT now takes an additional optional
+          argument, see ImathMatrixAlgo.h for details.  (Various)
+       * Added Wojciech Jarosz to AUTHORS file.
+       * Added test cases for uncompressed case, preview images,
+         frame buffer type conversion.  (Wojciech Jarosz,
+         Florian Kainz)
+       * Fix a bug in IlmImf where uncompressed data doesn't get
+         read/written correctly.  (Wojciech Jarosz)
+       * Added support for preview images and preview image
+         attributes (thumbnail images) in IlmImf.  (Florian Kainz)
+       * Added support for automatic frame buffer type conversion
+         in IlmImf.  (Florian Kainz)
+       * Cleaned up some compile-time checks.
+       * Added HalfTest unit tests.
+       * [exrdisplay] Download half framebuffer to texture memory 
+         instead of converting to float first.  Requires latest
+         Nvidia drivers.
+
+Version 1.0.5:
+        * Fixed IlmImf.dll to use static runtime libs (Andreas).
+       * Added exrheader project to Visual Studio 6.0 workspace.
+       * Added some example code showing how to use the IlmImf library.
+         (Florian)
+       * Use DLL runtime libs for Win32 libraries rather than static
+         runtime libs.
+       * Add an exrdisplay_fragshader project to the Visual Studio 6.0
+         workspace to enable fragment shaders in Win32.
+       * Add an IlmImfDll project to the Visual Studio 6.0 workspace.
+       * In Win32, export the ImfCRgbaFile C interface via a DLL so
+         that Visual C++ 6.0 users can link against an Intel-compiled
+         IlmImf.  (Andreas Kahler)
+       * Use auto_ptr in ImfAutoArray on Win32, it doesn't like large 
+         automatic stacks.
+       * Performance improvements in PIZ decoding, between
+         20 and 60% speedup on Athlon and Pentium 4 systems.
+          (Florian)
+       * Updated the README with various information, made
+         some cosmetic changes for readability.
+       * Added fragment shader support to exrdisplay.
+        * Bumped the version to 1.0.5 in prep for release.
+       * Updated README and README.OSX to talk about CodeWarrior 
+          project files.
+       * Incorporated Rodrigo Damazio's patch for an openexr.m4
+         macro file and an openexr.spec file for building RPMs.
+       * Small change in ImfAttribute.h to make IlmImf compile with gcc 2.95.
+       * Updated ImfDoubleAttribute.h for Codewarrior on MacOS.
+       * Added exrheader utility.
+       * Update to AUTHORS file.
+       * Added a README.win32 file.
+       * Added project files for Visual Studio 6.0.
+       * Initial Win32 port.  Requires Visual Studio 6.0 and Intel C++
+         compiler version 7.0.
+       * Added new intersectT method in ImathSphere.h
+       * Fixed some bugs in ImathQuat.h
+       * Proper use of fltk-config to get platform-specific FLTK
+         compile- and link-time flags.
+       * exrdisplay uses Imath::Math<T>::pow instead of powf now.
+         powf is not availble on all platforms.
+       * Roll OS X "hack" into the source until Apple fixes their
+         istream implementation.
+       
+Version 1.0.4:
+        * OpenEXR is now covered by a modified BSD license.  See LICENSE
+         for the new terms.
+
+Version 1.0.3:
+
+       * OpenEXR is now in sf.net CVS.
+       * Imf::Xdr namespace cleanups.
+       * Some IlmImfTest cleanups for OS X.
+       * Use .cpp extension in exrdisplay sources.
+       * Iex cleanups.
+       * Make IlmImf compile with Metrowerks Codewarrior.
+       * Change large automatic stacks in ImfHuf.C to auto_ptrs allocated
+         off the heap.  MacOS X default stack size isn't large enough.
+       * std::ios fix for MacOS X in ImfInputFile.C.
+       * Added new FP predecessor/successor functions to Imath, added
+         tests to ImathTest
+       * Fixed a bug in Imath::extractSHRT for 3x3 matricies when
+         exactly one of the original scaling factors is negative, updated
+         ImathTest to check this case.
+       * Install include files when 'make install' is run.
+       * exrdisplay requires fltk 1.1+ now in an effort to support
+         a MacOS X display program (fltk 1.1 runs on OS X), though this
+         is untested.
+       * renamed configure.in to configure.ac
+       * Removed some tests from IexTest that are no longer used.
+       * Removed ImfHalfXdr.h, it's not used anymore.
+       * Revamped the autoconf system, added some compile-time 
+          optimizations, a pkgconfig target, and some maintainer-specific
+          stuff.
+
+Version 1.0.2:
+
+        * More OS X fixes in Imath, IlmImf and IlmImfTest.
+        * Imath updates.
+        * Fixed a rotation bug in Imath
+
+Version 1.0.1:
+
+       * Used autoconf 2.53 and automake 1.6 to generate build environment.
+       * Makefile.am cleanups.
+       * OS X fixes.
+        * removed images directory (now distributed separately).
+
+Version 1.0:
+
+        * first official release.
+        * added some high-level documentation, removed the old OpenEXR.html
+          documentation.
+        * fixed a few nagging build problems.
+       * bumped IMV_VERSION_NUMBER to 2
+
+Version 0.9:
+
+       * added exrdisplay viewer application.
+       * cleanup _data in Imf::InputFile and Imf::OutputFile constructors.
+       * removed old ILM copyright notices.
+
+Version 0.8:
+
+       * Initial release.
diff --git a/3rdparty/openexr/Half/eLut.cpp b/3rdparty/openexr/Half/eLut.cpp
new file mode 100644 (file)
index 0000000..ce64b50
--- /dev/null
@@ -0,0 +1,114 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+#include <iostream>
+#include <iomanip>
+
+using namespace std;
+
+//-----------------------------------------------------
+// Compute a lookup table for float-to-half conversion.
+//
+// When indexed with the combined sign and exponent of
+// a float, the table either returns the combined sign
+// and exponent of the corresponding half, or zero if
+// the corresponding half may not be normalized (zero,
+// denormalized, overflow).
+//-----------------------------------------------------
+
+void
+initELut (unsigned short eLut[])
+{
+    for (int i = 0; i < 0x100; i++)
+    {
+       int e = (i & 0x0ff) - (127 - 15);
+
+       if (e <= 0 || e >= 30)
+       {
+           //
+           // Special case
+           //
+
+           eLut[i]         = 0;
+           eLut[i | 0x100] = 0;
+       }
+       else
+       {
+           //
+           // Common case - normalized half, no exponent overflow possible
+           //
+
+           eLut[i]         =  (e << 10);
+           eLut[i | 0x100] = ((e << 10) | 0x8000);
+       }
+    }
+}
+
+
+//------------------------------------------------------------
+// Main - prints the sign-and-exponent conversion lookup table
+//------------------------------------------------------------
+
+int
+main ()
+{
+    const int tableSize = 1 << 9;
+    unsigned short eLut[tableSize];
+    initELut (eLut);
+
+    cout << "//\n"
+           "// This is an automatically generated file.\n"
+           "// Do not edit.\n"
+           "//\n\n";
+
+    cout << "{\n    ";
+
+    for (int i = 0; i < tableSize; i++)
+    {
+       cout << setw (5) << eLut[i] << ", ";
+
+       if (i % 8 == 7)
+       {
+           cout << "\n";
+
+           if (i < tableSize - 1)
+               cout << "    ";
+       }
+    }
+
+    cout << "};\n";
+    return 0;
+}
diff --git a/3rdparty/openexr/Half/eLut.h b/3rdparty/openexr/Half/eLut.h
new file mode 100644 (file)
index 0000000..f028cdb
--- /dev/null
@@ -0,0 +1,71 @@
+//
+// This is an automatically generated file.
+// Do not edit.
+//
+
+{
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,  1024,  2048,  3072,  4096,  5120,  6144,  7168, 
+     8192,  9216, 10240, 11264, 12288, 13312, 14336, 15360, 
+    16384, 17408, 18432, 19456, 20480, 21504, 22528, 23552, 
+    24576, 25600, 26624, 27648, 28672, 29696,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0, 33792, 34816, 35840, 36864, 37888, 38912, 39936, 
+    40960, 41984, 43008, 44032, 45056, 46080, 47104, 48128, 
+    49152, 50176, 51200, 52224, 53248, 54272, 55296, 56320, 
+    57344, 58368, 59392, 60416, 61440, 62464,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+        0,     0,     0,     0,     0,     0,     0,     0, 
+};
diff --git a/3rdparty/openexr/Half/half.cpp b/3rdparty/openexr/Half/half.cpp
new file mode 100644 (file)
index 0000000..1a3f650
--- /dev/null
@@ -0,0 +1,311 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+// Primary authors:
+//     Florian Kainz <kainz@ilm.com>
+//     Rod Bogart <rgb@ilm.com>
+
+
+//---------------------------------------------------------------------------
+//
+//     class half --
+//     implementation of non-inline members
+//
+//---------------------------------------------------------------------------
+
+#include <assert.h>
+#include "half.h"
+
+using namespace std;
+
+//-------------------------------------------------------------
+// Lookup tables for half-to-float and float-to-half conversion
+//-------------------------------------------------------------
+
+HALF_EXPORT_CONST half::uif half::_toFloat[1 << 16] =
+#include "toFloat.h"
+HALF_EXPORT_CONST unsigned short half::_eLut[1 << 9] =
+#include "eLut.h"
+
+
+//-----------------------------------------------
+// Overflow handler for float-to-half conversion;
+// generates a hardware floating-point overflow,
+// which may be trapped by the operating system.
+//-----------------------------------------------
+
+float
+half::overflow ()
+{
+    volatile float f = 1e10;
+
+    for (int i = 0; i < 10; i++)       
+       f *= f;                         // this will overflow before
+                                       // the for­loop terminates
+    return f;
+}
+
+
+//-----------------------------------------------------
+// Float-to-half conversion -- general case, including
+// zeroes, denormalized numbers and exponent overflows.
+//-----------------------------------------------------
+
+short
+half::convert (int i)
+{
+    //
+    // Our floating point number, f, is represented by the bit
+    // pattern in integer i.  Disassemble that bit pattern into
+    // the sign, s, the exponent, e, and the significand, m.
+    // Shift s into the position where it will go in in the
+    // resulting half number.
+    // Adjust e, accounting for the different exponent bias
+    // of float and half (127 versus 15).
+    //
+
+    register int s =  (i >> 16) & 0x00008000;
+    register int e = ((i >> 23) & 0x000000ff) - (127 - 15);
+    register int m =   i        & 0x007fffff;
+
+    //
+    // Now reassemble s, e and m into a half:
+    //
+
+    if (e <= 0)
+    {
+       if (e < -10)
+       {
+           //
+           // E is less than -10.  The absolute value of f is
+           // less than HALF_MIN (f may be a small normalized
+           // float, a denormalized float or a zero).
+           //
+           // We convert f to a half zero with the same sign as f.
+           //
+
+           return s;
+       }
+
+       //
+       // E is between -10 and 0.  F is a normalized float
+       // whose magnitude is less than HALF_NRM_MIN.
+       //
+       // We convert f to a denormalized half.
+       //
+
+       //
+       // Add an explicit leading 1 to the significand.
+       // 
+
+       m = m | 0x00800000;
+
+       //
+       // Round to m to the nearest (10+e)-bit value (with e between
+       // -10 and 0); in case of a tie, round to the nearest even value.
+       //
+       // Rounding may cause the significand to overflow and make
+       // our number normalized.  Because of the way a half's bits
+       // are laid out, we don't have to treat this case separately;
+       // the code below will handle it correctly.
+       // 
+
+       int t = 14 - e;
+       int a = (1 << (t - 1)) - 1;
+       int b = (m >> t) & 1;
+
+       m = (m + a + b) >> t;
+
+       //
+       // Assemble the half from s, e (zero) and m.
+       //
+
+       return s | m;
+    }
+    else if (e == 0xff - (127 - 15))
+    {
+       if (m == 0)
+       {
+           //
+           // F is an infinity; convert f to a half
+           // infinity with the same sign as f.
+           //
+
+           return s | 0x7c00;
+       }
+       else
+       {
+           //
+           // F is a NAN; we produce a half NAN that preserves
+           // the sign bit and the 10 leftmost bits of the
+           // significand of f, with one exception: If the 10
+           // leftmost bits are all zero, the NAN would turn 
+           // into an infinity, so we have to set at least one
+           // bit in the significand.
+           //
+
+           m >>= 13;
+           return s | 0x7c00 | m | (m == 0);
+       }
+    }
+    else
+    {
+       //
+       // E is greater than zero.  F is a normalized float.
+       // We try to convert f to a normalized half.
+       //
+
+       //
+       // Round to m to the nearest 10-bit value.  In case of
+       // a tie, round to the nearest even value.
+       //
+
+       m = m + 0x00000fff + ((m >> 13) & 1);
+
+       if (m & 0x00800000)
+       {
+           m =  0;             // overflow in significand,
+           e += 1;             // adjust exponent
+       }
+
+       //
+       // Handle exponent overflow
+       //
+
+       if (e > 30)
+       {
+           overflow ();        // Cause a hardware floating point overflow;
+           return s | 0x7c00;  // if this returns, the half becomes an
+       }                       // infinity with the same sign as f.
+
+       //
+       // Assemble the half from s, e and m.
+       //
+
+       return s | (e << 10) | (m >> 13);
+    }
+}
+
+
+//---------------------
+// Stream I/O operators
+//---------------------
+
+ostream &
+operator << (ostream &os, half h)
+{
+    os << float (h);
+    return os;
+}
+
+
+istream &
+operator >> (istream &is, half &h)
+{
+    float f;
+    is >> f;
+    h = half (f);
+    return is;
+}
+
+
+//---------------------------------------
+// Functions to print the bit-layout of
+// floats and halfs, mostly for debugging
+//---------------------------------------
+
+void
+printBits (ostream &os, half h)
+{
+    unsigned short b = h.bits();
+
+    for (int i = 15; i >= 0; i--)
+    {
+       os << (((b >> i) & 1)? '1': '0');
+
+       if (i == 15 || i == 10)
+           os << ' ';
+    }
+}
+
+
+void
+printBits (ostream &os, float f)
+{
+    half::uif x;
+    x.f = f;
+
+    for (int i = 31; i >= 0; i--)
+    {
+       os << (((x.i >> i) & 1)? '1': '0');
+
+       if (i == 31 || i == 23)
+           os << ' ';
+    }
+}
+
+
+void
+printBits (char c[19], half h)
+{
+    unsigned short b = h.bits();
+
+    for (int i = 15, j = 0; i >= 0; i--, j++)
+    {
+       c[j] = (((b >> i) & 1)? '1': '0');
+
+       if (i == 15 || i == 10)
+           c[++j] = ' ';
+    }
+    
+    c[18] = 0;
+}
+
+
+void
+printBits (char c[35], float f)
+{
+    half::uif x;
+    x.f = f;
+
+    for (int i = 31, j = 0; i >= 0; i--, j++)
+    {
+       c[j] = (((x.i >> i) & 1)? '1': '0');
+
+       if (i == 31 || i == 23)
+           c[++j] = ' ';
+    }
+
+    c[34] = 0;
+}
diff --git a/3rdparty/openexr/Half/half.h b/3rdparty/openexr/Half/half.h
new file mode 100644 (file)
index 0000000..5e707ef
--- /dev/null
@@ -0,0 +1,766 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+// Primary authors:
+//     Florian Kainz <kainz@ilm.com>
+//     Rod Bogart <rgb@ilm.com>
+
+//---------------------------------------------------------------------------
+//
+//     half -- a 16-bit floating point number class:
+//
+//     Type half can represent positive and negative numbers whose
+//     magnitude is between roughly 6.1e-5 and 6.5e+4 with a relative
+//     error of 9.8e-4; numbers smaller than 6.1e-5 can be represented
+//     with an absolute error of 6.0e-8.  All integers from -2048 to
+//     +2048 can be represented exactly.
+//
+//     Type half behaves (almost) like the built-in C++ floating point
+//     types.  In arithmetic expressions, half, float and double can be
+//     mixed freely.  Here are a few examples:
+//
+//         half a (3.5);
+//         float b (a + sqrt (a));
+//         a += b;
+//         b += a;
+//         b = a + 7;
+//
+//     Conversions from half to float are lossless; all half numbers
+//     are exactly representable as floats.
+//
+//     Conversions from float to half may not preserve a float's value
+//     exactly.  If a float is not representable as a half, then the
+//     float value is rounded to the nearest representable half.  If a
+//     float value is exactly in the middle between the two closest
+//     representable half values, then the float value is rounded to
+//     the closest half whose least significant bit is zero.
+//
+//     Overflows during float-to-half conversions cause arithmetic
+//     exceptions.  An overflow occurs when the float value to be
+//     converted is too large to be represented as a half, or if the
+//     float value is an infinity or a NAN.
+//
+//     The implementation of type half makes the following assumptions
+//     about the implementation of the built-in C++ types:
+//
+//         float is an IEEE 754 single-precision number
+//         sizeof (float) == 4
+//         sizeof (unsigned int) == sizeof (float)
+//         alignof (unsigned int) == alignof (float)
+//         sizeof (unsigned short) == 2
+//
+//---------------------------------------------------------------------------
+
+#ifndef _HALF_H_
+#define _HALF_H_
+
+#include <iostream>
+
+#if defined(OPENEXR_DLL)
+    #if defined(HALF_EXPORTS)
+       #define HALF_EXPORT __declspec(dllexport)
+    #else
+       #define HALF_EXPORT __declspec(dllimport)
+    #endif
+    #define HALF_EXPORT_CONST
+#else
+    #define HALF_EXPORT
+    #define HALF_EXPORT_CONST const
+#endif
+
+class HALF_EXPORT half
+{
+  public:
+
+    //-------------
+    // Constructors
+    //-------------
+
+    half ();                   // no initialization
+    half (float f);
+
+
+    //--------------------
+    // Conversion to float
+    //--------------------
+
+    operator           float () const;
+
+
+    //------------
+    // Unary minus
+    //------------
+
+    half               operator - () const;
+
+
+    //-----------
+    // Assignment
+    //-----------
+
+    half &             operator = (half  h);
+    half &             operator = (float f);
+
+    half &             operator += (half  h);
+    half &             operator += (float f);
+
+    half &             operator -= (half  h);
+    half &             operator -= (float f);
+
+    half &             operator *= (half  h);
+    half &             operator *= (float f);
+
+    half &             operator /= (half  h);
+    half &             operator /= (float f);
+
+
+    //---------------------------------------------------------
+    // Round to n-bit precision (n should be between 0 and 10).
+    // After rounding, the significand's 10-n least significant
+    // bits will be zero.
+    //---------------------------------------------------------
+
+    half               round (unsigned int n) const;
+
+
+    //--------------------------------------------------------------------
+    // Classification:
+    //
+    // h.isFinite()            returns true if h is a normalized number,
+    //                         a denormalized number or zero
+    //
+    // h.isNormalized()        returns true if h is a normalized number
+    //
+    // h.isDenormalized()      returns true if h is a denormalized number
+    //
+    // h.isZero()              returns true if h is zero
+    //
+    // h.isNan()               returns true if h is a NAN
+    //
+    // h.isInfinity()          returns true if h is a positive
+    //                         or a negative infinity
+    //
+    // h.isNegative()          returns true if the sign bit of h
+    //                         is set (negative)
+    //--------------------------------------------------------------------
+
+    bool               isFinite () const;
+    bool               isNormalized () const;
+    bool               isDenormalized () const;
+    bool               isZero () const;
+    bool               isNan () const;
+    bool               isInfinity () const;
+    bool               isNegative () const;
+
+
+    //--------------------------------------------
+    // Special values
+    //
+    // posInf()        returns +infinity
+    //
+    // negInf()        returns -infinity
+    //
+    // qNan()          returns a NAN with the bit
+    //                 pattern 0111111111111111
+    //
+    // sNan()          returns a NAN with the bit
+    //                 pattern 0111110111111111
+    //--------------------------------------------
+
+    static half                posInf ();
+    static half                negInf ();
+    static half                qNan ();
+    static half                sNan ();
+
+
+    //--------------------------------------
+    // Access to the internal representation
+    //--------------------------------------
+
+    unsigned short     bits () const;
+    void               setBits (unsigned short bits);
+
+
+  public:
+
+    union uif
+    {
+       unsigned int    i;
+       float           f;
+    };
+
+  private:
+
+    static short       convert (int i);
+    static float       overflow ();
+
+    unsigned short     _h;
+
+    static HALF_EXPORT_CONST uif               _toFloat[1 << 16];
+    static HALF_EXPORT_CONST unsigned short _eLut[1 << 9];
+};
+
+//-----------
+// Stream I/O
+//-----------
+
+HALF_EXPORT std::ostream &             operator << (std::ostream &os, half  h);
+HALF_EXPORT std::istream &             operator >> (std::istream &is, half &h);
+
+
+//----------
+// Debugging
+//----------
+
+HALF_EXPORT void                       printBits   (std::ostream &os, half  h);
+HALF_EXPORT void                       printBits   (std::ostream &os, float f);
+HALF_EXPORT void                       printBits   (char  c[19], half  h);
+HALF_EXPORT void                       printBits   (char  c[35], float f);
+
+
+//-------------------------------------------------------------------------
+// Limits
+//
+// Visual C++ will complain if HALF_MIN, HALF_NRM_MIN etc. are not float
+// constants, but at least one other compiler (gcc 2.96) produces incorrect
+// results if they are.
+//-------------------------------------------------------------------------
+
+#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
+
+  #define HALF_MIN     5.96046448e-08f // Smallest positive half
+
+  #define HALF_NRM_MIN 6.10351562e-05f // Smallest positive normalized half
+
+  #define HALF_MAX     65504.0f        // Largest positive half
+
+  #define HALF_EPSILON 0.00097656f     // Smallest positive e for which
+                                       // half (1.0 + e) != half (1.0)
+#else
+
+  #define HALF_MIN     5.96046448e-08  // Smallest positive half
+
+  #define HALF_NRM_MIN 6.10351562e-05  // Smallest positive normalized half
+
+  #define HALF_MAX     65504.0         // Largest positive half
+
+  #define HALF_EPSILON 0.00097656      // Smallest positive e for which
+                                       // half (1.0 + e) != half (1.0)
+#endif
+
+
+#define HALF_MANT_DIG  11              // Number of digits in mantissa
+                                       // (significand + hidden leading 1)
+
+#define HALF_DIG       2               // Number of base 10 digits that
+                                       // can be represented without change
+
+#define HALF_RADIX     2               // Base of the exponent
+
+#define HALF_MIN_EXP   -13             // Minimum negative integer such that
+                                       // HALF_RADIX raised to the power of
+                                       // one less than that integer is a
+                                       // normalized half
+
+#define HALF_MAX_EXP   16              // Maximum positive integer such that
+                                       // HALF_RADIX raised to the power of
+                                       // one less than that integer is a
+                                       // normalized half
+
+#define HALF_MIN_10_EXP        -4              // Minimum positive integer such
+                                       // that 10 raised to that power is
+                                       // a normalized half
+
+#define HALF_MAX_10_EXP        4               // Maximum positive integer such
+                                       // that 10 raised to that power is
+                                       // a normalized half
+
+
+//---------------------------------------------------------------------------
+//
+// Implementation --
+//
+// Representation of a float:
+//
+//     We assume that a float, f, is an IEEE 754 single-precision
+//     floating point number, whose bits are arranged as follows:
+//
+//         31 (msb)
+//         | 
+//         | 30     23
+//         | |      | 
+//         | |      | 22                    0 (lsb)
+//         | |      | |                     |
+//         X XXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX
+//
+//         s e        m
+//
+//     S is the sign-bit, e is the exponent and m is the significand.
+//
+//     If e is between 1 and 254, f is a normalized number:
+//
+//                 s    e-127
+//         f = (-1)  * 2      * 1.m
+//
+//     If e is 0, and m is not zero, f is a denormalized number:
+//
+//                 s    -126
+//         f = (-1)  * 2      * 0.m
+//
+//     If e and m are both zero, f is zero:
+//
+//         f = 0.0
+//
+//     If e is 255, f is an "infinity" or "not a number" (NAN),
+//     depending on whether m is zero or not.
+//
+//     Examples:
+//
+//         0 00000000 00000000000000000000000 = 0.0
+//         0 01111110 00000000000000000000000 = 0.5
+//         0 01111111 00000000000000000000000 = 1.0
+//         0 10000000 00000000000000000000000 = 2.0
+//         0 10000000 10000000000000000000000 = 3.0
+//         1 10000101 11110000010000000000000 = -124.0625
+//         0 11111111 00000000000000000000000 = +infinity
+//         1 11111111 00000000000000000000000 = -infinity
+//         0 11111111 10000000000000000000000 = NAN
+//         1 11111111 11111111111111111111111 = NAN
+//
+// Representation of a half:
+//
+//     Here is the bit-layout for a half number, h:
+//
+//         15 (msb)
+//         | 
+//         | 14  10
+//         | |   |
+//         | |   | 9        0 (lsb)
+//         | |   | |        |
+//         X XXXXX XXXXXXXXXX
+//
+//         s e     m
+//
+//     S is the sign-bit, e is the exponent and m is the significand.
+//
+//     If e is between 1 and 30, h is a normalized number:
+//
+//                 s    e-15
+//         h = (-1)  * 2     * 1.m
+//
+//     If e is 0, and m is not zero, h is a denormalized number:
+//
+//                 S    -14
+//         h = (-1)  * 2     * 0.m
+//
+//     If e and m are both zero, h is zero:
+//
+//         h = 0.0
+//
+//     If e is 31, h is an "infinity" or "not a number" (NAN),
+//     depending on whether m is zero or not.
+//
+//     Examples:
+//
+//         0 00000 0000000000 = 0.0
+//         0 01110 0000000000 = 0.5
+//         0 01111 0000000000 = 1.0
+//         0 10000 0000000000 = 2.0
+//         0 10000 1000000000 = 3.0
+//         1 10101 1111000001 = -124.0625
+//         0 11111 0000000000 = +infinity
+//         1 11111 0000000000 = -infinity
+//         0 11111 1000000000 = NAN
+//         1 11111 1111111111 = NAN
+//
+// Conversion:
+//
+//     Converting from a float to a half requires some non-trivial bit
+//     manipulations.  In some cases, this makes conversion relatively
+//     slow, but the most common case is accelerated via table lookups.
+//
+//     Converting back from a half to a float is easier because we don't
+//     have to do any rounding.  In addition, there are only 65536
+//     different half numbers; we can convert each of those numbers once
+//     and store the results in a table.  Later, all conversions can be
+//     done using only simple table lookups.
+//
+//---------------------------------------------------------------------------
+
+
+//--------------------
+// Simple constructors
+//--------------------
+
+inline
+half::half ()
+{
+    // no initialization
+}
+
+
+//----------------------------
+// Half-from-float constructor
+//----------------------------
+
+inline
+half::half (float f)
+{
+    uif x;
+
+    x.f = f;
+
+    if (f == 0)
+    {
+       //
+       // Common special case - zero.
+       // Preserve the zero's sign bit.
+       //
+
+       _h = (x.i >> 16);
+    }
+    else
+    {
+       //
+       // We extract the combined sign and exponent, e, from our
+       // floating-point number, f.  Then we convert e to the sign
+       // and exponent of the half number via a table lookup.
+       //
+       // For the most common case, where a normalized half is produced,
+       // the table lookup returns a non-zero value; in this case, all
+       // we have to do is round f's significand to 10 bits and combine
+       // the result with e.
+       //
+       // For all other cases (overflow, zeroes, denormalized numbers
+       // resulting from underflow, infinities and NANs), the table
+       // lookup returns zero, and we call a longer, non-inline function
+       // to do the float-to-half conversion.
+       //
+
+       register int e = (x.i >> 23) & 0x000001ff;
+
+       e = _eLut[e];
+
+       if (e)
+       {
+           //
+           // Simple case - round the significand, m, to 10
+           // bits and combine it with the sign and exponent.
+           //
+
+           register int m = x.i & 0x007fffff;
+           _h = e + ((m + 0x00000fff + ((m >> 13) & 1)) >> 13);
+       }
+       else
+       {
+           //
+           // Difficult case - call a function.
+           //
+
+           _h = convert (x.i);
+       }
+    }
+}
+
+
+//------------------------------------------
+// Half-to-float conversion via table lookup
+//------------------------------------------
+
+inline
+half::operator float () const
+{
+    return _toFloat[_h].f;
+}
+
+
+//-------------------------
+// Round to n-bit precision
+//-------------------------
+
+inline half
+half::round (unsigned int n) const
+{
+    //
+    // Parameter check.
+    //
+
+    if (n >= 10)
+       return *this;
+
+    //
+    // Disassemble h into the sign, s,
+    // and the combined exponent and significand, e.
+    //
+
+    unsigned short s = _h & 0x8000;
+    unsigned short e = _h & 0x7fff;
+
+    //
+    // Round the exponent and significand to the nearest value
+    // where ones occur only in the (10-n) most significant bits.
+    // Note that the exponent adjusts automatically if rounding
+    // up causes the significand to overflow.
+    //
+
+    e >>= 9 - n;
+    e  += e & 1;
+    e <<= 9 - n;
+
+    //
+    // Check for exponent overflow.
+    //
+
+    if (e >= 0x7c00)
+    {
+       //
+       // Overflow occurred -- truncate instead of rounding.
+       //
+
+       e = _h;
+       e >>= 10 - n;
+       e <<= 10 - n;
+    }
+
+    //
+    // Put the original sign bit back.
+    //
+
+    half h;
+    h._h = s | e;
+
+    return h;
+}
+
+
+//-----------------------
+// Other inline functions
+//-----------------------
+
+inline half    
+half::operator - () const
+{
+    half h;
+    h._h = _h ^ 0x8000;
+    return h;
+}
+
+
+inline half &
+half::operator = (half h)
+{
+    _h = h._h;
+    return *this;
+}
+
+
+inline half &
+half::operator = (float f)
+{
+    *this = half (f);
+    return *this;
+}
+
+
+inline half &
+half::operator += (half h)
+{
+    *this = half (float (*this) + float (h));
+    return *this;
+}
+
+
+inline half &
+half::operator += (float f)
+{
+    *this = half (float (*this) + f);
+    return *this;
+}
+
+
+inline half &
+half::operator -= (half h)
+{
+    *this = half (float (*this) - float (h));
+    return *this;
+}
+
+
+inline half &
+half::operator -= (float f)
+{
+    *this = half (float (*this) - f);
+    return *this;
+}
+
+
+inline half &
+half::operator *= (half h)
+{
+    *this = half (float (*this) * float (h));
+    return *this;
+}
+
+
+inline half &
+half::operator *= (float f)
+{
+    *this = half (float (*this) * f);
+    return *this;
+}
+
+
+inline half &
+half::operator /= (half h)
+{
+    *this = half (float (*this) / float (h));
+    return *this;
+}
+
+
+inline half &
+half::operator /= (float f)
+{
+    *this = half (float (*this) / f);
+    return *this;
+}
+
+
+inline bool    
+half::isFinite () const
+{
+    unsigned short e = (_h >> 10) & 0x001f;
+    return e < 31;
+}
+
+
+inline bool
+half::isNormalized () const
+{
+    unsigned short e = (_h >> 10) & 0x001f;
+    return e > 0 && e < 31;
+}
+
+
+inline bool
+half::isDenormalized () const
+{
+    unsigned short e = (_h >> 10) & 0x001f;
+    unsigned short m =  _h & 0x3ff;
+    return e == 0 && m != 0;
+}
+
+
+inline bool
+half::isZero () const
+{
+    return (_h & 0x7fff) == 0;
+}
+
+
+inline bool
+half::isNan () const
+{
+    unsigned short e = (_h >> 10) & 0x001f;
+    unsigned short m =  _h & 0x3ff;
+    return e == 31 && m != 0;
+}
+
+
+inline bool
+half::isInfinity () const
+{
+    unsigned short e = (_h >> 10) & 0x001f;
+    unsigned short m =  _h & 0x3ff;
+    return e == 31 && m == 0;
+}
+
+
+inline bool    
+half::isNegative () const
+{
+    return (_h & 0x8000) != 0;
+}
+
+
+inline half
+half::posInf ()
+{
+    half h;
+    h._h = 0x7c00;
+    return h;
+}
+
+
+inline half
+half::negInf ()
+{
+    half h;
+    h._h = 0xfc00;
+    return h;
+}
+
+
+inline half
+half::qNan ()
+{
+    half h;
+    h._h = 0x7fff;
+    return h;
+}
+
+
+inline half
+half::sNan ()
+{
+    half h;
+    h._h = 0x7dff;
+    return h;
+}
+
+
+inline unsigned short
+half::bits () const
+{
+    return _h;
+}
+
+
+inline void
+half::setBits (unsigned short bits)
+{
+    _h = bits;
+}
+
+#endif
diff --git a/3rdparty/openexr/Half/halfFunction.h b/3rdparty/openexr/Half/halfFunction.h
new file mode 100644 (file)
index 0000000..37dbf50
--- /dev/null
@@ -0,0 +1,178 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+// Primary authors:
+//     Florian Kainz <kainz@ilm.com>
+//     Rod Bogart <rgb@ilm.com>
+
+
+//---------------------------------------------------------------------------
+//
+//     halfFunction<T> -- a class for fast evaluation
+//                        of half --> T functions
+//
+//     The constructor for a halfFunction object,
+//
+//         halfFunction (function,
+//                       domainMin, domainMax,
+//                       defaultValue,
+//                       posInfValue, negInfValue,
+//                       nanValue);
+//
+//     evaluates the function for all finite half values in the interval
+//     [domainMin, domainMax], and stores the results in a lookup table.
+//     For finite half values that are not in [domainMin, domainMax], the
+//     constructor stores defaultValue in the table.  For positive infinity,
+//     negative infinity and NANs, posInfValue, negInfValue and nanValue
+//     are stored in the table.
+//
+//     The tabulated function can then be evaluated quickly for arbitrary
+//     half values by calling the the halfFunction object's operator()
+//     method.
+//
+//     Example:
+//
+//         #include <math.h>
+//         #include <halfFunction.h>
+//
+//         halfFunction<half> hsin (sin);
+//
+//         halfFunction<half> hsqrt (sqrt,             // function
+//                                   0, HALF_MAX,      // domain
+//                                   half::qNan(),     // sqrt(x) for x < 0
+//                                   half::posInf(),   // sqrt(+inf)
+//                                   half::qNan(),     // sqrt(-inf)
+//                                   half::qNan());    // sqrt(nan)
+//
+//         half x = hsin (1);
+//         half y = hsqrt (3.5);
+//
+//---------------------------------------------------------------------------
+
+#ifndef _HALF_FUNCTION_H_
+#define _HALF_FUNCTION_H_
+
+#include "half.h"
+
+#include <IlmBaseConfig.h>
+#ifndef ILMBASE_HAVE_LARGE_STACK  
+#include <string.h>     // need this for memset
+#else 
+#endif
+
+#include <float.h>
+
+
+template <class T>
+class halfFunction
+{
+  public:
+
+    //------------
+    // Constructor
+    //------------
+
+    template <class Function>
+    halfFunction (Function f,
+                 half domainMin = -HALF_MAX,
+                 half domainMax =  HALF_MAX,
+                 T defaultValue = 0,
+                 T posInfValue  = 0,
+                 T negInfValue  = 0,
+                 T nanValue     = 0);
+
+#ifndef ILMBASE_HAVE_LARGE_STACK
+    ~halfFunction () { delete [] _lut; }    
+#endif
+    
+    //-----------
+    // Evaluation
+    //-----------
+
+    T          operator () (half x) const;
+
+  private:
+#ifdef ILMBASE_HAVE_LARGE_STACK
+    T          _lut[1 << 16];
+#else
+    T *         _lut;
+#endif
+};
+
+
+//---------------
+// Implementation
+//---------------
+
+template <class T>
+template <class Function>
+halfFunction<T>::halfFunction (Function f,
+                              half domainMin,
+                              half domainMax,
+                              T defaultValue,
+                              T posInfValue,
+                              T negInfValue,
+                              T nanValue)
+{
+#ifndef ILMBASE_HAVE_LARGE_STACK
+    _lut = new T[1<<16];
+    memset (_lut, 0 , (1<<16) * sizeof(T));
+#endif
+    
+    for (int i = 0; i < (1 << 16); i++)
+    {
+       half x;
+       x.setBits (i);
+
+       if (x.isNan())
+           _lut[i] = nanValue;
+       else if (x.isInfinity())
+           _lut[i] = x.isNegative()? negInfValue: posInfValue;
+       else if (x < domainMin || x > domainMax)
+           _lut[i] = defaultValue;
+       else
+           _lut[i] = f (x);
+    }
+}
+
+
+template <class T>
+inline T
+halfFunction<T>::operator () (half x) const
+{
+    return _lut[x.bits()];
+}
+
+
+#endif
diff --git a/3rdparty/openexr/Half/halfLimits.h b/3rdparty/openexr/Half/halfLimits.h
new file mode 100644 (file)
index 0000000..404f589
--- /dev/null
@@ -0,0 +1,102 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+// Primary authors:
+//     Florian Kainz <kainz@ilm.com>
+//     Rod Bogart <rgb@ilm.com>
+
+
+#ifndef INCLUDED_HALF_LIMITS_H
+#define INCLUDED_HALF_LIMITS_H
+
+
+//------------------------------------------------------------------------
+//
+//     C++ standard library-style numeric_limits for class half
+//
+//------------------------------------------------------------------------
+
+#include <limits>
+#include "half.h"
+
+namespace std {
+
+template <>
+class numeric_limits <half>
+{
+  public:
+
+    static const bool is_specialized = true;
+
+    static half min () throw () {return HALF_NRM_MIN;}
+    static half max () throw () {return HALF_MAX;}
+
+    static const int digits = HALF_MANT_DIG;
+    static const int digits10 = HALF_DIG;
+    static const bool is_signed = true;
+    static const bool is_integer = false;
+    static const bool is_exact = false;
+    static const int radix = HALF_RADIX;
+    static half epsilon () throw () {return HALF_EPSILON;}
+    static half round_error () throw () {return HALF_EPSILON / 2;}
+
+    static const int min_exponent = HALF_MIN_EXP;
+    static const int min_exponent10 = HALF_MIN_10_EXP;
+    static const int max_exponent = HALF_MAX_EXP;
+    static const int max_exponent10 = HALF_MAX_10_EXP;
+
+    static const bool has_infinity = true;
+    static const bool has_quiet_NaN = true;
+    static const bool has_signaling_NaN = true;
+    static const float_denorm_style has_denorm = denorm_present;
+    static const bool has_denorm_loss = false;
+    static half infinity () throw () {return half::posInf();}
+    static half quiet_NaN () throw () {return half::qNan();}
+    static half signaling_NaN () throw () {return half::sNan();}
+    static half denorm_min () throw () {return HALF_MIN;}
+
+    static const bool is_iec559 = false;
+    static const bool is_bounded = false;
+    static const bool is_modulo = false;
+
+    static const bool traps = true;
+    static const bool tinyness_before = false;
+    static const float_round_style round_style = round_to_nearest;
+};
+
+
+} // namespace std
+
+#endif
diff --git a/3rdparty/openexr/Half/toFloat.cpp b/3rdparty/openexr/Half/toFloat.cpp
new file mode 100644 (file)
index 0000000..001bc51
--- /dev/null
@@ -0,0 +1,164 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+
+//---------------------------------------------------------------------------
+//
+//     toFloat
+//
+//     A program to generate the lookup table for half-to-float
+//     conversion needed by class half.
+//     The program loops over all 65536 possible half numbers,
+//     converts each of them to a float, and prints the result.
+//
+//---------------------------------------------------------------------------
+
+
+#include <iostream>
+#include <iomanip>
+
+using namespace std;
+
+//---------------------------------------------------
+// Interpret an unsigned short bit pattern as a half,
+// and convert that half to the corresponding float's
+// bit pattern.
+//---------------------------------------------------
+
+unsigned int
+halfToFloat (unsigned short y)
+{
+
+    int s = (y >> 15) & 0x00000001;
+    int e = (y >> 10) & 0x0000001f;
+    int m =  y        & 0x000003ff;
+
+    if (e == 0)
+    {
+       if (m == 0)
+       {
+           //
+           // Plus or minus zero
+           //
+
+           return s << 31;
+       }
+       else
+       {
+           //
+           // Denormalized number -- renormalize it
+           //
+
+           while (!(m & 0x00000400))
+           {
+               m <<= 1;
+               e -=  1;
+           }
+
+           e += 1;
+           m &= ~0x00000400;
+       }
+    }
+    else if (e == 31)
+    {
+       if (m == 0)
+       {
+           //
+           // Positive or negative infinity
+           //
+
+           return (s << 31) | 0x7f800000;
+       }
+       else
+       {
+           //
+           // Nan -- preserve sign and significand bits
+           //
+
+           return (s << 31) | 0x7f800000 | (m << 13);
+       }
+    }
+
+    //
+    // Normalized number
+    //
+
+    e = e + (127 - 15);
+    m = m << 13;
+
+    //
+    // Assemble s, e and m.
+    //
+
+    return (s << 31) | (e << 23) | m;
+}
+
+
+//---------------------------------------------
+// Main - prints the half-to-float lookup table
+//---------------------------------------------
+
+int
+main ()
+{
+    cout.precision (9);
+    cout.setf (ios_base::hex, ios_base::basefield);
+
+    cout << "//\n"
+           "// This is an automatically generated file.\n"
+           "// Do not edit.\n"
+           "//\n\n";
+
+    cout << "{\n    ";
+
+    const int iMax = (1 << 16);
+
+    for (int i = 0; i < iMax; i++)
+    {
+       cout << "{0x" << setfill ('0') << setw (8) << halfToFloat (i) << "}, ";
+
+       if (i % 4 == 3)
+       {
+           cout << "\n";
+
+           if (i < iMax - 1)
+               cout << "    ";
+       }
+    }
+
+    cout << "};\n";
+    return 0;
+}
diff --git a/3rdparty/openexr/Half/toFloat.h b/3rdparty/openexr/Half/toFloat.h
new file mode 100644 (file)
index 0000000..37c9556
--- /dev/null
@@ -0,0 +1,16391 @@
+//
+// This is an automatically generated file.
+// Do not edit.
+//
+
+{
+    {0x00000000}, {0x33800000}, {0x34000000}, {0x34400000}, 
+    {0x34800000}, {0x34a00000}, {0x34c00000}, {0x34e00000}, 
+    {0x35000000}, {0x35100000}, {0x35200000}, {0x35300000}, 
+    {0x35400000}, {0x35500000}, {0x35600000}, {0x35700000}, 
+    {0x35800000}, {0x35880000}, {0x35900000}, {0x35980000}, 
+    {0x35a00000}, {0x35a80000}, {0x35b00000}, {0x35b80000}, 
+    {0x35c00000}, {0x35c80000}, {0x35d00000}, {0x35d80000}, 
+    {0x35e00000}, {0x35e80000}, {0x35f00000}, {0x35f80000}, 
+    {0x36000000}, {0x36040000}, {0x36080000}, {0x360c0000}, 
+    {0x36100000}, {0x36140000}, {0x36180000}, {0x361c0000}, 
+    {0x36200000}, {0x36240000}, {0x36280000}, {0x362c0000}, 
+    {0x36300000}, {0x36340000}, {0x36380000}, {0x363c0000}, 
+    {0x36400000}, {0x36440000}, {0x36480000}, {0x364c0000}, 
+    {0x36500000}, {0x36540000}, {0x36580000}, {0x365c0000}, 
+    {0x36600000}, {0x36640000}, {0x36680000}, {0x366c0000}, 
+    {0x36700000}, {0x36740000}, {0x36780000}, {0x367c0000}, 
+    {0x36800000}, {0x36820000}, {0x36840000}, {0x36860000}, 
+    {0x36880000}, {0x368a0000}, {0x368c0000}, {0x368e0000}, 
+    {0x36900000}, {0x36920000}, {0x36940000}, {0x36960000}, 
+    {0x36980000}, {0x369a0000}, {0x369c0000}, {0x369e0000}, 
+    {0x36a00000}, {0x36a20000}, {0x36a40000}, {0x36a60000}, 
+    {0x36a80000}, {0x36aa0000}, {0x36ac0000}, {0x36ae0000}, 
+    {0x36b00000}, {0x36b20000}, {0x36b40000}, {0x36b60000}, 
+    {0x36b80000}, {0x36ba0000}, {0x36bc0000}, {0x36be0000}, 
+    {0x36c00000}, {0x36c20000}, {0x36c40000}, {0x36c60000}, 
+    {0x36c80000}, {0x36ca0000}, {0x36cc0000}, {0x36ce0000}, 
+    {0x36d00000}, {0x36d20000}, {0x36d40000}, {0x36d60000}, 
+    {0x36d80000}, {0x36da0000}, {0x36dc0000}, {0x36de0000}, 
+    {0x36e00000}, {0x36e20000}, {0x36e40000}, {0x36e60000}, 
+    {0x36e80000}, {0x36ea0000}, {0x36ec0000}, {0x36ee0000}, 
+    {0x36f00000}, {0x36f20000}, {0x36f40000}, {0x36f60000}, 
+    {0x36f80000}, {0x36fa0000}, {0x36fc0000}, {0x36fe0000}, 
+    {0x37000000}, {0x37010000}, {0x37020000}, {0x37030000}, 
+    {0x37040000}, {0x37050000}, {0x37060000}, {0x37070000}, 
+    {0x37080000}, {0x37090000}, {0x370a0000}, {0x370b0000}, 
+    {0x370c0000}, {0x370d0000}, {0x370e0000}, {0x370f0000}, 
+    {0x37100000}, {0x37110000}, {0x37120000}, {0x37130000}, 
+    {0x37140000}, {0x37150000}, {0x37160000}, {0x37170000}, 
+    {0x37180000}, {0x37190000}, {0x371a0000}, {0x371b0000}, 
+    {0x371c0000}, {0x371d0000}, {0x371e0000}, {0x371f0000}, 
+    {0x37200000}, {0x37210000}, {0x37220000}, {0x37230000}, 
+    {0x37240000}, {0x37250000}, {0x37260000}, {0x37270000}, 
+    {0x37280000}, {0x37290000}, {0x372a0000}, {0x372b0000}, 
+    {0x372c0000}, {0x372d0000}, {0x372e0000}, {0x372f0000}, 
+    {0x37300000}, {0x37310000}, {0x37320000}, {0x37330000}, 
+    {0x37340000}, {0x37350000}, {0x37360000}, {0x37370000}, 
+    {0x37380000}, {0x37390000}, {0x373a0000}, {0x373b0000}, 
+    {0x373c0000}, {0x373d0000}, {0x373e0000}, {0x373f0000}, 
+    {0x37400000}, {0x37410000}, {0x37420000}, {0x37430000}, 
+    {0x37440000}, {0x37450000}, {0x37460000}, {0x37470000}, 
+    {0x37480000}, {0x37490000}, {0x374a0000}, {0x374b0000}, 
+    {0x374c0000}, {0x374d0000}, {0x374e0000}, {0x374f0000}, 
+    {0x37500000}, {0x37510000}, {0x37520000}, {0x37530000}, 
+    {0x37540000}, {0x37550000}, {0x37560000}, {0x37570000}, 
+    {0x37580000}, {0x37590000}, {0x375a0000}, {0x375b0000}, 
+    {0x375c0000}, {0x375d0000}, {0x375e0000}, {0x375f0000}, 
+    {0x37600000}, {0x37610000}, {0x37620000}, {0x37630000}, 
+    {0x37640000}, {0x37650000}, {0x37660000}, {0x37670000}, 
+    {0x37680000}, {0x37690000}, {0x376a0000}, {0x376b0000}, 
+    {0x376c0000}, {0x376d0000}, {0x376e0000}, {0x376f0000}, 
+    {0x37700000}, {0x37710000}, {0x37720000}, {0x37730000}, 
+    {0x37740000}, {0x37750000}, {0x37760000}, {0x37770000}, 
+    {0x37780000}, {0x37790000}, {0x377a0000}, {0x377b0000}, 
+    {0x377c0000}, {0x377d0000}, {0x377e0000}, {0x377f0000}, 
+    {0x37800000}, {0x37808000}, {0x37810000}, {0x37818000}, 
+    {0x37820000}, {0x37828000}, {0x37830000}, {0x37838000}, 
+    {0x37840000}, {0x37848000}, {0x37850000}, {0x37858000}, 
+    {0x37860000}, {0x37868000}, {0x37870000}, {0x37878000}, 
+    {0x37880000}, {0x37888000}, {0x37890000}, {0x37898000}, 
+    {0x378a0000}, {0x378a8000}, {0x378b0000}, {0x378b8000}, 
+    {0x378c0000}, {0x378c8000}, {0x378d0000}, {0x378d8000}, 
+    {0x378e0000}, {0x378e8000}, {0x378f0000}, {0x378f8000}, 
+    {0x37900000}, {0x37908000}, {0x37910000}, {0x37918000}, 
+    {0x37920000}, {0x37928000}, {0x37930000}, {0x37938000}, 
+    {0x37940000}, {0x37948000}, {0x37950000}, {0x37958000}, 
+    {0x37960000}, {0x37968000}, {0x37970000}, {0x37978000}, 
+    {0x37980000}, {0x37988000}, {0x37990000}, {0x37998000}, 
+    {0x379a0000}, {0x379a8000}, {0x379b0000}, {0x379b8000}, 
+    {0x379c0000}, {0x379c8000}, {0x379d0000}, {0x379d8000}, 
+    {0x379e0000}, {0x379e8000}, {0x379f0000}, {0x379f8000}, 
+    {0x37a00000}, {0x37a08000}, {0x37a10000}, {0x37a18000}, 
+    {0x37a20000}, {0x37a28000}, {0x37a30000}, {0x37a38000}, 
+    {0x37a40000}, {0x37a48000}, {0x37a50000}, {0x37a58000}, 
+    {0x37a60000}, {0x37a68000}, {0x37a70000}, {0x37a78000}, 
+    {0x37a80000}, {0x37a88000}, {0x37a90000}, {0x37a98000}, 
+    {0x37aa0000}, {0x37aa8000}, {0x37ab0000}, {0x37ab8000}, 
+    {0x37ac0000}, {0x37ac8000}, {0x37ad0000}, {0x37ad8000}, 
+    {0x37ae0000}, {0x37ae8000}, {0x37af0000}, {0x37af8000}, 
+    {0x37b00000}, {0x37b08000}, {0x37b10000}, {0x37b18000}, 
+    {0x37b20000}, {0x37b28000}, {0x37b30000}, {0x37b38000}, 
+    {0x37b40000}, {0x37b48000}, {0x37b50000}, {0x37b58000}, 
+    {0x37b60000}, {0x37b68000}, {0x37b70000}, {0x37b78000}, 
+    {0x37b80000}, {0x37b88000}, {0x37b90000}, {0x37b98000}, 
+    {0x37ba0000}, {0x37ba8000}, {0x37bb0000}, {0x37bb8000}, 
+    {0x37bc0000}, {0x37bc8000}, {0x37bd0000}, {0x37bd8000}, 
+    {0x37be0000}, {0x37be8000}, {0x37bf0000}, {0x37bf8000}, 
+    {0x37c00000}, {0x37c08000}, {0x37c10000}, {0x37c18000}, 
+    {0x37c20000}, {0x37c28000}, {0x37c30000}, {0x37c38000}, 
+    {0x37c40000}, {0x37c48000}, {0x37c50000}, {0x37c58000}, 
+    {0x37c60000}, {0x37c68000}, {0x37c70000}, {0x37c78000}, 
+    {0x37c80000}, {0x37c88000}, {0x37c90000}, {0x37c98000}, 
+    {0x37ca0000}, {0x37ca8000}, {0x37cb0000}, {0x37cb8000}, 
+    {0x37cc0000}, {0x37cc8000}, {0x37cd0000}, {0x37cd8000}, 
+    {0x37ce0000}, {0x37ce8000}, {0x37cf0000}, {0x37cf8000}, 
+    {0x37d00000}, {0x37d08000}, {0x37d10000}, {0x37d18000}, 
+    {0x37d20000}, {0x37d28000}, {0x37d30000}, {0x37d38000}, 
+    {0x37d40000}, {0x37d48000}, {0x37d50000}, {0x37d58000}, 
+    {0x37d60000}, {0x37d68000}, {0x37d70000}, {0x37d78000}, 
+    {0x37d80000}, {0x37d88000}, {0x37d90000}, {0x37d98000}, 
+    {0x37da0000}, {0x37da8000}, {0x37db0000}, {0x37db8000}, 
+    {0x37dc0000}, {0x37dc8000}, {0x37dd0000}, {0x37dd8000}, 
+    {0x37de0000}, {0x37de8000}, {0x37df0000}, {0x37df8000}, 
+    {0x37e00000}, {0x37e08000}, {0x37e10000}, {0x37e18000}, 
+    {0x37e20000}, {0x37e28000}, {0x37e30000}, {0x37e38000}, 
+    {0x37e40000}, {0x37e48000}, {0x37e50000}, {0x37e58000}, 
+    {0x37e60000}, {0x37e68000}, {0x37e70000}, {0x37e78000}, 
+    {0x37e80000}, {0x37e88000}, {0x37e90000}, {0x37e98000}, 
+    {0x37ea0000}, {0x37ea8000}, {0x37eb0000}, {0x37eb8000}, 
+    {0x37ec0000}, {0x37ec8000}, {0x37ed0000}, {0x37ed8000}, 
+    {0x37ee0000}, {0x37ee8000}, {0x37ef0000}, {0x37ef8000}, 
+    {0x37f00000}, {0x37f08000}, {0x37f10000}, {0x37f18000}, 
+    {0x37f20000}, {0x37f28000}, {0x37f30000}, {0x37f38000}, 
+    {0x37f40000}, {0x37f48000}, {0x37f50000}, {0x37f58000}, 
+    {0x37f60000}, {0x37f68000}, {0x37f70000}, {0x37f78000}, 
+    {0x37f80000}, {0x37f88000}, {0x37f90000}, {0x37f98000}, 
+    {0x37fa0000}, {0x37fa8000}, {0x37fb0000}, {0x37fb8000}, 
+    {0x37fc0000}, {0x37fc8000}, {0x37fd0000}, {0x37fd8000}, 
+    {0x37fe0000}, {0x37fe8000}, {0x37ff0000}, {0x37ff8000}, 
+    {0x38000000}, {0x38004000}, {0x38008000}, {0x3800c000}, 
+    {0x38010000}, {0x38014000}, {0x38018000}, {0x3801c000}, 
+    {0x38020000}, {0x38024000}, {0x38028000}, {0x3802c000}, 
+    {0x38030000}, {0x38034000}, {0x38038000}, {0x3803c000}, 
+    {0x38040000}, {0x38044000}, {0x38048000}, {0x3804c000}, 
+    {0x38050000}, {0x38054000}, {0x38058000}, {0x3805c000}, 
+    {0x38060000}, {0x38064000}, {0x38068000}, {0x3806c000}, 
+    {0x38070000}, {0x38074000}, {0x38078000}, {0x3807c000}, 
+    {0x38080000}, {0x38084000}, {0x38088000}, {0x3808c000}, 
+    {0x38090000}, {0x38094000}, {0x38098000}, {0x3809c000}, 
+    {0x380a0000}, {0x380a4000}, {0x380a8000}, {0x380ac000}, 
+    {0x380b0000}, {0x380b4000}, {0x380b8000}, {0x380bc000}, 
+    {0x380c0000}, {0x380c4000}, {0x380c8000}, {0x380cc000}, 
+    {0x380d0000}, {0x380d4000}, {0x380d8000}, {0x380dc000}, 
+    {0x380e0000}, {0x380e4000}, {0x380e8000}, {0x380ec000}, 
+    {0x380f0000}, {0x380f4000}, {0x380f8000}, {0x380fc000}, 
+    {0x38100000}, {0x38104000}, {0x38108000}, {0x3810c000}, 
+    {0x38110000}, {0x38114000}, {0x38118000}, {0x3811c000}, 
+    {0x38120000}, {0x38124000}, {0x38128000}, {0x3812c000}, 
+    {0x38130000}, {0x38134000}, {0x38138000}, {0x3813c000}, 
+    {0x38140000}, {0x38144000}, {0x38148000}, {0x3814c000}, 
+    {0x38150000}, {0x38154000}, {0x38158000}, {0x3815c000}, 
+    {0x38160000}, {0x38164000}, {0x38168000}, {0x3816c000}, 
+    {0x38170000}, {0x38174000}, {0x38178000}, {0x3817c000}, 
+    {0x38180000}, {0x38184000}, {0x38188000}, {0x3818c000}, 
+    {0x38190000}, {0x38194000}, {0x38198000}, {0x3819c000}, 
+    {0x381a0000}, {0x381a4000}, {0x381a8000}, {0x381ac000}, 
+    {0x381b0000}, {0x381b4000}, {0x381b8000}, {0x381bc000}, 
+    {0x381c0000}, {0x381c4000}, {0x381c8000}, {0x381cc000}, 
+    {0x381d0000}, {0x381d4000}, {0x381d8000}, {0x381dc000}, 
+    {0x381e0000}, {0x381e4000}, {0x381e8000}, {0x381ec000}, 
+    {0x381f0000}, {0x381f4000}, {0x381f8000}, {0x381fc000}, 
+    {0x38200000}, {0x38204000}, {0x38208000}, {0x3820c000}, 
+    {0x38210000}, {0x38214000}, {0x38218000}, {0x3821c000}, 
+    {0x38220000}, {0x38224000}, {0x38228000}, {0x3822c000}, 
+    {0x38230000}, {0x38234000}, {0x38238000}, {0x3823c000}, 
+    {0x38240000}, {0x38244000}, {0x38248000}, {0x3824c000}, 
+    {0x38250000}, {0x38254000}, {0x38258000}, {0x3825c000}, 
+    {0x38260000}, {0x38264000}, {0x38268000}, {0x3826c000}, 
+    {0x38270000}, {0x38274000}, {0x38278000}, {0x3827c000}, 
+    {0x38280000}, {0x38284000}, {0x38288000}, {0x3828c000}, 
+    {0x38290000}, {0x38294000}, {0x38298000}, {0x3829c000}, 
+    {0x382a0000}, {0x382a4000}, {0x382a8000}, {0x382ac000}, 
+    {0x382b0000}, {0x382b4000}, {0x382b8000}, {0x382bc000}, 
+    {0x382c0000}, {0x382c4000}, {0x382c8000}, {0x382cc000}, 
+    {0x382d0000}, {0x382d4000}, {0x382d8000}, {0x382dc000}, 
+    {0x382e0000}, {0x382e4000}, {0x382e8000}, {0x382ec000}, 
+    {0x382f0000}, {0x382f4000}, {0x382f8000}, {0x382fc000}, 
+    {0x38300000}, {0x38304000}, {0x38308000}, {0x3830c000}, 
+    {0x38310000}, {0x38314000}, {0x38318000}, {0x3831c000}, 
+    {0x38320000}, {0x38324000}, {0x38328000}, {0x3832c000}, 
+    {0x38330000}, {0x38334000}, {0x38338000}, {0x3833c000}, 
+    {0x38340000}, {0x38344000}, {0x38348000}, {0x3834c000}, 
+    {0x38350000}, {0x38354000}, {0x38358000}, {0x3835c000}, 
+    {0x38360000}, {0x38364000}, {0x38368000}, {0x3836c000}, 
+    {0x38370000}, {0x38374000}, {0x38378000}, {0x3837c000}, 
+    {0x38380000}, {0x38384000}, {0x38388000}, {0x3838c000}, 
+    {0x38390000}, {0x38394000}, {0x38398000}, {0x3839c000}, 
+    {0x383a0000}, {0x383a4000}, {0x383a8000}, {0x383ac000}, 
+    {0x383b0000}, {0x383b4000}, {0x383b8000}, {0x383bc000}, 
+    {0x383c0000}, {0x383c4000}, {0x383c8000}, {0x383cc000}, 
+    {0x383d0000}, {0x383d4000}, {0x383d8000}, {0x383dc000}, 
+    {0x383e0000}, {0x383e4000}, {0x383e8000}, {0x383ec000}, 
+    {0x383f0000}, {0x383f4000}, {0x383f8000}, {0x383fc000}, 
+    {0x38400000}, {0x38404000}, {0x38408000}, {0x3840c000}, 
+    {0x38410000}, {0x38414000}, {0x38418000}, {0x3841c000}, 
+    {0x38420000}, {0x38424000}, {0x38428000}, {0x3842c000}, 
+    {0x38430000}, {0x38434000}, {0x38438000}, {0x3843c000}, 
+    {0x38440000}, {0x38444000}, {0x38448000}, {0x3844c000}, 
+    {0x38450000}, {0x38454000}, {0x38458000}, {0x3845c000}, 
+    {0x38460000}, {0x38464000}, {0x38468000}, {0x3846c000}, 
+    {0x38470000}, {0x38474000}, {0x38478000}, {0x3847c000}, 
+    {0x38480000}, {0x38484000}, {0x38488000}, {0x3848c000}, 
+    {0x38490000}, {0x38494000}, {0x38498000}, {0x3849c000}, 
+    {0x384a0000}, {0x384a4000}, {0x384a8000}, {0x384ac000}, 
+    {0x384b0000}, {0x384b4000}, {0x384b8000}, {0x384bc000}, 
+    {0x384c0000}, {0x384c4000}, {0x384c8000}, {0x384cc000}, 
+    {0x384d0000}, {0x384d4000}, {0x384d8000}, {0x384dc000}, 
+    {0x384e0000}, {0x384e4000}, {0x384e8000}, {0x384ec000}, 
+    {0x384f0000}, {0x384f4000}, {0x384f8000}, {0x384fc000}, 
+    {0x38500000}, {0x38504000}, {0x38508000}, {0x3850c000}, 
+    {0x38510000}, {0x38514000}, {0x38518000}, {0x3851c000}, 
+    {0x38520000}, {0x38524000}, {0x38528000}, {0x3852c000}, 
+    {0x38530000}, {0x38534000}, {0x38538000}, {0x3853c000}, 
+    {0x38540000}, {0x38544000}, {0x38548000}, {0x3854c000}, 
+    {0x38550000}, {0x38554000}, {0x38558000}, {0x3855c000}, 
+    {0x38560000}, {0x38564000}, {0x38568000}, {0x3856c000}, 
+    {0x38570000}, {0x38574000}, {0x38578000}, {0x3857c000}, 
+    {0x38580000}, {0x38584000}, {0x38588000}, {0x3858c000}, 
+    {0x38590000}, {0x38594000}, {0x38598000}, {0x3859c000}, 
+    {0x385a0000}, {0x385a4000}, {0x385a8000}, {0x385ac000}, 
+    {0x385b0000}, {0x385b4000}, {0x385b8000}, {0x385bc000}, 
+    {0x385c0000}, {0x385c4000}, {0x385c8000}, {0x385cc000}, 
+    {0x385d0000}, {0x385d4000}, {0x385d8000}, {0x385dc000}, 
+    {0x385e0000}, {0x385e4000}, {0x385e8000}, {0x385ec000}, 
+    {0x385f0000}, {0x385f4000}, {0x385f8000}, {0x385fc000}, 
+    {0x38600000}, {0x38604000}, {0x38608000}, {0x3860c000}, 
+    {0x38610000}, {0x38614000}, {0x38618000}, {0x3861c000}, 
+    {0x38620000}, {0x38624000}, {0x38628000}, {0x3862c000}, 
+    {0x38630000}, {0x38634000}, {0x38638000}, {0x3863c000}, 
+    {0x38640000}, {0x38644000}, {0x38648000}, {0x3864c000}, 
+    {0x38650000}, {0x38654000}, {0x38658000}, {0x3865c000}, 
+    {0x38660000}, {0x38664000}, {0x38668000}, {0x3866c000}, 
+    {0x38670000}, {0x38674000}, {0x38678000}, {0x3867c000}, 
+    {0x38680000}, {0x38684000}, {0x38688000}, {0x3868c000}, 
+    {0x38690000}, {0x38694000}, {0x38698000}, {0x3869c000}, 
+    {0x386a0000}, {0x386a4000}, {0x386a8000}, {0x386ac000}, 
+    {0x386b0000}, {0x386b4000}, {0x386b8000}, {0x386bc000}, 
+    {0x386c0000}, {0x386c4000}, {0x386c8000}, {0x386cc000}, 
+    {0x386d0000}, {0x386d4000}, {0x386d8000}, {0x386dc000}, 
+    {0x386e0000}, {0x386e4000}, {0x386e8000}, {0x386ec000}, 
+    {0x386f0000}, {0x386f4000}, {0x386f8000}, {0x386fc000}, 
+    {0x38700000}, {0x38704000}, {0x38708000}, {0x3870c000}, 
+    {0x38710000}, {0x38714000}, {0x38718000}, {0x3871c000}, 
+    {0x38720000}, {0x38724000}, {0x38728000}, {0x3872c000}, 
+    {0x38730000}, {0x38734000}, {0x38738000}, {0x3873c000}, 
+    {0x38740000}, {0x38744000}, {0x38748000}, {0x3874c000}, 
+    {0x38750000}, {0x38754000}, {0x38758000}, {0x3875c000}, 
+    {0x38760000}, {0x38764000}, {0x38768000}, {0x3876c000}, 
+    {0x38770000}, {0x38774000}, {0x38778000}, {0x3877c000}, 
+    {0x38780000}, {0x38784000}, {0x38788000}, {0x3878c000}, 
+    {0x38790000}, {0x38794000}, {0x38798000}, {0x3879c000}, 
+    {0x387a0000}, {0x387a4000}, {0x387a8000}, {0x387ac000}, 
+    {0x387b0000}, {0x387b4000}, {0x387b8000}, {0x387bc000}, 
+    {0x387c0000}, {0x387c4000}, {0x387c8000}, {0x387cc000}, 
+    {0x387d0000}, {0x387d4000}, {0x387d8000}, {0x387dc000}, 
+    {0x387e0000}, {0x387e4000}, {0x387e8000}, {0x387ec000}, 
+    {0x387f0000}, {0x387f4000}, {0x387f8000}, {0x387fc000}, 
+    {0x38800000}, {0x38802000}, {0x38804000}, {0x38806000}, 
+    {0x38808000}, {0x3880a000}, {0x3880c000}, {0x3880e000}, 
+    {0x38810000}, {0x38812000}, {0x38814000}, {0x38816000}, 
+    {0x38818000}, {0x3881a000}, {0x3881c000}, {0x3881e000}, 
+    {0x38820000}, {0x38822000}, {0x38824000}, {0x38826000}, 
+    {0x38828000}, {0x3882a000}, {0x3882c000}, {0x3882e000}, 
+    {0x38830000}, {0x38832000}, {0x38834000}, {0x38836000}, 
+    {0x38838000}, {0x3883a000}, {0x3883c000}, {0x3883e000}, 
+    {0x38840000}, {0x38842000}, {0x38844000}, {0x38846000}, 
+    {0x38848000}, {0x3884a000}, {0x3884c000}, {0x3884e000}, 
+    {0x38850000}, {0x38852000}, {0x38854000}, {0x38856000}, 
+    {0x38858000}, {0x3885a000}, {0x3885c000}, {0x3885e000}, 
+    {0x38860000}, {0x38862000}, {0x38864000}, {0x38866000}, 
+    {0x38868000}, {0x3886a000}, {0x3886c000}, {0x3886e000}, 
+    {0x38870000}, {0x38872000}, {0x38874000}, {0x38876000}, 
+    {0x38878000}, {0x3887a000}, {0x3887c000}, {0x3887e000}, 
+    {0x38880000}, {0x38882000}, {0x38884000}, {0x38886000}, 
+    {0x38888000}, {0x3888a000}, {0x3888c000}, {0x3888e000}, 
+    {0x38890000}, {0x38892000}, {0x38894000}, {0x38896000}, 
+    {0x38898000}, {0x3889a000}, {0x3889c000}, {0x3889e000}, 
+    {0x388a0000}, {0x388a2000}, {0x388a4000}, {0x388a6000}, 
+    {0x388a8000}, {0x388aa000}, {0x388ac000}, {0x388ae000}, 
+    {0x388b0000}, {0x388b2000}, {0x388b4000}, {0x388b6000}, 
+    {0x388b8000}, {0x388ba000}, {0x388bc000}, {0x388be000}, 
+    {0x388c0000}, {0x388c2000}, {0x388c4000}, {0x388c6000}, 
+    {0x388c8000}, {0x388ca000}, {0x388cc000}, {0x388ce000}, 
+    {0x388d0000}, {0x388d2000}, {0x388d4000}, {0x388d6000}, 
+    {0x388d8000}, {0x388da000}, {0x388dc000}, {0x388de000}, 
+    {0x388e0000}, {0x388e2000}, {0x388e4000}, {0x388e6000}, 
+    {0x388e8000}, {0x388ea000}, {0x388ec000}, {0x388ee000}, 
+    {0x388f0000}, {0x388f2000}, {0x388f4000}, {0x388f6000}, 
+    {0x388f8000}, {0x388fa000}, {0x388fc000}, {0x388fe000}, 
+    {0x38900000}, {0x38902000}, {0x38904000}, {0x38906000}, 
+    {0x38908000}, {0x3890a000}, {0x3890c000}, {0x3890e000}, 
+    {0x38910000}, {0x38912000}, {0x38914000}, {0x38916000}, 
+    {0x38918000}, {0x3891a000}, {0x3891c000}, {0x3891e000}, 
+    {0x38920000}, {0x38922000}, {0x38924000}, {0x38926000}, 
+    {0x38928000}, {0x3892a000}, {0x3892c000}, {0x3892e000}, 
+    {0x38930000}, {0x38932000}, {0x38934000}, {0x38936000}, 
+    {0x38938000}, {0x3893a000}, {0x3893c000}, {0x3893e000}, 
+    {0x38940000}, {0x38942000}, {0x38944000}, {0x38946000}, 
+    {0x38948000}, {0x3894a000}, {0x3894c000}, {0x3894e000}, 
+    {0x38950000}, {0x38952000}, {0x38954000}, {0x38956000}, 
+    {0x38958000}, {0x3895a000}, {0x3895c000}, {0x3895e000}, 
+    {0x38960000}, {0x38962000}, {0x38964000}, {0x38966000}, 
+    {0x38968000}, {0x3896a000}, {0x3896c000}, {0x3896e000}, 
+    {0x38970000}, {0x38972000}, {0x38974000}, {0x38976000}, 
+    {0x38978000}, {0x3897a000}, {0x3897c000}, {0x3897e000}, 
+    {0x38980000}, {0x38982000}, {0x38984000}, {0x38986000}, 
+    {0x38988000}, {0x3898a000}, {0x3898c000}, {0x3898e000}, 
+    {0x38990000}, {0x38992000}, {0x38994000}, {0x38996000}, 
+    {0x38998000}, {0x3899a000}, {0x3899c000}, {0x3899e000}, 
+    {0x389a0000}, {0x389a2000}, {0x389a4000}, {0x389a6000}, 
+    {0x389a8000}, {0x389aa000}, {0x389ac000}, {0x389ae000}, 
+    {0x389b0000}, {0x389b2000}, {0x389b4000}, {0x389b6000}, 
+    {0x389b8000}, {0x389ba000}, {0x389bc000}, {0x389be000}, 
+    {0x389c0000}, {0x389c2000}, {0x389c4000}, {0x389c6000}, 
+    {0x389c8000}, {0x389ca000}, {0x389cc000}, {0x389ce000}, 
+    {0x389d0000}, {0x389d2000}, {0x389d4000}, {0x389d6000}, 
+    {0x389d8000}, {0x389da000}, {0x389dc000}, {0x389de000}, 
+    {0x389e0000}, {0x389e2000}, {0x389e4000}, {0x389e6000}, 
+    {0x389e8000}, {0x389ea000}, {0x389ec000}, {0x389ee000}, 
+    {0x389f0000}, {0x389f2000}, {0x389f4000}, {0x389f6000}, 
+    {0x389f8000}, {0x389fa000}, {0x389fc000}, {0x389fe000}, 
+    {0x38a00000}, {0x38a02000}, {0x38a04000}, {0x38a06000}, 
+    {0x38a08000}, {0x38a0a000}, {0x38a0c000}, {0x38a0e000}, 
+    {0x38a10000}, {0x38a12000}, {0x38a14000}, {0x38a16000}, 
+    {0x38a18000}, {0x38a1a000}, {0x38a1c000}, {0x38a1e000}, 
+    {0x38a20000}, {0x38a22000}, {0x38a24000}, {0x38a26000}, 
+    {0x38a28000}, {0x38a2a000}, {0x38a2c000}, {0x38a2e000}, 
+    {0x38a30000}, {0x38a32000}, {0x38a34000}, {0x38a36000}, 
+    {0x38a38000}, {0x38a3a000}, {0x38a3c000}, {0x38a3e000}, 
+    {0x38a40000}, {0x38a42000}, {0x38a44000}, {0x38a46000}, 
+    {0x38a48000}, {0x38a4a000}, {0x38a4c000}, {0x38a4e000}, 
+    {0x38a50000}, {0x38a52000}, {0x38a54000}, {0x38a56000}, 
+    {0x38a58000}, {0x38a5a000}, {0x38a5c000}, {0x38a5e000}, 
+    {0x38a60000}, {0x38a62000}, {0x38a64000}, {0x38a66000}, 
+    {0x38a68000}, {0x38a6a000}, {0x38a6c000}, {0x38a6e000}, 
+    {0x38a70000}, {0x38a72000}, {0x38a74000}, {0x38a76000}, 
+    {0x38a78000}, {0x38a7a000}, {0x38a7c000}, {0x38a7e000}, 
+    {0x38a80000}, {0x38a82000}, {0x38a84000}, {0x38a86000}, 
+    {0x38a88000}, {0x38a8a000}, {0x38a8c000}, {0x38a8e000}, 
+    {0x38a90000}, {0x38a92000}, {0x38a94000}, {0x38a96000}, 
+    {0x38a98000}, {0x38a9a000}, {0x38a9c000}, {0x38a9e000}, 
+    {0x38aa0000}, {0x38aa2000}, {0x38aa4000}, {0x38aa6000}, 
+    {0x38aa8000}, {0x38aaa000}, {0x38aac000}, {0x38aae000}, 
+    {0x38ab0000}, {0x38ab2000}, {0x38ab4000}, {0x38ab6000}, 
+    {0x38ab8000}, {0x38aba000}, {0x38abc000}, {0x38abe000}, 
+    {0x38ac0000}, {0x38ac2000}, {0x38ac4000}, {0x38ac6000}, 
+    {0x38ac8000}, {0x38aca000}, {0x38acc000}, {0x38ace000}, 
+    {0x38ad0000}, {0x38ad2000}, {0x38ad4000}, {0x38ad6000}, 
+    {0x38ad8000}, {0x38ada000}, {0x38adc000}, {0x38ade000}, 
+    {0x38ae0000}, {0x38ae2000}, {0x38ae4000}, {0x38ae6000}, 
+    {0x38ae8000}, {0x38aea000}, {0x38aec000}, {0x38aee000}, 
+    {0x38af0000}, {0x38af2000}, {0x38af4000}, {0x38af6000}, 
+    {0x38af8000}, {0x38afa000}, {0x38afc000}, {0x38afe000}, 
+    {0x38b00000}, {0x38b02000}, {0x38b04000}, {0x38b06000}, 
+    {0x38b08000}, {0x38b0a000}, {0x38b0c000}, {0x38b0e000}, 
+    {0x38b10000}, {0x38b12000}, {0x38b14000}, {0x38b16000}, 
+    {0x38b18000}, {0x38b1a000}, {0x38b1c000}, {0x38b1e000}, 
+    {0x38b20000}, {0x38b22000}, {0x38b24000}, {0x38b26000}, 
+    {0x38b28000}, {0x38b2a000}, {0x38b2c000}, {0x38b2e000}, 
+    {0x38b30000}, {0x38b32000}, {0x38b34000}, {0x38b36000}, 
+    {0x38b38000}, {0x38b3a000}, {0x38b3c000}, {0x38b3e000}, 
+    {0x38b40000}, {0x38b42000}, {0x38b44000}, {0x38b46000}, 
+    {0x38b48000}, {0x38b4a000}, {0x38b4c000}, {0x38b4e000}, 
+    {0x38b50000}, {0x38b52000}, {0x38b54000}, {0x38b56000}, 
+    {0x38b58000}, {0x38b5a000}, {0x38b5c000}, {0x38b5e000}, 
+    {0x38b60000}, {0x38b62000}, {0x38b64000}, {0x38b66000}, 
+    {0x38b68000}, {0x38b6a000}, {0x38b6c000}, {0x38b6e000}, 
+    {0x38b70000}, {0x38b72000}, {0x38b74000}, {0x38b76000}, 
+    {0x38b78000}, {0x38b7a000}, {0x38b7c000}, {0x38b7e000}, 
+    {0x38b80000}, {0x38b82000}, {0x38b84000}, {0x38b86000}, 
+    {0x38b88000}, {0x38b8a000}, {0x38b8c000}, {0x38b8e000}, 
+    {0x38b90000}, {0x38b92000}, {0x38b94000}, {0x38b96000}, 
+    {0x38b98000}, {0x38b9a000}, {0x38b9c000}, {0x38b9e000}, 
+    {0x38ba0000}, {0x38ba2000}, {0x38ba4000}, {0x38ba6000}, 
+    {0x38ba8000}, {0x38baa000}, {0x38bac000}, {0x38bae000}, 
+    {0x38bb0000}, {0x38bb2000}, {0x38bb4000}, {0x38bb6000}, 
+    {0x38bb8000}, {0x38bba000}, {0x38bbc000}, {0x38bbe000}, 
+    {0x38bc0000}, {0x38bc2000}, {0x38bc4000}, {0x38bc6000}, 
+    {0x38bc8000}, {0x38bca000}, {0x38bcc000}, {0x38bce000}, 
+    {0x38bd0000}, {0x38bd2000}, {0x38bd4000}, {0x38bd6000}, 
+    {0x38bd8000}, {0x38bda000}, {0x38bdc000}, {0x38bde000}, 
+    {0x38be0000}, {0x38be2000}, {0x38be4000}, {0x38be6000}, 
+    {0x38be8000}, {0x38bea000}, {0x38bec000}, {0x38bee000}, 
+    {0x38bf0000}, {0x38bf2000}, {0x38bf4000}, {0x38bf6000}, 
+    {0x38bf8000}, {0x38bfa000}, {0x38bfc000}, {0x38bfe000}, 
+    {0x38c00000}, {0x38c02000}, {0x38c04000}, {0x38c06000}, 
+    {0x38c08000}, {0x38c0a000}, {0x38c0c000}, {0x38c0e000}, 
+    {0x38c10000}, {0x38c12000}, {0x38c14000}, {0x38c16000}, 
+    {0x38c18000}, {0x38c1a000}, {0x38c1c000}, {0x38c1e000}, 
+    {0x38c20000}, {0x38c22000}, {0x38c24000}, {0x38c26000}, 
+    {0x38c28000}, {0x38c2a000}, {0x38c2c000}, {0x38c2e000}, 
+    {0x38c30000}, {0x38c32000}, {0x38c34000}, {0x38c36000}, 
+    {0x38c38000}, {0x38c3a000}, {0x38c3c000}, {0x38c3e000}, 
+    {0x38c40000}, {0x38c42000}, {0x38c44000}, {0x38c46000}, 
+    {0x38c48000}, {0x38c4a000}, {0x38c4c000}, {0x38c4e000}, 
+    {0x38c50000}, {0x38c52000}, {0x38c54000}, {0x38c56000}, 
+    {0x38c58000}, {0x38c5a000}, {0x38c5c000}, {0x38c5e000}, 
+    {0x38c60000}, {0x38c62000}, {0x38c64000}, {0x38c66000}, 
+    {0x38c68000}, {0x38c6a000}, {0x38c6c000}, {0x38c6e000}, 
+    {0x38c70000}, {0x38c72000}, {0x38c74000}, {0x38c76000}, 
+    {0x38c78000}, {0x38c7a000}, {0x38c7c000}, {0x38c7e000}, 
+    {0x38c80000}, {0x38c82000}, {0x38c84000}, {0x38c86000}, 
+    {0x38c88000}, {0x38c8a000}, {0x38c8c000}, {0x38c8e000}, 
+    {0x38c90000}, {0x38c92000}, {0x38c94000}, {0x38c96000}, 
+    {0x38c98000}, {0x38c9a000}, {0x38c9c000}, {0x38c9e000}, 
+    {0x38ca0000}, {0x38ca2000}, {0x38ca4000}, {0x38ca6000}, 
+    {0x38ca8000}, {0x38caa000}, {0x38cac000}, {0x38cae000}, 
+    {0x38cb0000}, {0x38cb2000}, {0x38cb4000}, {0x38cb6000}, 
+    {0x38cb8000}, {0x38cba000}, {0x38cbc000}, {0x38cbe000}, 
+    {0x38cc0000}, {0x38cc2000}, {0x38cc4000}, {0x38cc6000}, 
+    {0x38cc8000}, {0x38cca000}, {0x38ccc000}, {0x38cce000}, 
+    {0x38cd0000}, {0x38cd2000}, {0x38cd4000}, {0x38cd6000}, 
+    {0x38cd8000}, {0x38cda000}, {0x38cdc000}, {0x38cde000}, 
+    {0x38ce0000}, {0x38ce2000}, {0x38ce4000}, {0x38ce6000}, 
+    {0x38ce8000}, {0x38cea000}, {0x38cec000}, {0x38cee000}, 
+    {0x38cf0000}, {0x38cf2000}, {0x38cf4000}, {0x38cf6000}, 
+    {0x38cf8000}, {0x38cfa000}, {0x38cfc000}, {0x38cfe000}, 
+    {0x38d00000}, {0x38d02000}, {0x38d04000}, {0x38d06000}, 
+    {0x38d08000}, {0x38d0a000}, {0x38d0c000}, {0x38d0e000}, 
+    {0x38d10000}, {0x38d12000}, {0x38d14000}, {0x38d16000}, 
+    {0x38d18000}, {0x38d1a000}, {0x38d1c000}, {0x38d1e000}, 
+    {0x38d20000}, {0x38d22000}, {0x38d24000}, {0x38d26000}, 
+    {0x38d28000}, {0x38d2a000}, {0x38d2c000}, {0x38d2e000}, 
+    {0x38d30000}, {0x38d32000}, {0x38d34000}, {0x38d36000}, 
+    {0x38d38000}, {0x38d3a000}, {0x38d3c000}, {0x38d3e000}, 
+    {0x38d40000}, {0x38d42000}, {0x38d44000}, {0x38d46000}, 
+    {0x38d48000}, {0x38d4a000}, {0x38d4c000}, {0x38d4e000}, 
+    {0x38d50000}, {0x38d52000}, {0x38d54000}, {0x38d56000}, 
+    {0x38d58000}, {0x38d5a000}, {0x38d5c000}, {0x38d5e000}, 
+    {0x38d60000}, {0x38d62000}, {0x38d64000}, {0x38d66000}, 
+    {0x38d68000}, {0x38d6a000}, {0x38d6c000}, {0x38d6e000}, 
+    {0x38d70000}, {0x38d72000}, {0x38d74000}, {0x38d76000}, 
+    {0x38d78000}, {0x38d7a000}, {0x38d7c000}, {0x38d7e000}, 
+    {0x38d80000}, {0x38d82000}, {0x38d84000}, {0x38d86000}, 
+    {0x38d88000}, {0x38d8a000}, {0x38d8c000}, {0x38d8e000}, 
+    {0x38d90000}, {0x38d92000}, {0x38d94000}, {0x38d96000}, 
+    {0x38d98000}, {0x38d9a000}, {0x38d9c000}, {0x38d9e000}, 
+    {0x38da0000}, {0x38da2000}, {0x38da4000}, {0x38da6000}, 
+    {0x38da8000}, {0x38daa000}, {0x38dac000}, {0x38dae000}, 
+    {0x38db0000}, {0x38db2000}, {0x38db4000}, {0x38db6000}, 
+    {0x38db8000}, {0x38dba000}, {0x38dbc000}, {0x38dbe000}, 
+    {0x38dc0000}, {0x38dc2000}, {0x38dc4000}, {0x38dc6000}, 
+    {0x38dc8000}, {0x38dca000}, {0x38dcc000}, {0x38dce000}, 
+    {0x38dd0000}, {0x38dd2000}, {0x38dd4000}, {0x38dd6000}, 
+    {0x38dd8000}, {0x38dda000}, {0x38ddc000}, {0x38dde000}, 
+    {0x38de0000}, {0x38de2000}, {0x38de4000}, {0x38de6000}, 
+    {0x38de8000}, {0x38dea000}, {0x38dec000}, {0x38dee000}, 
+    {0x38df0000}, {0x38df2000}, {0x38df4000}, {0x38df6000}, 
+    {0x38df8000}, {0x38dfa000}, {0x38dfc000}, {0x38dfe000}, 
+    {0x38e00000}, {0x38e02000}, {0x38e04000}, {0x38e06000}, 
+    {0x38e08000}, {0x38e0a000}, {0x38e0c000}, {0x38e0e000}, 
+    {0x38e10000}, {0x38e12000}, {0x38e14000}, {0x38e16000}, 
+    {0x38e18000}, {0x38e1a000}, {0x38e1c000}, {0x38e1e000}, 
+    {0x38e20000}, {0x38e22000}, {0x38e24000}, {0x38e26000}, 
+    {0x38e28000}, {0x38e2a000}, {0x38e2c000}, {0x38e2e000}, 
+    {0x38e30000}, {0x38e32000}, {0x38e34000}, {0x38e36000}, 
+    {0x38e38000}, {0x38e3a000}, {0x38e3c000}, {0x38e3e000}, 
+    {0x38e40000}, {0x38e42000}, {0x38e44000}, {0x38e46000}, 
+    {0x38e48000}, {0x38e4a000}, {0x38e4c000}, {0x38e4e000}, 
+    {0x38e50000}, {0x38e52000}, {0x38e54000}, {0x38e56000}, 
+    {0x38e58000}, {0x38e5a000}, {0x38e5c000}, {0x38e5e000}, 
+    {0x38e60000}, {0x38e62000}, {0x38e64000}, {0x38e66000}, 
+    {0x38e68000}, {0x38e6a000}, {0x38e6c000}, {0x38e6e000}, 
+    {0x38e70000}, {0x38e72000}, {0x38e74000}, {0x38e76000}, 
+    {0x38e78000}, {0x38e7a000}, {0x38e7c000}, {0x38e7e000}, 
+    {0x38e80000}, {0x38e82000}, {0x38e84000}, {0x38e86000}, 
+    {0x38e88000}, {0x38e8a000}, {0x38e8c000}, {0x38e8e000}, 
+    {0x38e90000}, {0x38e92000}, {0x38e94000}, {0x38e96000}, 
+    {0x38e98000}, {0x38e9a000}, {0x38e9c000}, {0x38e9e000}, 
+    {0x38ea0000}, {0x38ea2000}, {0x38ea4000}, {0x38ea6000}, 
+    {0x38ea8000}, {0x38eaa000}, {0x38eac000}, {0x38eae000}, 
+    {0x38eb0000}, {0x38eb2000}, {0x38eb4000}, {0x38eb6000}, 
+    {0x38eb8000}, {0x38eba000}, {0x38ebc000}, {0x38ebe000}, 
+    {0x38ec0000}, {0x38ec2000}, {0x38ec4000}, {0x38ec6000}, 
+    {0x38ec8000}, {0x38eca000}, {0x38ecc000}, {0x38ece000}, 
+    {0x38ed0000}, {0x38ed2000}, {0x38ed4000}, {0x38ed6000}, 
+    {0x38ed8000}, {0x38eda000}, {0x38edc000}, {0x38ede000}, 
+    {0x38ee0000}, {0x38ee2000}, {0x38ee4000}, {0x38ee6000}, 
+    {0x38ee8000}, {0x38eea000}, {0x38eec000}, {0x38eee000}, 
+    {0x38ef0000}, {0x38ef2000}, {0x38ef4000}, {0x38ef6000}, 
+    {0x38ef8000}, {0x38efa000}, {0x38efc000}, {0x38efe000}, 
+    {0x38f00000}, {0x38f02000}, {0x38f04000}, {0x38f06000}, 
+    {0x38f08000}, {0x38f0a000}, {0x38f0c000}, {0x38f0e000}, 
+    {0x38f10000}, {0x38f12000}, {0x38f14000}, {0x38f16000}, 
+    {0x38f18000}, {0x38f1a000}, {0x38f1c000}, {0x38f1e000}, 
+    {0x38f20000}, {0x38f22000}, {0x38f24000}, {0x38f26000}, 
+    {0x38f28000}, {0x38f2a000}, {0x38f2c000}, {0x38f2e000}, 
+    {0x38f30000}, {0x38f32000}, {0x38f34000}, {0x38f36000}, 
+    {0x38f38000}, {0x38f3a000}, {0x38f3c000}, {0x38f3e000}, 
+    {0x38f40000}, {0x38f42000}, {0x38f44000}, {0x38f46000}, 
+    {0x38f48000}, {0x38f4a000}, {0x38f4c000}, {0x38f4e000}, 
+    {0x38f50000}, {0x38f52000}, {0x38f54000}, {0x38f56000}, 
+    {0x38f58000}, {0x38f5a000}, {0x38f5c000}, {0x38f5e000}, 
+    {0x38f60000}, {0x38f62000}, {0x38f64000}, {0x38f66000}, 
+    {0x38f68000}, {0x38f6a000}, {0x38f6c000}, {0x38f6e000}, 
+    {0x38f70000}, {0x38f72000}, {0x38f74000}, {0x38f76000}, 
+    {0x38f78000}, {0x38f7a000}, {0x38f7c000}, {0x38f7e000}, 
+    {0x38f80000}, {0x38f82000}, {0x38f84000}, {0x38f86000}, 
+    {0x38f88000}, {0x38f8a000}, {0x38f8c000}, {0x38f8e000}, 
+    {0x38f90000}, {0x38f92000}, {0x38f94000}, {0x38f96000}, 
+    {0x38f98000}, {0x38f9a000}, {0x38f9c000}, {0x38f9e000}, 
+    {0x38fa0000}, {0x38fa2000}, {0x38fa4000}, {0x38fa6000}, 
+    {0x38fa8000}, {0x38faa000}, {0x38fac000}, {0x38fae000}, 
+    {0x38fb0000}, {0x38fb2000}, {0x38fb4000}, {0x38fb6000}, 
+    {0x38fb8000}, {0x38fba000}, {0x38fbc000}, {0x38fbe000}, 
+    {0x38fc0000}, {0x38fc2000}, {0x38fc4000}, {0x38fc6000}, 
+    {0x38fc8000}, {0x38fca000}, {0x38fcc000}, {0x38fce000}, 
+    {0x38fd0000}, {0x38fd2000}, {0x38fd4000}, {0x38fd6000}, 
+    {0x38fd8000}, {0x38fda000}, {0x38fdc000}, {0x38fde000}, 
+    {0x38fe0000}, {0x38fe2000}, {0x38fe4000}, {0x38fe6000}, 
+    {0x38fe8000}, {0x38fea000}, {0x38fec000}, {0x38fee000}, 
+    {0x38ff0000}, {0x38ff2000}, {0x38ff4000}, {0x38ff6000}, 
+    {0x38ff8000}, {0x38ffa000}, {0x38ffc000}, {0x38ffe000}, 
+    {0x39000000}, {0x39002000}, {0x39004000}, {0x39006000}, 
+    {0x39008000}, {0x3900a000}, {0x3900c000}, {0x3900e000}, 
+    {0x39010000}, {0x39012000}, {0x39014000}, {0x39016000}, 
+    {0x39018000}, {0x3901a000}, {0x3901c000}, {0x3901e000}, 
+    {0x39020000}, {0x39022000}, {0x39024000}, {0x39026000}, 
+    {0x39028000}, {0x3902a000}, {0x3902c000}, {0x3902e000}, 
+    {0x39030000}, {0x39032000}, {0x39034000}, {0x39036000}, 
+    {0x39038000}, {0x3903a000}, {0x3903c000}, {0x3903e000}, 
+    {0x39040000}, {0x39042000}, {0x39044000}, {0x39046000}, 
+    {0x39048000}, {0x3904a000}, {0x3904c000}, {0x3904e000}, 
+    {0x39050000}, {0x39052000}, {0x39054000}, {0x39056000}, 
+    {0x39058000}, {0x3905a000}, {0x3905c000}, {0x3905e000}, 
+    {0x39060000}, {0x39062000}, {0x39064000}, {0x39066000}, 
+    {0x39068000}, {0x3906a000}, {0x3906c000}, {0x3906e000}, 
+    {0x39070000}, {0x39072000}, {0x39074000}, {0x39076000}, 
+    {0x39078000}, {0x3907a000}, {0x3907c000}, {0x3907e000}, 
+    {0x39080000}, {0x39082000}, {0x39084000}, {0x39086000}, 
+    {0x39088000}, {0x3908a000}, {0x3908c000}, {0x3908e000}, 
+    {0x39090000}, {0x39092000}, {0x39094000}, {0x39096000}, 
+    {0x39098000}, {0x3909a000}, {0x3909c000}, {0x3909e000}, 
+    {0x390a0000}, {0x390a2000}, {0x390a4000}, {0x390a6000}, 
+    {0x390a8000}, {0x390aa000}, {0x390ac000}, {0x390ae000}, 
+    {0x390b0000}, {0x390b2000}, {0x390b4000}, {0x390b6000}, 
+    {0x390b8000}, {0x390ba000}, {0x390bc000}, {0x390be000}, 
+    {0x390c0000}, {0x390c2000}, {0x390c4000}, {0x390c6000}, 
+    {0x390c8000}, {0x390ca000}, {0x390cc000}, {0x390ce000}, 
+    {0x390d0000}, {0x390d2000}, {0x390d4000}, {0x390d6000}, 
+    {0x390d8000}, {0x390da000}, {0x390dc000}, {0x390de000}, 
+    {0x390e0000}, {0x390e2000}, {0x390e4000}, {0x390e6000}, 
+    {0x390e8000}, {0x390ea000}, {0x390ec000}, {0x390ee000}, 
+    {0x390f0000}, {0x390f2000}, {0x390f4000}, {0x390f6000}, 
+    {0x390f8000}, {0x390fa000}, {0x390fc000}, {0x390fe000}, 
+    {0x39100000}, {0x39102000}, {0x39104000}, {0x39106000}, 
+    {0x39108000}, {0x3910a000}, {0x3910c000}, {0x3910e000}, 
+    {0x39110000}, {0x39112000}, {0x39114000}, {0x39116000}, 
+    {0x39118000}, {0x3911a000}, {0x3911c000}, {0x3911e000}, 
+    {0x39120000}, {0x39122000}, {0x39124000}, {0x39126000}, 
+    {0x39128000}, {0x3912a000}, {0x3912c000}, {0x3912e000}, 
+    {0x39130000}, {0x39132000}, {0x39134000}, {0x39136000}, 
+    {0x39138000}, {0x3913a000}, {0x3913c000}, {0x3913e000}, 
+    {0x39140000}, {0x39142000}, {0x39144000}, {0x39146000}, 
+    {0x39148000}, {0x3914a000}, {0x3914c000}, {0x3914e000}, 
+    {0x39150000}, {0x39152000}, {0x39154000}, {0x39156000}, 
+    {0x39158000}, {0x3915a000}, {0x3915c000}, {0x3915e000}, 
+    {0x39160000}, {0x39162000}, {0x39164000}, {0x39166000}, 
+    {0x39168000}, {0x3916a000}, {0x3916c000}, {0x3916e000}, 
+    {0x39170000}, {0x39172000}, {0x39174000}, {0x39176000}, 
+    {0x39178000}, {0x3917a000}, {0x3917c000}, {0x3917e000}, 
+    {0x39180000}, {0x39182000}, {0x39184000}, {0x39186000}, 
+    {0x39188000}, {0x3918a000}, {0x3918c000}, {0x3918e000}, 
+    {0x39190000}, {0x39192000}, {0x39194000}, {0x39196000}, 
+    {0x39198000}, {0x3919a000}, {0x3919c000}, {0x3919e000}, 
+    {0x391a0000}, {0x391a2000}, {0x391a4000}, {0x391a6000}, 
+    {0x391a8000}, {0x391aa000}, {0x391ac000}, {0x391ae000}, 
+    {0x391b0000}, {0x391b2000}, {0x391b4000}, {0x391b6000}, 
+    {0x391b8000}, {0x391ba000}, {0x391bc000}, {0x391be000}, 
+    {0x391c0000}, {0x391c2000}, {0x391c4000}, {0x391c6000}, 
+    {0x391c8000}, {0x391ca000}, {0x391cc000}, {0x391ce000}, 
+    {0x391d0000}, {0x391d2000}, {0x391d4000}, {0x391d6000}, 
+    {0x391d8000}, {0x391da000}, {0x391dc000}, {0x391de000}, 
+    {0x391e0000}, {0x391e2000}, {0x391e4000}, {0x391e6000}, 
+    {0x391e8000}, {0x391ea000}, {0x391ec000}, {0x391ee000}, 
+    {0x391f0000}, {0x391f2000}, {0x391f4000}, {0x391f6000}, 
+    {0x391f8000}, {0x391fa000}, {0x391fc000}, {0x391fe000}, 
+    {0x39200000}, {0x39202000}, {0x39204000}, {0x39206000}, 
+    {0x39208000}, {0x3920a000}, {0x3920c000}, {0x3920e000}, 
+    {0x39210000}, {0x39212000}, {0x39214000}, {0x39216000}, 
+    {0x39218000}, {0x3921a000}, {0x3921c000}, {0x3921e000}, 
+    {0x39220000}, {0x39222000}, {0x39224000}, {0x39226000}, 
+    {0x39228000}, {0x3922a000}, {0x3922c000}, {0x3922e000}, 
+    {0x39230000}, {0x39232000}, {0x39234000}, {0x39236000}, 
+    {0x39238000}, {0x3923a000}, {0x3923c000}, {0x3923e000}, 
+    {0x39240000}, {0x39242000}, {0x39244000}, {0x39246000}, 
+    {0x39248000}, {0x3924a000}, {0x3924c000}, {0x3924e000}, 
+    {0x39250000}, {0x39252000}, {0x39254000}, {0x39256000}, 
+    {0x39258000}, {0x3925a000}, {0x3925c000}, {0x3925e000}, 
+    {0x39260000}, {0x39262000}, {0x39264000}, {0x39266000}, 
+    {0x39268000}, {0x3926a000}, {0x3926c000}, {0x3926e000}, 
+    {0x39270000}, {0x39272000}, {0x39274000}, {0x39276000}, 
+    {0x39278000}, {0x3927a000}, {0x3927c000}, {0x3927e000}, 
+    {0x39280000}, {0x39282000}, {0x39284000}, {0x39286000}, 
+    {0x39288000}, {0x3928a000}, {0x3928c000}, {0x3928e000}, 
+    {0x39290000}, {0x39292000}, {0x39294000}, {0x39296000}, 
+    {0x39298000}, {0x3929a000}, {0x3929c000}, {0x3929e000}, 
+    {0x392a0000}, {0x392a2000}, {0x392a4000}, {0x392a6000}, 
+    {0x392a8000}, {0x392aa000}, {0x392ac000}, {0x392ae000}, 
+    {0x392b0000}, {0x392b2000}, {0x392b4000}, {0x392b6000}, 
+    {0x392b8000}, {0x392ba000}, {0x392bc000}, {0x392be000}, 
+    {0x392c0000}, {0x392c2000}, {0x392c4000}, {0x392c6000}, 
+    {0x392c8000}, {0x392ca000}, {0x392cc000}, {0x392ce000}, 
+    {0x392d0000}, {0x392d2000}, {0x392d4000}, {0x392d6000}, 
+    {0x392d8000}, {0x392da000}, {0x392dc000}, {0x392de000}, 
+    {0x392e0000}, {0x392e2000}, {0x392e4000}, {0x392e6000}, 
+    {0x392e8000}, {0x392ea000}, {0x392ec000}, {0x392ee000}, 
+    {0x392f0000}, {0x392f2000}, {0x392f4000}, {0x392f6000}, 
+    {0x392f8000}, {0x392fa000}, {0x392fc000}, {0x392fe000}, 
+    {0x39300000}, {0x39302000}, {0x39304000}, {0x39306000}, 
+    {0x39308000}, {0x3930a000}, {0x3930c000}, {0x3930e000}, 
+    {0x39310000}, {0x39312000}, {0x39314000}, {0x39316000}, 
+    {0x39318000}, {0x3931a000}, {0x3931c000}, {0x3931e000}, 
+    {0x39320000}, {0x39322000}, {0x39324000}, {0x39326000}, 
+    {0x39328000}, {0x3932a000}, {0x3932c000}, {0x3932e000}, 
+    {0x39330000}, {0x39332000}, {0x39334000}, {0x39336000}, 
+    {0x39338000}, {0x3933a000}, {0x3933c000}, {0x3933e000}, 
+    {0x39340000}, {0x39342000}, {0x39344000}, {0x39346000}, 
+    {0x39348000}, {0x3934a000}, {0x3934c000}, {0x3934e000}, 
+    {0x39350000}, {0x39352000}, {0x39354000}, {0x39356000}, 
+    {0x39358000}, {0x3935a000}, {0x3935c000}, {0x3935e000}, 
+    {0x39360000}, {0x39362000}, {0x39364000}, {0x39366000}, 
+    {0x39368000}, {0x3936a000}, {0x3936c000}, {0x3936e000}, 
+    {0x39370000}, {0x39372000}, {0x39374000}, {0x39376000}, 
+    {0x39378000}, {0x3937a000}, {0x3937c000}, {0x3937e000}, 
+    {0x39380000}, {0x39382000}, {0x39384000}, {0x39386000}, 
+    {0x39388000}, {0x3938a000}, {0x3938c000}, {0x3938e000}, 
+    {0x39390000}, {0x39392000}, {0x39394000}, {0x39396000}, 
+    {0x39398000}, {0x3939a000}, {0x3939c000}, {0x3939e000}, 
+    {0x393a0000}, {0x393a2000}, {0x393a4000}, {0x393a6000}, 
+    {0x393a8000}, {0x393aa000}, {0x393ac000}, {0x393ae000}, 
+    {0x393b0000}, {0x393b2000}, {0x393b4000}, {0x393b6000}, 
+    {0x393b8000}, {0x393ba000}, {0x393bc000}, {0x393be000}, 
+    {0x393c0000}, {0x393c2000}, {0x393c4000}, {0x393c6000}, 
+    {0x393c8000}, {0x393ca000}, {0x393cc000}, {0x393ce000}, 
+    {0x393d0000}, {0x393d2000}, {0x393d4000}, {0x393d6000}, 
+    {0x393d8000}, {0x393da000}, {0x393dc000}, {0x393de000}, 
+    {0x393e0000}, {0x393e2000}, {0x393e4000}, {0x393e6000}, 
+    {0x393e8000}, {0x393ea000}, {0x393ec000}, {0x393ee000}, 
+    {0x393f0000}, {0x393f2000}, {0x393f4000}, {0x393f6000}, 
+    {0x393f8000}, {0x393fa000}, {0x393fc000}, {0x393fe000}, 
+    {0x39400000}, {0x39402000}, {0x39404000}, {0x39406000}, 
+    {0x39408000}, {0x3940a000}, {0x3940c000}, {0x3940e000}, 
+    {0x39410000}, {0x39412000}, {0x39414000}, {0x39416000}, 
+    {0x39418000}, {0x3941a000}, {0x3941c000}, {0x3941e000}, 
+    {0x39420000}, {0x39422000}, {0x39424000}, {0x39426000}, 
+    {0x39428000}, {0x3942a000}, {0x3942c000}, {0x3942e000}, 
+    {0x39430000}, {0x39432000}, {0x39434000}, {0x39436000}, 
+    {0x39438000}, {0x3943a000}, {0x3943c000}, {0x3943e000}, 
+    {0x39440000}, {0x39442000}, {0x39444000}, {0x39446000}, 
+    {0x39448000}, {0x3944a000}, {0x3944c000}, {0x3944e000}, 
+    {0x39450000}, {0x39452000}, {0x39454000}, {0x39456000}, 
+    {0x39458000}, {0x3945a000}, {0x3945c000}, {0x3945e000}, 
+    {0x39460000}, {0x39462000}, {0x39464000}, {0x39466000}, 
+    {0x39468000}, {0x3946a000}, {0x3946c000}, {0x3946e000}, 
+    {0x39470000}, {0x39472000}, {0x39474000}, {0x39476000}, 
+    {0x39478000}, {0x3947a000}, {0x3947c000}, {0x3947e000}, 
+    {0x39480000}, {0x39482000}, {0x39484000}, {0x39486000}, 
+    {0x39488000}, {0x3948a000}, {0x3948c000}, {0x3948e000}, 
+    {0x39490000}, {0x39492000}, {0x39494000}, {0x39496000}, 
+    {0x39498000}, {0x3949a000}, {0x3949c000}, {0x3949e000}, 
+    {0x394a0000}, {0x394a2000}, {0x394a4000}, {0x394a6000}, 
+    {0x394a8000}, {0x394aa000}, {0x394ac000}, {0x394ae000}, 
+    {0x394b0000}, {0x394b2000}, {0x394b4000}, {0x394b6000}, 
+    {0x394b8000}, {0x394ba000}, {0x394bc000}, {0x394be000}, 
+    {0x394c0000}, {0x394c2000}, {0x394c4000}, {0x394c6000}, 
+    {0x394c8000}, {0x394ca000}, {0x394cc000}, {0x394ce000}, 
+    {0x394d0000}, {0x394d2000}, {0x394d4000}, {0x394d6000}, 
+    {0x394d8000}, {0x394da000}, {0x394dc000}, {0x394de000}, 
+    {0x394e0000}, {0x394e2000}, {0x394e4000}, {0x394e6000}, 
+    {0x394e8000}, {0x394ea000}, {0x394ec000}, {0x394ee000}, 
+    {0x394f0000}, {0x394f2000}, {0x394f4000}, {0x394f6000}, 
+    {0x394f8000}, {0x394fa000}, {0x394fc000}, {0x394fe000}, 
+    {0x39500000}, {0x39502000}, {0x39504000}, {0x39506000}, 
+    {0x39508000}, {0x3950a000}, {0x3950c000}, {0x3950e000}, 
+    {0x39510000}, {0x39512000}, {0x39514000}, {0x39516000}, 
+    {0x39518000}, {0x3951a000}, {0x3951c000}, {0x3951e000}, 
+    {0x39520000}, {0x39522000}, {0x39524000}, {0x39526000}, 
+    {0x39528000}, {0x3952a000}, {0x3952c000}, {0x3952e000}, 
+    {0x39530000}, {0x39532000}, {0x39534000}, {0x39536000}, 
+    {0x39538000}, {0x3953a000}, {0x3953c000}, {0x3953e000}, 
+    {0x39540000}, {0x39542000}, {0x39544000}, {0x39546000}, 
+    {0x39548000}, {0x3954a000}, {0x3954c000}, {0x3954e000}, 
+    {0x39550000}, {0x39552000}, {0x39554000}, {0x39556000}, 
+    {0x39558000}, {0x3955a000}, {0x3955c000}, {0x3955e000}, 
+    {0x39560000}, {0x39562000}, {0x39564000}, {0x39566000}, 
+    {0x39568000}, {0x3956a000}, {0x3956c000}, {0x3956e000}, 
+    {0x39570000}, {0x39572000}, {0x39574000}, {0x39576000}, 
+    {0x39578000}, {0x3957a000}, {0x3957c000}, {0x3957e000}, 
+    {0x39580000}, {0x39582000}, {0x39584000}, {0x39586000}, 
+    {0x39588000}, {0x3958a000}, {0x3958c000}, {0x3958e000}, 
+    {0x39590000}, {0x39592000}, {0x39594000}, {0x39596000}, 
+    {0x39598000}, {0x3959a000}, {0x3959c000}, {0x3959e000}, 
+    {0x395a0000}, {0x395a2000}, {0x395a4000}, {0x395a6000}, 
+    {0x395a8000}, {0x395aa000}, {0x395ac000}, {0x395ae000}, 
+    {0x395b0000}, {0x395b2000}, {0x395b4000}, {0x395b6000}, 
+    {0x395b8000}, {0x395ba000}, {0x395bc000}, {0x395be000}, 
+    {0x395c0000}, {0x395c2000}, {0x395c4000}, {0x395c6000}, 
+    {0x395c8000}, {0x395ca000}, {0x395cc000}, {0x395ce000}, 
+    {0x395d0000}, {0x395d2000}, {0x395d4000}, {0x395d6000}, 
+    {0x395d8000}, {0x395da000}, {0x395dc000}, {0x395de000}, 
+    {0x395e0000}, {0x395e2000}, {0x395e4000}, {0x395e6000}, 
+    {0x395e8000}, {0x395ea000}, {0x395ec000}, {0x395ee000}, 
+    {0x395f0000}, {0x395f2000}, {0x395f4000}, {0x395f6000}, 
+    {0x395f8000}, {0x395fa000}, {0x395fc000}, {0x395fe000}, 
+    {0x39600000}, {0x39602000}, {0x39604000}, {0x39606000}, 
+    {0x39608000}, {0x3960a000}, {0x3960c000}, {0x3960e000}, 
+    {0x39610000}, {0x39612000}, {0x39614000}, {0x39616000}, 
+    {0x39618000}, {0x3961a000}, {0x3961c000}, {0x3961e000}, 
+    {0x39620000}, {0x39622000}, {0x39624000}, {0x39626000}, 
+    {0x39628000}, {0x3962a000}, {0x3962c000}, {0x3962e000}, 
+    {0x39630000}, {0x39632000}, {0x39634000}, {0x39636000}, 
+    {0x39638000}, {0x3963a000}, {0x3963c000}, {0x3963e000}, 
+    {0x39640000}, {0x39642000}, {0x39644000}, {0x39646000}, 
+    {0x39648000}, {0x3964a000}, {0x3964c000}, {0x3964e000}, 
+    {0x39650000}, {0x39652000}, {0x39654000}, {0x39656000}, 
+    {0x39658000}, {0x3965a000}, {0x3965c000}, {0x3965e000}, 
+    {0x39660000}, {0x39662000}, {0x39664000}, {0x39666000}, 
+    {0x39668000}, {0x3966a000}, {0x3966c000}, {0x3966e000}, 
+    {0x39670000}, {0x39672000}, {0x39674000}, {0x39676000}, 
+    {0x39678000}, {0x3967a000}, {0x3967c000}, {0x3967e000}, 
+    {0x39680000}, {0x39682000}, {0x39684000}, {0x39686000}, 
+    {0x39688000}, {0x3968a000}, {0x3968c000}, {0x3968e000}, 
+    {0x39690000}, {0x39692000}, {0x39694000}, {0x39696000}, 
+    {0x39698000}, {0x3969a000}, {0x3969c000}, {0x3969e000}, 
+    {0x396a0000}, {0x396a2000}, {0x396a4000}, {0x396a6000}, 
+    {0x396a8000}, {0x396aa000}, {0x396ac000}, {0x396ae000}, 
+    {0x396b0000}, {0x396b2000}, {0x396b4000}, {0x396b6000}, 
+    {0x396b8000}, {0x396ba000}, {0x396bc000}, {0x396be000}, 
+    {0x396c0000}, {0x396c2000}, {0x396c4000}, {0x396c6000}, 
+    {0x396c8000}, {0x396ca000}, {0x396cc000}, {0x396ce000}, 
+    {0x396d0000}, {0x396d2000}, {0x396d4000}, {0x396d6000}, 
+    {0x396d8000}, {0x396da000}, {0x396dc000}, {0x396de000}, 
+    {0x396e0000}, {0x396e2000}, {0x396e4000}, {0x396e6000}, 
+    {0x396e8000}, {0x396ea000}, {0x396ec000}, {0x396ee000}, 
+    {0x396f0000}, {0x396f2000}, {0x396f4000}, {0x396f6000}, 
+    {0x396f8000}, {0x396fa000}, {0x396fc000}, {0x396fe000}, 
+    {0x39700000}, {0x39702000}, {0x39704000}, {0x39706000}, 
+    {0x39708000}, {0x3970a000}, {0x3970c000}, {0x3970e000}, 
+    {0x39710000}, {0x39712000}, {0x39714000}, {0x39716000}, 
+    {0x39718000}, {0x3971a000}, {0x3971c000}, {0x3971e000}, 
+    {0x39720000}, {0x39722000}, {0x39724000}, {0x39726000}, 
+    {0x39728000}, {0x3972a000}, {0x3972c000}, {0x3972e000}, 
+    {0x39730000}, {0x39732000}, {0x39734000}, {0x39736000}, 
+    {0x39738000}, {0x3973a000}, {0x3973c000}, {0x3973e000}, 
+    {0x39740000}, {0x39742000}, {0x39744000}, {0x39746000}, 
+    {0x39748000}, {0x3974a000}, {0x3974c000}, {0x3974e000}, 
+    {0x39750000}, {0x39752000}, {0x39754000}, {0x39756000}, 
+    {0x39758000}, {0x3975a000}, {0x3975c000}, {0x3975e000}, 
+    {0x39760000}, {0x39762000}, {0x39764000}, {0x39766000}, 
+    {0x39768000}, {0x3976a000}, {0x3976c000}, {0x3976e000}, 
+    {0x39770000}, {0x39772000}, {0x39774000}, {0x39776000}, 
+    {0x39778000}, {0x3977a000}, {0x3977c000}, {0x3977e000}, 
+    {0x39780000}, {0x39782000}, {0x39784000}, {0x39786000}, 
+    {0x39788000}, {0x3978a000}, {0x3978c000}, {0x3978e000}, 
+    {0x39790000}, {0x39792000}, {0x39794000}, {0x39796000}, 
+    {0x39798000}, {0x3979a000}, {0x3979c000}, {0x3979e000}, 
+    {0x397a0000}, {0x397a2000}, {0x397a4000}, {0x397a6000}, 
+    {0x397a8000}, {0x397aa000}, {0x397ac000}, {0x397ae000}, 
+    {0x397b0000}, {0x397b2000}, {0x397b4000}, {0x397b6000}, 
+    {0x397b8000}, {0x397ba000}, {0x397bc000}, {0x397be000}, 
+    {0x397c0000}, {0x397c2000}, {0x397c4000}, {0x397c6000}, 
+    {0x397c8000}, {0x397ca000}, {0x397cc000}, {0x397ce000}, 
+    {0x397d0000}, {0x397d2000}, {0x397d4000}, {0x397d6000}, 
+    {0x397d8000}, {0x397da000}, {0x397dc000}, {0x397de000}, 
+    {0x397e0000}, {0x397e2000}, {0x397e4000}, {0x397e6000}, 
+    {0x397e8000}, {0x397ea000}, {0x397ec000}, {0x397ee000}, 
+    {0x397f0000}, {0x397f2000}, {0x397f4000}, {0x397f6000}, 
+    {0x397f8000}, {0x397fa000}, {0x397fc000}, {0x397fe000}, 
+    {0x39800000}, {0x39802000}, {0x39804000}, {0x39806000}, 
+    {0x39808000}, {0x3980a000}, {0x3980c000}, {0x3980e000}, 
+    {0x39810000}, {0x39812000}, {0x39814000}, {0x39816000}, 
+    {0x39818000}, {0x3981a000}, {0x3981c000}, {0x3981e000}, 
+    {0x39820000}, {0x39822000}, {0x39824000}, {0x39826000}, 
+    {0x39828000}, {0x3982a000}, {0x3982c000}, {0x3982e000}, 
+    {0x39830000}, {0x39832000}, {0x39834000}, {0x39836000}, 
+    {0x39838000}, {0x3983a000}, {0x3983c000}, {0x3983e000}, 
+    {0x39840000}, {0x39842000}, {0x39844000}, {0x39846000}, 
+    {0x39848000}, {0x3984a000}, {0x3984c000}, {0x3984e000}, 
+    {0x39850000}, {0x39852000}, {0x39854000}, {0x39856000}, 
+    {0x39858000}, {0x3985a000}, {0x3985c000}, {0x3985e000}, 
+    {0x39860000}, {0x39862000}, {0x39864000}, {0x39866000}, 
+    {0x39868000}, {0x3986a000}, {0x3986c000}, {0x3986e000}, 
+    {0x39870000}, {0x39872000}, {0x39874000}, {0x39876000}, 
+    {0x39878000}, {0x3987a000}, {0x3987c000}, {0x3987e000}, 
+    {0x39880000}, {0x39882000}, {0x39884000}, {0x39886000}, 
+    {0x39888000}, {0x3988a000}, {0x3988c000}, {0x3988e000}, 
+    {0x39890000}, {0x39892000}, {0x39894000}, {0x39896000}, 
+    {0x39898000}, {0x3989a000}, {0x3989c000}, {0x3989e000}, 
+    {0x398a0000}, {0x398a2000}, {0x398a4000}, {0x398a6000}, 
+    {0x398a8000}, {0x398aa000}, {0x398ac000}, {0x398ae000}, 
+    {0x398b0000}, {0x398b2000}, {0x398b4000}, {0x398b6000}, 
+    {0x398b8000}, {0x398ba000}, {0x398bc000}, {0x398be000}, 
+    {0x398c0000}, {0x398c2000}, {0x398c4000}, {0x398c6000}, 
+    {0x398c8000}, {0x398ca000}, {0x398cc000}, {0x398ce000}, 
+    {0x398d0000}, {0x398d2000}, {0x398d4000}, {0x398d6000}, 
+    {0x398d8000}, {0x398da000}, {0x398dc000}, {0x398de000}, 
+    {0x398e0000}, {0x398e2000}, {0x398e4000}, {0x398e6000}, 
+    {0x398e8000}, {0x398ea000}, {0x398ec000}, {0x398ee000}, 
+    {0x398f0000}, {0x398f2000}, {0x398f4000}, {0x398f6000}, 
+    {0x398f8000}, {0x398fa000}, {0x398fc000}, {0x398fe000}, 
+    {0x39900000}, {0x39902000}, {0x39904000}, {0x39906000}, 
+    {0x39908000}, {0x3990a000}, {0x3990c000}, {0x3990e000}, 
+    {0x39910000}, {0x39912000}, {0x39914000}, {0x39916000}, 
+    {0x39918000}, {0x3991a000}, {0x3991c000}, {0x3991e000}, 
+    {0x39920000}, {0x39922000}, {0x39924000}, {0x39926000}, 
+    {0x39928000}, {0x3992a000}, {0x3992c000}, {0x3992e000}, 
+    {0x39930000}, {0x39932000}, {0x39934000}, {0x39936000}, 
+    {0x39938000}, {0x3993a000}, {0x3993c000}, {0x3993e000}, 
+    {0x39940000}, {0x39942000}, {0x39944000}, {0x39946000}, 
+    {0x39948000}, {0x3994a000}, {0x3994c000}, {0x3994e000}, 
+    {0x39950000}, {0x39952000}, {0x39954000}, {0x39956000}, 
+    {0x39958000}, {0x3995a000}, {0x3995c000}, {0x3995e000}, 
+    {0x39960000}, {0x39962000}, {0x39964000}, {0x39966000}, 
+    {0x39968000}, {0x3996a000}, {0x3996c000}, {0x3996e000}, 
+    {0x39970000}, {0x39972000}, {0x39974000}, {0x39976000}, 
+    {0x39978000}, {0x3997a000}, {0x3997c000}, {0x3997e000}, 
+    {0x39980000}, {0x39982000}, {0x39984000}, {0x39986000}, 
+    {0x39988000}, {0x3998a000}, {0x3998c000}, {0x3998e000}, 
+    {0x39990000}, {0x39992000}, {0x39994000}, {0x39996000}, 
+    {0x39998000}, {0x3999a000}, {0x3999c000}, {0x3999e000}, 
+    {0x399a0000}, {0x399a2000}, {0x399a4000}, {0x399a6000}, 
+    {0x399a8000}, {0x399aa000}, {0x399ac000}, {0x399ae000}, 
+    {0x399b0000}, {0x399b2000}, {0x399b4000}, {0x399b6000}, 
+    {0x399b8000}, {0x399ba000}, {0x399bc000}, {0x399be000}, 
+    {0x399c0000}, {0x399c2000}, {0x399c4000}, {0x399c6000}, 
+    {0x399c8000}, {0x399ca000}, {0x399cc000}, {0x399ce000}, 
+    {0x399d0000}, {0x399d2000}, {0x399d4000}, {0x399d6000}, 
+    {0x399d8000}, {0x399da000}, {0x399dc000}, {0x399de000}, 
+    {0x399e0000}, {0x399e2000}, {0x399e4000}, {0x399e6000}, 
+    {0x399e8000}, {0x399ea000}, {0x399ec000}, {0x399ee000}, 
+    {0x399f0000}, {0x399f2000}, {0x399f4000}, {0x399f6000}, 
+    {0x399f8000}, {0x399fa000}, {0x399fc000}, {0x399fe000}, 
+    {0x39a00000}, {0x39a02000}, {0x39a04000}, {0x39a06000}, 
+    {0x39a08000}, {0x39a0a000}, {0x39a0c000}, {0x39a0e000}, 
+    {0x39a10000}, {0x39a12000}, {0x39a14000}, {0x39a16000}, 
+    {0x39a18000}, {0x39a1a000}, {0x39a1c000}, {0x39a1e000}, 
+    {0x39a20000}, {0x39a22000}, {0x39a24000}, {0x39a26000}, 
+    {0x39a28000}, {0x39a2a000}, {0x39a2c000}, {0x39a2e000}, 
+    {0x39a30000}, {0x39a32000}, {0x39a34000}, {0x39a36000}, 
+    {0x39a38000}, {0x39a3a000}, {0x39a3c000}, {0x39a3e000}, 
+    {0x39a40000}, {0x39a42000}, {0x39a44000}, {0x39a46000}, 
+    {0x39a48000}, {0x39a4a000}, {0x39a4c000}, {0x39a4e000}, 
+    {0x39a50000}, {0x39a52000}, {0x39a54000}, {0x39a56000}, 
+    {0x39a58000}, {0x39a5a000}, {0x39a5c000}, {0x39a5e000}, 
+    {0x39a60000}, {0x39a62000}, {0x39a64000}, {0x39a66000}, 
+    {0x39a68000}, {0x39a6a000}, {0x39a6c000}, {0x39a6e000}, 
+    {0x39a70000}, {0x39a72000}, {0x39a74000}, {0x39a76000}, 
+    {0x39a78000}, {0x39a7a000}, {0x39a7c000}, {0x39a7e000}, 
+    {0x39a80000}, {0x39a82000}, {0x39a84000}, {0x39a86000}, 
+    {0x39a88000}, {0x39a8a000}, {0x39a8c000}, {0x39a8e000}, 
+    {0x39a90000}, {0x39a92000}, {0x39a94000}, {0x39a96000}, 
+    {0x39a98000}, {0x39a9a000}, {0x39a9c000}, {0x39a9e000}, 
+    {0x39aa0000}, {0x39aa2000}, {0x39aa4000}, {0x39aa6000}, 
+    {0x39aa8000}, {0x39aaa000}, {0x39aac000}, {0x39aae000}, 
+    {0x39ab0000}, {0x39ab2000}, {0x39ab4000}, {0x39ab6000}, 
+    {0x39ab8000}, {0x39aba000}, {0x39abc000}, {0x39abe000}, 
+    {0x39ac0000}, {0x39ac2000}, {0x39ac4000}, {0x39ac6000}, 
+    {0x39ac8000}, {0x39aca000}, {0x39acc000}, {0x39ace000}, 
+    {0x39ad0000}, {0x39ad2000}, {0x39ad4000}, {0x39ad6000}, 
+    {0x39ad8000}, {0x39ada000}, {0x39adc000}, {0x39ade000}, 
+    {0x39ae0000}, {0x39ae2000}, {0x39ae4000}, {0x39ae6000}, 
+    {0x39ae8000}, {0x39aea000}, {0x39aec000}, {0x39aee000}, 
+    {0x39af0000}, {0x39af2000}, {0x39af4000}, {0x39af6000}, 
+    {0x39af8000}, {0x39afa000}, {0x39afc000}, {0x39afe000}, 
+    {0x39b00000}, {0x39b02000}, {0x39b04000}, {0x39b06000}, 
+    {0x39b08000}, {0x39b0a000}, {0x39b0c000}, {0x39b0e000}, 
+    {0x39b10000}, {0x39b12000}, {0x39b14000}, {0x39b16000}, 
+    {0x39b18000}, {0x39b1a000}, {0x39b1c000}, {0x39b1e000}, 
+    {0x39b20000}, {0x39b22000}, {0x39b24000}, {0x39b26000}, 
+    {0x39b28000}, {0x39b2a000}, {0x39b2c000}, {0x39b2e000}, 
+    {0x39b30000}, {0x39b32000}, {0x39b34000}, {0x39b36000}, 
+    {0x39b38000}, {0x39b3a000}, {0x39b3c000}, {0x39b3e000}, 
+    {0x39b40000}, {0x39b42000}, {0x39b44000}, {0x39b46000}, 
+    {0x39b48000}, {0x39b4a000}, {0x39b4c000}, {0x39b4e000}, 
+    {0x39b50000}, {0x39b52000}, {0x39b54000}, {0x39b56000}, 
+    {0x39b58000}, {0x39b5a000}, {0x39b5c000}, {0x39b5e000}, 
+    {0x39b60000}, {0x39b62000}, {0x39b64000}, {0x39b66000}, 
+    {0x39b68000}, {0x39b6a000}, {0x39b6c000}, {0x39b6e000}, 
+    {0x39b70000}, {0x39b72000}, {0x39b74000}, {0x39b76000}, 
+    {0x39b78000}, {0x39b7a000}, {0x39b7c000}, {0x39b7e000}, 
+    {0x39b80000}, {0x39b82000}, {0x39b84000}, {0x39b86000}, 
+    {0x39b88000}, {0x39b8a000}, {0x39b8c000}, {0x39b8e000}, 
+    {0x39b90000}, {0x39b92000}, {0x39b94000}, {0x39b96000}, 
+    {0x39b98000}, {0x39b9a000}, {0x39b9c000}, {0x39b9e000}, 
+    {0x39ba0000}, {0x39ba2000}, {0x39ba4000}, {0x39ba6000}, 
+    {0x39ba8000}, {0x39baa000}, {0x39bac000}, {0x39bae000}, 
+    {0x39bb0000}, {0x39bb2000}, {0x39bb4000}, {0x39bb6000}, 
+    {0x39bb8000}, {0x39bba000}, {0x39bbc000}, {0x39bbe000}, 
+    {0x39bc0000}, {0x39bc2000}, {0x39bc4000}, {0x39bc6000}, 
+    {0x39bc8000}, {0x39bca000}, {0x39bcc000}, {0x39bce000}, 
+    {0x39bd0000}, {0x39bd2000}, {0x39bd4000}, {0x39bd6000}, 
+    {0x39bd8000}, {0x39bda000}, {0x39bdc000}, {0x39bde000}, 
+    {0x39be0000}, {0x39be2000}, {0x39be4000}, {0x39be6000}, 
+    {0x39be8000}, {0x39bea000}, {0x39bec000}, {0x39bee000}, 
+    {0x39bf0000}, {0x39bf2000}, {0x39bf4000}, {0x39bf6000}, 
+    {0x39bf8000}, {0x39bfa000}, {0x39bfc000}, {0x39bfe000}, 
+    {0x39c00000}, {0x39c02000}, {0x39c04000}, {0x39c06000}, 
+    {0x39c08000}, {0x39c0a000}, {0x39c0c000}, {0x39c0e000}, 
+    {0x39c10000}, {0x39c12000}, {0x39c14000}, {0x39c16000}, 
+    {0x39c18000}, {0x39c1a000}, {0x39c1c000}, {0x39c1e000}, 
+    {0x39c20000}, {0x39c22000}, {0x39c24000}, {0x39c26000}, 
+    {0x39c28000}, {0x39c2a000}, {0x39c2c000}, {0x39c2e000}, 
+    {0x39c30000}, {0x39c32000}, {0x39c34000}, {0x39c36000}, 
+    {0x39c38000}, {0x39c3a000}, {0x39c3c000}, {0x39c3e000}, 
+    {0x39c40000}, {0x39c42000}, {0x39c44000}, {0x39c46000}, 
+    {0x39c48000}, {0x39c4a000}, {0x39c4c000}, {0x39c4e000}, 
+    {0x39c50000}, {0x39c52000}, {0x39c54000}, {0x39c56000}, 
+    {0x39c58000}, {0x39c5a000}, {0x39c5c000}, {0x39c5e000}, 
+    {0x39c60000}, {0x39c62000}, {0x39c64000}, {0x39c66000}, 
+    {0x39c68000}, {0x39c6a000}, {0x39c6c000}, {0x39c6e000}, 
+    {0x39c70000}, {0x39c72000}, {0x39c74000}, {0x39c76000}, 
+    {0x39c78000}, {0x39c7a000}, {0x39c7c000}, {0x39c7e000}, 
+    {0x39c80000}, {0x39c82000}, {0x39c84000}, {0x39c86000}, 
+    {0x39c88000}, {0x39c8a000}, {0x39c8c000}, {0x39c8e000}, 
+    {0x39c90000}, {0x39c92000}, {0x39c94000}, {0x39c96000}, 
+    {0x39c98000}, {0x39c9a000}, {0x39c9c000}, {0x39c9e000}, 
+    {0x39ca0000}, {0x39ca2000}, {0x39ca4000}, {0x39ca6000}, 
+    {0x39ca8000}, {0x39caa000}, {0x39cac000}, {0x39cae000}, 
+    {0x39cb0000}, {0x39cb2000}, {0x39cb4000}, {0x39cb6000}, 
+    {0x39cb8000}, {0x39cba000}, {0x39cbc000}, {0x39cbe000}, 
+    {0x39cc0000}, {0x39cc2000}, {0x39cc4000}, {0x39cc6000}, 
+    {0x39cc8000}, {0x39cca000}, {0x39ccc000}, {0x39cce000}, 
+    {0x39cd0000}, {0x39cd2000}, {0x39cd4000}, {0x39cd6000}, 
+    {0x39cd8000}, {0x39cda000}, {0x39cdc000}, {0x39cde000}, 
+    {0x39ce0000}, {0x39ce2000}, {0x39ce4000}, {0x39ce6000}, 
+    {0x39ce8000}, {0x39cea000}, {0x39cec000}, {0x39cee000}, 
+    {0x39cf0000}, {0x39cf2000}, {0x39cf4000}, {0x39cf6000}, 
+    {0x39cf8000}, {0x39cfa000}, {0x39cfc000}, {0x39cfe000}, 
+    {0x39d00000}, {0x39d02000}, {0x39d04000}, {0x39d06000}, 
+    {0x39d08000}, {0x39d0a000}, {0x39d0c000}, {0x39d0e000}, 
+    {0x39d10000}, {0x39d12000}, {0x39d14000}, {0x39d16000}, 
+    {0x39d18000}, {0x39d1a000}, {0x39d1c000}, {0x39d1e000}, 
+    {0x39d20000}, {0x39d22000}, {0x39d24000}, {0x39d26000}, 
+    {0x39d28000}, {0x39d2a000}, {0x39d2c000}, {0x39d2e000}, 
+    {0x39d30000}, {0x39d32000}, {0x39d34000}, {0x39d36000}, 
+    {0x39d38000}, {0x39d3a000}, {0x39d3c000}, {0x39d3e000}, 
+    {0x39d40000}, {0x39d42000}, {0x39d44000}, {0x39d46000}, 
+    {0x39d48000}, {0x39d4a000}, {0x39d4c000}, {0x39d4e000}, 
+    {0x39d50000}, {0x39d52000}, {0x39d54000}, {0x39d56000}, 
+    {0x39d58000}, {0x39d5a000}, {0x39d5c000}, {0x39d5e000}, 
+    {0x39d60000}, {0x39d62000}, {0x39d64000}, {0x39d66000}, 
+    {0x39d68000}, {0x39d6a000}, {0x39d6c000}, {0x39d6e000}, 
+    {0x39d70000}, {0x39d72000}, {0x39d74000}, {0x39d76000}, 
+    {0x39d78000}, {0x39d7a000}, {0x39d7c000}, {0x39d7e000}, 
+    {0x39d80000}, {0x39d82000}, {0x39d84000}, {0x39d86000}, 
+    {0x39d88000}, {0x39d8a000}, {0x39d8c000}, {0x39d8e000}, 
+    {0x39d90000}, {0x39d92000}, {0x39d94000}, {0x39d96000}, 
+    {0x39d98000}, {0x39d9a000}, {0x39d9c000}, {0x39d9e000}, 
+    {0x39da0000}, {0x39da2000}, {0x39da4000}, {0x39da6000}, 
+    {0x39da8000}, {0x39daa000}, {0x39dac000}, {0x39dae000}, 
+    {0x39db0000}, {0x39db2000}, {0x39db4000}, {0x39db6000}, 
+    {0x39db8000}, {0x39dba000}, {0x39dbc000}, {0x39dbe000}, 
+    {0x39dc0000}, {0x39dc2000}, {0x39dc4000}, {0x39dc6000}, 
+    {0x39dc8000}, {0x39dca000}, {0x39dcc000}, {0x39dce000}, 
+    {0x39dd0000}, {0x39dd2000}, {0x39dd4000}, {0x39dd6000}, 
+    {0x39dd8000}, {0x39dda000}, {0x39ddc000}, {0x39dde000}, 
+    {0x39de0000}, {0x39de2000}, {0x39de4000}, {0x39de6000}, 
+    {0x39de8000}, {0x39dea000}, {0x39dec000}, {0x39dee000}, 
+    {0x39df0000}, {0x39df2000}, {0x39df4000}, {0x39df6000}, 
+    {0x39df8000}, {0x39dfa000}, {0x39dfc000}, {0x39dfe000}, 
+    {0x39e00000}, {0x39e02000}, {0x39e04000}, {0x39e06000}, 
+    {0x39e08000}, {0x39e0a000}, {0x39e0c000}, {0x39e0e000}, 
+    {0x39e10000}, {0x39e12000}, {0x39e14000}, {0x39e16000}, 
+    {0x39e18000}, {0x39e1a000}, {0x39e1c000}, {0x39e1e000}, 
+    {0x39e20000}, {0x39e22000}, {0x39e24000}, {0x39e26000}, 
+    {0x39e28000}, {0x39e2a000}, {0x39e2c000}, {0x39e2e000}, 
+    {0x39e30000}, {0x39e32000}, {0x39e34000}, {0x39e36000}, 
+    {0x39e38000}, {0x39e3a000}, {0x39e3c000}, {0x39e3e000}, 
+    {0x39e40000}, {0x39e42000}, {0x39e44000}, {0x39e46000}, 
+    {0x39e48000}, {0x39e4a000}, {0x39e4c000}, {0x39e4e000}, 
+    {0x39e50000}, {0x39e52000}, {0x39e54000}, {0x39e56000}, 
+    {0x39e58000}, {0x39e5a000}, {0x39e5c000}, {0x39e5e000}, 
+    {0x39e60000}, {0x39e62000}, {0x39e64000}, {0x39e66000}, 
+    {0x39e68000}, {0x39e6a000}, {0x39e6c000}, {0x39e6e000}, 
+    {0x39e70000}, {0x39e72000}, {0x39e74000}, {0x39e76000}, 
+    {0x39e78000}, {0x39e7a000}, {0x39e7c000}, {0x39e7e000}, 
+    {0x39e80000}, {0x39e82000}, {0x39e84000}, {0x39e86000}, 
+    {0x39e88000}, {0x39e8a000}, {0x39e8c000}, {0x39e8e000}, 
+    {0x39e90000}, {0x39e92000}, {0x39e94000}, {0x39e96000}, 
+    {0x39e98000}, {0x39e9a000}, {0x39e9c000}, {0x39e9e000}, 
+    {0x39ea0000}, {0x39ea2000}, {0x39ea4000}, {0x39ea6000}, 
+    {0x39ea8000}, {0x39eaa000}, {0x39eac000}, {0x39eae000}, 
+    {0x39eb0000}, {0x39eb2000}, {0x39eb4000}, {0x39eb6000}, 
+    {0x39eb8000}, {0x39eba000}, {0x39ebc000}, {0x39ebe000}, 
+    {0x39ec0000}, {0x39ec2000}, {0x39ec4000}, {0x39ec6000}, 
+    {0x39ec8000}, {0x39eca000}, {0x39ecc000}, {0x39ece000}, 
+    {0x39ed0000}, {0x39ed2000}, {0x39ed4000}, {0x39ed6000}, 
+    {0x39ed8000}, {0x39eda000}, {0x39edc000}, {0x39ede000}, 
+    {0x39ee0000}, {0x39ee2000}, {0x39ee4000}, {0x39ee6000}, 
+    {0x39ee8000}, {0x39eea000}, {0x39eec000}, {0x39eee000}, 
+    {0x39ef0000}, {0x39ef2000}, {0x39ef4000}, {0x39ef6000}, 
+    {0x39ef8000}, {0x39efa000}, {0x39efc000}, {0x39efe000}, 
+    {0x39f00000}, {0x39f02000}, {0x39f04000}, {0x39f06000}, 
+    {0x39f08000}, {0x39f0a000}, {0x39f0c000}, {0x39f0e000}, 
+    {0x39f10000}, {0x39f12000}, {0x39f14000}, {0x39f16000}, 
+    {0x39f18000}, {0x39f1a000}, {0x39f1c000}, {0x39f1e000}, 
+    {0x39f20000}, {0x39f22000}, {0x39f24000}, {0x39f26000}, 
+    {0x39f28000}, {0x39f2a000}, {0x39f2c000}, {0x39f2e000}, 
+    {0x39f30000}, {0x39f32000}, {0x39f34000}, {0x39f36000}, 
+    {0x39f38000}, {0x39f3a000}, {0x39f3c000}, {0x39f3e000}, 
+    {0x39f40000}, {0x39f42000}, {0x39f44000}, {0x39f46000}, 
+    {0x39f48000}, {0x39f4a000}, {0x39f4c000}, {0x39f4e000}, 
+    {0x39f50000}, {0x39f52000}, {0x39f54000}, {0x39f56000}, 
+    {0x39f58000}, {0x39f5a000}, {0x39f5c000}, {0x39f5e000}, 
+    {0x39f60000}, {0x39f62000}, {0x39f64000}, {0x39f66000}, 
+    {0x39f68000}, {0x39f6a000}, {0x39f6c000}, {0x39f6e000}, 
+    {0x39f70000}, {0x39f72000}, {0x39f74000}, {0x39f76000}, 
+    {0x39f78000}, {0x39f7a000}, {0x39f7c000}, {0x39f7e000}, 
+    {0x39f80000}, {0x39f82000}, {0x39f84000}, {0x39f86000}, 
+    {0x39f88000}, {0x39f8a000}, {0x39f8c000}, {0x39f8e000}, 
+    {0x39f90000}, {0x39f92000}, {0x39f94000}, {0x39f96000}, 
+    {0x39f98000}, {0x39f9a000}, {0x39f9c000}, {0x39f9e000}, 
+    {0x39fa0000}, {0x39fa2000}, {0x39fa4000}, {0x39fa6000}, 
+    {0x39fa8000}, {0x39faa000}, {0x39fac000}, {0x39fae000}, 
+    {0x39fb0000}, {0x39fb2000}, {0x39fb4000}, {0x39fb6000}, 
+    {0x39fb8000}, {0x39fba000}, {0x39fbc000}, {0x39fbe000}, 
+    {0x39fc0000}, {0x39fc2000}, {0x39fc4000}, {0x39fc6000}, 
+    {0x39fc8000}, {0x39fca000}, {0x39fcc000}, {0x39fce000}, 
+    {0x39fd0000}, {0x39fd2000}, {0x39fd4000}, {0x39fd6000}, 
+    {0x39fd8000}, {0x39fda000}, {0x39fdc000}, {0x39fde000}, 
+    {0x39fe0000}, {0x39fe2000}, {0x39fe4000}, {0x39fe6000}, 
+    {0x39fe8000}, {0x39fea000}, {0x39fec000}, {0x39fee000}, 
+    {0x39ff0000}, {0x39ff2000}, {0x39ff4000}, {0x39ff6000}, 
+    {0x39ff8000}, {0x39ffa000}, {0x39ffc000}, {0x39ffe000}, 
+    {0x3a000000}, {0x3a002000}, {0x3a004000}, {0x3a006000}, 
+    {0x3a008000}, {0x3a00a000}, {0x3a00c000}, {0x3a00e000}, 
+    {0x3a010000}, {0x3a012000}, {0x3a014000}, {0x3a016000}, 
+    {0x3a018000}, {0x3a01a000}, {0x3a01c000}, {0x3a01e000}, 
+    {0x3a020000}, {0x3a022000}, {0x3a024000}, {0x3a026000}, 
+    {0x3a028000}, {0x3a02a000}, {0x3a02c000}, {0x3a02e000}, 
+    {0x3a030000}, {0x3a032000}, {0x3a034000}, {0x3a036000}, 
+    {0x3a038000}, {0x3a03a000}, {0x3a03c000}, {0x3a03e000}, 
+    {0x3a040000}, {0x3a042000}, {0x3a044000}, {0x3a046000}, 
+    {0x3a048000}, {0x3a04a000}, {0x3a04c000}, {0x3a04e000}, 
+    {0x3a050000}, {0x3a052000}, {0x3a054000}, {0x3a056000}, 
+    {0x3a058000}, {0x3a05a000}, {0x3a05c000}, {0x3a05e000}, 
+    {0x3a060000}, {0x3a062000}, {0x3a064000}, {0x3a066000}, 
+    {0x3a068000}, {0x3a06a000}, {0x3a06c000}, {0x3a06e000}, 
+    {0x3a070000}, {0x3a072000}, {0x3a074000}, {0x3a076000}, 
+    {0x3a078000}, {0x3a07a000}, {0x3a07c000}, {0x3a07e000}, 
+    {0x3a080000}, {0x3a082000}, {0x3a084000}, {0x3a086000}, 
+    {0x3a088000}, {0x3a08a000}, {0x3a08c000}, {0x3a08e000}, 
+    {0x3a090000}, {0x3a092000}, {0x3a094000}, {0x3a096000}, 
+    {0x3a098000}, {0x3a09a000}, {0x3a09c000}, {0x3a09e000}, 
+    {0x3a0a0000}, {0x3a0a2000}, {0x3a0a4000}, {0x3a0a6000}, 
+    {0x3a0a8000}, {0x3a0aa000}, {0x3a0ac000}, {0x3a0ae000}, 
+    {0x3a0b0000}, {0x3a0b2000}, {0x3a0b4000}, {0x3a0b6000}, 
+    {0x3a0b8000}, {0x3a0ba000}, {0x3a0bc000}, {0x3a0be000}, 
+    {0x3a0c0000}, {0x3a0c2000}, {0x3a0c4000}, {0x3a0c6000}, 
+    {0x3a0c8000}, {0x3a0ca000}, {0x3a0cc000}, {0x3a0ce000}, 
+    {0x3a0d0000}, {0x3a0d2000}, {0x3a0d4000}, {0x3a0d6000}, 
+    {0x3a0d8000}, {0x3a0da000}, {0x3a0dc000}, {0x3a0de000}, 
+    {0x3a0e0000}, {0x3a0e2000}, {0x3a0e4000}, {0x3a0e6000}, 
+    {0x3a0e8000}, {0x3a0ea000}, {0x3a0ec000}, {0x3a0ee000}, 
+    {0x3a0f0000}, {0x3a0f2000}, {0x3a0f4000}, {0x3a0f6000}, 
+    {0x3a0f8000}, {0x3a0fa000}, {0x3a0fc000}, {0x3a0fe000}, 
+    {0x3a100000}, {0x3a102000}, {0x3a104000}, {0x3a106000}, 
+    {0x3a108000}, {0x3a10a000}, {0x3a10c000}, {0x3a10e000}, 
+    {0x3a110000}, {0x3a112000}, {0x3a114000}, {0x3a116000}, 
+    {0x3a118000}, {0x3a11a000}, {0x3a11c000}, {0x3a11e000}, 
+    {0x3a120000}, {0x3a122000}, {0x3a124000}, {0x3a126000}, 
+    {0x3a128000}, {0x3a12a000}, {0x3a12c000}, {0x3a12e000}, 
+    {0x3a130000}, {0x3a132000}, {0x3a134000}, {0x3a136000}, 
+    {0x3a138000}, {0x3a13a000}, {0x3a13c000}, {0x3a13e000}, 
+    {0x3a140000}, {0x3a142000}, {0x3a144000}, {0x3a146000}, 
+    {0x3a148000}, {0x3a14a000}, {0x3a14c000}, {0x3a14e000}, 
+    {0x3a150000}, {0x3a152000}, {0x3a154000}, {0x3a156000}, 
+    {0x3a158000}, {0x3a15a000}, {0x3a15c000}, {0x3a15e000}, 
+    {0x3a160000}, {0x3a162000}, {0x3a164000}, {0x3a166000}, 
+    {0x3a168000}, {0x3a16a000}, {0x3a16c000}, {0x3a16e000}, 
+    {0x3a170000}, {0x3a172000}, {0x3a174000}, {0x3a176000}, 
+    {0x3a178000}, {0x3a17a000}, {0x3a17c000}, {0x3a17e000}, 
+    {0x3a180000}, {0x3a182000}, {0x3a184000}, {0x3a186000}, 
+    {0x3a188000}, {0x3a18a000}, {0x3a18c000}, {0x3a18e000}, 
+    {0x3a190000}, {0x3a192000}, {0x3a194000}, {0x3a196000}, 
+    {0x3a198000}, {0x3a19a000}, {0x3a19c000}, {0x3a19e000}, 
+    {0x3a1a0000}, {0x3a1a2000}, {0x3a1a4000}, {0x3a1a6000}, 
+    {0x3a1a8000}, {0x3a1aa000}, {0x3a1ac000}, {0x3a1ae000}, 
+    {0x3a1b0000}, {0x3a1b2000}, {0x3a1b4000}, {0x3a1b6000}, 
+    {0x3a1b8000}, {0x3a1ba000}, {0x3a1bc000}, {0x3a1be000}, 
+    {0x3a1c0000}, {0x3a1c2000}, {0x3a1c4000}, {0x3a1c6000}, 
+    {0x3a1c8000}, {0x3a1ca000}, {0x3a1cc000}, {0x3a1ce000}, 
+    {0x3a1d0000}, {0x3a1d2000}, {0x3a1d4000}, {0x3a1d6000}, 
+    {0x3a1d8000}, {0x3a1da000}, {0x3a1dc000}, {0x3a1de000}, 
+    {0x3a1e0000}, {0x3a1e2000}, {0x3a1e4000}, {0x3a1e6000}, 
+    {0x3a1e8000}, {0x3a1ea000}, {0x3a1ec000}, {0x3a1ee000}, 
+    {0x3a1f0000}, {0x3a1f2000}, {0x3a1f4000}, {0x3a1f6000}, 
+    {0x3a1f8000}, {0x3a1fa000}, {0x3a1fc000}, {0x3a1fe000}, 
+    {0x3a200000}, {0x3a202000}, {0x3a204000}, {0x3a206000}, 
+    {0x3a208000}, {0x3a20a000}, {0x3a20c000}, {0x3a20e000}, 
+    {0x3a210000}, {0x3a212000}, {0x3a214000}, {0x3a216000}, 
+    {0x3a218000}, {0x3a21a000}, {0x3a21c000}, {0x3a21e000}, 
+    {0x3a220000}, {0x3a222000}, {0x3a224000}, {0x3a226000}, 
+    {0x3a228000}, {0x3a22a000}, {0x3a22c000}, {0x3a22e000}, 
+    {0x3a230000}, {0x3a232000}, {0x3a234000}, {0x3a236000}, 
+    {0x3a238000}, {0x3a23a000}, {0x3a23c000}, {0x3a23e000}, 
+    {0x3a240000}, {0x3a242000}, {0x3a244000}, {0x3a246000}, 
+    {0x3a248000}, {0x3a24a000}, {0x3a24c000}, {0x3a24e000}, 
+    {0x3a250000}, {0x3a252000}, {0x3a254000}, {0x3a256000}, 
+    {0x3a258000}, {0x3a25a000}, {0x3a25c000}, {0x3a25e000}, 
+    {0x3a260000}, {0x3a262000}, {0x3a264000}, {0x3a266000}, 
+    {0x3a268000}, {0x3a26a000}, {0x3a26c000}, {0x3a26e000}, 
+    {0x3a270000}, {0x3a272000}, {0x3a274000}, {0x3a276000}, 
+    {0x3a278000}, {0x3a27a000}, {0x3a27c000}, {0x3a27e000}, 
+    {0x3a280000}, {0x3a282000}, {0x3a284000}, {0x3a286000}, 
+    {0x3a288000}, {0x3a28a000}, {0x3a28c000}, {0x3a28e000}, 
+    {0x3a290000}, {0x3a292000}, {0x3a294000}, {0x3a296000}, 
+    {0x3a298000}, {0x3a29a000}, {0x3a29c000}, {0x3a29e000}, 
+    {0x3a2a0000}, {0x3a2a2000}, {0x3a2a4000}, {0x3a2a6000}, 
+    {0x3a2a8000}, {0x3a2aa000}, {0x3a2ac000}, {0x3a2ae000}, 
+    {0x3a2b0000}, {0x3a2b2000}, {0x3a2b4000}, {0x3a2b6000}, 
+    {0x3a2b8000}, {0x3a2ba000}, {0x3a2bc000}, {0x3a2be000}, 
+    {0x3a2c0000}, {0x3a2c2000}, {0x3a2c4000}, {0x3a2c6000}, 
+    {0x3a2c8000}, {0x3a2ca000}, {0x3a2cc000}, {0x3a2ce000}, 
+    {0x3a2d0000}, {0x3a2d2000}, {0x3a2d4000}, {0x3a2d6000}, 
+    {0x3a2d8000}, {0x3a2da000}, {0x3a2dc000}, {0x3a2de000}, 
+    {0x3a2e0000}, {0x3a2e2000}, {0x3a2e4000}, {0x3a2e6000}, 
+    {0x3a2e8000}, {0x3a2ea000}, {0x3a2ec000}, {0x3a2ee000}, 
+    {0x3a2f0000}, {0x3a2f2000}, {0x3a2f4000}, {0x3a2f6000}, 
+    {0x3a2f8000}, {0x3a2fa000}, {0x3a2fc000}, {0x3a2fe000}, 
+    {0x3a300000}, {0x3a302000}, {0x3a304000}, {0x3a306000}, 
+    {0x3a308000}, {0x3a30a000}, {0x3a30c000}, {0x3a30e000}, 
+    {0x3a310000}, {0x3a312000}, {0x3a314000}, {0x3a316000}, 
+    {0x3a318000}, {0x3a31a000}, {0x3a31c000}, {0x3a31e000}, 
+    {0x3a320000}, {0x3a322000}, {0x3a324000}, {0x3a326000}, 
+    {0x3a328000}, {0x3a32a000}, {0x3a32c000}, {0x3a32e000}, 
+    {0x3a330000}, {0x3a332000}, {0x3a334000}, {0x3a336000}, 
+    {0x3a338000}, {0x3a33a000}, {0x3a33c000}, {0x3a33e000}, 
+    {0x3a340000}, {0x3a342000}, {0x3a344000}, {0x3a346000}, 
+    {0x3a348000}, {0x3a34a000}, {0x3a34c000}, {0x3a34e000}, 
+    {0x3a350000}, {0x3a352000}, {0x3a354000}, {0x3a356000}, 
+    {0x3a358000}, {0x3a35a000}, {0x3a35c000}, {0x3a35e000}, 
+    {0x3a360000}, {0x3a362000}, {0x3a364000}, {0x3a366000}, 
+    {0x3a368000}, {0x3a36a000}, {0x3a36c000}, {0x3a36e000}, 
+    {0x3a370000}, {0x3a372000}, {0x3a374000}, {0x3a376000}, 
+    {0x3a378000}, {0x3a37a000}, {0x3a37c000}, {0x3a37e000}, 
+    {0x3a380000}, {0x3a382000}, {0x3a384000}, {0x3a386000}, 
+    {0x3a388000}, {0x3a38a000}, {0x3a38c000}, {0x3a38e000}, 
+    {0x3a390000}, {0x3a392000}, {0x3a394000}, {0x3a396000}, 
+    {0x3a398000}, {0x3a39a000}, {0x3a39c000}, {0x3a39e000}, 
+    {0x3a3a0000}, {0x3a3a2000}, {0x3a3a4000}, {0x3a3a6000}, 
+    {0x3a3a8000}, {0x3a3aa000}, {0x3a3ac000}, {0x3a3ae000}, 
+    {0x3a3b0000}, {0x3a3b2000}, {0x3a3b4000}, {0x3a3b6000}, 
+    {0x3a3b8000}, {0x3a3ba000}, {0x3a3bc000}, {0x3a3be000}, 
+    {0x3a3c0000}, {0x3a3c2000}, {0x3a3c4000}, {0x3a3c6000}, 
+    {0x3a3c8000}, {0x3a3ca000}, {0x3a3cc000}, {0x3a3ce000}, 
+    {0x3a3d0000}, {0x3a3d2000}, {0x3a3d4000}, {0x3a3d6000}, 
+    {0x3a3d8000}, {0x3a3da000}, {0x3a3dc000}, {0x3a3de000}, 
+    {0x3a3e0000}, {0x3a3e2000}, {0x3a3e4000}, {0x3a3e6000}, 
+    {0x3a3e8000}, {0x3a3ea000}, {0x3a3ec000}, {0x3a3ee000}, 
+    {0x3a3f0000}, {0x3a3f2000}, {0x3a3f4000}, {0x3a3f6000}, 
+    {0x3a3f8000}, {0x3a3fa000}, {0x3a3fc000}, {0x3a3fe000}, 
+    {0x3a400000}, {0x3a402000}, {0x3a404000}, {0x3a406000}, 
+    {0x3a408000}, {0x3a40a000}, {0x3a40c000}, {0x3a40e000}, 
+    {0x3a410000}, {0x3a412000}, {0x3a414000}, {0x3a416000}, 
+    {0x3a418000}, {0x3a41a000}, {0x3a41c000}, {0x3a41e000}, 
+    {0x3a420000}, {0x3a422000}, {0x3a424000}, {0x3a426000}, 
+    {0x3a428000}, {0x3a42a000}, {0x3a42c000}, {0x3a42e000}, 
+    {0x3a430000}, {0x3a432000}, {0x3a434000}, {0x3a436000}, 
+    {0x3a438000}, {0x3a43a000}, {0x3a43c000}, {0x3a43e000}, 
+    {0x3a440000}, {0x3a442000}, {0x3a444000}, {0x3a446000}, 
+    {0x3a448000}, {0x3a44a000}, {0x3a44c000}, {0x3a44e000}, 
+    {0x3a450000}, {0x3a452000}, {0x3a454000}, {0x3a456000}, 
+    {0x3a458000}, {0x3a45a000}, {0x3a45c000}, {0x3a45e000}, 
+    {0x3a460000}, {0x3a462000}, {0x3a464000}, {0x3a466000}, 
+    {0x3a468000}, {0x3a46a000}, {0x3a46c000}, {0x3a46e000}, 
+    {0x3a470000}, {0x3a472000}, {0x3a474000}, {0x3a476000}, 
+    {0x3a478000}, {0x3a47a000}, {0x3a47c000}, {0x3a47e000}, 
+    {0x3a480000}, {0x3a482000}, {0x3a484000}, {0x3a486000}, 
+    {0x3a488000}, {0x3a48a000}, {0x3a48c000}, {0x3a48e000}, 
+    {0x3a490000}, {0x3a492000}, {0x3a494000}, {0x3a496000}, 
+    {0x3a498000}, {0x3a49a000}, {0x3a49c000}, {0x3a49e000}, 
+    {0x3a4a0000}, {0x3a4a2000}, {0x3a4a4000}, {0x3a4a6000}, 
+    {0x3a4a8000}, {0x3a4aa000}, {0x3a4ac000}, {0x3a4ae000}, 
+    {0x3a4b0000}, {0x3a4b2000}, {0x3a4b4000}, {0x3a4b6000}, 
+    {0x3a4b8000}, {0x3a4ba000}, {0x3a4bc000}, {0x3a4be000}, 
+    {0x3a4c0000}, {0x3a4c2000}, {0x3a4c4000}, {0x3a4c6000}, 
+    {0x3a4c8000}, {0x3a4ca000}, {0x3a4cc000}, {0x3a4ce000}, 
+    {0x3a4d0000}, {0x3a4d2000}, {0x3a4d4000}, {0x3a4d6000}, 
+    {0x3a4d8000}, {0x3a4da000}, {0x3a4dc000}, {0x3a4de000}, 
+    {0x3a4e0000}, {0x3a4e2000}, {0x3a4e4000}, {0x3a4e6000}, 
+    {0x3a4e8000}, {0x3a4ea000}, {0x3a4ec000}, {0x3a4ee000}, 
+    {0x3a4f0000}, {0x3a4f2000}, {0x3a4f4000}, {0x3a4f6000}, 
+    {0x3a4f8000}, {0x3a4fa000}, {0x3a4fc000}, {0x3a4fe000}, 
+    {0x3a500000}, {0x3a502000}, {0x3a504000}, {0x3a506000}, 
+    {0x3a508000}, {0x3a50a000}, {0x3a50c000}, {0x3a50e000}, 
+    {0x3a510000}, {0x3a512000}, {0x3a514000}, {0x3a516000}, 
+    {0x3a518000}, {0x3a51a000}, {0x3a51c000}, {0x3a51e000}, 
+    {0x3a520000}, {0x3a522000}, {0x3a524000}, {0x3a526000}, 
+    {0x3a528000}, {0x3a52a000}, {0x3a52c000}, {0x3a52e000}, 
+    {0x3a530000}, {0x3a532000}, {0x3a534000}, {0x3a536000}, 
+    {0x3a538000}, {0x3a53a000}, {0x3a53c000}, {0x3a53e000}, 
+    {0x3a540000}, {0x3a542000}, {0x3a544000}, {0x3a546000}, 
+    {0x3a548000}, {0x3a54a000}, {0x3a54c000}, {0x3a54e000}, 
+    {0x3a550000}, {0x3a552000}, {0x3a554000}, {0x3a556000}, 
+    {0x3a558000}, {0x3a55a000}, {0x3a55c000}, {0x3a55e000}, 
+    {0x3a560000}, {0x3a562000}, {0x3a564000}, {0x3a566000}, 
+    {0x3a568000}, {0x3a56a000}, {0x3a56c000}, {0x3a56e000}, 
+    {0x3a570000}, {0x3a572000}, {0x3a574000}, {0x3a576000}, 
+    {0x3a578000}, {0x3a57a000}, {0x3a57c000}, {0x3a57e000}, 
+    {0x3a580000}, {0x3a582000}, {0x3a584000}, {0x3a586000}, 
+    {0x3a588000}, {0x3a58a000}, {0x3a58c000}, {0x3a58e000}, 
+    {0x3a590000}, {0x3a592000}, {0x3a594000}, {0x3a596000}, 
+    {0x3a598000}, {0x3a59a000}, {0x3a59c000}, {0x3a59e000}, 
+    {0x3a5a0000}, {0x3a5a2000}, {0x3a5a4000}, {0x3a5a6000}, 
+    {0x3a5a8000}, {0x3a5aa000}, {0x3a5ac000}, {0x3a5ae000}, 
+    {0x3a5b0000}, {0x3a5b2000}, {0x3a5b4000}, {0x3a5b6000}, 
+    {0x3a5b8000}, {0x3a5ba000}, {0x3a5bc000}, {0x3a5be000}, 
+    {0x3a5c0000}, {0x3a5c2000}, {0x3a5c4000}, {0x3a5c6000}, 
+    {0x3a5c8000}, {0x3a5ca000}, {0x3a5cc000}, {0x3a5ce000}, 
+    {0x3a5d0000}, {0x3a5d2000}, {0x3a5d4000}, {0x3a5d6000}, 
+    {0x3a5d8000}, {0x3a5da000}, {0x3a5dc000}, {0x3a5de000}, 
+    {0x3a5e0000}, {0x3a5e2000}, {0x3a5e4000}, {0x3a5e6000}, 
+    {0x3a5e8000}, {0x3a5ea000}, {0x3a5ec000}, {0x3a5ee000}, 
+    {0x3a5f0000}, {0x3a5f2000}, {0x3a5f4000}, {0x3a5f6000}, 
+    {0x3a5f8000}, {0x3a5fa000}, {0x3a5fc000}, {0x3a5fe000}, 
+    {0x3a600000}, {0x3a602000}, {0x3a604000}, {0x3a606000}, 
+    {0x3a608000}, {0x3a60a000}, {0x3a60c000}, {0x3a60e000}, 
+    {0x3a610000}, {0x3a612000}, {0x3a614000}, {0x3a616000}, 
+    {0x3a618000}, {0x3a61a000}, {0x3a61c000}, {0x3a61e000}, 
+    {0x3a620000}, {0x3a622000}, {0x3a624000}, {0x3a626000}, 
+    {0x3a628000}, {0x3a62a000}, {0x3a62c000}, {0x3a62e000}, 
+    {0x3a630000}, {0x3a632000}, {0x3a634000}, {0x3a636000}, 
+    {0x3a638000}, {0x3a63a000}, {0x3a63c000}, {0x3a63e000}, 
+    {0x3a640000}, {0x3a642000}, {0x3a644000}, {0x3a646000}, 
+    {0x3a648000}, {0x3a64a000}, {0x3a64c000}, {0x3a64e000}, 
+    {0x3a650000}, {0x3a652000}, {0x3a654000}, {0x3a656000}, 
+    {0x3a658000}, {0x3a65a000}, {0x3a65c000}, {0x3a65e000}, 
+    {0x3a660000}, {0x3a662000}, {0x3a664000}, {0x3a666000}, 
+    {0x3a668000}, {0x3a66a000}, {0x3a66c000}, {0x3a66e000}, 
+    {0x3a670000}, {0x3a672000}, {0x3a674000}, {0x3a676000}, 
+    {0x3a678000}, {0x3a67a000}, {0x3a67c000}, {0x3a67e000}, 
+    {0x3a680000}, {0x3a682000}, {0x3a684000}, {0x3a686000}, 
+    {0x3a688000}, {0x3a68a000}, {0x3a68c000}, {0x3a68e000}, 
+    {0x3a690000}, {0x3a692000}, {0x3a694000}, {0x3a696000}, 
+    {0x3a698000}, {0x3a69a000}, {0x3a69c000}, {0x3a69e000}, 
+    {0x3a6a0000}, {0x3a6a2000}, {0x3a6a4000}, {0x3a6a6000}, 
+    {0x3a6a8000}, {0x3a6aa000}, {0x3a6ac000}, {0x3a6ae000}, 
+    {0x3a6b0000}, {0x3a6b2000}, {0x3a6b4000}, {0x3a6b6000}, 
+    {0x3a6b8000}, {0x3a6ba000}, {0x3a6bc000}, {0x3a6be000}, 
+    {0x3a6c0000}, {0x3a6c2000}, {0x3a6c4000}, {0x3a6c6000}, 
+    {0x3a6c8000}, {0x3a6ca000}, {0x3a6cc000}, {0x3a6ce000}, 
+    {0x3a6d0000}, {0x3a6d2000}, {0x3a6d4000}, {0x3a6d6000}, 
+    {0x3a6d8000}, {0x3a6da000}, {0x3a6dc000}, {0x3a6de000}, 
+    {0x3a6e0000}, {0x3a6e2000}, {0x3a6e4000}, {0x3a6e6000}, 
+    {0x3a6e8000}, {0x3a6ea000}, {0x3a6ec000}, {0x3a6ee000}, 
+    {0x3a6f0000}, {0x3a6f2000}, {0x3a6f4000}, {0x3a6f6000}, 
+    {0x3a6f8000}, {0x3a6fa000}, {0x3a6fc000}, {0x3a6fe000}, 
+    {0x3a700000}, {0x3a702000}, {0x3a704000}, {0x3a706000}, 
+    {0x3a708000}, {0x3a70a000}, {0x3a70c000}, {0x3a70e000}, 
+    {0x3a710000}, {0x3a712000}, {0x3a714000}, {0x3a716000}, 
+    {0x3a718000}, {0x3a71a000}, {0x3a71c000}, {0x3a71e000}, 
+    {0x3a720000}, {0x3a722000}, {0x3a724000}, {0x3a726000}, 
+    {0x3a728000}, {0x3a72a000}, {0x3a72c000}, {0x3a72e000}, 
+    {0x3a730000}, {0x3a732000}, {0x3a734000}, {0x3a736000}, 
+    {0x3a738000}, {0x3a73a000}, {0x3a73c000}, {0x3a73e000}, 
+    {0x3a740000}, {0x3a742000}, {0x3a744000}, {0x3a746000}, 
+    {0x3a748000}, {0x3a74a000}, {0x3a74c000}, {0x3a74e000}, 
+    {0x3a750000}, {0x3a752000}, {0x3a754000}, {0x3a756000}, 
+    {0x3a758000}, {0x3a75a000}, {0x3a75c000}, {0x3a75e000}, 
+    {0x3a760000}, {0x3a762000}, {0x3a764000}, {0x3a766000}, 
+    {0x3a768000}, {0x3a76a000}, {0x3a76c000}, {0x3a76e000}, 
+    {0x3a770000}, {0x3a772000}, {0x3a774000}, {0x3a776000}, 
+    {0x3a778000}, {0x3a77a000}, {0x3a77c000}, {0x3a77e000}, 
+    {0x3a780000}, {0x3a782000}, {0x3a784000}, {0x3a786000}, 
+    {0x3a788000}, {0x3a78a000}, {0x3a78c000}, {0x3a78e000}, 
+    {0x3a790000}, {0x3a792000}, {0x3a794000}, {0x3a796000}, 
+    {0x3a798000}, {0x3a79a000}, {0x3a79c000}, {0x3a79e000}, 
+    {0x3a7a0000}, {0x3a7a2000}, {0x3a7a4000}, {0x3a7a6000}, 
+    {0x3a7a8000}, {0x3a7aa000}, {0x3a7ac000}, {0x3a7ae000}, 
+    {0x3a7b0000}, {0x3a7b2000}, {0x3a7b4000}, {0x3a7b6000}, 
+    {0x3a7b8000}, {0x3a7ba000}, {0x3a7bc000}, {0x3a7be000}, 
+    {0x3a7c0000}, {0x3a7c2000}, {0x3a7c4000}, {0x3a7c6000}, 
+    {0x3a7c8000}, {0x3a7ca000}, {0x3a7cc000}, {0x3a7ce000}, 
+    {0x3a7d0000}, {0x3a7d2000}, {0x3a7d4000}, {0x3a7d6000}, 
+    {0x3a7d8000}, {0x3a7da000}, {0x3a7dc000}, {0x3a7de000}, 
+    {0x3a7e0000}, {0x3a7e2000}, {0x3a7e4000}, {0x3a7e6000}, 
+    {0x3a7e8000}, {0x3a7ea000}, {0x3a7ec000}, {0x3a7ee000}, 
+    {0x3a7f0000}, {0x3a7f2000}, {0x3a7f4000}, {0x3a7f6000}, 
+    {0x3a7f8000}, {0x3a7fa000}, {0x3a7fc000}, {0x3a7fe000}, 
+    {0x3a800000}, {0x3a802000}, {0x3a804000}, {0x3a806000}, 
+    {0x3a808000}, {0x3a80a000}, {0x3a80c000}, {0x3a80e000}, 
+    {0x3a810000}, {0x3a812000}, {0x3a814000}, {0x3a816000}, 
+    {0x3a818000}, {0x3a81a000}, {0x3a81c000}, {0x3a81e000}, 
+    {0x3a820000}, {0x3a822000}, {0x3a824000}, {0x3a826000}, 
+    {0x3a828000}, {0x3a82a000}, {0x3a82c000}, {0x3a82e000}, 
+    {0x3a830000}, {0x3a832000}, {0x3a834000}, {0x3a836000}, 
+    {0x3a838000}, {0x3a83a000}, {0x3a83c000}, {0x3a83e000}, 
+    {0x3a840000}, {0x3a842000}, {0x3a844000}, {0x3a846000}, 
+    {0x3a848000}, {0x3a84a000}, {0x3a84c000}, {0x3a84e000}, 
+    {0x3a850000}, {0x3a852000}, {0x3a854000}, {0x3a856000}, 
+    {0x3a858000}, {0x3a85a000}, {0x3a85c000}, {0x3a85e000}, 
+    {0x3a860000}, {0x3a862000}, {0x3a864000}, {0x3a866000}, 
+    {0x3a868000}, {0x3a86a000}, {0x3a86c000}, {0x3a86e000}, 
+    {0x3a870000}, {0x3a872000}, {0x3a874000}, {0x3a876000}, 
+    {0x3a878000}, {0x3a87a000}, {0x3a87c000}, {0x3a87e000}, 
+    {0x3a880000}, {0x3a882000}, {0x3a884000}, {0x3a886000}, 
+    {0x3a888000}, {0x3a88a000}, {0x3a88c000}, {0x3a88e000}, 
+    {0x3a890000}, {0x3a892000}, {0x3a894000}, {0x3a896000}, 
+    {0x3a898000}, {0x3a89a000}, {0x3a89c000}, {0x3a89e000}, 
+    {0x3a8a0000}, {0x3a8a2000}, {0x3a8a4000}, {0x3a8a6000}, 
+    {0x3a8a8000}, {0x3a8aa000}, {0x3a8ac000}, {0x3a8ae000}, 
+    {0x3a8b0000}, {0x3a8b2000}, {0x3a8b4000}, {0x3a8b6000}, 
+    {0x3a8b8000}, {0x3a8ba000}, {0x3a8bc000}, {0x3a8be000}, 
+    {0x3a8c0000}, {0x3a8c2000}, {0x3a8c4000}, {0x3a8c6000}, 
+    {0x3a8c8000}, {0x3a8ca000}, {0x3a8cc000}, {0x3a8ce000}, 
+    {0x3a8d0000}, {0x3a8d2000}, {0x3a8d4000}, {0x3a8d6000}, 
+    {0x3a8d8000}, {0x3a8da000}, {0x3a8dc000}, {0x3a8de000}, 
+    {0x3a8e0000}, {0x3a8e2000}, {0x3a8e4000}, {0x3a8e6000}, 
+    {0x3a8e8000}, {0x3a8ea000}, {0x3a8ec000}, {0x3a8ee000}, 
+    {0x3a8f0000}, {0x3a8f2000}, {0x3a8f4000}, {0x3a8f6000}, 
+    {0x3a8f8000}, {0x3a8fa000}, {0x3a8fc000}, {0x3a8fe000}, 
+    {0x3a900000}, {0x3a902000}, {0x3a904000}, {0x3a906000}, 
+    {0x3a908000}, {0x3a90a000}, {0x3a90c000}, {0x3a90e000}, 
+    {0x3a910000}, {0x3a912000}, {0x3a914000}, {0x3a916000}, 
+    {0x3a918000}, {0x3a91a000}, {0x3a91c000}, {0x3a91e000}, 
+    {0x3a920000}, {0x3a922000}, {0x3a924000}, {0x3a926000}, 
+    {0x3a928000}, {0x3a92a000}, {0x3a92c000}, {0x3a92e000}, 
+    {0x3a930000}, {0x3a932000}, {0x3a934000}, {0x3a936000}, 
+    {0x3a938000}, {0x3a93a000}, {0x3a93c000}, {0x3a93e000}, 
+    {0x3a940000}, {0x3a942000}, {0x3a944000}, {0x3a946000}, 
+    {0x3a948000}, {0x3a94a000}, {0x3a94c000}, {0x3a94e000}, 
+    {0x3a950000}, {0x3a952000}, {0x3a954000}, {0x3a956000}, 
+    {0x3a958000}, {0x3a95a000}, {0x3a95c000}, {0x3a95e000}, 
+    {0x3a960000}, {0x3a962000}, {0x3a964000}, {0x3a966000}, 
+    {0x3a968000}, {0x3a96a000}, {0x3a96c000}, {0x3a96e000}, 
+    {0x3a970000}, {0x3a972000}, {0x3a974000}, {0x3a976000}, 
+    {0x3a978000}, {0x3a97a000}, {0x3a97c000}, {0x3a97e000}, 
+    {0x3a980000}, {0x3a982000}, {0x3a984000}, {0x3a986000}, 
+    {0x3a988000}, {0x3a98a000}, {0x3a98c000}, {0x3a98e000}, 
+    {0x3a990000}, {0x3a992000}, {0x3a994000}, {0x3a996000}, 
+    {0x3a998000}, {0x3a99a000}, {0x3a99c000}, {0x3a99e000}, 
+    {0x3a9a0000}, {0x3a9a2000}, {0x3a9a4000}, {0x3a9a6000}, 
+    {0x3a9a8000}, {0x3a9aa000}, {0x3a9ac000}, {0x3a9ae000}, 
+    {0x3a9b0000}, {0x3a9b2000}, {0x3a9b4000}, {0x3a9b6000}, 
+    {0x3a9b8000}, {0x3a9ba000}, {0x3a9bc000}, {0x3a9be000}, 
+    {0x3a9c0000}, {0x3a9c2000}, {0x3a9c4000}, {0x3a9c6000}, 
+    {0x3a9c8000}, {0x3a9ca000}, {0x3a9cc000}, {0x3a9ce000}, 
+    {0x3a9d0000}, {0x3a9d2000}, {0x3a9d4000}, {0x3a9d6000}, 
+    {0x3a9d8000}, {0x3a9da000}, {0x3a9dc000}, {0x3a9de000}, 
+    {0x3a9e0000}, {0x3a9e2000}, {0x3a9e4000}, {0x3a9e6000}, 
+    {0x3a9e8000}, {0x3a9ea000}, {0x3a9ec000}, {0x3a9ee000}, 
+    {0x3a9f0000}, {0x3a9f2000}, {0x3a9f4000}, {0x3a9f6000}, 
+    {0x3a9f8000}, {0x3a9fa000}, {0x3a9fc000}, {0x3a9fe000}, 
+    {0x3aa00000}, {0x3aa02000}, {0x3aa04000}, {0x3aa06000}, 
+    {0x3aa08000}, {0x3aa0a000}, {0x3aa0c000}, {0x3aa0e000}, 
+    {0x3aa10000}, {0x3aa12000}, {0x3aa14000}, {0x3aa16000}, 
+    {0x3aa18000}, {0x3aa1a000}, {0x3aa1c000}, {0x3aa1e000}, 
+    {0x3aa20000}, {0x3aa22000}, {0x3aa24000}, {0x3aa26000}, 
+    {0x3aa28000}, {0x3aa2a000}, {0x3aa2c000}, {0x3aa2e000}, 
+    {0x3aa30000}, {0x3aa32000}, {0x3aa34000}, {0x3aa36000}, 
+    {0x3aa38000}, {0x3aa3a000}, {0x3aa3c000}, {0x3aa3e000}, 
+    {0x3aa40000}, {0x3aa42000}, {0x3aa44000}, {0x3aa46000}, 
+    {0x3aa48000}, {0x3aa4a000}, {0x3aa4c000}, {0x3aa4e000}, 
+    {0x3aa50000}, {0x3aa52000}, {0x3aa54000}, {0x3aa56000}, 
+    {0x3aa58000}, {0x3aa5a000}, {0x3aa5c000}, {0x3aa5e000}, 
+    {0x3aa60000}, {0x3aa62000}, {0x3aa64000}, {0x3aa66000}, 
+    {0x3aa68000}, {0x3aa6a000}, {0x3aa6c000}, {0x3aa6e000}, 
+    {0x3aa70000}, {0x3aa72000}, {0x3aa74000}, {0x3aa76000}, 
+    {0x3aa78000}, {0x3aa7a000}, {0x3aa7c000}, {0x3aa7e000}, 
+    {0x3aa80000}, {0x3aa82000}, {0x3aa84000}, {0x3aa86000}, 
+    {0x3aa88000}, {0x3aa8a000}, {0x3aa8c000}, {0x3aa8e000}, 
+    {0x3aa90000}, {0x3aa92000}, {0x3aa94000}, {0x3aa96000}, 
+    {0x3aa98000}, {0x3aa9a000}, {0x3aa9c000}, {0x3aa9e000}, 
+    {0x3aaa0000}, {0x3aaa2000}, {0x3aaa4000}, {0x3aaa6000}, 
+    {0x3aaa8000}, {0x3aaaa000}, {0x3aaac000}, {0x3aaae000}, 
+    {0x3aab0000}, {0x3aab2000}, {0x3aab4000}, {0x3aab6000}, 
+    {0x3aab8000}, {0x3aaba000}, {0x3aabc000}, {0x3aabe000}, 
+    {0x3aac0000}, {0x3aac2000}, {0x3aac4000}, {0x3aac6000}, 
+    {0x3aac8000}, {0x3aaca000}, {0x3aacc000}, {0x3aace000}, 
+    {0x3aad0000}, {0x3aad2000}, {0x3aad4000}, {0x3aad6000}, 
+    {0x3aad8000}, {0x3aada000}, {0x3aadc000}, {0x3aade000}, 
+    {0x3aae0000}, {0x3aae2000}, {0x3aae4000}, {0x3aae6000}, 
+    {0x3aae8000}, {0x3aaea000}, {0x3aaec000}, {0x3aaee000}, 
+    {0x3aaf0000}, {0x3aaf2000}, {0x3aaf4000}, {0x3aaf6000}, 
+    {0x3aaf8000}, {0x3aafa000}, {0x3aafc000}, {0x3aafe000}, 
+    {0x3ab00000}, {0x3ab02000}, {0x3ab04000}, {0x3ab06000}, 
+    {0x3ab08000}, {0x3ab0a000}, {0x3ab0c000}, {0x3ab0e000}, 
+    {0x3ab10000}, {0x3ab12000}, {0x3ab14000}, {0x3ab16000}, 
+    {0x3ab18000}, {0x3ab1a000}, {0x3ab1c000}, {0x3ab1e000}, 
+    {0x3ab20000}, {0x3ab22000}, {0x3ab24000}, {0x3ab26000}, 
+    {0x3ab28000}, {0x3ab2a000}, {0x3ab2c000}, {0x3ab2e000}, 
+    {0x3ab30000}, {0x3ab32000}, {0x3ab34000}, {0x3ab36000}, 
+    {0x3ab38000}, {0x3ab3a000}, {0x3ab3c000}, {0x3ab3e000}, 
+    {0x3ab40000}, {0x3ab42000}, {0x3ab44000}, {0x3ab46000}, 
+    {0x3ab48000}, {0x3ab4a000}, {0x3ab4c000}, {0x3ab4e000}, 
+    {0x3ab50000}, {0x3ab52000}, {0x3ab54000}, {0x3ab56000}, 
+    {0x3ab58000}, {0x3ab5a000}, {0x3ab5c000}, {0x3ab5e000}, 
+    {0x3ab60000}, {0x3ab62000}, {0x3ab64000}, {0x3ab66000}, 
+    {0x3ab68000}, {0x3ab6a000}, {0x3ab6c000}, {0x3ab6e000}, 
+    {0x3ab70000}, {0x3ab72000}, {0x3ab74000}, {0x3ab76000}, 
+    {0x3ab78000}, {0x3ab7a000}, {0x3ab7c000}, {0x3ab7e000}, 
+    {0x3ab80000}, {0x3ab82000}, {0x3ab84000}, {0x3ab86000}, 
+    {0x3ab88000}, {0x3ab8a000}, {0x3ab8c000}, {0x3ab8e000}, 
+    {0x3ab90000}, {0x3ab92000}, {0x3ab94000}, {0x3ab96000}, 
+    {0x3ab98000}, {0x3ab9a000}, {0x3ab9c000}, {0x3ab9e000}, 
+    {0x3aba0000}, {0x3aba2000}, {0x3aba4000}, {0x3aba6000}, 
+    {0x3aba8000}, {0x3abaa000}, {0x3abac000}, {0x3abae000}, 
+    {0x3abb0000}, {0x3abb2000}, {0x3abb4000}, {0x3abb6000}, 
+    {0x3abb8000}, {0x3abba000}, {0x3abbc000}, {0x3abbe000}, 
+    {0x3abc0000}, {0x3abc2000}, {0x3abc4000}, {0x3abc6000}, 
+    {0x3abc8000}, {0x3abca000}, {0x3abcc000}, {0x3abce000}, 
+    {0x3abd0000}, {0x3abd2000}, {0x3abd4000}, {0x3abd6000}, 
+    {0x3abd8000}, {0x3abda000}, {0x3abdc000}, {0x3abde000}, 
+    {0x3abe0000}, {0x3abe2000}, {0x3abe4000}, {0x3abe6000}, 
+    {0x3abe8000}, {0x3abea000}, {0x3abec000}, {0x3abee000}, 
+    {0x3abf0000}, {0x3abf2000}, {0x3abf4000}, {0x3abf6000}, 
+    {0x3abf8000}, {0x3abfa000}, {0x3abfc000}, {0x3abfe000}, 
+    {0x3ac00000}, {0x3ac02000}, {0x3ac04000}, {0x3ac06000}, 
+    {0x3ac08000}, {0x3ac0a000}, {0x3ac0c000}, {0x3ac0e000}, 
+    {0x3ac10000}, {0x3ac12000}, {0x3ac14000}, {0x3ac16000}, 
+    {0x3ac18000}, {0x3ac1a000}, {0x3ac1c000}, {0x3ac1e000}, 
+    {0x3ac20000}, {0x3ac22000}, {0x3ac24000}, {0x3ac26000}, 
+    {0x3ac28000}, {0x3ac2a000}, {0x3ac2c000}, {0x3ac2e000}, 
+    {0x3ac30000}, {0x3ac32000}, {0x3ac34000}, {0x3ac36000}, 
+    {0x3ac38000}, {0x3ac3a000}, {0x3ac3c000}, {0x3ac3e000}, 
+    {0x3ac40000}, {0x3ac42000}, {0x3ac44000}, {0x3ac46000}, 
+    {0x3ac48000}, {0x3ac4a000}, {0x3ac4c000}, {0x3ac4e000}, 
+    {0x3ac50000}, {0x3ac52000}, {0x3ac54000}, {0x3ac56000}, 
+    {0x3ac58000}, {0x3ac5a000}, {0x3ac5c000}, {0x3ac5e000}, 
+    {0x3ac60000}, {0x3ac62000}, {0x3ac64000}, {0x3ac66000}, 
+    {0x3ac68000}, {0x3ac6a000}, {0x3ac6c000}, {0x3ac6e000}, 
+    {0x3ac70000}, {0x3ac72000}, {0x3ac74000}, {0x3ac76000}, 
+    {0x3ac78000}, {0x3ac7a000}, {0x3ac7c000}, {0x3ac7e000}, 
+    {0x3ac80000}, {0x3ac82000}, {0x3ac84000}, {0x3ac86000}, 
+    {0x3ac88000}, {0x3ac8a000}, {0x3ac8c000}, {0x3ac8e000}, 
+    {0x3ac90000}, {0x3ac92000}, {0x3ac94000}, {0x3ac96000}, 
+    {0x3ac98000}, {0x3ac9a000}, {0x3ac9c000}, {0x3ac9e000}, 
+    {0x3aca0000}, {0x3aca2000}, {0x3aca4000}, {0x3aca6000}, 
+    {0x3aca8000}, {0x3acaa000}, {0x3acac000}, {0x3acae000}, 
+    {0x3acb0000}, {0x3acb2000}, {0x3acb4000}, {0x3acb6000}, 
+    {0x3acb8000}, {0x3acba000}, {0x3acbc000}, {0x3acbe000}, 
+    {0x3acc0000}, {0x3acc2000}, {0x3acc4000}, {0x3acc6000}, 
+    {0x3acc8000}, {0x3acca000}, {0x3accc000}, {0x3acce000}, 
+    {0x3acd0000}, {0x3acd2000}, {0x3acd4000}, {0x3acd6000}, 
+    {0x3acd8000}, {0x3acda000}, {0x3acdc000}, {0x3acde000}, 
+    {0x3ace0000}, {0x3ace2000}, {0x3ace4000}, {0x3ace6000}, 
+    {0x3ace8000}, {0x3acea000}, {0x3acec000}, {0x3acee000}, 
+    {0x3acf0000}, {0x3acf2000}, {0x3acf4000}, {0x3acf6000}, 
+    {0x3acf8000}, {0x3acfa000}, {0x3acfc000}, {0x3acfe000}, 
+    {0x3ad00000}, {0x3ad02000}, {0x3ad04000}, {0x3ad06000}, 
+    {0x3ad08000}, {0x3ad0a000}, {0x3ad0c000}, {0x3ad0e000}, 
+    {0x3ad10000}, {0x3ad12000}, {0x3ad14000}, {0x3ad16000}, 
+    {0x3ad18000}, {0x3ad1a000}, {0x3ad1c000}, {0x3ad1e000}, 
+    {0x3ad20000}, {0x3ad22000}, {0x3ad24000}, {0x3ad26000}, 
+    {0x3ad28000}, {0x3ad2a000}, {0x3ad2c000}, {0x3ad2e000}, 
+    {0x3ad30000}, {0x3ad32000}, {0x3ad34000}, {0x3ad36000}, 
+    {0x3ad38000}, {0x3ad3a000}, {0x3ad3c000}, {0x3ad3e000}, 
+    {0x3ad40000}, {0x3ad42000}, {0x3ad44000}, {0x3ad46000}, 
+    {0x3ad48000}, {0x3ad4a000}, {0x3ad4c000}, {0x3ad4e000}, 
+    {0x3ad50000}, {0x3ad52000}, {0x3ad54000}, {0x3ad56000}, 
+    {0x3ad58000}, {0x3ad5a000}, {0x3ad5c000}, {0x3ad5e000}, 
+    {0x3ad60000}, {0x3ad62000}, {0x3ad64000}, {0x3ad66000}, 
+    {0x3ad68000}, {0x3ad6a000}, {0x3ad6c000}, {0x3ad6e000}, 
+    {0x3ad70000}, {0x3ad72000}, {0x3ad74000}, {0x3ad76000}, 
+    {0x3ad78000}, {0x3ad7a000}, {0x3ad7c000}, {0x3ad7e000}, 
+    {0x3ad80000}, {0x3ad82000}, {0x3ad84000}, {0x3ad86000}, 
+    {0x3ad88000}, {0x3ad8a000}, {0x3ad8c000}, {0x3ad8e000}, 
+    {0x3ad90000}, {0x3ad92000}, {0x3ad94000}, {0x3ad96000}, 
+    {0x3ad98000}, {0x3ad9a000}, {0x3ad9c000}, {0x3ad9e000}, 
+    {0x3ada0000}, {0x3ada2000}, {0x3ada4000}, {0x3ada6000}, 
+    {0x3ada8000}, {0x3adaa000}, {0x3adac000}, {0x3adae000}, 
+    {0x3adb0000}, {0x3adb2000}, {0x3adb4000}, {0x3adb6000}, 
+    {0x3adb8000}, {0x3adba000}, {0x3adbc000}, {0x3adbe000}, 
+    {0x3adc0000}, {0x3adc2000}, {0x3adc4000}, {0x3adc6000}, 
+    {0x3adc8000}, {0x3adca000}, {0x3adcc000}, {0x3adce000}, 
+    {0x3add0000}, {0x3add2000}, {0x3add4000}, {0x3add6000}, 
+    {0x3add8000}, {0x3adda000}, {0x3addc000}, {0x3adde000}, 
+    {0x3ade0000}, {0x3ade2000}, {0x3ade4000}, {0x3ade6000}, 
+    {0x3ade8000}, {0x3adea000}, {0x3adec000}, {0x3adee000}, 
+    {0x3adf0000}, {0x3adf2000}, {0x3adf4000}, {0x3adf6000}, 
+    {0x3adf8000}, {0x3adfa000}, {0x3adfc000}, {0x3adfe000}, 
+    {0x3ae00000}, {0x3ae02000}, {0x3ae04000}, {0x3ae06000}, 
+    {0x3ae08000}, {0x3ae0a000}, {0x3ae0c000}, {0x3ae0e000}, 
+    {0x3ae10000}, {0x3ae12000}, {0x3ae14000}, {0x3ae16000}, 
+    {0x3ae18000}, {0x3ae1a000}, {0x3ae1c000}, {0x3ae1e000}, 
+    {0x3ae20000}, {0x3ae22000}, {0x3ae24000}, {0x3ae26000}, 
+    {0x3ae28000}, {0x3ae2a000}, {0x3ae2c000}, {0x3ae2e000}, 
+    {0x3ae30000}, {0x3ae32000}, {0x3ae34000}, {0x3ae36000}, 
+    {0x3ae38000}, {0x3ae3a000}, {0x3ae3c000}, {0x3ae3e000}, 
+    {0x3ae40000}, {0x3ae42000}, {0x3ae44000}, {0x3ae46000}, 
+    {0x3ae48000}, {0x3ae4a000}, {0x3ae4c000}, {0x3ae4e000}, 
+    {0x3ae50000}, {0x3ae52000}, {0x3ae54000}, {0x3ae56000}, 
+    {0x3ae58000}, {0x3ae5a000}, {0x3ae5c000}, {0x3ae5e000}, 
+    {0x3ae60000}, {0x3ae62000}, {0x3ae64000}, {0x3ae66000}, 
+    {0x3ae68000}, {0x3ae6a000}, {0x3ae6c000}, {0x3ae6e000}, 
+    {0x3ae70000}, {0x3ae72000}, {0x3ae74000}, {0x3ae76000}, 
+    {0x3ae78000}, {0x3ae7a000}, {0x3ae7c000}, {0x3ae7e000}, 
+    {0x3ae80000}, {0x3ae82000}, {0x3ae84000}, {0x3ae86000}, 
+    {0x3ae88000}, {0x3ae8a000}, {0x3ae8c000}, {0x3ae8e000}, 
+    {0x3ae90000}, {0x3ae92000}, {0x3ae94000}, {0x3ae96000}, 
+    {0x3ae98000}, {0x3ae9a000}, {0x3ae9c000}, {0x3ae9e000}, 
+    {0x3aea0000}, {0x3aea2000}, {0x3aea4000}, {0x3aea6000}, 
+    {0x3aea8000}, {0x3aeaa000}, {0x3aeac000}, {0x3aeae000}, 
+    {0x3aeb0000}, {0x3aeb2000}, {0x3aeb4000}, {0x3aeb6000}, 
+    {0x3aeb8000}, {0x3aeba000}, {0x3aebc000}, {0x3aebe000}, 
+    {0x3aec0000}, {0x3aec2000}, {0x3aec4000}, {0x3aec6000}, 
+    {0x3aec8000}, {0x3aeca000}, {0x3aecc000}, {0x3aece000}, 
+    {0x3aed0000}, {0x3aed2000}, {0x3aed4000}, {0x3aed6000}, 
+    {0x3aed8000}, {0x3aeda000}, {0x3aedc000}, {0x3aede000}, 
+    {0x3aee0000}, {0x3aee2000}, {0x3aee4000}, {0x3aee6000}, 
+    {0x3aee8000}, {0x3aeea000}, {0x3aeec000}, {0x3aeee000}, 
+    {0x3aef0000}, {0x3aef2000}, {0x3aef4000}, {0x3aef6000}, 
+    {0x3aef8000}, {0x3aefa000}, {0x3aefc000}, {0x3aefe000}, 
+    {0x3af00000}, {0x3af02000}, {0x3af04000}, {0x3af06000}, 
+    {0x3af08000}, {0x3af0a000}, {0x3af0c000}, {0x3af0e000}, 
+    {0x3af10000}, {0x3af12000}, {0x3af14000}, {0x3af16000}, 
+    {0x3af18000}, {0x3af1a000}, {0x3af1c000}, {0x3af1e000}, 
+    {0x3af20000}, {0x3af22000}, {0x3af24000}, {0x3af26000}, 
+    {0x3af28000}, {0x3af2a000}, {0x3af2c000}, {0x3af2e000}, 
+    {0x3af30000}, {0x3af32000}, {0x3af34000}, {0x3af36000}, 
+    {0x3af38000}, {0x3af3a000}, {0x3af3c000}, {0x3af3e000}, 
+    {0x3af40000}, {0x3af42000}, {0x3af44000}, {0x3af46000}, 
+    {0x3af48000}, {0x3af4a000}, {0x3af4c000}, {0x3af4e000}, 
+    {0x3af50000}, {0x3af52000}, {0x3af54000}, {0x3af56000}, 
+    {0x3af58000}, {0x3af5a000}, {0x3af5c000}, {0x3af5e000}, 
+    {0x3af60000}, {0x3af62000}, {0x3af64000}, {0x3af66000}, 
+    {0x3af68000}, {0x3af6a000}, {0x3af6c000}, {0x3af6e000}, 
+    {0x3af70000}, {0x3af72000}, {0x3af74000}, {0x3af76000}, 
+    {0x3af78000}, {0x3af7a000}, {0x3af7c000}, {0x3af7e000}, 
+    {0x3af80000}, {0x3af82000}, {0x3af84000}, {0x3af86000}, 
+    {0x3af88000}, {0x3af8a000}, {0x3af8c000}, {0x3af8e000}, 
+    {0x3af90000}, {0x3af92000}, {0x3af94000}, {0x3af96000}, 
+    {0x3af98000}, {0x3af9a000}, {0x3af9c000}, {0x3af9e000}, 
+    {0x3afa0000}, {0x3afa2000}, {0x3afa4000}, {0x3afa6000}, 
+    {0x3afa8000}, {0x3afaa000}, {0x3afac000}, {0x3afae000}, 
+    {0x3afb0000}, {0x3afb2000}, {0x3afb4000}, {0x3afb6000}, 
+    {0x3afb8000}, {0x3afba000}, {0x3afbc000}, {0x3afbe000}, 
+    {0x3afc0000}, {0x3afc2000}, {0x3afc4000}, {0x3afc6000}, 
+    {0x3afc8000}, {0x3afca000}, {0x3afcc000}, {0x3afce000}, 
+    {0x3afd0000}, {0x3afd2000}, {0x3afd4000}, {0x3afd6000}, 
+    {0x3afd8000}, {0x3afda000}, {0x3afdc000}, {0x3afde000}, 
+    {0x3afe0000}, {0x3afe2000}, {0x3afe4000}, {0x3afe6000}, 
+    {0x3afe8000}, {0x3afea000}, {0x3afec000}, {0x3afee000}, 
+    {0x3aff0000}, {0x3aff2000}, {0x3aff4000}, {0x3aff6000}, 
+    {0x3aff8000}, {0x3affa000}, {0x3affc000}, {0x3affe000}, 
+    {0x3b000000}, {0x3b002000}, {0x3b004000}, {0x3b006000}, 
+    {0x3b008000}, {0x3b00a000}, {0x3b00c000}, {0x3b00e000}, 
+    {0x3b010000}, {0x3b012000}, {0x3b014000}, {0x3b016000}, 
+    {0x3b018000}, {0x3b01a000}, {0x3b01c000}, {0x3b01e000}, 
+    {0x3b020000}, {0x3b022000}, {0x3b024000}, {0x3b026000}, 
+    {0x3b028000}, {0x3b02a000}, {0x3b02c000}, {0x3b02e000}, 
+    {0x3b030000}, {0x3b032000}, {0x3b034000}, {0x3b036000}, 
+    {0x3b038000}, {0x3b03a000}, {0x3b03c000}, {0x3b03e000}, 
+    {0x3b040000}, {0x3b042000}, {0x3b044000}, {0x3b046000}, 
+    {0x3b048000}, {0x3b04a000}, {0x3b04c000}, {0x3b04e000}, 
+    {0x3b050000}, {0x3b052000}, {0x3b054000}, {0x3b056000}, 
+    {0x3b058000}, {0x3b05a000}, {0x3b05c000}, {0x3b05e000}, 
+    {0x3b060000}, {0x3b062000}, {0x3b064000}, {0x3b066000}, 
+    {0x3b068000}, {0x3b06a000}, {0x3b06c000}, {0x3b06e000}, 
+    {0x3b070000}, {0x3b072000}, {0x3b074000}, {0x3b076000}, 
+    {0x3b078000}, {0x3b07a000}, {0x3b07c000}, {0x3b07e000}, 
+    {0x3b080000}, {0x3b082000}, {0x3b084000}, {0x3b086000}, 
+    {0x3b088000}, {0x3b08a000}, {0x3b08c000}, {0x3b08e000}, 
+    {0x3b090000}, {0x3b092000}, {0x3b094000}, {0x3b096000}, 
+    {0x3b098000}, {0x3b09a000}, {0x3b09c000}, {0x3b09e000}, 
+    {0x3b0a0000}, {0x3b0a2000}, {0x3b0a4000}, {0x3b0a6000}, 
+    {0x3b0a8000}, {0x3b0aa000}, {0x3b0ac000}, {0x3b0ae000}, 
+    {0x3b0b0000}, {0x3b0b2000}, {0x3b0b4000}, {0x3b0b6000}, 
+    {0x3b0b8000}, {0x3b0ba000}, {0x3b0bc000}, {0x3b0be000}, 
+    {0x3b0c0000}, {0x3b0c2000}, {0x3b0c4000}, {0x3b0c6000}, 
+    {0x3b0c8000}, {0x3b0ca000}, {0x3b0cc000}, {0x3b0ce000}, 
+    {0x3b0d0000}, {0x3b0d2000}, {0x3b0d4000}, {0x3b0d6000}, 
+    {0x3b0d8000}, {0x3b0da000}, {0x3b0dc000}, {0x3b0de000}, 
+    {0x3b0e0000}, {0x3b0e2000}, {0x3b0e4000}, {0x3b0e6000}, 
+    {0x3b0e8000}, {0x3b0ea000}, {0x3b0ec000}, {0x3b0ee000}, 
+    {0x3b0f0000}, {0x3b0f2000}, {0x3b0f4000}, {0x3b0f6000}, 
+    {0x3b0f8000}, {0x3b0fa000}, {0x3b0fc000}, {0x3b0fe000}, 
+    {0x3b100000}, {0x3b102000}, {0x3b104000}, {0x3b106000}, 
+    {0x3b108000}, {0x3b10a000}, {0x3b10c000}, {0x3b10e000}, 
+    {0x3b110000}, {0x3b112000}, {0x3b114000}, {0x3b116000}, 
+    {0x3b118000}, {0x3b11a000}, {0x3b11c000}, {0x3b11e000}, 
+    {0x3b120000}, {0x3b122000}, {0x3b124000}, {0x3b126000}, 
+    {0x3b128000}, {0x3b12a000}, {0x3b12c000}, {0x3b12e000}, 
+    {0x3b130000}, {0x3b132000}, {0x3b134000}, {0x3b136000}, 
+    {0x3b138000}, {0x3b13a000}, {0x3b13c000}, {0x3b13e000}, 
+    {0x3b140000}, {0x3b142000}, {0x3b144000}, {0x3b146000}, 
+    {0x3b148000}, {0x3b14a000}, {0x3b14c000}, {0x3b14e000}, 
+    {0x3b150000}, {0x3b152000}, {0x3b154000}, {0x3b156000}, 
+    {0x3b158000}, {0x3b15a000}, {0x3b15c000}, {0x3b15e000}, 
+    {0x3b160000}, {0x3b162000}, {0x3b164000}, {0x3b166000}, 
+    {0x3b168000}, {0x3b16a000}, {0x3b16c000}, {0x3b16e000}, 
+    {0x3b170000}, {0x3b172000}, {0x3b174000}, {0x3b176000}, 
+    {0x3b178000}, {0x3b17a000}, {0x3b17c000}, {0x3b17e000}, 
+    {0x3b180000}, {0x3b182000}, {0x3b184000}, {0x3b186000}, 
+    {0x3b188000}, {0x3b18a000}, {0x3b18c000}, {0x3b18e000}, 
+    {0x3b190000}, {0x3b192000}, {0x3b194000}, {0x3b196000}, 
+    {0x3b198000}, {0x3b19a000}, {0x3b19c000}, {0x3b19e000}, 
+    {0x3b1a0000}, {0x3b1a2000}, {0x3b1a4000}, {0x3b1a6000}, 
+    {0x3b1a8000}, {0x3b1aa000}, {0x3b1ac000}, {0x3b1ae000}, 
+    {0x3b1b0000}, {0x3b1b2000}, {0x3b1b4000}, {0x3b1b6000}, 
+    {0x3b1b8000}, {0x3b1ba000}, {0x3b1bc000}, {0x3b1be000}, 
+    {0x3b1c0000}, {0x3b1c2000}, {0x3b1c4000}, {0x3b1c6000}, 
+    {0x3b1c8000}, {0x3b1ca000}, {0x3b1cc000}, {0x3b1ce000}, 
+    {0x3b1d0000}, {0x3b1d2000}, {0x3b1d4000}, {0x3b1d6000}, 
+    {0x3b1d8000}, {0x3b1da000}, {0x3b1dc000}, {0x3b1de000}, 
+    {0x3b1e0000}, {0x3b1e2000}, {0x3b1e4000}, {0x3b1e6000}, 
+    {0x3b1e8000}, {0x3b1ea000}, {0x3b1ec000}, {0x3b1ee000}, 
+    {0x3b1f0000}, {0x3b1f2000}, {0x3b1f4000}, {0x3b1f6000}, 
+    {0x3b1f8000}, {0x3b1fa000}, {0x3b1fc000}, {0x3b1fe000}, 
+    {0x3b200000}, {0x3b202000}, {0x3b204000}, {0x3b206000}, 
+    {0x3b208000}, {0x3b20a000}, {0x3b20c000}, {0x3b20e000}, 
+    {0x3b210000}, {0x3b212000}, {0x3b214000}, {0x3b216000}, 
+    {0x3b218000}, {0x3b21a000}, {0x3b21c000}, {0x3b21e000}, 
+    {0x3b220000}, {0x3b222000}, {0x3b224000}, {0x3b226000}, 
+    {0x3b228000}, {0x3b22a000}, {0x3b22c000}, {0x3b22e000}, 
+    {0x3b230000}, {0x3b232000}, {0x3b234000}, {0x3b236000}, 
+    {0x3b238000}, {0x3b23a000}, {0x3b23c000}, {0x3b23e000}, 
+    {0x3b240000}, {0x3b242000}, {0x3b244000}, {0x3b246000}, 
+    {0x3b248000}, {0x3b24a000}, {0x3b24c000}, {0x3b24e000}, 
+    {0x3b250000}, {0x3b252000}, {0x3b254000}, {0x3b256000}, 
+    {0x3b258000}, {0x3b25a000}, {0x3b25c000}, {0x3b25e000}, 
+    {0x3b260000}, {0x3b262000}, {0x3b264000}, {0x3b266000}, 
+    {0x3b268000}, {0x3b26a000}, {0x3b26c000}, {0x3b26e000}, 
+    {0x3b270000}, {0x3b272000}, {0x3b274000}, {0x3b276000}, 
+    {0x3b278000}, {0x3b27a000}, {0x3b27c000}, {0x3b27e000}, 
+    {0x3b280000}, {0x3b282000}, {0x3b284000}, {0x3b286000}, 
+    {0x3b288000}, {0x3b28a000}, {0x3b28c000}, {0x3b28e000}, 
+    {0x3b290000}, {0x3b292000}, {0x3b294000}, {0x3b296000}, 
+    {0x3b298000}, {0x3b29a000}, {0x3b29c000}, {0x3b29e000}, 
+    {0x3b2a0000}, {0x3b2a2000}, {0x3b2a4000}, {0x3b2a6000}, 
+    {0x3b2a8000}, {0x3b2aa000}, {0x3b2ac000}, {0x3b2ae000}, 
+    {0x3b2b0000}, {0x3b2b2000}, {0x3b2b4000}, {0x3b2b6000}, 
+    {0x3b2b8000}, {0x3b2ba000}, {0x3b2bc000}, {0x3b2be000}, 
+    {0x3b2c0000}, {0x3b2c2000}, {0x3b2c4000}, {0x3b2c6000}, 
+    {0x3b2c8000}, {0x3b2ca000}, {0x3b2cc000}, {0x3b2ce000}, 
+    {0x3b2d0000}, {0x3b2d2000}, {0x3b2d4000}, {0x3b2d6000}, 
+    {0x3b2d8000}, {0x3b2da000}, {0x3b2dc000}, {0x3b2de000}, 
+    {0x3b2e0000}, {0x3b2e2000}, {0x3b2e4000}, {0x3b2e6000}, 
+    {0x3b2e8000}, {0x3b2ea000}, {0x3b2ec000}, {0x3b2ee000}, 
+    {0x3b2f0000}, {0x3b2f2000}, {0x3b2f4000}, {0x3b2f6000}, 
+    {0x3b2f8000}, {0x3b2fa000}, {0x3b2fc000}, {0x3b2fe000}, 
+    {0x3b300000}, {0x3b302000}, {0x3b304000}, {0x3b306000}, 
+    {0x3b308000}, {0x3b30a000}, {0x3b30c000}, {0x3b30e000}, 
+    {0x3b310000}, {0x3b312000}, {0x3b314000}, {0x3b316000}, 
+    {0x3b318000}, {0x3b31a000}, {0x3b31c000}, {0x3b31e000}, 
+    {0x3b320000}, {0x3b322000}, {0x3b324000}, {0x3b326000}, 
+    {0x3b328000}, {0x3b32a000}, {0x3b32c000}, {0x3b32e000}, 
+    {0x3b330000}, {0x3b332000}, {0x3b334000}, {0x3b336000}, 
+    {0x3b338000}, {0x3b33a000}, {0x3b33c000}, {0x3b33e000}, 
+    {0x3b340000}, {0x3b342000}, {0x3b344000}, {0x3b346000}, 
+    {0x3b348000}, {0x3b34a000}, {0x3b34c000}, {0x3b34e000}, 
+    {0x3b350000}, {0x3b352000}, {0x3b354000}, {0x3b356000}, 
+    {0x3b358000}, {0x3b35a000}, {0x3b35c000}, {0x3b35e000}, 
+    {0x3b360000}, {0x3b362000}, {0x3b364000}, {0x3b366000}, 
+    {0x3b368000}, {0x3b36a000}, {0x3b36c000}, {0x3b36e000}, 
+    {0x3b370000}, {0x3b372000}, {0x3b374000}, {0x3b376000}, 
+    {0x3b378000}, {0x3b37a000}, {0x3b37c000}, {0x3b37e000}, 
+    {0x3b380000}, {0x3b382000}, {0x3b384000}, {0x3b386000}, 
+    {0x3b388000}, {0x3b38a000}, {0x3b38c000}, {0x3b38e000}, 
+    {0x3b390000}, {0x3b392000}, {0x3b394000}, {0x3b396000}, 
+    {0x3b398000}, {0x3b39a000}, {0x3b39c000}, {0x3b39e000}, 
+    {0x3b3a0000}, {0x3b3a2000}, {0x3b3a4000}, {0x3b3a6000}, 
+    {0x3b3a8000}, {0x3b3aa000}, {0x3b3ac000}, {0x3b3ae000}, 
+    {0x3b3b0000}, {0x3b3b2000}, {0x3b3b4000}, {0x3b3b6000}, 
+    {0x3b3b8000}, {0x3b3ba000}, {0x3b3bc000}, {0x3b3be000}, 
+    {0x3b3c0000}, {0x3b3c2000}, {0x3b3c4000}, {0x3b3c6000}, 
+    {0x3b3c8000}, {0x3b3ca000}, {0x3b3cc000}, {0x3b3ce000}, 
+    {0x3b3d0000}, {0x3b3d2000}, {0x3b3d4000}, {0x3b3d6000}, 
+    {0x3b3d8000}, {0x3b3da000}, {0x3b3dc000}, {0x3b3de000}, 
+    {0x3b3e0000}, {0x3b3e2000}, {0x3b3e4000}, {0x3b3e6000}, 
+    {0x3b3e8000}, {0x3b3ea000}, {0x3b3ec000}, {0x3b3ee000}, 
+    {0x3b3f0000}, {0x3b3f2000}, {0x3b3f4000}, {0x3b3f6000}, 
+    {0x3b3f8000}, {0x3b3fa000}, {0x3b3fc000}, {0x3b3fe000}, 
+    {0x3b400000}, {0x3b402000}, {0x3b404000}, {0x3b406000}, 
+    {0x3b408000}, {0x3b40a000}, {0x3b40c000}, {0x3b40e000}, 
+    {0x3b410000}, {0x3b412000}, {0x3b414000}, {0x3b416000}, 
+    {0x3b418000}, {0x3b41a000}, {0x3b41c000}, {0x3b41e000}, 
+    {0x3b420000}, {0x3b422000}, {0x3b424000}, {0x3b426000}, 
+    {0x3b428000}, {0x3b42a000}, {0x3b42c000}, {0x3b42e000}, 
+    {0x3b430000}, {0x3b432000}, {0x3b434000}, {0x3b436000}, 
+    {0x3b438000}, {0x3b43a000}, {0x3b43c000}, {0x3b43e000}, 
+    {0x3b440000}, {0x3b442000}, {0x3b444000}, {0x3b446000}, 
+    {0x3b448000}, {0x3b44a000}, {0x3b44c000}, {0x3b44e000}, 
+    {0x3b450000}, {0x3b452000}, {0x3b454000}, {0x3b456000}, 
+    {0x3b458000}, {0x3b45a000}, {0x3b45c000}, {0x3b45e000}, 
+    {0x3b460000}, {0x3b462000}, {0x3b464000}, {0x3b466000}, 
+    {0x3b468000}, {0x3b46a000}, {0x3b46c000}, {0x3b46e000}, 
+    {0x3b470000}, {0x3b472000}, {0x3b474000}, {0x3b476000}, 
+    {0x3b478000}, {0x3b47a000}, {0x3b47c000}, {0x3b47e000}, 
+    {0x3b480000}, {0x3b482000}, {0x3b484000}, {0x3b486000}, 
+    {0x3b488000}, {0x3b48a000}, {0x3b48c000}, {0x3b48e000}, 
+    {0x3b490000}, {0x3b492000}, {0x3b494000}, {0x3b496000}, 
+    {0x3b498000}, {0x3b49a000}, {0x3b49c000}, {0x3b49e000}, 
+    {0x3b4a0000}, {0x3b4a2000}, {0x3b4a4000}, {0x3b4a6000}, 
+    {0x3b4a8000}, {0x3b4aa000}, {0x3b4ac000}, {0x3b4ae000}, 
+    {0x3b4b0000}, {0x3b4b2000}, {0x3b4b4000}, {0x3b4b6000}, 
+    {0x3b4b8000}, {0x3b4ba000}, {0x3b4bc000}, {0x3b4be000}, 
+    {0x3b4c0000}, {0x3b4c2000}, {0x3b4c4000}, {0x3b4c6000}, 
+    {0x3b4c8000}, {0x3b4ca000}, {0x3b4cc000}, {0x3b4ce000}, 
+    {0x3b4d0000}, {0x3b4d2000}, {0x3b4d4000}, {0x3b4d6000}, 
+    {0x3b4d8000}, {0x3b4da000}, {0x3b4dc000}, {0x3b4de000}, 
+    {0x3b4e0000}, {0x3b4e2000}, {0x3b4e4000}, {0x3b4e6000}, 
+    {0x3b4e8000}, {0x3b4ea000}, {0x3b4ec000}, {0x3b4ee000}, 
+    {0x3b4f0000}, {0x3b4f2000}, {0x3b4f4000}, {0x3b4f6000}, 
+    {0x3b4f8000}, {0x3b4fa000}, {0x3b4fc000}, {0x3b4fe000}, 
+    {0x3b500000}, {0x3b502000}, {0x3b504000}, {0x3b506000}, 
+    {0x3b508000}, {0x3b50a000}, {0x3b50c000}, {0x3b50e000}, 
+    {0x3b510000}, {0x3b512000}, {0x3b514000}, {0x3b516000}, 
+    {0x3b518000}, {0x3b51a000}, {0x3b51c000}, {0x3b51e000}, 
+    {0x3b520000}, {0x3b522000}, {0x3b524000}, {0x3b526000}, 
+    {0x3b528000}, {0x3b52a000}, {0x3b52c000}, {0x3b52e000}, 
+    {0x3b530000}, {0x3b532000}, {0x3b534000}, {0x3b536000}, 
+    {0x3b538000}, {0x3b53a000}, {0x3b53c000}, {0x3b53e000}, 
+    {0x3b540000}, {0x3b542000}, {0x3b544000}, {0x3b546000}, 
+    {0x3b548000}, {0x3b54a000}, {0x3b54c000}, {0x3b54e000}, 
+    {0x3b550000}, {0x3b552000}, {0x3b554000}, {0x3b556000}, 
+    {0x3b558000}, {0x3b55a000}, {0x3b55c000}, {0x3b55e000}, 
+    {0x3b560000}, {0x3b562000}, {0x3b564000}, {0x3b566000}, 
+    {0x3b568000}, {0x3b56a000}, {0x3b56c000}, {0x3b56e000}, 
+    {0x3b570000}, {0x3b572000}, {0x3b574000}, {0x3b576000}, 
+    {0x3b578000}, {0x3b57a000}, {0x3b57c000}, {0x3b57e000}, 
+    {0x3b580000}, {0x3b582000}, {0x3b584000}, {0x3b586000}, 
+    {0x3b588000}, {0x3b58a000}, {0x3b58c000}, {0x3b58e000}, 
+    {0x3b590000}, {0x3b592000}, {0x3b594000}, {0x3b596000}, 
+    {0x3b598000}, {0x3b59a000}, {0x3b59c000}, {0x3b59e000}, 
+    {0x3b5a0000}, {0x3b5a2000}, {0x3b5a4000}, {0x3b5a6000}, 
+    {0x3b5a8000}, {0x3b5aa000}, {0x3b5ac000}, {0x3b5ae000}, 
+    {0x3b5b0000}, {0x3b5b2000}, {0x3b5b4000}, {0x3b5b6000}, 
+    {0x3b5b8000}, {0x3b5ba000}, {0x3b5bc000}, {0x3b5be000}, 
+    {0x3b5c0000}, {0x3b5c2000}, {0x3b5c4000}, {0x3b5c6000}, 
+    {0x3b5c8000}, {0x3b5ca000}, {0x3b5cc000}, {0x3b5ce000}, 
+    {0x3b5d0000}, {0x3b5d2000}, {0x3b5d4000}, {0x3b5d6000}, 
+    {0x3b5d8000}, {0x3b5da000}, {0x3b5dc000}, {0x3b5de000}, 
+    {0x3b5e0000}, {0x3b5e2000}, {0x3b5e4000}, {0x3b5e6000}, 
+    {0x3b5e8000}, {0x3b5ea000}, {0x3b5ec000}, {0x3b5ee000}, 
+    {0x3b5f0000}, {0x3b5f2000}, {0x3b5f4000}, {0x3b5f6000}, 
+    {0x3b5f8000}, {0x3b5fa000}, {0x3b5fc000}, {0x3b5fe000}, 
+    {0x3b600000}, {0x3b602000}, {0x3b604000}, {0x3b606000}, 
+    {0x3b608000}, {0x3b60a000}, {0x3b60c000}, {0x3b60e000}, 
+    {0x3b610000}, {0x3b612000}, {0x3b614000}, {0x3b616000}, 
+    {0x3b618000}, {0x3b61a000}, {0x3b61c000}, {0x3b61e000}, 
+    {0x3b620000}, {0x3b622000}, {0x3b624000}, {0x3b626000}, 
+    {0x3b628000}, {0x3b62a000}, {0x3b62c000}, {0x3b62e000}, 
+    {0x3b630000}, {0x3b632000}, {0x3b634000}, {0x3b636000}, 
+    {0x3b638000}, {0x3b63a000}, {0x3b63c000}, {0x3b63e000}, 
+    {0x3b640000}, {0x3b642000}, {0x3b644000}, {0x3b646000}, 
+    {0x3b648000}, {0x3b64a000}, {0x3b64c000}, {0x3b64e000}, 
+    {0x3b650000}, {0x3b652000}, {0x3b654000}, {0x3b656000}, 
+    {0x3b658000}, {0x3b65a000}, {0x3b65c000}, {0x3b65e000}, 
+    {0x3b660000}, {0x3b662000}, {0x3b664000}, {0x3b666000}, 
+    {0x3b668000}, {0x3b66a000}, {0x3b66c000}, {0x3b66e000}, 
+    {0x3b670000}, {0x3b672000}, {0x3b674000}, {0x3b676000}, 
+    {0x3b678000}, {0x3b67a000}, {0x3b67c000}, {0x3b67e000}, 
+    {0x3b680000}, {0x3b682000}, {0x3b684000}, {0x3b686000}, 
+    {0x3b688000}, {0x3b68a000}, {0x3b68c000}, {0x3b68e000}, 
+    {0x3b690000}, {0x3b692000}, {0x3b694000}, {0x3b696000}, 
+    {0x3b698000}, {0x3b69a000}, {0x3b69c000}, {0x3b69e000}, 
+    {0x3b6a0000}, {0x3b6a2000}, {0x3b6a4000}, {0x3b6a6000}, 
+    {0x3b6a8000}, {0x3b6aa000}, {0x3b6ac000}, {0x3b6ae000}, 
+    {0x3b6b0000}, {0x3b6b2000}, {0x3b6b4000}, {0x3b6b6000}, 
+    {0x3b6b8000}, {0x3b6ba000}, {0x3b6bc000}, {0x3b6be000}, 
+    {0x3b6c0000}, {0x3b6c2000}, {0x3b6c4000}, {0x3b6c6000}, 
+    {0x3b6c8000}, {0x3b6ca000}, {0x3b6cc000}, {0x3b6ce000}, 
+    {0x3b6d0000}, {0x3b6d2000}, {0x3b6d4000}, {0x3b6d6000}, 
+    {0x3b6d8000}, {0x3b6da000}, {0x3b6dc000}, {0x3b6de000}, 
+    {0x3b6e0000}, {0x3b6e2000}, {0x3b6e4000}, {0x3b6e6000}, 
+    {0x3b6e8000}, {0x3b6ea000}, {0x3b6ec000}, {0x3b6ee000}, 
+    {0x3b6f0000}, {0x3b6f2000}, {0x3b6f4000}, {0x3b6f6000}, 
+    {0x3b6f8000}, {0x3b6fa000}, {0x3b6fc000}, {0x3b6fe000}, 
+    {0x3b700000}, {0x3b702000}, {0x3b704000}, {0x3b706000}, 
+    {0x3b708000}, {0x3b70a000}, {0x3b70c000}, {0x3b70e000}, 
+    {0x3b710000}, {0x3b712000}, {0x3b714000}, {0x3b716000}, 
+    {0x3b718000}, {0x3b71a000}, {0x3b71c000}, {0x3b71e000}, 
+    {0x3b720000}, {0x3b722000}, {0x3b724000}, {0x3b726000}, 
+    {0x3b728000}, {0x3b72a000}, {0x3b72c000}, {0x3b72e000}, 
+    {0x3b730000}, {0x3b732000}, {0x3b734000}, {0x3b736000}, 
+    {0x3b738000}, {0x3b73a000}, {0x3b73c000}, {0x3b73e000}, 
+    {0x3b740000}, {0x3b742000}, {0x3b744000}, {0x3b746000}, 
+    {0x3b748000}, {0x3b74a000}, {0x3b74c000}, {0x3b74e000}, 
+    {0x3b750000}, {0x3b752000}, {0x3b754000}, {0x3b756000}, 
+    {0x3b758000}, {0x3b75a000}, {0x3b75c000}, {0x3b75e000}, 
+    {0x3b760000}, {0x3b762000}, {0x3b764000}, {0x3b766000}, 
+    {0x3b768000}, {0x3b76a000}, {0x3b76c000}, {0x3b76e000}, 
+    {0x3b770000}, {0x3b772000}, {0x3b774000}, {0x3b776000}, 
+    {0x3b778000}, {0x3b77a000}, {0x3b77c000}, {0x3b77e000}, 
+    {0x3b780000}, {0x3b782000}, {0x3b784000}, {0x3b786000}, 
+    {0x3b788000}, {0x3b78a000}, {0x3b78c000}, {0x3b78e000}, 
+    {0x3b790000}, {0x3b792000}, {0x3b794000}, {0x3b796000}, 
+    {0x3b798000}, {0x3b79a000}, {0x3b79c000}, {0x3b79e000}, 
+    {0x3b7a0000}, {0x3b7a2000}, {0x3b7a4000}, {0x3b7a6000}, 
+    {0x3b7a8000}, {0x3b7aa000}, {0x3b7ac000}, {0x3b7ae000}, 
+    {0x3b7b0000}, {0x3b7b2000}, {0x3b7b4000}, {0x3b7b6000}, 
+    {0x3b7b8000}, {0x3b7ba000}, {0x3b7bc000}, {0x3b7be000}, 
+    {0x3b7c0000}, {0x3b7c2000}, {0x3b7c4000}, {0x3b7c6000}, 
+    {0x3b7c8000}, {0x3b7ca000}, {0x3b7cc000}, {0x3b7ce000}, 
+    {0x3b7d0000}, {0x3b7d2000}, {0x3b7d4000}, {0x3b7d6000}, 
+    {0x3b7d8000}, {0x3b7da000}, {0x3b7dc000}, {0x3b7de000}, 
+    {0x3b7e0000}, {0x3b7e2000}, {0x3b7e4000}, {0x3b7e6000}, 
+    {0x3b7e8000}, {0x3b7ea000}, {0x3b7ec000}, {0x3b7ee000}, 
+    {0x3b7f0000}, {0x3b7f2000}, {0x3b7f4000}, {0x3b7f6000}, 
+    {0x3b7f8000}, {0x3b7fa000}, {0x3b7fc000}, {0x3b7fe000}, 
+    {0x3b800000}, {0x3b802000}, {0x3b804000}, {0x3b806000}, 
+    {0x3b808000}, {0x3b80a000}, {0x3b80c000}, {0x3b80e000}, 
+    {0x3b810000}, {0x3b812000}, {0x3b814000}, {0x3b816000}, 
+    {0x3b818000}, {0x3b81a000}, {0x3b81c000}, {0x3b81e000}, 
+    {0x3b820000}, {0x3b822000}, {0x3b824000}, {0x3b826000}, 
+    {0x3b828000}, {0x3b82a000}, {0x3b82c000}, {0x3b82e000}, 
+    {0x3b830000}, {0x3b832000}, {0x3b834000}, {0x3b836000}, 
+    {0x3b838000}, {0x3b83a000}, {0x3b83c000}, {0x3b83e000}, 
+    {0x3b840000}, {0x3b842000}, {0x3b844000}, {0x3b846000}, 
+    {0x3b848000}, {0x3b84a000}, {0x3b84c000}, {0x3b84e000}, 
+    {0x3b850000}, {0x3b852000}, {0x3b854000}, {0x3b856000}, 
+    {0x3b858000}, {0x3b85a000}, {0x3b85c000}, {0x3b85e000}, 
+    {0x3b860000}, {0x3b862000}, {0x3b864000}, {0x3b866000}, 
+    {0x3b868000}, {0x3b86a000}, {0x3b86c000}, {0x3b86e000}, 
+    {0x3b870000}, {0x3b872000}, {0x3b874000}, {0x3b876000}, 
+    {0x3b878000}, {0x3b87a000}, {0x3b87c000}, {0x3b87e000}, 
+    {0x3b880000}, {0x3b882000}, {0x3b884000}, {0x3b886000}, 
+    {0x3b888000}, {0x3b88a000}, {0x3b88c000}, {0x3b88e000}, 
+    {0x3b890000}, {0x3b892000}, {0x3b894000}, {0x3b896000}, 
+    {0x3b898000}, {0x3b89a000}, {0x3b89c000}, {0x3b89e000}, 
+    {0x3b8a0000}, {0x3b8a2000}, {0x3b8a4000}, {0x3b8a6000}, 
+    {0x3b8a8000}, {0x3b8aa000}, {0x3b8ac000}, {0x3b8ae000}, 
+    {0x3b8b0000}, {0x3b8b2000}, {0x3b8b4000}, {0x3b8b6000}, 
+    {0x3b8b8000}, {0x3b8ba000}, {0x3b8bc000}, {0x3b8be000}, 
+    {0x3b8c0000}, {0x3b8c2000}, {0x3b8c4000}, {0x3b8c6000}, 
+    {0x3b8c8000}, {0x3b8ca000}, {0x3b8cc000}, {0x3b8ce000}, 
+    {0x3b8d0000}, {0x3b8d2000}, {0x3b8d4000}, {0x3b8d6000}, 
+    {0x3b8d8000}, {0x3b8da000}, {0x3b8dc000}, {0x3b8de000}, 
+    {0x3b8e0000}, {0x3b8e2000}, {0x3b8e4000}, {0x3b8e6000}, 
+    {0x3b8e8000}, {0x3b8ea000}, {0x3b8ec000}, {0x3b8ee000}, 
+    {0x3b8f0000}, {0x3b8f2000}, {0x3b8f4000}, {0x3b8f6000}, 
+    {0x3b8f8000}, {0x3b8fa000}, {0x3b8fc000}, {0x3b8fe000}, 
+    {0x3b900000}, {0x3b902000}, {0x3b904000}, {0x3b906000}, 
+    {0x3b908000}, {0x3b90a000}, {0x3b90c000}, {0x3b90e000}, 
+    {0x3b910000}, {0x3b912000}, {0x3b914000}, {0x3b916000}, 
+    {0x3b918000}, {0x3b91a000}, {0x3b91c000}, {0x3b91e000}, 
+    {0x3b920000}, {0x3b922000}, {0x3b924000}, {0x3b926000}, 
+    {0x3b928000}, {0x3b92a000}, {0x3b92c000}, {0x3b92e000}, 
+    {0x3b930000}, {0x3b932000}, {0x3b934000}, {0x3b936000}, 
+    {0x3b938000}, {0x3b93a000}, {0x3b93c000}, {0x3b93e000}, 
+    {0x3b940000}, {0x3b942000}, {0x3b944000}, {0x3b946000}, 
+    {0x3b948000}, {0x3b94a000}, {0x3b94c000}, {0x3b94e000}, 
+    {0x3b950000}, {0x3b952000}, {0x3b954000}, {0x3b956000}, 
+    {0x3b958000}, {0x3b95a000}, {0x3b95c000}, {0x3b95e000}, 
+    {0x3b960000}, {0x3b962000}, {0x3b964000}, {0x3b966000}, 
+    {0x3b968000}, {0x3b96a000}, {0x3b96c000}, {0x3b96e000}, 
+    {0x3b970000}, {0x3b972000}, {0x3b974000}, {0x3b976000}, 
+    {0x3b978000}, {0x3b97a000}, {0x3b97c000}, {0x3b97e000}, 
+    {0x3b980000}, {0x3b982000}, {0x3b984000}, {0x3b986000}, 
+    {0x3b988000}, {0x3b98a000}, {0x3b98c000}, {0x3b98e000}, 
+    {0x3b990000}, {0x3b992000}, {0x3b994000}, {0x3b996000}, 
+    {0x3b998000}, {0x3b99a000}, {0x3b99c000}, {0x3b99e000}, 
+    {0x3b9a0000}, {0x3b9a2000}, {0x3b9a4000}, {0x3b9a6000}, 
+    {0x3b9a8000}, {0x3b9aa000}, {0x3b9ac000}, {0x3b9ae000}, 
+    {0x3b9b0000}, {0x3b9b2000}, {0x3b9b4000}, {0x3b9b6000}, 
+    {0x3b9b8000}, {0x3b9ba000}, {0x3b9bc000}, {0x3b9be000}, 
+    {0x3b9c0000}, {0x3b9c2000}, {0x3b9c4000}, {0x3b9c6000}, 
+    {0x3b9c8000}, {0x3b9ca000}, {0x3b9cc000}, {0x3b9ce000}, 
+    {0x3b9d0000}, {0x3b9d2000}, {0x3b9d4000}, {0x3b9d6000}, 
+    {0x3b9d8000}, {0x3b9da000}, {0x3b9dc000}, {0x3b9de000}, 
+    {0x3b9e0000}, {0x3b9e2000}, {0x3b9e4000}, {0x3b9e6000}, 
+    {0x3b9e8000}, {0x3b9ea000}, {0x3b9ec000}, {0x3b9ee000}, 
+    {0x3b9f0000}, {0x3b9f2000}, {0x3b9f4000}, {0x3b9f6000}, 
+    {0x3b9f8000}, {0x3b9fa000}, {0x3b9fc000}, {0x3b9fe000}, 
+    {0x3ba00000}, {0x3ba02000}, {0x3ba04000}, {0x3ba06000}, 
+    {0x3ba08000}, {0x3ba0a000}, {0x3ba0c000}, {0x3ba0e000}, 
+    {0x3ba10000}, {0x3ba12000}, {0x3ba14000}, {0x3ba16000}, 
+    {0x3ba18000}, {0x3ba1a000}, {0x3ba1c000}, {0x3ba1e000}, 
+    {0x3ba20000}, {0x3ba22000}, {0x3ba24000}, {0x3ba26000}, 
+    {0x3ba28000}, {0x3ba2a000}, {0x3ba2c000}, {0x3ba2e000}, 
+    {0x3ba30000}, {0x3ba32000}, {0x3ba34000}, {0x3ba36000}, 
+    {0x3ba38000}, {0x3ba3a000}, {0x3ba3c000}, {0x3ba3e000}, 
+    {0x3ba40000}, {0x3ba42000}, {0x3ba44000}, {0x3ba46000}, 
+    {0x3ba48000}, {0x3ba4a000}, {0x3ba4c000}, {0x3ba4e000}, 
+    {0x3ba50000}, {0x3ba52000}, {0x3ba54000}, {0x3ba56000}, 
+    {0x3ba58000}, {0x3ba5a000}, {0x3ba5c000}, {0x3ba5e000}, 
+    {0x3ba60000}, {0x3ba62000}, {0x3ba64000}, {0x3ba66000}, 
+    {0x3ba68000}, {0x3ba6a000}, {0x3ba6c000}, {0x3ba6e000}, 
+    {0x3ba70000}, {0x3ba72000}, {0x3ba74000}, {0x3ba76000}, 
+    {0x3ba78000}, {0x3ba7a000}, {0x3ba7c000}, {0x3ba7e000}, 
+    {0x3ba80000}, {0x3ba82000}, {0x3ba84000}, {0x3ba86000}, 
+    {0x3ba88000}, {0x3ba8a000}, {0x3ba8c000}, {0x3ba8e000}, 
+    {0x3ba90000}, {0x3ba92000}, {0x3ba94000}, {0x3ba96000}, 
+    {0x3ba98000}, {0x3ba9a000}, {0x3ba9c000}, {0x3ba9e000}, 
+    {0x3baa0000}, {0x3baa2000}, {0x3baa4000}, {0x3baa6000}, 
+    {0x3baa8000}, {0x3baaa000}, {0x3baac000}, {0x3baae000}, 
+    {0x3bab0000}, {0x3bab2000}, {0x3bab4000}, {0x3bab6000}, 
+    {0x3bab8000}, {0x3baba000}, {0x3babc000}, {0x3babe000}, 
+    {0x3bac0000}, {0x3bac2000}, {0x3bac4000}, {0x3bac6000}, 
+    {0x3bac8000}, {0x3baca000}, {0x3bacc000}, {0x3bace000}, 
+    {0x3bad0000}, {0x3bad2000}, {0x3bad4000}, {0x3bad6000}, 
+    {0x3bad8000}, {0x3bada000}, {0x3badc000}, {0x3bade000}, 
+    {0x3bae0000}, {0x3bae2000}, {0x3bae4000}, {0x3bae6000}, 
+    {0x3bae8000}, {0x3baea000}, {0x3baec000}, {0x3baee000}, 
+    {0x3baf0000}, {0x3baf2000}, {0x3baf4000}, {0x3baf6000}, 
+    {0x3baf8000}, {0x3bafa000}, {0x3bafc000}, {0x3bafe000}, 
+    {0x3bb00000}, {0x3bb02000}, {0x3bb04000}, {0x3bb06000}, 
+    {0x3bb08000}, {0x3bb0a000}, {0x3bb0c000}, {0x3bb0e000}, 
+    {0x3bb10000}, {0x3bb12000}, {0x3bb14000}, {0x3bb16000}, 
+    {0x3bb18000}, {0x3bb1a000}, {0x3bb1c000}, {0x3bb1e000}, 
+    {0x3bb20000}, {0x3bb22000}, {0x3bb24000}, {0x3bb26000}, 
+    {0x3bb28000}, {0x3bb2a000}, {0x3bb2c000}, {0x3bb2e000}, 
+    {0x3bb30000}, {0x3bb32000}, {0x3bb34000}, {0x3bb36000}, 
+    {0x3bb38000}, {0x3bb3a000}, {0x3bb3c000}, {0x3bb3e000}, 
+    {0x3bb40000}, {0x3bb42000}, {0x3bb44000}, {0x3bb46000}, 
+    {0x3bb48000}, {0x3bb4a000}, {0x3bb4c000}, {0x3bb4e000}, 
+    {0x3bb50000}, {0x3bb52000}, {0x3bb54000}, {0x3bb56000}, 
+    {0x3bb58000}, {0x3bb5a000}, {0x3bb5c000}, {0x3bb5e000}, 
+    {0x3bb60000}, {0x3bb62000}, {0x3bb64000}, {0x3bb66000}, 
+    {0x3bb68000}, {0x3bb6a000}, {0x3bb6c000}, {0x3bb6e000}, 
+    {0x3bb70000}, {0x3bb72000}, {0x3bb74000}, {0x3bb76000}, 
+    {0x3bb78000}, {0x3bb7a000}, {0x3bb7c000}, {0x3bb7e000}, 
+    {0x3bb80000}, {0x3bb82000}, {0x3bb84000}, {0x3bb86000}, 
+    {0x3bb88000}, {0x3bb8a000}, {0x3bb8c000}, {0x3bb8e000}, 
+    {0x3bb90000}, {0x3bb92000}, {0x3bb94000}, {0x3bb96000}, 
+    {0x3bb98000}, {0x3bb9a000}, {0x3bb9c000}, {0x3bb9e000}, 
+    {0x3bba0000}, {0x3bba2000}, {0x3bba4000}, {0x3bba6000}, 
+    {0x3bba8000}, {0x3bbaa000}, {0x3bbac000}, {0x3bbae000}, 
+    {0x3bbb0000}, {0x3bbb2000}, {0x3bbb4000}, {0x3bbb6000}, 
+    {0x3bbb8000}, {0x3bbba000}, {0x3bbbc000}, {0x3bbbe000}, 
+    {0x3bbc0000}, {0x3bbc2000}, {0x3bbc4000}, {0x3bbc6000}, 
+    {0x3bbc8000}, {0x3bbca000}, {0x3bbcc000}, {0x3bbce000}, 
+    {0x3bbd0000}, {0x3bbd2000}, {0x3bbd4000}, {0x3bbd6000}, 
+    {0x3bbd8000}, {0x3bbda000}, {0x3bbdc000}, {0x3bbde000}, 
+    {0x3bbe0000}, {0x3bbe2000}, {0x3bbe4000}, {0x3bbe6000}, 
+    {0x3bbe8000}, {0x3bbea000}, {0x3bbec000}, {0x3bbee000}, 
+    {0x3bbf0000}, {0x3bbf2000}, {0x3bbf4000}, {0x3bbf6000}, 
+    {0x3bbf8000}, {0x3bbfa000}, {0x3bbfc000}, {0x3bbfe000}, 
+    {0x3bc00000}, {0x3bc02000}, {0x3bc04000}, {0x3bc06000}, 
+    {0x3bc08000}, {0x3bc0a000}, {0x3bc0c000}, {0x3bc0e000}, 
+    {0x3bc10000}, {0x3bc12000}, {0x3bc14000}, {0x3bc16000}, 
+    {0x3bc18000}, {0x3bc1a000}, {0x3bc1c000}, {0x3bc1e000}, 
+    {0x3bc20000}, {0x3bc22000}, {0x3bc24000}, {0x3bc26000}, 
+    {0x3bc28000}, {0x3bc2a000}, {0x3bc2c000}, {0x3bc2e000}, 
+    {0x3bc30000}, {0x3bc32000}, {0x3bc34000}, {0x3bc36000}, 
+    {0x3bc38000}, {0x3bc3a000}, {0x3bc3c000}, {0x3bc3e000}, 
+    {0x3bc40000}, {0x3bc42000}, {0x3bc44000}, {0x3bc46000}, 
+    {0x3bc48000}, {0x3bc4a000}, {0x3bc4c000}, {0x3bc4e000}, 
+    {0x3bc50000}, {0x3bc52000}, {0x3bc54000}, {0x3bc56000}, 
+    {0x3bc58000}, {0x3bc5a000}, {0x3bc5c000}, {0x3bc5e000}, 
+    {0x3bc60000}, {0x3bc62000}, {0x3bc64000}, {0x3bc66000}, 
+    {0x3bc68000}, {0x3bc6a000}, {0x3bc6c000}, {0x3bc6e000}, 
+    {0x3bc70000}, {0x3bc72000}, {0x3bc74000}, {0x3bc76000}, 
+    {0x3bc78000}, {0x3bc7a000}, {0x3bc7c000}, {0x3bc7e000}, 
+    {0x3bc80000}, {0x3bc82000}, {0x3bc84000}, {0x3bc86000}, 
+    {0x3bc88000}, {0x3bc8a000}, {0x3bc8c000}, {0x3bc8e000}, 
+    {0x3bc90000}, {0x3bc92000}, {0x3bc94000}, {0x3bc96000}, 
+    {0x3bc98000}, {0x3bc9a000}, {0x3bc9c000}, {0x3bc9e000}, 
+    {0x3bca0000}, {0x3bca2000}, {0x3bca4000}, {0x3bca6000}, 
+    {0x3bca8000}, {0x3bcaa000}, {0x3bcac000}, {0x3bcae000}, 
+    {0x3bcb0000}, {0x3bcb2000}, {0x3bcb4000}, {0x3bcb6000}, 
+    {0x3bcb8000}, {0x3bcba000}, {0x3bcbc000}, {0x3bcbe000}, 
+    {0x3bcc0000}, {0x3bcc2000}, {0x3bcc4000}, {0x3bcc6000}, 
+    {0x3bcc8000}, {0x3bcca000}, {0x3bccc000}, {0x3bcce000}, 
+    {0x3bcd0000}, {0x3bcd2000}, {0x3bcd4000}, {0x3bcd6000}, 
+    {0x3bcd8000}, {0x3bcda000}, {0x3bcdc000}, {0x3bcde000}, 
+    {0x3bce0000}, {0x3bce2000}, {0x3bce4000}, {0x3bce6000}, 
+    {0x3bce8000}, {0x3bcea000}, {0x3bcec000}, {0x3bcee000}, 
+    {0x3bcf0000}, {0x3bcf2000}, {0x3bcf4000}, {0x3bcf6000}, 
+    {0x3bcf8000}, {0x3bcfa000}, {0x3bcfc000}, {0x3bcfe000}, 
+    {0x3bd00000}, {0x3bd02000}, {0x3bd04000}, {0x3bd06000}, 
+    {0x3bd08000}, {0x3bd0a000}, {0x3bd0c000}, {0x3bd0e000}, 
+    {0x3bd10000}, {0x3bd12000}, {0x3bd14000}, {0x3bd16000}, 
+    {0x3bd18000}, {0x3bd1a000}, {0x3bd1c000}, {0x3bd1e000}, 
+    {0x3bd20000}, {0x3bd22000}, {0x3bd24000}, {0x3bd26000}, 
+    {0x3bd28000}, {0x3bd2a000}, {0x3bd2c000}, {0x3bd2e000}, 
+    {0x3bd30000}, {0x3bd32000}, {0x3bd34000}, {0x3bd36000}, 
+    {0x3bd38000}, {0x3bd3a000}, {0x3bd3c000}, {0x3bd3e000}, 
+    {0x3bd40000}, {0x3bd42000}, {0x3bd44000}, {0x3bd46000}, 
+    {0x3bd48000}, {0x3bd4a000}, {0x3bd4c000}, {0x3bd4e000}, 
+    {0x3bd50000}, {0x3bd52000}, {0x3bd54000}, {0x3bd56000}, 
+    {0x3bd58000}, {0x3bd5a000}, {0x3bd5c000}, {0x3bd5e000}, 
+    {0x3bd60000}, {0x3bd62000}, {0x3bd64000}, {0x3bd66000}, 
+    {0x3bd68000}, {0x3bd6a000}, {0x3bd6c000}, {0x3bd6e000}, 
+    {0x3bd70000}, {0x3bd72000}, {0x3bd74000}, {0x3bd76000}, 
+    {0x3bd78000}, {0x3bd7a000}, {0x3bd7c000}, {0x3bd7e000}, 
+    {0x3bd80000}, {0x3bd82000}, {0x3bd84000}, {0x3bd86000}, 
+    {0x3bd88000}, {0x3bd8a000}, {0x3bd8c000}, {0x3bd8e000}, 
+    {0x3bd90000}, {0x3bd92000}, {0x3bd94000}, {0x3bd96000}, 
+    {0x3bd98000}, {0x3bd9a000}, {0x3bd9c000}, {0x3bd9e000}, 
+    {0x3bda0000}, {0x3bda2000}, {0x3bda4000}, {0x3bda6000}, 
+    {0x3bda8000}, {0x3bdaa000}, {0x3bdac000}, {0x3bdae000}, 
+    {0x3bdb0000}, {0x3bdb2000}, {0x3bdb4000}, {0x3bdb6000}, 
+    {0x3bdb8000}, {0x3bdba000}, {0x3bdbc000}, {0x3bdbe000}, 
+    {0x3bdc0000}, {0x3bdc2000}, {0x3bdc4000}, {0x3bdc6000}, 
+    {0x3bdc8000}, {0x3bdca000}, {0x3bdcc000}, {0x3bdce000}, 
+    {0x3bdd0000}, {0x3bdd2000}, {0x3bdd4000}, {0x3bdd6000}, 
+    {0x3bdd8000}, {0x3bdda000}, {0x3bddc000}, {0x3bdde000}, 
+    {0x3bde0000}, {0x3bde2000}, {0x3bde4000}, {0x3bde6000}, 
+    {0x3bde8000}, {0x3bdea000}, {0x3bdec000}, {0x3bdee000}, 
+    {0x3bdf0000}, {0x3bdf2000}, {0x3bdf4000}, {0x3bdf6000}, 
+    {0x3bdf8000}, {0x3bdfa000}, {0x3bdfc000}, {0x3bdfe000}, 
+    {0x3be00000}, {0x3be02000}, {0x3be04000}, {0x3be06000}, 
+    {0x3be08000}, {0x3be0a000}, {0x3be0c000}, {0x3be0e000}, 
+    {0x3be10000}, {0x3be12000}, {0x3be14000}, {0x3be16000}, 
+    {0x3be18000}, {0x3be1a000}, {0x3be1c000}, {0x3be1e000}, 
+    {0x3be20000}, {0x3be22000}, {0x3be24000}, {0x3be26000}, 
+    {0x3be28000}, {0x3be2a000}, {0x3be2c000}, {0x3be2e000}, 
+    {0x3be30000}, {0x3be32000}, {0x3be34000}, {0x3be36000}, 
+    {0x3be38000}, {0x3be3a000}, {0x3be3c000}, {0x3be3e000}, 
+    {0x3be40000}, {0x3be42000}, {0x3be44000}, {0x3be46000}, 
+    {0x3be48000}, {0x3be4a000}, {0x3be4c000}, {0x3be4e000}, 
+    {0x3be50000}, {0x3be52000}, {0x3be54000}, {0x3be56000}, 
+    {0x3be58000}, {0x3be5a000}, {0x3be5c000}, {0x3be5e000}, 
+    {0x3be60000}, {0x3be62000}, {0x3be64000}, {0x3be66000}, 
+    {0x3be68000}, {0x3be6a000}, {0x3be6c000}, {0x3be6e000}, 
+    {0x3be70000}, {0x3be72000}, {0x3be74000}, {0x3be76000}, 
+    {0x3be78000}, {0x3be7a000}, {0x3be7c000}, {0x3be7e000}, 
+    {0x3be80000}, {0x3be82000}, {0x3be84000}, {0x3be86000}, 
+    {0x3be88000}, {0x3be8a000}, {0x3be8c000}, {0x3be8e000}, 
+    {0x3be90000}, {0x3be92000}, {0x3be94000}, {0x3be96000}, 
+    {0x3be98000}, {0x3be9a000}, {0x3be9c000}, {0x3be9e000}, 
+    {0x3bea0000}, {0x3bea2000}, {0x3bea4000}, {0x3bea6000}, 
+    {0x3bea8000}, {0x3beaa000}, {0x3beac000}, {0x3beae000}, 
+    {0x3beb0000}, {0x3beb2000}, {0x3beb4000}, {0x3beb6000}, 
+    {0x3beb8000}, {0x3beba000}, {0x3bebc000}, {0x3bebe000}, 
+    {0x3bec0000}, {0x3bec2000}, {0x3bec4000}, {0x3bec6000}, 
+    {0x3bec8000}, {0x3beca000}, {0x3becc000}, {0x3bece000}, 
+    {0x3bed0000}, {0x3bed2000}, {0x3bed4000}, {0x3bed6000}, 
+    {0x3bed8000}, {0x3beda000}, {0x3bedc000}, {0x3bede000}, 
+    {0x3bee0000}, {0x3bee2000}, {0x3bee4000}, {0x3bee6000}, 
+    {0x3bee8000}, {0x3beea000}, {0x3beec000}, {0x3beee000}, 
+    {0x3bef0000}, {0x3bef2000}, {0x3bef4000}, {0x3bef6000}, 
+    {0x3bef8000}, {0x3befa000}, {0x3befc000}, {0x3befe000}, 
+    {0x3bf00000}, {0x3bf02000}, {0x3bf04000}, {0x3bf06000}, 
+    {0x3bf08000}, {0x3bf0a000}, {0x3bf0c000}, {0x3bf0e000}, 
+    {0x3bf10000}, {0x3bf12000}, {0x3bf14000}, {0x3bf16000}, 
+    {0x3bf18000}, {0x3bf1a000}, {0x3bf1c000}, {0x3bf1e000}, 
+    {0x3bf20000}, {0x3bf22000}, {0x3bf24000}, {0x3bf26000}, 
+    {0x3bf28000}, {0x3bf2a000}, {0x3bf2c000}, {0x3bf2e000}, 
+    {0x3bf30000}, {0x3bf32000}, {0x3bf34000}, {0x3bf36000}, 
+    {0x3bf38000}, {0x3bf3a000}, {0x3bf3c000}, {0x3bf3e000}, 
+    {0x3bf40000}, {0x3bf42000}, {0x3bf44000}, {0x3bf46000}, 
+    {0x3bf48000}, {0x3bf4a000}, {0x3bf4c000}, {0x3bf4e000}, 
+    {0x3bf50000}, {0x3bf52000}, {0x3bf54000}, {0x3bf56000}, 
+    {0x3bf58000}, {0x3bf5a000}, {0x3bf5c000}, {0x3bf5e000}, 
+    {0x3bf60000}, {0x3bf62000}, {0x3bf64000}, {0x3bf66000}, 
+    {0x3bf68000}, {0x3bf6a000}, {0x3bf6c000}, {0x3bf6e000}, 
+    {0x3bf70000}, {0x3bf72000}, {0x3bf74000}, {0x3bf76000}, 
+    {0x3bf78000}, {0x3bf7a000}, {0x3bf7c000}, {0x3bf7e000}, 
+    {0x3bf80000}, {0x3bf82000}, {0x3bf84000}, {0x3bf86000}, 
+    {0x3bf88000}, {0x3bf8a000}, {0x3bf8c000}, {0x3bf8e000}, 
+    {0x3bf90000}, {0x3bf92000}, {0x3bf94000}, {0x3bf96000}, 
+    {0x3bf98000}, {0x3bf9a000}, {0x3bf9c000}, {0x3bf9e000}, 
+    {0x3bfa0000}, {0x3bfa2000}, {0x3bfa4000}, {0x3bfa6000}, 
+    {0x3bfa8000}, {0x3bfaa000}, {0x3bfac000}, {0x3bfae000}, 
+    {0x3bfb0000}, {0x3bfb2000}, {0x3bfb4000}, {0x3bfb6000}, 
+    {0x3bfb8000}, {0x3bfba000}, {0x3bfbc000}, {0x3bfbe000}, 
+    {0x3bfc0000}, {0x3bfc2000}, {0x3bfc4000}, {0x3bfc6000}, 
+    {0x3bfc8000}, {0x3bfca000}, {0x3bfcc000}, {0x3bfce000}, 
+    {0x3bfd0000}, {0x3bfd2000}, {0x3bfd4000}, {0x3bfd6000}, 
+    {0x3bfd8000}, {0x3bfda000}, {0x3bfdc000}, {0x3bfde000}, 
+    {0x3bfe0000}, {0x3bfe2000}, {0x3bfe4000}, {0x3bfe6000}, 
+    {0x3bfe8000}, {0x3bfea000}, {0x3bfec000}, {0x3bfee000}, 
+    {0x3bff0000}, {0x3bff2000}, {0x3bff4000}, {0x3bff6000}, 
+    {0x3bff8000}, {0x3bffa000}, {0x3bffc000}, {0x3bffe000}, 
+    {0x3c000000}, {0x3c002000}, {0x3c004000}, {0x3c006000}, 
+    {0x3c008000}, {0x3c00a000}, {0x3c00c000}, {0x3c00e000}, 
+    {0x3c010000}, {0x3c012000}, {0x3c014000}, {0x3c016000}, 
+    {0x3c018000}, {0x3c01a000}, {0x3c01c000}, {0x3c01e000}, 
+    {0x3c020000}, {0x3c022000}, {0x3c024000}, {0x3c026000}, 
+    {0x3c028000}, {0x3c02a000}, {0x3c02c000}, {0x3c02e000}, 
+    {0x3c030000}, {0x3c032000}, {0x3c034000}, {0x3c036000}, 
+    {0x3c038000}, {0x3c03a000}, {0x3c03c000}, {0x3c03e000}, 
+    {0x3c040000}, {0x3c042000}, {0x3c044000}, {0x3c046000}, 
+    {0x3c048000}, {0x3c04a000}, {0x3c04c000}, {0x3c04e000}, 
+    {0x3c050000}, {0x3c052000}, {0x3c054000}, {0x3c056000}, 
+    {0x3c058000}, {0x3c05a000}, {0x3c05c000}, {0x3c05e000}, 
+    {0x3c060000}, {0x3c062000}, {0x3c064000}, {0x3c066000}, 
+    {0x3c068000}, {0x3c06a000}, {0x3c06c000}, {0x3c06e000}, 
+    {0x3c070000}, {0x3c072000}, {0x3c074000}, {0x3c076000}, 
+    {0x3c078000}, {0x3c07a000}, {0x3c07c000}, {0x3c07e000}, 
+    {0x3c080000}, {0x3c082000}, {0x3c084000}, {0x3c086000}, 
+    {0x3c088000}, {0x3c08a000}, {0x3c08c000}, {0x3c08e000}, 
+    {0x3c090000}, {0x3c092000}, {0x3c094000}, {0x3c096000}, 
+    {0x3c098000}, {0x3c09a000}, {0x3c09c000}, {0x3c09e000}, 
+    {0x3c0a0000}, {0x3c0a2000}, {0x3c0a4000}, {0x3c0a6000}, 
+    {0x3c0a8000}, {0x3c0aa000}, {0x3c0ac000}, {0x3c0ae000}, 
+    {0x3c0b0000}, {0x3c0b2000}, {0x3c0b4000}, {0x3c0b6000}, 
+    {0x3c0b8000}, {0x3c0ba000}, {0x3c0bc000}, {0x3c0be000}, 
+    {0x3c0c0000}, {0x3c0c2000}, {0x3c0c4000}, {0x3c0c6000}, 
+    {0x3c0c8000}, {0x3c0ca000}, {0x3c0cc000}, {0x3c0ce000}, 
+    {0x3c0d0000}, {0x3c0d2000}, {0x3c0d4000}, {0x3c0d6000}, 
+    {0x3c0d8000}, {0x3c0da000}, {0x3c0dc000}, {0x3c0de000}, 
+    {0x3c0e0000}, {0x3c0e2000}, {0x3c0e4000}, {0x3c0e6000}, 
+    {0x3c0e8000}, {0x3c0ea000}, {0x3c0ec000}, {0x3c0ee000}, 
+    {0x3c0f0000}, {0x3c0f2000}, {0x3c0f4000}, {0x3c0f6000}, 
+    {0x3c0f8000}, {0x3c0fa000}, {0x3c0fc000}, {0x3c0fe000}, 
+    {0x3c100000}, {0x3c102000}, {0x3c104000}, {0x3c106000}, 
+    {0x3c108000}, {0x3c10a000}, {0x3c10c000}, {0x3c10e000}, 
+    {0x3c110000}, {0x3c112000}, {0x3c114000}, {0x3c116000}, 
+    {0x3c118000}, {0x3c11a000}, {0x3c11c000}, {0x3c11e000}, 
+    {0x3c120000}, {0x3c122000}, {0x3c124000}, {0x3c126000}, 
+    {0x3c128000}, {0x3c12a000}, {0x3c12c000}, {0x3c12e000}, 
+    {0x3c130000}, {0x3c132000}, {0x3c134000}, {0x3c136000}, 
+    {0x3c138000}, {0x3c13a000}, {0x3c13c000}, {0x3c13e000}, 
+    {0x3c140000}, {0x3c142000}, {0x3c144000}, {0x3c146000}, 
+    {0x3c148000}, {0x3c14a000}, {0x3c14c000}, {0x3c14e000}, 
+    {0x3c150000}, {0x3c152000}, {0x3c154000}, {0x3c156000}, 
+    {0x3c158000}, {0x3c15a000}, {0x3c15c000}, {0x3c15e000}, 
+    {0x3c160000}, {0x3c162000}, {0x3c164000}, {0x3c166000}, 
+    {0x3c168000}, {0x3c16a000}, {0x3c16c000}, {0x3c16e000}, 
+    {0x3c170000}, {0x3c172000}, {0x3c174000}, {0x3c176000}, 
+    {0x3c178000}, {0x3c17a000}, {0x3c17c000}, {0x3c17e000}, 
+    {0x3c180000}, {0x3c182000}, {0x3c184000}, {0x3c186000}, 
+    {0x3c188000}, {0x3c18a000}, {0x3c18c000}, {0x3c18e000}, 
+    {0x3c190000}, {0x3c192000}, {0x3c194000}, {0x3c196000}, 
+    {0x3c198000}, {0x3c19a000}, {0x3c19c000}, {0x3c19e000}, 
+    {0x3c1a0000}, {0x3c1a2000}, {0x3c1a4000}, {0x3c1a6000}, 
+    {0x3c1a8000}, {0x3c1aa000}, {0x3c1ac000}, {0x3c1ae000}, 
+    {0x3c1b0000}, {0x3c1b2000}, {0x3c1b4000}, {0x3c1b6000}, 
+    {0x3c1b8000}, {0x3c1ba000}, {0x3c1bc000}, {0x3c1be000}, 
+    {0x3c1c0000}, {0x3c1c2000}, {0x3c1c4000}, {0x3c1c6000}, 
+    {0x3c1c8000}, {0x3c1ca000}, {0x3c1cc000}, {0x3c1ce000}, 
+    {0x3c1d0000}, {0x3c1d2000}, {0x3c1d4000}, {0x3c1d6000}, 
+    {0x3c1d8000}, {0x3c1da000}, {0x3c1dc000}, {0x3c1de000}, 
+    {0x3c1e0000}, {0x3c1e2000}, {0x3c1e4000}, {0x3c1e6000}, 
+    {0x3c1e8000}, {0x3c1ea000}, {0x3c1ec000}, {0x3c1ee000}, 
+    {0x3c1f0000}, {0x3c1f2000}, {0x3c1f4000}, {0x3c1f6000}, 
+    {0x3c1f8000}, {0x3c1fa000}, {0x3c1fc000}, {0x3c1fe000}, 
+    {0x3c200000}, {0x3c202000}, {0x3c204000}, {0x3c206000}, 
+    {0x3c208000}, {0x3c20a000}, {0x3c20c000}, {0x3c20e000}, 
+    {0x3c210000}, {0x3c212000}, {0x3c214000}, {0x3c216000}, 
+    {0x3c218000}, {0x3c21a000}, {0x3c21c000}, {0x3c21e000}, 
+    {0x3c220000}, {0x3c222000}, {0x3c224000}, {0x3c226000}, 
+    {0x3c228000}, {0x3c22a000}, {0x3c22c000}, {0x3c22e000}, 
+    {0x3c230000}, {0x3c232000}, {0x3c234000}, {0x3c236000}, 
+    {0x3c238000}, {0x3c23a000}, {0x3c23c000}, {0x3c23e000}, 
+    {0x3c240000}, {0x3c242000}, {0x3c244000}, {0x3c246000}, 
+    {0x3c248000}, {0x3c24a000}, {0x3c24c000}, {0x3c24e000}, 
+    {0x3c250000}, {0x3c252000}, {0x3c254000}, {0x3c256000}, 
+    {0x3c258000}, {0x3c25a000}, {0x3c25c000}, {0x3c25e000}, 
+    {0x3c260000}, {0x3c262000}, {0x3c264000}, {0x3c266000}, 
+    {0x3c268000}, {0x3c26a000}, {0x3c26c000}, {0x3c26e000}, 
+    {0x3c270000}, {0x3c272000}, {0x3c274000}, {0x3c276000}, 
+    {0x3c278000}, {0x3c27a000}, {0x3c27c000}, {0x3c27e000}, 
+    {0x3c280000}, {0x3c282000}, {0x3c284000}, {0x3c286000}, 
+    {0x3c288000}, {0x3c28a000}, {0x3c28c000}, {0x3c28e000}, 
+    {0x3c290000}, {0x3c292000}, {0x3c294000}, {0x3c296000}, 
+    {0x3c298000}, {0x3c29a000}, {0x3c29c000}, {0x3c29e000}, 
+    {0x3c2a0000}, {0x3c2a2000}, {0x3c2a4000}, {0x3c2a6000}, 
+    {0x3c2a8000}, {0x3c2aa000}, {0x3c2ac000}, {0x3c2ae000}, 
+    {0x3c2b0000}, {0x3c2b2000}, {0x3c2b4000}, {0x3c2b6000}, 
+    {0x3c2b8000}, {0x3c2ba000}, {0x3c2bc000}, {0x3c2be000}, 
+    {0x3c2c0000}, {0x3c2c2000}, {0x3c2c4000}, {0x3c2c6000}, 
+    {0x3c2c8000}, {0x3c2ca000}, {0x3c2cc000}, {0x3c2ce000}, 
+    {0x3c2d0000}, {0x3c2d2000}, {0x3c2d4000}, {0x3c2d6000}, 
+    {0x3c2d8000}, {0x3c2da000}, {0x3c2dc000}, {0x3c2de000}, 
+    {0x3c2e0000}, {0x3c2e2000}, {0x3c2e4000}, {0x3c2e6000}, 
+    {0x3c2e8000}, {0x3c2ea000}, {0x3c2ec000}, {0x3c2ee000}, 
+    {0x3c2f0000}, {0x3c2f2000}, {0x3c2f4000}, {0x3c2f6000}, 
+    {0x3c2f8000}, {0x3c2fa000}, {0x3c2fc000}, {0x3c2fe000}, 
+    {0x3c300000}, {0x3c302000}, {0x3c304000}, {0x3c306000}, 
+    {0x3c308000}, {0x3c30a000}, {0x3c30c000}, {0x3c30e000}, 
+    {0x3c310000}, {0x3c312000}, {0x3c314000}, {0x3c316000}, 
+    {0x3c318000}, {0x3c31a000}, {0x3c31c000}, {0x3c31e000}, 
+    {0x3c320000}, {0x3c322000}, {0x3c324000}, {0x3c326000}, 
+    {0x3c328000}, {0x3c32a000}, {0x3c32c000}, {0x3c32e000}, 
+    {0x3c330000}, {0x3c332000}, {0x3c334000}, {0x3c336000}, 
+    {0x3c338000}, {0x3c33a000}, {0x3c33c000}, {0x3c33e000}, 
+    {0x3c340000}, {0x3c342000}, {0x3c344000}, {0x3c346000}, 
+    {0x3c348000}, {0x3c34a000}, {0x3c34c000}, {0x3c34e000}, 
+    {0x3c350000}, {0x3c352000}, {0x3c354000}, {0x3c356000}, 
+    {0x3c358000}, {0x3c35a000}, {0x3c35c000}, {0x3c35e000}, 
+    {0x3c360000}, {0x3c362000}, {0x3c364000}, {0x3c366000}, 
+    {0x3c368000}, {0x3c36a000}, {0x3c36c000}, {0x3c36e000}, 
+    {0x3c370000}, {0x3c372000}, {0x3c374000}, {0x3c376000}, 
+    {0x3c378000}, {0x3c37a000}, {0x3c37c000}, {0x3c37e000}, 
+    {0x3c380000}, {0x3c382000}, {0x3c384000}, {0x3c386000}, 
+    {0x3c388000}, {0x3c38a000}, {0x3c38c000}, {0x3c38e000}, 
+    {0x3c390000}, {0x3c392000}, {0x3c394000}, {0x3c396000}, 
+    {0x3c398000}, {0x3c39a000}, {0x3c39c000}, {0x3c39e000}, 
+    {0x3c3a0000}, {0x3c3a2000}, {0x3c3a4000}, {0x3c3a6000}, 
+    {0x3c3a8000}, {0x3c3aa000}, {0x3c3ac000}, {0x3c3ae000}, 
+    {0x3c3b0000}, {0x3c3b2000}, {0x3c3b4000}, {0x3c3b6000}, 
+    {0x3c3b8000}, {0x3c3ba000}, {0x3c3bc000}, {0x3c3be000}, 
+    {0x3c3c0000}, {0x3c3c2000}, {0x3c3c4000}, {0x3c3c6000}, 
+    {0x3c3c8000}, {0x3c3ca000}, {0x3c3cc000}, {0x3c3ce000}, 
+    {0x3c3d0000}, {0x3c3d2000}, {0x3c3d4000}, {0x3c3d6000}, 
+    {0x3c3d8000}, {0x3c3da000}, {0x3c3dc000}, {0x3c3de000}, 
+    {0x3c3e0000}, {0x3c3e2000}, {0x3c3e4000}, {0x3c3e6000}, 
+    {0x3c3e8000}, {0x3c3ea000}, {0x3c3ec000}, {0x3c3ee000}, 
+    {0x3c3f0000}, {0x3c3f2000}, {0x3c3f4000}, {0x3c3f6000}, 
+    {0x3c3f8000}, {0x3c3fa000}, {0x3c3fc000}, {0x3c3fe000}, 
+    {0x3c400000}, {0x3c402000}, {0x3c404000}, {0x3c406000}, 
+    {0x3c408000}, {0x3c40a000}, {0x3c40c000}, {0x3c40e000}, 
+    {0x3c410000}, {0x3c412000}, {0x3c414000}, {0x3c416000}, 
+    {0x3c418000}, {0x3c41a000}, {0x3c41c000}, {0x3c41e000}, 
+    {0x3c420000}, {0x3c422000}, {0x3c424000}, {0x3c426000}, 
+    {0x3c428000}, {0x3c42a000}, {0x3c42c000}, {0x3c42e000}, 
+    {0x3c430000}, {0x3c432000}, {0x3c434000}, {0x3c436000}, 
+    {0x3c438000}, {0x3c43a000}, {0x3c43c000}, {0x3c43e000}, 
+    {0x3c440000}, {0x3c442000}, {0x3c444000}, {0x3c446000}, 
+    {0x3c448000}, {0x3c44a000}, {0x3c44c000}, {0x3c44e000}, 
+    {0x3c450000}, {0x3c452000}, {0x3c454000}, {0x3c456000}, 
+    {0x3c458000}, {0x3c45a000}, {0x3c45c000}, {0x3c45e000}, 
+    {0x3c460000}, {0x3c462000}, {0x3c464000}, {0x3c466000}, 
+    {0x3c468000}, {0x3c46a000}, {0x3c46c000}, {0x3c46e000}, 
+    {0x3c470000}, {0x3c472000}, {0x3c474000}, {0x3c476000}, 
+    {0x3c478000}, {0x3c47a000}, {0x3c47c000}, {0x3c47e000}, 
+    {0x3c480000}, {0x3c482000}, {0x3c484000}, {0x3c486000}, 
+    {0x3c488000}, {0x3c48a000}, {0x3c48c000}, {0x3c48e000}, 
+    {0x3c490000}, {0x3c492000}, {0x3c494000}, {0x3c496000}, 
+    {0x3c498000}, {0x3c49a000}, {0x3c49c000}, {0x3c49e000}, 
+    {0x3c4a0000}, {0x3c4a2000}, {0x3c4a4000}, {0x3c4a6000}, 
+    {0x3c4a8000}, {0x3c4aa000}, {0x3c4ac000}, {0x3c4ae000}, 
+    {0x3c4b0000}, {0x3c4b2000}, {0x3c4b4000}, {0x3c4b6000}, 
+    {0x3c4b8000}, {0x3c4ba000}, {0x3c4bc000}, {0x3c4be000}, 
+    {0x3c4c0000}, {0x3c4c2000}, {0x3c4c4000}, {0x3c4c6000}, 
+    {0x3c4c8000}, {0x3c4ca000}, {0x3c4cc000}, {0x3c4ce000}, 
+    {0x3c4d0000}, {0x3c4d2000}, {0x3c4d4000}, {0x3c4d6000}, 
+    {0x3c4d8000}, {0x3c4da000}, {0x3c4dc000}, {0x3c4de000}, 
+    {0x3c4e0000}, {0x3c4e2000}, {0x3c4e4000}, {0x3c4e6000}, 
+    {0x3c4e8000}, {0x3c4ea000}, {0x3c4ec000}, {0x3c4ee000}, 
+    {0x3c4f0000}, {0x3c4f2000}, {0x3c4f4000}, {0x3c4f6000}, 
+    {0x3c4f8000}, {0x3c4fa000}, {0x3c4fc000}, {0x3c4fe000}, 
+    {0x3c500000}, {0x3c502000}, {0x3c504000}, {0x3c506000}, 
+    {0x3c508000}, {0x3c50a000}, {0x3c50c000}, {0x3c50e000}, 
+    {0x3c510000}, {0x3c512000}, {0x3c514000}, {0x3c516000}, 
+    {0x3c518000}, {0x3c51a000}, {0x3c51c000}, {0x3c51e000}, 
+    {0x3c520000}, {0x3c522000}, {0x3c524000}, {0x3c526000}, 
+    {0x3c528000}, {0x3c52a000}, {0x3c52c000}, {0x3c52e000}, 
+    {0x3c530000}, {0x3c532000}, {0x3c534000}, {0x3c536000}, 
+    {0x3c538000}, {0x3c53a000}, {0x3c53c000}, {0x3c53e000}, 
+    {0x3c540000}, {0x3c542000}, {0x3c544000}, {0x3c546000}, 
+    {0x3c548000}, {0x3c54a000}, {0x3c54c000}, {0x3c54e000}, 
+    {0x3c550000}, {0x3c552000}, {0x3c554000}, {0x3c556000}, 
+    {0x3c558000}, {0x3c55a000}, {0x3c55c000}, {0x3c55e000}, 
+    {0x3c560000}, {0x3c562000}, {0x3c564000}, {0x3c566000}, 
+    {0x3c568000}, {0x3c56a000}, {0x3c56c000}, {0x3c56e000}, 
+    {0x3c570000}, {0x3c572000}, {0x3c574000}, {0x3c576000}, 
+    {0x3c578000}, {0x3c57a000}, {0x3c57c000}, {0x3c57e000}, 
+    {0x3c580000}, {0x3c582000}, {0x3c584000}, {0x3c586000}, 
+    {0x3c588000}, {0x3c58a000}, {0x3c58c000}, {0x3c58e000}, 
+    {0x3c590000}, {0x3c592000}, {0x3c594000}, {0x3c596000}, 
+    {0x3c598000}, {0x3c59a000}, {0x3c59c000}, {0x3c59e000}, 
+    {0x3c5a0000}, {0x3c5a2000}, {0x3c5a4000}, {0x3c5a6000}, 
+    {0x3c5a8000}, {0x3c5aa000}, {0x3c5ac000}, {0x3c5ae000}, 
+    {0x3c5b0000}, {0x3c5b2000}, {0x3c5b4000}, {0x3c5b6000}, 
+    {0x3c5b8000}, {0x3c5ba000}, {0x3c5bc000}, {0x3c5be000}, 
+    {0x3c5c0000}, {0x3c5c2000}, {0x3c5c4000}, {0x3c5c6000}, 
+    {0x3c5c8000}, {0x3c5ca000}, {0x3c5cc000}, {0x3c5ce000}, 
+    {0x3c5d0000}, {0x3c5d2000}, {0x3c5d4000}, {0x3c5d6000}, 
+    {0x3c5d8000}, {0x3c5da000}, {0x3c5dc000}, {0x3c5de000}, 
+    {0x3c5e0000}, {0x3c5e2000}, {0x3c5e4000}, {0x3c5e6000}, 
+    {0x3c5e8000}, {0x3c5ea000}, {0x3c5ec000}, {0x3c5ee000}, 
+    {0x3c5f0000}, {0x3c5f2000}, {0x3c5f4000}, {0x3c5f6000}, 
+    {0x3c5f8000}, {0x3c5fa000}, {0x3c5fc000}, {0x3c5fe000}, 
+    {0x3c600000}, {0x3c602000}, {0x3c604000}, {0x3c606000}, 
+    {0x3c608000}, {0x3c60a000}, {0x3c60c000}, {0x3c60e000}, 
+    {0x3c610000}, {0x3c612000}, {0x3c614000}, {0x3c616000}, 
+    {0x3c618000}, {0x3c61a000}, {0x3c61c000}, {0x3c61e000}, 
+    {0x3c620000}, {0x3c622000}, {0x3c624000}, {0x3c626000}, 
+    {0x3c628000}, {0x3c62a000}, {0x3c62c000}, {0x3c62e000}, 
+    {0x3c630000}, {0x3c632000}, {0x3c634000}, {0x3c636000}, 
+    {0x3c638000}, {0x3c63a000}, {0x3c63c000}, {0x3c63e000}, 
+    {0x3c640000}, {0x3c642000}, {0x3c644000}, {0x3c646000}, 
+    {0x3c648000}, {0x3c64a000}, {0x3c64c000}, {0x3c64e000}, 
+    {0x3c650000}, {0x3c652000}, {0x3c654000}, {0x3c656000}, 
+    {0x3c658000}, {0x3c65a000}, {0x3c65c000}, {0x3c65e000}, 
+    {0x3c660000}, {0x3c662000}, {0x3c664000}, {0x3c666000}, 
+    {0x3c668000}, {0x3c66a000}, {0x3c66c000}, {0x3c66e000}, 
+    {0x3c670000}, {0x3c672000}, {0x3c674000}, {0x3c676000}, 
+    {0x3c678000}, {0x3c67a000}, {0x3c67c000}, {0x3c67e000}, 
+    {0x3c680000}, {0x3c682000}, {0x3c684000}, {0x3c686000}, 
+    {0x3c688000}, {0x3c68a000}, {0x3c68c000}, {0x3c68e000}, 
+    {0x3c690000}, {0x3c692000}, {0x3c694000}, {0x3c696000}, 
+    {0x3c698000}, {0x3c69a000}, {0x3c69c000}, {0x3c69e000}, 
+    {0x3c6a0000}, {0x3c6a2000}, {0x3c6a4000}, {0x3c6a6000}, 
+    {0x3c6a8000}, {0x3c6aa000}, {0x3c6ac000}, {0x3c6ae000}, 
+    {0x3c6b0000}, {0x3c6b2000}, {0x3c6b4000}, {0x3c6b6000}, 
+    {0x3c6b8000}, {0x3c6ba000}, {0x3c6bc000}, {0x3c6be000}, 
+    {0x3c6c0000}, {0x3c6c2000}, {0x3c6c4000}, {0x3c6c6000}, 
+    {0x3c6c8000}, {0x3c6ca000}, {0x3c6cc000}, {0x3c6ce000}, 
+    {0x3c6d0000}, {0x3c6d2000}, {0x3c6d4000}, {0x3c6d6000}, 
+    {0x3c6d8000}, {0x3c6da000}, {0x3c6dc000}, {0x3c6de000}, 
+    {0x3c6e0000}, {0x3c6e2000}, {0x3c6e4000}, {0x3c6e6000}, 
+    {0x3c6e8000}, {0x3c6ea000}, {0x3c6ec000}, {0x3c6ee000}, 
+    {0x3c6f0000}, {0x3c6f2000}, {0x3c6f4000}, {0x3c6f6000}, 
+    {0x3c6f8000}, {0x3c6fa000}, {0x3c6fc000}, {0x3c6fe000}, 
+    {0x3c700000}, {0x3c702000}, {0x3c704000}, {0x3c706000}, 
+    {0x3c708000}, {0x3c70a000}, {0x3c70c000}, {0x3c70e000}, 
+    {0x3c710000}, {0x3c712000}, {0x3c714000}, {0x3c716000}, 
+    {0x3c718000}, {0x3c71a000}, {0x3c71c000}, {0x3c71e000}, 
+    {0x3c720000}, {0x3c722000}, {0x3c724000}, {0x3c726000}, 
+    {0x3c728000}, {0x3c72a000}, {0x3c72c000}, {0x3c72e000}, 
+    {0x3c730000}, {0x3c732000}, {0x3c734000}, {0x3c736000}, 
+    {0x3c738000}, {0x3c73a000}, {0x3c73c000}, {0x3c73e000}, 
+    {0x3c740000}, {0x3c742000}, {0x3c744000}, {0x3c746000}, 
+    {0x3c748000}, {0x3c74a000}, {0x3c74c000}, {0x3c74e000}, 
+    {0x3c750000}, {0x3c752000}, {0x3c754000}, {0x3c756000}, 
+    {0x3c758000}, {0x3c75a000}, {0x3c75c000}, {0x3c75e000}, 
+    {0x3c760000}, {0x3c762000}, {0x3c764000}, {0x3c766000}, 
+    {0x3c768000}, {0x3c76a000}, {0x3c76c000}, {0x3c76e000}, 
+    {0x3c770000}, {0x3c772000}, {0x3c774000}, {0x3c776000}, 
+    {0x3c778000}, {0x3c77a000}, {0x3c77c000}, {0x3c77e000}, 
+    {0x3c780000}, {0x3c782000}, {0x3c784000}, {0x3c786000}, 
+    {0x3c788000}, {0x3c78a000}, {0x3c78c000}, {0x3c78e000}, 
+    {0x3c790000}, {0x3c792000}, {0x3c794000}, {0x3c796000}, 
+    {0x3c798000}, {0x3c79a000}, {0x3c79c000}, {0x3c79e000}, 
+    {0x3c7a0000}, {0x3c7a2000}, {0x3c7a4000}, {0x3c7a6000}, 
+    {0x3c7a8000}, {0x3c7aa000}, {0x3c7ac000}, {0x3c7ae000}, 
+    {0x3c7b0000}, {0x3c7b2000}, {0x3c7b4000}, {0x3c7b6000}, 
+    {0x3c7b8000}, {0x3c7ba000}, {0x3c7bc000}, {0x3c7be000}, 
+    {0x3c7c0000}, {0x3c7c2000}, {0x3c7c4000}, {0x3c7c6000}, 
+    {0x3c7c8000}, {0x3c7ca000}, {0x3c7cc000}, {0x3c7ce000}, 
+    {0x3c7d0000}, {0x3c7d2000}, {0x3c7d4000}, {0x3c7d6000}, 
+    {0x3c7d8000}, {0x3c7da000}, {0x3c7dc000}, {0x3c7de000}, 
+    {0x3c7e0000}, {0x3c7e2000}, {0x3c7e4000}, {0x3c7e6000}, 
+    {0x3c7e8000}, {0x3c7ea000}, {0x3c7ec000}, {0x3c7ee000}, 
+    {0x3c7f0000}, {0x3c7f2000}, {0x3c7f4000}, {0x3c7f6000}, 
+    {0x3c7f8000}, {0x3c7fa000}, {0x3c7fc000}, {0x3c7fe000}, 
+    {0x3c800000}, {0x3c802000}, {0x3c804000}, {0x3c806000}, 
+    {0x3c808000}, {0x3c80a000}, {0x3c80c000}, {0x3c80e000}, 
+    {0x3c810000}, {0x3c812000}, {0x3c814000}, {0x3c816000}, 
+    {0x3c818000}, {0x3c81a000}, {0x3c81c000}, {0x3c81e000}, 
+    {0x3c820000}, {0x3c822000}, {0x3c824000}, {0x3c826000}, 
+    {0x3c828000}, {0x3c82a000}, {0x3c82c000}, {0x3c82e000}, 
+    {0x3c830000}, {0x3c832000}, {0x3c834000}, {0x3c836000}, 
+    {0x3c838000}, {0x3c83a000}, {0x3c83c000}, {0x3c83e000}, 
+    {0x3c840000}, {0x3c842000}, {0x3c844000}, {0x3c846000}, 
+    {0x3c848000}, {0x3c84a000}, {0x3c84c000}, {0x3c84e000}, 
+    {0x3c850000}, {0x3c852000}, {0x3c854000}, {0x3c856000}, 
+    {0x3c858000}, {0x3c85a000}, {0x3c85c000}, {0x3c85e000}, 
+    {0x3c860000}, {0x3c862000}, {0x3c864000}, {0x3c866000}, 
+    {0x3c868000}, {0x3c86a000}, {0x3c86c000}, {0x3c86e000}, 
+    {0x3c870000}, {0x3c872000}, {0x3c874000}, {0x3c876000}, 
+    {0x3c878000}, {0x3c87a000}, {0x3c87c000}, {0x3c87e000}, 
+    {0x3c880000}, {0x3c882000}, {0x3c884000}, {0x3c886000}, 
+    {0x3c888000}, {0x3c88a000}, {0x3c88c000}, {0x3c88e000}, 
+    {0x3c890000}, {0x3c892000}, {0x3c894000}, {0x3c896000}, 
+    {0x3c898000}, {0x3c89a000}, {0x3c89c000}, {0x3c89e000}, 
+    {0x3c8a0000}, {0x3c8a2000}, {0x3c8a4000}, {0x3c8a6000}, 
+    {0x3c8a8000}, {0x3c8aa000}, {0x3c8ac000}, {0x3c8ae000}, 
+    {0x3c8b0000}, {0x3c8b2000}, {0x3c8b4000}, {0x3c8b6000}, 
+    {0x3c8b8000}, {0x3c8ba000}, {0x3c8bc000}, {0x3c8be000}, 
+    {0x3c8c0000}, {0x3c8c2000}, {0x3c8c4000}, {0x3c8c6000}, 
+    {0x3c8c8000}, {0x3c8ca000}, {0x3c8cc000}, {0x3c8ce000}, 
+    {0x3c8d0000}, {0x3c8d2000}, {0x3c8d4000}, {0x3c8d6000}, 
+    {0x3c8d8000}, {0x3c8da000}, {0x3c8dc000}, {0x3c8de000}, 
+    {0x3c8e0000}, {0x3c8e2000}, {0x3c8e4000}, {0x3c8e6000}, 
+    {0x3c8e8000}, {0x3c8ea000}, {0x3c8ec000}, {0x3c8ee000}, 
+    {0x3c8f0000}, {0x3c8f2000}, {0x3c8f4000}, {0x3c8f6000}, 
+    {0x3c8f8000}, {0x3c8fa000}, {0x3c8fc000}, {0x3c8fe000}, 
+    {0x3c900000}, {0x3c902000}, {0x3c904000}, {0x3c906000}, 
+    {0x3c908000}, {0x3c90a000}, {0x3c90c000}, {0x3c90e000}, 
+    {0x3c910000}, {0x3c912000}, {0x3c914000}, {0x3c916000}, 
+    {0x3c918000}, {0x3c91a000}, {0x3c91c000}, {0x3c91e000}, 
+    {0x3c920000}, {0x3c922000}, {0x3c924000}, {0x3c926000}, 
+    {0x3c928000}, {0x3c92a000}, {0x3c92c000}, {0x3c92e000}, 
+    {0x3c930000}, {0x3c932000}, {0x3c934000}, {0x3c936000}, 
+    {0x3c938000}, {0x3c93a000}, {0x3c93c000}, {0x3c93e000}, 
+    {0x3c940000}, {0x3c942000}, {0x3c944000}, {0x3c946000}, 
+    {0x3c948000}, {0x3c94a000}, {0x3c94c000}, {0x3c94e000}, 
+    {0x3c950000}, {0x3c952000}, {0x3c954000}, {0x3c956000}, 
+    {0x3c958000}, {0x3c95a000}, {0x3c95c000}, {0x3c95e000}, 
+    {0x3c960000}, {0x3c962000}, {0x3c964000}, {0x3c966000}, 
+    {0x3c968000}, {0x3c96a000}, {0x3c96c000}, {0x3c96e000}, 
+    {0x3c970000}, {0x3c972000}, {0x3c974000}, {0x3c976000}, 
+    {0x3c978000}, {0x3c97a000}, {0x3c97c000}, {0x3c97e000}, 
+    {0x3c980000}, {0x3c982000}, {0x3c984000}, {0x3c986000}, 
+    {0x3c988000}, {0x3c98a000}, {0x3c98c000}, {0x3c98e000}, 
+    {0x3c990000}, {0x3c992000}, {0x3c994000}, {0x3c996000}, 
+    {0x3c998000}, {0x3c99a000}, {0x3c99c000}, {0x3c99e000}, 
+    {0x3c9a0000}, {0x3c9a2000}, {0x3c9a4000}, {0x3c9a6000}, 
+    {0x3c9a8000}, {0x3c9aa000}, {0x3c9ac000}, {0x3c9ae000}, 
+    {0x3c9b0000}, {0x3c9b2000}, {0x3c9b4000}, {0x3c9b6000}, 
+    {0x3c9b8000}, {0x3c9ba000}, {0x3c9bc000}, {0x3c9be000}, 
+    {0x3c9c0000}, {0x3c9c2000}, {0x3c9c4000}, {0x3c9c6000}, 
+    {0x3c9c8000}, {0x3c9ca000}, {0x3c9cc000}, {0x3c9ce000}, 
+    {0x3c9d0000}, {0x3c9d2000}, {0x3c9d4000}, {0x3c9d6000}, 
+    {0x3c9d8000}, {0x3c9da000}, {0x3c9dc000}, {0x3c9de000}, 
+    {0x3c9e0000}, {0x3c9e2000}, {0x3c9e4000}, {0x3c9e6000}, 
+    {0x3c9e8000}, {0x3c9ea000}, {0x3c9ec000}, {0x3c9ee000}, 
+    {0x3c9f0000}, {0x3c9f2000}, {0x3c9f4000}, {0x3c9f6000}, 
+    {0x3c9f8000}, {0x3c9fa000}, {0x3c9fc000}, {0x3c9fe000}, 
+    {0x3ca00000}, {0x3ca02000}, {0x3ca04000}, {0x3ca06000}, 
+    {0x3ca08000}, {0x3ca0a000}, {0x3ca0c000}, {0x3ca0e000}, 
+    {0x3ca10000}, {0x3ca12000}, {0x3ca14000}, {0x3ca16000}, 
+    {0x3ca18000}, {0x3ca1a000}, {0x3ca1c000}, {0x3ca1e000}, 
+    {0x3ca20000}, {0x3ca22000}, {0x3ca24000}, {0x3ca26000}, 
+    {0x3ca28000}, {0x3ca2a000}, {0x3ca2c000}, {0x3ca2e000}, 
+    {0x3ca30000}, {0x3ca32000}, {0x3ca34000}, {0x3ca36000}, 
+    {0x3ca38000}, {0x3ca3a000}, {0x3ca3c000}, {0x3ca3e000}, 
+    {0x3ca40000}, {0x3ca42000}, {0x3ca44000}, {0x3ca46000}, 
+    {0x3ca48000}, {0x3ca4a000}, {0x3ca4c000}, {0x3ca4e000}, 
+    {0x3ca50000}, {0x3ca52000}, {0x3ca54000}, {0x3ca56000}, 
+    {0x3ca58000}, {0x3ca5a000}, {0x3ca5c000}, {0x3ca5e000}, 
+    {0x3ca60000}, {0x3ca62000}, {0x3ca64000}, {0x3ca66000}, 
+    {0x3ca68000}, {0x3ca6a000}, {0x3ca6c000}, {0x3ca6e000}, 
+    {0x3ca70000}, {0x3ca72000}, {0x3ca74000}, {0x3ca76000}, 
+    {0x3ca78000}, {0x3ca7a000}, {0x3ca7c000}, {0x3ca7e000}, 
+    {0x3ca80000}, {0x3ca82000}, {0x3ca84000}, {0x3ca86000}, 
+    {0x3ca88000}, {0x3ca8a000}, {0x3ca8c000}, {0x3ca8e000}, 
+    {0x3ca90000}, {0x3ca92000}, {0x3ca94000}, {0x3ca96000}, 
+    {0x3ca98000}, {0x3ca9a000}, {0x3ca9c000}, {0x3ca9e000}, 
+    {0x3caa0000}, {0x3caa2000}, {0x3caa4000}, {0x3caa6000}, 
+    {0x3caa8000}, {0x3caaa000}, {0x3caac000}, {0x3caae000}, 
+    {0x3cab0000}, {0x3cab2000}, {0x3cab4000}, {0x3cab6000}, 
+    {0x3cab8000}, {0x3caba000}, {0x3cabc000}, {0x3cabe000}, 
+    {0x3cac0000}, {0x3cac2000}, {0x3cac4000}, {0x3cac6000}, 
+    {0x3cac8000}, {0x3caca000}, {0x3cacc000}, {0x3cace000}, 
+    {0x3cad0000}, {0x3cad2000}, {0x3cad4000}, {0x3cad6000}, 
+    {0x3cad8000}, {0x3cada000}, {0x3cadc000}, {0x3cade000}, 
+    {0x3cae0000}, {0x3cae2000}, {0x3cae4000}, {0x3cae6000}, 
+    {0x3cae8000}, {0x3caea000}, {0x3caec000}, {0x3caee000}, 
+    {0x3caf0000}, {0x3caf2000}, {0x3caf4000}, {0x3caf6000}, 
+    {0x3caf8000}, {0x3cafa000}, {0x3cafc000}, {0x3cafe000}, 
+    {0x3cb00000}, {0x3cb02000}, {0x3cb04000}, {0x3cb06000}, 
+    {0x3cb08000}, {0x3cb0a000}, {0x3cb0c000}, {0x3cb0e000}, 
+    {0x3cb10000}, {0x3cb12000}, {0x3cb14000}, {0x3cb16000}, 
+    {0x3cb18000}, {0x3cb1a000}, {0x3cb1c000}, {0x3cb1e000}, 
+    {0x3cb20000}, {0x3cb22000}, {0x3cb24000}, {0x3cb26000}, 
+    {0x3cb28000}, {0x3cb2a000}, {0x3cb2c000}, {0x3cb2e000}, 
+    {0x3cb30000}, {0x3cb32000}, {0x3cb34000}, {0x3cb36000}, 
+    {0x3cb38000}, {0x3cb3a000}, {0x3cb3c000}, {0x3cb3e000}, 
+    {0x3cb40000}, {0x3cb42000}, {0x3cb44000}, {0x3cb46000}, 
+    {0x3cb48000}, {0x3cb4a000}, {0x3cb4c000}, {0x3cb4e000}, 
+    {0x3cb50000}, {0x3cb52000}, {0x3cb54000}, {0x3cb56000}, 
+    {0x3cb58000}, {0x3cb5a000}, {0x3cb5c000}, {0x3cb5e000}, 
+    {0x3cb60000}, {0x3cb62000}, {0x3cb64000}, {0x3cb66000}, 
+    {0x3cb68000}, {0x3cb6a000}, {0x3cb6c000}, {0x3cb6e000}, 
+    {0x3cb70000}, {0x3cb72000}, {0x3cb74000}, {0x3cb76000}, 
+    {0x3cb78000}, {0x3cb7a000}, {0x3cb7c000}, {0x3cb7e000}, 
+    {0x3cb80000}, {0x3cb82000}, {0x3cb84000}, {0x3cb86000}, 
+    {0x3cb88000}, {0x3cb8a000}, {0x3cb8c000}, {0x3cb8e000}, 
+    {0x3cb90000}, {0x3cb92000}, {0x3cb94000}, {0x3cb96000}, 
+    {0x3cb98000}, {0x3cb9a000}, {0x3cb9c000}, {0x3cb9e000}, 
+    {0x3cba0000}, {0x3cba2000}, {0x3cba4000}, {0x3cba6000}, 
+    {0x3cba8000}, {0x3cbaa000}, {0x3cbac000}, {0x3cbae000}, 
+    {0x3cbb0000}, {0x3cbb2000}, {0x3cbb4000}, {0x3cbb6000}, 
+    {0x3cbb8000}, {0x3cbba000}, {0x3cbbc000}, {0x3cbbe000}, 
+    {0x3cbc0000}, {0x3cbc2000}, {0x3cbc4000}, {0x3cbc6000}, 
+    {0x3cbc8000}, {0x3cbca000}, {0x3cbcc000}, {0x3cbce000}, 
+    {0x3cbd0000}, {0x3cbd2000}, {0x3cbd4000}, {0x3cbd6000}, 
+    {0x3cbd8000}, {0x3cbda000}, {0x3cbdc000}, {0x3cbde000}, 
+    {0x3cbe0000}, {0x3cbe2000}, {0x3cbe4000}, {0x3cbe6000}, 
+    {0x3cbe8000}, {0x3cbea000}, {0x3cbec000}, {0x3cbee000}, 
+    {0x3cbf0000}, {0x3cbf2000}, {0x3cbf4000}, {0x3cbf6000}, 
+    {0x3cbf8000}, {0x3cbfa000}, {0x3cbfc000}, {0x3cbfe000}, 
+    {0x3cc00000}, {0x3cc02000}, {0x3cc04000}, {0x3cc06000}, 
+    {0x3cc08000}, {0x3cc0a000}, {0x3cc0c000}, {0x3cc0e000}, 
+    {0x3cc10000}, {0x3cc12000}, {0x3cc14000}, {0x3cc16000}, 
+    {0x3cc18000}, {0x3cc1a000}, {0x3cc1c000}, {0x3cc1e000}, 
+    {0x3cc20000}, {0x3cc22000}, {0x3cc24000}, {0x3cc26000}, 
+    {0x3cc28000}, {0x3cc2a000}, {0x3cc2c000}, {0x3cc2e000}, 
+    {0x3cc30000}, {0x3cc32000}, {0x3cc34000}, {0x3cc36000}, 
+    {0x3cc38000}, {0x3cc3a000}, {0x3cc3c000}, {0x3cc3e000}, 
+    {0x3cc40000}, {0x3cc42000}, {0x3cc44000}, {0x3cc46000}, 
+    {0x3cc48000}, {0x3cc4a000}, {0x3cc4c000}, {0x3cc4e000}, 
+    {0x3cc50000}, {0x3cc52000}, {0x3cc54000}, {0x3cc56000}, 
+    {0x3cc58000}, {0x3cc5a000}, {0x3cc5c000}, {0x3cc5e000}, 
+    {0x3cc60000}, {0x3cc62000}, {0x3cc64000}, {0x3cc66000}, 
+    {0x3cc68000}, {0x3cc6a000}, {0x3cc6c000}, {0x3cc6e000}, 
+    {0x3cc70000}, {0x3cc72000}, {0x3cc74000}, {0x3cc76000}, 
+    {0x3cc78000}, {0x3cc7a000}, {0x3cc7c000}, {0x3cc7e000}, 
+    {0x3cc80000}, {0x3cc82000}, {0x3cc84000}, {0x3cc86000}, 
+    {0x3cc88000}, {0x3cc8a000}, {0x3cc8c000}, {0x3cc8e000}, 
+    {0x3cc90000}, {0x3cc92000}, {0x3cc94000}, {0x3cc96000}, 
+    {0x3cc98000}, {0x3cc9a000}, {0x3cc9c000}, {0x3cc9e000}, 
+    {0x3cca0000}, {0x3cca2000}, {0x3cca4000}, {0x3cca6000}, 
+    {0x3cca8000}, {0x3ccaa000}, {0x3ccac000}, {0x3ccae000}, 
+    {0x3ccb0000}, {0x3ccb2000}, {0x3ccb4000}, {0x3ccb6000}, 
+    {0x3ccb8000}, {0x3ccba000}, {0x3ccbc000}, {0x3ccbe000}, 
+    {0x3ccc0000}, {0x3ccc2000}, {0x3ccc4000}, {0x3ccc6000}, 
+    {0x3ccc8000}, {0x3ccca000}, {0x3cccc000}, {0x3ccce000}, 
+    {0x3ccd0000}, {0x3ccd2000}, {0x3ccd4000}, {0x3ccd6000}, 
+    {0x3ccd8000}, {0x3ccda000}, {0x3ccdc000}, {0x3ccde000}, 
+    {0x3cce0000}, {0x3cce2000}, {0x3cce4000}, {0x3cce6000}, 
+    {0x3cce8000}, {0x3ccea000}, {0x3ccec000}, {0x3ccee000}, 
+    {0x3ccf0000}, {0x3ccf2000}, {0x3ccf4000}, {0x3ccf6000}, 
+    {0x3ccf8000}, {0x3ccfa000}, {0x3ccfc000}, {0x3ccfe000}, 
+    {0x3cd00000}, {0x3cd02000}, {0x3cd04000}, {0x3cd06000}, 
+    {0x3cd08000}, {0x3cd0a000}, {0x3cd0c000}, {0x3cd0e000}, 
+    {0x3cd10000}, {0x3cd12000}, {0x3cd14000}, {0x3cd16000}, 
+    {0x3cd18000}, {0x3cd1a000}, {0x3cd1c000}, {0x3cd1e000}, 
+    {0x3cd20000}, {0x3cd22000}, {0x3cd24000}, {0x3cd26000}, 
+    {0x3cd28000}, {0x3cd2a000}, {0x3cd2c000}, {0x3cd2e000}, 
+    {0x3cd30000}, {0x3cd32000}, {0x3cd34000}, {0x3cd36000}, 
+    {0x3cd38000}, {0x3cd3a000}, {0x3cd3c000}, {0x3cd3e000}, 
+    {0x3cd40000}, {0x3cd42000}, {0x3cd44000}, {0x3cd46000}, 
+    {0x3cd48000}, {0x3cd4a000}, {0x3cd4c000}, {0x3cd4e000}, 
+    {0x3cd50000}, {0x3cd52000}, {0x3cd54000}, {0x3cd56000}, 
+    {0x3cd58000}, {0x3cd5a000}, {0x3cd5c000}, {0x3cd5e000}, 
+    {0x3cd60000}, {0x3cd62000}, {0x3cd64000}, {0x3cd66000}, 
+    {0x3cd68000}, {0x3cd6a000}, {0x3cd6c000}, {0x3cd6e000}, 
+    {0x3cd70000}, {0x3cd72000}, {0x3cd74000}, {0x3cd76000}, 
+    {0x3cd78000}, {0x3cd7a000}, {0x3cd7c000}, {0x3cd7e000}, 
+    {0x3cd80000}, {0x3cd82000}, {0x3cd84000}, {0x3cd86000}, 
+    {0x3cd88000}, {0x3cd8a000}, {0x3cd8c000}, {0x3cd8e000}, 
+    {0x3cd90000}, {0x3cd92000}, {0x3cd94000}, {0x3cd96000}, 
+    {0x3cd98000}, {0x3cd9a000}, {0x3cd9c000}, {0x3cd9e000}, 
+    {0x3cda0000}, {0x3cda2000}, {0x3cda4000}, {0x3cda6000}, 
+    {0x3cda8000}, {0x3cdaa000}, {0x3cdac000}, {0x3cdae000}, 
+    {0x3cdb0000}, {0x3cdb2000}, {0x3cdb4000}, {0x3cdb6000}, 
+    {0x3cdb8000}, {0x3cdba000}, {0x3cdbc000}, {0x3cdbe000}, 
+    {0x3cdc0000}, {0x3cdc2000}, {0x3cdc4000}, {0x3cdc6000}, 
+    {0x3cdc8000}, {0x3cdca000}, {0x3cdcc000}, {0x3cdce000}, 
+    {0x3cdd0000}, {0x3cdd2000}, {0x3cdd4000}, {0x3cdd6000}, 
+    {0x3cdd8000}, {0x3cdda000}, {0x3cddc000}, {0x3cdde000}, 
+    {0x3cde0000}, {0x3cde2000}, {0x3cde4000}, {0x3cde6000}, 
+    {0x3cde8000}, {0x3cdea000}, {0x3cdec000}, {0x3cdee000}, 
+    {0x3cdf0000}, {0x3cdf2000}, {0x3cdf4000}, {0x3cdf6000}, 
+    {0x3cdf8000}, {0x3cdfa000}, {0x3cdfc000}, {0x3cdfe000}, 
+    {0x3ce00000}, {0x3ce02000}, {0x3ce04000}, {0x3ce06000}, 
+    {0x3ce08000}, {0x3ce0a000}, {0x3ce0c000}, {0x3ce0e000}, 
+    {0x3ce10000}, {0x3ce12000}, {0x3ce14000}, {0x3ce16000}, 
+    {0x3ce18000}, {0x3ce1a000}, {0x3ce1c000}, {0x3ce1e000}, 
+    {0x3ce20000}, {0x3ce22000}, {0x3ce24000}, {0x3ce26000}, 
+    {0x3ce28000}, {0x3ce2a000}, {0x3ce2c000}, {0x3ce2e000}, 
+    {0x3ce30000}, {0x3ce32000}, {0x3ce34000}, {0x3ce36000}, 
+    {0x3ce38000}, {0x3ce3a000}, {0x3ce3c000}, {0x3ce3e000}, 
+    {0x3ce40000}, {0x3ce42000}, {0x3ce44000}, {0x3ce46000}, 
+    {0x3ce48000}, {0x3ce4a000}, {0x3ce4c000}, {0x3ce4e000}, 
+    {0x3ce50000}, {0x3ce52000}, {0x3ce54000}, {0x3ce56000}, 
+    {0x3ce58000}, {0x3ce5a000}, {0x3ce5c000}, {0x3ce5e000}, 
+    {0x3ce60000}, {0x3ce62000}, {0x3ce64000}, {0x3ce66000}, 
+    {0x3ce68000}, {0x3ce6a000}, {0x3ce6c000}, {0x3ce6e000}, 
+    {0x3ce70000}, {0x3ce72000}, {0x3ce74000}, {0x3ce76000}, 
+    {0x3ce78000}, {0x3ce7a000}, {0x3ce7c000}, {0x3ce7e000}, 
+    {0x3ce80000}, {0x3ce82000}, {0x3ce84000}, {0x3ce86000}, 
+    {0x3ce88000}, {0x3ce8a000}, {0x3ce8c000}, {0x3ce8e000}, 
+    {0x3ce90000}, {0x3ce92000}, {0x3ce94000}, {0x3ce96000}, 
+    {0x3ce98000}, {0x3ce9a000}, {0x3ce9c000}, {0x3ce9e000}, 
+    {0x3cea0000}, {0x3cea2000}, {0x3cea4000}, {0x3cea6000}, 
+    {0x3cea8000}, {0x3ceaa000}, {0x3ceac000}, {0x3ceae000}, 
+    {0x3ceb0000}, {0x3ceb2000}, {0x3ceb4000}, {0x3ceb6000}, 
+    {0x3ceb8000}, {0x3ceba000}, {0x3cebc000}, {0x3cebe000}, 
+    {0x3cec0000}, {0x3cec2000}, {0x3cec4000}, {0x3cec6000}, 
+    {0x3cec8000}, {0x3ceca000}, {0x3cecc000}, {0x3cece000}, 
+    {0x3ced0000}, {0x3ced2000}, {0x3ced4000}, {0x3ced6000}, 
+    {0x3ced8000}, {0x3ceda000}, {0x3cedc000}, {0x3cede000}, 
+    {0x3cee0000}, {0x3cee2000}, {0x3cee4000}, {0x3cee6000}, 
+    {0x3cee8000}, {0x3ceea000}, {0x3ceec000}, {0x3ceee000}, 
+    {0x3cef0000}, {0x3cef2000}, {0x3cef4000}, {0x3cef6000}, 
+    {0x3cef8000}, {0x3cefa000}, {0x3cefc000}, {0x3cefe000}, 
+    {0x3cf00000}, {0x3cf02000}, {0x3cf04000}, {0x3cf06000}, 
+    {0x3cf08000}, {0x3cf0a000}, {0x3cf0c000}, {0x3cf0e000}, 
+    {0x3cf10000}, {0x3cf12000}, {0x3cf14000}, {0x3cf16000}, 
+    {0x3cf18000}, {0x3cf1a000}, {0x3cf1c000}, {0x3cf1e000}, 
+    {0x3cf20000}, {0x3cf22000}, {0x3cf24000}, {0x3cf26000}, 
+    {0x3cf28000}, {0x3cf2a000}, {0x3cf2c000}, {0x3cf2e000}, 
+    {0x3cf30000}, {0x3cf32000}, {0x3cf34000}, {0x3cf36000}, 
+    {0x3cf38000}, {0x3cf3a000}, {0x3cf3c000}, {0x3cf3e000}, 
+    {0x3cf40000}, {0x3cf42000}, {0x3cf44000}, {0x3cf46000}, 
+    {0x3cf48000}, {0x3cf4a000}, {0x3cf4c000}, {0x3cf4e000}, 
+    {0x3cf50000}, {0x3cf52000}, {0x3cf54000}, {0x3cf56000}, 
+    {0x3cf58000}, {0x3cf5a000}, {0x3cf5c000}, {0x3cf5e000}, 
+    {0x3cf60000}, {0x3cf62000}, {0x3cf64000}, {0x3cf66000}, 
+    {0x3cf68000}, {0x3cf6a000}, {0x3cf6c000}, {0x3cf6e000}, 
+    {0x3cf70000}, {0x3cf72000}, {0x3cf74000}, {0x3cf76000}, 
+    {0x3cf78000}, {0x3cf7a000}, {0x3cf7c000}, {0x3cf7e000}, 
+    {0x3cf80000}, {0x3cf82000}, {0x3cf84000}, {0x3cf86000}, 
+    {0x3cf88000}, {0x3cf8a000}, {0x3cf8c000}, {0x3cf8e000}, 
+    {0x3cf90000}, {0x3cf92000}, {0x3cf94000}, {0x3cf96000}, 
+    {0x3cf98000}, {0x3cf9a000}, {0x3cf9c000}, {0x3cf9e000}, 
+    {0x3cfa0000}, {0x3cfa2000}, {0x3cfa4000}, {0x3cfa6000}, 
+    {0x3cfa8000}, {0x3cfaa000}, {0x3cfac000}, {0x3cfae000}, 
+    {0x3cfb0000}, {0x3cfb2000}, {0x3cfb4000}, {0x3cfb6000}, 
+    {0x3cfb8000}, {0x3cfba000}, {0x3cfbc000}, {0x3cfbe000}, 
+    {0x3cfc0000}, {0x3cfc2000}, {0x3cfc4000}, {0x3cfc6000}, 
+    {0x3cfc8000}, {0x3cfca000}, {0x3cfcc000}, {0x3cfce000}, 
+    {0x3cfd0000}, {0x3cfd2000}, {0x3cfd4000}, {0x3cfd6000}, 
+    {0x3cfd8000}, {0x3cfda000}, {0x3cfdc000}, {0x3cfde000}, 
+    {0x3cfe0000}, {0x3cfe2000}, {0x3cfe4000}, {0x3cfe6000}, 
+    {0x3cfe8000}, {0x3cfea000}, {0x3cfec000}, {0x3cfee000}, 
+    {0x3cff0000}, {0x3cff2000}, {0x3cff4000}, {0x3cff6000}, 
+    {0x3cff8000}, {0x3cffa000}, {0x3cffc000}, {0x3cffe000}, 
+    {0x3d000000}, {0x3d002000}, {0x3d004000}, {0x3d006000}, 
+    {0x3d008000}, {0x3d00a000}, {0x3d00c000}, {0x3d00e000}, 
+    {0x3d010000}, {0x3d012000}, {0x3d014000}, {0x3d016000}, 
+    {0x3d018000}, {0x3d01a000}, {0x3d01c000}, {0x3d01e000}, 
+    {0x3d020000}, {0x3d022000}, {0x3d024000}, {0x3d026000}, 
+    {0x3d028000}, {0x3d02a000}, {0x3d02c000}, {0x3d02e000}, 
+    {0x3d030000}, {0x3d032000}, {0x3d034000}, {0x3d036000}, 
+    {0x3d038000}, {0x3d03a000}, {0x3d03c000}, {0x3d03e000}, 
+    {0x3d040000}, {0x3d042000}, {0x3d044000}, {0x3d046000}, 
+    {0x3d048000}, {0x3d04a000}, {0x3d04c000}, {0x3d04e000}, 
+    {0x3d050000}, {0x3d052000}, {0x3d054000}, {0x3d056000}, 
+    {0x3d058000}, {0x3d05a000}, {0x3d05c000}, {0x3d05e000}, 
+    {0x3d060000}, {0x3d062000}, {0x3d064000}, {0x3d066000}, 
+    {0x3d068000}, {0x3d06a000}, {0x3d06c000}, {0x3d06e000}, 
+    {0x3d070000}, {0x3d072000}, {0x3d074000}, {0x3d076000}, 
+    {0x3d078000}, {0x3d07a000}, {0x3d07c000}, {0x3d07e000}, 
+    {0x3d080000}, {0x3d082000}, {0x3d084000}, {0x3d086000}, 
+    {0x3d088000}, {0x3d08a000}, {0x3d08c000}, {0x3d08e000}, 
+    {0x3d090000}, {0x3d092000}, {0x3d094000}, {0x3d096000}, 
+    {0x3d098000}, {0x3d09a000}, {0x3d09c000}, {0x3d09e000}, 
+    {0x3d0a0000}, {0x3d0a2000}, {0x3d0a4000}, {0x3d0a6000}, 
+    {0x3d0a8000}, {0x3d0aa000}, {0x3d0ac000}, {0x3d0ae000}, 
+    {0x3d0b0000}, {0x3d0b2000}, {0x3d0b4000}, {0x3d0b6000}, 
+    {0x3d0b8000}, {0x3d0ba000}, {0x3d0bc000}, {0x3d0be000}, 
+    {0x3d0c0000}, {0x3d0c2000}, {0x3d0c4000}, {0x3d0c6000}, 
+    {0x3d0c8000}, {0x3d0ca000}, {0x3d0cc000}, {0x3d0ce000}, 
+    {0x3d0d0000}, {0x3d0d2000}, {0x3d0d4000}, {0x3d0d6000}, 
+    {0x3d0d8000}, {0x3d0da000}, {0x3d0dc000}, {0x3d0de000}, 
+    {0x3d0e0000}, {0x3d0e2000}, {0x3d0e4000}, {0x3d0e6000}, 
+    {0x3d0e8000}, {0x3d0ea000}, {0x3d0ec000}, {0x3d0ee000}, 
+    {0x3d0f0000}, {0x3d0f2000}, {0x3d0f4000}, {0x3d0f6000}, 
+    {0x3d0f8000}, {0x3d0fa000}, {0x3d0fc000}, {0x3d0fe000}, 
+    {0x3d100000}, {0x3d102000}, {0x3d104000}, {0x3d106000}, 
+    {0x3d108000}, {0x3d10a000}, {0x3d10c000}, {0x3d10e000}, 
+    {0x3d110000}, {0x3d112000}, {0x3d114000}, {0x3d116000}, 
+    {0x3d118000}, {0x3d11a000}, {0x3d11c000}, {0x3d11e000}, 
+    {0x3d120000}, {0x3d122000}, {0x3d124000}, {0x3d126000}, 
+    {0x3d128000}, {0x3d12a000}, {0x3d12c000}, {0x3d12e000}, 
+    {0x3d130000}, {0x3d132000}, {0x3d134000}, {0x3d136000}, 
+    {0x3d138000}, {0x3d13a000}, {0x3d13c000}, {0x3d13e000}, 
+    {0x3d140000}, {0x3d142000}, {0x3d144000}, {0x3d146000}, 
+    {0x3d148000}, {0x3d14a000}, {0x3d14c000}, {0x3d14e000}, 
+    {0x3d150000}, {0x3d152000}, {0x3d154000}, {0x3d156000}, 
+    {0x3d158000}, {0x3d15a000}, {0x3d15c000}, {0x3d15e000}, 
+    {0x3d160000}, {0x3d162000}, {0x3d164000}, {0x3d166000}, 
+    {0x3d168000}, {0x3d16a000}, {0x3d16c000}, {0x3d16e000}, 
+    {0x3d170000}, {0x3d172000}, {0x3d174000}, {0x3d176000}, 
+    {0x3d178000}, {0x3d17a000}, {0x3d17c000}, {0x3d17e000}, 
+    {0x3d180000}, {0x3d182000}, {0x3d184000}, {0x3d186000}, 
+    {0x3d188000}, {0x3d18a000}, {0x3d18c000}, {0x3d18e000}, 
+    {0x3d190000}, {0x3d192000}, {0x3d194000}, {0x3d196000}, 
+    {0x3d198000}, {0x3d19a000}, {0x3d19c000}, {0x3d19e000}, 
+    {0x3d1a0000}, {0x3d1a2000}, {0x3d1a4000}, {0x3d1a6000}, 
+    {0x3d1a8000}, {0x3d1aa000}, {0x3d1ac000}, {0x3d1ae000}, 
+    {0x3d1b0000}, {0x3d1b2000}, {0x3d1b4000}, {0x3d1b6000}, 
+    {0x3d1b8000}, {0x3d1ba000}, {0x3d1bc000}, {0x3d1be000}, 
+    {0x3d1c0000}, {0x3d1c2000}, {0x3d1c4000}, {0x3d1c6000}, 
+    {0x3d1c8000}, {0x3d1ca000}, {0x3d1cc000}, {0x3d1ce000}, 
+    {0x3d1d0000}, {0x3d1d2000}, {0x3d1d4000}, {0x3d1d6000}, 
+    {0x3d1d8000}, {0x3d1da000}, {0x3d1dc000}, {0x3d1de000}, 
+    {0x3d1e0000}, {0x3d1e2000}, {0x3d1e4000}, {0x3d1e6000}, 
+    {0x3d1e8000}, {0x3d1ea000}, {0x3d1ec000}, {0x3d1ee000}, 
+    {0x3d1f0000}, {0x3d1f2000}, {0x3d1f4000}, {0x3d1f6000}, 
+    {0x3d1f8000}, {0x3d1fa000}, {0x3d1fc000}, {0x3d1fe000}, 
+    {0x3d200000}, {0x3d202000}, {0x3d204000}, {0x3d206000}, 
+    {0x3d208000}, {0x3d20a000}, {0x3d20c000}, {0x3d20e000}, 
+    {0x3d210000}, {0x3d212000}, {0x3d214000}, {0x3d216000}, 
+    {0x3d218000}, {0x3d21a000}, {0x3d21c000}, {0x3d21e000}, 
+    {0x3d220000}, {0x3d222000}, {0x3d224000}, {0x3d226000}, 
+    {0x3d228000}, {0x3d22a000}, {0x3d22c000}, {0x3d22e000}, 
+    {0x3d230000}, {0x3d232000}, {0x3d234000}, {0x3d236000}, 
+    {0x3d238000}, {0x3d23a000}, {0x3d23c000}, {0x3d23e000}, 
+    {0x3d240000}, {0x3d242000}, {0x3d244000}, {0x3d246000}, 
+    {0x3d248000}, {0x3d24a000}, {0x3d24c000}, {0x3d24e000}, 
+    {0x3d250000}, {0x3d252000}, {0x3d254000}, {0x3d256000}, 
+    {0x3d258000}, {0x3d25a000}, {0x3d25c000}, {0x3d25e000}, 
+    {0x3d260000}, {0x3d262000}, {0x3d264000}, {0x3d266000}, 
+    {0x3d268000}, {0x3d26a000}, {0x3d26c000}, {0x3d26e000}, 
+    {0x3d270000}, {0x3d272000}, {0x3d274000}, {0x3d276000}, 
+    {0x3d278000}, {0x3d27a000}, {0x3d27c000}, {0x3d27e000}, 
+    {0x3d280000}, {0x3d282000}, {0x3d284000}, {0x3d286000}, 
+    {0x3d288000}, {0x3d28a000}, {0x3d28c000}, {0x3d28e000}, 
+    {0x3d290000}, {0x3d292000}, {0x3d294000}, {0x3d296000}, 
+    {0x3d298000}, {0x3d29a000}, {0x3d29c000}, {0x3d29e000}, 
+    {0x3d2a0000}, {0x3d2a2000}, {0x3d2a4000}, {0x3d2a6000}, 
+    {0x3d2a8000}, {0x3d2aa000}, {0x3d2ac000}, {0x3d2ae000}, 
+    {0x3d2b0000}, {0x3d2b2000}, {0x3d2b4000}, {0x3d2b6000}, 
+    {0x3d2b8000}, {0x3d2ba000}, {0x3d2bc000}, {0x3d2be000}, 
+    {0x3d2c0000}, {0x3d2c2000}, {0x3d2c4000}, {0x3d2c6000}, 
+    {0x3d2c8000}, {0x3d2ca000}, {0x3d2cc000}, {0x3d2ce000}, 
+    {0x3d2d0000}, {0x3d2d2000}, {0x3d2d4000}, {0x3d2d6000}, 
+    {0x3d2d8000}, {0x3d2da000}, {0x3d2dc000}, {0x3d2de000}, 
+    {0x3d2e0000}, {0x3d2e2000}, {0x3d2e4000}, {0x3d2e6000}, 
+    {0x3d2e8000}, {0x3d2ea000}, {0x3d2ec000}, {0x3d2ee000}, 
+    {0x3d2f0000}, {0x3d2f2000}, {0x3d2f4000}, {0x3d2f6000}, 
+    {0x3d2f8000}, {0x3d2fa000}, {0x3d2fc000}, {0x3d2fe000}, 
+    {0x3d300000}, {0x3d302000}, {0x3d304000}, {0x3d306000}, 
+    {0x3d308000}, {0x3d30a000}, {0x3d30c000}, {0x3d30e000}, 
+    {0x3d310000}, {0x3d312000}, {0x3d314000}, {0x3d316000}, 
+    {0x3d318000}, {0x3d31a000}, {0x3d31c000}, {0x3d31e000}, 
+    {0x3d320000}, {0x3d322000}, {0x3d324000}, {0x3d326000}, 
+    {0x3d328000}, {0x3d32a000}, {0x3d32c000}, {0x3d32e000}, 
+    {0x3d330000}, {0x3d332000}, {0x3d334000}, {0x3d336000}, 
+    {0x3d338000}, {0x3d33a000}, {0x3d33c000}, {0x3d33e000}, 
+    {0x3d340000}, {0x3d342000}, {0x3d344000}, {0x3d346000}, 
+    {0x3d348000}, {0x3d34a000}, {0x3d34c000}, {0x3d34e000}, 
+    {0x3d350000}, {0x3d352000}, {0x3d354000}, {0x3d356000}, 
+    {0x3d358000}, {0x3d35a000}, {0x3d35c000}, {0x3d35e000}, 
+    {0x3d360000}, {0x3d362000}, {0x3d364000}, {0x3d366000}, 
+    {0x3d368000}, {0x3d36a000}, {0x3d36c000}, {0x3d36e000}, 
+    {0x3d370000}, {0x3d372000}, {0x3d374000}, {0x3d376000}, 
+    {0x3d378000}, {0x3d37a000}, {0x3d37c000}, {0x3d37e000}, 
+    {0x3d380000}, {0x3d382000}, {0x3d384000}, {0x3d386000}, 
+    {0x3d388000}, {0x3d38a000}, {0x3d38c000}, {0x3d38e000}, 
+    {0x3d390000}, {0x3d392000}, {0x3d394000}, {0x3d396000}, 
+    {0x3d398000}, {0x3d39a000}, {0x3d39c000}, {0x3d39e000}, 
+    {0x3d3a0000}, {0x3d3a2000}, {0x3d3a4000}, {0x3d3a6000}, 
+    {0x3d3a8000}, {0x3d3aa000}, {0x3d3ac000}, {0x3d3ae000}, 
+    {0x3d3b0000}, {0x3d3b2000}, {0x3d3b4000}, {0x3d3b6000}, 
+    {0x3d3b8000}, {0x3d3ba000}, {0x3d3bc000}, {0x3d3be000}, 
+    {0x3d3c0000}, {0x3d3c2000}, {0x3d3c4000}, {0x3d3c6000}, 
+    {0x3d3c8000}, {0x3d3ca000}, {0x3d3cc000}, {0x3d3ce000}, 
+    {0x3d3d0000}, {0x3d3d2000}, {0x3d3d4000}, {0x3d3d6000}, 
+    {0x3d3d8000}, {0x3d3da000}, {0x3d3dc000}, {0x3d3de000}, 
+    {0x3d3e0000}, {0x3d3e2000}, {0x3d3e4000}, {0x3d3e6000}, 
+    {0x3d3e8000}, {0x3d3ea000}, {0x3d3ec000}, {0x3d3ee000}, 
+    {0x3d3f0000}, {0x3d3f2000}, {0x3d3f4000}, {0x3d3f6000}, 
+    {0x3d3f8000}, {0x3d3fa000}, {0x3d3fc000}, {0x3d3fe000}, 
+    {0x3d400000}, {0x3d402000}, {0x3d404000}, {0x3d406000}, 
+    {0x3d408000}, {0x3d40a000}, {0x3d40c000}, {0x3d40e000}, 
+    {0x3d410000}, {0x3d412000}, {0x3d414000}, {0x3d416000}, 
+    {0x3d418000}, {0x3d41a000}, {0x3d41c000}, {0x3d41e000}, 
+    {0x3d420000}, {0x3d422000}, {0x3d424000}, {0x3d426000}, 
+    {0x3d428000}, {0x3d42a000}, {0x3d42c000}, {0x3d42e000}, 
+    {0x3d430000}, {0x3d432000}, {0x3d434000}, {0x3d436000}, 
+    {0x3d438000}, {0x3d43a000}, {0x3d43c000}, {0x3d43e000}, 
+    {0x3d440000}, {0x3d442000}, {0x3d444000}, {0x3d446000}, 
+    {0x3d448000}, {0x3d44a000}, {0x3d44c000}, {0x3d44e000}, 
+    {0x3d450000}, {0x3d452000}, {0x3d454000}, {0x3d456000}, 
+    {0x3d458000}, {0x3d45a000}, {0x3d45c000}, {0x3d45e000}, 
+    {0x3d460000}, {0x3d462000}, {0x3d464000}, {0x3d466000}, 
+    {0x3d468000}, {0x3d46a000}, {0x3d46c000}, {0x3d46e000}, 
+    {0x3d470000}, {0x3d472000}, {0x3d474000}, {0x3d476000}, 
+    {0x3d478000}, {0x3d47a000}, {0x3d47c000}, {0x3d47e000}, 
+    {0x3d480000}, {0x3d482000}, {0x3d484000}, {0x3d486000}, 
+    {0x3d488000}, {0x3d48a000}, {0x3d48c000}, {0x3d48e000}, 
+    {0x3d490000}, {0x3d492000}, {0x3d494000}, {0x3d496000}, 
+    {0x3d498000}, {0x3d49a000}, {0x3d49c000}, {0x3d49e000}, 
+    {0x3d4a0000}, {0x3d4a2000}, {0x3d4a4000}, {0x3d4a6000}, 
+    {0x3d4a8000}, {0x3d4aa000}, {0x3d4ac000}, {0x3d4ae000}, 
+    {0x3d4b0000}, {0x3d4b2000}, {0x3d4b4000}, {0x3d4b6000}, 
+    {0x3d4b8000}, {0x3d4ba000}, {0x3d4bc000}, {0x3d4be000}, 
+    {0x3d4c0000}, {0x3d4c2000}, {0x3d4c4000}, {0x3d4c6000}, 
+    {0x3d4c8000}, {0x3d4ca000}, {0x3d4cc000}, {0x3d4ce000}, 
+    {0x3d4d0000}, {0x3d4d2000}, {0x3d4d4000}, {0x3d4d6000}, 
+    {0x3d4d8000}, {0x3d4da000}, {0x3d4dc000}, {0x3d4de000}, 
+    {0x3d4e0000}, {0x3d4e2000}, {0x3d4e4000}, {0x3d4e6000}, 
+    {0x3d4e8000}, {0x3d4ea000}, {0x3d4ec000}, {0x3d4ee000}, 
+    {0x3d4f0000}, {0x3d4f2000}, {0x3d4f4000}, {0x3d4f6000}, 
+    {0x3d4f8000}, {0x3d4fa000}, {0x3d4fc000}, {0x3d4fe000}, 
+    {0x3d500000}, {0x3d502000}, {0x3d504000}, {0x3d506000}, 
+    {0x3d508000}, {0x3d50a000}, {0x3d50c000}, {0x3d50e000}, 
+    {0x3d510000}, {0x3d512000}, {0x3d514000}, {0x3d516000}, 
+    {0x3d518000}, {0x3d51a000}, {0x3d51c000}, {0x3d51e000}, 
+    {0x3d520000}, {0x3d522000}, {0x3d524000}, {0x3d526000}, 
+    {0x3d528000}, {0x3d52a000}, {0x3d52c000}, {0x3d52e000}, 
+    {0x3d530000}, {0x3d532000}, {0x3d534000}, {0x3d536000}, 
+    {0x3d538000}, {0x3d53a000}, {0x3d53c000}, {0x3d53e000}, 
+    {0x3d540000}, {0x3d542000}, {0x3d544000}, {0x3d546000}, 
+    {0x3d548000}, {0x3d54a000}, {0x3d54c000}, {0x3d54e000}, 
+    {0x3d550000}, {0x3d552000}, {0x3d554000}, {0x3d556000}, 
+    {0x3d558000}, {0x3d55a000}, {0x3d55c000}, {0x3d55e000}, 
+    {0x3d560000}, {0x3d562000}, {0x3d564000}, {0x3d566000}, 
+    {0x3d568000}, {0x3d56a000}, {0x3d56c000}, {0x3d56e000}, 
+    {0x3d570000}, {0x3d572000}, {0x3d574000}, {0x3d576000}, 
+    {0x3d578000}, {0x3d57a000}, {0x3d57c000}, {0x3d57e000}, 
+    {0x3d580000}, {0x3d582000}, {0x3d584000}, {0x3d586000}, 
+    {0x3d588000}, {0x3d58a000}, {0x3d58c000}, {0x3d58e000}, 
+    {0x3d590000}, {0x3d592000}, {0x3d594000}, {0x3d596000}, 
+    {0x3d598000}, {0x3d59a000}, {0x3d59c000}, {0x3d59e000}, 
+    {0x3d5a0000}, {0x3d5a2000}, {0x3d5a4000}, {0x3d5a6000}, 
+    {0x3d5a8000}, {0x3d5aa000}, {0x3d5ac000}, {0x3d5ae000}, 
+    {0x3d5b0000}, {0x3d5b2000}, {0x3d5b4000}, {0x3d5b6000}, 
+    {0x3d5b8000}, {0x3d5ba000}, {0x3d5bc000}, {0x3d5be000}, 
+    {0x3d5c0000}, {0x3d5c2000}, {0x3d5c4000}, {0x3d5c6000}, 
+    {0x3d5c8000}, {0x3d5ca000}, {0x3d5cc000}, {0x3d5ce000}, 
+    {0x3d5d0000}, {0x3d5d2000}, {0x3d5d4000}, {0x3d5d6000}, 
+    {0x3d5d8000}, {0x3d5da000}, {0x3d5dc000}, {0x3d5de000}, 
+    {0x3d5e0000}, {0x3d5e2000}, {0x3d5e4000}, {0x3d5e6000}, 
+    {0x3d5e8000}, {0x3d5ea000}, {0x3d5ec000}, {0x3d5ee000}, 
+    {0x3d5f0000}, {0x3d5f2000}, {0x3d5f4000}, {0x3d5f6000}, 
+    {0x3d5f8000}, {0x3d5fa000}, {0x3d5fc000}, {0x3d5fe000}, 
+    {0x3d600000}, {0x3d602000}, {0x3d604000}, {0x3d606000}, 
+    {0x3d608000}, {0x3d60a000}, {0x3d60c000}, {0x3d60e000}, 
+    {0x3d610000}, {0x3d612000}, {0x3d614000}, {0x3d616000}, 
+    {0x3d618000}, {0x3d61a000}, {0x3d61c000}, {0x3d61e000}, 
+    {0x3d620000}, {0x3d622000}, {0x3d624000}, {0x3d626000}, 
+    {0x3d628000}, {0x3d62a000}, {0x3d62c000}, {0x3d62e000}, 
+    {0x3d630000}, {0x3d632000}, {0x3d634000}, {0x3d636000}, 
+    {0x3d638000}, {0x3d63a000}, {0x3d63c000}, {0x3d63e000}, 
+    {0x3d640000}, {0x3d642000}, {0x3d644000}, {0x3d646000}, 
+    {0x3d648000}, {0x3d64a000}, {0x3d64c000}, {0x3d64e000}, 
+    {0x3d650000}, {0x3d652000}, {0x3d654000}, {0x3d656000}, 
+    {0x3d658000}, {0x3d65a000}, {0x3d65c000}, {0x3d65e000}, 
+    {0x3d660000}, {0x3d662000}, {0x3d664000}, {0x3d666000}, 
+    {0x3d668000}, {0x3d66a000}, {0x3d66c000}, {0x3d66e000}, 
+    {0x3d670000}, {0x3d672000}, {0x3d674000}, {0x3d676000}, 
+    {0x3d678000}, {0x3d67a000}, {0x3d67c000}, {0x3d67e000}, 
+    {0x3d680000}, {0x3d682000}, {0x3d684000}, {0x3d686000}, 
+    {0x3d688000}, {0x3d68a000}, {0x3d68c000}, {0x3d68e000}, 
+    {0x3d690000}, {0x3d692000}, {0x3d694000}, {0x3d696000}, 
+    {0x3d698000}, {0x3d69a000}, {0x3d69c000}, {0x3d69e000}, 
+    {0x3d6a0000}, {0x3d6a2000}, {0x3d6a4000}, {0x3d6a6000}, 
+    {0x3d6a8000}, {0x3d6aa000}, {0x3d6ac000}, {0x3d6ae000}, 
+    {0x3d6b0000}, {0x3d6b2000}, {0x3d6b4000}, {0x3d6b6000}, 
+    {0x3d6b8000}, {0x3d6ba000}, {0x3d6bc000}, {0x3d6be000}, 
+    {0x3d6c0000}, {0x3d6c2000}, {0x3d6c4000}, {0x3d6c6000}, 
+    {0x3d6c8000}, {0x3d6ca000}, {0x3d6cc000}, {0x3d6ce000}, 
+    {0x3d6d0000}, {0x3d6d2000}, {0x3d6d4000}, {0x3d6d6000}, 
+    {0x3d6d8000}, {0x3d6da000}, {0x3d6dc000}, {0x3d6de000}, 
+    {0x3d6e0000}, {0x3d6e2000}, {0x3d6e4000}, {0x3d6e6000}, 
+    {0x3d6e8000}, {0x3d6ea000}, {0x3d6ec000}, {0x3d6ee000}, 
+    {0x3d6f0000}, {0x3d6f2000}, {0x3d6f4000}, {0x3d6f6000}, 
+    {0x3d6f8000}, {0x3d6fa000}, {0x3d6fc000}, {0x3d6fe000}, 
+    {0x3d700000}, {0x3d702000}, {0x3d704000}, {0x3d706000}, 
+    {0x3d708000}, {0x3d70a000}, {0x3d70c000}, {0x3d70e000}, 
+    {0x3d710000}, {0x3d712000}, {0x3d714000}, {0x3d716000}, 
+    {0x3d718000}, {0x3d71a000}, {0x3d71c000}, {0x3d71e000}, 
+    {0x3d720000}, {0x3d722000}, {0x3d724000}, {0x3d726000}, 
+    {0x3d728000}, {0x3d72a000}, {0x3d72c000}, {0x3d72e000}, 
+    {0x3d730000}, {0x3d732000}, {0x3d734000}, {0x3d736000}, 
+    {0x3d738000}, {0x3d73a000}, {0x3d73c000}, {0x3d73e000}, 
+    {0x3d740000}, {0x3d742000}, {0x3d744000}, {0x3d746000}, 
+    {0x3d748000}, {0x3d74a000}, {0x3d74c000}, {0x3d74e000}, 
+    {0x3d750000}, {0x3d752000}, {0x3d754000}, {0x3d756000}, 
+    {0x3d758000}, {0x3d75a000}, {0x3d75c000}, {0x3d75e000}, 
+    {0x3d760000}, {0x3d762000}, {0x3d764000}, {0x3d766000}, 
+    {0x3d768000}, {0x3d76a000}, {0x3d76c000}, {0x3d76e000}, 
+    {0x3d770000}, {0x3d772000}, {0x3d774000}, {0x3d776000}, 
+    {0x3d778000}, {0x3d77a000}, {0x3d77c000}, {0x3d77e000}, 
+    {0x3d780000}, {0x3d782000}, {0x3d784000}, {0x3d786000}, 
+    {0x3d788000}, {0x3d78a000}, {0x3d78c000}, {0x3d78e000}, 
+    {0x3d790000}, {0x3d792000}, {0x3d794000}, {0x3d796000}, 
+    {0x3d798000}, {0x3d79a000}, {0x3d79c000}, {0x3d79e000}, 
+    {0x3d7a0000}, {0x3d7a2000}, {0x3d7a4000}, {0x3d7a6000}, 
+    {0x3d7a8000}, {0x3d7aa000}, {0x3d7ac000}, {0x3d7ae000}, 
+    {0x3d7b0000}, {0x3d7b2000}, {0x3d7b4000}, {0x3d7b6000}, 
+    {0x3d7b8000}, {0x3d7ba000}, {0x3d7bc000}, {0x3d7be000}, 
+    {0x3d7c0000}, {0x3d7c2000}, {0x3d7c4000}, {0x3d7c6000}, 
+    {0x3d7c8000}, {0x3d7ca000}, {0x3d7cc000}, {0x3d7ce000}, 
+    {0x3d7d0000}, {0x3d7d2000}, {0x3d7d4000}, {0x3d7d6000}, 
+    {0x3d7d8000}, {0x3d7da000}, {0x3d7dc000}, {0x3d7de000}, 
+    {0x3d7e0000}, {0x3d7e2000}, {0x3d7e4000}, {0x3d7e6000}, 
+    {0x3d7e8000}, {0x3d7ea000}, {0x3d7ec000}, {0x3d7ee000}, 
+    {0x3d7f0000}, {0x3d7f2000}, {0x3d7f4000}, {0x3d7f6000}, 
+    {0x3d7f8000}, {0x3d7fa000}, {0x3d7fc000}, {0x3d7fe000}, 
+    {0x3d800000}, {0x3d802000}, {0x3d804000}, {0x3d806000}, 
+    {0x3d808000}, {0x3d80a000}, {0x3d80c000}, {0x3d80e000}, 
+    {0x3d810000}, {0x3d812000}, {0x3d814000}, {0x3d816000}, 
+    {0x3d818000}, {0x3d81a000}, {0x3d81c000}, {0x3d81e000}, 
+    {0x3d820000}, {0x3d822000}, {0x3d824000}, {0x3d826000}, 
+    {0x3d828000}, {0x3d82a000}, {0x3d82c000}, {0x3d82e000}, 
+    {0x3d830000}, {0x3d832000}, {0x3d834000}, {0x3d836000}, 
+    {0x3d838000}, {0x3d83a000}, {0x3d83c000}, {0x3d83e000}, 
+    {0x3d840000}, {0x3d842000}, {0x3d844000}, {0x3d846000}, 
+    {0x3d848000}, {0x3d84a000}, {0x3d84c000}, {0x3d84e000}, 
+    {0x3d850000}, {0x3d852000}, {0x3d854000}, {0x3d856000}, 
+    {0x3d858000}, {0x3d85a000}, {0x3d85c000}, {0x3d85e000}, 
+    {0x3d860000}, {0x3d862000}, {0x3d864000}, {0x3d866000}, 
+    {0x3d868000}, {0x3d86a000}, {0x3d86c000}, {0x3d86e000}, 
+    {0x3d870000}, {0x3d872000}, {0x3d874000}, {0x3d876000}, 
+    {0x3d878000}, {0x3d87a000}, {0x3d87c000}, {0x3d87e000}, 
+    {0x3d880000}, {0x3d882000}, {0x3d884000}, {0x3d886000}, 
+    {0x3d888000}, {0x3d88a000}, {0x3d88c000}, {0x3d88e000}, 
+    {0x3d890000}, {0x3d892000}, {0x3d894000}, {0x3d896000}, 
+    {0x3d898000}, {0x3d89a000}, {0x3d89c000}, {0x3d89e000}, 
+    {0x3d8a0000}, {0x3d8a2000}, {0x3d8a4000}, {0x3d8a6000}, 
+    {0x3d8a8000}, {0x3d8aa000}, {0x3d8ac000}, {0x3d8ae000}, 
+    {0x3d8b0000}, {0x3d8b2000}, {0x3d8b4000}, {0x3d8b6000}, 
+    {0x3d8b8000}, {0x3d8ba000}, {0x3d8bc000}, {0x3d8be000}, 
+    {0x3d8c0000}, {0x3d8c2000}, {0x3d8c4000}, {0x3d8c6000}, 
+    {0x3d8c8000}, {0x3d8ca000}, {0x3d8cc000}, {0x3d8ce000}, 
+    {0x3d8d0000}, {0x3d8d2000}, {0x3d8d4000}, {0x3d8d6000}, 
+    {0x3d8d8000}, {0x3d8da000}, {0x3d8dc000}, {0x3d8de000}, 
+    {0x3d8e0000}, {0x3d8e2000}, {0x3d8e4000}, {0x3d8e6000}, 
+    {0x3d8e8000}, {0x3d8ea000}, {0x3d8ec000}, {0x3d8ee000}, 
+    {0x3d8f0000}, {0x3d8f2000}, {0x3d8f4000}, {0x3d8f6000}, 
+    {0x3d8f8000}, {0x3d8fa000}, {0x3d8fc000}, {0x3d8fe000}, 
+    {0x3d900000}, {0x3d902000}, {0x3d904000}, {0x3d906000}, 
+    {0x3d908000}, {0x3d90a000}, {0x3d90c000}, {0x3d90e000}, 
+    {0x3d910000}, {0x3d912000}, {0x3d914000}, {0x3d916000}, 
+    {0x3d918000}, {0x3d91a000}, {0x3d91c000}, {0x3d91e000}, 
+    {0x3d920000}, {0x3d922000}, {0x3d924000}, {0x3d926000}, 
+    {0x3d928000}, {0x3d92a000}, {0x3d92c000}, {0x3d92e000}, 
+    {0x3d930000}, {0x3d932000}, {0x3d934000}, {0x3d936000}, 
+    {0x3d938000}, {0x3d93a000}, {0x3d93c000}, {0x3d93e000}, 
+    {0x3d940000}, {0x3d942000}, {0x3d944000}, {0x3d946000}, 
+    {0x3d948000}, {0x3d94a000}, {0x3d94c000}, {0x3d94e000}, 
+    {0x3d950000}, {0x3d952000}, {0x3d954000}, {0x3d956000}, 
+    {0x3d958000}, {0x3d95a000}, {0x3d95c000}, {0x3d95e000}, 
+    {0x3d960000}, {0x3d962000}, {0x3d964000}, {0x3d966000}, 
+    {0x3d968000}, {0x3d96a000}, {0x3d96c000}, {0x3d96e000}, 
+    {0x3d970000}, {0x3d972000}, {0x3d974000}, {0x3d976000}, 
+    {0x3d978000}, {0x3d97a000}, {0x3d97c000}, {0x3d97e000}, 
+    {0x3d980000}, {0x3d982000}, {0x3d984000}, {0x3d986000}, 
+    {0x3d988000}, {0x3d98a000}, {0x3d98c000}, {0x3d98e000}, 
+    {0x3d990000}, {0x3d992000}, {0x3d994000}, {0x3d996000}, 
+    {0x3d998000}, {0x3d99a000}, {0x3d99c000}, {0x3d99e000}, 
+    {0x3d9a0000}, {0x3d9a2000}, {0x3d9a4000}, {0x3d9a6000}, 
+    {0x3d9a8000}, {0x3d9aa000}, {0x3d9ac000}, {0x3d9ae000}, 
+    {0x3d9b0000}, {0x3d9b2000}, {0x3d9b4000}, {0x3d9b6000}, 
+    {0x3d9b8000}, {0x3d9ba000}, {0x3d9bc000}, {0x3d9be000}, 
+    {0x3d9c0000}, {0x3d9c2000}, {0x3d9c4000}, {0x3d9c6000}, 
+    {0x3d9c8000}, {0x3d9ca000}, {0x3d9cc000}, {0x3d9ce000}, 
+    {0x3d9d0000}, {0x3d9d2000}, {0x3d9d4000}, {0x3d9d6000}, 
+    {0x3d9d8000}, {0x3d9da000}, {0x3d9dc000}, {0x3d9de000}, 
+    {0x3d9e0000}, {0x3d9e2000}, {0x3d9e4000}, {0x3d9e6000}, 
+    {0x3d9e8000}, {0x3d9ea000}, {0x3d9ec000}, {0x3d9ee000}, 
+    {0x3d9f0000}, {0x3d9f2000}, {0x3d9f4000}, {0x3d9f6000}, 
+    {0x3d9f8000}, {0x3d9fa000}, {0x3d9fc000}, {0x3d9fe000}, 
+    {0x3da00000}, {0x3da02000}, {0x3da04000}, {0x3da06000}, 
+    {0x3da08000}, {0x3da0a000}, {0x3da0c000}, {0x3da0e000}, 
+    {0x3da10000}, {0x3da12000}, {0x3da14000}, {0x3da16000}, 
+    {0x3da18000}, {0x3da1a000}, {0x3da1c000}, {0x3da1e000}, 
+    {0x3da20000}, {0x3da22000}, {0x3da24000}, {0x3da26000}, 
+    {0x3da28000}, {0x3da2a000}, {0x3da2c000}, {0x3da2e000}, 
+    {0x3da30000}, {0x3da32000}, {0x3da34000}, {0x3da36000}, 
+    {0x3da38000}, {0x3da3a000}, {0x3da3c000}, {0x3da3e000}, 
+    {0x3da40000}, {0x3da42000}, {0x3da44000}, {0x3da46000}, 
+    {0x3da48000}, {0x3da4a000}, {0x3da4c000}, {0x3da4e000}, 
+    {0x3da50000}, {0x3da52000}, {0x3da54000}, {0x3da56000}, 
+    {0x3da58000}, {0x3da5a000}, {0x3da5c000}, {0x3da5e000}, 
+    {0x3da60000}, {0x3da62000}, {0x3da64000}, {0x3da66000}, 
+    {0x3da68000}, {0x3da6a000}, {0x3da6c000}, {0x3da6e000}, 
+    {0x3da70000}, {0x3da72000}, {0x3da74000}, {0x3da76000}, 
+    {0x3da78000}, {0x3da7a000}, {0x3da7c000}, {0x3da7e000}, 
+    {0x3da80000}, {0x3da82000}, {0x3da84000}, {0x3da86000}, 
+    {0x3da88000}, {0x3da8a000}, {0x3da8c000}, {0x3da8e000}, 
+    {0x3da90000}, {0x3da92000}, {0x3da94000}, {0x3da96000}, 
+    {0x3da98000}, {0x3da9a000}, {0x3da9c000}, {0x3da9e000}, 
+    {0x3daa0000}, {0x3daa2000}, {0x3daa4000}, {0x3daa6000}, 
+    {0x3daa8000}, {0x3daaa000}, {0x3daac000}, {0x3daae000}, 
+    {0x3dab0000}, {0x3dab2000}, {0x3dab4000}, {0x3dab6000}, 
+    {0x3dab8000}, {0x3daba000}, {0x3dabc000}, {0x3dabe000}, 
+    {0x3dac0000}, {0x3dac2000}, {0x3dac4000}, {0x3dac6000}, 
+    {0x3dac8000}, {0x3daca000}, {0x3dacc000}, {0x3dace000}, 
+    {0x3dad0000}, {0x3dad2000}, {0x3dad4000}, {0x3dad6000}, 
+    {0x3dad8000}, {0x3dada000}, {0x3dadc000}, {0x3dade000}, 
+    {0x3dae0000}, {0x3dae2000}, {0x3dae4000}, {0x3dae6000}, 
+    {0x3dae8000}, {0x3daea000}, {0x3daec000}, {0x3daee000}, 
+    {0x3daf0000}, {0x3daf2000}, {0x3daf4000}, {0x3daf6000}, 
+    {0x3daf8000}, {0x3dafa000}, {0x3dafc000}, {0x3dafe000}, 
+    {0x3db00000}, {0x3db02000}, {0x3db04000}, {0x3db06000}, 
+    {0x3db08000}, {0x3db0a000}, {0x3db0c000}, {0x3db0e000}, 
+    {0x3db10000}, {0x3db12000}, {0x3db14000}, {0x3db16000}, 
+    {0x3db18000}, {0x3db1a000}, {0x3db1c000}, {0x3db1e000}, 
+    {0x3db20000}, {0x3db22000}, {0x3db24000}, {0x3db26000}, 
+    {0x3db28000}, {0x3db2a000}, {0x3db2c000}, {0x3db2e000}, 
+    {0x3db30000}, {0x3db32000}, {0x3db34000}, {0x3db36000}, 
+    {0x3db38000}, {0x3db3a000}, {0x3db3c000}, {0x3db3e000}, 
+    {0x3db40000}, {0x3db42000}, {0x3db44000}, {0x3db46000}, 
+    {0x3db48000}, {0x3db4a000}, {0x3db4c000}, {0x3db4e000}, 
+    {0x3db50000}, {0x3db52000}, {0x3db54000}, {0x3db56000}, 
+    {0x3db58000}, {0x3db5a000}, {0x3db5c000}, {0x3db5e000}, 
+    {0x3db60000}, {0x3db62000}, {0x3db64000}, {0x3db66000}, 
+    {0x3db68000}, {0x3db6a000}, {0x3db6c000}, {0x3db6e000}, 
+    {0x3db70000}, {0x3db72000}, {0x3db74000}, {0x3db76000}, 
+    {0x3db78000}, {0x3db7a000}, {0x3db7c000}, {0x3db7e000}, 
+    {0x3db80000}, {0x3db82000}, {0x3db84000}, {0x3db86000}, 
+    {0x3db88000}, {0x3db8a000}, {0x3db8c000}, {0x3db8e000}, 
+    {0x3db90000}, {0x3db92000}, {0x3db94000}, {0x3db96000}, 
+    {0x3db98000}, {0x3db9a000}, {0x3db9c000}, {0x3db9e000}, 
+    {0x3dba0000}, {0x3dba2000}, {0x3dba4000}, {0x3dba6000}, 
+    {0x3dba8000}, {0x3dbaa000}, {0x3dbac000}, {0x3dbae000}, 
+    {0x3dbb0000}, {0x3dbb2000}, {0x3dbb4000}, {0x3dbb6000}, 
+    {0x3dbb8000}, {0x3dbba000}, {0x3dbbc000}, {0x3dbbe000}, 
+    {0x3dbc0000}, {0x3dbc2000}, {0x3dbc4000}, {0x3dbc6000}, 
+    {0x3dbc8000}, {0x3dbca000}, {0x3dbcc000}, {0x3dbce000}, 
+    {0x3dbd0000}, {0x3dbd2000}, {0x3dbd4000}, {0x3dbd6000}, 
+    {0x3dbd8000}, {0x3dbda000}, {0x3dbdc000}, {0x3dbde000}, 
+    {0x3dbe0000}, {0x3dbe2000}, {0x3dbe4000}, {0x3dbe6000}, 
+    {0x3dbe8000}, {0x3dbea000}, {0x3dbec000}, {0x3dbee000}, 
+    {0x3dbf0000}, {0x3dbf2000}, {0x3dbf4000}, {0x3dbf6000}, 
+    {0x3dbf8000}, {0x3dbfa000}, {0x3dbfc000}, {0x3dbfe000}, 
+    {0x3dc00000}, {0x3dc02000}, {0x3dc04000}, {0x3dc06000}, 
+    {0x3dc08000}, {0x3dc0a000}, {0x3dc0c000}, {0x3dc0e000}, 
+    {0x3dc10000}, {0x3dc12000}, {0x3dc14000}, {0x3dc16000}, 
+    {0x3dc18000}, {0x3dc1a000}, {0x3dc1c000}, {0x3dc1e000}, 
+    {0x3dc20000}, {0x3dc22000}, {0x3dc24000}, {0x3dc26000}, 
+    {0x3dc28000}, {0x3dc2a000}, {0x3dc2c000}, {0x3dc2e000}, 
+    {0x3dc30000}, {0x3dc32000}, {0x3dc34000}, {0x3dc36000}, 
+    {0x3dc38000}, {0x3dc3a000}, {0x3dc3c000}, {0x3dc3e000}, 
+    {0x3dc40000}, {0x3dc42000}, {0x3dc44000}, {0x3dc46000}, 
+    {0x3dc48000}, {0x3dc4a000}, {0x3dc4c000}, {0x3dc4e000}, 
+    {0x3dc50000}, {0x3dc52000}, {0x3dc54000}, {0x3dc56000}, 
+    {0x3dc58000}, {0x3dc5a000}, {0x3dc5c000}, {0x3dc5e000}, 
+    {0x3dc60000}, {0x3dc62000}, {0x3dc64000}, {0x3dc66000}, 
+    {0x3dc68000}, {0x3dc6a000}, {0x3dc6c000}, {0x3dc6e000}, 
+    {0x3dc70000}, {0x3dc72000}, {0x3dc74000}, {0x3dc76000}, 
+    {0x3dc78000}, {0x3dc7a000}, {0x3dc7c000}, {0x3dc7e000}, 
+    {0x3dc80000}, {0x3dc82000}, {0x3dc84000}, {0x3dc86000}, 
+    {0x3dc88000}, {0x3dc8a000}, {0x3dc8c000}, {0x3dc8e000}, 
+    {0x3dc90000}, {0x3dc92000}, {0x3dc94000}, {0x3dc96000}, 
+    {0x3dc98000}, {0x3dc9a000}, {0x3dc9c000}, {0x3dc9e000}, 
+    {0x3dca0000}, {0x3dca2000}, {0x3dca4000}, {0x3dca6000}, 
+    {0x3dca8000}, {0x3dcaa000}, {0x3dcac000}, {0x3dcae000}, 
+    {0x3dcb0000}, {0x3dcb2000}, {0x3dcb4000}, {0x3dcb6000}, 
+    {0x3dcb8000}, {0x3dcba000}, {0x3dcbc000}, {0x3dcbe000}, 
+    {0x3dcc0000}, {0x3dcc2000}, {0x3dcc4000}, {0x3dcc6000}, 
+    {0x3dcc8000}, {0x3dcca000}, {0x3dccc000}, {0x3dcce000}, 
+    {0x3dcd0000}, {0x3dcd2000}, {0x3dcd4000}, {0x3dcd6000}, 
+    {0x3dcd8000}, {0x3dcda000}, {0x3dcdc000}, {0x3dcde000}, 
+    {0x3dce0000}, {0x3dce2000}, {0x3dce4000}, {0x3dce6000}, 
+    {0x3dce8000}, {0x3dcea000}, {0x3dcec000}, {0x3dcee000}, 
+    {0x3dcf0000}, {0x3dcf2000}, {0x3dcf4000}, {0x3dcf6000}, 
+    {0x3dcf8000}, {0x3dcfa000}, {0x3dcfc000}, {0x3dcfe000}, 
+    {0x3dd00000}, {0x3dd02000}, {0x3dd04000}, {0x3dd06000}, 
+    {0x3dd08000}, {0x3dd0a000}, {0x3dd0c000}, {0x3dd0e000}, 
+    {0x3dd10000}, {0x3dd12000}, {0x3dd14000}, {0x3dd16000}, 
+    {0x3dd18000}, {0x3dd1a000}, {0x3dd1c000}, {0x3dd1e000}, 
+    {0x3dd20000}, {0x3dd22000}, {0x3dd24000}, {0x3dd26000}, 
+    {0x3dd28000}, {0x3dd2a000}, {0x3dd2c000}, {0x3dd2e000}, 
+    {0x3dd30000}, {0x3dd32000}, {0x3dd34000}, {0x3dd36000}, 
+    {0x3dd38000}, {0x3dd3a000}, {0x3dd3c000}, {0x3dd3e000}, 
+    {0x3dd40000}, {0x3dd42000}, {0x3dd44000}, {0x3dd46000}, 
+    {0x3dd48000}, {0x3dd4a000}, {0x3dd4c000}, {0x3dd4e000}, 
+    {0x3dd50000}, {0x3dd52000}, {0x3dd54000}, {0x3dd56000}, 
+    {0x3dd58000}, {0x3dd5a000}, {0x3dd5c000}, {0x3dd5e000}, 
+    {0x3dd60000}, {0x3dd62000}, {0x3dd64000}, {0x3dd66000}, 
+    {0x3dd68000}, {0x3dd6a000}, {0x3dd6c000}, {0x3dd6e000}, 
+    {0x3dd70000}, {0x3dd72000}, {0x3dd74000}, {0x3dd76000}, 
+    {0x3dd78000}, {0x3dd7a000}, {0x3dd7c000}, {0x3dd7e000}, 
+    {0x3dd80000}, {0x3dd82000}, {0x3dd84000}, {0x3dd86000}, 
+    {0x3dd88000}, {0x3dd8a000}, {0x3dd8c000}, {0x3dd8e000}, 
+    {0x3dd90000}, {0x3dd92000}, {0x3dd94000}, {0x3dd96000}, 
+    {0x3dd98000}, {0x3dd9a000}, {0x3dd9c000}, {0x3dd9e000}, 
+    {0x3dda0000}, {0x3dda2000}, {0x3dda4000}, {0x3dda6000}, 
+    {0x3dda8000}, {0x3ddaa000}, {0x3ddac000}, {0x3ddae000}, 
+    {0x3ddb0000}, {0x3ddb2000}, {0x3ddb4000}, {0x3ddb6000}, 
+    {0x3ddb8000}, {0x3ddba000}, {0x3ddbc000}, {0x3ddbe000}, 
+    {0x3ddc0000}, {0x3ddc2000}, {0x3ddc4000}, {0x3ddc6000}, 
+    {0x3ddc8000}, {0x3ddca000}, {0x3ddcc000}, {0x3ddce000}, 
+    {0x3ddd0000}, {0x3ddd2000}, {0x3ddd4000}, {0x3ddd6000}, 
+    {0x3ddd8000}, {0x3ddda000}, {0x3dddc000}, {0x3ddde000}, 
+    {0x3dde0000}, {0x3dde2000}, {0x3dde4000}, {0x3dde6000}, 
+    {0x3dde8000}, {0x3ddea000}, {0x3ddec000}, {0x3ddee000}, 
+    {0x3ddf0000}, {0x3ddf2000}, {0x3ddf4000}, {0x3ddf6000}, 
+    {0x3ddf8000}, {0x3ddfa000}, {0x3ddfc000}, {0x3ddfe000}, 
+    {0x3de00000}, {0x3de02000}, {0x3de04000}, {0x3de06000}, 
+    {0x3de08000}, {0x3de0a000}, {0x3de0c000}, {0x3de0e000}, 
+    {0x3de10000}, {0x3de12000}, {0x3de14000}, {0x3de16000}, 
+    {0x3de18000}, {0x3de1a000}, {0x3de1c000}, {0x3de1e000}, 
+    {0x3de20000}, {0x3de22000}, {0x3de24000}, {0x3de26000}, 
+    {0x3de28000}, {0x3de2a000}, {0x3de2c000}, {0x3de2e000}, 
+    {0x3de30000}, {0x3de32000}, {0x3de34000}, {0x3de36000}, 
+    {0x3de38000}, {0x3de3a000}, {0x3de3c000}, {0x3de3e000}, 
+    {0x3de40000}, {0x3de42000}, {0x3de44000}, {0x3de46000}, 
+    {0x3de48000}, {0x3de4a000}, {0x3de4c000}, {0x3de4e000}, 
+    {0x3de50000}, {0x3de52000}, {0x3de54000}, {0x3de56000}, 
+    {0x3de58000}, {0x3de5a000}, {0x3de5c000}, {0x3de5e000}, 
+    {0x3de60000}, {0x3de62000}, {0x3de64000}, {0x3de66000}, 
+    {0x3de68000}, {0x3de6a000}, {0x3de6c000}, {0x3de6e000}, 
+    {0x3de70000}, {0x3de72000}, {0x3de74000}, {0x3de76000}, 
+    {0x3de78000}, {0x3de7a000}, {0x3de7c000}, {0x3de7e000}, 
+    {0x3de80000}, {0x3de82000}, {0x3de84000}, {0x3de86000}, 
+    {0x3de88000}, {0x3de8a000}, {0x3de8c000}, {0x3de8e000}, 
+    {0x3de90000}, {0x3de92000}, {0x3de94000}, {0x3de96000}, 
+    {0x3de98000}, {0x3de9a000}, {0x3de9c000}, {0x3de9e000}, 
+    {0x3dea0000}, {0x3dea2000}, {0x3dea4000}, {0x3dea6000}, 
+    {0x3dea8000}, {0x3deaa000}, {0x3deac000}, {0x3deae000}, 
+    {0x3deb0000}, {0x3deb2000}, {0x3deb4000}, {0x3deb6000}, 
+    {0x3deb8000}, {0x3deba000}, {0x3debc000}, {0x3debe000}, 
+    {0x3dec0000}, {0x3dec2000}, {0x3dec4000}, {0x3dec6000}, 
+    {0x3dec8000}, {0x3deca000}, {0x3decc000}, {0x3dece000}, 
+    {0x3ded0000}, {0x3ded2000}, {0x3ded4000}, {0x3ded6000}, 
+    {0x3ded8000}, {0x3deda000}, {0x3dedc000}, {0x3dede000}, 
+    {0x3dee0000}, {0x3dee2000}, {0x3dee4000}, {0x3dee6000}, 
+    {0x3dee8000}, {0x3deea000}, {0x3deec000}, {0x3deee000}, 
+    {0x3def0000}, {0x3def2000}, {0x3def4000}, {0x3def6000}, 
+    {0x3def8000}, {0x3defa000}, {0x3defc000}, {0x3defe000}, 
+    {0x3df00000}, {0x3df02000}, {0x3df04000}, {0x3df06000}, 
+    {0x3df08000}, {0x3df0a000}, {0x3df0c000}, {0x3df0e000}, 
+    {0x3df10000}, {0x3df12000}, {0x3df14000}, {0x3df16000}, 
+    {0x3df18000}, {0x3df1a000}, {0x3df1c000}, {0x3df1e000}, 
+    {0x3df20000}, {0x3df22000}, {0x3df24000}, {0x3df26000}, 
+    {0x3df28000}, {0x3df2a000}, {0x3df2c000}, {0x3df2e000}, 
+    {0x3df30000}, {0x3df32000}, {0x3df34000}, {0x3df36000}, 
+    {0x3df38000}, {0x3df3a000}, {0x3df3c000}, {0x3df3e000}, 
+    {0x3df40000}, {0x3df42000}, {0x3df44000}, {0x3df46000}, 
+    {0x3df48000}, {0x3df4a000}, {0x3df4c000}, {0x3df4e000}, 
+    {0x3df50000}, {0x3df52000}, {0x3df54000}, {0x3df56000}, 
+    {0x3df58000}, {0x3df5a000}, {0x3df5c000}, {0x3df5e000}, 
+    {0x3df60000}, {0x3df62000}, {0x3df64000}, {0x3df66000}, 
+    {0x3df68000}, {0x3df6a000}, {0x3df6c000}, {0x3df6e000}, 
+    {0x3df70000}, {0x3df72000}, {0x3df74000}, {0x3df76000}, 
+    {0x3df78000}, {0x3df7a000}, {0x3df7c000}, {0x3df7e000}, 
+    {0x3df80000}, {0x3df82000}, {0x3df84000}, {0x3df86000}, 
+    {0x3df88000}, {0x3df8a000}, {0x3df8c000}, {0x3df8e000}, 
+    {0x3df90000}, {0x3df92000}, {0x3df94000}, {0x3df96000}, 
+    {0x3df98000}, {0x3df9a000}, {0x3df9c000}, {0x3df9e000}, 
+    {0x3dfa0000}, {0x3dfa2000}, {0x3dfa4000}, {0x3dfa6000}, 
+    {0x3dfa8000}, {0x3dfaa000}, {0x3dfac000}, {0x3dfae000}, 
+    {0x3dfb0000}, {0x3dfb2000}, {0x3dfb4000}, {0x3dfb6000}, 
+    {0x3dfb8000}, {0x3dfba000}, {0x3dfbc000}, {0x3dfbe000}, 
+    {0x3dfc0000}, {0x3dfc2000}, {0x3dfc4000}, {0x3dfc6000}, 
+    {0x3dfc8000}, {0x3dfca000}, {0x3dfcc000}, {0x3dfce000}, 
+    {0x3dfd0000}, {0x3dfd2000}, {0x3dfd4000}, {0x3dfd6000}, 
+    {0x3dfd8000}, {0x3dfda000}, {0x3dfdc000}, {0x3dfde000}, 
+    {0x3dfe0000}, {0x3dfe2000}, {0x3dfe4000}, {0x3dfe6000}, 
+    {0x3dfe8000}, {0x3dfea000}, {0x3dfec000}, {0x3dfee000}, 
+    {0x3dff0000}, {0x3dff2000}, {0x3dff4000}, {0x3dff6000}, 
+    {0x3dff8000}, {0x3dffa000}, {0x3dffc000}, {0x3dffe000}, 
+    {0x3e000000}, {0x3e002000}, {0x3e004000}, {0x3e006000}, 
+    {0x3e008000}, {0x3e00a000}, {0x3e00c000}, {0x3e00e000}, 
+    {0x3e010000}, {0x3e012000}, {0x3e014000}, {0x3e016000}, 
+    {0x3e018000}, {0x3e01a000}, {0x3e01c000}, {0x3e01e000}, 
+    {0x3e020000}, {0x3e022000}, {0x3e024000}, {0x3e026000}, 
+    {0x3e028000}, {0x3e02a000}, {0x3e02c000}, {0x3e02e000}, 
+    {0x3e030000}, {0x3e032000}, {0x3e034000}, {0x3e036000}, 
+    {0x3e038000}, {0x3e03a000}, {0x3e03c000}, {0x3e03e000}, 
+    {0x3e040000}, {0x3e042000}, {0x3e044000}, {0x3e046000}, 
+    {0x3e048000}, {0x3e04a000}, {0x3e04c000}, {0x3e04e000}, 
+    {0x3e050000}, {0x3e052000}, {0x3e054000}, {0x3e056000}, 
+    {0x3e058000}, {0x3e05a000}, {0x3e05c000}, {0x3e05e000}, 
+    {0x3e060000}, {0x3e062000}, {0x3e064000}, {0x3e066000}, 
+    {0x3e068000}, {0x3e06a000}, {0x3e06c000}, {0x3e06e000}, 
+    {0x3e070000}, {0x3e072000}, {0x3e074000}, {0x3e076000}, 
+    {0x3e078000}, {0x3e07a000}, {0x3e07c000}, {0x3e07e000}, 
+    {0x3e080000}, {0x3e082000}, {0x3e084000}, {0x3e086000}, 
+    {0x3e088000}, {0x3e08a000}, {0x3e08c000}, {0x3e08e000}, 
+    {0x3e090000}, {0x3e092000}, {0x3e094000}, {0x3e096000}, 
+    {0x3e098000}, {0x3e09a000}, {0x3e09c000}, {0x3e09e000}, 
+    {0x3e0a0000}, {0x3e0a2000}, {0x3e0a4000}, {0x3e0a6000}, 
+    {0x3e0a8000}, {0x3e0aa000}, {0x3e0ac000}, {0x3e0ae000}, 
+    {0x3e0b0000}, {0x3e0b2000}, {0x3e0b4000}, {0x3e0b6000}, 
+    {0x3e0b8000}, {0x3e0ba000}, {0x3e0bc000}, {0x3e0be000}, 
+    {0x3e0c0000}, {0x3e0c2000}, {0x3e0c4000}, {0x3e0c6000}, 
+    {0x3e0c8000}, {0x3e0ca000}, {0x3e0cc000}, {0x3e0ce000}, 
+    {0x3e0d0000}, {0x3e0d2000}, {0x3e0d4000}, {0x3e0d6000}, 
+    {0x3e0d8000}, {0x3e0da000}, {0x3e0dc000}, {0x3e0de000}, 
+    {0x3e0e0000}, {0x3e0e2000}, {0x3e0e4000}, {0x3e0e6000}, 
+    {0x3e0e8000}, {0x3e0ea000}, {0x3e0ec000}, {0x3e0ee000}, 
+    {0x3e0f0000}, {0x3e0f2000}, {0x3e0f4000}, {0x3e0f6000}, 
+    {0x3e0f8000}, {0x3e0fa000}, {0x3e0fc000}, {0x3e0fe000}, 
+    {0x3e100000}, {0x3e102000}, {0x3e104000}, {0x3e106000}, 
+    {0x3e108000}, {0x3e10a000}, {0x3e10c000}, {0x3e10e000}, 
+    {0x3e110000}, {0x3e112000}, {0x3e114000}, {0x3e116000}, 
+    {0x3e118000}, {0x3e11a000}, {0x3e11c000}, {0x3e11e000}, 
+    {0x3e120000}, {0x3e122000}, {0x3e124000}, {0x3e126000}, 
+    {0x3e128000}, {0x3e12a000}, {0x3e12c000}, {0x3e12e000}, 
+    {0x3e130000}, {0x3e132000}, {0x3e134000}, {0x3e136000}, 
+    {0x3e138000}, {0x3e13a000}, {0x3e13c000}, {0x3e13e000}, 
+    {0x3e140000}, {0x3e142000}, {0x3e144000}, {0x3e146000}, 
+    {0x3e148000}, {0x3e14a000}, {0x3e14c000}, {0x3e14e000}, 
+    {0x3e150000}, {0x3e152000}, {0x3e154000}, {0x3e156000}, 
+    {0x3e158000}, {0x3e15a000}, {0x3e15c000}, {0x3e15e000}, 
+    {0x3e160000}, {0x3e162000}, {0x3e164000}, {0x3e166000}, 
+    {0x3e168000}, {0x3e16a000}, {0x3e16c000}, {0x3e16e000}, 
+    {0x3e170000}, {0x3e172000}, {0x3e174000}, {0x3e176000}, 
+    {0x3e178000}, {0x3e17a000}, {0x3e17c000}, {0x3e17e000}, 
+    {0x3e180000}, {0x3e182000}, {0x3e184000}, {0x3e186000}, 
+    {0x3e188000}, {0x3e18a000}, {0x3e18c000}, {0x3e18e000}, 
+    {0x3e190000}, {0x3e192000}, {0x3e194000}, {0x3e196000}, 
+    {0x3e198000}, {0x3e19a000}, {0x3e19c000}, {0x3e19e000}, 
+    {0x3e1a0000}, {0x3e1a2000}, {0x3e1a4000}, {0x3e1a6000}, 
+    {0x3e1a8000}, {0x3e1aa000}, {0x3e1ac000}, {0x3e1ae000}, 
+    {0x3e1b0000}, {0x3e1b2000}, {0x3e1b4000}, {0x3e1b6000}, 
+    {0x3e1b8000}, {0x3e1ba000}, {0x3e1bc000}, {0x3e1be000}, 
+    {0x3e1c0000}, {0x3e1c2000}, {0x3e1c4000}, {0x3e1c6000}, 
+    {0x3e1c8000}, {0x3e1ca000}, {0x3e1cc000}, {0x3e1ce000}, 
+    {0x3e1d0000}, {0x3e1d2000}, {0x3e1d4000}, {0x3e1d6000}, 
+    {0x3e1d8000}, {0x3e1da000}, {0x3e1dc000}, {0x3e1de000}, 
+    {0x3e1e0000}, {0x3e1e2000}, {0x3e1e4000}, {0x3e1e6000}, 
+    {0x3e1e8000}, {0x3e1ea000}, {0x3e1ec000}, {0x3e1ee000}, 
+    {0x3e1f0000}, {0x3e1f2000}, {0x3e1f4000}, {0x3e1f6000}, 
+    {0x3e1f8000}, {0x3e1fa000}, {0x3e1fc000}, {0x3e1fe000}, 
+    {0x3e200000}, {0x3e202000}, {0x3e204000}, {0x3e206000}, 
+    {0x3e208000}, {0x3e20a000}, {0x3e20c000}, {0x3e20e000}, 
+    {0x3e210000}, {0x3e212000}, {0x3e214000}, {0x3e216000}, 
+    {0x3e218000}, {0x3e21a000}, {0x3e21c000}, {0x3e21e000}, 
+    {0x3e220000}, {0x3e222000}, {0x3e224000}, {0x3e226000}, 
+    {0x3e228000}, {0x3e22a000}, {0x3e22c000}, {0x3e22e000}, 
+    {0x3e230000}, {0x3e232000}, {0x3e234000}, {0x3e236000}, 
+    {0x3e238000}, {0x3e23a000}, {0x3e23c000}, {0x3e23e000}, 
+    {0x3e240000}, {0x3e242000}, {0x3e244000}, {0x3e246000}, 
+    {0x3e248000}, {0x3e24a000}, {0x3e24c000}, {0x3e24e000}, 
+    {0x3e250000}, {0x3e252000}, {0x3e254000}, {0x3e256000}, 
+    {0x3e258000}, {0x3e25a000}, {0x3e25c000}, {0x3e25e000}, 
+    {0x3e260000}, {0x3e262000}, {0x3e264000}, {0x3e266000}, 
+    {0x3e268000}, {0x3e26a000}, {0x3e26c000}, {0x3e26e000}, 
+    {0x3e270000}, {0x3e272000}, {0x3e274000}, {0x3e276000}, 
+    {0x3e278000}, {0x3e27a000}, {0x3e27c000}, {0x3e27e000}, 
+    {0x3e280000}, {0x3e282000}, {0x3e284000}, {0x3e286000}, 
+    {0x3e288000}, {0x3e28a000}, {0x3e28c000}, {0x3e28e000}, 
+    {0x3e290000}, {0x3e292000}, {0x3e294000}, {0x3e296000}, 
+    {0x3e298000}, {0x3e29a000}, {0x3e29c000}, {0x3e29e000}, 
+    {0x3e2a0000}, {0x3e2a2000}, {0x3e2a4000}, {0x3e2a6000}, 
+    {0x3e2a8000}, {0x3e2aa000}, {0x3e2ac000}, {0x3e2ae000}, 
+    {0x3e2b0000}, {0x3e2b2000}, {0x3e2b4000}, {0x3e2b6000}, 
+    {0x3e2b8000}, {0x3e2ba000}, {0x3e2bc000}, {0x3e2be000}, 
+    {0x3e2c0000}, {0x3e2c2000}, {0x3e2c4000}, {0x3e2c6000}, 
+    {0x3e2c8000}, {0x3e2ca000}, {0x3e2cc000}, {0x3e2ce000}, 
+    {0x3e2d0000}, {0x3e2d2000}, {0x3e2d4000}, {0x3e2d6000}, 
+    {0x3e2d8000}, {0x3e2da000}, {0x3e2dc000}, {0x3e2de000}, 
+    {0x3e2e0000}, {0x3e2e2000}, {0x3e2e4000}, {0x3e2e6000}, 
+    {0x3e2e8000}, {0x3e2ea000}, {0x3e2ec000}, {0x3e2ee000}, 
+    {0x3e2f0000}, {0x3e2f2000}, {0x3e2f4000}, {0x3e2f6000}, 
+    {0x3e2f8000}, {0x3e2fa000}, {0x3e2fc000}, {0x3e2fe000}, 
+    {0x3e300000}, {0x3e302000}, {0x3e304000}, {0x3e306000}, 
+    {0x3e308000}, {0x3e30a000}, {0x3e30c000}, {0x3e30e000}, 
+    {0x3e310000}, {0x3e312000}, {0x3e314000}, {0x3e316000}, 
+    {0x3e318000}, {0x3e31a000}, {0x3e31c000}, {0x3e31e000}, 
+    {0x3e320000}, {0x3e322000}, {0x3e324000}, {0x3e326000}, 
+    {0x3e328000}, {0x3e32a000}, {0x3e32c000}, {0x3e32e000}, 
+    {0x3e330000}, {0x3e332000}, {0x3e334000}, {0x3e336000}, 
+    {0x3e338000}, {0x3e33a000}, {0x3e33c000}, {0x3e33e000}, 
+    {0x3e340000}, {0x3e342000}, {0x3e344000}, {0x3e346000}, 
+    {0x3e348000}, {0x3e34a000}, {0x3e34c000}, {0x3e34e000}, 
+    {0x3e350000}, {0x3e352000}, {0x3e354000}, {0x3e356000}, 
+    {0x3e358000}, {0x3e35a000}, {0x3e35c000}, {0x3e35e000}, 
+    {0x3e360000}, {0x3e362000}, {0x3e364000}, {0x3e366000}, 
+    {0x3e368000}, {0x3e36a000}, {0x3e36c000}, {0x3e36e000}, 
+    {0x3e370000}, {0x3e372000}, {0x3e374000}, {0x3e376000}, 
+    {0x3e378000}, {0x3e37a000}, {0x3e37c000}, {0x3e37e000}, 
+    {0x3e380000}, {0x3e382000}, {0x3e384000}, {0x3e386000}, 
+    {0x3e388000}, {0x3e38a000}, {0x3e38c000}, {0x3e38e000}, 
+    {0x3e390000}, {0x3e392000}, {0x3e394000}, {0x3e396000}, 
+    {0x3e398000}, {0x3e39a000}, {0x3e39c000}, {0x3e39e000}, 
+    {0x3e3a0000}, {0x3e3a2000}, {0x3e3a4000}, {0x3e3a6000}, 
+    {0x3e3a8000}, {0x3e3aa000}, {0x3e3ac000}, {0x3e3ae000}, 
+    {0x3e3b0000}, {0x3e3b2000}, {0x3e3b4000}, {0x3e3b6000}, 
+    {0x3e3b8000}, {0x3e3ba000}, {0x3e3bc000}, {0x3e3be000}, 
+    {0x3e3c0000}, {0x3e3c2000}, {0x3e3c4000}, {0x3e3c6000}, 
+    {0x3e3c8000}, {0x3e3ca000}, {0x3e3cc000}, {0x3e3ce000}, 
+    {0x3e3d0000}, {0x3e3d2000}, {0x3e3d4000}, {0x3e3d6000}, 
+    {0x3e3d8000}, {0x3e3da000}, {0x3e3dc000}, {0x3e3de000}, 
+    {0x3e3e0000}, {0x3e3e2000}, {0x3e3e4000}, {0x3e3e6000}, 
+    {0x3e3e8000}, {0x3e3ea000}, {0x3e3ec000}, {0x3e3ee000}, 
+    {0x3e3f0000}, {0x3e3f2000}, {0x3e3f4000}, {0x3e3f6000}, 
+    {0x3e3f8000}, {0x3e3fa000}, {0x3e3fc000}, {0x3e3fe000}, 
+    {0x3e400000}, {0x3e402000}, {0x3e404000}, {0x3e406000}, 
+    {0x3e408000}, {0x3e40a000}, {0x3e40c000}, {0x3e40e000}, 
+    {0x3e410000}, {0x3e412000}, {0x3e414000}, {0x3e416000}, 
+    {0x3e418000}, {0x3e41a000}, {0x3e41c000}, {0x3e41e000}, 
+    {0x3e420000}, {0x3e422000}, {0x3e424000}, {0x3e426000}, 
+    {0x3e428000}, {0x3e42a000}, {0x3e42c000}, {0x3e42e000}, 
+    {0x3e430000}, {0x3e432000}, {0x3e434000}, {0x3e436000}, 
+    {0x3e438000}, {0x3e43a000}, {0x3e43c000}, {0x3e43e000}, 
+    {0x3e440000}, {0x3e442000}, {0x3e444000}, {0x3e446000}, 
+    {0x3e448000}, {0x3e44a000}, {0x3e44c000}, {0x3e44e000}, 
+    {0x3e450000}, {0x3e452000}, {0x3e454000}, {0x3e456000}, 
+    {0x3e458000}, {0x3e45a000}, {0x3e45c000}, {0x3e45e000}, 
+    {0x3e460000}, {0x3e462000}, {0x3e464000}, {0x3e466000}, 
+    {0x3e468000}, {0x3e46a000}, {0x3e46c000}, {0x3e46e000}, 
+    {0x3e470000}, {0x3e472000}, {0x3e474000}, {0x3e476000}, 
+    {0x3e478000}, {0x3e47a000}, {0x3e47c000}, {0x3e47e000}, 
+    {0x3e480000}, {0x3e482000}, {0x3e484000}, {0x3e486000}, 
+    {0x3e488000}, {0x3e48a000}, {0x3e48c000}, {0x3e48e000}, 
+    {0x3e490000}, {0x3e492000}, {0x3e494000}, {0x3e496000}, 
+    {0x3e498000}, {0x3e49a000}, {0x3e49c000}, {0x3e49e000}, 
+    {0x3e4a0000}, {0x3e4a2000}, {0x3e4a4000}, {0x3e4a6000}, 
+    {0x3e4a8000}, {0x3e4aa000}, {0x3e4ac000}, {0x3e4ae000}, 
+    {0x3e4b0000}, {0x3e4b2000}, {0x3e4b4000}, {0x3e4b6000}, 
+    {0x3e4b8000}, {0x3e4ba000}, {0x3e4bc000}, {0x3e4be000}, 
+    {0x3e4c0000}, {0x3e4c2000}, {0x3e4c4000}, {0x3e4c6000}, 
+    {0x3e4c8000}, {0x3e4ca000}, {0x3e4cc000}, {0x3e4ce000}, 
+    {0x3e4d0000}, {0x3e4d2000}, {0x3e4d4000}, {0x3e4d6000}, 
+    {0x3e4d8000}, {0x3e4da000}, {0x3e4dc000}, {0x3e4de000}, 
+    {0x3e4e0000}, {0x3e4e2000}, {0x3e4e4000}, {0x3e4e6000}, 
+    {0x3e4e8000}, {0x3e4ea000}, {0x3e4ec000}, {0x3e4ee000}, 
+    {0x3e4f0000}, {0x3e4f2000}, {0x3e4f4000}, {0x3e4f6000}, 
+    {0x3e4f8000}, {0x3e4fa000}, {0x3e4fc000}, {0x3e4fe000}, 
+    {0x3e500000}, {0x3e502000}, {0x3e504000}, {0x3e506000}, 
+    {0x3e508000}, {0x3e50a000}, {0x3e50c000}, {0x3e50e000}, 
+    {0x3e510000}, {0x3e512000}, {0x3e514000}, {0x3e516000}, 
+    {0x3e518000}, {0x3e51a000}, {0x3e51c000}, {0x3e51e000}, 
+    {0x3e520000}, {0x3e522000}, {0x3e524000}, {0x3e526000}, 
+    {0x3e528000}, {0x3e52a000}, {0x3e52c000}, {0x3e52e000}, 
+    {0x3e530000}, {0x3e532000}, {0x3e534000}, {0x3e536000}, 
+    {0x3e538000}, {0x3e53a000}, {0x3e53c000}, {0x3e53e000}, 
+    {0x3e540000}, {0x3e542000}, {0x3e544000}, {0x3e546000}, 
+    {0x3e548000}, {0x3e54a000}, {0x3e54c000}, {0x3e54e000}, 
+    {0x3e550000}, {0x3e552000}, {0x3e554000}, {0x3e556000}, 
+    {0x3e558000}, {0x3e55a000}, {0x3e55c000}, {0x3e55e000}, 
+    {0x3e560000}, {0x3e562000}, {0x3e564000}, {0x3e566000}, 
+    {0x3e568000}, {0x3e56a000}, {0x3e56c000}, {0x3e56e000}, 
+    {0x3e570000}, {0x3e572000}, {0x3e574000}, {0x3e576000}, 
+    {0x3e578000}, {0x3e57a000}, {0x3e57c000}, {0x3e57e000}, 
+    {0x3e580000}, {0x3e582000}, {0x3e584000}, {0x3e586000}, 
+    {0x3e588000}, {0x3e58a000}, {0x3e58c000}, {0x3e58e000}, 
+    {0x3e590000}, {0x3e592000}, {0x3e594000}, {0x3e596000}, 
+    {0x3e598000}, {0x3e59a000}, {0x3e59c000}, {0x3e59e000}, 
+    {0x3e5a0000}, {0x3e5a2000}, {0x3e5a4000}, {0x3e5a6000}, 
+    {0x3e5a8000}, {0x3e5aa000}, {0x3e5ac000}, {0x3e5ae000}, 
+    {0x3e5b0000}, {0x3e5b2000}, {0x3e5b4000}, {0x3e5b6000}, 
+    {0x3e5b8000}, {0x3e5ba000}, {0x3e5bc000}, {0x3e5be000}, 
+    {0x3e5c0000}, {0x3e5c2000}, {0x3e5c4000}, {0x3e5c6000}, 
+    {0x3e5c8000}, {0x3e5ca000}, {0x3e5cc000}, {0x3e5ce000}, 
+    {0x3e5d0000}, {0x3e5d2000}, {0x3e5d4000}, {0x3e5d6000}, 
+    {0x3e5d8000}, {0x3e5da000}, {0x3e5dc000}, {0x3e5de000}, 
+    {0x3e5e0000}, {0x3e5e2000}, {0x3e5e4000}, {0x3e5e6000}, 
+    {0x3e5e8000}, {0x3e5ea000}, {0x3e5ec000}, {0x3e5ee000}, 
+    {0x3e5f0000}, {0x3e5f2000}, {0x3e5f4000}, {0x3e5f6000}, 
+    {0x3e5f8000}, {0x3e5fa000}, {0x3e5fc000}, {0x3e5fe000}, 
+    {0x3e600000}, {0x3e602000}, {0x3e604000}, {0x3e606000}, 
+    {0x3e608000}, {0x3e60a000}, {0x3e60c000}, {0x3e60e000}, 
+    {0x3e610000}, {0x3e612000}, {0x3e614000}, {0x3e616000}, 
+    {0x3e618000}, {0x3e61a000}, {0x3e61c000}, {0x3e61e000}, 
+    {0x3e620000}, {0x3e622000}, {0x3e624000}, {0x3e626000}, 
+    {0x3e628000}, {0x3e62a000}, {0x3e62c000}, {0x3e62e000}, 
+    {0x3e630000}, {0x3e632000}, {0x3e634000}, {0x3e636000}, 
+    {0x3e638000}, {0x3e63a000}, {0x3e63c000}, {0x3e63e000}, 
+    {0x3e640000}, {0x3e642000}, {0x3e644000}, {0x3e646000}, 
+    {0x3e648000}, {0x3e64a000}, {0x3e64c000}, {0x3e64e000}, 
+    {0x3e650000}, {0x3e652000}, {0x3e654000}, {0x3e656000}, 
+    {0x3e658000}, {0x3e65a000}, {0x3e65c000}, {0x3e65e000}, 
+    {0x3e660000}, {0x3e662000}, {0x3e664000}, {0x3e666000}, 
+    {0x3e668000}, {0x3e66a000}, {0x3e66c000}, {0x3e66e000}, 
+    {0x3e670000}, {0x3e672000}, {0x3e674000}, {0x3e676000}, 
+    {0x3e678000}, {0x3e67a000}, {0x3e67c000}, {0x3e67e000}, 
+    {0x3e680000}, {0x3e682000}, {0x3e684000}, {0x3e686000}, 
+    {0x3e688000}, {0x3e68a000}, {0x3e68c000}, {0x3e68e000}, 
+    {0x3e690000}, {0x3e692000}, {0x3e694000}, {0x3e696000}, 
+    {0x3e698000}, {0x3e69a000}, {0x3e69c000}, {0x3e69e000}, 
+    {0x3e6a0000}, {0x3e6a2000}, {0x3e6a4000}, {0x3e6a6000}, 
+    {0x3e6a8000}, {0x3e6aa000}, {0x3e6ac000}, {0x3e6ae000}, 
+    {0x3e6b0000}, {0x3e6b2000}, {0x3e6b4000}, {0x3e6b6000}, 
+    {0x3e6b8000}, {0x3e6ba000}, {0x3e6bc000}, {0x3e6be000}, 
+    {0x3e6c0000}, {0x3e6c2000}, {0x3e6c4000}, {0x3e6c6000}, 
+    {0x3e6c8000}, {0x3e6ca000}, {0x3e6cc000}, {0x3e6ce000}, 
+    {0x3e6d0000}, {0x3e6d2000}, {0x3e6d4000}, {0x3e6d6000}, 
+    {0x3e6d8000}, {0x3e6da000}, {0x3e6dc000}, {0x3e6de000}, 
+    {0x3e6e0000}, {0x3e6e2000}, {0x3e6e4000}, {0x3e6e6000}, 
+    {0x3e6e8000}, {0x3e6ea000}, {0x3e6ec000}, {0x3e6ee000}, 
+    {0x3e6f0000}, {0x3e6f2000}, {0x3e6f4000}, {0x3e6f6000}, 
+    {0x3e6f8000}, {0x3e6fa000}, {0x3e6fc000}, {0x3e6fe000}, 
+    {0x3e700000}, {0x3e702000}, {0x3e704000}, {0x3e706000}, 
+    {0x3e708000}, {0x3e70a000}, {0x3e70c000}, {0x3e70e000}, 
+    {0x3e710000}, {0x3e712000}, {0x3e714000}, {0x3e716000}, 
+    {0x3e718000}, {0x3e71a000}, {0x3e71c000}, {0x3e71e000}, 
+    {0x3e720000}, {0x3e722000}, {0x3e724000}, {0x3e726000}, 
+    {0x3e728000}, {0x3e72a000}, {0x3e72c000}, {0x3e72e000}, 
+    {0x3e730000}, {0x3e732000}, {0x3e734000}, {0x3e736000}, 
+    {0x3e738000}, {0x3e73a000}, {0x3e73c000}, {0x3e73e000}, 
+    {0x3e740000}, {0x3e742000}, {0x3e744000}, {0x3e746000}, 
+    {0x3e748000}, {0x3e74a000}, {0x3e74c000}, {0x3e74e000}, 
+    {0x3e750000}, {0x3e752000}, {0x3e754000}, {0x3e756000}, 
+    {0x3e758000}, {0x3e75a000}, {0x3e75c000}, {0x3e75e000}, 
+    {0x3e760000}, {0x3e762000}, {0x3e764000}, {0x3e766000}, 
+    {0x3e768000}, {0x3e76a000}, {0x3e76c000}, {0x3e76e000}, 
+    {0x3e770000}, {0x3e772000}, {0x3e774000}, {0x3e776000}, 
+    {0x3e778000}, {0x3e77a000}, {0x3e77c000}, {0x3e77e000}, 
+    {0x3e780000}, {0x3e782000}, {0x3e784000}, {0x3e786000}, 
+    {0x3e788000}, {0x3e78a000}, {0x3e78c000}, {0x3e78e000}, 
+    {0x3e790000}, {0x3e792000}, {0x3e794000}, {0x3e796000}, 
+    {0x3e798000}, {0x3e79a000}, {0x3e79c000}, {0x3e79e000}, 
+    {0x3e7a0000}, {0x3e7a2000}, {0x3e7a4000}, {0x3e7a6000}, 
+    {0x3e7a8000}, {0x3e7aa000}, {0x3e7ac000}, {0x3e7ae000}, 
+    {0x3e7b0000}, {0x3e7b2000}, {0x3e7b4000}, {0x3e7b6000}, 
+    {0x3e7b8000}, {0x3e7ba000}, {0x3e7bc000}, {0x3e7be000}, 
+    {0x3e7c0000}, {0x3e7c2000}, {0x3e7c4000}, {0x3e7c6000}, 
+    {0x3e7c8000}, {0x3e7ca000}, {0x3e7cc000}, {0x3e7ce000}, 
+    {0x3e7d0000}, {0x3e7d2000}, {0x3e7d4000}, {0x3e7d6000}, 
+    {0x3e7d8000}, {0x3e7da000}, {0x3e7dc000}, {0x3e7de000}, 
+    {0x3e7e0000}, {0x3e7e2000}, {0x3e7e4000}, {0x3e7e6000}, 
+    {0x3e7e8000}, {0x3e7ea000}, {0x3e7ec000}, {0x3e7ee000}, 
+    {0x3e7f0000}, {0x3e7f2000}, {0x3e7f4000}, {0x3e7f6000}, 
+    {0x3e7f8000}, {0x3e7fa000}, {0x3e7fc000}, {0x3e7fe000}, 
+    {0x3e800000}, {0x3e802000}, {0x3e804000}, {0x3e806000}, 
+    {0x3e808000}, {0x3e80a000}, {0x3e80c000}, {0x3e80e000}, 
+    {0x3e810000}, {0x3e812000}, {0x3e814000}, {0x3e816000}, 
+    {0x3e818000}, {0x3e81a000}, {0x3e81c000}, {0x3e81e000}, 
+    {0x3e820000}, {0x3e822000}, {0x3e824000}, {0x3e826000}, 
+    {0x3e828000}, {0x3e82a000}, {0x3e82c000}, {0x3e82e000}, 
+    {0x3e830000}, {0x3e832000}, {0x3e834000}, {0x3e836000}, 
+    {0x3e838000}, {0x3e83a000}, {0x3e83c000}, {0x3e83e000}, 
+    {0x3e840000}, {0x3e842000}, {0x3e844000}, {0x3e846000}, 
+    {0x3e848000}, {0x3e84a000}, {0x3e84c000}, {0x3e84e000}, 
+    {0x3e850000}, {0x3e852000}, {0x3e854000}, {0x3e856000}, 
+    {0x3e858000}, {0x3e85a000}, {0x3e85c000}, {0x3e85e000}, 
+    {0x3e860000}, {0x3e862000}, {0x3e864000}, {0x3e866000}, 
+    {0x3e868000}, {0x3e86a000}, {0x3e86c000}, {0x3e86e000}, 
+    {0x3e870000}, {0x3e872000}, {0x3e874000}, {0x3e876000}, 
+    {0x3e878000}, {0x3e87a000}, {0x3e87c000}, {0x3e87e000}, 
+    {0x3e880000}, {0x3e882000}, {0x3e884000}, {0x3e886000}, 
+    {0x3e888000}, {0x3e88a000}, {0x3e88c000}, {0x3e88e000}, 
+    {0x3e890000}, {0x3e892000}, {0x3e894000}, {0x3e896000}, 
+    {0x3e898000}, {0x3e89a000}, {0x3e89c000}, {0x3e89e000}, 
+    {0x3e8a0000}, {0x3e8a2000}, {0x3e8a4000}, {0x3e8a6000}, 
+    {0x3e8a8000}, {0x3e8aa000}, {0x3e8ac000}, {0x3e8ae000}, 
+    {0x3e8b0000}, {0x3e8b2000}, {0x3e8b4000}, {0x3e8b6000}, 
+    {0x3e8b8000}, {0x3e8ba000}, {0x3e8bc000}, {0x3e8be000}, 
+    {0x3e8c0000}, {0x3e8c2000}, {0x3e8c4000}, {0x3e8c6000}, 
+    {0x3e8c8000}, {0x3e8ca000}, {0x3e8cc000}, {0x3e8ce000}, 
+    {0x3e8d0000}, {0x3e8d2000}, {0x3e8d4000}, {0x3e8d6000}, 
+    {0x3e8d8000}, {0x3e8da000}, {0x3e8dc000}, {0x3e8de000}, 
+    {0x3e8e0000}, {0x3e8e2000}, {0x3e8e4000}, {0x3e8e6000}, 
+    {0x3e8e8000}, {0x3e8ea000}, {0x3e8ec000}, {0x3e8ee000}, 
+    {0x3e8f0000}, {0x3e8f2000}, {0x3e8f4000}, {0x3e8f6000}, 
+    {0x3e8f8000}, {0x3e8fa000}, {0x3e8fc000}, {0x3e8fe000}, 
+    {0x3e900000}, {0x3e902000}, {0x3e904000}, {0x3e906000}, 
+    {0x3e908000}, {0x3e90a000}, {0x3e90c000}, {0x3e90e000}, 
+    {0x3e910000}, {0x3e912000}, {0x3e914000}, {0x3e916000}, 
+    {0x3e918000}, {0x3e91a000}, {0x3e91c000}, {0x3e91e000}, 
+    {0x3e920000}, {0x3e922000}, {0x3e924000}, {0x3e926000}, 
+    {0x3e928000}, {0x3e92a000}, {0x3e92c000}, {0x3e92e000}, 
+    {0x3e930000}, {0x3e932000}, {0x3e934000}, {0x3e936000}, 
+    {0x3e938000}, {0x3e93a000}, {0x3e93c000}, {0x3e93e000}, 
+    {0x3e940000}, {0x3e942000}, {0x3e944000}, {0x3e946000}, 
+    {0x3e948000}, {0x3e94a000}, {0x3e94c000}, {0x3e94e000}, 
+    {0x3e950000}, {0x3e952000}, {0x3e954000}, {0x3e956000}, 
+    {0x3e958000}, {0x3e95a000}, {0x3e95c000}, {0x3e95e000}, 
+    {0x3e960000}, {0x3e962000}, {0x3e964000}, {0x3e966000}, 
+    {0x3e968000}, {0x3e96a000}, {0x3e96c000}, {0x3e96e000}, 
+    {0x3e970000}, {0x3e972000}, {0x3e974000}, {0x3e976000}, 
+    {0x3e978000}, {0x3e97a000}, {0x3e97c000}, {0x3e97e000}, 
+    {0x3e980000}, {0x3e982000}, {0x3e984000}, {0x3e986000}, 
+    {0x3e988000}, {0x3e98a000}, {0x3e98c000}, {0x3e98e000}, 
+    {0x3e990000}, {0x3e992000}, {0x3e994000}, {0x3e996000}, 
+    {0x3e998000}, {0x3e99a000}, {0x3e99c000}, {0x3e99e000}, 
+    {0x3e9a0000}, {0x3e9a2000}, {0x3e9a4000}, {0x3e9a6000}, 
+    {0x3e9a8000}, {0x3e9aa000}, {0x3e9ac000}, {0x3e9ae000}, 
+    {0x3e9b0000}, {0x3e9b2000}, {0x3e9b4000}, {0x3e9b6000}, 
+    {0x3e9b8000}, {0x3e9ba000}, {0x3e9bc000}, {0x3e9be000}, 
+    {0x3e9c0000}, {0x3e9c2000}, {0x3e9c4000}, {0x3e9c6000}, 
+    {0x3e9c8000}, {0x3e9ca000}, {0x3e9cc000}, {0x3e9ce000}, 
+    {0x3e9d0000}, {0x3e9d2000}, {0x3e9d4000}, {0x3e9d6000}, 
+    {0x3e9d8000}, {0x3e9da000}, {0x3e9dc000}, {0x3e9de000}, 
+    {0x3e9e0000}, {0x3e9e2000}, {0x3e9e4000}, {0x3e9e6000}, 
+    {0x3e9e8000}, {0x3e9ea000}, {0x3e9ec000}, {0x3e9ee000}, 
+    {0x3e9f0000}, {0x3e9f2000}, {0x3e9f4000}, {0x3e9f6000}, 
+    {0x3e9f8000}, {0x3e9fa000}, {0x3e9fc000}, {0x3e9fe000}, 
+    {0x3ea00000}, {0x3ea02000}, {0x3ea04000}, {0x3ea06000}, 
+    {0x3ea08000}, {0x3ea0a000}, {0x3ea0c000}, {0x3ea0e000}, 
+    {0x3ea10000}, {0x3ea12000}, {0x3ea14000}, {0x3ea16000}, 
+    {0x3ea18000}, {0x3ea1a000}, {0x3ea1c000}, {0x3ea1e000}, 
+    {0x3ea20000}, {0x3ea22000}, {0x3ea24000}, {0x3ea26000}, 
+    {0x3ea28000}, {0x3ea2a000}, {0x3ea2c000}, {0x3ea2e000}, 
+    {0x3ea30000}, {0x3ea32000}, {0x3ea34000}, {0x3ea36000}, 
+    {0x3ea38000}, {0x3ea3a000}, {0x3ea3c000}, {0x3ea3e000}, 
+    {0x3ea40000}, {0x3ea42000}, {0x3ea44000}, {0x3ea46000}, 
+    {0x3ea48000}, {0x3ea4a000}, {0x3ea4c000}, {0x3ea4e000}, 
+    {0x3ea50000}, {0x3ea52000}, {0x3ea54000}, {0x3ea56000}, 
+    {0x3ea58000}, {0x3ea5a000}, {0x3ea5c000}, {0x3ea5e000}, 
+    {0x3ea60000}, {0x3ea62000}, {0x3ea64000}, {0x3ea66000}, 
+    {0x3ea68000}, {0x3ea6a000}, {0x3ea6c000}, {0x3ea6e000}, 
+    {0x3ea70000}, {0x3ea72000}, {0x3ea74000}, {0x3ea76000}, 
+    {0x3ea78000}, {0x3ea7a000}, {0x3ea7c000}, {0x3ea7e000}, 
+    {0x3ea80000}, {0x3ea82000}, {0x3ea84000}, {0x3ea86000}, 
+    {0x3ea88000}, {0x3ea8a000}, {0x3ea8c000}, {0x3ea8e000}, 
+    {0x3ea90000}, {0x3ea92000}, {0x3ea94000}, {0x3ea96000}, 
+    {0x3ea98000}, {0x3ea9a000}, {0x3ea9c000}, {0x3ea9e000}, 
+    {0x3eaa0000}, {0x3eaa2000}, {0x3eaa4000}, {0x3eaa6000}, 
+    {0x3eaa8000}, {0x3eaaa000}, {0x3eaac000}, {0x3eaae000}, 
+    {0x3eab0000}, {0x3eab2000}, {0x3eab4000}, {0x3eab6000}, 
+    {0x3eab8000}, {0x3eaba000}, {0x3eabc000}, {0x3eabe000}, 
+    {0x3eac0000}, {0x3eac2000}, {0x3eac4000}, {0x3eac6000}, 
+    {0x3eac8000}, {0x3eaca000}, {0x3eacc000}, {0x3eace000}, 
+    {0x3ead0000}, {0x3ead2000}, {0x3ead4000}, {0x3ead6000}, 
+    {0x3ead8000}, {0x3eada000}, {0x3eadc000}, {0x3eade000}, 
+    {0x3eae0000}, {0x3eae2000}, {0x3eae4000}, {0x3eae6000}, 
+    {0x3eae8000}, {0x3eaea000}, {0x3eaec000}, {0x3eaee000}, 
+    {0x3eaf0000}, {0x3eaf2000}, {0x3eaf4000}, {0x3eaf6000}, 
+    {0x3eaf8000}, {0x3eafa000}, {0x3eafc000}, {0x3eafe000}, 
+    {0x3eb00000}, {0x3eb02000}, {0x3eb04000}, {0x3eb06000}, 
+    {0x3eb08000}, {0x3eb0a000}, {0x3eb0c000}, {0x3eb0e000}, 
+    {0x3eb10000}, {0x3eb12000}, {0x3eb14000}, {0x3eb16000}, 
+    {0x3eb18000}, {0x3eb1a000}, {0x3eb1c000}, {0x3eb1e000}, 
+    {0x3eb20000}, {0x3eb22000}, {0x3eb24000}, {0x3eb26000}, 
+    {0x3eb28000}, {0x3eb2a000}, {0x3eb2c000}, {0x3eb2e000}, 
+    {0x3eb30000}, {0x3eb32000}, {0x3eb34000}, {0x3eb36000}, 
+    {0x3eb38000}, {0x3eb3a000}, {0x3eb3c000}, {0x3eb3e000}, 
+    {0x3eb40000}, {0x3eb42000}, {0x3eb44000}, {0x3eb46000}, 
+    {0x3eb48000}, {0x3eb4a000}, {0x3eb4c000}, {0x3eb4e000}, 
+    {0x3eb50000}, {0x3eb52000}, {0x3eb54000}, {0x3eb56000}, 
+    {0x3eb58000}, {0x3eb5a000}, {0x3eb5c000}, {0x3eb5e000}, 
+    {0x3eb60000}, {0x3eb62000}, {0x3eb64000}, {0x3eb66000}, 
+    {0x3eb68000}, {0x3eb6a000}, {0x3eb6c000}, {0x3eb6e000}, 
+    {0x3eb70000}, {0x3eb72000}, {0x3eb74000}, {0x3eb76000}, 
+    {0x3eb78000}, {0x3eb7a000}, {0x3eb7c000}, {0x3eb7e000}, 
+    {0x3eb80000}, {0x3eb82000}, {0x3eb84000}, {0x3eb86000}, 
+    {0x3eb88000}, {0x3eb8a000}, {0x3eb8c000}, {0x3eb8e000}, 
+    {0x3eb90000}, {0x3eb92000}, {0x3eb94000}, {0x3eb96000}, 
+    {0x3eb98000}, {0x3eb9a000}, {0x3eb9c000}, {0x3eb9e000}, 
+    {0x3eba0000}, {0x3eba2000}, {0x3eba4000}, {0x3eba6000}, 
+    {0x3eba8000}, {0x3ebaa000}, {0x3ebac000}, {0x3ebae000}, 
+    {0x3ebb0000}, {0x3ebb2000}, {0x3ebb4000}, {0x3ebb6000}, 
+    {0x3ebb8000}, {0x3ebba000}, {0x3ebbc000}, {0x3ebbe000}, 
+    {0x3ebc0000}, {0x3ebc2000}, {0x3ebc4000}, {0x3ebc6000}, 
+    {0x3ebc8000}, {0x3ebca000}, {0x3ebcc000}, {0x3ebce000}, 
+    {0x3ebd0000}, {0x3ebd2000}, {0x3ebd4000}, {0x3ebd6000}, 
+    {0x3ebd8000}, {0x3ebda000}, {0x3ebdc000}, {0x3ebde000}, 
+    {0x3ebe0000}, {0x3ebe2000}, {0x3ebe4000}, {0x3ebe6000}, 
+    {0x3ebe8000}, {0x3ebea000}, {0x3ebec000}, {0x3ebee000}, 
+    {0x3ebf0000}, {0x3ebf2000}, {0x3ebf4000}, {0x3ebf6000}, 
+    {0x3ebf8000}, {0x3ebfa000}, {0x3ebfc000}, {0x3ebfe000}, 
+    {0x3ec00000}, {0x3ec02000}, {0x3ec04000}, {0x3ec06000}, 
+    {0x3ec08000}, {0x3ec0a000}, {0x3ec0c000}, {0x3ec0e000}, 
+    {0x3ec10000}, {0x3ec12000}, {0x3ec14000}, {0x3ec16000}, 
+    {0x3ec18000}, {0x3ec1a000}, {0x3ec1c000}, {0x3ec1e000}, 
+    {0x3ec20000}, {0x3ec22000}, {0x3ec24000}, {0x3ec26000}, 
+    {0x3ec28000}, {0x3ec2a000}, {0x3ec2c000}, {0x3ec2e000}, 
+    {0x3ec30000}, {0x3ec32000}, {0x3ec34000}, {0x3ec36000}, 
+    {0x3ec38000}, {0x3ec3a000}, {0x3ec3c000}, {0x3ec3e000}, 
+    {0x3ec40000}, {0x3ec42000}, {0x3ec44000}, {0x3ec46000}, 
+    {0x3ec48000}, {0x3ec4a000}, {0x3ec4c000}, {0x3ec4e000}, 
+    {0x3ec50000}, {0x3ec52000}, {0x3ec54000}, {0x3ec56000}, 
+    {0x3ec58000}, {0x3ec5a000}, {0x3ec5c000}, {0x3ec5e000}, 
+    {0x3ec60000}, {0x3ec62000}, {0x3ec64000}, {0x3ec66000}, 
+    {0x3ec68000}, {0x3ec6a000}, {0x3ec6c000}, {0x3ec6e000}, 
+    {0x3ec70000}, {0x3ec72000}, {0x3ec74000}, {0x3ec76000}, 
+    {0x3ec78000}, {0x3ec7a000}, {0x3ec7c000}, {0x3ec7e000}, 
+    {0x3ec80000}, {0x3ec82000}, {0x3ec84000}, {0x3ec86000}, 
+    {0x3ec88000}, {0x3ec8a000}, {0x3ec8c000}, {0x3ec8e000}, 
+    {0x3ec90000}, {0x3ec92000}, {0x3ec94000}, {0x3ec96000}, 
+    {0x3ec98000}, {0x3ec9a000}, {0x3ec9c000}, {0x3ec9e000}, 
+    {0x3eca0000}, {0x3eca2000}, {0x3eca4000}, {0x3eca6000}, 
+    {0x3eca8000}, {0x3ecaa000}, {0x3ecac000}, {0x3ecae000}, 
+    {0x3ecb0000}, {0x3ecb2000}, {0x3ecb4000}, {0x3ecb6000}, 
+    {0x3ecb8000}, {0x3ecba000}, {0x3ecbc000}, {0x3ecbe000}, 
+    {0x3ecc0000}, {0x3ecc2000}, {0x3ecc4000}, {0x3ecc6000}, 
+    {0x3ecc8000}, {0x3ecca000}, {0x3eccc000}, {0x3ecce000}, 
+    {0x3ecd0000}, {0x3ecd2000}, {0x3ecd4000}, {0x3ecd6000}, 
+    {0x3ecd8000}, {0x3ecda000}, {0x3ecdc000}, {0x3ecde000}, 
+    {0x3ece0000}, {0x3ece2000}, {0x3ece4000}, {0x3ece6000}, 
+    {0x3ece8000}, {0x3ecea000}, {0x3ecec000}, {0x3ecee000}, 
+    {0x3ecf0000}, {0x3ecf2000}, {0x3ecf4000}, {0x3ecf6000}, 
+    {0x3ecf8000}, {0x3ecfa000}, {0x3ecfc000}, {0x3ecfe000}, 
+    {0x3ed00000}, {0x3ed02000}, {0x3ed04000}, {0x3ed06000}, 
+    {0x3ed08000}, {0x3ed0a000}, {0x3ed0c000}, {0x3ed0e000}, 
+    {0x3ed10000}, {0x3ed12000}, {0x3ed14000}, {0x3ed16000}, 
+    {0x3ed18000}, {0x3ed1a000}, {0x3ed1c000}, {0x3ed1e000}, 
+    {0x3ed20000}, {0x3ed22000}, {0x3ed24000}, {0x3ed26000}, 
+    {0x3ed28000}, {0x3ed2a000}, {0x3ed2c000}, {0x3ed2e000}, 
+    {0x3ed30000}, {0x3ed32000}, {0x3ed34000}, {0x3ed36000}, 
+    {0x3ed38000}, {0x3ed3a000}, {0x3ed3c000}, {0x3ed3e000}, 
+    {0x3ed40000}, {0x3ed42000}, {0x3ed44000}, {0x3ed46000}, 
+    {0x3ed48000}, {0x3ed4a000}, {0x3ed4c000}, {0x3ed4e000}, 
+    {0x3ed50000}, {0x3ed52000}, {0x3ed54000}, {0x3ed56000}, 
+    {0x3ed58000}, {0x3ed5a000}, {0x3ed5c000}, {0x3ed5e000}, 
+    {0x3ed60000}, {0x3ed62000}, {0x3ed64000}, {0x3ed66000}, 
+    {0x3ed68000}, {0x3ed6a000}, {0x3ed6c000}, {0x3ed6e000}, 
+    {0x3ed70000}, {0x3ed72000}, {0x3ed74000}, {0x3ed76000}, 
+    {0x3ed78000}, {0x3ed7a000}, {0x3ed7c000}, {0x3ed7e000}, 
+    {0x3ed80000}, {0x3ed82000}, {0x3ed84000}, {0x3ed86000}, 
+    {0x3ed88000}, {0x3ed8a000}, {0x3ed8c000}, {0x3ed8e000}, 
+    {0x3ed90000}, {0x3ed92000}, {0x3ed94000}, {0x3ed96000}, 
+    {0x3ed98000}, {0x3ed9a000}, {0x3ed9c000}, {0x3ed9e000}, 
+    {0x3eda0000}, {0x3eda2000}, {0x3eda4000}, {0x3eda6000}, 
+    {0x3eda8000}, {0x3edaa000}, {0x3edac000}, {0x3edae000}, 
+    {0x3edb0000}, {0x3edb2000}, {0x3edb4000}, {0x3edb6000}, 
+    {0x3edb8000}, {0x3edba000}, {0x3edbc000}, {0x3edbe000}, 
+    {0x3edc0000}, {0x3edc2000}, {0x3edc4000}, {0x3edc6000}, 
+    {0x3edc8000}, {0x3edca000}, {0x3edcc000}, {0x3edce000}, 
+    {0x3edd0000}, {0x3edd2000}, {0x3edd4000}, {0x3edd6000}, 
+    {0x3edd8000}, {0x3edda000}, {0x3eddc000}, {0x3edde000}, 
+    {0x3ede0000}, {0x3ede2000}, {0x3ede4000}, {0x3ede6000}, 
+    {0x3ede8000}, {0x3edea000}, {0x3edec000}, {0x3edee000}, 
+    {0x3edf0000}, {0x3edf2000}, {0x3edf4000}, {0x3edf6000}, 
+    {0x3edf8000}, {0x3edfa000}, {0x3edfc000}, {0x3edfe000}, 
+    {0x3ee00000}, {0x3ee02000}, {0x3ee04000}, {0x3ee06000}, 
+    {0x3ee08000}, {0x3ee0a000}, {0x3ee0c000}, {0x3ee0e000}, 
+    {0x3ee10000}, {0x3ee12000}, {0x3ee14000}, {0x3ee16000}, 
+    {0x3ee18000}, {0x3ee1a000}, {0x3ee1c000}, {0x3ee1e000}, 
+    {0x3ee20000}, {0x3ee22000}, {0x3ee24000}, {0x3ee26000}, 
+    {0x3ee28000}, {0x3ee2a000}, {0x3ee2c000}, {0x3ee2e000}, 
+    {0x3ee30000}, {0x3ee32000}, {0x3ee34000}, {0x3ee36000}, 
+    {0x3ee38000}, {0x3ee3a000}, {0x3ee3c000}, {0x3ee3e000}, 
+    {0x3ee40000}, {0x3ee42000}, {0x3ee44000}, {0x3ee46000}, 
+    {0x3ee48000}, {0x3ee4a000}, {0x3ee4c000}, {0x3ee4e000}, 
+    {0x3ee50000}, {0x3ee52000}, {0x3ee54000}, {0x3ee56000}, 
+    {0x3ee58000}, {0x3ee5a000}, {0x3ee5c000}, {0x3ee5e000}, 
+    {0x3ee60000}, {0x3ee62000}, {0x3ee64000}, {0x3ee66000}, 
+    {0x3ee68000}, {0x3ee6a000}, {0x3ee6c000}, {0x3ee6e000}, 
+    {0x3ee70000}, {0x3ee72000}, {0x3ee74000}, {0x3ee76000}, 
+    {0x3ee78000}, {0x3ee7a000}, {0x3ee7c000}, {0x3ee7e000}, 
+    {0x3ee80000}, {0x3ee82000}, {0x3ee84000}, {0x3ee86000}, 
+    {0x3ee88000}, {0x3ee8a000}, {0x3ee8c000}, {0x3ee8e000}, 
+    {0x3ee90000}, {0x3ee92000}, {0x3ee94000}, {0x3ee96000}, 
+    {0x3ee98000}, {0x3ee9a000}, {0x3ee9c000}, {0x3ee9e000}, 
+    {0x3eea0000}, {0x3eea2000}, {0x3eea4000}, {0x3eea6000}, 
+    {0x3eea8000}, {0x3eeaa000}, {0x3eeac000}, {0x3eeae000}, 
+    {0x3eeb0000}, {0x3eeb2000}, {0x3eeb4000}, {0x3eeb6000}, 
+    {0x3eeb8000}, {0x3eeba000}, {0x3eebc000}, {0x3eebe000}, 
+    {0x3eec0000}, {0x3eec2000}, {0x3eec4000}, {0x3eec6000}, 
+    {0x3eec8000}, {0x3eeca000}, {0x3eecc000}, {0x3eece000}, 
+    {0x3eed0000}, {0x3eed2000}, {0x3eed4000}, {0x3eed6000}, 
+    {0x3eed8000}, {0x3eeda000}, {0x3eedc000}, {0x3eede000}, 
+    {0x3eee0000}, {0x3eee2000}, {0x3eee4000}, {0x3eee6000}, 
+    {0x3eee8000}, {0x3eeea000}, {0x3eeec000}, {0x3eeee000}, 
+    {0x3eef0000}, {0x3eef2000}, {0x3eef4000}, {0x3eef6000}, 
+    {0x3eef8000}, {0x3eefa000}, {0x3eefc000}, {0x3eefe000}, 
+    {0x3ef00000}, {0x3ef02000}, {0x3ef04000}, {0x3ef06000}, 
+    {0x3ef08000}, {0x3ef0a000}, {0x3ef0c000}, {0x3ef0e000}, 
+    {0x3ef10000}, {0x3ef12000}, {0x3ef14000}, {0x3ef16000}, 
+    {0x3ef18000}, {0x3ef1a000}, {0x3ef1c000}, {0x3ef1e000}, 
+    {0x3ef20000}, {0x3ef22000}, {0x3ef24000}, {0x3ef26000}, 
+    {0x3ef28000}, {0x3ef2a000}, {0x3ef2c000}, {0x3ef2e000}, 
+    {0x3ef30000}, {0x3ef32000}, {0x3ef34000}, {0x3ef36000}, 
+    {0x3ef38000}, {0x3ef3a000}, {0x3ef3c000}, {0x3ef3e000}, 
+    {0x3ef40000}, {0x3ef42000}, {0x3ef44000}, {0x3ef46000}, 
+    {0x3ef48000}, {0x3ef4a000}, {0x3ef4c000}, {0x3ef4e000}, 
+    {0x3ef50000}, {0x3ef52000}, {0x3ef54000}, {0x3ef56000}, 
+    {0x3ef58000}, {0x3ef5a000}, {0x3ef5c000}, {0x3ef5e000}, 
+    {0x3ef60000}, {0x3ef62000}, {0x3ef64000}, {0x3ef66000}, 
+    {0x3ef68000}, {0x3ef6a000}, {0x3ef6c000}, {0x3ef6e000}, 
+    {0x3ef70000}, {0x3ef72000}, {0x3ef74000}, {0x3ef76000}, 
+    {0x3ef78000}, {0x3ef7a000}, {0x3ef7c000}, {0x3ef7e000}, 
+    {0x3ef80000}, {0x3ef82000}, {0x3ef84000}, {0x3ef86000}, 
+    {0x3ef88000}, {0x3ef8a000}, {0x3ef8c000}, {0x3ef8e000}, 
+    {0x3ef90000}, {0x3ef92000}, {0x3ef94000}, {0x3ef96000}, 
+    {0x3ef98000}, {0x3ef9a000}, {0x3ef9c000}, {0x3ef9e000}, 
+    {0x3efa0000}, {0x3efa2000}, {0x3efa4000}, {0x3efa6000}, 
+    {0x3efa8000}, {0x3efaa000}, {0x3efac000}, {0x3efae000}, 
+    {0x3efb0000}, {0x3efb2000}, {0x3efb4000}, {0x3efb6000}, 
+    {0x3efb8000}, {0x3efba000}, {0x3efbc000}, {0x3efbe000}, 
+    {0x3efc0000}, {0x3efc2000}, {0x3efc4000}, {0x3efc6000}, 
+    {0x3efc8000}, {0x3efca000}, {0x3efcc000}, {0x3efce000}, 
+    {0x3efd0000}, {0x3efd2000}, {0x3efd4000}, {0x3efd6000}, 
+    {0x3efd8000}, {0x3efda000}, {0x3efdc000}, {0x3efde000}, 
+    {0x3efe0000}, {0x3efe2000}, {0x3efe4000}, {0x3efe6000}, 
+    {0x3efe8000}, {0x3efea000}, {0x3efec000}, {0x3efee000}, 
+    {0x3eff0000}, {0x3eff2000}, {0x3eff4000}, {0x3eff6000}, 
+    {0x3eff8000}, {0x3effa000}, {0x3effc000}, {0x3effe000}, 
+    {0x3f000000}, {0x3f002000}, {0x3f004000}, {0x3f006000}, 
+    {0x3f008000}, {0x3f00a000}, {0x3f00c000}, {0x3f00e000}, 
+    {0x3f010000}, {0x3f012000}, {0x3f014000}, {0x3f016000}, 
+    {0x3f018000}, {0x3f01a000}, {0x3f01c000}, {0x3f01e000}, 
+    {0x3f020000}, {0x3f022000}, {0x3f024000}, {0x3f026000}, 
+    {0x3f028000}, {0x3f02a000}, {0x3f02c000}, {0x3f02e000}, 
+    {0x3f030000}, {0x3f032000}, {0x3f034000}, {0x3f036000}, 
+    {0x3f038000}, {0x3f03a000}, {0x3f03c000}, {0x3f03e000}, 
+    {0x3f040000}, {0x3f042000}, {0x3f044000}, {0x3f046000}, 
+    {0x3f048000}, {0x3f04a000}, {0x3f04c000}, {0x3f04e000}, 
+    {0x3f050000}, {0x3f052000}, {0x3f054000}, {0x3f056000}, 
+    {0x3f058000}, {0x3f05a000}, {0x3f05c000}, {0x3f05e000}, 
+    {0x3f060000}, {0x3f062000}, {0x3f064000}, {0x3f066000}, 
+    {0x3f068000}, {0x3f06a000}, {0x3f06c000}, {0x3f06e000}, 
+    {0x3f070000}, {0x3f072000}, {0x3f074000}, {0x3f076000}, 
+    {0x3f078000}, {0x3f07a000}, {0x3f07c000}, {0x3f07e000}, 
+    {0x3f080000}, {0x3f082000}, {0x3f084000}, {0x3f086000}, 
+    {0x3f088000}, {0x3f08a000}, {0x3f08c000}, {0x3f08e000}, 
+    {0x3f090000}, {0x3f092000}, {0x3f094000}, {0x3f096000}, 
+    {0x3f098000}, {0x3f09a000}, {0x3f09c000}, {0x3f09e000}, 
+    {0x3f0a0000}, {0x3f0a2000}, {0x3f0a4000}, {0x3f0a6000}, 
+    {0x3f0a8000}, {0x3f0aa000}, {0x3f0ac000}, {0x3f0ae000}, 
+    {0x3f0b0000}, {0x3f0b2000}, {0x3f0b4000}, {0x3f0b6000}, 
+    {0x3f0b8000}, {0x3f0ba000}, {0x3f0bc000}, {0x3f0be000}, 
+    {0x3f0c0000}, {0x3f0c2000}, {0x3f0c4000}, {0x3f0c6000}, 
+    {0x3f0c8000}, {0x3f0ca000}, {0x3f0cc000}, {0x3f0ce000}, 
+    {0x3f0d0000}, {0x3f0d2000}, {0x3f0d4000}, {0x3f0d6000}, 
+    {0x3f0d8000}, {0x3f0da000}, {0x3f0dc000}, {0x3f0de000}, 
+    {0x3f0e0000}, {0x3f0e2000}, {0x3f0e4000}, {0x3f0e6000}, 
+    {0x3f0e8000}, {0x3f0ea000}, {0x3f0ec000}, {0x3f0ee000}, 
+    {0x3f0f0000}, {0x3f0f2000}, {0x3f0f4000}, {0x3f0f6000}, 
+    {0x3f0f8000}, {0x3f0fa000}, {0x3f0fc000}, {0x3f0fe000}, 
+    {0x3f100000}, {0x3f102000}, {0x3f104000}, {0x3f106000}, 
+    {0x3f108000}, {0x3f10a000}, {0x3f10c000}, {0x3f10e000}, 
+    {0x3f110000}, {0x3f112000}, {0x3f114000}, {0x3f116000}, 
+    {0x3f118000}, {0x3f11a000}, {0x3f11c000}, {0x3f11e000}, 
+    {0x3f120000}, {0x3f122000}, {0x3f124000}, {0x3f126000}, 
+    {0x3f128000}, {0x3f12a000}, {0x3f12c000}, {0x3f12e000}, 
+    {0x3f130000}, {0x3f132000}, {0x3f134000}, {0x3f136000}, 
+    {0x3f138000}, {0x3f13a000}, {0x3f13c000}, {0x3f13e000}, 
+    {0x3f140000}, {0x3f142000}, {0x3f144000}, {0x3f146000}, 
+    {0x3f148000}, {0x3f14a000}, {0x3f14c000}, {0x3f14e000}, 
+    {0x3f150000}, {0x3f152000}, {0x3f154000}, {0x3f156000}, 
+    {0x3f158000}, {0x3f15a000}, {0x3f15c000}, {0x3f15e000}, 
+    {0x3f160000}, {0x3f162000}, {0x3f164000}, {0x3f166000}, 
+    {0x3f168000}, {0x3f16a000}, {0x3f16c000}, {0x3f16e000}, 
+    {0x3f170000}, {0x3f172000}, {0x3f174000}, {0x3f176000}, 
+    {0x3f178000}, {0x3f17a000}, {0x3f17c000}, {0x3f17e000}, 
+    {0x3f180000}, {0x3f182000}, {0x3f184000}, {0x3f186000}, 
+    {0x3f188000}, {0x3f18a000}, {0x3f18c000}, {0x3f18e000}, 
+    {0x3f190000}, {0x3f192000}, {0x3f194000}, {0x3f196000}, 
+    {0x3f198000}, {0x3f19a000}, {0x3f19c000}, {0x3f19e000}, 
+    {0x3f1a0000}, {0x3f1a2000}, {0x3f1a4000}, {0x3f1a6000}, 
+    {0x3f1a8000}, {0x3f1aa000}, {0x3f1ac000}, {0x3f1ae000}, 
+    {0x3f1b0000}, {0x3f1b2000}, {0x3f1b4000}, {0x3f1b6000}, 
+    {0x3f1b8000}, {0x3f1ba000}, {0x3f1bc000}, {0x3f1be000}, 
+    {0x3f1c0000}, {0x3f1c2000}, {0x3f1c4000}, {0x3f1c6000}, 
+    {0x3f1c8000}, {0x3f1ca000}, {0x3f1cc000}, {0x3f1ce000}, 
+    {0x3f1d0000}, {0x3f1d2000}, {0x3f1d4000}, {0x3f1d6000}, 
+    {0x3f1d8000}, {0x3f1da000}, {0x3f1dc000}, {0x3f1de000}, 
+    {0x3f1e0000}, {0x3f1e2000}, {0x3f1e4000}, {0x3f1e6000}, 
+    {0x3f1e8000}, {0x3f1ea000}, {0x3f1ec000}, {0x3f1ee000}, 
+    {0x3f1f0000}, {0x3f1f2000}, {0x3f1f4000}, {0x3f1f6000}, 
+    {0x3f1f8000}, {0x3f1fa000}, {0x3f1fc000}, {0x3f1fe000}, 
+    {0x3f200000}, {0x3f202000}, {0x3f204000}, {0x3f206000}, 
+    {0x3f208000}, {0x3f20a000}, {0x3f20c000}, {0x3f20e000}, 
+    {0x3f210000}, {0x3f212000}, {0x3f214000}, {0x3f216000}, 
+    {0x3f218000}, {0x3f21a000}, {0x3f21c000}, {0x3f21e000}, 
+    {0x3f220000}, {0x3f222000}, {0x3f224000}, {0x3f226000}, 
+    {0x3f228000}, {0x3f22a000}, {0x3f22c000}, {0x3f22e000}, 
+    {0x3f230000}, {0x3f232000}, {0x3f234000}, {0x3f236000}, 
+    {0x3f238000}, {0x3f23a000}, {0x3f23c000}, {0x3f23e000}, 
+    {0x3f240000}, {0x3f242000}, {0x3f244000}, {0x3f246000}, 
+    {0x3f248000}, {0x3f24a000}, {0x3f24c000}, {0x3f24e000}, 
+    {0x3f250000}, {0x3f252000}, {0x3f254000}, {0x3f256000}, 
+    {0x3f258000}, {0x3f25a000}, {0x3f25c000}, {0x3f25e000}, 
+    {0x3f260000}, {0x3f262000}, {0x3f264000}, {0x3f266000}, 
+    {0x3f268000}, {0x3f26a000}, {0x3f26c000}, {0x3f26e000}, 
+    {0x3f270000}, {0x3f272000}, {0x3f274000}, {0x3f276000}, 
+    {0x3f278000}, {0x3f27a000}, {0x3f27c000}, {0x3f27e000}, 
+    {0x3f280000}, {0x3f282000}, {0x3f284000}, {0x3f286000}, 
+    {0x3f288000}, {0x3f28a000}, {0x3f28c000}, {0x3f28e000}, 
+    {0x3f290000}, {0x3f292000}, {0x3f294000}, {0x3f296000}, 
+    {0x3f298000}, {0x3f29a000}, {0x3f29c000}, {0x3f29e000}, 
+    {0x3f2a0000}, {0x3f2a2000}, {0x3f2a4000}, {0x3f2a6000}, 
+    {0x3f2a8000}, {0x3f2aa000}, {0x3f2ac000}, {0x3f2ae000}, 
+    {0x3f2b0000}, {0x3f2b2000}, {0x3f2b4000}, {0x3f2b6000}, 
+    {0x3f2b8000}, {0x3f2ba000}, {0x3f2bc000}, {0x3f2be000}, 
+    {0x3f2c0000}, {0x3f2c2000}, {0x3f2c4000}, {0x3f2c6000}, 
+    {0x3f2c8000}, {0x3f2ca000}, {0x3f2cc000}, {0x3f2ce000}, 
+    {0x3f2d0000}, {0x3f2d2000}, {0x3f2d4000}, {0x3f2d6000}, 
+    {0x3f2d8000}, {0x3f2da000}, {0x3f2dc000}, {0x3f2de000}, 
+    {0x3f2e0000}, {0x3f2e2000}, {0x3f2e4000}, {0x3f2e6000}, 
+    {0x3f2e8000}, {0x3f2ea000}, {0x3f2ec000}, {0x3f2ee000}, 
+    {0x3f2f0000}, {0x3f2f2000}, {0x3f2f4000}, {0x3f2f6000}, 
+    {0x3f2f8000}, {0x3f2fa000}, {0x3f2fc000}, {0x3f2fe000}, 
+    {0x3f300000}, {0x3f302000}, {0x3f304000}, {0x3f306000}, 
+    {0x3f308000}, {0x3f30a000}, {0x3f30c000}, {0x3f30e000}, 
+    {0x3f310000}, {0x3f312000}, {0x3f314000}, {0x3f316000}, 
+    {0x3f318000}, {0x3f31a000}, {0x3f31c000}, {0x3f31e000}, 
+    {0x3f320000}, {0x3f322000}, {0x3f324000}, {0x3f326000}, 
+    {0x3f328000}, {0x3f32a000}, {0x3f32c000}, {0x3f32e000}, 
+    {0x3f330000}, {0x3f332000}, {0x3f334000}, {0x3f336000}, 
+    {0x3f338000}, {0x3f33a000}, {0x3f33c000}, {0x3f33e000}, 
+    {0x3f340000}, {0x3f342000}, {0x3f344000}, {0x3f346000}, 
+    {0x3f348000}, {0x3f34a000}, {0x3f34c000}, {0x3f34e000}, 
+    {0x3f350000}, {0x3f352000}, {0x3f354000}, {0x3f356000}, 
+    {0x3f358000}, {0x3f35a000}, {0x3f35c000}, {0x3f35e000}, 
+    {0x3f360000}, {0x3f362000}, {0x3f364000}, {0x3f366000}, 
+    {0x3f368000}, {0x3f36a000}, {0x3f36c000}, {0x3f36e000}, 
+    {0x3f370000}, {0x3f372000}, {0x3f374000}, {0x3f376000}, 
+    {0x3f378000}, {0x3f37a000}, {0x3f37c000}, {0x3f37e000}, 
+    {0x3f380000}, {0x3f382000}, {0x3f384000}, {0x3f386000}, 
+    {0x3f388000}, {0x3f38a000}, {0x3f38c000}, {0x3f38e000}, 
+    {0x3f390000}, {0x3f392000}, {0x3f394000}, {0x3f396000}, 
+    {0x3f398000}, {0x3f39a000}, {0x3f39c000}, {0x3f39e000}, 
+    {0x3f3a0000}, {0x3f3a2000}, {0x3f3a4000}, {0x3f3a6000}, 
+    {0x3f3a8000}, {0x3f3aa000}, {0x3f3ac000}, {0x3f3ae000}, 
+    {0x3f3b0000}, {0x3f3b2000}, {0x3f3b4000}, {0x3f3b6000}, 
+    {0x3f3b8000}, {0x3f3ba000}, {0x3f3bc000}, {0x3f3be000}, 
+    {0x3f3c0000}, {0x3f3c2000}, {0x3f3c4000}, {0x3f3c6000}, 
+    {0x3f3c8000}, {0x3f3ca000}, {0x3f3cc000}, {0x3f3ce000}, 
+    {0x3f3d0000}, {0x3f3d2000}, {0x3f3d4000}, {0x3f3d6000}, 
+    {0x3f3d8000}, {0x3f3da000}, {0x3f3dc000}, {0x3f3de000}, 
+    {0x3f3e0000}, {0x3f3e2000}, {0x3f3e4000}, {0x3f3e6000}, 
+    {0x3f3e8000}, {0x3f3ea000}, {0x3f3ec000}, {0x3f3ee000}, 
+    {0x3f3f0000}, {0x3f3f2000}, {0x3f3f4000}, {0x3f3f6000}, 
+    {0x3f3f8000}, {0x3f3fa000}, {0x3f3fc000}, {0x3f3fe000}, 
+    {0x3f400000}, {0x3f402000}, {0x3f404000}, {0x3f406000}, 
+    {0x3f408000}, {0x3f40a000}, {0x3f40c000}, {0x3f40e000}, 
+    {0x3f410000}, {0x3f412000}, {0x3f414000}, {0x3f416000}, 
+    {0x3f418000}, {0x3f41a000}, {0x3f41c000}, {0x3f41e000}, 
+    {0x3f420000}, {0x3f422000}, {0x3f424000}, {0x3f426000}, 
+    {0x3f428000}, {0x3f42a000}, {0x3f42c000}, {0x3f42e000}, 
+    {0x3f430000}, {0x3f432000}, {0x3f434000}, {0x3f436000}, 
+    {0x3f438000}, {0x3f43a000}, {0x3f43c000}, {0x3f43e000}, 
+    {0x3f440000}, {0x3f442000}, {0x3f444000}, {0x3f446000}, 
+    {0x3f448000}, {0x3f44a000}, {0x3f44c000}, {0x3f44e000}, 
+    {0x3f450000}, {0x3f452000}, {0x3f454000}, {0x3f456000}, 
+    {0x3f458000}, {0x3f45a000}, {0x3f45c000}, {0x3f45e000}, 
+    {0x3f460000}, {0x3f462000}, {0x3f464000}, {0x3f466000}, 
+    {0x3f468000}, {0x3f46a000}, {0x3f46c000}, {0x3f46e000}, 
+    {0x3f470000}, {0x3f472000}, {0x3f474000}, {0x3f476000}, 
+    {0x3f478000}, {0x3f47a000}, {0x3f47c000}, {0x3f47e000}, 
+    {0x3f480000}, {0x3f482000}, {0x3f484000}, {0x3f486000}, 
+    {0x3f488000}, {0x3f48a000}, {0x3f48c000}, {0x3f48e000}, 
+    {0x3f490000}, {0x3f492000}, {0x3f494000}, {0x3f496000}, 
+    {0x3f498000}, {0x3f49a000}, {0x3f49c000}, {0x3f49e000}, 
+    {0x3f4a0000}, {0x3f4a2000}, {0x3f4a4000}, {0x3f4a6000}, 
+    {0x3f4a8000}, {0x3f4aa000}, {0x3f4ac000}, {0x3f4ae000}, 
+    {0x3f4b0000}, {0x3f4b2000}, {0x3f4b4000}, {0x3f4b6000}, 
+    {0x3f4b8000}, {0x3f4ba000}, {0x3f4bc000}, {0x3f4be000}, 
+    {0x3f4c0000}, {0x3f4c2000}, {0x3f4c4000}, {0x3f4c6000}, 
+    {0x3f4c8000}, {0x3f4ca000}, {0x3f4cc000}, {0x3f4ce000}, 
+    {0x3f4d0000}, {0x3f4d2000}, {0x3f4d4000}, {0x3f4d6000}, 
+    {0x3f4d8000}, {0x3f4da000}, {0x3f4dc000}, {0x3f4de000}, 
+    {0x3f4e0000}, {0x3f4e2000}, {0x3f4e4000}, {0x3f4e6000}, 
+    {0x3f4e8000}, {0x3f4ea000}, {0x3f4ec000}, {0x3f4ee000}, 
+    {0x3f4f0000}, {0x3f4f2000}, {0x3f4f4000}, {0x3f4f6000}, 
+    {0x3f4f8000}, {0x3f4fa000}, {0x3f4fc000}, {0x3f4fe000}, 
+    {0x3f500000}, {0x3f502000}, {0x3f504000}, {0x3f506000}, 
+    {0x3f508000}, {0x3f50a000}, {0x3f50c000}, {0x3f50e000}, 
+    {0x3f510000}, {0x3f512000}, {0x3f514000}, {0x3f516000}, 
+    {0x3f518000}, {0x3f51a000}, {0x3f51c000}, {0x3f51e000}, 
+    {0x3f520000}, {0x3f522000}, {0x3f524000}, {0x3f526000}, 
+    {0x3f528000}, {0x3f52a000}, {0x3f52c000}, {0x3f52e000}, 
+    {0x3f530000}, {0x3f532000}, {0x3f534000}, {0x3f536000}, 
+    {0x3f538000}, {0x3f53a000}, {0x3f53c000}, {0x3f53e000}, 
+    {0x3f540000}, {0x3f542000}, {0x3f544000}, {0x3f546000}, 
+    {0x3f548000}, {0x3f54a000}, {0x3f54c000}, {0x3f54e000}, 
+    {0x3f550000}, {0x3f552000}, {0x3f554000}, {0x3f556000}, 
+    {0x3f558000}, {0x3f55a000}, {0x3f55c000}, {0x3f55e000}, 
+    {0x3f560000}, {0x3f562000}, {0x3f564000}, {0x3f566000}, 
+    {0x3f568000}, {0x3f56a000}, {0x3f56c000}, {0x3f56e000}, 
+    {0x3f570000}, {0x3f572000}, {0x3f574000}, {0x3f576000}, 
+    {0x3f578000}, {0x3f57a000}, {0x3f57c000}, {0x3f57e000}, 
+    {0x3f580000}, {0x3f582000}, {0x3f584000}, {0x3f586000}, 
+    {0x3f588000}, {0x3f58a000}, {0x3f58c000}, {0x3f58e000}, 
+    {0x3f590000}, {0x3f592000}, {0x3f594000}, {0x3f596000}, 
+    {0x3f598000}, {0x3f59a000}, {0x3f59c000}, {0x3f59e000}, 
+    {0x3f5a0000}, {0x3f5a2000}, {0x3f5a4000}, {0x3f5a6000}, 
+    {0x3f5a8000}, {0x3f5aa000}, {0x3f5ac000}, {0x3f5ae000}, 
+    {0x3f5b0000}, {0x3f5b2000}, {0x3f5b4000}, {0x3f5b6000}, 
+    {0x3f5b8000}, {0x3f5ba000}, {0x3f5bc000}, {0x3f5be000}, 
+    {0x3f5c0000}, {0x3f5c2000}, {0x3f5c4000}, {0x3f5c6000}, 
+    {0x3f5c8000}, {0x3f5ca000}, {0x3f5cc000}, {0x3f5ce000}, 
+    {0x3f5d0000}, {0x3f5d2000}, {0x3f5d4000}, {0x3f5d6000}, 
+    {0x3f5d8000}, {0x3f5da000}, {0x3f5dc000}, {0x3f5de000}, 
+    {0x3f5e0000}, {0x3f5e2000}, {0x3f5e4000}, {0x3f5e6000}, 
+    {0x3f5e8000}, {0x3f5ea000}, {0x3f5ec000}, {0x3f5ee000}, 
+    {0x3f5f0000}, {0x3f5f2000}, {0x3f5f4000}, {0x3f5f6000}, 
+    {0x3f5f8000}, {0x3f5fa000}, {0x3f5fc000}, {0x3f5fe000}, 
+    {0x3f600000}, {0x3f602000}, {0x3f604000}, {0x3f606000}, 
+    {0x3f608000}, {0x3f60a000}, {0x3f60c000}, {0x3f60e000}, 
+    {0x3f610000}, {0x3f612000}, {0x3f614000}, {0x3f616000}, 
+    {0x3f618000}, {0x3f61a000}, {0x3f61c000}, {0x3f61e000}, 
+    {0x3f620000}, {0x3f622000}, {0x3f624000}, {0x3f626000}, 
+    {0x3f628000}, {0x3f62a000}, {0x3f62c000}, {0x3f62e000}, 
+    {0x3f630000}, {0x3f632000}, {0x3f634000}, {0x3f636000}, 
+    {0x3f638000}, {0x3f63a000}, {0x3f63c000}, {0x3f63e000}, 
+    {0x3f640000}, {0x3f642000}, {0x3f644000}, {0x3f646000}, 
+    {0x3f648000}, {0x3f64a000}, {0x3f64c000}, {0x3f64e000}, 
+    {0x3f650000}, {0x3f652000}, {0x3f654000}, {0x3f656000}, 
+    {0x3f658000}, {0x3f65a000}, {0x3f65c000}, {0x3f65e000}, 
+    {0x3f660000}, {0x3f662000}, {0x3f664000}, {0x3f666000}, 
+    {0x3f668000}, {0x3f66a000}, {0x3f66c000}, {0x3f66e000}, 
+    {0x3f670000}, {0x3f672000}, {0x3f674000}, {0x3f676000}, 
+    {0x3f678000}, {0x3f67a000}, {0x3f67c000}, {0x3f67e000}, 
+    {0x3f680000}, {0x3f682000}, {0x3f684000}, {0x3f686000}, 
+    {0x3f688000}, {0x3f68a000}, {0x3f68c000}, {0x3f68e000}, 
+    {0x3f690000}, {0x3f692000}, {0x3f694000}, {0x3f696000}, 
+    {0x3f698000}, {0x3f69a000}, {0x3f69c000}, {0x3f69e000}, 
+    {0x3f6a0000}, {0x3f6a2000}, {0x3f6a4000}, {0x3f6a6000}, 
+    {0x3f6a8000}, {0x3f6aa000}, {0x3f6ac000}, {0x3f6ae000}, 
+    {0x3f6b0000}, {0x3f6b2000}, {0x3f6b4000}, {0x3f6b6000}, 
+    {0x3f6b8000}, {0x3f6ba000}, {0x3f6bc000}, {0x3f6be000}, 
+    {0x3f6c0000}, {0x3f6c2000}, {0x3f6c4000}, {0x3f6c6000}, 
+    {0x3f6c8000}, {0x3f6ca000}, {0x3f6cc000}, {0x3f6ce000}, 
+    {0x3f6d0000}, {0x3f6d2000}, {0x3f6d4000}, {0x3f6d6000}, 
+    {0x3f6d8000}, {0x3f6da000}, {0x3f6dc000}, {0x3f6de000}, 
+    {0x3f6e0000}, {0x3f6e2000}, {0x3f6e4000}, {0x3f6e6000}, 
+    {0x3f6e8000}, {0x3f6ea000}, {0x3f6ec000}, {0x3f6ee000}, 
+    {0x3f6f0000}, {0x3f6f2000}, {0x3f6f4000}, {0x3f6f6000}, 
+    {0x3f6f8000}, {0x3f6fa000}, {0x3f6fc000}, {0x3f6fe000}, 
+    {0x3f700000}, {0x3f702000}, {0x3f704000}, {0x3f706000}, 
+    {0x3f708000}, {0x3f70a000}, {0x3f70c000}, {0x3f70e000}, 
+    {0x3f710000}, {0x3f712000}, {0x3f714000}, {0x3f716000}, 
+    {0x3f718000}, {0x3f71a000}, {0x3f71c000}, {0x3f71e000}, 
+    {0x3f720000}, {0x3f722000}, {0x3f724000}, {0x3f726000}, 
+    {0x3f728000}, {0x3f72a000}, {0x3f72c000}, {0x3f72e000}, 
+    {0x3f730000}, {0x3f732000}, {0x3f734000}, {0x3f736000}, 
+    {0x3f738000}, {0x3f73a000}, {0x3f73c000}, {0x3f73e000}, 
+    {0x3f740000}, {0x3f742000}, {0x3f744000}, {0x3f746000}, 
+    {0x3f748000}, {0x3f74a000}, {0x3f74c000}, {0x3f74e000}, 
+    {0x3f750000}, {0x3f752000}, {0x3f754000}, {0x3f756000}, 
+    {0x3f758000}, {0x3f75a000}, {0x3f75c000}, {0x3f75e000}, 
+    {0x3f760000}, {0x3f762000}, {0x3f764000}, {0x3f766000}, 
+    {0x3f768000}, {0x3f76a000}, {0x3f76c000}, {0x3f76e000}, 
+    {0x3f770000}, {0x3f772000}, {0x3f774000}, {0x3f776000}, 
+    {0x3f778000}, {0x3f77a000}, {0x3f77c000}, {0x3f77e000}, 
+    {0x3f780000}, {0x3f782000}, {0x3f784000}, {0x3f786000}, 
+    {0x3f788000}, {0x3f78a000}, {0x3f78c000}, {0x3f78e000}, 
+    {0x3f790000}, {0x3f792000}, {0x3f794000}, {0x3f796000}, 
+    {0x3f798000}, {0x3f79a000}, {0x3f79c000}, {0x3f79e000}, 
+    {0x3f7a0000}, {0x3f7a2000}, {0x3f7a4000}, {0x3f7a6000}, 
+    {0x3f7a8000}, {0x3f7aa000}, {0x3f7ac000}, {0x3f7ae000}, 
+    {0x3f7b0000}, {0x3f7b2000}, {0x3f7b4000}, {0x3f7b6000}, 
+    {0x3f7b8000}, {0x3f7ba000}, {0x3f7bc000}, {0x3f7be000}, 
+    {0x3f7c0000}, {0x3f7c2000}, {0x3f7c4000}, {0x3f7c6000}, 
+    {0x3f7c8000}, {0x3f7ca000}, {0x3f7cc000}, {0x3f7ce000}, 
+    {0x3f7d0000}, {0x3f7d2000}, {0x3f7d4000}, {0x3f7d6000}, 
+    {0x3f7d8000}, {0x3f7da000}, {0x3f7dc000}, {0x3f7de000}, 
+    {0x3f7e0000}, {0x3f7e2000}, {0x3f7e4000}, {0x3f7e6000}, 
+    {0x3f7e8000}, {0x3f7ea000}, {0x3f7ec000}, {0x3f7ee000}, 
+    {0x3f7f0000}, {0x3f7f2000}, {0x3f7f4000}, {0x3f7f6000}, 
+    {0x3f7f8000}, {0x3f7fa000}, {0x3f7fc000}, {0x3f7fe000}, 
+    {0x3f800000}, {0x3f802000}, {0x3f804000}, {0x3f806000}, 
+    {0x3f808000}, {0x3f80a000}, {0x3f80c000}, {0x3f80e000}, 
+    {0x3f810000}, {0x3f812000}, {0x3f814000}, {0x3f816000}, 
+    {0x3f818000}, {0x3f81a000}, {0x3f81c000}, {0x3f81e000}, 
+    {0x3f820000}, {0x3f822000}, {0x3f824000}, {0x3f826000}, 
+    {0x3f828000}, {0x3f82a000}, {0x3f82c000}, {0x3f82e000}, 
+    {0x3f830000}, {0x3f832000}, {0x3f834000}, {0x3f836000}, 
+    {0x3f838000}, {0x3f83a000}, {0x3f83c000}, {0x3f83e000}, 
+    {0x3f840000}, {0x3f842000}, {0x3f844000}, {0x3f846000}, 
+    {0x3f848000}, {0x3f84a000}, {0x3f84c000}, {0x3f84e000}, 
+    {0x3f850000}, {0x3f852000}, {0x3f854000}, {0x3f856000}, 
+    {0x3f858000}, {0x3f85a000}, {0x3f85c000}, {0x3f85e000}, 
+    {0x3f860000}, {0x3f862000}, {0x3f864000}, {0x3f866000}, 
+    {0x3f868000}, {0x3f86a000}, {0x3f86c000}, {0x3f86e000}, 
+    {0x3f870000}, {0x3f872000}, {0x3f874000}, {0x3f876000}, 
+    {0x3f878000}, {0x3f87a000}, {0x3f87c000}, {0x3f87e000}, 
+    {0x3f880000}, {0x3f882000}, {0x3f884000}, {0x3f886000}, 
+    {0x3f888000}, {0x3f88a000}, {0x3f88c000}, {0x3f88e000}, 
+    {0x3f890000}, {0x3f892000}, {0x3f894000}, {0x3f896000}, 
+    {0x3f898000}, {0x3f89a000}, {0x3f89c000}, {0x3f89e000}, 
+    {0x3f8a0000}, {0x3f8a2000}, {0x3f8a4000}, {0x3f8a6000}, 
+    {0x3f8a8000}, {0x3f8aa000}, {0x3f8ac000}, {0x3f8ae000}, 
+    {0x3f8b0000}, {0x3f8b2000}, {0x3f8b4000}, {0x3f8b6000}, 
+    {0x3f8b8000}, {0x3f8ba000}, {0x3f8bc000}, {0x3f8be000}, 
+    {0x3f8c0000}, {0x3f8c2000}, {0x3f8c4000}, {0x3f8c6000}, 
+    {0x3f8c8000}, {0x3f8ca000}, {0x3f8cc000}, {0x3f8ce000}, 
+    {0x3f8d0000}, {0x3f8d2000}, {0x3f8d4000}, {0x3f8d6000}, 
+    {0x3f8d8000}, {0x3f8da000}, {0x3f8dc000}, {0x3f8de000}, 
+    {0x3f8e0000}, {0x3f8e2000}, {0x3f8e4000}, {0x3f8e6000}, 
+    {0x3f8e8000}, {0x3f8ea000}, {0x3f8ec000}, {0x3f8ee000}, 
+    {0x3f8f0000}, {0x3f8f2000}, {0x3f8f4000}, {0x3f8f6000}, 
+    {0x3f8f8000}, {0x3f8fa000}, {0x3f8fc000}, {0x3f8fe000}, 
+    {0x3f900000}, {0x3f902000}, {0x3f904000}, {0x3f906000}, 
+    {0x3f908000}, {0x3f90a000}, {0x3f90c000}, {0x3f90e000}, 
+    {0x3f910000}, {0x3f912000}, {0x3f914000}, {0x3f916000}, 
+    {0x3f918000}, {0x3f91a000}, {0x3f91c000}, {0x3f91e000}, 
+    {0x3f920000}, {0x3f922000}, {0x3f924000}, {0x3f926000}, 
+    {0x3f928000}, {0x3f92a000}, {0x3f92c000}, {0x3f92e000}, 
+    {0x3f930000}, {0x3f932000}, {0x3f934000}, {0x3f936000}, 
+    {0x3f938000}, {0x3f93a000}, {0x3f93c000}, {0x3f93e000}, 
+    {0x3f940000}, {0x3f942000}, {0x3f944000}, {0x3f946000}, 
+    {0x3f948000}, {0x3f94a000}, {0x3f94c000}, {0x3f94e000}, 
+    {0x3f950000}, {0x3f952000}, {0x3f954000}, {0x3f956000}, 
+    {0x3f958000}, {0x3f95a000}, {0x3f95c000}, {0x3f95e000}, 
+    {0x3f960000}, {0x3f962000}, {0x3f964000}, {0x3f966000}, 
+    {0x3f968000}, {0x3f96a000}, {0x3f96c000}, {0x3f96e000}, 
+    {0x3f970000}, {0x3f972000}, {0x3f974000}, {0x3f976000}, 
+    {0x3f978000}, {0x3f97a000}, {0x3f97c000}, {0x3f97e000}, 
+    {0x3f980000}, {0x3f982000}, {0x3f984000}, {0x3f986000}, 
+    {0x3f988000}, {0x3f98a000}, {0x3f98c000}, {0x3f98e000}, 
+    {0x3f990000}, {0x3f992000}, {0x3f994000}, {0x3f996000}, 
+    {0x3f998000}, {0x3f99a000}, {0x3f99c000}, {0x3f99e000}, 
+    {0x3f9a0000}, {0x3f9a2000}, {0x3f9a4000}, {0x3f9a6000}, 
+    {0x3f9a8000}, {0x3f9aa000}, {0x3f9ac000}, {0x3f9ae000}, 
+    {0x3f9b0000}, {0x3f9b2000}, {0x3f9b4000}, {0x3f9b6000}, 
+    {0x3f9b8000}, {0x3f9ba000}, {0x3f9bc000}, {0x3f9be000}, 
+    {0x3f9c0000}, {0x3f9c2000}, {0x3f9c4000}, {0x3f9c6000}, 
+    {0x3f9c8000}, {0x3f9ca000}, {0x3f9cc000}, {0x3f9ce000}, 
+    {0x3f9d0000}, {0x3f9d2000}, {0x3f9d4000}, {0x3f9d6000}, 
+    {0x3f9d8000}, {0x3f9da000}, {0x3f9dc000}, {0x3f9de000}, 
+    {0x3f9e0000}, {0x3f9e2000}, {0x3f9e4000}, {0x3f9e6000}, 
+    {0x3f9e8000}, {0x3f9ea000}, {0x3f9ec000}, {0x3f9ee000}, 
+    {0x3f9f0000}, {0x3f9f2000}, {0x3f9f4000}, {0x3f9f6000}, 
+    {0x3f9f8000}, {0x3f9fa000}, {0x3f9fc000}, {0x3f9fe000}, 
+    {0x3fa00000}, {0x3fa02000}, {0x3fa04000}, {0x3fa06000}, 
+    {0x3fa08000}, {0x3fa0a000}, {0x3fa0c000}, {0x3fa0e000}, 
+    {0x3fa10000}, {0x3fa12000}, {0x3fa14000}, {0x3fa16000}, 
+    {0x3fa18000}, {0x3fa1a000}, {0x3fa1c000}, {0x3fa1e000}, 
+    {0x3fa20000}, {0x3fa22000}, {0x3fa24000}, {0x3fa26000}, 
+    {0x3fa28000}, {0x3fa2a000}, {0x3fa2c000}, {0x3fa2e000}, 
+    {0x3fa30000}, {0x3fa32000}, {0x3fa34000}, {0x3fa36000}, 
+    {0x3fa38000}, {0x3fa3a000}, {0x3fa3c000}, {0x3fa3e000}, 
+    {0x3fa40000}, {0x3fa42000}, {0x3fa44000}, {0x3fa46000}, 
+    {0x3fa48000}, {0x3fa4a000}, {0x3fa4c000}, {0x3fa4e000}, 
+    {0x3fa50000}, {0x3fa52000}, {0x3fa54000}, {0x3fa56000}, 
+    {0x3fa58000}, {0x3fa5a000}, {0x3fa5c000}, {0x3fa5e000}, 
+    {0x3fa60000}, {0x3fa62000}, {0x3fa64000}, {0x3fa66000}, 
+    {0x3fa68000}, {0x3fa6a000}, {0x3fa6c000}, {0x3fa6e000}, 
+    {0x3fa70000}, {0x3fa72000}, {0x3fa74000}, {0x3fa76000}, 
+    {0x3fa78000}, {0x3fa7a000}, {0x3fa7c000}, {0x3fa7e000}, 
+    {0x3fa80000}, {0x3fa82000}, {0x3fa84000}, {0x3fa86000}, 
+    {0x3fa88000}, {0x3fa8a000}, {0x3fa8c000}, {0x3fa8e000}, 
+    {0x3fa90000}, {0x3fa92000}, {0x3fa94000}, {0x3fa96000}, 
+    {0x3fa98000}, {0x3fa9a000}, {0x3fa9c000}, {0x3fa9e000}, 
+    {0x3faa0000}, {0x3faa2000}, {0x3faa4000}, {0x3faa6000}, 
+    {0x3faa8000}, {0x3faaa000}, {0x3faac000}, {0x3faae000}, 
+    {0x3fab0000}, {0x3fab2000}, {0x3fab4000}, {0x3fab6000}, 
+    {0x3fab8000}, {0x3faba000}, {0x3fabc000}, {0x3fabe000}, 
+    {0x3fac0000}, {0x3fac2000}, {0x3fac4000}, {0x3fac6000}, 
+    {0x3fac8000}, {0x3faca000}, {0x3facc000}, {0x3face000}, 
+    {0x3fad0000}, {0x3fad2000}, {0x3fad4000}, {0x3fad6000}, 
+    {0x3fad8000}, {0x3fada000}, {0x3fadc000}, {0x3fade000}, 
+    {0x3fae0000}, {0x3fae2000}, {0x3fae4000}, {0x3fae6000}, 
+    {0x3fae8000}, {0x3faea000}, {0x3faec000}, {0x3faee000}, 
+    {0x3faf0000}, {0x3faf2000}, {0x3faf4000}, {0x3faf6000}, 
+    {0x3faf8000}, {0x3fafa000}, {0x3fafc000}, {0x3fafe000}, 
+    {0x3fb00000}, {0x3fb02000}, {0x3fb04000}, {0x3fb06000}, 
+    {0x3fb08000}, {0x3fb0a000}, {0x3fb0c000}, {0x3fb0e000}, 
+    {0x3fb10000}, {0x3fb12000}, {0x3fb14000}, {0x3fb16000}, 
+    {0x3fb18000}, {0x3fb1a000}, {0x3fb1c000}, {0x3fb1e000}, 
+    {0x3fb20000}, {0x3fb22000}, {0x3fb24000}, {0x3fb26000}, 
+    {0x3fb28000}, {0x3fb2a000}, {0x3fb2c000}, {0x3fb2e000}, 
+    {0x3fb30000}, {0x3fb32000}, {0x3fb34000}, {0x3fb36000}, 
+    {0x3fb38000}, {0x3fb3a000}, {0x3fb3c000}, {0x3fb3e000}, 
+    {0x3fb40000}, {0x3fb42000}, {0x3fb44000}, {0x3fb46000}, 
+    {0x3fb48000}, {0x3fb4a000}, {0x3fb4c000}, {0x3fb4e000}, 
+    {0x3fb50000}, {0x3fb52000}, {0x3fb54000}, {0x3fb56000}, 
+    {0x3fb58000}, {0x3fb5a000}, {0x3fb5c000}, {0x3fb5e000}, 
+    {0x3fb60000}, {0x3fb62000}, {0x3fb64000}, {0x3fb66000}, 
+    {0x3fb68000}, {0x3fb6a000}, {0x3fb6c000}, {0x3fb6e000}, 
+    {0x3fb70000}, {0x3fb72000}, {0x3fb74000}, {0x3fb76000}, 
+    {0x3fb78000}, {0x3fb7a000}, {0x3fb7c000}, {0x3fb7e000}, 
+    {0x3fb80000}, {0x3fb82000}, {0x3fb84000}, {0x3fb86000}, 
+    {0x3fb88000}, {0x3fb8a000}, {0x3fb8c000}, {0x3fb8e000}, 
+    {0x3fb90000}, {0x3fb92000}, {0x3fb94000}, {0x3fb96000}, 
+    {0x3fb98000}, {0x3fb9a000}, {0x3fb9c000}, {0x3fb9e000}, 
+    {0x3fba0000}, {0x3fba2000}, {0x3fba4000}, {0x3fba6000}, 
+    {0x3fba8000}, {0x3fbaa000}, {0x3fbac000}, {0x3fbae000}, 
+    {0x3fbb0000}, {0x3fbb2000}, {0x3fbb4000}, {0x3fbb6000}, 
+    {0x3fbb8000}, {0x3fbba000}, {0x3fbbc000}, {0x3fbbe000}, 
+    {0x3fbc0000}, {0x3fbc2000}, {0x3fbc4000}, {0x3fbc6000}, 
+    {0x3fbc8000}, {0x3fbca000}, {0x3fbcc000}, {0x3fbce000}, 
+    {0x3fbd0000}, {0x3fbd2000}, {0x3fbd4000}, {0x3fbd6000}, 
+    {0x3fbd8000}, {0x3fbda000}, {0x3fbdc000}, {0x3fbde000}, 
+    {0x3fbe0000}, {0x3fbe2000}, {0x3fbe4000}, {0x3fbe6000}, 
+    {0x3fbe8000}, {0x3fbea000}, {0x3fbec000}, {0x3fbee000}, 
+    {0x3fbf0000}, {0x3fbf2000}, {0x3fbf4000}, {0x3fbf6000}, 
+    {0x3fbf8000}, {0x3fbfa000}, {0x3fbfc000}, {0x3fbfe000}, 
+    {0x3fc00000}, {0x3fc02000}, {0x3fc04000}, {0x3fc06000}, 
+    {0x3fc08000}, {0x3fc0a000}, {0x3fc0c000}, {0x3fc0e000}, 
+    {0x3fc10000}, {0x3fc12000}, {0x3fc14000}, {0x3fc16000}, 
+    {0x3fc18000}, {0x3fc1a000}, {0x3fc1c000}, {0x3fc1e000}, 
+    {0x3fc20000}, {0x3fc22000}, {0x3fc24000}, {0x3fc26000}, 
+    {0x3fc28000}, {0x3fc2a000}, {0x3fc2c000}, {0x3fc2e000}, 
+    {0x3fc30000}, {0x3fc32000}, {0x3fc34000}, {0x3fc36000}, 
+    {0x3fc38000}, {0x3fc3a000}, {0x3fc3c000}, {0x3fc3e000}, 
+    {0x3fc40000}, {0x3fc42000}, {0x3fc44000}, {0x3fc46000}, 
+    {0x3fc48000}, {0x3fc4a000}, {0x3fc4c000}, {0x3fc4e000}, 
+    {0x3fc50000}, {0x3fc52000}, {0x3fc54000}, {0x3fc56000}, 
+    {0x3fc58000}, {0x3fc5a000}, {0x3fc5c000}, {0x3fc5e000}, 
+    {0x3fc60000}, {0x3fc62000}, {0x3fc64000}, {0x3fc66000}, 
+    {0x3fc68000}, {0x3fc6a000}, {0x3fc6c000}, {0x3fc6e000}, 
+    {0x3fc70000}, {0x3fc72000}, {0x3fc74000}, {0x3fc76000}, 
+    {0x3fc78000}, {0x3fc7a000}, {0x3fc7c000}, {0x3fc7e000}, 
+    {0x3fc80000}, {0x3fc82000}, {0x3fc84000}, {0x3fc86000}, 
+    {0x3fc88000}, {0x3fc8a000}, {0x3fc8c000}, {0x3fc8e000}, 
+    {0x3fc90000}, {0x3fc92000}, {0x3fc94000}, {0x3fc96000}, 
+    {0x3fc98000}, {0x3fc9a000}, {0x3fc9c000}, {0x3fc9e000}, 
+    {0x3fca0000}, {0x3fca2000}, {0x3fca4000}, {0x3fca6000}, 
+    {0x3fca8000}, {0x3fcaa000}, {0x3fcac000}, {0x3fcae000}, 
+    {0x3fcb0000}, {0x3fcb2000}, {0x3fcb4000}, {0x3fcb6000}, 
+    {0x3fcb8000}, {0x3fcba000}, {0x3fcbc000}, {0x3fcbe000}, 
+    {0x3fcc0000}, {0x3fcc2000}, {0x3fcc4000}, {0x3fcc6000}, 
+    {0x3fcc8000}, {0x3fcca000}, {0x3fccc000}, {0x3fcce000}, 
+    {0x3fcd0000}, {0x3fcd2000}, {0x3fcd4000}, {0x3fcd6000}, 
+    {0x3fcd8000}, {0x3fcda000}, {0x3fcdc000}, {0x3fcde000}, 
+    {0x3fce0000}, {0x3fce2000}, {0x3fce4000}, {0x3fce6000}, 
+    {0x3fce8000}, {0x3fcea000}, {0x3fcec000}, {0x3fcee000}, 
+    {0x3fcf0000}, {0x3fcf2000}, {0x3fcf4000}, {0x3fcf6000}, 
+    {0x3fcf8000}, {0x3fcfa000}, {0x3fcfc000}, {0x3fcfe000}, 
+    {0x3fd00000}, {0x3fd02000}, {0x3fd04000}, {0x3fd06000}, 
+    {0x3fd08000}, {0x3fd0a000}, {0x3fd0c000}, {0x3fd0e000}, 
+    {0x3fd10000}, {0x3fd12000}, {0x3fd14000}, {0x3fd16000}, 
+    {0x3fd18000}, {0x3fd1a000}, {0x3fd1c000}, {0x3fd1e000}, 
+    {0x3fd20000}, {0x3fd22000}, {0x3fd24000}, {0x3fd26000}, 
+    {0x3fd28000}, {0x3fd2a000}, {0x3fd2c000}, {0x3fd2e000}, 
+    {0x3fd30000}, {0x3fd32000}, {0x3fd34000}, {0x3fd36000}, 
+    {0x3fd38000}, {0x3fd3a000}, {0x3fd3c000}, {0x3fd3e000}, 
+    {0x3fd40000}, {0x3fd42000}, {0x3fd44000}, {0x3fd46000}, 
+    {0x3fd48000}, {0x3fd4a000}, {0x3fd4c000}, {0x3fd4e000}, 
+    {0x3fd50000}, {0x3fd52000}, {0x3fd54000}, {0x3fd56000}, 
+    {0x3fd58000}, {0x3fd5a000}, {0x3fd5c000}, {0x3fd5e000}, 
+    {0x3fd60000}, {0x3fd62000}, {0x3fd64000}, {0x3fd66000}, 
+    {0x3fd68000}, {0x3fd6a000}, {0x3fd6c000}, {0x3fd6e000}, 
+    {0x3fd70000}, {0x3fd72000}, {0x3fd74000}, {0x3fd76000}, 
+    {0x3fd78000}, {0x3fd7a000}, {0x3fd7c000}, {0x3fd7e000}, 
+    {0x3fd80000}, {0x3fd82000}, {0x3fd84000}, {0x3fd86000}, 
+    {0x3fd88000}, {0x3fd8a000}, {0x3fd8c000}, {0x3fd8e000}, 
+    {0x3fd90000}, {0x3fd92000}, {0x3fd94000}, {0x3fd96000}, 
+    {0x3fd98000}, {0x3fd9a000}, {0x3fd9c000}, {0x3fd9e000}, 
+    {0x3fda0000}, {0x3fda2000}, {0x3fda4000}, {0x3fda6000}, 
+    {0x3fda8000}, {0x3fdaa000}, {0x3fdac000}, {0x3fdae000}, 
+    {0x3fdb0000}, {0x3fdb2000}, {0x3fdb4000}, {0x3fdb6000}, 
+    {0x3fdb8000}, {0x3fdba000}, {0x3fdbc000}, {0x3fdbe000}, 
+    {0x3fdc0000}, {0x3fdc2000}, {0x3fdc4000}, {0x3fdc6000}, 
+    {0x3fdc8000}, {0x3fdca000}, {0x3fdcc000}, {0x3fdce000}, 
+    {0x3fdd0000}, {0x3fdd2000}, {0x3fdd4000}, {0x3fdd6000}, 
+    {0x3fdd8000}, {0x3fdda000}, {0x3fddc000}, {0x3fdde000}, 
+    {0x3fde0000}, {0x3fde2000}, {0x3fde4000}, {0x3fde6000}, 
+    {0x3fde8000}, {0x3fdea000}, {0x3fdec000}, {0x3fdee000}, 
+    {0x3fdf0000}, {0x3fdf2000}, {0x3fdf4000}, {0x3fdf6000}, 
+    {0x3fdf8000}, {0x3fdfa000}, {0x3fdfc000}, {0x3fdfe000}, 
+    {0x3fe00000}, {0x3fe02000}, {0x3fe04000}, {0x3fe06000}, 
+    {0x3fe08000}, {0x3fe0a000}, {0x3fe0c000}, {0x3fe0e000}, 
+    {0x3fe10000}, {0x3fe12000}, {0x3fe14000}, {0x3fe16000}, 
+    {0x3fe18000}, {0x3fe1a000}, {0x3fe1c000}, {0x3fe1e000}, 
+    {0x3fe20000}, {0x3fe22000}, {0x3fe24000}, {0x3fe26000}, 
+    {0x3fe28000}, {0x3fe2a000}, {0x3fe2c000}, {0x3fe2e000}, 
+    {0x3fe30000}, {0x3fe32000}, {0x3fe34000}, {0x3fe36000}, 
+    {0x3fe38000}, {0x3fe3a000}, {0x3fe3c000}, {0x3fe3e000}, 
+    {0x3fe40000}, {0x3fe42000}, {0x3fe44000}, {0x3fe46000}, 
+    {0x3fe48000}, {0x3fe4a000}, {0x3fe4c000}, {0x3fe4e000}, 
+    {0x3fe50000}, {0x3fe52000}, {0x3fe54000}, {0x3fe56000}, 
+    {0x3fe58000}, {0x3fe5a000}, {0x3fe5c000}, {0x3fe5e000}, 
+    {0x3fe60000}, {0x3fe62000}, {0x3fe64000}, {0x3fe66000}, 
+    {0x3fe68000}, {0x3fe6a000}, {0x3fe6c000}, {0x3fe6e000}, 
+    {0x3fe70000}, {0x3fe72000}, {0x3fe74000}, {0x3fe76000}, 
+    {0x3fe78000}, {0x3fe7a000}, {0x3fe7c000}, {0x3fe7e000}, 
+    {0x3fe80000}, {0x3fe82000}, {0x3fe84000}, {0x3fe86000}, 
+    {0x3fe88000}, {0x3fe8a000}, {0x3fe8c000}, {0x3fe8e000}, 
+    {0x3fe90000}, {0x3fe92000}, {0x3fe94000}, {0x3fe96000}, 
+    {0x3fe98000}, {0x3fe9a000}, {0x3fe9c000}, {0x3fe9e000}, 
+    {0x3fea0000}, {0x3fea2000}, {0x3fea4000}, {0x3fea6000}, 
+    {0x3fea8000}, {0x3feaa000}, {0x3feac000}, {0x3feae000}, 
+    {0x3feb0000}, {0x3feb2000}, {0x3feb4000}, {0x3feb6000}, 
+    {0x3feb8000}, {0x3feba000}, {0x3febc000}, {0x3febe000}, 
+    {0x3fec0000}, {0x3fec2000}, {0x3fec4000}, {0x3fec6000}, 
+    {0x3fec8000}, {0x3feca000}, {0x3fecc000}, {0x3fece000}, 
+    {0x3fed0000}, {0x3fed2000}, {0x3fed4000}, {0x3fed6000}, 
+    {0x3fed8000}, {0x3feda000}, {0x3fedc000}, {0x3fede000}, 
+    {0x3fee0000}, {0x3fee2000}, {0x3fee4000}, {0x3fee6000}, 
+    {0x3fee8000}, {0x3feea000}, {0x3feec000}, {0x3feee000}, 
+    {0x3fef0000}, {0x3fef2000}, {0x3fef4000}, {0x3fef6000}, 
+    {0x3fef8000}, {0x3fefa000}, {0x3fefc000}, {0x3fefe000}, 
+    {0x3ff00000}, {0x3ff02000}, {0x3ff04000}, {0x3ff06000}, 
+    {0x3ff08000}, {0x3ff0a000}, {0x3ff0c000}, {0x3ff0e000}, 
+    {0x3ff10000}, {0x3ff12000}, {0x3ff14000}, {0x3ff16000}, 
+    {0x3ff18000}, {0x3ff1a000}, {0x3ff1c000}, {0x3ff1e000}, 
+    {0x3ff20000}, {0x3ff22000}, {0x3ff24000}, {0x3ff26000}, 
+    {0x3ff28000}, {0x3ff2a000}, {0x3ff2c000}, {0x3ff2e000}, 
+    {0x3ff30000}, {0x3ff32000}, {0x3ff34000}, {0x3ff36000}, 
+    {0x3ff38000}, {0x3ff3a000}, {0x3ff3c000}, {0x3ff3e000}, 
+    {0x3ff40000}, {0x3ff42000}, {0x3ff44000}, {0x3ff46000}, 
+    {0x3ff48000}, {0x3ff4a000}, {0x3ff4c000}, {0x3ff4e000}, 
+    {0x3ff50000}, {0x3ff52000}, {0x3ff54000}, {0x3ff56000}, 
+    {0x3ff58000}, {0x3ff5a000}, {0x3ff5c000}, {0x3ff5e000}, 
+    {0x3ff60000}, {0x3ff62000}, {0x3ff64000}, {0x3ff66000}, 
+    {0x3ff68000}, {0x3ff6a000}, {0x3ff6c000}, {0x3ff6e000}, 
+    {0x3ff70000}, {0x3ff72000}, {0x3ff74000}, {0x3ff76000}, 
+    {0x3ff78000}, {0x3ff7a000}, {0x3ff7c000}, {0x3ff7e000}, 
+    {0x3ff80000}, {0x3ff82000}, {0x3ff84000}, {0x3ff86000}, 
+    {0x3ff88000}, {0x3ff8a000}, {0x3ff8c000}, {0x3ff8e000}, 
+    {0x3ff90000}, {0x3ff92000}, {0x3ff94000}, {0x3ff96000}, 
+    {0x3ff98000}, {0x3ff9a000}, {0x3ff9c000}, {0x3ff9e000}, 
+    {0x3ffa0000}, {0x3ffa2000}, {0x3ffa4000}, {0x3ffa6000}, 
+    {0x3ffa8000}, {0x3ffaa000}, {0x3ffac000}, {0x3ffae000}, 
+    {0x3ffb0000}, {0x3ffb2000}, {0x3ffb4000}, {0x3ffb6000}, 
+    {0x3ffb8000}, {0x3ffba000}, {0x3ffbc000}, {0x3ffbe000}, 
+    {0x3ffc0000}, {0x3ffc2000}, {0x3ffc4000}, {0x3ffc6000}, 
+    {0x3ffc8000}, {0x3ffca000}, {0x3ffcc000}, {0x3ffce000}, 
+    {0x3ffd0000}, {0x3ffd2000}, {0x3ffd4000}, {0x3ffd6000}, 
+    {0x3ffd8000}, {0x3ffda000}, {0x3ffdc000}, {0x3ffde000}, 
+    {0x3ffe0000}, {0x3ffe2000}, {0x3ffe4000}, {0x3ffe6000}, 
+    {0x3ffe8000}, {0x3ffea000}, {0x3ffec000}, {0x3ffee000}, 
+    {0x3fff0000}, {0x3fff2000}, {0x3fff4000}, {0x3fff6000}, 
+    {0x3fff8000}, {0x3fffa000}, {0x3fffc000}, {0x3fffe000}, 
+    {0x40000000}, {0x40002000}, {0x40004000}, {0x40006000}, 
+    {0x40008000}, {0x4000a000}, {0x4000c000}, {0x4000e000}, 
+    {0x40010000}, {0x40012000}, {0x40014000}, {0x40016000}, 
+    {0x40018000}, {0x4001a000}, {0x4001c000}, {0x4001e000}, 
+    {0x40020000}, {0x40022000}, {0x40024000}, {0x40026000}, 
+    {0x40028000}, {0x4002a000}, {0x4002c000}, {0x4002e000}, 
+    {0x40030000}, {0x40032000}, {0x40034000}, {0x40036000}, 
+    {0x40038000}, {0x4003a000}, {0x4003c000}, {0x4003e000}, 
+    {0x40040000}, {0x40042000}, {0x40044000}, {0x40046000}, 
+    {0x40048000}, {0x4004a000}, {0x4004c000}, {0x4004e000}, 
+    {0x40050000}, {0x40052000}, {0x40054000}, {0x40056000}, 
+    {0x40058000}, {0x4005a000}, {0x4005c000}, {0x4005e000}, 
+    {0x40060000}, {0x40062000}, {0x40064000}, {0x40066000}, 
+    {0x40068000}, {0x4006a000}, {0x4006c000}, {0x4006e000}, 
+    {0x40070000}, {0x40072000}, {0x40074000}, {0x40076000}, 
+    {0x40078000}, {0x4007a000}, {0x4007c000}, {0x4007e000}, 
+    {0x40080000}, {0x40082000}, {0x40084000}, {0x40086000}, 
+    {0x40088000}, {0x4008a000}, {0x4008c000}, {0x4008e000}, 
+    {0x40090000}, {0x40092000}, {0x40094000}, {0x40096000}, 
+    {0x40098000}, {0x4009a000}, {0x4009c000}, {0x4009e000}, 
+    {0x400a0000}, {0x400a2000}, {0x400a4000}, {0x400a6000}, 
+    {0x400a8000}, {0x400aa000}, {0x400ac000}, {0x400ae000}, 
+    {0x400b0000}, {0x400b2000}, {0x400b4000}, {0x400b6000}, 
+    {0x400b8000}, {0x400ba000}, {0x400bc000}, {0x400be000}, 
+    {0x400c0000}, {0x400c2000}, {0x400c4000}, {0x400c6000}, 
+    {0x400c8000}, {0x400ca000}, {0x400cc000}, {0x400ce000}, 
+    {0x400d0000}, {0x400d2000}, {0x400d4000}, {0x400d6000}, 
+    {0x400d8000}, {0x400da000}, {0x400dc000}, {0x400de000}, 
+    {0x400e0000}, {0x400e2000}, {0x400e4000}, {0x400e6000}, 
+    {0x400e8000}, {0x400ea000}, {0x400ec000}, {0x400ee000}, 
+    {0x400f0000}, {0x400f2000}, {0x400f4000}, {0x400f6000}, 
+    {0x400f8000}, {0x400fa000}, {0x400fc000}, {0x400fe000}, 
+    {0x40100000}, {0x40102000}, {0x40104000}, {0x40106000}, 
+    {0x40108000}, {0x4010a000}, {0x4010c000}, {0x4010e000}, 
+    {0x40110000}, {0x40112000}, {0x40114000}, {0x40116000}, 
+    {0x40118000}, {0x4011a000}, {0x4011c000}, {0x4011e000}, 
+    {0x40120000}, {0x40122000}, {0x40124000}, {0x40126000}, 
+    {0x40128000}, {0x4012a000}, {0x4012c000}, {0x4012e000}, 
+    {0x40130000}, {0x40132000}, {0x40134000}, {0x40136000}, 
+    {0x40138000}, {0x4013a000}, {0x4013c000}, {0x4013e000}, 
+    {0x40140000}, {0x40142000}, {0x40144000}, {0x40146000}, 
+    {0x40148000}, {0x4014a000}, {0x4014c000}, {0x4014e000}, 
+    {0x40150000}, {0x40152000}, {0x40154000}, {0x40156000}, 
+    {0x40158000}, {0x4015a000}, {0x4015c000}, {0x4015e000}, 
+    {0x40160000}, {0x40162000}, {0x40164000}, {0x40166000}, 
+    {0x40168000}, {0x4016a000}, {0x4016c000}, {0x4016e000}, 
+    {0x40170000}, {0x40172000}, {0x40174000}, {0x40176000}, 
+    {0x40178000}, {0x4017a000}, {0x4017c000}, {0x4017e000}, 
+    {0x40180000}, {0x40182000}, {0x40184000}, {0x40186000}, 
+    {0x40188000}, {0x4018a000}, {0x4018c000}, {0x4018e000}, 
+    {0x40190000}, {0x40192000}, {0x40194000}, {0x40196000}, 
+    {0x40198000}, {0x4019a000}, {0x4019c000}, {0x4019e000}, 
+    {0x401a0000}, {0x401a2000}, {0x401a4000}, {0x401a6000}, 
+    {0x401a8000}, {0x401aa000}, {0x401ac000}, {0x401ae000}, 
+    {0x401b0000}, {0x401b2000}, {0x401b4000}, {0x401b6000}, 
+    {0x401b8000}, {0x401ba000}, {0x401bc000}, {0x401be000}, 
+    {0x401c0000}, {0x401c2000}, {0x401c4000}, {0x401c6000}, 
+    {0x401c8000}, {0x401ca000}, {0x401cc000}, {0x401ce000}, 
+    {0x401d0000}, {0x401d2000}, {0x401d4000}, {0x401d6000}, 
+    {0x401d8000}, {0x401da000}, {0x401dc000}, {0x401de000}, 
+    {0x401e0000}, {0x401e2000}, {0x401e4000}, {0x401e6000}, 
+    {0x401e8000}, {0x401ea000}, {0x401ec000}, {0x401ee000}, 
+    {0x401f0000}, {0x401f2000}, {0x401f4000}, {0x401f6000}, 
+    {0x401f8000}, {0x401fa000}, {0x401fc000}, {0x401fe000}, 
+    {0x40200000}, {0x40202000}, {0x40204000}, {0x40206000}, 
+    {0x40208000}, {0x4020a000}, {0x4020c000}, {0x4020e000}, 
+    {0x40210000}, {0x40212000}, {0x40214000}, {0x40216000}, 
+    {0x40218000}, {0x4021a000}, {0x4021c000}, {0x4021e000}, 
+    {0x40220000}, {0x40222000}, {0x40224000}, {0x40226000}, 
+    {0x40228000}, {0x4022a000}, {0x4022c000}, {0x4022e000}, 
+    {0x40230000}, {0x40232000}, {0x40234000}, {0x40236000}, 
+    {0x40238000}, {0x4023a000}, {0x4023c000}, {0x4023e000}, 
+    {0x40240000}, {0x40242000}, {0x40244000}, {0x40246000}, 
+    {0x40248000}, {0x4024a000}, {0x4024c000}, {0x4024e000}, 
+    {0x40250000}, {0x40252000}, {0x40254000}, {0x40256000}, 
+    {0x40258000}, {0x4025a000}, {0x4025c000}, {0x4025e000}, 
+    {0x40260000}, {0x40262000}, {0x40264000}, {0x40266000}, 
+    {0x40268000}, {0x4026a000}, {0x4026c000}, {0x4026e000}, 
+    {0x40270000}, {0x40272000}, {0x40274000}, {0x40276000}, 
+    {0x40278000}, {0x4027a000}, {0x4027c000}, {0x4027e000}, 
+    {0x40280000}, {0x40282000}, {0x40284000}, {0x40286000}, 
+    {0x40288000}, {0x4028a000}, {0x4028c000}, {0x4028e000}, 
+    {0x40290000}, {0x40292000}, {0x40294000}, {0x40296000}, 
+    {0x40298000}, {0x4029a000}, {0x4029c000}, {0x4029e000}, 
+    {0x402a0000}, {0x402a2000}, {0x402a4000}, {0x402a6000}, 
+    {0x402a8000}, {0x402aa000}, {0x402ac000}, {0x402ae000}, 
+    {0x402b0000}, {0x402b2000}, {0x402b4000}, {0x402b6000}, 
+    {0x402b8000}, {0x402ba000}, {0x402bc000}, {0x402be000}, 
+    {0x402c0000}, {0x402c2000}, {0x402c4000}, {0x402c6000}, 
+    {0x402c8000}, {0x402ca000}, {0x402cc000}, {0x402ce000}, 
+    {0x402d0000}, {0x402d2000}, {0x402d4000}, {0x402d6000}, 
+    {0x402d8000}, {0x402da000}, {0x402dc000}, {0x402de000}, 
+    {0x402e0000}, {0x402e2000}, {0x402e4000}, {0x402e6000}, 
+    {0x402e8000}, {0x402ea000}, {0x402ec000}, {0x402ee000}, 
+    {0x402f0000}, {0x402f2000}, {0x402f4000}, {0x402f6000}, 
+    {0x402f8000}, {0x402fa000}, {0x402fc000}, {0x402fe000}, 
+    {0x40300000}, {0x40302000}, {0x40304000}, {0x40306000}, 
+    {0x40308000}, {0x4030a000}, {0x4030c000}, {0x4030e000}, 
+    {0x40310000}, {0x40312000}, {0x40314000}, {0x40316000}, 
+    {0x40318000}, {0x4031a000}, {0x4031c000}, {0x4031e000}, 
+    {0x40320000}, {0x40322000}, {0x40324000}, {0x40326000}, 
+    {0x40328000}, {0x4032a000}, {0x4032c000}, {0x4032e000}, 
+    {0x40330000}, {0x40332000}, {0x40334000}, {0x40336000}, 
+    {0x40338000}, {0x4033a000}, {0x4033c000}, {0x4033e000}, 
+    {0x40340000}, {0x40342000}, {0x40344000}, {0x40346000}, 
+    {0x40348000}, {0x4034a000}, {0x4034c000}, {0x4034e000}, 
+    {0x40350000}, {0x40352000}, {0x40354000}, {0x40356000}, 
+    {0x40358000}, {0x4035a000}, {0x4035c000}, {0x4035e000}, 
+    {0x40360000}, {0x40362000}, {0x40364000}, {0x40366000}, 
+    {0x40368000}, {0x4036a000}, {0x4036c000}, {0x4036e000}, 
+    {0x40370000}, {0x40372000}, {0x40374000}, {0x40376000}, 
+    {0x40378000}, {0x4037a000}, {0x4037c000}, {0x4037e000}, 
+    {0x40380000}, {0x40382000}, {0x40384000}, {0x40386000}, 
+    {0x40388000}, {0x4038a000}, {0x4038c000}, {0x4038e000}, 
+    {0x40390000}, {0x40392000}, {0x40394000}, {0x40396000}, 
+    {0x40398000}, {0x4039a000}, {0x4039c000}, {0x4039e000}, 
+    {0x403a0000}, {0x403a2000}, {0x403a4000}, {0x403a6000}, 
+    {0x403a8000}, {0x403aa000}, {0x403ac000}, {0x403ae000}, 
+    {0x403b0000}, {0x403b2000}, {0x403b4000}, {0x403b6000}, 
+    {0x403b8000}, {0x403ba000}, {0x403bc000}, {0x403be000}, 
+    {0x403c0000}, {0x403c2000}, {0x403c4000}, {0x403c6000}, 
+    {0x403c8000}, {0x403ca000}, {0x403cc000}, {0x403ce000}, 
+    {0x403d0000}, {0x403d2000}, {0x403d4000}, {0x403d6000}, 
+    {0x403d8000}, {0x403da000}, {0x403dc000}, {0x403de000}, 
+    {0x403e0000}, {0x403e2000}, {0x403e4000}, {0x403e6000}, 
+    {0x403e8000}, {0x403ea000}, {0x403ec000}, {0x403ee000}, 
+    {0x403f0000}, {0x403f2000}, {0x403f4000}, {0x403f6000}, 
+    {0x403f8000}, {0x403fa000}, {0x403fc000}, {0x403fe000}, 
+    {0x40400000}, {0x40402000}, {0x40404000}, {0x40406000}, 
+    {0x40408000}, {0x4040a000}, {0x4040c000}, {0x4040e000}, 
+    {0x40410000}, {0x40412000}, {0x40414000}, {0x40416000}, 
+    {0x40418000}, {0x4041a000}, {0x4041c000}, {0x4041e000}, 
+    {0x40420000}, {0x40422000}, {0x40424000}, {0x40426000}, 
+    {0x40428000}, {0x4042a000}, {0x4042c000}, {0x4042e000}, 
+    {0x40430000}, {0x40432000}, {0x40434000}, {0x40436000}, 
+    {0x40438000}, {0x4043a000}, {0x4043c000}, {0x4043e000}, 
+    {0x40440000}, {0x40442000}, {0x40444000}, {0x40446000}, 
+    {0x40448000}, {0x4044a000}, {0x4044c000}, {0x4044e000}, 
+    {0x40450000}, {0x40452000}, {0x40454000}, {0x40456000}, 
+    {0x40458000}, {0x4045a000}, {0x4045c000}, {0x4045e000}, 
+    {0x40460000}, {0x40462000}, {0x40464000}, {0x40466000}, 
+    {0x40468000}, {0x4046a000}, {0x4046c000}, {0x4046e000}, 
+    {0x40470000}, {0x40472000}, {0x40474000}, {0x40476000}, 
+    {0x40478000}, {0x4047a000}, {0x4047c000}, {0x4047e000}, 
+    {0x40480000}, {0x40482000}, {0x40484000}, {0x40486000}, 
+    {0x40488000}, {0x4048a000}, {0x4048c000}, {0x4048e000}, 
+    {0x40490000}, {0x40492000}, {0x40494000}, {0x40496000}, 
+    {0x40498000}, {0x4049a000}, {0x4049c000}, {0x4049e000}, 
+    {0x404a0000}, {0x404a2000}, {0x404a4000}, {0x404a6000}, 
+    {0x404a8000}, {0x404aa000}, {0x404ac000}, {0x404ae000}, 
+    {0x404b0000}, {0x404b2000}, {0x404b4000}, {0x404b6000}, 
+    {0x404b8000}, {0x404ba000}, {0x404bc000}, {0x404be000}, 
+    {0x404c0000}, {0x404c2000}, {0x404c4000}, {0x404c6000}, 
+    {0x404c8000}, {0x404ca000}, {0x404cc000}, {0x404ce000}, 
+    {0x404d0000}, {0x404d2000}, {0x404d4000}, {0x404d6000}, 
+    {0x404d8000}, {0x404da000}, {0x404dc000}, {0x404de000}, 
+    {0x404e0000}, {0x404e2000}, {0x404e4000}, {0x404e6000}, 
+    {0x404e8000}, {0x404ea000}, {0x404ec000}, {0x404ee000}, 
+    {0x404f0000}, {0x404f2000}, {0x404f4000}, {0x404f6000}, 
+    {0x404f8000}, {0x404fa000}, {0x404fc000}, {0x404fe000}, 
+    {0x40500000}, {0x40502000}, {0x40504000}, {0x40506000}, 
+    {0x40508000}, {0x4050a000}, {0x4050c000}, {0x4050e000}, 
+    {0x40510000}, {0x40512000}, {0x40514000}, {0x40516000}, 
+    {0x40518000}, {0x4051a000}, {0x4051c000}, {0x4051e000}, 
+    {0x40520000}, {0x40522000}, {0x40524000}, {0x40526000}, 
+    {0x40528000}, {0x4052a000}, {0x4052c000}, {0x4052e000}, 
+    {0x40530000}, {0x40532000}, {0x40534000}, {0x40536000}, 
+    {0x40538000}, {0x4053a000}, {0x4053c000}, {0x4053e000}, 
+    {0x40540000}, {0x40542000}, {0x40544000}, {0x40546000}, 
+    {0x40548000}, {0x4054a000}, {0x4054c000}, {0x4054e000}, 
+    {0x40550000}, {0x40552000}, {0x40554000}, {0x40556000}, 
+    {0x40558000}, {0x4055a000}, {0x4055c000}, {0x4055e000}, 
+    {0x40560000}, {0x40562000}, {0x40564000}, {0x40566000}, 
+    {0x40568000}, {0x4056a000}, {0x4056c000}, {0x4056e000}, 
+    {0x40570000}, {0x40572000}, {0x40574000}, {0x40576000}, 
+    {0x40578000}, {0x4057a000}, {0x4057c000}, {0x4057e000}, 
+    {0x40580000}, {0x40582000}, {0x40584000}, {0x40586000}, 
+    {0x40588000}, {0x4058a000}, {0x4058c000}, {0x4058e000}, 
+    {0x40590000}, {0x40592000}, {0x40594000}, {0x40596000}, 
+    {0x40598000}, {0x4059a000}, {0x4059c000}, {0x4059e000}, 
+    {0x405a0000}, {0x405a2000}, {0x405a4000}, {0x405a6000}, 
+    {0x405a8000}, {0x405aa000}, {0x405ac000}, {0x405ae000}, 
+    {0x405b0000}, {0x405b2000}, {0x405b4000}, {0x405b6000}, 
+    {0x405b8000}, {0x405ba000}, {0x405bc000}, {0x405be000}, 
+    {0x405c0000}, {0x405c2000}, {0x405c4000}, {0x405c6000}, 
+    {0x405c8000}, {0x405ca000}, {0x405cc000}, {0x405ce000}, 
+    {0x405d0000}, {0x405d2000}, {0x405d4000}, {0x405d6000}, 
+    {0x405d8000}, {0x405da000}, {0x405dc000}, {0x405de000}, 
+    {0x405e0000}, {0x405e2000}, {0x405e4000}, {0x405e6000}, 
+    {0x405e8000}, {0x405ea000}, {0x405ec000}, {0x405ee000}, 
+    {0x405f0000}, {0x405f2000}, {0x405f4000}, {0x405f6000}, 
+    {0x405f8000}, {0x405fa000}, {0x405fc000}, {0x405fe000}, 
+    {0x40600000}, {0x40602000}, {0x40604000}, {0x40606000}, 
+    {0x40608000}, {0x4060a000}, {0x4060c000}, {0x4060e000}, 
+    {0x40610000}, {0x40612000}, {0x40614000}, {0x40616000}, 
+    {0x40618000}, {0x4061a000}, {0x4061c000}, {0x4061e000}, 
+    {0x40620000}, {0x40622000}, {0x40624000}, {0x40626000}, 
+    {0x40628000}, {0x4062a000}, {0x4062c000}, {0x4062e000}, 
+    {0x40630000}, {0x40632000}, {0x40634000}, {0x40636000}, 
+    {0x40638000}, {0x4063a000}, {0x4063c000}, {0x4063e000}, 
+    {0x40640000}, {0x40642000}, {0x40644000}, {0x40646000}, 
+    {0x40648000}, {0x4064a000}, {0x4064c000}, {0x4064e000}, 
+    {0x40650000}, {0x40652000}, {0x40654000}, {0x40656000}, 
+    {0x40658000}, {0x4065a000}, {0x4065c000}, {0x4065e000}, 
+    {0x40660000}, {0x40662000}, {0x40664000}, {0x40666000}, 
+    {0x40668000}, {0x4066a000}, {0x4066c000}, {0x4066e000}, 
+    {0x40670000}, {0x40672000}, {0x40674000}, {0x40676000}, 
+    {0x40678000}, {0x4067a000}, {0x4067c000}, {0x4067e000}, 
+    {0x40680000}, {0x40682000}, {0x40684000}, {0x40686000}, 
+    {0x40688000}, {0x4068a000}, {0x4068c000}, {0x4068e000}, 
+    {0x40690000}, {0x40692000}, {0x40694000}, {0x40696000}, 
+    {0x40698000}, {0x4069a000}, {0x4069c000}, {0x4069e000}, 
+    {0x406a0000}, {0x406a2000}, {0x406a4000}, {0x406a6000}, 
+    {0x406a8000}, {0x406aa000}, {0x406ac000}, {0x406ae000}, 
+    {0x406b0000}, {0x406b2000}, {0x406b4000}, {0x406b6000}, 
+    {0x406b8000}, {0x406ba000}, {0x406bc000}, {0x406be000}, 
+    {0x406c0000}, {0x406c2000}, {0x406c4000}, {0x406c6000}, 
+    {0x406c8000}, {0x406ca000}, {0x406cc000}, {0x406ce000}, 
+    {0x406d0000}, {0x406d2000}, {0x406d4000}, {0x406d6000}, 
+    {0x406d8000}, {0x406da000}, {0x406dc000}, {0x406de000}, 
+    {0x406e0000}, {0x406e2000}, {0x406e4000}, {0x406e6000}, 
+    {0x406e8000}, {0x406ea000}, {0x406ec000}, {0x406ee000}, 
+    {0x406f0000}, {0x406f2000}, {0x406f4000}, {0x406f6000}, 
+    {0x406f8000}, {0x406fa000}, {0x406fc000}, {0x406fe000}, 
+    {0x40700000}, {0x40702000}, {0x40704000}, {0x40706000}, 
+    {0x40708000}, {0x4070a000}, {0x4070c000}, {0x4070e000}, 
+    {0x40710000}, {0x40712000}, {0x40714000}, {0x40716000}, 
+    {0x40718000}, {0x4071a000}, {0x4071c000}, {0x4071e000}, 
+    {0x40720000}, {0x40722000}, {0x40724000}, {0x40726000}, 
+    {0x40728000}, {0x4072a000}, {0x4072c000}, {0x4072e000}, 
+    {0x40730000}, {0x40732000}, {0x40734000}, {0x40736000}, 
+    {0x40738000}, {0x4073a000}, {0x4073c000}, {0x4073e000}, 
+    {0x40740000}, {0x40742000}, {0x40744000}, {0x40746000}, 
+    {0x40748000}, {0x4074a000}, {0x4074c000}, {0x4074e000}, 
+    {0x40750000}, {0x40752000}, {0x40754000}, {0x40756000}, 
+    {0x40758000}, {0x4075a000}, {0x4075c000}, {0x4075e000}, 
+    {0x40760000}, {0x40762000}, {0x40764000}, {0x40766000}, 
+    {0x40768000}, {0x4076a000}, {0x4076c000}, {0x4076e000}, 
+    {0x40770000}, {0x40772000}, {0x40774000}, {0x40776000}, 
+    {0x40778000}, {0x4077a000}, {0x4077c000}, {0x4077e000}, 
+    {0x40780000}, {0x40782000}, {0x40784000}, {0x40786000}, 
+    {0x40788000}, {0x4078a000}, {0x4078c000}, {0x4078e000}, 
+    {0x40790000}, {0x40792000}, {0x40794000}, {0x40796000}, 
+    {0x40798000}, {0x4079a000}, {0x4079c000}, {0x4079e000}, 
+    {0x407a0000}, {0x407a2000}, {0x407a4000}, {0x407a6000}, 
+    {0x407a8000}, {0x407aa000}, {0x407ac000}, {0x407ae000}, 
+    {0x407b0000}, {0x407b2000}, {0x407b4000}, {0x407b6000}, 
+    {0x407b8000}, {0x407ba000}, {0x407bc000}, {0x407be000}, 
+    {0x407c0000}, {0x407c2000}, {0x407c4000}, {0x407c6000}, 
+    {0x407c8000}, {0x407ca000}, {0x407cc000}, {0x407ce000}, 
+    {0x407d0000}, {0x407d2000}, {0x407d4000}, {0x407d6000}, 
+    {0x407d8000}, {0x407da000}, {0x407dc000}, {0x407de000}, 
+    {0x407e0000}, {0x407e2000}, {0x407e4000}, {0x407e6000}, 
+    {0x407e8000}, {0x407ea000}, {0x407ec000}, {0x407ee000}, 
+    {0x407f0000}, {0x407f2000}, {0x407f4000}, {0x407f6000}, 
+    {0x407f8000}, {0x407fa000}, {0x407fc000}, {0x407fe000}, 
+    {0x40800000}, {0x40802000}, {0x40804000}, {0x40806000}, 
+    {0x40808000}, {0x4080a000}, {0x4080c000}, {0x4080e000}, 
+    {0x40810000}, {0x40812000}, {0x40814000}, {0x40816000}, 
+    {0x40818000}, {0x4081a000}, {0x4081c000}, {0x4081e000}, 
+    {0x40820000}, {0x40822000}, {0x40824000}, {0x40826000}, 
+    {0x40828000}, {0x4082a000}, {0x4082c000}, {0x4082e000}, 
+    {0x40830000}, {0x40832000}, {0x40834000}, {0x40836000}, 
+    {0x40838000}, {0x4083a000}, {0x4083c000}, {0x4083e000}, 
+    {0x40840000}, {0x40842000}, {0x40844000}, {0x40846000}, 
+    {0x40848000}, {0x4084a000}, {0x4084c000}, {0x4084e000}, 
+    {0x40850000}, {0x40852000}, {0x40854000}, {0x40856000}, 
+    {0x40858000}, {0x4085a000}, {0x4085c000}, {0x4085e000}, 
+    {0x40860000}, {0x40862000}, {0x40864000}, {0x40866000}, 
+    {0x40868000}, {0x4086a000}, {0x4086c000}, {0x4086e000}, 
+    {0x40870000}, {0x40872000}, {0x40874000}, {0x40876000}, 
+    {0x40878000}, {0x4087a000}, {0x4087c000}, {0x4087e000}, 
+    {0x40880000}, {0x40882000}, {0x40884000}, {0x40886000}, 
+    {0x40888000}, {0x4088a000}, {0x4088c000}, {0x4088e000}, 
+    {0x40890000}, {0x40892000}, {0x40894000}, {0x40896000}, 
+    {0x40898000}, {0x4089a000}, {0x4089c000}, {0x4089e000}, 
+    {0x408a0000}, {0x408a2000}, {0x408a4000}, {0x408a6000}, 
+    {0x408a8000}, {0x408aa000}, {0x408ac000}, {0x408ae000}, 
+    {0x408b0000}, {0x408b2000}, {0x408b4000}, {0x408b6000}, 
+    {0x408b8000}, {0x408ba000}, {0x408bc000}, {0x408be000}, 
+    {0x408c0000}, {0x408c2000}, {0x408c4000}, {0x408c6000}, 
+    {0x408c8000}, {0x408ca000}, {0x408cc000}, {0x408ce000}, 
+    {0x408d0000}, {0x408d2000}, {0x408d4000}, {0x408d6000}, 
+    {0x408d8000}, {0x408da000}, {0x408dc000}, {0x408de000}, 
+    {0x408e0000}, {0x408e2000}, {0x408e4000}, {0x408e6000}, 
+    {0x408e8000}, {0x408ea000}, {0x408ec000}, {0x408ee000}, 
+    {0x408f0000}, {0x408f2000}, {0x408f4000}, {0x408f6000}, 
+    {0x408f8000}, {0x408fa000}, {0x408fc000}, {0x408fe000}, 
+    {0x40900000}, {0x40902000}, {0x40904000}, {0x40906000}, 
+    {0x40908000}, {0x4090a000}, {0x4090c000}, {0x4090e000}, 
+    {0x40910000}, {0x40912000}, {0x40914000}, {0x40916000}, 
+    {0x40918000}, {0x4091a000}, {0x4091c000}, {0x4091e000}, 
+    {0x40920000}, {0x40922000}, {0x40924000}, {0x40926000}, 
+    {0x40928000}, {0x4092a000}, {0x4092c000}, {0x4092e000}, 
+    {0x40930000}, {0x40932000}, {0x40934000}, {0x40936000}, 
+    {0x40938000}, {0x4093a000}, {0x4093c000}, {0x4093e000}, 
+    {0x40940000}, {0x40942000}, {0x40944000}, {0x40946000}, 
+    {0x40948000}, {0x4094a000}, {0x4094c000}, {0x4094e000}, 
+    {0x40950000}, {0x40952000}, {0x40954000}, {0x40956000}, 
+    {0x40958000}, {0x4095a000}, {0x4095c000}, {0x4095e000}, 
+    {0x40960000}, {0x40962000}, {0x40964000}, {0x40966000}, 
+    {0x40968000}, {0x4096a000}, {0x4096c000}, {0x4096e000}, 
+    {0x40970000}, {0x40972000}, {0x40974000}, {0x40976000}, 
+    {0x40978000}, {0x4097a000}, {0x4097c000}, {0x4097e000}, 
+    {0x40980000}, {0x40982000}, {0x40984000}, {0x40986000}, 
+    {0x40988000}, {0x4098a000}, {0x4098c000}, {0x4098e000}, 
+    {0x40990000}, {0x40992000}, {0x40994000}, {0x40996000}, 
+    {0x40998000}, {0x4099a000}, {0x4099c000}, {0x4099e000}, 
+    {0x409a0000}, {0x409a2000}, {0x409a4000}, {0x409a6000}, 
+    {0x409a8000}, {0x409aa000}, {0x409ac000}, {0x409ae000}, 
+    {0x409b0000}, {0x409b2000}, {0x409b4000}, {0x409b6000}, 
+    {0x409b8000}, {0x409ba000}, {0x409bc000}, {0x409be000}, 
+    {0x409c0000}, {0x409c2000}, {0x409c4000}, {0x409c6000}, 
+    {0x409c8000}, {0x409ca000}, {0x409cc000}, {0x409ce000}, 
+    {0x409d0000}, {0x409d2000}, {0x409d4000}, {0x409d6000}, 
+    {0x409d8000}, {0x409da000}, {0x409dc000}, {0x409de000}, 
+    {0x409e0000}, {0x409e2000}, {0x409e4000}, {0x409e6000}, 
+    {0x409e8000}, {0x409ea000}, {0x409ec000}, {0x409ee000}, 
+    {0x409f0000}, {0x409f2000}, {0x409f4000}, {0x409f6000}, 
+    {0x409f8000}, {0x409fa000}, {0x409fc000}, {0x409fe000}, 
+    {0x40a00000}, {0x40a02000}, {0x40a04000}, {0x40a06000}, 
+    {0x40a08000}, {0x40a0a000}, {0x40a0c000}, {0x40a0e000}, 
+    {0x40a10000}, {0x40a12000}, {0x40a14000}, {0x40a16000}, 
+    {0x40a18000}, {0x40a1a000}, {0x40a1c000}, {0x40a1e000}, 
+    {0x40a20000}, {0x40a22000}, {0x40a24000}, {0x40a26000}, 
+    {0x40a28000}, {0x40a2a000}, {0x40a2c000}, {0x40a2e000}, 
+    {0x40a30000}, {0x40a32000}, {0x40a34000}, {0x40a36000}, 
+    {0x40a38000}, {0x40a3a000}, {0x40a3c000}, {0x40a3e000}, 
+    {0x40a40000}, {0x40a42000}, {0x40a44000}, {0x40a46000}, 
+    {0x40a48000}, {0x40a4a000}, {0x40a4c000}, {0x40a4e000}, 
+    {0x40a50000}, {0x40a52000}, {0x40a54000}, {0x40a56000}, 
+    {0x40a58000}, {0x40a5a000}, {0x40a5c000}, {0x40a5e000}, 
+    {0x40a60000}, {0x40a62000}, {0x40a64000}, {0x40a66000}, 
+    {0x40a68000}, {0x40a6a000}, {0x40a6c000}, {0x40a6e000}, 
+    {0x40a70000}, {0x40a72000}, {0x40a74000}, {0x40a76000}, 
+    {0x40a78000}, {0x40a7a000}, {0x40a7c000}, {0x40a7e000}, 
+    {0x40a80000}, {0x40a82000}, {0x40a84000}, {0x40a86000}, 
+    {0x40a88000}, {0x40a8a000}, {0x40a8c000}, {0x40a8e000}, 
+    {0x40a90000}, {0x40a92000}, {0x40a94000}, {0x40a96000}, 
+    {0x40a98000}, {0x40a9a000}, {0x40a9c000}, {0x40a9e000}, 
+    {0x40aa0000}, {0x40aa2000}, {0x40aa4000}, {0x40aa6000}, 
+    {0x40aa8000}, {0x40aaa000}, {0x40aac000}, {0x40aae000}, 
+    {0x40ab0000}, {0x40ab2000}, {0x40ab4000}, {0x40ab6000}, 
+    {0x40ab8000}, {0x40aba000}, {0x40abc000}, {0x40abe000}, 
+    {0x40ac0000}, {0x40ac2000}, {0x40ac4000}, {0x40ac6000}, 
+    {0x40ac8000}, {0x40aca000}, {0x40acc000}, {0x40ace000}, 
+    {0x40ad0000}, {0x40ad2000}, {0x40ad4000}, {0x40ad6000}, 
+    {0x40ad8000}, {0x40ada000}, {0x40adc000}, {0x40ade000}, 
+    {0x40ae0000}, {0x40ae2000}, {0x40ae4000}, {0x40ae6000}, 
+    {0x40ae8000}, {0x40aea000}, {0x40aec000}, {0x40aee000}, 
+    {0x40af0000}, {0x40af2000}, {0x40af4000}, {0x40af6000}, 
+    {0x40af8000}, {0x40afa000}, {0x40afc000}, {0x40afe000}, 
+    {0x40b00000}, {0x40b02000}, {0x40b04000}, {0x40b06000}, 
+    {0x40b08000}, {0x40b0a000}, {0x40b0c000}, {0x40b0e000}, 
+    {0x40b10000}, {0x40b12000}, {0x40b14000}, {0x40b16000}, 
+    {0x40b18000}, {0x40b1a000}, {0x40b1c000}, {0x40b1e000}, 
+    {0x40b20000}, {0x40b22000}, {0x40b24000}, {0x40b26000}, 
+    {0x40b28000}, {0x40b2a000}, {0x40b2c000}, {0x40b2e000}, 
+    {0x40b30000}, {0x40b32000}, {0x40b34000}, {0x40b36000}, 
+    {0x40b38000}, {0x40b3a000}, {0x40b3c000}, {0x40b3e000}, 
+    {0x40b40000}, {0x40b42000}, {0x40b44000}, {0x40b46000}, 
+    {0x40b48000}, {0x40b4a000}, {0x40b4c000}, {0x40b4e000}, 
+    {0x40b50000}, {0x40b52000}, {0x40b54000}, {0x40b56000}, 
+    {0x40b58000}, {0x40b5a000}, {0x40b5c000}, {0x40b5e000}, 
+    {0x40b60000}, {0x40b62000}, {0x40b64000}, {0x40b66000}, 
+    {0x40b68000}, {0x40b6a000}, {0x40b6c000}, {0x40b6e000}, 
+    {0x40b70000}, {0x40b72000}, {0x40b74000}, {0x40b76000}, 
+    {0x40b78000}, {0x40b7a000}, {0x40b7c000}, {0x40b7e000}, 
+    {0x40b80000}, {0x40b82000}, {0x40b84000}, {0x40b86000}, 
+    {0x40b88000}, {0x40b8a000}, {0x40b8c000}, {0x40b8e000}, 
+    {0x40b90000}, {0x40b92000}, {0x40b94000}, {0x40b96000}, 
+    {0x40b98000}, {0x40b9a000}, {0x40b9c000}, {0x40b9e000}, 
+    {0x40ba0000}, {0x40ba2000}, {0x40ba4000}, {0x40ba6000}, 
+    {0x40ba8000}, {0x40baa000}, {0x40bac000}, {0x40bae000}, 
+    {0x40bb0000}, {0x40bb2000}, {0x40bb4000}, {0x40bb6000}, 
+    {0x40bb8000}, {0x40bba000}, {0x40bbc000}, {0x40bbe000}, 
+    {0x40bc0000}, {0x40bc2000}, {0x40bc4000}, {0x40bc6000}, 
+    {0x40bc8000}, {0x40bca000}, {0x40bcc000}, {0x40bce000}, 
+    {0x40bd0000}, {0x40bd2000}, {0x40bd4000}, {0x40bd6000}, 
+    {0x40bd8000}, {0x40bda000}, {0x40bdc000}, {0x40bde000}, 
+    {0x40be0000}, {0x40be2000}, {0x40be4000}, {0x40be6000}, 
+    {0x40be8000}, {0x40bea000}, {0x40bec000}, {0x40bee000}, 
+    {0x40bf0000}, {0x40bf2000}, {0x40bf4000}, {0x40bf6000}, 
+    {0x40bf8000}, {0x40bfa000}, {0x40bfc000}, {0x40bfe000}, 
+    {0x40c00000}, {0x40c02000}, {0x40c04000}, {0x40c06000}, 
+    {0x40c08000}, {0x40c0a000}, {0x40c0c000}, {0x40c0e000}, 
+    {0x40c10000}, {0x40c12000}, {0x40c14000}, {0x40c16000}, 
+    {0x40c18000}, {0x40c1a000}, {0x40c1c000}, {0x40c1e000}, 
+    {0x40c20000}, {0x40c22000}, {0x40c24000}, {0x40c26000}, 
+    {0x40c28000}, {0x40c2a000}, {0x40c2c000}, {0x40c2e000}, 
+    {0x40c30000}, {0x40c32000}, {0x40c34000}, {0x40c36000}, 
+    {0x40c38000}, {0x40c3a000}, {0x40c3c000}, {0x40c3e000}, 
+    {0x40c40000}, {0x40c42000}, {0x40c44000}, {0x40c46000}, 
+    {0x40c48000}, {0x40c4a000}, {0x40c4c000}, {0x40c4e000}, 
+    {0x40c50000}, {0x40c52000}, {0x40c54000}, {0x40c56000}, 
+    {0x40c58000}, {0x40c5a000}, {0x40c5c000}, {0x40c5e000}, 
+    {0x40c60000}, {0x40c62000}, {0x40c64000}, {0x40c66000}, 
+    {0x40c68000}, {0x40c6a000}, {0x40c6c000}, {0x40c6e000}, 
+    {0x40c70000}, {0x40c72000}, {0x40c74000}, {0x40c76000}, 
+    {0x40c78000}, {0x40c7a000}, {0x40c7c000}, {0x40c7e000}, 
+    {0x40c80000}, {0x40c82000}, {0x40c84000}, {0x40c86000}, 
+    {0x40c88000}, {0x40c8a000}, {0x40c8c000}, {0x40c8e000}, 
+    {0x40c90000}, {0x40c92000}, {0x40c94000}, {0x40c96000}, 
+    {0x40c98000}, {0x40c9a000}, {0x40c9c000}, {0x40c9e000}, 
+    {0x40ca0000}, {0x40ca2000}, {0x40ca4000}, {0x40ca6000}, 
+    {0x40ca8000}, {0x40caa000}, {0x40cac000}, {0x40cae000}, 
+    {0x40cb0000}, {0x40cb2000}, {0x40cb4000}, {0x40cb6000}, 
+    {0x40cb8000}, {0x40cba000}, {0x40cbc000}, {0x40cbe000}, 
+    {0x40cc0000}, {0x40cc2000}, {0x40cc4000}, {0x40cc6000}, 
+    {0x40cc8000}, {0x40cca000}, {0x40ccc000}, {0x40cce000}, 
+    {0x40cd0000}, {0x40cd2000}, {0x40cd4000}, {0x40cd6000}, 
+    {0x40cd8000}, {0x40cda000}, {0x40cdc000}, {0x40cde000}, 
+    {0x40ce0000}, {0x40ce2000}, {0x40ce4000}, {0x40ce6000}, 
+    {0x40ce8000}, {0x40cea000}, {0x40cec000}, {0x40cee000}, 
+    {0x40cf0000}, {0x40cf2000}, {0x40cf4000}, {0x40cf6000}, 
+    {0x40cf8000}, {0x40cfa000}, {0x40cfc000}, {0x40cfe000}, 
+    {0x40d00000}, {0x40d02000}, {0x40d04000}, {0x40d06000}, 
+    {0x40d08000}, {0x40d0a000}, {0x40d0c000}, {0x40d0e000}, 
+    {0x40d10000}, {0x40d12000}, {0x40d14000}, {0x40d16000}, 
+    {0x40d18000}, {0x40d1a000}, {0x40d1c000}, {0x40d1e000}, 
+    {0x40d20000}, {0x40d22000}, {0x40d24000}, {0x40d26000}, 
+    {0x40d28000}, {0x40d2a000}, {0x40d2c000}, {0x40d2e000}, 
+    {0x40d30000}, {0x40d32000}, {0x40d34000}, {0x40d36000}, 
+    {0x40d38000}, {0x40d3a000}, {0x40d3c000}, {0x40d3e000}, 
+    {0x40d40000}, {0x40d42000}, {0x40d44000}, {0x40d46000}, 
+    {0x40d48000}, {0x40d4a000}, {0x40d4c000}, {0x40d4e000}, 
+    {0x40d50000}, {0x40d52000}, {0x40d54000}, {0x40d56000}, 
+    {0x40d58000}, {0x40d5a000}, {0x40d5c000}, {0x40d5e000}, 
+    {0x40d60000}, {0x40d62000}, {0x40d64000}, {0x40d66000}, 
+    {0x40d68000}, {0x40d6a000}, {0x40d6c000}, {0x40d6e000}, 
+    {0x40d70000}, {0x40d72000}, {0x40d74000}, {0x40d76000}, 
+    {0x40d78000}, {0x40d7a000}, {0x40d7c000}, {0x40d7e000}, 
+    {0x40d80000}, {0x40d82000}, {0x40d84000}, {0x40d86000}, 
+    {0x40d88000}, {0x40d8a000}, {0x40d8c000}, {0x40d8e000}, 
+    {0x40d90000}, {0x40d92000}, {0x40d94000}, {0x40d96000}, 
+    {0x40d98000}, {0x40d9a000}, {0x40d9c000}, {0x40d9e000}, 
+    {0x40da0000}, {0x40da2000}, {0x40da4000}, {0x40da6000}, 
+    {0x40da8000}, {0x40daa000}, {0x40dac000}, {0x40dae000}, 
+    {0x40db0000}, {0x40db2000}, {0x40db4000}, {0x40db6000}, 
+    {0x40db8000}, {0x40dba000}, {0x40dbc000}, {0x40dbe000}, 
+    {0x40dc0000}, {0x40dc2000}, {0x40dc4000}, {0x40dc6000}, 
+    {0x40dc8000}, {0x40dca000}, {0x40dcc000}, {0x40dce000}, 
+    {0x40dd0000}, {0x40dd2000}, {0x40dd4000}, {0x40dd6000}, 
+    {0x40dd8000}, {0x40dda000}, {0x40ddc000}, {0x40dde000}, 
+    {0x40de0000}, {0x40de2000}, {0x40de4000}, {0x40de6000}, 
+    {0x40de8000}, {0x40dea000}, {0x40dec000}, {0x40dee000}, 
+    {0x40df0000}, {0x40df2000}, {0x40df4000}, {0x40df6000}, 
+    {0x40df8000}, {0x40dfa000}, {0x40dfc000}, {0x40dfe000}, 
+    {0x40e00000}, {0x40e02000}, {0x40e04000}, {0x40e06000}, 
+    {0x40e08000}, {0x40e0a000}, {0x40e0c000}, {0x40e0e000}, 
+    {0x40e10000}, {0x40e12000}, {0x40e14000}, {0x40e16000}, 
+    {0x40e18000}, {0x40e1a000}, {0x40e1c000}, {0x40e1e000}, 
+    {0x40e20000}, {0x40e22000}, {0x40e24000}, {0x40e26000}, 
+    {0x40e28000}, {0x40e2a000}, {0x40e2c000}, {0x40e2e000}, 
+    {0x40e30000}, {0x40e32000}, {0x40e34000}, {0x40e36000}, 
+    {0x40e38000}, {0x40e3a000}, {0x40e3c000}, {0x40e3e000}, 
+    {0x40e40000}, {0x40e42000}, {0x40e44000}, {0x40e46000}, 
+    {0x40e48000}, {0x40e4a000}, {0x40e4c000}, {0x40e4e000}, 
+    {0x40e50000}, {0x40e52000}, {0x40e54000}, {0x40e56000}, 
+    {0x40e58000}, {0x40e5a000}, {0x40e5c000}, {0x40e5e000}, 
+    {0x40e60000}, {0x40e62000}, {0x40e64000}, {0x40e66000}, 
+    {0x40e68000}, {0x40e6a000}, {0x40e6c000}, {0x40e6e000}, 
+    {0x40e70000}, {0x40e72000}, {0x40e74000}, {0x40e76000}, 
+    {0x40e78000}, {0x40e7a000}, {0x40e7c000}, {0x40e7e000}, 
+    {0x40e80000}, {0x40e82000}, {0x40e84000}, {0x40e86000}, 
+    {0x40e88000}, {0x40e8a000}, {0x40e8c000}, {0x40e8e000}, 
+    {0x40e90000}, {0x40e92000}, {0x40e94000}, {0x40e96000}, 
+    {0x40e98000}, {0x40e9a000}, {0x40e9c000}, {0x40e9e000}, 
+    {0x40ea0000}, {0x40ea2000}, {0x40ea4000}, {0x40ea6000}, 
+    {0x40ea8000}, {0x40eaa000}, {0x40eac000}, {0x40eae000}, 
+    {0x40eb0000}, {0x40eb2000}, {0x40eb4000}, {0x40eb6000}, 
+    {0x40eb8000}, {0x40eba000}, {0x40ebc000}, {0x40ebe000}, 
+    {0x40ec0000}, {0x40ec2000}, {0x40ec4000}, {0x40ec6000}, 
+    {0x40ec8000}, {0x40eca000}, {0x40ecc000}, {0x40ece000}, 
+    {0x40ed0000}, {0x40ed2000}, {0x40ed4000}, {0x40ed6000}, 
+    {0x40ed8000}, {0x40eda000}, {0x40edc000}, {0x40ede000}, 
+    {0x40ee0000}, {0x40ee2000}, {0x40ee4000}, {0x40ee6000}, 
+    {0x40ee8000}, {0x40eea000}, {0x40eec000}, {0x40eee000}, 
+    {0x40ef0000}, {0x40ef2000}, {0x40ef4000}, {0x40ef6000}, 
+    {0x40ef8000}, {0x40efa000}, {0x40efc000}, {0x40efe000}, 
+    {0x40f00000}, {0x40f02000}, {0x40f04000}, {0x40f06000}, 
+    {0x40f08000}, {0x40f0a000}, {0x40f0c000}, {0x40f0e000}, 
+    {0x40f10000}, {0x40f12000}, {0x40f14000}, {0x40f16000}, 
+    {0x40f18000}, {0x40f1a000}, {0x40f1c000}, {0x40f1e000}, 
+    {0x40f20000}, {0x40f22000}, {0x40f24000}, {0x40f26000}, 
+    {0x40f28000}, {0x40f2a000}, {0x40f2c000}, {0x40f2e000}, 
+    {0x40f30000}, {0x40f32000}, {0x40f34000}, {0x40f36000}, 
+    {0x40f38000}, {0x40f3a000}, {0x40f3c000}, {0x40f3e000}, 
+    {0x40f40000}, {0x40f42000}, {0x40f44000}, {0x40f46000}, 
+    {0x40f48000}, {0x40f4a000}, {0x40f4c000}, {0x40f4e000}, 
+    {0x40f50000}, {0x40f52000}, {0x40f54000}, {0x40f56000}, 
+    {0x40f58000}, {0x40f5a000}, {0x40f5c000}, {0x40f5e000}, 
+    {0x40f60000}, {0x40f62000}, {0x40f64000}, {0x40f66000}, 
+    {0x40f68000}, {0x40f6a000}, {0x40f6c000}, {0x40f6e000}, 
+    {0x40f70000}, {0x40f72000}, {0x40f74000}, {0x40f76000}, 
+    {0x40f78000}, {0x40f7a000}, {0x40f7c000}, {0x40f7e000}, 
+    {0x40f80000}, {0x40f82000}, {0x40f84000}, {0x40f86000}, 
+    {0x40f88000}, {0x40f8a000}, {0x40f8c000}, {0x40f8e000}, 
+    {0x40f90000}, {0x40f92000}, {0x40f94000}, {0x40f96000}, 
+    {0x40f98000}, {0x40f9a000}, {0x40f9c000}, {0x40f9e000}, 
+    {0x40fa0000}, {0x40fa2000}, {0x40fa4000}, {0x40fa6000}, 
+    {0x40fa8000}, {0x40faa000}, {0x40fac000}, {0x40fae000}, 
+    {0x40fb0000}, {0x40fb2000}, {0x40fb4000}, {0x40fb6000}, 
+    {0x40fb8000}, {0x40fba000}, {0x40fbc000}, {0x40fbe000}, 
+    {0x40fc0000}, {0x40fc2000}, {0x40fc4000}, {0x40fc6000}, 
+    {0x40fc8000}, {0x40fca000}, {0x40fcc000}, {0x40fce000}, 
+    {0x40fd0000}, {0x40fd2000}, {0x40fd4000}, {0x40fd6000}, 
+    {0x40fd8000}, {0x40fda000}, {0x40fdc000}, {0x40fde000}, 
+    {0x40fe0000}, {0x40fe2000}, {0x40fe4000}, {0x40fe6000}, 
+    {0x40fe8000}, {0x40fea000}, {0x40fec000}, {0x40fee000}, 
+    {0x40ff0000}, {0x40ff2000}, {0x40ff4000}, {0x40ff6000}, 
+    {0x40ff8000}, {0x40ffa000}, {0x40ffc000}, {0x40ffe000}, 
+    {0x41000000}, {0x41002000}, {0x41004000}, {0x41006000}, 
+    {0x41008000}, {0x4100a000}, {0x4100c000}, {0x4100e000}, 
+    {0x41010000}, {0x41012000}, {0x41014000}, {0x41016000}, 
+    {0x41018000}, {0x4101a000}, {0x4101c000}, {0x4101e000}, 
+    {0x41020000}, {0x41022000}, {0x41024000}, {0x41026000}, 
+    {0x41028000}, {0x4102a000}, {0x4102c000}, {0x4102e000}, 
+    {0x41030000}, {0x41032000}, {0x41034000}, {0x41036000}, 
+    {0x41038000}, {0x4103a000}, {0x4103c000}, {0x4103e000}, 
+    {0x41040000}, {0x41042000}, {0x41044000}, {0x41046000}, 
+    {0x41048000}, {0x4104a000}, {0x4104c000}, {0x4104e000}, 
+    {0x41050000}, {0x41052000}, {0x41054000}, {0x41056000}, 
+    {0x41058000}, {0x4105a000}, {0x4105c000}, {0x4105e000}, 
+    {0x41060000}, {0x41062000}, {0x41064000}, {0x41066000}, 
+    {0x41068000}, {0x4106a000}, {0x4106c000}, {0x4106e000}, 
+    {0x41070000}, {0x41072000}, {0x41074000}, {0x41076000}, 
+    {0x41078000}, {0x4107a000}, {0x4107c000}, {0x4107e000}, 
+    {0x41080000}, {0x41082000}, {0x41084000}, {0x41086000}, 
+    {0x41088000}, {0x4108a000}, {0x4108c000}, {0x4108e000}, 
+    {0x41090000}, {0x41092000}, {0x41094000}, {0x41096000}, 
+    {0x41098000}, {0x4109a000}, {0x4109c000}, {0x4109e000}, 
+    {0x410a0000}, {0x410a2000}, {0x410a4000}, {0x410a6000}, 
+    {0x410a8000}, {0x410aa000}, {0x410ac000}, {0x410ae000}, 
+    {0x410b0000}, {0x410b2000}, {0x410b4000}, {0x410b6000}, 
+    {0x410b8000}, {0x410ba000}, {0x410bc000}, {0x410be000}, 
+    {0x410c0000}, {0x410c2000}, {0x410c4000}, {0x410c6000}, 
+    {0x410c8000}, {0x410ca000}, {0x410cc000}, {0x410ce000}, 
+    {0x410d0000}, {0x410d2000}, {0x410d4000}, {0x410d6000}, 
+    {0x410d8000}, {0x410da000}, {0x410dc000}, {0x410de000}, 
+    {0x410e0000}, {0x410e2000}, {0x410e4000}, {0x410e6000}, 
+    {0x410e8000}, {0x410ea000}, {0x410ec000}, {0x410ee000}, 
+    {0x410f0000}, {0x410f2000}, {0x410f4000}, {0x410f6000}, 
+    {0x410f8000}, {0x410fa000}, {0x410fc000}, {0x410fe000}, 
+    {0x41100000}, {0x41102000}, {0x41104000}, {0x41106000}, 
+    {0x41108000}, {0x4110a000}, {0x4110c000}, {0x4110e000}, 
+    {0x41110000}, {0x41112000}, {0x41114000}, {0x41116000}, 
+    {0x41118000}, {0x4111a000}, {0x4111c000}, {0x4111e000}, 
+    {0x41120000}, {0x41122000}, {0x41124000}, {0x41126000}, 
+    {0x41128000}, {0x4112a000}, {0x4112c000}, {0x4112e000}, 
+    {0x41130000}, {0x41132000}, {0x41134000}, {0x41136000}, 
+    {0x41138000}, {0x4113a000}, {0x4113c000}, {0x4113e000}, 
+    {0x41140000}, {0x41142000}, {0x41144000}, {0x41146000}, 
+    {0x41148000}, {0x4114a000}, {0x4114c000}, {0x4114e000}, 
+    {0x41150000}, {0x41152000}, {0x41154000}, {0x41156000}, 
+    {0x41158000}, {0x4115a000}, {0x4115c000}, {0x4115e000}, 
+    {0x41160000}, {0x41162000}, {0x41164000}, {0x41166000}, 
+    {0x41168000}, {0x4116a000}, {0x4116c000}, {0x4116e000}, 
+    {0x41170000}, {0x41172000}, {0x41174000}, {0x41176000}, 
+    {0x41178000}, {0x4117a000}, {0x4117c000}, {0x4117e000}, 
+    {0x41180000}, {0x41182000}, {0x41184000}, {0x41186000}, 
+    {0x41188000}, {0x4118a000}, {0x4118c000}, {0x4118e000}, 
+    {0x41190000}, {0x41192000}, {0x41194000}, {0x41196000}, 
+    {0x41198000}, {0x4119a000}, {0x4119c000}, {0x4119e000}, 
+    {0x411a0000}, {0x411a2000}, {0x411a4000}, {0x411a6000}, 
+    {0x411a8000}, {0x411aa000}, {0x411ac000}, {0x411ae000}, 
+    {0x411b0000}, {0x411b2000}, {0x411b4000}, {0x411b6000}, 
+    {0x411b8000}, {0x411ba000}, {0x411bc000}, {0x411be000}, 
+    {0x411c0000}, {0x411c2000}, {0x411c4000}, {0x411c6000}, 
+    {0x411c8000}, {0x411ca000}, {0x411cc000}, {0x411ce000}, 
+    {0x411d0000}, {0x411d2000}, {0x411d4000}, {0x411d6000}, 
+    {0x411d8000}, {0x411da000}, {0x411dc000}, {0x411de000}, 
+    {0x411e0000}, {0x411e2000}, {0x411e4000}, {0x411e6000}, 
+    {0x411e8000}, {0x411ea000}, {0x411ec000}, {0x411ee000}, 
+    {0x411f0000}, {0x411f2000}, {0x411f4000}, {0x411f6000}, 
+    {0x411f8000}, {0x411fa000}, {0x411fc000}, {0x411fe000}, 
+    {0x41200000}, {0x41202000}, {0x41204000}, {0x41206000}, 
+    {0x41208000}, {0x4120a000}, {0x4120c000}, {0x4120e000}, 
+    {0x41210000}, {0x41212000}, {0x41214000}, {0x41216000}, 
+    {0x41218000}, {0x4121a000}, {0x4121c000}, {0x4121e000}, 
+    {0x41220000}, {0x41222000}, {0x41224000}, {0x41226000}, 
+    {0x41228000}, {0x4122a000}, {0x4122c000}, {0x4122e000}, 
+    {0x41230000}, {0x41232000}, {0x41234000}, {0x41236000}, 
+    {0x41238000}, {0x4123a000}, {0x4123c000}, {0x4123e000}, 
+    {0x41240000}, {0x41242000}, {0x41244000}, {0x41246000}, 
+    {0x41248000}, {0x4124a000}, {0x4124c000}, {0x4124e000}, 
+    {0x41250000}, {0x41252000}, {0x41254000}, {0x41256000}, 
+    {0x41258000}, {0x4125a000}, {0x4125c000}, {0x4125e000}, 
+    {0x41260000}, {0x41262000}, {0x41264000}, {0x41266000}, 
+    {0x41268000}, {0x4126a000}, {0x4126c000}, {0x4126e000}, 
+    {0x41270000}, {0x41272000}, {0x41274000}, {0x41276000}, 
+    {0x41278000}, {0x4127a000}, {0x4127c000}, {0x4127e000}, 
+    {0x41280000}, {0x41282000}, {0x41284000}, {0x41286000}, 
+    {0x41288000}, {0x4128a000}, {0x4128c000}, {0x4128e000}, 
+    {0x41290000}, {0x41292000}, {0x41294000}, {0x41296000}, 
+    {0x41298000}, {0x4129a000}, {0x4129c000}, {0x4129e000}, 
+    {0x412a0000}, {0x412a2000}, {0x412a4000}, {0x412a6000}, 
+    {0x412a8000}, {0x412aa000}, {0x412ac000}, {0x412ae000}, 
+    {0x412b0000}, {0x412b2000}, {0x412b4000}, {0x412b6000}, 
+    {0x412b8000}, {0x412ba000}, {0x412bc000}, {0x412be000}, 
+    {0x412c0000}, {0x412c2000}, {0x412c4000}, {0x412c6000}, 
+    {0x412c8000}, {0x412ca000}, {0x412cc000}, {0x412ce000}, 
+    {0x412d0000}, {0x412d2000}, {0x412d4000}, {0x412d6000}, 
+    {0x412d8000}, {0x412da000}, {0x412dc000}, {0x412de000}, 
+    {0x412e0000}, {0x412e2000}, {0x412e4000}, {0x412e6000}, 
+    {0x412e8000}, {0x412ea000}, {0x412ec000}, {0x412ee000}, 
+    {0x412f0000}, {0x412f2000}, {0x412f4000}, {0x412f6000}, 
+    {0x412f8000}, {0x412fa000}, {0x412fc000}, {0x412fe000}, 
+    {0x41300000}, {0x41302000}, {0x41304000}, {0x41306000}, 
+    {0x41308000}, {0x4130a000}, {0x4130c000}, {0x4130e000}, 
+    {0x41310000}, {0x41312000}, {0x41314000}, {0x41316000}, 
+    {0x41318000}, {0x4131a000}, {0x4131c000}, {0x4131e000}, 
+    {0x41320000}, {0x41322000}, {0x41324000}, {0x41326000}, 
+    {0x41328000}, {0x4132a000}, {0x4132c000}, {0x4132e000}, 
+    {0x41330000}, {0x41332000}, {0x41334000}, {0x41336000}, 
+    {0x41338000}, {0x4133a000}, {0x4133c000}, {0x4133e000}, 
+    {0x41340000}, {0x41342000}, {0x41344000}, {0x41346000}, 
+    {0x41348000}, {0x4134a000}, {0x4134c000}, {0x4134e000}, 
+    {0x41350000}, {0x41352000}, {0x41354000}, {0x41356000}, 
+    {0x41358000}, {0x4135a000}, {0x4135c000}, {0x4135e000}, 
+    {0x41360000}, {0x41362000}, {0x41364000}, {0x41366000}, 
+    {0x41368000}, {0x4136a000}, {0x4136c000}, {0x4136e000}, 
+    {0x41370000}, {0x41372000}, {0x41374000}, {0x41376000}, 
+    {0x41378000}, {0x4137a000}, {0x4137c000}, {0x4137e000}, 
+    {0x41380000}, {0x41382000}, {0x41384000}, {0x41386000}, 
+    {0x41388000}, {0x4138a000}, {0x4138c000}, {0x4138e000}, 
+    {0x41390000}, {0x41392000}, {0x41394000}, {0x41396000}, 
+    {0x41398000}, {0x4139a000}, {0x4139c000}, {0x4139e000}, 
+    {0x413a0000}, {0x413a2000}, {0x413a4000}, {0x413a6000}, 
+    {0x413a8000}, {0x413aa000}, {0x413ac000}, {0x413ae000}, 
+    {0x413b0000}, {0x413b2000}, {0x413b4000}, {0x413b6000}, 
+    {0x413b8000}, {0x413ba000}, {0x413bc000}, {0x413be000}, 
+    {0x413c0000}, {0x413c2000}, {0x413c4000}, {0x413c6000}, 
+    {0x413c8000}, {0x413ca000}, {0x413cc000}, {0x413ce000}, 
+    {0x413d0000}, {0x413d2000}, {0x413d4000}, {0x413d6000}, 
+    {0x413d8000}, {0x413da000}, {0x413dc000}, {0x413de000}, 
+    {0x413e0000}, {0x413e2000}, {0x413e4000}, {0x413e6000}, 
+    {0x413e8000}, {0x413ea000}, {0x413ec000}, {0x413ee000}, 
+    {0x413f0000}, {0x413f2000}, {0x413f4000}, {0x413f6000}, 
+    {0x413f8000}, {0x413fa000}, {0x413fc000}, {0x413fe000}, 
+    {0x41400000}, {0x41402000}, {0x41404000}, {0x41406000}, 
+    {0x41408000}, {0x4140a000}, {0x4140c000}, {0x4140e000}, 
+    {0x41410000}, {0x41412000}, {0x41414000}, {0x41416000}, 
+    {0x41418000}, {0x4141a000}, {0x4141c000}, {0x4141e000}, 
+    {0x41420000}, {0x41422000}, {0x41424000}, {0x41426000}, 
+    {0x41428000}, {0x4142a000}, {0x4142c000}, {0x4142e000}, 
+    {0x41430000}, {0x41432000}, {0x41434000}, {0x41436000}, 
+    {0x41438000}, {0x4143a000}, {0x4143c000}, {0x4143e000}, 
+    {0x41440000}, {0x41442000}, {0x41444000}, {0x41446000}, 
+    {0x41448000}, {0x4144a000}, {0x4144c000}, {0x4144e000}, 
+    {0x41450000}, {0x41452000}, {0x41454000}, {0x41456000}, 
+    {0x41458000}, {0x4145a000}, {0x4145c000}, {0x4145e000}, 
+    {0x41460000}, {0x41462000}, {0x41464000}, {0x41466000}, 
+    {0x41468000}, {0x4146a000}, {0x4146c000}, {0x4146e000}, 
+    {0x41470000}, {0x41472000}, {0x41474000}, {0x41476000}, 
+    {0x41478000}, {0x4147a000}, {0x4147c000}, {0x4147e000}, 
+    {0x41480000}, {0x41482000}, {0x41484000}, {0x41486000}, 
+    {0x41488000}, {0x4148a000}, {0x4148c000}, {0x4148e000}, 
+    {0x41490000}, {0x41492000}, {0x41494000}, {0x41496000}, 
+    {0x41498000}, {0x4149a000}, {0x4149c000}, {0x4149e000}, 
+    {0x414a0000}, {0x414a2000}, {0x414a4000}, {0x414a6000}, 
+    {0x414a8000}, {0x414aa000}, {0x414ac000}, {0x414ae000}, 
+    {0x414b0000}, {0x414b2000}, {0x414b4000}, {0x414b6000}, 
+    {0x414b8000}, {0x414ba000}, {0x414bc000}, {0x414be000}, 
+    {0x414c0000}, {0x414c2000}, {0x414c4000}, {0x414c6000}, 
+    {0x414c8000}, {0x414ca000}, {0x414cc000}, {0x414ce000}, 
+    {0x414d0000}, {0x414d2000}, {0x414d4000}, {0x414d6000}, 
+    {0x414d8000}, {0x414da000}, {0x414dc000}, {0x414de000}, 
+    {0x414e0000}, {0x414e2000}, {0x414e4000}, {0x414e6000}, 
+    {0x414e8000}, {0x414ea000}, {0x414ec000}, {0x414ee000}, 
+    {0x414f0000}, {0x414f2000}, {0x414f4000}, {0x414f6000}, 
+    {0x414f8000}, {0x414fa000}, {0x414fc000}, {0x414fe000}, 
+    {0x41500000}, {0x41502000}, {0x41504000}, {0x41506000}, 
+    {0x41508000}, {0x4150a000}, {0x4150c000}, {0x4150e000}, 
+    {0x41510000}, {0x41512000}, {0x41514000}, {0x41516000}, 
+    {0x41518000}, {0x4151a000}, {0x4151c000}, {0x4151e000}, 
+    {0x41520000}, {0x41522000}, {0x41524000}, {0x41526000}, 
+    {0x41528000}, {0x4152a000}, {0x4152c000}, {0x4152e000}, 
+    {0x41530000}, {0x41532000}, {0x41534000}, {0x41536000}, 
+    {0x41538000}, {0x4153a000}, {0x4153c000}, {0x4153e000}, 
+    {0x41540000}, {0x41542000}, {0x41544000}, {0x41546000}, 
+    {0x41548000}, {0x4154a000}, {0x4154c000}, {0x4154e000}, 
+    {0x41550000}, {0x41552000}, {0x41554000}, {0x41556000}, 
+    {0x41558000}, {0x4155a000}, {0x4155c000}, {0x4155e000}, 
+    {0x41560000}, {0x41562000}, {0x41564000}, {0x41566000}, 
+    {0x41568000}, {0x4156a000}, {0x4156c000}, {0x4156e000}, 
+    {0x41570000}, {0x41572000}, {0x41574000}, {0x41576000}, 
+    {0x41578000}, {0x4157a000}, {0x4157c000}, {0x4157e000}, 
+    {0x41580000}, {0x41582000}, {0x41584000}, {0x41586000}, 
+    {0x41588000}, {0x4158a000}, {0x4158c000}, {0x4158e000}, 
+    {0x41590000}, {0x41592000}, {0x41594000}, {0x41596000}, 
+    {0x41598000}, {0x4159a000}, {0x4159c000}, {0x4159e000}, 
+    {0x415a0000}, {0x415a2000}, {0x415a4000}, {0x415a6000}, 
+    {0x415a8000}, {0x415aa000}, {0x415ac000}, {0x415ae000}, 
+    {0x415b0000}, {0x415b2000}, {0x415b4000}, {0x415b6000}, 
+    {0x415b8000}, {0x415ba000}, {0x415bc000}, {0x415be000}, 
+    {0x415c0000}, {0x415c2000}, {0x415c4000}, {0x415c6000}, 
+    {0x415c8000}, {0x415ca000}, {0x415cc000}, {0x415ce000}, 
+    {0x415d0000}, {0x415d2000}, {0x415d4000}, {0x415d6000}, 
+    {0x415d8000}, {0x415da000}, {0x415dc000}, {0x415de000}, 
+    {0x415e0000}, {0x415e2000}, {0x415e4000}, {0x415e6000}, 
+    {0x415e8000}, {0x415ea000}, {0x415ec000}, {0x415ee000}, 
+    {0x415f0000}, {0x415f2000}, {0x415f4000}, {0x415f6000}, 
+    {0x415f8000}, {0x415fa000}, {0x415fc000}, {0x415fe000}, 
+    {0x41600000}, {0x41602000}, {0x41604000}, {0x41606000}, 
+    {0x41608000}, {0x4160a000}, {0x4160c000}, {0x4160e000}, 
+    {0x41610000}, {0x41612000}, {0x41614000}, {0x41616000}, 
+    {0x41618000}, {0x4161a000}, {0x4161c000}, {0x4161e000}, 
+    {0x41620000}, {0x41622000}, {0x41624000}, {0x41626000}, 
+    {0x41628000}, {0x4162a000}, {0x4162c000}, {0x4162e000}, 
+    {0x41630000}, {0x41632000}, {0x41634000}, {0x41636000}, 
+    {0x41638000}, {0x4163a000}, {0x4163c000}, {0x4163e000}, 
+    {0x41640000}, {0x41642000}, {0x41644000}, {0x41646000}, 
+    {0x41648000}, {0x4164a000}, {0x4164c000}, {0x4164e000}, 
+    {0x41650000}, {0x41652000}, {0x41654000}, {0x41656000}, 
+    {0x41658000}, {0x4165a000}, {0x4165c000}, {0x4165e000}, 
+    {0x41660000}, {0x41662000}, {0x41664000}, {0x41666000}, 
+    {0x41668000}, {0x4166a000}, {0x4166c000}, {0x4166e000}, 
+    {0x41670000}, {0x41672000}, {0x41674000}, {0x41676000}, 
+    {0x41678000}, {0x4167a000}, {0x4167c000}, {0x4167e000}, 
+    {0x41680000}, {0x41682000}, {0x41684000}, {0x41686000}, 
+    {0x41688000}, {0x4168a000}, {0x4168c000}, {0x4168e000}, 
+    {0x41690000}, {0x41692000}, {0x41694000}, {0x41696000}, 
+    {0x41698000}, {0x4169a000}, {0x4169c000}, {0x4169e000}, 
+    {0x416a0000}, {0x416a2000}, {0x416a4000}, {0x416a6000}, 
+    {0x416a8000}, {0x416aa000}, {0x416ac000}, {0x416ae000}, 
+    {0x416b0000}, {0x416b2000}, {0x416b4000}, {0x416b6000}, 
+    {0x416b8000}, {0x416ba000}, {0x416bc000}, {0x416be000}, 
+    {0x416c0000}, {0x416c2000}, {0x416c4000}, {0x416c6000}, 
+    {0x416c8000}, {0x416ca000}, {0x416cc000}, {0x416ce000}, 
+    {0x416d0000}, {0x416d2000}, {0x416d4000}, {0x416d6000}, 
+    {0x416d8000}, {0x416da000}, {0x416dc000}, {0x416de000}, 
+    {0x416e0000}, {0x416e2000}, {0x416e4000}, {0x416e6000}, 
+    {0x416e8000}, {0x416ea000}, {0x416ec000}, {0x416ee000}, 
+    {0x416f0000}, {0x416f2000}, {0x416f4000}, {0x416f6000}, 
+    {0x416f8000}, {0x416fa000}, {0x416fc000}, {0x416fe000}, 
+    {0x41700000}, {0x41702000}, {0x41704000}, {0x41706000}, 
+    {0x41708000}, {0x4170a000}, {0x4170c000}, {0x4170e000}, 
+    {0x41710000}, {0x41712000}, {0x41714000}, {0x41716000}, 
+    {0x41718000}, {0x4171a000}, {0x4171c000}, {0x4171e000}, 
+    {0x41720000}, {0x41722000}, {0x41724000}, {0x41726000}, 
+    {0x41728000}, {0x4172a000}, {0x4172c000}, {0x4172e000}, 
+    {0x41730000}, {0x41732000}, {0x41734000}, {0x41736000}, 
+    {0x41738000}, {0x4173a000}, {0x4173c000}, {0x4173e000}, 
+    {0x41740000}, {0x41742000}, {0x41744000}, {0x41746000}, 
+    {0x41748000}, {0x4174a000}, {0x4174c000}, {0x4174e000}, 
+    {0x41750000}, {0x41752000}, {0x41754000}, {0x41756000}, 
+    {0x41758000}, {0x4175a000}, {0x4175c000}, {0x4175e000}, 
+    {0x41760000}, {0x41762000}, {0x41764000}, {0x41766000}, 
+    {0x41768000}, {0x4176a000}, {0x4176c000}, {0x4176e000}, 
+    {0x41770000}, {0x41772000}, {0x41774000}, {0x41776000}, 
+    {0x41778000}, {0x4177a000}, {0x4177c000}, {0x4177e000}, 
+    {0x41780000}, {0x41782000}, {0x41784000}, {0x41786000}, 
+    {0x41788000}, {0x4178a000}, {0x4178c000}, {0x4178e000}, 
+    {0x41790000}, {0x41792000}, {0x41794000}, {0x41796000}, 
+    {0x41798000}, {0x4179a000}, {0x4179c000}, {0x4179e000}, 
+    {0x417a0000}, {0x417a2000}, {0x417a4000}, {0x417a6000}, 
+    {0x417a8000}, {0x417aa000}, {0x417ac000}, {0x417ae000}, 
+    {0x417b0000}, {0x417b2000}, {0x417b4000}, {0x417b6000}, 
+    {0x417b8000}, {0x417ba000}, {0x417bc000}, {0x417be000}, 
+    {0x417c0000}, {0x417c2000}, {0x417c4000}, {0x417c6000}, 
+    {0x417c8000}, {0x417ca000}, {0x417cc000}, {0x417ce000}, 
+    {0x417d0000}, {0x417d2000}, {0x417d4000}, {0x417d6000}, 
+    {0x417d8000}, {0x417da000}, {0x417dc000}, {0x417de000}, 
+    {0x417e0000}, {0x417e2000}, {0x417e4000}, {0x417e6000}, 
+    {0x417e8000}, {0x417ea000}, {0x417ec000}, {0x417ee000}, 
+    {0x417f0000}, {0x417f2000}, {0x417f4000}, {0x417f6000}, 
+    {0x417f8000}, {0x417fa000}, {0x417fc000}, {0x417fe000}, 
+    {0x41800000}, {0x41802000}, {0x41804000}, {0x41806000}, 
+    {0x41808000}, {0x4180a000}, {0x4180c000}, {0x4180e000}, 
+    {0x41810000}, {0x41812000}, {0x41814000}, {0x41816000}, 
+    {0x41818000}, {0x4181a000}, {0x4181c000}, {0x4181e000}, 
+    {0x41820000}, {0x41822000}, {0x41824000}, {0x41826000}, 
+    {0x41828000}, {0x4182a000}, {0x4182c000}, {0x4182e000}, 
+    {0x41830000}, {0x41832000}, {0x41834000}, {0x41836000}, 
+    {0x41838000}, {0x4183a000}, {0x4183c000}, {0x4183e000}, 
+    {0x41840000}, {0x41842000}, {0x41844000}, {0x41846000}, 
+    {0x41848000}, {0x4184a000}, {0x4184c000}, {0x4184e000}, 
+    {0x41850000}, {0x41852000}, {0x41854000}, {0x41856000}, 
+    {0x41858000}, {0x4185a000}, {0x4185c000}, {0x4185e000}, 
+    {0x41860000}, {0x41862000}, {0x41864000}, {0x41866000}, 
+    {0x41868000}, {0x4186a000}, {0x4186c000}, {0x4186e000}, 
+    {0x41870000}, {0x41872000}, {0x41874000}, {0x41876000}, 
+    {0x41878000}, {0x4187a000}, {0x4187c000}, {0x4187e000}, 
+    {0x41880000}, {0x41882000}, {0x41884000}, {0x41886000}, 
+    {0x41888000}, {0x4188a000}, {0x4188c000}, {0x4188e000}, 
+    {0x41890000}, {0x41892000}, {0x41894000}, {0x41896000}, 
+    {0x41898000}, {0x4189a000}, {0x4189c000}, {0x4189e000}, 
+    {0x418a0000}, {0x418a2000}, {0x418a4000}, {0x418a6000}, 
+    {0x418a8000}, {0x418aa000}, {0x418ac000}, {0x418ae000}, 
+    {0x418b0000}, {0x418b2000}, {0x418b4000}, {0x418b6000}, 
+    {0x418b8000}, {0x418ba000}, {0x418bc000}, {0x418be000}, 
+    {0x418c0000}, {0x418c2000}, {0x418c4000}, {0x418c6000}, 
+    {0x418c8000}, {0x418ca000}, {0x418cc000}, {0x418ce000}, 
+    {0x418d0000}, {0x418d2000}, {0x418d4000}, {0x418d6000}, 
+    {0x418d8000}, {0x418da000}, {0x418dc000}, {0x418de000}, 
+    {0x418e0000}, {0x418e2000}, {0x418e4000}, {0x418e6000}, 
+    {0x418e8000}, {0x418ea000}, {0x418ec000}, {0x418ee000}, 
+    {0x418f0000}, {0x418f2000}, {0x418f4000}, {0x418f6000}, 
+    {0x418f8000}, {0x418fa000}, {0x418fc000}, {0x418fe000}, 
+    {0x41900000}, {0x41902000}, {0x41904000}, {0x41906000}, 
+    {0x41908000}, {0x4190a000}, {0x4190c000}, {0x4190e000}, 
+    {0x41910000}, {0x41912000}, {0x41914000}, {0x41916000}, 
+    {0x41918000}, {0x4191a000}, {0x4191c000}, {0x4191e000}, 
+    {0x41920000}, {0x41922000}, {0x41924000}, {0x41926000}, 
+    {0x41928000}, {0x4192a000}, {0x4192c000}, {0x4192e000}, 
+    {0x41930000}, {0x41932000}, {0x41934000}, {0x41936000}, 
+    {0x41938000}, {0x4193a000}, {0x4193c000}, {0x4193e000}, 
+    {0x41940000}, {0x41942000}, {0x41944000}, {0x41946000}, 
+    {0x41948000}, {0x4194a000}, {0x4194c000}, {0x4194e000}, 
+    {0x41950000}, {0x41952000}, {0x41954000}, {0x41956000}, 
+    {0x41958000}, {0x4195a000}, {0x4195c000}, {0x4195e000}, 
+    {0x41960000}, {0x41962000}, {0x41964000}, {0x41966000}, 
+    {0x41968000}, {0x4196a000}, {0x4196c000}, {0x4196e000}, 
+    {0x41970000}, {0x41972000}, {0x41974000}, {0x41976000}, 
+    {0x41978000}, {0x4197a000}, {0x4197c000}, {0x4197e000}, 
+    {0x41980000}, {0x41982000}, {0x41984000}, {0x41986000}, 
+    {0x41988000}, {0x4198a000}, {0x4198c000}, {0x4198e000}, 
+    {0x41990000}, {0x41992000}, {0x41994000}, {0x41996000}, 
+    {0x41998000}, {0x4199a000}, {0x4199c000}, {0x4199e000}, 
+    {0x419a0000}, {0x419a2000}, {0x419a4000}, {0x419a6000}, 
+    {0x419a8000}, {0x419aa000}, {0x419ac000}, {0x419ae000}, 
+    {0x419b0000}, {0x419b2000}, {0x419b4000}, {0x419b6000}, 
+    {0x419b8000}, {0x419ba000}, {0x419bc000}, {0x419be000}, 
+    {0x419c0000}, {0x419c2000}, {0x419c4000}, {0x419c6000}, 
+    {0x419c8000}, {0x419ca000}, {0x419cc000}, {0x419ce000}, 
+    {0x419d0000}, {0x419d2000}, {0x419d4000}, {0x419d6000}, 
+    {0x419d8000}, {0x419da000}, {0x419dc000}, {0x419de000}, 
+    {0x419e0000}, {0x419e2000}, {0x419e4000}, {0x419e6000}, 
+    {0x419e8000}, {0x419ea000}, {0x419ec000}, {0x419ee000}, 
+    {0x419f0000}, {0x419f2000}, {0x419f4000}, {0x419f6000}, 
+    {0x419f8000}, {0x419fa000}, {0x419fc000}, {0x419fe000}, 
+    {0x41a00000}, {0x41a02000}, {0x41a04000}, {0x41a06000}, 
+    {0x41a08000}, {0x41a0a000}, {0x41a0c000}, {0x41a0e000}, 
+    {0x41a10000}, {0x41a12000}, {0x41a14000}, {0x41a16000}, 
+    {0x41a18000}, {0x41a1a000}, {0x41a1c000}, {0x41a1e000}, 
+    {0x41a20000}, {0x41a22000}, {0x41a24000}, {0x41a26000}, 
+    {0x41a28000}, {0x41a2a000}, {0x41a2c000}, {0x41a2e000}, 
+    {0x41a30000}, {0x41a32000}, {0x41a34000}, {0x41a36000}, 
+    {0x41a38000}, {0x41a3a000}, {0x41a3c000}, {0x41a3e000}, 
+    {0x41a40000}, {0x41a42000}, {0x41a44000}, {0x41a46000}, 
+    {0x41a48000}, {0x41a4a000}, {0x41a4c000}, {0x41a4e000}, 
+    {0x41a50000}, {0x41a52000}, {0x41a54000}, {0x41a56000}, 
+    {0x41a58000}, {0x41a5a000}, {0x41a5c000}, {0x41a5e000}, 
+    {0x41a60000}, {0x41a62000}, {0x41a64000}, {0x41a66000}, 
+    {0x41a68000}, {0x41a6a000}, {0x41a6c000}, {0x41a6e000}, 
+    {0x41a70000}, {0x41a72000}, {0x41a74000}, {0x41a76000}, 
+    {0x41a78000}, {0x41a7a000}, {0x41a7c000}, {0x41a7e000}, 
+    {0x41a80000}, {0x41a82000}, {0x41a84000}, {0x41a86000}, 
+    {0x41a88000}, {0x41a8a000}, {0x41a8c000}, {0x41a8e000}, 
+    {0x41a90000}, {0x41a92000}, {0x41a94000}, {0x41a96000}, 
+    {0x41a98000}, {0x41a9a000}, {0x41a9c000}, {0x41a9e000}, 
+    {0x41aa0000}, {0x41aa2000}, {0x41aa4000}, {0x41aa6000}, 
+    {0x41aa8000}, {0x41aaa000}, {0x41aac000}, {0x41aae000}, 
+    {0x41ab0000}, {0x41ab2000}, {0x41ab4000}, {0x41ab6000}, 
+    {0x41ab8000}, {0x41aba000}, {0x41abc000}, {0x41abe000}, 
+    {0x41ac0000}, {0x41ac2000}, {0x41ac4000}, {0x41ac6000}, 
+    {0x41ac8000}, {0x41aca000}, {0x41acc000}, {0x41ace000}, 
+    {0x41ad0000}, {0x41ad2000}, {0x41ad4000}, {0x41ad6000}, 
+    {0x41ad8000}, {0x41ada000}, {0x41adc000}, {0x41ade000}, 
+    {0x41ae0000}, {0x41ae2000}, {0x41ae4000}, {0x41ae6000}, 
+    {0x41ae8000}, {0x41aea000}, {0x41aec000}, {0x41aee000}, 
+    {0x41af0000}, {0x41af2000}, {0x41af4000}, {0x41af6000}, 
+    {0x41af8000}, {0x41afa000}, {0x41afc000}, {0x41afe000}, 
+    {0x41b00000}, {0x41b02000}, {0x41b04000}, {0x41b06000}, 
+    {0x41b08000}, {0x41b0a000}, {0x41b0c000}, {0x41b0e000}, 
+    {0x41b10000}, {0x41b12000}, {0x41b14000}, {0x41b16000}, 
+    {0x41b18000}, {0x41b1a000}, {0x41b1c000}, {0x41b1e000}, 
+    {0x41b20000}, {0x41b22000}, {0x41b24000}, {0x41b26000}, 
+    {0x41b28000}, {0x41b2a000}, {0x41b2c000}, {0x41b2e000}, 
+    {0x41b30000}, {0x41b32000}, {0x41b34000}, {0x41b36000}, 
+    {0x41b38000}, {0x41b3a000}, {0x41b3c000}, {0x41b3e000}, 
+    {0x41b40000}, {0x41b42000}, {0x41b44000}, {0x41b46000}, 
+    {0x41b48000}, {0x41b4a000}, {0x41b4c000}, {0x41b4e000}, 
+    {0x41b50000}, {0x41b52000}, {0x41b54000}, {0x41b56000}, 
+    {0x41b58000}, {0x41b5a000}, {0x41b5c000}, {0x41b5e000}, 
+    {0x41b60000}, {0x41b62000}, {0x41b64000}, {0x41b66000}, 
+    {0x41b68000}, {0x41b6a000}, {0x41b6c000}, {0x41b6e000}, 
+    {0x41b70000}, {0x41b72000}, {0x41b74000}, {0x41b76000}, 
+    {0x41b78000}, {0x41b7a000}, {0x41b7c000}, {0x41b7e000}, 
+    {0x41b80000}, {0x41b82000}, {0x41b84000}, {0x41b86000}, 
+    {0x41b88000}, {0x41b8a000}, {0x41b8c000}, {0x41b8e000}, 
+    {0x41b90000}, {0x41b92000}, {0x41b94000}, {0x41b96000}, 
+    {0x41b98000}, {0x41b9a000}, {0x41b9c000}, {0x41b9e000}, 
+    {0x41ba0000}, {0x41ba2000}, {0x41ba4000}, {0x41ba6000}, 
+    {0x41ba8000}, {0x41baa000}, {0x41bac000}, {0x41bae000}, 
+    {0x41bb0000}, {0x41bb2000}, {0x41bb4000}, {0x41bb6000}, 
+    {0x41bb8000}, {0x41bba000}, {0x41bbc000}, {0x41bbe000}, 
+    {0x41bc0000}, {0x41bc2000}, {0x41bc4000}, {0x41bc6000}, 
+    {0x41bc8000}, {0x41bca000}, {0x41bcc000}, {0x41bce000}, 
+    {0x41bd0000}, {0x41bd2000}, {0x41bd4000}, {0x41bd6000}, 
+    {0x41bd8000}, {0x41bda000}, {0x41bdc000}, {0x41bde000}, 
+    {0x41be0000}, {0x41be2000}, {0x41be4000}, {0x41be6000}, 
+    {0x41be8000}, {0x41bea000}, {0x41bec000}, {0x41bee000}, 
+    {0x41bf0000}, {0x41bf2000}, {0x41bf4000}, {0x41bf6000}, 
+    {0x41bf8000}, {0x41bfa000}, {0x41bfc000}, {0x41bfe000}, 
+    {0x41c00000}, {0x41c02000}, {0x41c04000}, {0x41c06000}, 
+    {0x41c08000}, {0x41c0a000}, {0x41c0c000}, {0x41c0e000}, 
+    {0x41c10000}, {0x41c12000}, {0x41c14000}, {0x41c16000}, 
+    {0x41c18000}, {0x41c1a000}, {0x41c1c000}, {0x41c1e000}, 
+    {0x41c20000}, {0x41c22000}, {0x41c24000}, {0x41c26000}, 
+    {0x41c28000}, {0x41c2a000}, {0x41c2c000}, {0x41c2e000}, 
+    {0x41c30000}, {0x41c32000}, {0x41c34000}, {0x41c36000}, 
+    {0x41c38000}, {0x41c3a000}, {0x41c3c000}, {0x41c3e000}, 
+    {0x41c40000}, {0x41c42000}, {0x41c44000}, {0x41c46000}, 
+    {0x41c48000}, {0x41c4a000}, {0x41c4c000}, {0x41c4e000}, 
+    {0x41c50000}, {0x41c52000}, {0x41c54000}, {0x41c56000}, 
+    {0x41c58000}, {0x41c5a000}, {0x41c5c000}, {0x41c5e000}, 
+    {0x41c60000}, {0x41c62000}, {0x41c64000}, {0x41c66000}, 
+    {0x41c68000}, {0x41c6a000}, {0x41c6c000}, {0x41c6e000}, 
+    {0x41c70000}, {0x41c72000}, {0x41c74000}, {0x41c76000}, 
+    {0x41c78000}, {0x41c7a000}, {0x41c7c000}, {0x41c7e000}, 
+    {0x41c80000}, {0x41c82000}, {0x41c84000}, {0x41c86000}, 
+    {0x41c88000}, {0x41c8a000}, {0x41c8c000}, {0x41c8e000}, 
+    {0x41c90000}, {0x41c92000}, {0x41c94000}, {0x41c96000}, 
+    {0x41c98000}, {0x41c9a000}, {0x41c9c000}, {0x41c9e000}, 
+    {0x41ca0000}, {0x41ca2000}, {0x41ca4000}, {0x41ca6000}, 
+    {0x41ca8000}, {0x41caa000}, {0x41cac000}, {0x41cae000}, 
+    {0x41cb0000}, {0x41cb2000}, {0x41cb4000}, {0x41cb6000}, 
+    {0x41cb8000}, {0x41cba000}, {0x41cbc000}, {0x41cbe000}, 
+    {0x41cc0000}, {0x41cc2000}, {0x41cc4000}, {0x41cc6000}, 
+    {0x41cc8000}, {0x41cca000}, {0x41ccc000}, {0x41cce000}, 
+    {0x41cd0000}, {0x41cd2000}, {0x41cd4000}, {0x41cd6000}, 
+    {0x41cd8000}, {0x41cda000}, {0x41cdc000}, {0x41cde000}, 
+    {0x41ce0000}, {0x41ce2000}, {0x41ce4000}, {0x41ce6000}, 
+    {0x41ce8000}, {0x41cea000}, {0x41cec000}, {0x41cee000}, 
+    {0x41cf0000}, {0x41cf2000}, {0x41cf4000}, {0x41cf6000}, 
+    {0x41cf8000}, {0x41cfa000}, {0x41cfc000}, {0x41cfe000}, 
+    {0x41d00000}, {0x41d02000}, {0x41d04000}, {0x41d06000}, 
+    {0x41d08000}, {0x41d0a000}, {0x41d0c000}, {0x41d0e000}, 
+    {0x41d10000}, {0x41d12000}, {0x41d14000}, {0x41d16000}, 
+    {0x41d18000}, {0x41d1a000}, {0x41d1c000}, {0x41d1e000}, 
+    {0x41d20000}, {0x41d22000}, {0x41d24000}, {0x41d26000}, 
+    {0x41d28000}, {0x41d2a000}, {0x41d2c000}, {0x41d2e000}, 
+    {0x41d30000}, {0x41d32000}, {0x41d34000}, {0x41d36000}, 
+    {0x41d38000}, {0x41d3a000}, {0x41d3c000}, {0x41d3e000}, 
+    {0x41d40000}, {0x41d42000}, {0x41d44000}, {0x41d46000}, 
+    {0x41d48000}, {0x41d4a000}, {0x41d4c000}, {0x41d4e000}, 
+    {0x41d50000}, {0x41d52000}, {0x41d54000}, {0x41d56000}, 
+    {0x41d58000}, {0x41d5a000}, {0x41d5c000}, {0x41d5e000}, 
+    {0x41d60000}, {0x41d62000}, {0x41d64000}, {0x41d66000}, 
+    {0x41d68000}, {0x41d6a000}, {0x41d6c000}, {0x41d6e000}, 
+    {0x41d70000}, {0x41d72000}, {0x41d74000}, {0x41d76000}, 
+    {0x41d78000}, {0x41d7a000}, {0x41d7c000}, {0x41d7e000}, 
+    {0x41d80000}, {0x41d82000}, {0x41d84000}, {0x41d86000}, 
+    {0x41d88000}, {0x41d8a000}, {0x41d8c000}, {0x41d8e000}, 
+    {0x41d90000}, {0x41d92000}, {0x41d94000}, {0x41d96000}, 
+    {0x41d98000}, {0x41d9a000}, {0x41d9c000}, {0x41d9e000}, 
+    {0x41da0000}, {0x41da2000}, {0x41da4000}, {0x41da6000}, 
+    {0x41da8000}, {0x41daa000}, {0x41dac000}, {0x41dae000}, 
+    {0x41db0000}, {0x41db2000}, {0x41db4000}, {0x41db6000}, 
+    {0x41db8000}, {0x41dba000}, {0x41dbc000}, {0x41dbe000}, 
+    {0x41dc0000}, {0x41dc2000}, {0x41dc4000}, {0x41dc6000}, 
+    {0x41dc8000}, {0x41dca000}, {0x41dcc000}, {0x41dce000}, 
+    {0x41dd0000}, {0x41dd2000}, {0x41dd4000}, {0x41dd6000}, 
+    {0x41dd8000}, {0x41dda000}, {0x41ddc000}, {0x41dde000}, 
+    {0x41de0000}, {0x41de2000}, {0x41de4000}, {0x41de6000}, 
+    {0x41de8000}, {0x41dea000}, {0x41dec000}, {0x41dee000}, 
+    {0x41df0000}, {0x41df2000}, {0x41df4000}, {0x41df6000}, 
+    {0x41df8000}, {0x41dfa000}, {0x41dfc000}, {0x41dfe000}, 
+    {0x41e00000}, {0x41e02000}, {0x41e04000}, {0x41e06000}, 
+    {0x41e08000}, {0x41e0a000}, {0x41e0c000}, {0x41e0e000}, 
+    {0x41e10000}, {0x41e12000}, {0x41e14000}, {0x41e16000}, 
+    {0x41e18000}, {0x41e1a000}, {0x41e1c000}, {0x41e1e000}, 
+    {0x41e20000}, {0x41e22000}, {0x41e24000}, {0x41e26000}, 
+    {0x41e28000}, {0x41e2a000}, {0x41e2c000}, {0x41e2e000}, 
+    {0x41e30000}, {0x41e32000}, {0x41e34000}, {0x41e36000}, 
+    {0x41e38000}, {0x41e3a000}, {0x41e3c000}, {0x41e3e000}, 
+    {0x41e40000}, {0x41e42000}, {0x41e44000}, {0x41e46000}, 
+    {0x41e48000}, {0x41e4a000}, {0x41e4c000}, {0x41e4e000}, 
+    {0x41e50000}, {0x41e52000}, {0x41e54000}, {0x41e56000}, 
+    {0x41e58000}, {0x41e5a000}, {0x41e5c000}, {0x41e5e000}, 
+    {0x41e60000}, {0x41e62000}, {0x41e64000}, {0x41e66000}, 
+    {0x41e68000}, {0x41e6a000}, {0x41e6c000}, {0x41e6e000}, 
+    {0x41e70000}, {0x41e72000}, {0x41e74000}, {0x41e76000}, 
+    {0x41e78000}, {0x41e7a000}, {0x41e7c000}, {0x41e7e000}, 
+    {0x41e80000}, {0x41e82000}, {0x41e84000}, {0x41e86000}, 
+    {0x41e88000}, {0x41e8a000}, {0x41e8c000}, {0x41e8e000}, 
+    {0x41e90000}, {0x41e92000}, {0x41e94000}, {0x41e96000}, 
+    {0x41e98000}, {0x41e9a000}, {0x41e9c000}, {0x41e9e000}, 
+    {0x41ea0000}, {0x41ea2000}, {0x41ea4000}, {0x41ea6000}, 
+    {0x41ea8000}, {0x41eaa000}, {0x41eac000}, {0x41eae000}, 
+    {0x41eb0000}, {0x41eb2000}, {0x41eb4000}, {0x41eb6000}, 
+    {0x41eb8000}, {0x41eba000}, {0x41ebc000}, {0x41ebe000}, 
+    {0x41ec0000}, {0x41ec2000}, {0x41ec4000}, {0x41ec6000}, 
+    {0x41ec8000}, {0x41eca000}, {0x41ecc000}, {0x41ece000}, 
+    {0x41ed0000}, {0x41ed2000}, {0x41ed4000}, {0x41ed6000}, 
+    {0x41ed8000}, {0x41eda000}, {0x41edc000}, {0x41ede000}, 
+    {0x41ee0000}, {0x41ee2000}, {0x41ee4000}, {0x41ee6000}, 
+    {0x41ee8000}, {0x41eea000}, {0x41eec000}, {0x41eee000}, 
+    {0x41ef0000}, {0x41ef2000}, {0x41ef4000}, {0x41ef6000}, 
+    {0x41ef8000}, {0x41efa000}, {0x41efc000}, {0x41efe000}, 
+    {0x41f00000}, {0x41f02000}, {0x41f04000}, {0x41f06000}, 
+    {0x41f08000}, {0x41f0a000}, {0x41f0c000}, {0x41f0e000}, 
+    {0x41f10000}, {0x41f12000}, {0x41f14000}, {0x41f16000}, 
+    {0x41f18000}, {0x41f1a000}, {0x41f1c000}, {0x41f1e000}, 
+    {0x41f20000}, {0x41f22000}, {0x41f24000}, {0x41f26000}, 
+    {0x41f28000}, {0x41f2a000}, {0x41f2c000}, {0x41f2e000}, 
+    {0x41f30000}, {0x41f32000}, {0x41f34000}, {0x41f36000}, 
+    {0x41f38000}, {0x41f3a000}, {0x41f3c000}, {0x41f3e000}, 
+    {0x41f40000}, {0x41f42000}, {0x41f44000}, {0x41f46000}, 
+    {0x41f48000}, {0x41f4a000}, {0x41f4c000}, {0x41f4e000}, 
+    {0x41f50000}, {0x41f52000}, {0x41f54000}, {0x41f56000}, 
+    {0x41f58000}, {0x41f5a000}, {0x41f5c000}, {0x41f5e000}, 
+    {0x41f60000}, {0x41f62000}, {0x41f64000}, {0x41f66000}, 
+    {0x41f68000}, {0x41f6a000}, {0x41f6c000}, {0x41f6e000}, 
+    {0x41f70000}, {0x41f72000}, {0x41f74000}, {0x41f76000}, 
+    {0x41f78000}, {0x41f7a000}, {0x41f7c000}, {0x41f7e000}, 
+    {0x41f80000}, {0x41f82000}, {0x41f84000}, {0x41f86000}, 
+    {0x41f88000}, {0x41f8a000}, {0x41f8c000}, {0x41f8e000}, 
+    {0x41f90000}, {0x41f92000}, {0x41f94000}, {0x41f96000}, 
+    {0x41f98000}, {0x41f9a000}, {0x41f9c000}, {0x41f9e000}, 
+    {0x41fa0000}, {0x41fa2000}, {0x41fa4000}, {0x41fa6000}, 
+    {0x41fa8000}, {0x41faa000}, {0x41fac000}, {0x41fae000}, 
+    {0x41fb0000}, {0x41fb2000}, {0x41fb4000}, {0x41fb6000}, 
+    {0x41fb8000}, {0x41fba000}, {0x41fbc000}, {0x41fbe000}, 
+    {0x41fc0000}, {0x41fc2000}, {0x41fc4000}, {0x41fc6000}, 
+    {0x41fc8000}, {0x41fca000}, {0x41fcc000}, {0x41fce000}, 
+    {0x41fd0000}, {0x41fd2000}, {0x41fd4000}, {0x41fd6000}, 
+    {0x41fd8000}, {0x41fda000}, {0x41fdc000}, {0x41fde000}, 
+    {0x41fe0000}, {0x41fe2000}, {0x41fe4000}, {0x41fe6000}, 
+    {0x41fe8000}, {0x41fea000}, {0x41fec000}, {0x41fee000}, 
+    {0x41ff0000}, {0x41ff2000}, {0x41ff4000}, {0x41ff6000}, 
+    {0x41ff8000}, {0x41ffa000}, {0x41ffc000}, {0x41ffe000}, 
+    {0x42000000}, {0x42002000}, {0x42004000}, {0x42006000}, 
+    {0x42008000}, {0x4200a000}, {0x4200c000}, {0x4200e000}, 
+    {0x42010000}, {0x42012000}, {0x42014000}, {0x42016000}, 
+    {0x42018000}, {0x4201a000}, {0x4201c000}, {0x4201e000}, 
+    {0x42020000}, {0x42022000}, {0x42024000}, {0x42026000}, 
+    {0x42028000}, {0x4202a000}, {0x4202c000}, {0x4202e000}, 
+    {0x42030000}, {0x42032000}, {0x42034000}, {0x42036000}, 
+    {0x42038000}, {0x4203a000}, {0x4203c000}, {0x4203e000}, 
+    {0x42040000}, {0x42042000}, {0x42044000}, {0x42046000}, 
+    {0x42048000}, {0x4204a000}, {0x4204c000}, {0x4204e000}, 
+    {0x42050000}, {0x42052000}, {0x42054000}, {0x42056000}, 
+    {0x42058000}, {0x4205a000}, {0x4205c000}, {0x4205e000}, 
+    {0x42060000}, {0x42062000}, {0x42064000}, {0x42066000}, 
+    {0x42068000}, {0x4206a000}, {0x4206c000}, {0x4206e000}, 
+    {0x42070000}, {0x42072000}, {0x42074000}, {0x42076000}, 
+    {0x42078000}, {0x4207a000}, {0x4207c000}, {0x4207e000}, 
+    {0x42080000}, {0x42082000}, {0x42084000}, {0x42086000}, 
+    {0x42088000}, {0x4208a000}, {0x4208c000}, {0x4208e000}, 
+    {0x42090000}, {0x42092000}, {0x42094000}, {0x42096000}, 
+    {0x42098000}, {0x4209a000}, {0x4209c000}, {0x4209e000}, 
+    {0x420a0000}, {0x420a2000}, {0x420a4000}, {0x420a6000}, 
+    {0x420a8000}, {0x420aa000}, {0x420ac000}, {0x420ae000}, 
+    {0x420b0000}, {0x420b2000}, {0x420b4000}, {0x420b6000}, 
+    {0x420b8000}, {0x420ba000}, {0x420bc000}, {0x420be000}, 
+    {0x420c0000}, {0x420c2000}, {0x420c4000}, {0x420c6000}, 
+    {0x420c8000}, {0x420ca000}, {0x420cc000}, {0x420ce000}, 
+    {0x420d0000}, {0x420d2000}, {0x420d4000}, {0x420d6000}, 
+    {0x420d8000}, {0x420da000}, {0x420dc000}, {0x420de000}, 
+    {0x420e0000}, {0x420e2000}, {0x420e4000}, {0x420e6000}, 
+    {0x420e8000}, {0x420ea000}, {0x420ec000}, {0x420ee000}, 
+    {0x420f0000}, {0x420f2000}, {0x420f4000}, {0x420f6000}, 
+    {0x420f8000}, {0x420fa000}, {0x420fc000}, {0x420fe000}, 
+    {0x42100000}, {0x42102000}, {0x42104000}, {0x42106000}, 
+    {0x42108000}, {0x4210a000}, {0x4210c000}, {0x4210e000}, 
+    {0x42110000}, {0x42112000}, {0x42114000}, {0x42116000}, 
+    {0x42118000}, {0x4211a000}, {0x4211c000}, {0x4211e000}, 
+    {0x42120000}, {0x42122000}, {0x42124000}, {0x42126000}, 
+    {0x42128000}, {0x4212a000}, {0x4212c000}, {0x4212e000}, 
+    {0x42130000}, {0x42132000}, {0x42134000}, {0x42136000}, 
+    {0x42138000}, {0x4213a000}, {0x4213c000}, {0x4213e000}, 
+    {0x42140000}, {0x42142000}, {0x42144000}, {0x42146000}, 
+    {0x42148000}, {0x4214a000}, {0x4214c000}, {0x4214e000}, 
+    {0x42150000}, {0x42152000}, {0x42154000}, {0x42156000}, 
+    {0x42158000}, {0x4215a000}, {0x4215c000}, {0x4215e000}, 
+    {0x42160000}, {0x42162000}, {0x42164000}, {0x42166000}, 
+    {0x42168000}, {0x4216a000}, {0x4216c000}, {0x4216e000}, 
+    {0x42170000}, {0x42172000}, {0x42174000}, {0x42176000}, 
+    {0x42178000}, {0x4217a000}, {0x4217c000}, {0x4217e000}, 
+    {0x42180000}, {0x42182000}, {0x42184000}, {0x42186000}, 
+    {0x42188000}, {0x4218a000}, {0x4218c000}, {0x4218e000}, 
+    {0x42190000}, {0x42192000}, {0x42194000}, {0x42196000}, 
+    {0x42198000}, {0x4219a000}, {0x4219c000}, {0x4219e000}, 
+    {0x421a0000}, {0x421a2000}, {0x421a4000}, {0x421a6000}, 
+    {0x421a8000}, {0x421aa000}, {0x421ac000}, {0x421ae000}, 
+    {0x421b0000}, {0x421b2000}, {0x421b4000}, {0x421b6000}, 
+    {0x421b8000}, {0x421ba000}, {0x421bc000}, {0x421be000}, 
+    {0x421c0000}, {0x421c2000}, {0x421c4000}, {0x421c6000}, 
+    {0x421c8000}, {0x421ca000}, {0x421cc000}, {0x421ce000}, 
+    {0x421d0000}, {0x421d2000}, {0x421d4000}, {0x421d6000}, 
+    {0x421d8000}, {0x421da000}, {0x421dc000}, {0x421de000}, 
+    {0x421e0000}, {0x421e2000}, {0x421e4000}, {0x421e6000}, 
+    {0x421e8000}, {0x421ea000}, {0x421ec000}, {0x421ee000}, 
+    {0x421f0000}, {0x421f2000}, {0x421f4000}, {0x421f6000}, 
+    {0x421f8000}, {0x421fa000}, {0x421fc000}, {0x421fe000}, 
+    {0x42200000}, {0x42202000}, {0x42204000}, {0x42206000}, 
+    {0x42208000}, {0x4220a000}, {0x4220c000}, {0x4220e000}, 
+    {0x42210000}, {0x42212000}, {0x42214000}, {0x42216000}, 
+    {0x42218000}, {0x4221a000}, {0x4221c000}, {0x4221e000}, 
+    {0x42220000}, {0x42222000}, {0x42224000}, {0x42226000}, 
+    {0x42228000}, {0x4222a000}, {0x4222c000}, {0x4222e000}, 
+    {0x42230000}, {0x42232000}, {0x42234000}, {0x42236000}, 
+    {0x42238000}, {0x4223a000}, {0x4223c000}, {0x4223e000}, 
+    {0x42240000}, {0x42242000}, {0x42244000}, {0x42246000}, 
+    {0x42248000}, {0x4224a000}, {0x4224c000}, {0x4224e000}, 
+    {0x42250000}, {0x42252000}, {0x42254000}, {0x42256000}, 
+    {0x42258000}, {0x4225a000}, {0x4225c000}, {0x4225e000}, 
+    {0x42260000}, {0x42262000}, {0x42264000}, {0x42266000}, 
+    {0x42268000}, {0x4226a000}, {0x4226c000}, {0x4226e000}, 
+    {0x42270000}, {0x42272000}, {0x42274000}, {0x42276000}, 
+    {0x42278000}, {0x4227a000}, {0x4227c000}, {0x4227e000}, 
+    {0x42280000}, {0x42282000}, {0x42284000}, {0x42286000}, 
+    {0x42288000}, {0x4228a000}, {0x4228c000}, {0x4228e000}, 
+    {0x42290000}, {0x42292000}, {0x42294000}, {0x42296000}, 
+    {0x42298000}, {0x4229a000}, {0x4229c000}, {0x4229e000}, 
+    {0x422a0000}, {0x422a2000}, {0x422a4000}, {0x422a6000}, 
+    {0x422a8000}, {0x422aa000}, {0x422ac000}, {0x422ae000}, 
+    {0x422b0000}, {0x422b2000}, {0x422b4000}, {0x422b6000}, 
+    {0x422b8000}, {0x422ba000}, {0x422bc000}, {0x422be000}, 
+    {0x422c0000}, {0x422c2000}, {0x422c4000}, {0x422c6000}, 
+    {0x422c8000}, {0x422ca000}, {0x422cc000}, {0x422ce000}, 
+    {0x422d0000}, {0x422d2000}, {0x422d4000}, {0x422d6000}, 
+    {0x422d8000}, {0x422da000}, {0x422dc000}, {0x422de000}, 
+    {0x422e0000}, {0x422e2000}, {0x422e4000}, {0x422e6000}, 
+    {0x422e8000}, {0x422ea000}, {0x422ec000}, {0x422ee000}, 
+    {0x422f0000}, {0x422f2000}, {0x422f4000}, {0x422f6000}, 
+    {0x422f8000}, {0x422fa000}, {0x422fc000}, {0x422fe000}, 
+    {0x42300000}, {0x42302000}, {0x42304000}, {0x42306000}, 
+    {0x42308000}, {0x4230a000}, {0x4230c000}, {0x4230e000}, 
+    {0x42310000}, {0x42312000}, {0x42314000}, {0x42316000}, 
+    {0x42318000}, {0x4231a000}, {0x4231c000}, {0x4231e000}, 
+    {0x42320000}, {0x42322000}, {0x42324000}, {0x42326000}, 
+    {0x42328000}, {0x4232a000}, {0x4232c000}, {0x4232e000}, 
+    {0x42330000}, {0x42332000}, {0x42334000}, {0x42336000}, 
+    {0x42338000}, {0x4233a000}, {0x4233c000}, {0x4233e000}, 
+    {0x42340000}, {0x42342000}, {0x42344000}, {0x42346000}, 
+    {0x42348000}, {0x4234a000}, {0x4234c000}, {0x4234e000}, 
+    {0x42350000}, {0x42352000}, {0x42354000}, {0x42356000}, 
+    {0x42358000}, {0x4235a000}, {0x4235c000}, {0x4235e000}, 
+    {0x42360000}, {0x42362000}, {0x42364000}, {0x42366000}, 
+    {0x42368000}, {0x4236a000}, {0x4236c000}, {0x4236e000}, 
+    {0x42370000}, {0x42372000}, {0x42374000}, {0x42376000}, 
+    {0x42378000}, {0x4237a000}, {0x4237c000}, {0x4237e000}, 
+    {0x42380000}, {0x42382000}, {0x42384000}, {0x42386000}, 
+    {0x42388000}, {0x4238a000}, {0x4238c000}, {0x4238e000}, 
+    {0x42390000}, {0x42392000}, {0x42394000}, {0x42396000}, 
+    {0x42398000}, {0x4239a000}, {0x4239c000}, {0x4239e000}, 
+    {0x423a0000}, {0x423a2000}, {0x423a4000}, {0x423a6000}, 
+    {0x423a8000}, {0x423aa000}, {0x423ac000}, {0x423ae000}, 
+    {0x423b0000}, {0x423b2000}, {0x423b4000}, {0x423b6000}, 
+    {0x423b8000}, {0x423ba000}, {0x423bc000}, {0x423be000}, 
+    {0x423c0000}, {0x423c2000}, {0x423c4000}, {0x423c6000}, 
+    {0x423c8000}, {0x423ca000}, {0x423cc000}, {0x423ce000}, 
+    {0x423d0000}, {0x423d2000}, {0x423d4000}, {0x423d6000}, 
+    {0x423d8000}, {0x423da000}, {0x423dc000}, {0x423de000}, 
+    {0x423e0000}, {0x423e2000}, {0x423e4000}, {0x423e6000}, 
+    {0x423e8000}, {0x423ea000}, {0x423ec000}, {0x423ee000}, 
+    {0x423f0000}, {0x423f2000}, {0x423f4000}, {0x423f6000}, 
+    {0x423f8000}, {0x423fa000}, {0x423fc000}, {0x423fe000}, 
+    {0x42400000}, {0x42402000}, {0x42404000}, {0x42406000}, 
+    {0x42408000}, {0x4240a000}, {0x4240c000}, {0x4240e000}, 
+    {0x42410000}, {0x42412000}, {0x42414000}, {0x42416000}, 
+    {0x42418000}, {0x4241a000}, {0x4241c000}, {0x4241e000}, 
+    {0x42420000}, {0x42422000}, {0x42424000}, {0x42426000}, 
+    {0x42428000}, {0x4242a000}, {0x4242c000}, {0x4242e000}, 
+    {0x42430000}, {0x42432000}, {0x42434000}, {0x42436000}, 
+    {0x42438000}, {0x4243a000}, {0x4243c000}, {0x4243e000}, 
+    {0x42440000}, {0x42442000}, {0x42444000}, {0x42446000}, 
+    {0x42448000}, {0x4244a000}, {0x4244c000}, {0x4244e000}, 
+    {0x42450000}, {0x42452000}, {0x42454000}, {0x42456000}, 
+    {0x42458000}, {0x4245a000}, {0x4245c000}, {0x4245e000}, 
+    {0x42460000}, {0x42462000}, {0x42464000}, {0x42466000}, 
+    {0x42468000}, {0x4246a000}, {0x4246c000}, {0x4246e000}, 
+    {0x42470000}, {0x42472000}, {0x42474000}, {0x42476000}, 
+    {0x42478000}, {0x4247a000}, {0x4247c000}, {0x4247e000}, 
+    {0x42480000}, {0x42482000}, {0x42484000}, {0x42486000}, 
+    {0x42488000}, {0x4248a000}, {0x4248c000}, {0x4248e000}, 
+    {0x42490000}, {0x42492000}, {0x42494000}, {0x42496000}, 
+    {0x42498000}, {0x4249a000}, {0x4249c000}, {0x4249e000}, 
+    {0x424a0000}, {0x424a2000}, {0x424a4000}, {0x424a6000}, 
+    {0x424a8000}, {0x424aa000}, {0x424ac000}, {0x424ae000}, 
+    {0x424b0000}, {0x424b2000}, {0x424b4000}, {0x424b6000}, 
+    {0x424b8000}, {0x424ba000}, {0x424bc000}, {0x424be000}, 
+    {0x424c0000}, {0x424c2000}, {0x424c4000}, {0x424c6000}, 
+    {0x424c8000}, {0x424ca000}, {0x424cc000}, {0x424ce000}, 
+    {0x424d0000}, {0x424d2000}, {0x424d4000}, {0x424d6000}, 
+    {0x424d8000}, {0x424da000}, {0x424dc000}, {0x424de000}, 
+    {0x424e0000}, {0x424e2000}, {0x424e4000}, {0x424e6000}, 
+    {0x424e8000}, {0x424ea000}, {0x424ec000}, {0x424ee000}, 
+    {0x424f0000}, {0x424f2000}, {0x424f4000}, {0x424f6000}, 
+    {0x424f8000}, {0x424fa000}, {0x424fc000}, {0x424fe000}, 
+    {0x42500000}, {0x42502000}, {0x42504000}, {0x42506000}, 
+    {0x42508000}, {0x4250a000}, {0x4250c000}, {0x4250e000}, 
+    {0x42510000}, {0x42512000}, {0x42514000}, {0x42516000}, 
+    {0x42518000}, {0x4251a000}, {0x4251c000}, {0x4251e000}, 
+    {0x42520000}, {0x42522000}, {0x42524000}, {0x42526000}, 
+    {0x42528000}, {0x4252a000}, {0x4252c000}, {0x4252e000}, 
+    {0x42530000}, {0x42532000}, {0x42534000}, {0x42536000}, 
+    {0x42538000}, {0x4253a000}, {0x4253c000}, {0x4253e000}, 
+    {0x42540000}, {0x42542000}, {0x42544000}, {0x42546000}, 
+    {0x42548000}, {0x4254a000}, {0x4254c000}, {0x4254e000}, 
+    {0x42550000}, {0x42552000}, {0x42554000}, {0x42556000}, 
+    {0x42558000}, {0x4255a000}, {0x4255c000}, {0x4255e000}, 
+    {0x42560000}, {0x42562000}, {0x42564000}, {0x42566000}, 
+    {0x42568000}, {0x4256a000}, {0x4256c000}, {0x4256e000}, 
+    {0x42570000}, {0x42572000}, {0x42574000}, {0x42576000}, 
+    {0x42578000}, {0x4257a000}, {0x4257c000}, {0x4257e000}, 
+    {0x42580000}, {0x42582000}, {0x42584000}, {0x42586000}, 
+    {0x42588000}, {0x4258a000}, {0x4258c000}, {0x4258e000}, 
+    {0x42590000}, {0x42592000}, {0x42594000}, {0x42596000}, 
+    {0x42598000}, {0x4259a000}, {0x4259c000}, {0x4259e000}, 
+    {0x425a0000}, {0x425a2000}, {0x425a4000}, {0x425a6000}, 
+    {0x425a8000}, {0x425aa000}, {0x425ac000}, {0x425ae000}, 
+    {0x425b0000}, {0x425b2000}, {0x425b4000}, {0x425b6000}, 
+    {0x425b8000}, {0x425ba000}, {0x425bc000}, {0x425be000}, 
+    {0x425c0000}, {0x425c2000}, {0x425c4000}, {0x425c6000}, 
+    {0x425c8000}, {0x425ca000}, {0x425cc000}, {0x425ce000}, 
+    {0x425d0000}, {0x425d2000}, {0x425d4000}, {0x425d6000}, 
+    {0x425d8000}, {0x425da000}, {0x425dc000}, {0x425de000}, 
+    {0x425e0000}, {0x425e2000}, {0x425e4000}, {0x425e6000}, 
+    {0x425e8000}, {0x425ea000}, {0x425ec000}, {0x425ee000}, 
+    {0x425f0000}, {0x425f2000}, {0x425f4000}, {0x425f6000}, 
+    {0x425f8000}, {0x425fa000}, {0x425fc000}, {0x425fe000}, 
+    {0x42600000}, {0x42602000}, {0x42604000}, {0x42606000}, 
+    {0x42608000}, {0x4260a000}, {0x4260c000}, {0x4260e000}, 
+    {0x42610000}, {0x42612000}, {0x42614000}, {0x42616000}, 
+    {0x42618000}, {0x4261a000}, {0x4261c000}, {0x4261e000}, 
+    {0x42620000}, {0x42622000}, {0x42624000}, {0x42626000}, 
+    {0x42628000}, {0x4262a000}, {0x4262c000}, {0x4262e000}, 
+    {0x42630000}, {0x42632000}, {0x42634000}, {0x42636000}, 
+    {0x42638000}, {0x4263a000}, {0x4263c000}, {0x4263e000}, 
+    {0x42640000}, {0x42642000}, {0x42644000}, {0x42646000}, 
+    {0x42648000}, {0x4264a000}, {0x4264c000}, {0x4264e000}, 
+    {0x42650000}, {0x42652000}, {0x42654000}, {0x42656000}, 
+    {0x42658000}, {0x4265a000}, {0x4265c000}, {0x4265e000}, 
+    {0x42660000}, {0x42662000}, {0x42664000}, {0x42666000}, 
+    {0x42668000}, {0x4266a000}, {0x4266c000}, {0x4266e000}, 
+    {0x42670000}, {0x42672000}, {0x42674000}, {0x42676000}, 
+    {0x42678000}, {0x4267a000}, {0x4267c000}, {0x4267e000}, 
+    {0x42680000}, {0x42682000}, {0x42684000}, {0x42686000}, 
+    {0x42688000}, {0x4268a000}, {0x4268c000}, {0x4268e000}, 
+    {0x42690000}, {0x42692000}, {0x42694000}, {0x42696000}, 
+    {0x42698000}, {0x4269a000}, {0x4269c000}, {0x4269e000}, 
+    {0x426a0000}, {0x426a2000}, {0x426a4000}, {0x426a6000}, 
+    {0x426a8000}, {0x426aa000}, {0x426ac000}, {0x426ae000}, 
+    {0x426b0000}, {0x426b2000}, {0x426b4000}, {0x426b6000}, 
+    {0x426b8000}, {0x426ba000}, {0x426bc000}, {0x426be000}, 
+    {0x426c0000}, {0x426c2000}, {0x426c4000}, {0x426c6000}, 
+    {0x426c8000}, {0x426ca000}, {0x426cc000}, {0x426ce000}, 
+    {0x426d0000}, {0x426d2000}, {0x426d4000}, {0x426d6000}, 
+    {0x426d8000}, {0x426da000}, {0x426dc000}, {0x426de000}, 
+    {0x426e0000}, {0x426e2000}, {0x426e4000}, {0x426e6000}, 
+    {0x426e8000}, {0x426ea000}, {0x426ec000}, {0x426ee000}, 
+    {0x426f0000}, {0x426f2000}, {0x426f4000}, {0x426f6000}, 
+    {0x426f8000}, {0x426fa000}, {0x426fc000}, {0x426fe000}, 
+    {0x42700000}, {0x42702000}, {0x42704000}, {0x42706000}, 
+    {0x42708000}, {0x4270a000}, {0x4270c000}, {0x4270e000}, 
+    {0x42710000}, {0x42712000}, {0x42714000}, {0x42716000}, 
+    {0x42718000}, {0x4271a000}, {0x4271c000}, {0x4271e000}, 
+    {0x42720000}, {0x42722000}, {0x42724000}, {0x42726000}, 
+    {0x42728000}, {0x4272a000}, {0x4272c000}, {0x4272e000}, 
+    {0x42730000}, {0x42732000}, {0x42734000}, {0x42736000}, 
+    {0x42738000}, {0x4273a000}, {0x4273c000}, {0x4273e000}, 
+    {0x42740000}, {0x42742000}, {0x42744000}, {0x42746000}, 
+    {0x42748000}, {0x4274a000}, {0x4274c000}, {0x4274e000}, 
+    {0x42750000}, {0x42752000}, {0x42754000}, {0x42756000}, 
+    {0x42758000}, {0x4275a000}, {0x4275c000}, {0x4275e000}, 
+    {0x42760000}, {0x42762000}, {0x42764000}, {0x42766000}, 
+    {0x42768000}, {0x4276a000}, {0x4276c000}, {0x4276e000}, 
+    {0x42770000}, {0x42772000}, {0x42774000}, {0x42776000}, 
+    {0x42778000}, {0x4277a000}, {0x4277c000}, {0x4277e000}, 
+    {0x42780000}, {0x42782000}, {0x42784000}, {0x42786000}, 
+    {0x42788000}, {0x4278a000}, {0x4278c000}, {0x4278e000}, 
+    {0x42790000}, {0x42792000}, {0x42794000}, {0x42796000}, 
+    {0x42798000}, {0x4279a000}, {0x4279c000}, {0x4279e000}, 
+    {0x427a0000}, {0x427a2000}, {0x427a4000}, {0x427a6000}, 
+    {0x427a8000}, {0x427aa000}, {0x427ac000}, {0x427ae000}, 
+    {0x427b0000}, {0x427b2000}, {0x427b4000}, {0x427b6000}, 
+    {0x427b8000}, {0x427ba000}, {0x427bc000}, {0x427be000}, 
+    {0x427c0000}, {0x427c2000}, {0x427c4000}, {0x427c6000}, 
+    {0x427c8000}, {0x427ca000}, {0x427cc000}, {0x427ce000}, 
+    {0x427d0000}, {0x427d2000}, {0x427d4000}, {0x427d6000}, 
+    {0x427d8000}, {0x427da000}, {0x427dc000}, {0x427de000}, 
+    {0x427e0000}, {0x427e2000}, {0x427e4000}, {0x427e6000}, 
+    {0x427e8000}, {0x427ea000}, {0x427ec000}, {0x427ee000}, 
+    {0x427f0000}, {0x427f2000}, {0x427f4000}, {0x427f6000}, 
+    {0x427f8000}, {0x427fa000}, {0x427fc000}, {0x427fe000}, 
+    {0x42800000}, {0x42802000}, {0x42804000}, {0x42806000}, 
+    {0x42808000}, {0x4280a000}, {0x4280c000}, {0x4280e000}, 
+    {0x42810000}, {0x42812000}, {0x42814000}, {0x42816000}, 
+    {0x42818000}, {0x4281a000}, {0x4281c000}, {0x4281e000}, 
+    {0x42820000}, {0x42822000}, {0x42824000}, {0x42826000}, 
+    {0x42828000}, {0x4282a000}, {0x4282c000}, {0x4282e000}, 
+    {0x42830000}, {0x42832000}, {0x42834000}, {0x42836000}, 
+    {0x42838000}, {0x4283a000}, {0x4283c000}, {0x4283e000}, 
+    {0x42840000}, {0x42842000}, {0x42844000}, {0x42846000}, 
+    {0x42848000}, {0x4284a000}, {0x4284c000}, {0x4284e000}, 
+    {0x42850000}, {0x42852000}, {0x42854000}, {0x42856000}, 
+    {0x42858000}, {0x4285a000}, {0x4285c000}, {0x4285e000}, 
+    {0x42860000}, {0x42862000}, {0x42864000}, {0x42866000}, 
+    {0x42868000}, {0x4286a000}, {0x4286c000}, {0x4286e000}, 
+    {0x42870000}, {0x42872000}, {0x42874000}, {0x42876000}, 
+    {0x42878000}, {0x4287a000}, {0x4287c000}, {0x4287e000}, 
+    {0x42880000}, {0x42882000}, {0x42884000}, {0x42886000}, 
+    {0x42888000}, {0x4288a000}, {0x4288c000}, {0x4288e000}, 
+    {0x42890000}, {0x42892000}, {0x42894000}, {0x42896000}, 
+    {0x42898000}, {0x4289a000}, {0x4289c000}, {0x4289e000}, 
+    {0x428a0000}, {0x428a2000}, {0x428a4000}, {0x428a6000}, 
+    {0x428a8000}, {0x428aa000}, {0x428ac000}, {0x428ae000}, 
+    {0x428b0000}, {0x428b2000}, {0x428b4000}, {0x428b6000}, 
+    {0x428b8000}, {0x428ba000}, {0x428bc000}, {0x428be000}, 
+    {0x428c0000}, {0x428c2000}, {0x428c4000}, {0x428c6000}, 
+    {0x428c8000}, {0x428ca000}, {0x428cc000}, {0x428ce000}, 
+    {0x428d0000}, {0x428d2000}, {0x428d4000}, {0x428d6000}, 
+    {0x428d8000}, {0x428da000}, {0x428dc000}, {0x428de000}, 
+    {0x428e0000}, {0x428e2000}, {0x428e4000}, {0x428e6000}, 
+    {0x428e8000}, {0x428ea000}, {0x428ec000}, {0x428ee000}, 
+    {0x428f0000}, {0x428f2000}, {0x428f4000}, {0x428f6000}, 
+    {0x428f8000}, {0x428fa000}, {0x428fc000}, {0x428fe000}, 
+    {0x42900000}, {0x42902000}, {0x42904000}, {0x42906000}, 
+    {0x42908000}, {0x4290a000}, {0x4290c000}, {0x4290e000}, 
+    {0x42910000}, {0x42912000}, {0x42914000}, {0x42916000}, 
+    {0x42918000}, {0x4291a000}, {0x4291c000}, {0x4291e000}, 
+    {0x42920000}, {0x42922000}, {0x42924000}, {0x42926000}, 
+    {0x42928000}, {0x4292a000}, {0x4292c000}, {0x4292e000}, 
+    {0x42930000}, {0x42932000}, {0x42934000}, {0x42936000}, 
+    {0x42938000}, {0x4293a000}, {0x4293c000}, {0x4293e000}, 
+    {0x42940000}, {0x42942000}, {0x42944000}, {0x42946000}, 
+    {0x42948000}, {0x4294a000}, {0x4294c000}, {0x4294e000}, 
+    {0x42950000}, {0x42952000}, {0x42954000}, {0x42956000}, 
+    {0x42958000}, {0x4295a000}, {0x4295c000}, {0x4295e000}, 
+    {0x42960000}, {0x42962000}, {0x42964000}, {0x42966000}, 
+    {0x42968000}, {0x4296a000}, {0x4296c000}, {0x4296e000}, 
+    {0x42970000}, {0x42972000}, {0x42974000}, {0x42976000}, 
+    {0x42978000}, {0x4297a000}, {0x4297c000}, {0x4297e000}, 
+    {0x42980000}, {0x42982000}, {0x42984000}, {0x42986000}, 
+    {0x42988000}, {0x4298a000}, {0x4298c000}, {0x4298e000}, 
+    {0x42990000}, {0x42992000}, {0x42994000}, {0x42996000}, 
+    {0x42998000}, {0x4299a000}, {0x4299c000}, {0x4299e000}, 
+    {0x429a0000}, {0x429a2000}, {0x429a4000}, {0x429a6000}, 
+    {0x429a8000}, {0x429aa000}, {0x429ac000}, {0x429ae000}, 
+    {0x429b0000}, {0x429b2000}, {0x429b4000}, {0x429b6000}, 
+    {0x429b8000}, {0x429ba000}, {0x429bc000}, {0x429be000}, 
+    {0x429c0000}, {0x429c2000}, {0x429c4000}, {0x429c6000}, 
+    {0x429c8000}, {0x429ca000}, {0x429cc000}, {0x429ce000}, 
+    {0x429d0000}, {0x429d2000}, {0x429d4000}, {0x429d6000}, 
+    {0x429d8000}, {0x429da000}, {0x429dc000}, {0x429de000}, 
+    {0x429e0000}, {0x429e2000}, {0x429e4000}, {0x429e6000}, 
+    {0x429e8000}, {0x429ea000}, {0x429ec000}, {0x429ee000}, 
+    {0x429f0000}, {0x429f2000}, {0x429f4000}, {0x429f6000}, 
+    {0x429f8000}, {0x429fa000}, {0x429fc000}, {0x429fe000}, 
+    {0x42a00000}, {0x42a02000}, {0x42a04000}, {0x42a06000}, 
+    {0x42a08000}, {0x42a0a000}, {0x42a0c000}, {0x42a0e000}, 
+    {0x42a10000}, {0x42a12000}, {0x42a14000}, {0x42a16000}, 
+    {0x42a18000}, {0x42a1a000}, {0x42a1c000}, {0x42a1e000}, 
+    {0x42a20000}, {0x42a22000}, {0x42a24000}, {0x42a26000}, 
+    {0x42a28000}, {0x42a2a000}, {0x42a2c000}, {0x42a2e000}, 
+    {0x42a30000}, {0x42a32000}, {0x42a34000}, {0x42a36000}, 
+    {0x42a38000}, {0x42a3a000}, {0x42a3c000}, {0x42a3e000}, 
+    {0x42a40000}, {0x42a42000}, {0x42a44000}, {0x42a46000}, 
+    {0x42a48000}, {0x42a4a000}, {0x42a4c000}, {0x42a4e000}, 
+    {0x42a50000}, {0x42a52000}, {0x42a54000}, {0x42a56000}, 
+    {0x42a58000}, {0x42a5a000}, {0x42a5c000}, {0x42a5e000}, 
+    {0x42a60000}, {0x42a62000}, {0x42a64000}, {0x42a66000}, 
+    {0x42a68000}, {0x42a6a000}, {0x42a6c000}, {0x42a6e000}, 
+    {0x42a70000}, {0x42a72000}, {0x42a74000}, {0x42a76000}, 
+    {0x42a78000}, {0x42a7a000}, {0x42a7c000}, {0x42a7e000}, 
+    {0x42a80000}, {0x42a82000}, {0x42a84000}, {0x42a86000}, 
+    {0x42a88000}, {0x42a8a000}, {0x42a8c000}, {0x42a8e000}, 
+    {0x42a90000}, {0x42a92000}, {0x42a94000}, {0x42a96000}, 
+    {0x42a98000}, {0x42a9a000}, {0x42a9c000}, {0x42a9e000}, 
+    {0x42aa0000}, {0x42aa2000}, {0x42aa4000}, {0x42aa6000}, 
+    {0x42aa8000}, {0x42aaa000}, {0x42aac000}, {0x42aae000}, 
+    {0x42ab0000}, {0x42ab2000}, {0x42ab4000}, {0x42ab6000}, 
+    {0x42ab8000}, {0x42aba000}, {0x42abc000}, {0x42abe000}, 
+    {0x42ac0000}, {0x42ac2000}, {0x42ac4000}, {0x42ac6000}, 
+    {0x42ac8000}, {0x42aca000}, {0x42acc000}, {0x42ace000}, 
+    {0x42ad0000}, {0x42ad2000}, {0x42ad4000}, {0x42ad6000}, 
+    {0x42ad8000}, {0x42ada000}, {0x42adc000}, {0x42ade000}, 
+    {0x42ae0000}, {0x42ae2000}, {0x42ae4000}, {0x42ae6000}, 
+    {0x42ae8000}, {0x42aea000}, {0x42aec000}, {0x42aee000}, 
+    {0x42af0000}, {0x42af2000}, {0x42af4000}, {0x42af6000}, 
+    {0x42af8000}, {0x42afa000}, {0x42afc000}, {0x42afe000}, 
+    {0x42b00000}, {0x42b02000}, {0x42b04000}, {0x42b06000}, 
+    {0x42b08000}, {0x42b0a000}, {0x42b0c000}, {0x42b0e000}, 
+    {0x42b10000}, {0x42b12000}, {0x42b14000}, {0x42b16000}, 
+    {0x42b18000}, {0x42b1a000}, {0x42b1c000}, {0x42b1e000}, 
+    {0x42b20000}, {0x42b22000}, {0x42b24000}, {0x42b26000}, 
+    {0x42b28000}, {0x42b2a000}, {0x42b2c000}, {0x42b2e000}, 
+    {0x42b30000}, {0x42b32000}, {0x42b34000}, {0x42b36000}, 
+    {0x42b38000}, {0x42b3a000}, {0x42b3c000}, {0x42b3e000}, 
+    {0x42b40000}, {0x42b42000}, {0x42b44000}, {0x42b46000}, 
+    {0x42b48000}, {0x42b4a000}, {0x42b4c000}, {0x42b4e000}, 
+    {0x42b50000}, {0x42b52000}, {0x42b54000}, {0x42b56000}, 
+    {0x42b58000}, {0x42b5a000}, {0x42b5c000}, {0x42b5e000}, 
+    {0x42b60000}, {0x42b62000}, {0x42b64000}, {0x42b66000}, 
+    {0x42b68000}, {0x42b6a000}, {0x42b6c000}, {0x42b6e000}, 
+    {0x42b70000}, {0x42b72000}, {0x42b74000}, {0x42b76000}, 
+    {0x42b78000}, {0x42b7a000}, {0x42b7c000}, {0x42b7e000}, 
+    {0x42b80000}, {0x42b82000}, {0x42b84000}, {0x42b86000}, 
+    {0x42b88000}, {0x42b8a000}, {0x42b8c000}, {0x42b8e000}, 
+    {0x42b90000}, {0x42b92000}, {0x42b94000}, {0x42b96000}, 
+    {0x42b98000}, {0x42b9a000}, {0x42b9c000}, {0x42b9e000}, 
+    {0x42ba0000}, {0x42ba2000}, {0x42ba4000}, {0x42ba6000}, 
+    {0x42ba8000}, {0x42baa000}, {0x42bac000}, {0x42bae000}, 
+    {0x42bb0000}, {0x42bb2000}, {0x42bb4000}, {0x42bb6000}, 
+    {0x42bb8000}, {0x42bba000}, {0x42bbc000}, {0x42bbe000}, 
+    {0x42bc0000}, {0x42bc2000}, {0x42bc4000}, {0x42bc6000}, 
+    {0x42bc8000}, {0x42bca000}, {0x42bcc000}, {0x42bce000}, 
+    {0x42bd0000}, {0x42bd2000}, {0x42bd4000}, {0x42bd6000}, 
+    {0x42bd8000}, {0x42bda000}, {0x42bdc000}, {0x42bde000}, 
+    {0x42be0000}, {0x42be2000}, {0x42be4000}, {0x42be6000}, 
+    {0x42be8000}, {0x42bea000}, {0x42bec000}, {0x42bee000}, 
+    {0x42bf0000}, {0x42bf2000}, {0x42bf4000}, {0x42bf6000}, 
+    {0x42bf8000}, {0x42bfa000}, {0x42bfc000}, {0x42bfe000}, 
+    {0x42c00000}, {0x42c02000}, {0x42c04000}, {0x42c06000}, 
+    {0x42c08000}, {0x42c0a000}, {0x42c0c000}, {0x42c0e000}, 
+    {0x42c10000}, {0x42c12000}, {0x42c14000}, {0x42c16000}, 
+    {0x42c18000}, {0x42c1a000}, {0x42c1c000}, {0x42c1e000}, 
+    {0x42c20000}, {0x42c22000}, {0x42c24000}, {0x42c26000}, 
+    {0x42c28000}, {0x42c2a000}, {0x42c2c000}, {0x42c2e000}, 
+    {0x42c30000}, {0x42c32000}, {0x42c34000}, {0x42c36000}, 
+    {0x42c38000}, {0x42c3a000}, {0x42c3c000}, {0x42c3e000}, 
+    {0x42c40000}, {0x42c42000}, {0x42c44000}, {0x42c46000}, 
+    {0x42c48000}, {0x42c4a000}, {0x42c4c000}, {0x42c4e000}, 
+    {0x42c50000}, {0x42c52000}, {0x42c54000}, {0x42c56000}, 
+    {0x42c58000}, {0x42c5a000}, {0x42c5c000}, {0x42c5e000}, 
+    {0x42c60000}, {0x42c62000}, {0x42c64000}, {0x42c66000}, 
+    {0x42c68000}, {0x42c6a000}, {0x42c6c000}, {0x42c6e000}, 
+    {0x42c70000}, {0x42c72000}, {0x42c74000}, {0x42c76000}, 
+    {0x42c78000}, {0x42c7a000}, {0x42c7c000}, {0x42c7e000}, 
+    {0x42c80000}, {0x42c82000}, {0x42c84000}, {0x42c86000}, 
+    {0x42c88000}, {0x42c8a000}, {0x42c8c000}, {0x42c8e000}, 
+    {0x42c90000}, {0x42c92000}, {0x42c94000}, {0x42c96000}, 
+    {0x42c98000}, {0x42c9a000}, {0x42c9c000}, {0x42c9e000}, 
+    {0x42ca0000}, {0x42ca2000}, {0x42ca4000}, {0x42ca6000}, 
+    {0x42ca8000}, {0x42caa000}, {0x42cac000}, {0x42cae000}, 
+    {0x42cb0000}, {0x42cb2000}, {0x42cb4000}, {0x42cb6000}, 
+    {0x42cb8000}, {0x42cba000}, {0x42cbc000}, {0x42cbe000}, 
+    {0x42cc0000}, {0x42cc2000}, {0x42cc4000}, {0x42cc6000}, 
+    {0x42cc8000}, {0x42cca000}, {0x42ccc000}, {0x42cce000}, 
+    {0x42cd0000}, {0x42cd2000}, {0x42cd4000}, {0x42cd6000}, 
+    {0x42cd8000}, {0x42cda000}, {0x42cdc000}, {0x42cde000}, 
+    {0x42ce0000}, {0x42ce2000}, {0x42ce4000}, {0x42ce6000}, 
+    {0x42ce8000}, {0x42cea000}, {0x42cec000}, {0x42cee000}, 
+    {0x42cf0000}, {0x42cf2000}, {0x42cf4000}, {0x42cf6000}, 
+    {0x42cf8000}, {0x42cfa000}, {0x42cfc000}, {0x42cfe000}, 
+    {0x42d00000}, {0x42d02000}, {0x42d04000}, {0x42d06000}, 
+    {0x42d08000}, {0x42d0a000}, {0x42d0c000}, {0x42d0e000}, 
+    {0x42d10000}, {0x42d12000}, {0x42d14000}, {0x42d16000}, 
+    {0x42d18000}, {0x42d1a000}, {0x42d1c000}, {0x42d1e000}, 
+    {0x42d20000}, {0x42d22000}, {0x42d24000}, {0x42d26000}, 
+    {0x42d28000}, {0x42d2a000}, {0x42d2c000}, {0x42d2e000}, 
+    {0x42d30000}, {0x42d32000}, {0x42d34000}, {0x42d36000}, 
+    {0x42d38000}, {0x42d3a000}, {0x42d3c000}, {0x42d3e000}, 
+    {0x42d40000}, {0x42d42000}, {0x42d44000}, {0x42d46000}, 
+    {0x42d48000}, {0x42d4a000}, {0x42d4c000}, {0x42d4e000}, 
+    {0x42d50000}, {0x42d52000}, {0x42d54000}, {0x42d56000}, 
+    {0x42d58000}, {0x42d5a000}, {0x42d5c000}, {0x42d5e000}, 
+    {0x42d60000}, {0x42d62000}, {0x42d64000}, {0x42d66000}, 
+    {0x42d68000}, {0x42d6a000}, {0x42d6c000}, {0x42d6e000}, 
+    {0x42d70000}, {0x42d72000}, {0x42d74000}, {0x42d76000}, 
+    {0x42d78000}, {0x42d7a000}, {0x42d7c000}, {0x42d7e000}, 
+    {0x42d80000}, {0x42d82000}, {0x42d84000}, {0x42d86000}, 
+    {0x42d88000}, {0x42d8a000}, {0x42d8c000}, {0x42d8e000}, 
+    {0x42d90000}, {0x42d92000}, {0x42d94000}, {0x42d96000}, 
+    {0x42d98000}, {0x42d9a000}, {0x42d9c000}, {0x42d9e000}, 
+    {0x42da0000}, {0x42da2000}, {0x42da4000}, {0x42da6000}, 
+    {0x42da8000}, {0x42daa000}, {0x42dac000}, {0x42dae000}, 
+    {0x42db0000}, {0x42db2000}, {0x42db4000}, {0x42db6000}, 
+    {0x42db8000}, {0x42dba000}, {0x42dbc000}, {0x42dbe000}, 
+    {0x42dc0000}, {0x42dc2000}, {0x42dc4000}, {0x42dc6000}, 
+    {0x42dc8000}, {0x42dca000}, {0x42dcc000}, {0x42dce000}, 
+    {0x42dd0000}, {0x42dd2000}, {0x42dd4000}, {0x42dd6000}, 
+    {0x42dd8000}, {0x42dda000}, {0x42ddc000}, {0x42dde000}, 
+    {0x42de0000}, {0x42de2000}, {0x42de4000}, {0x42de6000}, 
+    {0x42de8000}, {0x42dea000}, {0x42dec000}, {0x42dee000}, 
+    {0x42df0000}, {0x42df2000}, {0x42df4000}, {0x42df6000}, 
+    {0x42df8000}, {0x42dfa000}, {0x42dfc000}, {0x42dfe000}, 
+    {0x42e00000}, {0x42e02000}, {0x42e04000}, {0x42e06000}, 
+    {0x42e08000}, {0x42e0a000}, {0x42e0c000}, {0x42e0e000}, 
+    {0x42e10000}, {0x42e12000}, {0x42e14000}, {0x42e16000}, 
+    {0x42e18000}, {0x42e1a000}, {0x42e1c000}, {0x42e1e000}, 
+    {0x42e20000}, {0x42e22000}, {0x42e24000}, {0x42e26000}, 
+    {0x42e28000}, {0x42e2a000}, {0x42e2c000}, {0x42e2e000}, 
+    {0x42e30000}, {0x42e32000}, {0x42e34000}, {0x42e36000}, 
+    {0x42e38000}, {0x42e3a000}, {0x42e3c000}, {0x42e3e000}, 
+    {0x42e40000}, {0x42e42000}, {0x42e44000}, {0x42e46000}, 
+    {0x42e48000}, {0x42e4a000}, {0x42e4c000}, {0x42e4e000}, 
+    {0x42e50000}, {0x42e52000}, {0x42e54000}, {0x42e56000}, 
+    {0x42e58000}, {0x42e5a000}, {0x42e5c000}, {0x42e5e000}, 
+    {0x42e60000}, {0x42e62000}, {0x42e64000}, {0x42e66000}, 
+    {0x42e68000}, {0x42e6a000}, {0x42e6c000}, {0x42e6e000}, 
+    {0x42e70000}, {0x42e72000}, {0x42e74000}, {0x42e76000}, 
+    {0x42e78000}, {0x42e7a000}, {0x42e7c000}, {0x42e7e000}, 
+    {0x42e80000}, {0x42e82000}, {0x42e84000}, {0x42e86000}, 
+    {0x42e88000}, {0x42e8a000}, {0x42e8c000}, {0x42e8e000}, 
+    {0x42e90000}, {0x42e92000}, {0x42e94000}, {0x42e96000}, 
+    {0x42e98000}, {0x42e9a000}, {0x42e9c000}, {0x42e9e000}, 
+    {0x42ea0000}, {0x42ea2000}, {0x42ea4000}, {0x42ea6000}, 
+    {0x42ea8000}, {0x42eaa000}, {0x42eac000}, {0x42eae000}, 
+    {0x42eb0000}, {0x42eb2000}, {0x42eb4000}, {0x42eb6000}, 
+    {0x42eb8000}, {0x42eba000}, {0x42ebc000}, {0x42ebe000}, 
+    {0x42ec0000}, {0x42ec2000}, {0x42ec4000}, {0x42ec6000}, 
+    {0x42ec8000}, {0x42eca000}, {0x42ecc000}, {0x42ece000}, 
+    {0x42ed0000}, {0x42ed2000}, {0x42ed4000}, {0x42ed6000}, 
+    {0x42ed8000}, {0x42eda000}, {0x42edc000}, {0x42ede000}, 
+    {0x42ee0000}, {0x42ee2000}, {0x42ee4000}, {0x42ee6000}, 
+    {0x42ee8000}, {0x42eea000}, {0x42eec000}, {0x42eee000}, 
+    {0x42ef0000}, {0x42ef2000}, {0x42ef4000}, {0x42ef6000}, 
+    {0x42ef8000}, {0x42efa000}, {0x42efc000}, {0x42efe000}, 
+    {0x42f00000}, {0x42f02000}, {0x42f04000}, {0x42f06000}, 
+    {0x42f08000}, {0x42f0a000}, {0x42f0c000}, {0x42f0e000}, 
+    {0x42f10000}, {0x42f12000}, {0x42f14000}, {0x42f16000}, 
+    {0x42f18000}, {0x42f1a000}, {0x42f1c000}, {0x42f1e000}, 
+    {0x42f20000}, {0x42f22000}, {0x42f24000}, {0x42f26000}, 
+    {0x42f28000}, {0x42f2a000}, {0x42f2c000}, {0x42f2e000}, 
+    {0x42f30000}, {0x42f32000}, {0x42f34000}, {0x42f36000}, 
+    {0x42f38000}, {0x42f3a000}, {0x42f3c000}, {0x42f3e000}, 
+    {0x42f40000}, {0x42f42000}, {0x42f44000}, {0x42f46000}, 
+    {0x42f48000}, {0x42f4a000}, {0x42f4c000}, {0x42f4e000}, 
+    {0x42f50000}, {0x42f52000}, {0x42f54000}, {0x42f56000}, 
+    {0x42f58000}, {0x42f5a000}, {0x42f5c000}, {0x42f5e000}, 
+    {0x42f60000}, {0x42f62000}, {0x42f64000}, {0x42f66000}, 
+    {0x42f68000}, {0x42f6a000}, {0x42f6c000}, {0x42f6e000}, 
+    {0x42f70000}, {0x42f72000}, {0x42f74000}, {0x42f76000}, 
+    {0x42f78000}, {0x42f7a000}, {0x42f7c000}, {0x42f7e000}, 
+    {0x42f80000}, {0x42f82000}, {0x42f84000}, {0x42f86000}, 
+    {0x42f88000}, {0x42f8a000}, {0x42f8c000}, {0x42f8e000}, 
+    {0x42f90000}, {0x42f92000}, {0x42f94000}, {0x42f96000}, 
+    {0x42f98000}, {0x42f9a000}, {0x42f9c000}, {0x42f9e000}, 
+    {0x42fa0000}, {0x42fa2000}, {0x42fa4000}, {0x42fa6000}, 
+    {0x42fa8000}, {0x42faa000}, {0x42fac000}, {0x42fae000}, 
+    {0x42fb0000}, {0x42fb2000}, {0x42fb4000}, {0x42fb6000}, 
+    {0x42fb8000}, {0x42fba000}, {0x42fbc000}, {0x42fbe000}, 
+    {0x42fc0000}, {0x42fc2000}, {0x42fc4000}, {0x42fc6000}, 
+    {0x42fc8000}, {0x42fca000}, {0x42fcc000}, {0x42fce000}, 
+    {0x42fd0000}, {0x42fd2000}, {0x42fd4000}, {0x42fd6000}, 
+    {0x42fd8000}, {0x42fda000}, {0x42fdc000}, {0x42fde000}, 
+    {0x42fe0000}, {0x42fe2000}, {0x42fe4000}, {0x42fe6000}, 
+    {0x42fe8000}, {0x42fea000}, {0x42fec000}, {0x42fee000}, 
+    {0x42ff0000}, {0x42ff2000}, {0x42ff4000}, {0x42ff6000}, 
+    {0x42ff8000}, {0x42ffa000}, {0x42ffc000}, {0x42ffe000}, 
+    {0x43000000}, {0x43002000}, {0x43004000}, {0x43006000}, 
+    {0x43008000}, {0x4300a000}, {0x4300c000}, {0x4300e000}, 
+    {0x43010000}, {0x43012000}, {0x43014000}, {0x43016000}, 
+    {0x43018000}, {0x4301a000}, {0x4301c000}, {0x4301e000}, 
+    {0x43020000}, {0x43022000}, {0x43024000}, {0x43026000}, 
+    {0x43028000}, {0x4302a000}, {0x4302c000}, {0x4302e000}, 
+    {0x43030000}, {0x43032000}, {0x43034000}, {0x43036000}, 
+    {0x43038000}, {0x4303a000}, {0x4303c000}, {0x4303e000}, 
+    {0x43040000}, {0x43042000}, {0x43044000}, {0x43046000}, 
+    {0x43048000}, {0x4304a000}, {0x4304c000}, {0x4304e000}, 
+    {0x43050000}, {0x43052000}, {0x43054000}, {0x43056000}, 
+    {0x43058000}, {0x4305a000}, {0x4305c000}, {0x4305e000}, 
+    {0x43060000}, {0x43062000}, {0x43064000}, {0x43066000}, 
+    {0x43068000}, {0x4306a000}, {0x4306c000}, {0x4306e000}, 
+    {0x43070000}, {0x43072000}, {0x43074000}, {0x43076000}, 
+    {0x43078000}, {0x4307a000}, {0x4307c000}, {0x4307e000}, 
+    {0x43080000}, {0x43082000}, {0x43084000}, {0x43086000}, 
+    {0x43088000}, {0x4308a000}, {0x4308c000}, {0x4308e000}, 
+    {0x43090000}, {0x43092000}, {0x43094000}, {0x43096000}, 
+    {0x43098000}, {0x4309a000}, {0x4309c000}, {0x4309e000}, 
+    {0x430a0000}, {0x430a2000}, {0x430a4000}, {0x430a6000}, 
+    {0x430a8000}, {0x430aa000}, {0x430ac000}, {0x430ae000}, 
+    {0x430b0000}, {0x430b2000}, {0x430b4000}, {0x430b6000}, 
+    {0x430b8000}, {0x430ba000}, {0x430bc000}, {0x430be000}, 
+    {0x430c0000}, {0x430c2000}, {0x430c4000}, {0x430c6000}, 
+    {0x430c8000}, {0x430ca000}, {0x430cc000}, {0x430ce000}, 
+    {0x430d0000}, {0x430d2000}, {0x430d4000}, {0x430d6000}, 
+    {0x430d8000}, {0x430da000}, {0x430dc000}, {0x430de000}, 
+    {0x430e0000}, {0x430e2000}, {0x430e4000}, {0x430e6000}, 
+    {0x430e8000}, {0x430ea000}, {0x430ec000}, {0x430ee000}, 
+    {0x430f0000}, {0x430f2000}, {0x430f4000}, {0x430f6000}, 
+    {0x430f8000}, {0x430fa000}, {0x430fc000}, {0x430fe000}, 
+    {0x43100000}, {0x43102000}, {0x43104000}, {0x43106000}, 
+    {0x43108000}, {0x4310a000}, {0x4310c000}, {0x4310e000}, 
+    {0x43110000}, {0x43112000}, {0x43114000}, {0x43116000}, 
+    {0x43118000}, {0x4311a000}, {0x4311c000}, {0x4311e000}, 
+    {0x43120000}, {0x43122000}, {0x43124000}, {0x43126000}, 
+    {0x43128000}, {0x4312a000}, {0x4312c000}, {0x4312e000}, 
+    {0x43130000}, {0x43132000}, {0x43134000}, {0x43136000}, 
+    {0x43138000}, {0x4313a000}, {0x4313c000}, {0x4313e000}, 
+    {0x43140000}, {0x43142000}, {0x43144000}, {0x43146000}, 
+    {0x43148000}, {0x4314a000}, {0x4314c000}, {0x4314e000}, 
+    {0x43150000}, {0x43152000}, {0x43154000}, {0x43156000}, 
+    {0x43158000}, {0x4315a000}, {0x4315c000}, {0x4315e000}, 
+    {0x43160000}, {0x43162000}, {0x43164000}, {0x43166000}, 
+    {0x43168000}, {0x4316a000}, {0x4316c000}, {0x4316e000}, 
+    {0x43170000}, {0x43172000}, {0x43174000}, {0x43176000}, 
+    {0x43178000}, {0x4317a000}, {0x4317c000}, {0x4317e000}, 
+    {0x43180000}, {0x43182000}, {0x43184000}, {0x43186000}, 
+    {0x43188000}, {0x4318a000}, {0x4318c000}, {0x4318e000}, 
+    {0x43190000}, {0x43192000}, {0x43194000}, {0x43196000}, 
+    {0x43198000}, {0x4319a000}, {0x4319c000}, {0x4319e000}, 
+    {0x431a0000}, {0x431a2000}, {0x431a4000}, {0x431a6000}, 
+    {0x431a8000}, {0x431aa000}, {0x431ac000}, {0x431ae000}, 
+    {0x431b0000}, {0x431b2000}, {0x431b4000}, {0x431b6000}, 
+    {0x431b8000}, {0x431ba000}, {0x431bc000}, {0x431be000}, 
+    {0x431c0000}, {0x431c2000}, {0x431c4000}, {0x431c6000}, 
+    {0x431c8000}, {0x431ca000}, {0x431cc000}, {0x431ce000}, 
+    {0x431d0000}, {0x431d2000}, {0x431d4000}, {0x431d6000}, 
+    {0x431d8000}, {0x431da000}, {0x431dc000}, {0x431de000}, 
+    {0x431e0000}, {0x431e2000}, {0x431e4000}, {0x431e6000}, 
+    {0x431e8000}, {0x431ea000}, {0x431ec000}, {0x431ee000}, 
+    {0x431f0000}, {0x431f2000}, {0x431f4000}, {0x431f6000}, 
+    {0x431f8000}, {0x431fa000}, {0x431fc000}, {0x431fe000}, 
+    {0x43200000}, {0x43202000}, {0x43204000}, {0x43206000}, 
+    {0x43208000}, {0x4320a000}, {0x4320c000}, {0x4320e000}, 
+    {0x43210000}, {0x43212000}, {0x43214000}, {0x43216000}, 
+    {0x43218000}, {0x4321a000}, {0x4321c000}, {0x4321e000}, 
+    {0x43220000}, {0x43222000}, {0x43224000}, {0x43226000}, 
+    {0x43228000}, {0x4322a000}, {0x4322c000}, {0x4322e000}, 
+    {0x43230000}, {0x43232000}, {0x43234000}, {0x43236000}, 
+    {0x43238000}, {0x4323a000}, {0x4323c000}, {0x4323e000}, 
+    {0x43240000}, {0x43242000}, {0x43244000}, {0x43246000}, 
+    {0x43248000}, {0x4324a000}, {0x4324c000}, {0x4324e000}, 
+    {0x43250000}, {0x43252000}, {0x43254000}, {0x43256000}, 
+    {0x43258000}, {0x4325a000}, {0x4325c000}, {0x4325e000}, 
+    {0x43260000}, {0x43262000}, {0x43264000}, {0x43266000}, 
+    {0x43268000}, {0x4326a000}, {0x4326c000}, {0x4326e000}, 
+    {0x43270000}, {0x43272000}, {0x43274000}, {0x43276000}, 
+    {0x43278000}, {0x4327a000}, {0x4327c000}, {0x4327e000}, 
+    {0x43280000}, {0x43282000}, {0x43284000}, {0x43286000}, 
+    {0x43288000}, {0x4328a000}, {0x4328c000}, {0x4328e000}, 
+    {0x43290000}, {0x43292000}, {0x43294000}, {0x43296000}, 
+    {0x43298000}, {0x4329a000}, {0x4329c000}, {0x4329e000}, 
+    {0x432a0000}, {0x432a2000}, {0x432a4000}, {0x432a6000}, 
+    {0x432a8000}, {0x432aa000}, {0x432ac000}, {0x432ae000}, 
+    {0x432b0000}, {0x432b2000}, {0x432b4000}, {0x432b6000}, 
+    {0x432b8000}, {0x432ba000}, {0x432bc000}, {0x432be000}, 
+    {0x432c0000}, {0x432c2000}, {0x432c4000}, {0x432c6000}, 
+    {0x432c8000}, {0x432ca000}, {0x432cc000}, {0x432ce000}, 
+    {0x432d0000}, {0x432d2000}, {0x432d4000}, {0x432d6000}, 
+    {0x432d8000}, {0x432da000}, {0x432dc000}, {0x432de000}, 
+    {0x432e0000}, {0x432e2000}, {0x432e4000}, {0x432e6000}, 
+    {0x432e8000}, {0x432ea000}, {0x432ec000}, {0x432ee000}, 
+    {0x432f0000}, {0x432f2000}, {0x432f4000}, {0x432f6000}, 
+    {0x432f8000}, {0x432fa000}, {0x432fc000}, {0x432fe000}, 
+    {0x43300000}, {0x43302000}, {0x43304000}, {0x43306000}, 
+    {0x43308000}, {0x4330a000}, {0x4330c000}, {0x4330e000}, 
+    {0x43310000}, {0x43312000}, {0x43314000}, {0x43316000}, 
+    {0x43318000}, {0x4331a000}, {0x4331c000}, {0x4331e000}, 
+    {0x43320000}, {0x43322000}, {0x43324000}, {0x43326000}, 
+    {0x43328000}, {0x4332a000}, {0x4332c000}, {0x4332e000}, 
+    {0x43330000}, {0x43332000}, {0x43334000}, {0x43336000}, 
+    {0x43338000}, {0x4333a000}, {0x4333c000}, {0x4333e000}, 
+    {0x43340000}, {0x43342000}, {0x43344000}, {0x43346000}, 
+    {0x43348000}, {0x4334a000}, {0x4334c000}, {0x4334e000}, 
+    {0x43350000}, {0x43352000}, {0x43354000}, {0x43356000}, 
+    {0x43358000}, {0x4335a000}, {0x4335c000}, {0x4335e000}, 
+    {0x43360000}, {0x43362000}, {0x43364000}, {0x43366000}, 
+    {0x43368000}, {0x4336a000}, {0x4336c000}, {0x4336e000}, 
+    {0x43370000}, {0x43372000}, {0x43374000}, {0x43376000}, 
+    {0x43378000}, {0x4337a000}, {0x4337c000}, {0x4337e000}, 
+    {0x43380000}, {0x43382000}, {0x43384000}, {0x43386000}, 
+    {0x43388000}, {0x4338a000}, {0x4338c000}, {0x4338e000}, 
+    {0x43390000}, {0x43392000}, {0x43394000}, {0x43396000}, 
+    {0x43398000}, {0x4339a000}, {0x4339c000}, {0x4339e000}, 
+    {0x433a0000}, {0x433a2000}, {0x433a4000}, {0x433a6000}, 
+    {0x433a8000}, {0x433aa000}, {0x433ac000}, {0x433ae000}, 
+    {0x433b0000}, {0x433b2000}, {0x433b4000}, {0x433b6000}, 
+    {0x433b8000}, {0x433ba000}, {0x433bc000}, {0x433be000}, 
+    {0x433c0000}, {0x433c2000}, {0x433c4000}, {0x433c6000}, 
+    {0x433c8000}, {0x433ca000}, {0x433cc000}, {0x433ce000}, 
+    {0x433d0000}, {0x433d2000}, {0x433d4000}, {0x433d6000}, 
+    {0x433d8000}, {0x433da000}, {0x433dc000}, {0x433de000}, 
+    {0x433e0000}, {0x433e2000}, {0x433e4000}, {0x433e6000}, 
+    {0x433e8000}, {0x433ea000}, {0x433ec000}, {0x433ee000}, 
+    {0x433f0000}, {0x433f2000}, {0x433f4000}, {0x433f6000}, 
+    {0x433f8000}, {0x433fa000}, {0x433fc000}, {0x433fe000}, 
+    {0x43400000}, {0x43402000}, {0x43404000}, {0x43406000}, 
+    {0x43408000}, {0x4340a000}, {0x4340c000}, {0x4340e000}, 
+    {0x43410000}, {0x43412000}, {0x43414000}, {0x43416000}, 
+    {0x43418000}, {0x4341a000}, {0x4341c000}, {0x4341e000}, 
+    {0x43420000}, {0x43422000}, {0x43424000}, {0x43426000}, 
+    {0x43428000}, {0x4342a000}, {0x4342c000}, {0x4342e000}, 
+    {0x43430000}, {0x43432000}, {0x43434000}, {0x43436000}, 
+    {0x43438000}, {0x4343a000}, {0x4343c000}, {0x4343e000}, 
+    {0x43440000}, {0x43442000}, {0x43444000}, {0x43446000}, 
+    {0x43448000}, {0x4344a000}, {0x4344c000}, {0x4344e000}, 
+    {0x43450000}, {0x43452000}, {0x43454000}, {0x43456000}, 
+    {0x43458000}, {0x4345a000}, {0x4345c000}, {0x4345e000}, 
+    {0x43460000}, {0x43462000}, {0x43464000}, {0x43466000}, 
+    {0x43468000}, {0x4346a000}, {0x4346c000}, {0x4346e000}, 
+    {0x43470000}, {0x43472000}, {0x43474000}, {0x43476000}, 
+    {0x43478000}, {0x4347a000}, {0x4347c000}, {0x4347e000}, 
+    {0x43480000}, {0x43482000}, {0x43484000}, {0x43486000}, 
+    {0x43488000}, {0x4348a000}, {0x4348c000}, {0x4348e000}, 
+    {0x43490000}, {0x43492000}, {0x43494000}, {0x43496000}, 
+    {0x43498000}, {0x4349a000}, {0x4349c000}, {0x4349e000}, 
+    {0x434a0000}, {0x434a2000}, {0x434a4000}, {0x434a6000}, 
+    {0x434a8000}, {0x434aa000}, {0x434ac000}, {0x434ae000}, 
+    {0x434b0000}, {0x434b2000}, {0x434b4000}, {0x434b6000}, 
+    {0x434b8000}, {0x434ba000}, {0x434bc000}, {0x434be000}, 
+    {0x434c0000}, {0x434c2000}, {0x434c4000}, {0x434c6000}, 
+    {0x434c8000}, {0x434ca000}, {0x434cc000}, {0x434ce000}, 
+    {0x434d0000}, {0x434d2000}, {0x434d4000}, {0x434d6000}, 
+    {0x434d8000}, {0x434da000}, {0x434dc000}, {0x434de000}, 
+    {0x434e0000}, {0x434e2000}, {0x434e4000}, {0x434e6000}, 
+    {0x434e8000}, {0x434ea000}, {0x434ec000}, {0x434ee000}, 
+    {0x434f0000}, {0x434f2000}, {0x434f4000}, {0x434f6000}, 
+    {0x434f8000}, {0x434fa000}, {0x434fc000}, {0x434fe000}, 
+    {0x43500000}, {0x43502000}, {0x43504000}, {0x43506000}, 
+    {0x43508000}, {0x4350a000}, {0x4350c000}, {0x4350e000}, 
+    {0x43510000}, {0x43512000}, {0x43514000}, {0x43516000}, 
+    {0x43518000}, {0x4351a000}, {0x4351c000}, {0x4351e000}, 
+    {0x43520000}, {0x43522000}, {0x43524000}, {0x43526000}, 
+    {0x43528000}, {0x4352a000}, {0x4352c000}, {0x4352e000}, 
+    {0x43530000}, {0x43532000}, {0x43534000}, {0x43536000}, 
+    {0x43538000}, {0x4353a000}, {0x4353c000}, {0x4353e000}, 
+    {0x43540000}, {0x43542000}, {0x43544000}, {0x43546000}, 
+    {0x43548000}, {0x4354a000}, {0x4354c000}, {0x4354e000}, 
+    {0x43550000}, {0x43552000}, {0x43554000}, {0x43556000}, 
+    {0x43558000}, {0x4355a000}, {0x4355c000}, {0x4355e000}, 
+    {0x43560000}, {0x43562000}, {0x43564000}, {0x43566000}, 
+    {0x43568000}, {0x4356a000}, {0x4356c000}, {0x4356e000}, 
+    {0x43570000}, {0x43572000}, {0x43574000}, {0x43576000}, 
+    {0x43578000}, {0x4357a000}, {0x4357c000}, {0x4357e000}, 
+    {0x43580000}, {0x43582000}, {0x43584000}, {0x43586000}, 
+    {0x43588000}, {0x4358a000}, {0x4358c000}, {0x4358e000}, 
+    {0x43590000}, {0x43592000}, {0x43594000}, {0x43596000}, 
+    {0x43598000}, {0x4359a000}, {0x4359c000}, {0x4359e000}, 
+    {0x435a0000}, {0x435a2000}, {0x435a4000}, {0x435a6000}, 
+    {0x435a8000}, {0x435aa000}, {0x435ac000}, {0x435ae000}, 
+    {0x435b0000}, {0x435b2000}, {0x435b4000}, {0x435b6000}, 
+    {0x435b8000}, {0x435ba000}, {0x435bc000}, {0x435be000}, 
+    {0x435c0000}, {0x435c2000}, {0x435c4000}, {0x435c6000}, 
+    {0x435c8000}, {0x435ca000}, {0x435cc000}, {0x435ce000}, 
+    {0x435d0000}, {0x435d2000}, {0x435d4000}, {0x435d6000}, 
+    {0x435d8000}, {0x435da000}, {0x435dc000}, {0x435de000}, 
+    {0x435e0000}, {0x435e2000}, {0x435e4000}, {0x435e6000}, 
+    {0x435e8000}, {0x435ea000}, {0x435ec000}, {0x435ee000}, 
+    {0x435f0000}, {0x435f2000}, {0x435f4000}, {0x435f6000}, 
+    {0x435f8000}, {0x435fa000}, {0x435fc000}, {0x435fe000}, 
+    {0x43600000}, {0x43602000}, {0x43604000}, {0x43606000}, 
+    {0x43608000}, {0x4360a000}, {0x4360c000}, {0x4360e000}, 
+    {0x43610000}, {0x43612000}, {0x43614000}, {0x43616000}, 
+    {0x43618000}, {0x4361a000}, {0x4361c000}, {0x4361e000}, 
+    {0x43620000}, {0x43622000}, {0x43624000}, {0x43626000}, 
+    {0x43628000}, {0x4362a000}, {0x4362c000}, {0x4362e000}, 
+    {0x43630000}, {0x43632000}, {0x43634000}, {0x43636000}, 
+    {0x43638000}, {0x4363a000}, {0x4363c000}, {0x4363e000}, 
+    {0x43640000}, {0x43642000}, {0x43644000}, {0x43646000}, 
+    {0x43648000}, {0x4364a000}, {0x4364c000}, {0x4364e000}, 
+    {0x43650000}, {0x43652000}, {0x43654000}, {0x43656000}, 
+    {0x43658000}, {0x4365a000}, {0x4365c000}, {0x4365e000}, 
+    {0x43660000}, {0x43662000}, {0x43664000}, {0x43666000}, 
+    {0x43668000}, {0x4366a000}, {0x4366c000}, {0x4366e000}, 
+    {0x43670000}, {0x43672000}, {0x43674000}, {0x43676000}, 
+    {0x43678000}, {0x4367a000}, {0x4367c000}, {0x4367e000}, 
+    {0x43680000}, {0x43682000}, {0x43684000}, {0x43686000}, 
+    {0x43688000}, {0x4368a000}, {0x4368c000}, {0x4368e000}, 
+    {0x43690000}, {0x43692000}, {0x43694000}, {0x43696000}, 
+    {0x43698000}, {0x4369a000}, {0x4369c000}, {0x4369e000}, 
+    {0x436a0000}, {0x436a2000}, {0x436a4000}, {0x436a6000}, 
+    {0x436a8000}, {0x436aa000}, {0x436ac000}, {0x436ae000}, 
+    {0x436b0000}, {0x436b2000}, {0x436b4000}, {0x436b6000}, 
+    {0x436b8000}, {0x436ba000}, {0x436bc000}, {0x436be000}, 
+    {0x436c0000}, {0x436c2000}, {0x436c4000}, {0x436c6000}, 
+    {0x436c8000}, {0x436ca000}, {0x436cc000}, {0x436ce000}, 
+    {0x436d0000}, {0x436d2000}, {0x436d4000}, {0x436d6000}, 
+    {0x436d8000}, {0x436da000}, {0x436dc000}, {0x436de000}, 
+    {0x436e0000}, {0x436e2000}, {0x436e4000}, {0x436e6000}, 
+    {0x436e8000}, {0x436ea000}, {0x436ec000}, {0x436ee000}, 
+    {0x436f0000}, {0x436f2000}, {0x436f4000}, {0x436f6000}, 
+    {0x436f8000}, {0x436fa000}, {0x436fc000}, {0x436fe000}, 
+    {0x43700000}, {0x43702000}, {0x43704000}, {0x43706000}, 
+    {0x43708000}, {0x4370a000}, {0x4370c000}, {0x4370e000}, 
+    {0x43710000}, {0x43712000}, {0x43714000}, {0x43716000}, 
+    {0x43718000}, {0x4371a000}, {0x4371c000}, {0x4371e000}, 
+    {0x43720000}, {0x43722000}, {0x43724000}, {0x43726000}, 
+    {0x43728000}, {0x4372a000}, {0x4372c000}, {0x4372e000}, 
+    {0x43730000}, {0x43732000}, {0x43734000}, {0x43736000}, 
+    {0x43738000}, {0x4373a000}, {0x4373c000}, {0x4373e000}, 
+    {0x43740000}, {0x43742000}, {0x43744000}, {0x43746000}, 
+    {0x43748000}, {0x4374a000}, {0x4374c000}, {0x4374e000}, 
+    {0x43750000}, {0x43752000}, {0x43754000}, {0x43756000}, 
+    {0x43758000}, {0x4375a000}, {0x4375c000}, {0x4375e000}, 
+    {0x43760000}, {0x43762000}, {0x43764000}, {0x43766000}, 
+    {0x43768000}, {0x4376a000}, {0x4376c000}, {0x4376e000}, 
+    {0x43770000}, {0x43772000}, {0x43774000}, {0x43776000}, 
+    {0x43778000}, {0x4377a000}, {0x4377c000}, {0x4377e000}, 
+    {0x43780000}, {0x43782000}, {0x43784000}, {0x43786000}, 
+    {0x43788000}, {0x4378a000}, {0x4378c000}, {0x4378e000}, 
+    {0x43790000}, {0x43792000}, {0x43794000}, {0x43796000}, 
+    {0x43798000}, {0x4379a000}, {0x4379c000}, {0x4379e000}, 
+    {0x437a0000}, {0x437a2000}, {0x437a4000}, {0x437a6000}, 
+    {0x437a8000}, {0x437aa000}, {0x437ac000}, {0x437ae000}, 
+    {0x437b0000}, {0x437b2000}, {0x437b4000}, {0x437b6000}, 
+    {0x437b8000}, {0x437ba000}, {0x437bc000}, {0x437be000}, 
+    {0x437c0000}, {0x437c2000}, {0x437c4000}, {0x437c6000}, 
+    {0x437c8000}, {0x437ca000}, {0x437cc000}, {0x437ce000}, 
+    {0x437d0000}, {0x437d2000}, {0x437d4000}, {0x437d6000}, 
+    {0x437d8000}, {0x437da000}, {0x437dc000}, {0x437de000}, 
+    {0x437e0000}, {0x437e2000}, {0x437e4000}, {0x437e6000}, 
+    {0x437e8000}, {0x437ea000}, {0x437ec000}, {0x437ee000}, 
+    {0x437f0000}, {0x437f2000}, {0x437f4000}, {0x437f6000}, 
+    {0x437f8000}, {0x437fa000}, {0x437fc000}, {0x437fe000}, 
+    {0x43800000}, {0x43802000}, {0x43804000}, {0x43806000}, 
+    {0x43808000}, {0x4380a000}, {0x4380c000}, {0x4380e000}, 
+    {0x43810000}, {0x43812000}, {0x43814000}, {0x43816000}, 
+    {0x43818000}, {0x4381a000}, {0x4381c000}, {0x4381e000}, 
+    {0x43820000}, {0x43822000}, {0x43824000}, {0x43826000}, 
+    {0x43828000}, {0x4382a000}, {0x4382c000}, {0x4382e000}, 
+    {0x43830000}, {0x43832000}, {0x43834000}, {0x43836000}, 
+    {0x43838000}, {0x4383a000}, {0x4383c000}, {0x4383e000}, 
+    {0x43840000}, {0x43842000}, {0x43844000}, {0x43846000}, 
+    {0x43848000}, {0x4384a000}, {0x4384c000}, {0x4384e000}, 
+    {0x43850000}, {0x43852000}, {0x43854000}, {0x43856000}, 
+    {0x43858000}, {0x4385a000}, {0x4385c000}, {0x4385e000}, 
+    {0x43860000}, {0x43862000}, {0x43864000}, {0x43866000}, 
+    {0x43868000}, {0x4386a000}, {0x4386c000}, {0x4386e000}, 
+    {0x43870000}, {0x43872000}, {0x43874000}, {0x43876000}, 
+    {0x43878000}, {0x4387a000}, {0x4387c000}, {0x4387e000}, 
+    {0x43880000}, {0x43882000}, {0x43884000}, {0x43886000}, 
+    {0x43888000}, {0x4388a000}, {0x4388c000}, {0x4388e000}, 
+    {0x43890000}, {0x43892000}, {0x43894000}, {0x43896000}, 
+    {0x43898000}, {0x4389a000}, {0x4389c000}, {0x4389e000}, 
+    {0x438a0000}, {0x438a2000}, {0x438a4000}, {0x438a6000}, 
+    {0x438a8000}, {0x438aa000}, {0x438ac000}, {0x438ae000}, 
+    {0x438b0000}, {0x438b2000}, {0x438b4000}, {0x438b6000}, 
+    {0x438b8000}, {0x438ba000}, {0x438bc000}, {0x438be000}, 
+    {0x438c0000}, {0x438c2000}, {0x438c4000}, {0x438c6000}, 
+    {0x438c8000}, {0x438ca000}, {0x438cc000}, {0x438ce000}, 
+    {0x438d0000}, {0x438d2000}, {0x438d4000}, {0x438d6000}, 
+    {0x438d8000}, {0x438da000}, {0x438dc000}, {0x438de000}, 
+    {0x438e0000}, {0x438e2000}, {0x438e4000}, {0x438e6000}, 
+    {0x438e8000}, {0x438ea000}, {0x438ec000}, {0x438ee000}, 
+    {0x438f0000}, {0x438f2000}, {0x438f4000}, {0x438f6000}, 
+    {0x438f8000}, {0x438fa000}, {0x438fc000}, {0x438fe000}, 
+    {0x43900000}, {0x43902000}, {0x43904000}, {0x43906000}, 
+    {0x43908000}, {0x4390a000}, {0x4390c000}, {0x4390e000}, 
+    {0x43910000}, {0x43912000}, {0x43914000}, {0x43916000}, 
+    {0x43918000}, {0x4391a000}, {0x4391c000}, {0x4391e000}, 
+    {0x43920000}, {0x43922000}, {0x43924000}, {0x43926000}, 
+    {0x43928000}, {0x4392a000}, {0x4392c000}, {0x4392e000}, 
+    {0x43930000}, {0x43932000}, {0x43934000}, {0x43936000}, 
+    {0x43938000}, {0x4393a000}, {0x4393c000}, {0x4393e000}, 
+    {0x43940000}, {0x43942000}, {0x43944000}, {0x43946000}, 
+    {0x43948000}, {0x4394a000}, {0x4394c000}, {0x4394e000}, 
+    {0x43950000}, {0x43952000}, {0x43954000}, {0x43956000}, 
+    {0x43958000}, {0x4395a000}, {0x4395c000}, {0x4395e000}, 
+    {0x43960000}, {0x43962000}, {0x43964000}, {0x43966000}, 
+    {0x43968000}, {0x4396a000}, {0x4396c000}, {0x4396e000}, 
+    {0x43970000}, {0x43972000}, {0x43974000}, {0x43976000}, 
+    {0x43978000}, {0x4397a000}, {0x4397c000}, {0x4397e000}, 
+    {0x43980000}, {0x43982000}, {0x43984000}, {0x43986000}, 
+    {0x43988000}, {0x4398a000}, {0x4398c000}, {0x4398e000}, 
+    {0x43990000}, {0x43992000}, {0x43994000}, {0x43996000}, 
+    {0x43998000}, {0x4399a000}, {0x4399c000}, {0x4399e000}, 
+    {0x439a0000}, {0x439a2000}, {0x439a4000}, {0x439a6000}, 
+    {0x439a8000}, {0x439aa000}, {0x439ac000}, {0x439ae000}, 
+    {0x439b0000}, {0x439b2000}, {0x439b4000}, {0x439b6000}, 
+    {0x439b8000}, {0x439ba000}, {0x439bc000}, {0x439be000}, 
+    {0x439c0000}, {0x439c2000}, {0x439c4000}, {0x439c6000}, 
+    {0x439c8000}, {0x439ca000}, {0x439cc000}, {0x439ce000}, 
+    {0x439d0000}, {0x439d2000}, {0x439d4000}, {0x439d6000}, 
+    {0x439d8000}, {0x439da000}, {0x439dc000}, {0x439de000}, 
+    {0x439e0000}, {0x439e2000}, {0x439e4000}, {0x439e6000}, 
+    {0x439e8000}, {0x439ea000}, {0x439ec000}, {0x439ee000}, 
+    {0x439f0000}, {0x439f2000}, {0x439f4000}, {0x439f6000}, 
+    {0x439f8000}, {0x439fa000}, {0x439fc000}, {0x439fe000}, 
+    {0x43a00000}, {0x43a02000}, {0x43a04000}, {0x43a06000}, 
+    {0x43a08000}, {0x43a0a000}, {0x43a0c000}, {0x43a0e000}, 
+    {0x43a10000}, {0x43a12000}, {0x43a14000}, {0x43a16000}, 
+    {0x43a18000}, {0x43a1a000}, {0x43a1c000}, {0x43a1e000}, 
+    {0x43a20000}, {0x43a22000}, {0x43a24000}, {0x43a26000}, 
+    {0x43a28000}, {0x43a2a000}, {0x43a2c000}, {0x43a2e000}, 
+    {0x43a30000}, {0x43a32000}, {0x43a34000}, {0x43a36000}, 
+    {0x43a38000}, {0x43a3a000}, {0x43a3c000}, {0x43a3e000}, 
+    {0x43a40000}, {0x43a42000}, {0x43a44000}, {0x43a46000}, 
+    {0x43a48000}, {0x43a4a000}, {0x43a4c000}, {0x43a4e000}, 
+    {0x43a50000}, {0x43a52000}, {0x43a54000}, {0x43a56000}, 
+    {0x43a58000}, {0x43a5a000}, {0x43a5c000}, {0x43a5e000}, 
+    {0x43a60000}, {0x43a62000}, {0x43a64000}, {0x43a66000}, 
+    {0x43a68000}, {0x43a6a000}, {0x43a6c000}, {0x43a6e000}, 
+    {0x43a70000}, {0x43a72000}, {0x43a74000}, {0x43a76000}, 
+    {0x43a78000}, {0x43a7a000}, {0x43a7c000}, {0x43a7e000}, 
+    {0x43a80000}, {0x43a82000}, {0x43a84000}, {0x43a86000}, 
+    {0x43a88000}, {0x43a8a000}, {0x43a8c000}, {0x43a8e000}, 
+    {0x43a90000}, {0x43a92000}, {0x43a94000}, {0x43a96000}, 
+    {0x43a98000}, {0x43a9a000}, {0x43a9c000}, {0x43a9e000}, 
+    {0x43aa0000}, {0x43aa2000}, {0x43aa4000}, {0x43aa6000}, 
+    {0x43aa8000}, {0x43aaa000}, {0x43aac000}, {0x43aae000}, 
+    {0x43ab0000}, {0x43ab2000}, {0x43ab4000}, {0x43ab6000}, 
+    {0x43ab8000}, {0x43aba000}, {0x43abc000}, {0x43abe000}, 
+    {0x43ac0000}, {0x43ac2000}, {0x43ac4000}, {0x43ac6000}, 
+    {0x43ac8000}, {0x43aca000}, {0x43acc000}, {0x43ace000}, 
+    {0x43ad0000}, {0x43ad2000}, {0x43ad4000}, {0x43ad6000}, 
+    {0x43ad8000}, {0x43ada000}, {0x43adc000}, {0x43ade000}, 
+    {0x43ae0000}, {0x43ae2000}, {0x43ae4000}, {0x43ae6000}, 
+    {0x43ae8000}, {0x43aea000}, {0x43aec000}, {0x43aee000}, 
+    {0x43af0000}, {0x43af2000}, {0x43af4000}, {0x43af6000}, 
+    {0x43af8000}, {0x43afa000}, {0x43afc000}, {0x43afe000}, 
+    {0x43b00000}, {0x43b02000}, {0x43b04000}, {0x43b06000}, 
+    {0x43b08000}, {0x43b0a000}, {0x43b0c000}, {0x43b0e000}, 
+    {0x43b10000}, {0x43b12000}, {0x43b14000}, {0x43b16000}, 
+    {0x43b18000}, {0x43b1a000}, {0x43b1c000}, {0x43b1e000}, 
+    {0x43b20000}, {0x43b22000}, {0x43b24000}, {0x43b26000}, 
+    {0x43b28000}, {0x43b2a000}, {0x43b2c000}, {0x43b2e000}, 
+    {0x43b30000}, {0x43b32000}, {0x43b34000}, {0x43b36000}, 
+    {0x43b38000}, {0x43b3a000}, {0x43b3c000}, {0x43b3e000}, 
+    {0x43b40000}, {0x43b42000}, {0x43b44000}, {0x43b46000}, 
+    {0x43b48000}, {0x43b4a000}, {0x43b4c000}, {0x43b4e000}, 
+    {0x43b50000}, {0x43b52000}, {0x43b54000}, {0x43b56000}, 
+    {0x43b58000}, {0x43b5a000}, {0x43b5c000}, {0x43b5e000}, 
+    {0x43b60000}, {0x43b62000}, {0x43b64000}, {0x43b66000}, 
+    {0x43b68000}, {0x43b6a000}, {0x43b6c000}, {0x43b6e000}, 
+    {0x43b70000}, {0x43b72000}, {0x43b74000}, {0x43b76000}, 
+    {0x43b78000}, {0x43b7a000}, {0x43b7c000}, {0x43b7e000}, 
+    {0x43b80000}, {0x43b82000}, {0x43b84000}, {0x43b86000}, 
+    {0x43b88000}, {0x43b8a000}, {0x43b8c000}, {0x43b8e000}, 
+    {0x43b90000}, {0x43b92000}, {0x43b94000}, {0x43b96000}, 
+    {0x43b98000}, {0x43b9a000}, {0x43b9c000}, {0x43b9e000}, 
+    {0x43ba0000}, {0x43ba2000}, {0x43ba4000}, {0x43ba6000}, 
+    {0x43ba8000}, {0x43baa000}, {0x43bac000}, {0x43bae000}, 
+    {0x43bb0000}, {0x43bb2000}, {0x43bb4000}, {0x43bb6000}, 
+    {0x43bb8000}, {0x43bba000}, {0x43bbc000}, {0x43bbe000}, 
+    {0x43bc0000}, {0x43bc2000}, {0x43bc4000}, {0x43bc6000}, 
+    {0x43bc8000}, {0x43bca000}, {0x43bcc000}, {0x43bce000}, 
+    {0x43bd0000}, {0x43bd2000}, {0x43bd4000}, {0x43bd6000}, 
+    {0x43bd8000}, {0x43bda000}, {0x43bdc000}, {0x43bde000}, 
+    {0x43be0000}, {0x43be2000}, {0x43be4000}, {0x43be6000}, 
+    {0x43be8000}, {0x43bea000}, {0x43bec000}, {0x43bee000}, 
+    {0x43bf0000}, {0x43bf2000}, {0x43bf4000}, {0x43bf6000}, 
+    {0x43bf8000}, {0x43bfa000}, {0x43bfc000}, {0x43bfe000}, 
+    {0x43c00000}, {0x43c02000}, {0x43c04000}, {0x43c06000}, 
+    {0x43c08000}, {0x43c0a000}, {0x43c0c000}, {0x43c0e000}, 
+    {0x43c10000}, {0x43c12000}, {0x43c14000}, {0x43c16000}, 
+    {0x43c18000}, {0x43c1a000}, {0x43c1c000}, {0x43c1e000}, 
+    {0x43c20000}, {0x43c22000}, {0x43c24000}, {0x43c26000}, 
+    {0x43c28000}, {0x43c2a000}, {0x43c2c000}, {0x43c2e000}, 
+    {0x43c30000}, {0x43c32000}, {0x43c34000}, {0x43c36000}, 
+    {0x43c38000}, {0x43c3a000}, {0x43c3c000}, {0x43c3e000}, 
+    {0x43c40000}, {0x43c42000}, {0x43c44000}, {0x43c46000}, 
+    {0x43c48000}, {0x43c4a000}, {0x43c4c000}, {0x43c4e000}, 
+    {0x43c50000}, {0x43c52000}, {0x43c54000}, {0x43c56000}, 
+    {0x43c58000}, {0x43c5a000}, {0x43c5c000}, {0x43c5e000}, 
+    {0x43c60000}, {0x43c62000}, {0x43c64000}, {0x43c66000}, 
+    {0x43c68000}, {0x43c6a000}, {0x43c6c000}, {0x43c6e000}, 
+    {0x43c70000}, {0x43c72000}, {0x43c74000}, {0x43c76000}, 
+    {0x43c78000}, {0x43c7a000}, {0x43c7c000}, {0x43c7e000}, 
+    {0x43c80000}, {0x43c82000}, {0x43c84000}, {0x43c86000}, 
+    {0x43c88000}, {0x43c8a000}, {0x43c8c000}, {0x43c8e000}, 
+    {0x43c90000}, {0x43c92000}, {0x43c94000}, {0x43c96000}, 
+    {0x43c98000}, {0x43c9a000}, {0x43c9c000}, {0x43c9e000}, 
+    {0x43ca0000}, {0x43ca2000}, {0x43ca4000}, {0x43ca6000}, 
+    {0x43ca8000}, {0x43caa000}, {0x43cac000}, {0x43cae000}, 
+    {0x43cb0000}, {0x43cb2000}, {0x43cb4000}, {0x43cb6000}, 
+    {0x43cb8000}, {0x43cba000}, {0x43cbc000}, {0x43cbe000}, 
+    {0x43cc0000}, {0x43cc2000}, {0x43cc4000}, {0x43cc6000}, 
+    {0x43cc8000}, {0x43cca000}, {0x43ccc000}, {0x43cce000}, 
+    {0x43cd0000}, {0x43cd2000}, {0x43cd4000}, {0x43cd6000}, 
+    {0x43cd8000}, {0x43cda000}, {0x43cdc000}, {0x43cde000}, 
+    {0x43ce0000}, {0x43ce2000}, {0x43ce4000}, {0x43ce6000}, 
+    {0x43ce8000}, {0x43cea000}, {0x43cec000}, {0x43cee000}, 
+    {0x43cf0000}, {0x43cf2000}, {0x43cf4000}, {0x43cf6000}, 
+    {0x43cf8000}, {0x43cfa000}, {0x43cfc000}, {0x43cfe000}, 
+    {0x43d00000}, {0x43d02000}, {0x43d04000}, {0x43d06000}, 
+    {0x43d08000}, {0x43d0a000}, {0x43d0c000}, {0x43d0e000}, 
+    {0x43d10000}, {0x43d12000}, {0x43d14000}, {0x43d16000}, 
+    {0x43d18000}, {0x43d1a000}, {0x43d1c000}, {0x43d1e000}, 
+    {0x43d20000}, {0x43d22000}, {0x43d24000}, {0x43d26000}, 
+    {0x43d28000}, {0x43d2a000}, {0x43d2c000}, {0x43d2e000}, 
+    {0x43d30000}, {0x43d32000}, {0x43d34000}, {0x43d36000}, 
+    {0x43d38000}, {0x43d3a000}, {0x43d3c000}, {0x43d3e000}, 
+    {0x43d40000}, {0x43d42000}, {0x43d44000}, {0x43d46000}, 
+    {0x43d48000}, {0x43d4a000}, {0x43d4c000}, {0x43d4e000}, 
+    {0x43d50000}, {0x43d52000}, {0x43d54000}, {0x43d56000}, 
+    {0x43d58000}, {0x43d5a000}, {0x43d5c000}, {0x43d5e000}, 
+    {0x43d60000}, {0x43d62000}, {0x43d64000}, {0x43d66000}, 
+    {0x43d68000}, {0x43d6a000}, {0x43d6c000}, {0x43d6e000}, 
+    {0x43d70000}, {0x43d72000}, {0x43d74000}, {0x43d76000}, 
+    {0x43d78000}, {0x43d7a000}, {0x43d7c000}, {0x43d7e000}, 
+    {0x43d80000}, {0x43d82000}, {0x43d84000}, {0x43d86000}, 
+    {0x43d88000}, {0x43d8a000}, {0x43d8c000}, {0x43d8e000}, 
+    {0x43d90000}, {0x43d92000}, {0x43d94000}, {0x43d96000}, 
+    {0x43d98000}, {0x43d9a000}, {0x43d9c000}, {0x43d9e000}, 
+    {0x43da0000}, {0x43da2000}, {0x43da4000}, {0x43da6000}, 
+    {0x43da8000}, {0x43daa000}, {0x43dac000}, {0x43dae000}, 
+    {0x43db0000}, {0x43db2000}, {0x43db4000}, {0x43db6000}, 
+    {0x43db8000}, {0x43dba000}, {0x43dbc000}, {0x43dbe000}, 
+    {0x43dc0000}, {0x43dc2000}, {0x43dc4000}, {0x43dc6000}, 
+    {0x43dc8000}, {0x43dca000}, {0x43dcc000}, {0x43dce000}, 
+    {0x43dd0000}, {0x43dd2000}, {0x43dd4000}, {0x43dd6000}, 
+    {0x43dd8000}, {0x43dda000}, {0x43ddc000}, {0x43dde000}, 
+    {0x43de0000}, {0x43de2000}, {0x43de4000}, {0x43de6000}, 
+    {0x43de8000}, {0x43dea000}, {0x43dec000}, {0x43dee000}, 
+    {0x43df0000}, {0x43df2000}, {0x43df4000}, {0x43df6000}, 
+    {0x43df8000}, {0x43dfa000}, {0x43dfc000}, {0x43dfe000}, 
+    {0x43e00000}, {0x43e02000}, {0x43e04000}, {0x43e06000}, 
+    {0x43e08000}, {0x43e0a000}, {0x43e0c000}, {0x43e0e000}, 
+    {0x43e10000}, {0x43e12000}, {0x43e14000}, {0x43e16000}, 
+    {0x43e18000}, {0x43e1a000}, {0x43e1c000}, {0x43e1e000}, 
+    {0x43e20000}, {0x43e22000}, {0x43e24000}, {0x43e26000}, 
+    {0x43e28000}, {0x43e2a000}, {0x43e2c000}, {0x43e2e000}, 
+    {0x43e30000}, {0x43e32000}, {0x43e34000}, {0x43e36000}, 
+    {0x43e38000}, {0x43e3a000}, {0x43e3c000}, {0x43e3e000}, 
+    {0x43e40000}, {0x43e42000}, {0x43e44000}, {0x43e46000}, 
+    {0x43e48000}, {0x43e4a000}, {0x43e4c000}, {0x43e4e000}, 
+    {0x43e50000}, {0x43e52000}, {0x43e54000}, {0x43e56000}, 
+    {0x43e58000}, {0x43e5a000}, {0x43e5c000}, {0x43e5e000}, 
+    {0x43e60000}, {0x43e62000}, {0x43e64000}, {0x43e66000}, 
+    {0x43e68000}, {0x43e6a000}, {0x43e6c000}, {0x43e6e000}, 
+    {0x43e70000}, {0x43e72000}, {0x43e74000}, {0x43e76000}, 
+    {0x43e78000}, {0x43e7a000}, {0x43e7c000}, {0x43e7e000}, 
+    {0x43e80000}, {0x43e82000}, {0x43e84000}, {0x43e86000}, 
+    {0x43e88000}, {0x43e8a000}, {0x43e8c000}, {0x43e8e000}, 
+    {0x43e90000}, {0x43e92000}, {0x43e94000}, {0x43e96000}, 
+    {0x43e98000}, {0x43e9a000}, {0x43e9c000}, {0x43e9e000}, 
+    {0x43ea0000}, {0x43ea2000}, {0x43ea4000}, {0x43ea6000}, 
+    {0x43ea8000}, {0x43eaa000}, {0x43eac000}, {0x43eae000}, 
+    {0x43eb0000}, {0x43eb2000}, {0x43eb4000}, {0x43eb6000}, 
+    {0x43eb8000}, {0x43eba000}, {0x43ebc000}, {0x43ebe000}, 
+    {0x43ec0000}, {0x43ec2000}, {0x43ec4000}, {0x43ec6000}, 
+    {0x43ec8000}, {0x43eca000}, {0x43ecc000}, {0x43ece000}, 
+    {0x43ed0000}, {0x43ed2000}, {0x43ed4000}, {0x43ed6000}, 
+    {0x43ed8000}, {0x43eda000}, {0x43edc000}, {0x43ede000}, 
+    {0x43ee0000}, {0x43ee2000}, {0x43ee4000}, {0x43ee6000}, 
+    {0x43ee8000}, {0x43eea000}, {0x43eec000}, {0x43eee000}, 
+    {0x43ef0000}, {0x43ef2000}, {0x43ef4000}, {0x43ef6000}, 
+    {0x43ef8000}, {0x43efa000}, {0x43efc000}, {0x43efe000}, 
+    {0x43f00000}, {0x43f02000}, {0x43f04000}, {0x43f06000}, 
+    {0x43f08000}, {0x43f0a000}, {0x43f0c000}, {0x43f0e000}, 
+    {0x43f10000}, {0x43f12000}, {0x43f14000}, {0x43f16000}, 
+    {0x43f18000}, {0x43f1a000}, {0x43f1c000}, {0x43f1e000}, 
+    {0x43f20000}, {0x43f22000}, {0x43f24000}, {0x43f26000}, 
+    {0x43f28000}, {0x43f2a000}, {0x43f2c000}, {0x43f2e000}, 
+    {0x43f30000}, {0x43f32000}, {0x43f34000}, {0x43f36000}, 
+    {0x43f38000}, {0x43f3a000}, {0x43f3c000}, {0x43f3e000}, 
+    {0x43f40000}, {0x43f42000}, {0x43f44000}, {0x43f46000}, 
+    {0x43f48000}, {0x43f4a000}, {0x43f4c000}, {0x43f4e000}, 
+    {0x43f50000}, {0x43f52000}, {0x43f54000}, {0x43f56000}, 
+    {0x43f58000}, {0x43f5a000}, {0x43f5c000}, {0x43f5e000}, 
+    {0x43f60000}, {0x43f62000}, {0x43f64000}, {0x43f66000}, 
+    {0x43f68000}, {0x43f6a000}, {0x43f6c000}, {0x43f6e000}, 
+    {0x43f70000}, {0x43f72000}, {0x43f74000}, {0x43f76000}, 
+    {0x43f78000}, {0x43f7a000}, {0x43f7c000}, {0x43f7e000}, 
+    {0x43f80000}, {0x43f82000}, {0x43f84000}, {0x43f86000}, 
+    {0x43f88000}, {0x43f8a000}, {0x43f8c000}, {0x43f8e000}, 
+    {0x43f90000}, {0x43f92000}, {0x43f94000}, {0x43f96000}, 
+    {0x43f98000}, {0x43f9a000}, {0x43f9c000}, {0x43f9e000}, 
+    {0x43fa0000}, {0x43fa2000}, {0x43fa4000}, {0x43fa6000}, 
+    {0x43fa8000}, {0x43faa000}, {0x43fac000}, {0x43fae000}, 
+    {0x43fb0000}, {0x43fb2000}, {0x43fb4000}, {0x43fb6000}, 
+    {0x43fb8000}, {0x43fba000}, {0x43fbc000}, {0x43fbe000}, 
+    {0x43fc0000}, {0x43fc2000}, {0x43fc4000}, {0x43fc6000}, 
+    {0x43fc8000}, {0x43fca000}, {0x43fcc000}, {0x43fce000}, 
+    {0x43fd0000}, {0x43fd2000}, {0x43fd4000}, {0x43fd6000}, 
+    {0x43fd8000}, {0x43fda000}, {0x43fdc000}, {0x43fde000}, 
+    {0x43fe0000}, {0x43fe2000}, {0x43fe4000}, {0x43fe6000}, 
+    {0x43fe8000}, {0x43fea000}, {0x43fec000}, {0x43fee000}, 
+    {0x43ff0000}, {0x43ff2000}, {0x43ff4000}, {0x43ff6000}, 
+    {0x43ff8000}, {0x43ffa000}, {0x43ffc000}, {0x43ffe000}, 
+    {0x44000000}, {0x44002000}, {0x44004000}, {0x44006000}, 
+    {0x44008000}, {0x4400a000}, {0x4400c000}, {0x4400e000}, 
+    {0x44010000}, {0x44012000}, {0x44014000}, {0x44016000}, 
+    {0x44018000}, {0x4401a000}, {0x4401c000}, {0x4401e000}, 
+    {0x44020000}, {0x44022000}, {0x44024000}, {0x44026000}, 
+    {0x44028000}, {0x4402a000}, {0x4402c000}, {0x4402e000}, 
+    {0x44030000}, {0x44032000}, {0x44034000}, {0x44036000}, 
+    {0x44038000}, {0x4403a000}, {0x4403c000}, {0x4403e000}, 
+    {0x44040000}, {0x44042000}, {0x44044000}, {0x44046000}, 
+    {0x44048000}, {0x4404a000}, {0x4404c000}, {0x4404e000}, 
+    {0x44050000}, {0x44052000}, {0x44054000}, {0x44056000}, 
+    {0x44058000}, {0x4405a000}, {0x4405c000}, {0x4405e000}, 
+    {0x44060000}, {0x44062000}, {0x44064000}, {0x44066000}, 
+    {0x44068000}, {0x4406a000}, {0x4406c000}, {0x4406e000}, 
+    {0x44070000}, {0x44072000}, {0x44074000}, {0x44076000}, 
+    {0x44078000}, {0x4407a000}, {0x4407c000}, {0x4407e000}, 
+    {0x44080000}, {0x44082000}, {0x44084000}, {0x44086000}, 
+    {0x44088000}, {0x4408a000}, {0x4408c000}, {0x4408e000}, 
+    {0x44090000}, {0x44092000}, {0x44094000}, {0x44096000}, 
+    {0x44098000}, {0x4409a000}, {0x4409c000}, {0x4409e000}, 
+    {0x440a0000}, {0x440a2000}, {0x440a4000}, {0x440a6000}, 
+    {0x440a8000}, {0x440aa000}, {0x440ac000}, {0x440ae000}, 
+    {0x440b0000}, {0x440b2000}, {0x440b4000}, {0x440b6000}, 
+    {0x440b8000}, {0x440ba000}, {0x440bc000}, {0x440be000}, 
+    {0x440c0000}, {0x440c2000}, {0x440c4000}, {0x440c6000}, 
+    {0x440c8000}, {0x440ca000}, {0x440cc000}, {0x440ce000}, 
+    {0x440d0000}, {0x440d2000}, {0x440d4000}, {0x440d6000}, 
+    {0x440d8000}, {0x440da000}, {0x440dc000}, {0x440de000}, 
+    {0x440e0000}, {0x440e2000}, {0x440e4000}, {0x440e6000}, 
+    {0x440e8000}, {0x440ea000}, {0x440ec000}, {0x440ee000}, 
+    {0x440f0000}, {0x440f2000}, {0x440f4000}, {0x440f6000}, 
+    {0x440f8000}, {0x440fa000}, {0x440fc000}, {0x440fe000}, 
+    {0x44100000}, {0x44102000}, {0x44104000}, {0x44106000}, 
+    {0x44108000}, {0x4410a000}, {0x4410c000}, {0x4410e000}, 
+    {0x44110000}, {0x44112000}, {0x44114000}, {0x44116000}, 
+    {0x44118000}, {0x4411a000}, {0x4411c000}, {0x4411e000}, 
+    {0x44120000}, {0x44122000}, {0x44124000}, {0x44126000}, 
+    {0x44128000}, {0x4412a000}, {0x4412c000}, {0x4412e000}, 
+    {0x44130000}, {0x44132000}, {0x44134000}, {0x44136000}, 
+    {0x44138000}, {0x4413a000}, {0x4413c000}, {0x4413e000}, 
+    {0x44140000}, {0x44142000}, {0x44144000}, {0x44146000}, 
+    {0x44148000}, {0x4414a000}, {0x4414c000}, {0x4414e000}, 
+    {0x44150000}, {0x44152000}, {0x44154000}, {0x44156000}, 
+    {0x44158000}, {0x4415a000}, {0x4415c000}, {0x4415e000}, 
+    {0x44160000}, {0x44162000}, {0x44164000}, {0x44166000}, 
+    {0x44168000}, {0x4416a000}, {0x4416c000}, {0x4416e000}, 
+    {0x44170000}, {0x44172000}, {0x44174000}, {0x44176000}, 
+    {0x44178000}, {0x4417a000}, {0x4417c000}, {0x4417e000}, 
+    {0x44180000}, {0x44182000}, {0x44184000}, {0x44186000}, 
+    {0x44188000}, {0x4418a000}, {0x4418c000}, {0x4418e000}, 
+    {0x44190000}, {0x44192000}, {0x44194000}, {0x44196000}, 
+    {0x44198000}, {0x4419a000}, {0x4419c000}, {0x4419e000}, 
+    {0x441a0000}, {0x441a2000}, {0x441a4000}, {0x441a6000}, 
+    {0x441a8000}, {0x441aa000}, {0x441ac000}, {0x441ae000}, 
+    {0x441b0000}, {0x441b2000}, {0x441b4000}, {0x441b6000}, 
+    {0x441b8000}, {0x441ba000}, {0x441bc000}, {0x441be000}, 
+    {0x441c0000}, {0x441c2000}, {0x441c4000}, {0x441c6000}, 
+    {0x441c8000}, {0x441ca000}, {0x441cc000}, {0x441ce000}, 
+    {0x441d0000}, {0x441d2000}, {0x441d4000}, {0x441d6000}, 
+    {0x441d8000}, {0x441da000}, {0x441dc000}, {0x441de000}, 
+    {0x441e0000}, {0x441e2000}, {0x441e4000}, {0x441e6000}, 
+    {0x441e8000}, {0x441ea000}, {0x441ec000}, {0x441ee000}, 
+    {0x441f0000}, {0x441f2000}, {0x441f4000}, {0x441f6000}, 
+    {0x441f8000}, {0x441fa000}, {0x441fc000}, {0x441fe000}, 
+    {0x44200000}, {0x44202000}, {0x44204000}, {0x44206000}, 
+    {0x44208000}, {0x4420a000}, {0x4420c000}, {0x4420e000}, 
+    {0x44210000}, {0x44212000}, {0x44214000}, {0x44216000}, 
+    {0x44218000}, {0x4421a000}, {0x4421c000}, {0x4421e000}, 
+    {0x44220000}, {0x44222000}, {0x44224000}, {0x44226000}, 
+    {0x44228000}, {0x4422a000}, {0x4422c000}, {0x4422e000}, 
+    {0x44230000}, {0x44232000}, {0x44234000}, {0x44236000}, 
+    {0x44238000}, {0x4423a000}, {0x4423c000}, {0x4423e000}, 
+    {0x44240000}, {0x44242000}, {0x44244000}, {0x44246000}, 
+    {0x44248000}, {0x4424a000}, {0x4424c000}, {0x4424e000}, 
+    {0x44250000}, {0x44252000}, {0x44254000}, {0x44256000}, 
+    {0x44258000}, {0x4425a000}, {0x4425c000}, {0x4425e000}, 
+    {0x44260000}, {0x44262000}, {0x44264000}, {0x44266000}, 
+    {0x44268000}, {0x4426a000}, {0x4426c000}, {0x4426e000}, 
+    {0x44270000}, {0x44272000}, {0x44274000}, {0x44276000}, 
+    {0x44278000}, {0x4427a000}, {0x4427c000}, {0x4427e000}, 
+    {0x44280000}, {0x44282000}, {0x44284000}, {0x44286000}, 
+    {0x44288000}, {0x4428a000}, {0x4428c000}, {0x4428e000}, 
+    {0x44290000}, {0x44292000}, {0x44294000}, {0x44296000}, 
+    {0x44298000}, {0x4429a000}, {0x4429c000}, {0x4429e000}, 
+    {0x442a0000}, {0x442a2000}, {0x442a4000}, {0x442a6000}, 
+    {0x442a8000}, {0x442aa000}, {0x442ac000}, {0x442ae000}, 
+    {0x442b0000}, {0x442b2000}, {0x442b4000}, {0x442b6000}, 
+    {0x442b8000}, {0x442ba000}, {0x442bc000}, {0x442be000}, 
+    {0x442c0000}, {0x442c2000}, {0x442c4000}, {0x442c6000}, 
+    {0x442c8000}, {0x442ca000}, {0x442cc000}, {0x442ce000}, 
+    {0x442d0000}, {0x442d2000}, {0x442d4000}, {0x442d6000}, 
+    {0x442d8000}, {0x442da000}, {0x442dc000}, {0x442de000}, 
+    {0x442e0000}, {0x442e2000}, {0x442e4000}, {0x442e6000}, 
+    {0x442e8000}, {0x442ea000}, {0x442ec000}, {0x442ee000}, 
+    {0x442f0000}, {0x442f2000}, {0x442f4000}, {0x442f6000}, 
+    {0x442f8000}, {0x442fa000}, {0x442fc000}, {0x442fe000}, 
+    {0x44300000}, {0x44302000}, {0x44304000}, {0x44306000}, 
+    {0x44308000}, {0x4430a000}, {0x4430c000}, {0x4430e000}, 
+    {0x44310000}, {0x44312000}, {0x44314000}, {0x44316000}, 
+    {0x44318000}, {0x4431a000}, {0x4431c000}, {0x4431e000}, 
+    {0x44320000}, {0x44322000}, {0x44324000}, {0x44326000}, 
+    {0x44328000}, {0x4432a000}, {0x4432c000}, {0x4432e000}, 
+    {0x44330000}, {0x44332000}, {0x44334000}, {0x44336000}, 
+    {0x44338000}, {0x4433a000}, {0x4433c000}, {0x4433e000}, 
+    {0x44340000}, {0x44342000}, {0x44344000}, {0x44346000}, 
+    {0x44348000}, {0x4434a000}, {0x4434c000}, {0x4434e000}, 
+    {0x44350000}, {0x44352000}, {0x44354000}, {0x44356000}, 
+    {0x44358000}, {0x4435a000}, {0x4435c000}, {0x4435e000}, 
+    {0x44360000}, {0x44362000}, {0x44364000}, {0x44366000}, 
+    {0x44368000}, {0x4436a000}, {0x4436c000}, {0x4436e000}, 
+    {0x44370000}, {0x44372000}, {0x44374000}, {0x44376000}, 
+    {0x44378000}, {0x4437a000}, {0x4437c000}, {0x4437e000}, 
+    {0x44380000}, {0x44382000}, {0x44384000}, {0x44386000}, 
+    {0x44388000}, {0x4438a000}, {0x4438c000}, {0x4438e000}, 
+    {0x44390000}, {0x44392000}, {0x44394000}, {0x44396000}, 
+    {0x44398000}, {0x4439a000}, {0x4439c000}, {0x4439e000}, 
+    {0x443a0000}, {0x443a2000}, {0x443a4000}, {0x443a6000}, 
+    {0x443a8000}, {0x443aa000}, {0x443ac000}, {0x443ae000}, 
+    {0x443b0000}, {0x443b2000}, {0x443b4000}, {0x443b6000}, 
+    {0x443b8000}, {0x443ba000}, {0x443bc000}, {0x443be000}, 
+    {0x443c0000}, {0x443c2000}, {0x443c4000}, {0x443c6000}, 
+    {0x443c8000}, {0x443ca000}, {0x443cc000}, {0x443ce000}, 
+    {0x443d0000}, {0x443d2000}, {0x443d4000}, {0x443d6000}, 
+    {0x443d8000}, {0x443da000}, {0x443dc000}, {0x443de000}, 
+    {0x443e0000}, {0x443e2000}, {0x443e4000}, {0x443e6000}, 
+    {0x443e8000}, {0x443ea000}, {0x443ec000}, {0x443ee000}, 
+    {0x443f0000}, {0x443f2000}, {0x443f4000}, {0x443f6000}, 
+    {0x443f8000}, {0x443fa000}, {0x443fc000}, {0x443fe000}, 
+    {0x44400000}, {0x44402000}, {0x44404000}, {0x44406000}, 
+    {0x44408000}, {0x4440a000}, {0x4440c000}, {0x4440e000}, 
+    {0x44410000}, {0x44412000}, {0x44414000}, {0x44416000}, 
+    {0x44418000}, {0x4441a000}, {0x4441c000}, {0x4441e000}, 
+    {0x44420000}, {0x44422000}, {0x44424000}, {0x44426000}, 
+    {0x44428000}, {0x4442a000}, {0x4442c000}, {0x4442e000}, 
+    {0x44430000}, {0x44432000}, {0x44434000}, {0x44436000}, 
+    {0x44438000}, {0x4443a000}, {0x4443c000}, {0x4443e000}, 
+    {0x44440000}, {0x44442000}, {0x44444000}, {0x44446000}, 
+    {0x44448000}, {0x4444a000}, {0x4444c000}, {0x4444e000}, 
+    {0x44450000}, {0x44452000}, {0x44454000}, {0x44456000}, 
+    {0x44458000}, {0x4445a000}, {0x4445c000}, {0x4445e000}, 
+    {0x44460000}, {0x44462000}, {0x44464000}, {0x44466000}, 
+    {0x44468000}, {0x4446a000}, {0x4446c000}, {0x4446e000}, 
+    {0x44470000}, {0x44472000}, {0x44474000}, {0x44476000}, 
+    {0x44478000}, {0x4447a000}, {0x4447c000}, {0x4447e000}, 
+    {0x44480000}, {0x44482000}, {0x44484000}, {0x44486000}, 
+    {0x44488000}, {0x4448a000}, {0x4448c000}, {0x4448e000}, 
+    {0x44490000}, {0x44492000}, {0x44494000}, {0x44496000}, 
+    {0x44498000}, {0x4449a000}, {0x4449c000}, {0x4449e000}, 
+    {0x444a0000}, {0x444a2000}, {0x444a4000}, {0x444a6000}, 
+    {0x444a8000}, {0x444aa000}, {0x444ac000}, {0x444ae000}, 
+    {0x444b0000}, {0x444b2000}, {0x444b4000}, {0x444b6000}, 
+    {0x444b8000}, {0x444ba000}, {0x444bc000}, {0x444be000}, 
+    {0x444c0000}, {0x444c2000}, {0x444c4000}, {0x444c6000}, 
+    {0x444c8000}, {0x444ca000}, {0x444cc000}, {0x444ce000}, 
+    {0x444d0000}, {0x444d2000}, {0x444d4000}, {0x444d6000}, 
+    {0x444d8000}, {0x444da000}, {0x444dc000}, {0x444de000}, 
+    {0x444e0000}, {0x444e2000}, {0x444e4000}, {0x444e6000}, 
+    {0x444e8000}, {0x444ea000}, {0x444ec000}, {0x444ee000}, 
+    {0x444f0000}, {0x444f2000}, {0x444f4000}, {0x444f6000}, 
+    {0x444f8000}, {0x444fa000}, {0x444fc000}, {0x444fe000}, 
+    {0x44500000}, {0x44502000}, {0x44504000}, {0x44506000}, 
+    {0x44508000}, {0x4450a000}, {0x4450c000}, {0x4450e000}, 
+    {0x44510000}, {0x44512000}, {0x44514000}, {0x44516000}, 
+    {0x44518000}, {0x4451a000}, {0x4451c000}, {0x4451e000}, 
+    {0x44520000}, {0x44522000}, {0x44524000}, {0x44526000}, 
+    {0x44528000}, {0x4452a000}, {0x4452c000}, {0x4452e000}, 
+    {0x44530000}, {0x44532000}, {0x44534000}, {0x44536000}, 
+    {0x44538000}, {0x4453a000}, {0x4453c000}, {0x4453e000}, 
+    {0x44540000}, {0x44542000}, {0x44544000}, {0x44546000}, 
+    {0x44548000}, {0x4454a000}, {0x4454c000}, {0x4454e000}, 
+    {0x44550000}, {0x44552000}, {0x44554000}, {0x44556000}, 
+    {0x44558000}, {0x4455a000}, {0x4455c000}, {0x4455e000}, 
+    {0x44560000}, {0x44562000}, {0x44564000}, {0x44566000}, 
+    {0x44568000}, {0x4456a000}, {0x4456c000}, {0x4456e000}, 
+    {0x44570000}, {0x44572000}, {0x44574000}, {0x44576000}, 
+    {0x44578000}, {0x4457a000}, {0x4457c000}, {0x4457e000}, 
+    {0x44580000}, {0x44582000}, {0x44584000}, {0x44586000}, 
+    {0x44588000}, {0x4458a000}, {0x4458c000}, {0x4458e000}, 
+    {0x44590000}, {0x44592000}, {0x44594000}, {0x44596000}, 
+    {0x44598000}, {0x4459a000}, {0x4459c000}, {0x4459e000}, 
+    {0x445a0000}, {0x445a2000}, {0x445a4000}, {0x445a6000}, 
+    {0x445a8000}, {0x445aa000}, {0x445ac000}, {0x445ae000}, 
+    {0x445b0000}, {0x445b2000}, {0x445b4000}, {0x445b6000}, 
+    {0x445b8000}, {0x445ba000}, {0x445bc000}, {0x445be000}, 
+    {0x445c0000}, {0x445c2000}, {0x445c4000}, {0x445c6000}, 
+    {0x445c8000}, {0x445ca000}, {0x445cc000}, {0x445ce000}, 
+    {0x445d0000}, {0x445d2000}, {0x445d4000}, {0x445d6000}, 
+    {0x445d8000}, {0x445da000}, {0x445dc000}, {0x445de000}, 
+    {0x445e0000}, {0x445e2000}, {0x445e4000}, {0x445e6000}, 
+    {0x445e8000}, {0x445ea000}, {0x445ec000}, {0x445ee000}, 
+    {0x445f0000}, {0x445f2000}, {0x445f4000}, {0x445f6000}, 
+    {0x445f8000}, {0x445fa000}, {0x445fc000}, {0x445fe000}, 
+    {0x44600000}, {0x44602000}, {0x44604000}, {0x44606000}, 
+    {0x44608000}, {0x4460a000}, {0x4460c000}, {0x4460e000}, 
+    {0x44610000}, {0x44612000}, {0x44614000}, {0x44616000}, 
+    {0x44618000}, {0x4461a000}, {0x4461c000}, {0x4461e000}, 
+    {0x44620000}, {0x44622000}, {0x44624000}, {0x44626000}, 
+    {0x44628000}, {0x4462a000}, {0x4462c000}, {0x4462e000}, 
+    {0x44630000}, {0x44632000}, {0x44634000}, {0x44636000}, 
+    {0x44638000}, {0x4463a000}, {0x4463c000}, {0x4463e000}, 
+    {0x44640000}, {0x44642000}, {0x44644000}, {0x44646000}, 
+    {0x44648000}, {0x4464a000}, {0x4464c000}, {0x4464e000}, 
+    {0x44650000}, {0x44652000}, {0x44654000}, {0x44656000}, 
+    {0x44658000}, {0x4465a000}, {0x4465c000}, {0x4465e000}, 
+    {0x44660000}, {0x44662000}, {0x44664000}, {0x44666000}, 
+    {0x44668000}, {0x4466a000}, {0x4466c000}, {0x4466e000}, 
+    {0x44670000}, {0x44672000}, {0x44674000}, {0x44676000}, 
+    {0x44678000}, {0x4467a000}, {0x4467c000}, {0x4467e000}, 
+    {0x44680000}, {0x44682000}, {0x44684000}, {0x44686000}, 
+    {0x44688000}, {0x4468a000}, {0x4468c000}, {0x4468e000}, 
+    {0x44690000}, {0x44692000}, {0x44694000}, {0x44696000}, 
+    {0x44698000}, {0x4469a000}, {0x4469c000}, {0x4469e000}, 
+    {0x446a0000}, {0x446a2000}, {0x446a4000}, {0x446a6000}, 
+    {0x446a8000}, {0x446aa000}, {0x446ac000}, {0x446ae000}, 
+    {0x446b0000}, {0x446b2000}, {0x446b4000}, {0x446b6000}, 
+    {0x446b8000}, {0x446ba000}, {0x446bc000}, {0x446be000}, 
+    {0x446c0000}, {0x446c2000}, {0x446c4000}, {0x446c6000}, 
+    {0x446c8000}, {0x446ca000}, {0x446cc000}, {0x446ce000}, 
+    {0x446d0000}, {0x446d2000}, {0x446d4000}, {0x446d6000}, 
+    {0x446d8000}, {0x446da000}, {0x446dc000}, {0x446de000}, 
+    {0x446e0000}, {0x446e2000}, {0x446e4000}, {0x446e6000}, 
+    {0x446e8000}, {0x446ea000}, {0x446ec000}, {0x446ee000}, 
+    {0x446f0000}, {0x446f2000}, {0x446f4000}, {0x446f6000}, 
+    {0x446f8000}, {0x446fa000}, {0x446fc000}, {0x446fe000}, 
+    {0x44700000}, {0x44702000}, {0x44704000}, {0x44706000}, 
+    {0x44708000}, {0x4470a000}, {0x4470c000}, {0x4470e000}, 
+    {0x44710000}, {0x44712000}, {0x44714000}, {0x44716000}, 
+    {0x44718000}, {0x4471a000}, {0x4471c000}, {0x4471e000}, 
+    {0x44720000}, {0x44722000}, {0x44724000}, {0x44726000}, 
+    {0x44728000}, {0x4472a000}, {0x4472c000}, {0x4472e000}, 
+    {0x44730000}, {0x44732000}, {0x44734000}, {0x44736000}, 
+    {0x44738000}, {0x4473a000}, {0x4473c000}, {0x4473e000}, 
+    {0x44740000}, {0x44742000}, {0x44744000}, {0x44746000}, 
+    {0x44748000}, {0x4474a000}, {0x4474c000}, {0x4474e000}, 
+    {0x44750000}, {0x44752000}, {0x44754000}, {0x44756000}, 
+    {0x44758000}, {0x4475a000}, {0x4475c000}, {0x4475e000}, 
+    {0x44760000}, {0x44762000}, {0x44764000}, {0x44766000}, 
+    {0x44768000}, {0x4476a000}, {0x4476c000}, {0x4476e000}, 
+    {0x44770000}, {0x44772000}, {0x44774000}, {0x44776000}, 
+    {0x44778000}, {0x4477a000}, {0x4477c000}, {0x4477e000}, 
+    {0x44780000}, {0x44782000}, {0x44784000}, {0x44786000}, 
+    {0x44788000}, {0x4478a000}, {0x4478c000}, {0x4478e000}, 
+    {0x44790000}, {0x44792000}, {0x44794000}, {0x44796000}, 
+    {0x44798000}, {0x4479a000}, {0x4479c000}, {0x4479e000}, 
+    {0x447a0000}, {0x447a2000}, {0x447a4000}, {0x447a6000}, 
+    {0x447a8000}, {0x447aa000}, {0x447ac000}, {0x447ae000}, 
+    {0x447b0000}, {0x447b2000}, {0x447b4000}, {0x447b6000}, 
+    {0x447b8000}, {0x447ba000}, {0x447bc000}, {0x447be000}, 
+    {0x447c0000}, {0x447c2000}, {0x447c4000}, {0x447c6000}, 
+    {0x447c8000}, {0x447ca000}, {0x447cc000}, {0x447ce000}, 
+    {0x447d0000}, {0x447d2000}, {0x447d4000}, {0x447d6000}, 
+    {0x447d8000}, {0x447da000}, {0x447dc000}, {0x447de000}, 
+    {0x447e0000}, {0x447e2000}, {0x447e4000}, {0x447e6000}, 
+    {0x447e8000}, {0x447ea000}, {0x447ec000}, {0x447ee000}, 
+    {0x447f0000}, {0x447f2000}, {0x447f4000}, {0x447f6000}, 
+    {0x447f8000}, {0x447fa000}, {0x447fc000}, {0x447fe000}, 
+    {0x44800000}, {0x44802000}, {0x44804000}, {0x44806000}, 
+    {0x44808000}, {0x4480a000}, {0x4480c000}, {0x4480e000}, 
+    {0x44810000}, {0x44812000}, {0x44814000}, {0x44816000}, 
+    {0x44818000}, {0x4481a000}, {0x4481c000}, {0x4481e000}, 
+    {0x44820000}, {0x44822000}, {0x44824000}, {0x44826000}, 
+    {0x44828000}, {0x4482a000}, {0x4482c000}, {0x4482e000}, 
+    {0x44830000}, {0x44832000}, {0x44834000}, {0x44836000}, 
+    {0x44838000}, {0x4483a000}, {0x4483c000}, {0x4483e000}, 
+    {0x44840000}, {0x44842000}, {0x44844000}, {0x44846000}, 
+    {0x44848000}, {0x4484a000}, {0x4484c000}, {0x4484e000}, 
+    {0x44850000}, {0x44852000}, {0x44854000}, {0x44856000}, 
+    {0x44858000}, {0x4485a000}, {0x4485c000}, {0x4485e000}, 
+    {0x44860000}, {0x44862000}, {0x44864000}, {0x44866000}, 
+    {0x44868000}, {0x4486a000}, {0x4486c000}, {0x4486e000}, 
+    {0x44870000}, {0x44872000}, {0x44874000}, {0x44876000}, 
+    {0x44878000}, {0x4487a000}, {0x4487c000}, {0x4487e000}, 
+    {0x44880000}, {0x44882000}, {0x44884000}, {0x44886000}, 
+    {0x44888000}, {0x4488a000}, {0x4488c000}, {0x4488e000}, 
+    {0x44890000}, {0x44892000}, {0x44894000}, {0x44896000}, 
+    {0x44898000}, {0x4489a000}, {0x4489c000}, {0x4489e000}, 
+    {0x448a0000}, {0x448a2000}, {0x448a4000}, {0x448a6000}, 
+    {0x448a8000}, {0x448aa000}, {0x448ac000}, {0x448ae000}, 
+    {0x448b0000}, {0x448b2000}, {0x448b4000}, {0x448b6000}, 
+    {0x448b8000}, {0x448ba000}, {0x448bc000}, {0x448be000}, 
+    {0x448c0000}, {0x448c2000}, {0x448c4000}, {0x448c6000}, 
+    {0x448c8000}, {0x448ca000}, {0x448cc000}, {0x448ce000}, 
+    {0x448d0000}, {0x448d2000}, {0x448d4000}, {0x448d6000}, 
+    {0x448d8000}, {0x448da000}, {0x448dc000}, {0x448de000}, 
+    {0x448e0000}, {0x448e2000}, {0x448e4000}, {0x448e6000}, 
+    {0x448e8000}, {0x448ea000}, {0x448ec000}, {0x448ee000}, 
+    {0x448f0000}, {0x448f2000}, {0x448f4000}, {0x448f6000}, 
+    {0x448f8000}, {0x448fa000}, {0x448fc000}, {0x448fe000}, 
+    {0x44900000}, {0x44902000}, {0x44904000}, {0x44906000}, 
+    {0x44908000}, {0x4490a000}, {0x4490c000}, {0x4490e000}, 
+    {0x44910000}, {0x44912000}, {0x44914000}, {0x44916000}, 
+    {0x44918000}, {0x4491a000}, {0x4491c000}, {0x4491e000}, 
+    {0x44920000}, {0x44922000}, {0x44924000}, {0x44926000}, 
+    {0x44928000}, {0x4492a000}, {0x4492c000}, {0x4492e000}, 
+    {0x44930000}, {0x44932000}, {0x44934000}, {0x44936000}, 
+    {0x44938000}, {0x4493a000}, {0x4493c000}, {0x4493e000}, 
+    {0x44940000}, {0x44942000}, {0x44944000}, {0x44946000}, 
+    {0x44948000}, {0x4494a000}, {0x4494c000}, {0x4494e000}, 
+    {0x44950000}, {0x44952000}, {0x44954000}, {0x44956000}, 
+    {0x44958000}, {0x4495a000}, {0x4495c000}, {0x4495e000}, 
+    {0x44960000}, {0x44962000}, {0x44964000}, {0x44966000}, 
+    {0x44968000}, {0x4496a000}, {0x4496c000}, {0x4496e000}, 
+    {0x44970000}, {0x44972000}, {0x44974000}, {0x44976000}, 
+    {0x44978000}, {0x4497a000}, {0x4497c000}, {0x4497e000}, 
+    {0x44980000}, {0x44982000}, {0x44984000}, {0x44986000}, 
+    {0x44988000}, {0x4498a000}, {0x4498c000}, {0x4498e000}, 
+    {0x44990000}, {0x44992000}, {0x44994000}, {0x44996000}, 
+    {0x44998000}, {0x4499a000}, {0x4499c000}, {0x4499e000}, 
+    {0x449a0000}, {0x449a2000}, {0x449a4000}, {0x449a6000}, 
+    {0x449a8000}, {0x449aa000}, {0x449ac000}, {0x449ae000}, 
+    {0x449b0000}, {0x449b2000}, {0x449b4000}, {0x449b6000}, 
+    {0x449b8000}, {0x449ba000}, {0x449bc000}, {0x449be000}, 
+    {0x449c0000}, {0x449c2000}, {0x449c4000}, {0x449c6000}, 
+    {0x449c8000}, {0x449ca000}, {0x449cc000}, {0x449ce000}, 
+    {0x449d0000}, {0x449d2000}, {0x449d4000}, {0x449d6000}, 
+    {0x449d8000}, {0x449da000}, {0x449dc000}, {0x449de000}, 
+    {0x449e0000}, {0x449e2000}, {0x449e4000}, {0x449e6000}, 
+    {0x449e8000}, {0x449ea000}, {0x449ec000}, {0x449ee000}, 
+    {0x449f0000}, {0x449f2000}, {0x449f4000}, {0x449f6000}, 
+    {0x449f8000}, {0x449fa000}, {0x449fc000}, {0x449fe000}, 
+    {0x44a00000}, {0x44a02000}, {0x44a04000}, {0x44a06000}, 
+    {0x44a08000}, {0x44a0a000}, {0x44a0c000}, {0x44a0e000}, 
+    {0x44a10000}, {0x44a12000}, {0x44a14000}, {0x44a16000}, 
+    {0x44a18000}, {0x44a1a000}, {0x44a1c000}, {0x44a1e000}, 
+    {0x44a20000}, {0x44a22000}, {0x44a24000}, {0x44a26000}, 
+    {0x44a28000}, {0x44a2a000}, {0x44a2c000}, {0x44a2e000}, 
+    {0x44a30000}, {0x44a32000}, {0x44a34000}, {0x44a36000}, 
+    {0x44a38000}, {0x44a3a000}, {0x44a3c000}, {0x44a3e000}, 
+    {0x44a40000}, {0x44a42000}, {0x44a44000}, {0x44a46000}, 
+    {0x44a48000}, {0x44a4a000}, {0x44a4c000}, {0x44a4e000}, 
+    {0x44a50000}, {0x44a52000}, {0x44a54000}, {0x44a56000}, 
+    {0x44a58000}, {0x44a5a000}, {0x44a5c000}, {0x44a5e000}, 
+    {0x44a60000}, {0x44a62000}, {0x44a64000}, {0x44a66000}, 
+    {0x44a68000}, {0x44a6a000}, {0x44a6c000}, {0x44a6e000}, 
+    {0x44a70000}, {0x44a72000}, {0x44a74000}, {0x44a76000}, 
+    {0x44a78000}, {0x44a7a000}, {0x44a7c000}, {0x44a7e000}, 
+    {0x44a80000}, {0x44a82000}, {0x44a84000}, {0x44a86000}, 
+    {0x44a88000}, {0x44a8a000}, {0x44a8c000}, {0x44a8e000}, 
+    {0x44a90000}, {0x44a92000}, {0x44a94000}, {0x44a96000}, 
+    {0x44a98000}, {0x44a9a000}, {0x44a9c000}, {0x44a9e000}, 
+    {0x44aa0000}, {0x44aa2000}, {0x44aa4000}, {0x44aa6000}, 
+    {0x44aa8000}, {0x44aaa000}, {0x44aac000}, {0x44aae000}, 
+    {0x44ab0000}, {0x44ab2000}, {0x44ab4000}, {0x44ab6000}, 
+    {0x44ab8000}, {0x44aba000}, {0x44abc000}, {0x44abe000}, 
+    {0x44ac0000}, {0x44ac2000}, {0x44ac4000}, {0x44ac6000}, 
+    {0x44ac8000}, {0x44aca000}, {0x44acc000}, {0x44ace000}, 
+    {0x44ad0000}, {0x44ad2000}, {0x44ad4000}, {0x44ad6000}, 
+    {0x44ad8000}, {0x44ada000}, {0x44adc000}, {0x44ade000}, 
+    {0x44ae0000}, {0x44ae2000}, {0x44ae4000}, {0x44ae6000}, 
+    {0x44ae8000}, {0x44aea000}, {0x44aec000}, {0x44aee000}, 
+    {0x44af0000}, {0x44af2000}, {0x44af4000}, {0x44af6000}, 
+    {0x44af8000}, {0x44afa000}, {0x44afc000}, {0x44afe000}, 
+    {0x44b00000}, {0x44b02000}, {0x44b04000}, {0x44b06000}, 
+    {0x44b08000}, {0x44b0a000}, {0x44b0c000}, {0x44b0e000}, 
+    {0x44b10000}, {0x44b12000}, {0x44b14000}, {0x44b16000}, 
+    {0x44b18000}, {0x44b1a000}, {0x44b1c000}, {0x44b1e000}, 
+    {0x44b20000}, {0x44b22000}, {0x44b24000}, {0x44b26000}, 
+    {0x44b28000}, {0x44b2a000}, {0x44b2c000}, {0x44b2e000}, 
+    {0x44b30000}, {0x44b32000}, {0x44b34000}, {0x44b36000}, 
+    {0x44b38000}, {0x44b3a000}, {0x44b3c000}, {0x44b3e000}, 
+    {0x44b40000}, {0x44b42000}, {0x44b44000}, {0x44b46000}, 
+    {0x44b48000}, {0x44b4a000}, {0x44b4c000}, {0x44b4e000}, 
+    {0x44b50000}, {0x44b52000}, {0x44b54000}, {0x44b56000}, 
+    {0x44b58000}, {0x44b5a000}, {0x44b5c000}, {0x44b5e000}, 
+    {0x44b60000}, {0x44b62000}, {0x44b64000}, {0x44b66000}, 
+    {0x44b68000}, {0x44b6a000}, {0x44b6c000}, {0x44b6e000}, 
+    {0x44b70000}, {0x44b72000}, {0x44b74000}, {0x44b76000}, 
+    {0x44b78000}, {0x44b7a000}, {0x44b7c000}, {0x44b7e000}, 
+    {0x44b80000}, {0x44b82000}, {0x44b84000}, {0x44b86000}, 
+    {0x44b88000}, {0x44b8a000}, {0x44b8c000}, {0x44b8e000}, 
+    {0x44b90000}, {0x44b92000}, {0x44b94000}, {0x44b96000}, 
+    {0x44b98000}, {0x44b9a000}, {0x44b9c000}, {0x44b9e000}, 
+    {0x44ba0000}, {0x44ba2000}, {0x44ba4000}, {0x44ba6000}, 
+    {0x44ba8000}, {0x44baa000}, {0x44bac000}, {0x44bae000}, 
+    {0x44bb0000}, {0x44bb2000}, {0x44bb4000}, {0x44bb6000}, 
+    {0x44bb8000}, {0x44bba000}, {0x44bbc000}, {0x44bbe000}, 
+    {0x44bc0000}, {0x44bc2000}, {0x44bc4000}, {0x44bc6000}, 
+    {0x44bc8000}, {0x44bca000}, {0x44bcc000}, {0x44bce000}, 
+    {0x44bd0000}, {0x44bd2000}, {0x44bd4000}, {0x44bd6000}, 
+    {0x44bd8000}, {0x44bda000}, {0x44bdc000}, {0x44bde000}, 
+    {0x44be0000}, {0x44be2000}, {0x44be4000}, {0x44be6000}, 
+    {0x44be8000}, {0x44bea000}, {0x44bec000}, {0x44bee000}, 
+    {0x44bf0000}, {0x44bf2000}, {0x44bf4000}, {0x44bf6000}, 
+    {0x44bf8000}, {0x44bfa000}, {0x44bfc000}, {0x44bfe000}, 
+    {0x44c00000}, {0x44c02000}, {0x44c04000}, {0x44c06000}, 
+    {0x44c08000}, {0x44c0a000}, {0x44c0c000}, {0x44c0e000}, 
+    {0x44c10000}, {0x44c12000}, {0x44c14000}, {0x44c16000}, 
+    {0x44c18000}, {0x44c1a000}, {0x44c1c000}, {0x44c1e000}, 
+    {0x44c20000}, {0x44c22000}, {0x44c24000}, {0x44c26000}, 
+    {0x44c28000}, {0x44c2a000}, {0x44c2c000}, {0x44c2e000}, 
+    {0x44c30000}, {0x44c32000}, {0x44c34000}, {0x44c36000}, 
+    {0x44c38000}, {0x44c3a000}, {0x44c3c000}, {0x44c3e000}, 
+    {0x44c40000}, {0x44c42000}, {0x44c44000}, {0x44c46000}, 
+    {0x44c48000}, {0x44c4a000}, {0x44c4c000}, {0x44c4e000}, 
+    {0x44c50000}, {0x44c52000}, {0x44c54000}, {0x44c56000}, 
+    {0x44c58000}, {0x44c5a000}, {0x44c5c000}, {0x44c5e000}, 
+    {0x44c60000}, {0x44c62000}, {0x44c64000}, {0x44c66000}, 
+    {0x44c68000}, {0x44c6a000}, {0x44c6c000}, {0x44c6e000}, 
+    {0x44c70000}, {0x44c72000}, {0x44c74000}, {0x44c76000}, 
+    {0x44c78000}, {0x44c7a000}, {0x44c7c000}, {0x44c7e000}, 
+    {0x44c80000}, {0x44c82000}, {0x44c84000}, {0x44c86000}, 
+    {0x44c88000}, {0x44c8a000}, {0x44c8c000}, {0x44c8e000}, 
+    {0x44c90000}, {0x44c92000}, {0x44c94000}, {0x44c96000}, 
+    {0x44c98000}, {0x44c9a000}, {0x44c9c000}, {0x44c9e000}, 
+    {0x44ca0000}, {0x44ca2000}, {0x44ca4000}, {0x44ca6000}, 
+    {0x44ca8000}, {0x44caa000}, {0x44cac000}, {0x44cae000}, 
+    {0x44cb0000}, {0x44cb2000}, {0x44cb4000}, {0x44cb6000}, 
+    {0x44cb8000}, {0x44cba000}, {0x44cbc000}, {0x44cbe000}, 
+    {0x44cc0000}, {0x44cc2000}, {0x44cc4000}, {0x44cc6000}, 
+    {0x44cc8000}, {0x44cca000}, {0x44ccc000}, {0x44cce000}, 
+    {0x44cd0000}, {0x44cd2000}, {0x44cd4000}, {0x44cd6000}, 
+    {0x44cd8000}, {0x44cda000}, {0x44cdc000}, {0x44cde000}, 
+    {0x44ce0000}, {0x44ce2000}, {0x44ce4000}, {0x44ce6000}, 
+    {0x44ce8000}, {0x44cea000}, {0x44cec000}, {0x44cee000}, 
+    {0x44cf0000}, {0x44cf2000}, {0x44cf4000}, {0x44cf6000}, 
+    {0x44cf8000}, {0x44cfa000}, {0x44cfc000}, {0x44cfe000}, 
+    {0x44d00000}, {0x44d02000}, {0x44d04000}, {0x44d06000}, 
+    {0x44d08000}, {0x44d0a000}, {0x44d0c000}, {0x44d0e000}, 
+    {0x44d10000}, {0x44d12000}, {0x44d14000}, {0x44d16000}, 
+    {0x44d18000}, {0x44d1a000}, {0x44d1c000}, {0x44d1e000}, 
+    {0x44d20000}, {0x44d22000}, {0x44d24000}, {0x44d26000}, 
+    {0x44d28000}, {0x44d2a000}, {0x44d2c000}, {0x44d2e000}, 
+    {0x44d30000}, {0x44d32000}, {0x44d34000}, {0x44d36000}, 
+    {0x44d38000}, {0x44d3a000}, {0x44d3c000}, {0x44d3e000}, 
+    {0x44d40000}, {0x44d42000}, {0x44d44000}, {0x44d46000}, 
+    {0x44d48000}, {0x44d4a000}, {0x44d4c000}, {0x44d4e000}, 
+    {0x44d50000}, {0x44d52000}, {0x44d54000}, {0x44d56000}, 
+    {0x44d58000}, {0x44d5a000}, {0x44d5c000}, {0x44d5e000}, 
+    {0x44d60000}, {0x44d62000}, {0x44d64000}, {0x44d66000}, 
+    {0x44d68000}, {0x44d6a000}, {0x44d6c000}, {0x44d6e000}, 
+    {0x44d70000}, {0x44d72000}, {0x44d74000}, {0x44d76000}, 
+    {0x44d78000}, {0x44d7a000}, {0x44d7c000}, {0x44d7e000}, 
+    {0x44d80000}, {0x44d82000}, {0x44d84000}, {0x44d86000}, 
+    {0x44d88000}, {0x44d8a000}, {0x44d8c000}, {0x44d8e000}, 
+    {0x44d90000}, {0x44d92000}, {0x44d94000}, {0x44d96000}, 
+    {0x44d98000}, {0x44d9a000}, {0x44d9c000}, {0x44d9e000}, 
+    {0x44da0000}, {0x44da2000}, {0x44da4000}, {0x44da6000}, 
+    {0x44da8000}, {0x44daa000}, {0x44dac000}, {0x44dae000}, 
+    {0x44db0000}, {0x44db2000}, {0x44db4000}, {0x44db6000}, 
+    {0x44db8000}, {0x44dba000}, {0x44dbc000}, {0x44dbe000}, 
+    {0x44dc0000}, {0x44dc2000}, {0x44dc4000}, {0x44dc6000}, 
+    {0x44dc8000}, {0x44dca000}, {0x44dcc000}, {0x44dce000}, 
+    {0x44dd0000}, {0x44dd2000}, {0x44dd4000}, {0x44dd6000}, 
+    {0x44dd8000}, {0x44dda000}, {0x44ddc000}, {0x44dde000}, 
+    {0x44de0000}, {0x44de2000}, {0x44de4000}, {0x44de6000}, 
+    {0x44de8000}, {0x44dea000}, {0x44dec000}, {0x44dee000}, 
+    {0x44df0000}, {0x44df2000}, {0x44df4000}, {0x44df6000}, 
+    {0x44df8000}, {0x44dfa000}, {0x44dfc000}, {0x44dfe000}, 
+    {0x44e00000}, {0x44e02000}, {0x44e04000}, {0x44e06000}, 
+    {0x44e08000}, {0x44e0a000}, {0x44e0c000}, {0x44e0e000}, 
+    {0x44e10000}, {0x44e12000}, {0x44e14000}, {0x44e16000}, 
+    {0x44e18000}, {0x44e1a000}, {0x44e1c000}, {0x44e1e000}, 
+    {0x44e20000}, {0x44e22000}, {0x44e24000}, {0x44e26000}, 
+    {0x44e28000}, {0x44e2a000}, {0x44e2c000}, {0x44e2e000}, 
+    {0x44e30000}, {0x44e32000}, {0x44e34000}, {0x44e36000}, 
+    {0x44e38000}, {0x44e3a000}, {0x44e3c000}, {0x44e3e000}, 
+    {0x44e40000}, {0x44e42000}, {0x44e44000}, {0x44e46000}, 
+    {0x44e48000}, {0x44e4a000}, {0x44e4c000}, {0x44e4e000}, 
+    {0x44e50000}, {0x44e52000}, {0x44e54000}, {0x44e56000}, 
+    {0x44e58000}, {0x44e5a000}, {0x44e5c000}, {0x44e5e000}, 
+    {0x44e60000}, {0x44e62000}, {0x44e64000}, {0x44e66000}, 
+    {0x44e68000}, {0x44e6a000}, {0x44e6c000}, {0x44e6e000}, 
+    {0x44e70000}, {0x44e72000}, {0x44e74000}, {0x44e76000}, 
+    {0x44e78000}, {0x44e7a000}, {0x44e7c000}, {0x44e7e000}, 
+    {0x44e80000}, {0x44e82000}, {0x44e84000}, {0x44e86000}, 
+    {0x44e88000}, {0x44e8a000}, {0x44e8c000}, {0x44e8e000}, 
+    {0x44e90000}, {0x44e92000}, {0x44e94000}, {0x44e96000}, 
+    {0x44e98000}, {0x44e9a000}, {0x44e9c000}, {0x44e9e000}, 
+    {0x44ea0000}, {0x44ea2000}, {0x44ea4000}, {0x44ea6000}, 
+    {0x44ea8000}, {0x44eaa000}, {0x44eac000}, {0x44eae000}, 
+    {0x44eb0000}, {0x44eb2000}, {0x44eb4000}, {0x44eb6000}, 
+    {0x44eb8000}, {0x44eba000}, {0x44ebc000}, {0x44ebe000}, 
+    {0x44ec0000}, {0x44ec2000}, {0x44ec4000}, {0x44ec6000}, 
+    {0x44ec8000}, {0x44eca000}, {0x44ecc000}, {0x44ece000}, 
+    {0x44ed0000}, {0x44ed2000}, {0x44ed4000}, {0x44ed6000}, 
+    {0x44ed8000}, {0x44eda000}, {0x44edc000}, {0x44ede000}, 
+    {0x44ee0000}, {0x44ee2000}, {0x44ee4000}, {0x44ee6000}, 
+    {0x44ee8000}, {0x44eea000}, {0x44eec000}, {0x44eee000}, 
+    {0x44ef0000}, {0x44ef2000}, {0x44ef4000}, {0x44ef6000}, 
+    {0x44ef8000}, {0x44efa000}, {0x44efc000}, {0x44efe000}, 
+    {0x44f00000}, {0x44f02000}, {0x44f04000}, {0x44f06000}, 
+    {0x44f08000}, {0x44f0a000}, {0x44f0c000}, {0x44f0e000}, 
+    {0x44f10000}, {0x44f12000}, {0x44f14000}, {0x44f16000}, 
+    {0x44f18000}, {0x44f1a000}, {0x44f1c000}, {0x44f1e000}, 
+    {0x44f20000}, {0x44f22000}, {0x44f24000}, {0x44f26000}, 
+    {0x44f28000}, {0x44f2a000}, {0x44f2c000}, {0x44f2e000}, 
+    {0x44f30000}, {0x44f32000}, {0x44f34000}, {0x44f36000}, 
+    {0x44f38000}, {0x44f3a000}, {0x44f3c000}, {0x44f3e000}, 
+    {0x44f40000}, {0x44f42000}, {0x44f44000}, {0x44f46000}, 
+    {0x44f48000}, {0x44f4a000}, {0x44f4c000}, {0x44f4e000}, 
+    {0x44f50000}, {0x44f52000}, {0x44f54000}, {0x44f56000}, 
+    {0x44f58000}, {0x44f5a000}, {0x44f5c000}, {0x44f5e000}, 
+    {0x44f60000}, {0x44f62000}, {0x44f64000}, {0x44f66000}, 
+    {0x44f68000}, {0x44f6a000}, {0x44f6c000}, {0x44f6e000}, 
+    {0x44f70000}, {0x44f72000}, {0x44f74000}, {0x44f76000}, 
+    {0x44f78000}, {0x44f7a000}, {0x44f7c000}, {0x44f7e000}, 
+    {0x44f80000}, {0x44f82000}, {0x44f84000}, {0x44f86000}, 
+    {0x44f88000}, {0x44f8a000}, {0x44f8c000}, {0x44f8e000}, 
+    {0x44f90000}, {0x44f92000}, {0x44f94000}, {0x44f96000}, 
+    {0x44f98000}, {0x44f9a000}, {0x44f9c000}, {0x44f9e000}, 
+    {0x44fa0000}, {0x44fa2000}, {0x44fa4000}, {0x44fa6000}, 
+    {0x44fa8000}, {0x44faa000}, {0x44fac000}, {0x44fae000}, 
+    {0x44fb0000}, {0x44fb2000}, {0x44fb4000}, {0x44fb6000}, 
+    {0x44fb8000}, {0x44fba000}, {0x44fbc000}, {0x44fbe000}, 
+    {0x44fc0000}, {0x44fc2000}, {0x44fc4000}, {0x44fc6000}, 
+    {0x44fc8000}, {0x44fca000}, {0x44fcc000}, {0x44fce000}, 
+    {0x44fd0000}, {0x44fd2000}, {0x44fd4000}, {0x44fd6000}, 
+    {0x44fd8000}, {0x44fda000}, {0x44fdc000}, {0x44fde000}, 
+    {0x44fe0000}, {0x44fe2000}, {0x44fe4000}, {0x44fe6000}, 
+    {0x44fe8000}, {0x44fea000}, {0x44fec000}, {0x44fee000}, 
+    {0x44ff0000}, {0x44ff2000}, {0x44ff4000}, {0x44ff6000}, 
+    {0x44ff8000}, {0x44ffa000}, {0x44ffc000}, {0x44ffe000}, 
+    {0x45000000}, {0x45002000}, {0x45004000}, {0x45006000}, 
+    {0x45008000}, {0x4500a000}, {0x4500c000}, {0x4500e000}, 
+    {0x45010000}, {0x45012000}, {0x45014000}, {0x45016000}, 
+    {0x45018000}, {0x4501a000}, {0x4501c000}, {0x4501e000}, 
+    {0x45020000}, {0x45022000}, {0x45024000}, {0x45026000}, 
+    {0x45028000}, {0x4502a000}, {0x4502c000}, {0x4502e000}, 
+    {0x45030000}, {0x45032000}, {0x45034000}, {0x45036000}, 
+    {0x45038000}, {0x4503a000}, {0x4503c000}, {0x4503e000}, 
+    {0x45040000}, {0x45042000}, {0x45044000}, {0x45046000}, 
+    {0x45048000}, {0x4504a000}, {0x4504c000}, {0x4504e000}, 
+    {0x45050000}, {0x45052000}, {0x45054000}, {0x45056000}, 
+    {0x45058000}, {0x4505a000}, {0x4505c000}, {0x4505e000}, 
+    {0x45060000}, {0x45062000}, {0x45064000}, {0x45066000}, 
+    {0x45068000}, {0x4506a000}, {0x4506c000}, {0x4506e000}, 
+    {0x45070000}, {0x45072000}, {0x45074000}, {0x45076000}, 
+    {0x45078000}, {0x4507a000}, {0x4507c000}, {0x4507e000}, 
+    {0x45080000}, {0x45082000}, {0x45084000}, {0x45086000}, 
+    {0x45088000}, {0x4508a000}, {0x4508c000}, {0x4508e000}, 
+    {0x45090000}, {0x45092000}, {0x45094000}, {0x45096000}, 
+    {0x45098000}, {0x4509a000}, {0x4509c000}, {0x4509e000}, 
+    {0x450a0000}, {0x450a2000}, {0x450a4000}, {0x450a6000}, 
+    {0x450a8000}, {0x450aa000}, {0x450ac000}, {0x450ae000}, 
+    {0x450b0000}, {0x450b2000}, {0x450b4000}, {0x450b6000}, 
+    {0x450b8000}, {0x450ba000}, {0x450bc000}, {0x450be000}, 
+    {0x450c0000}, {0x450c2000}, {0x450c4000}, {0x450c6000}, 
+    {0x450c8000}, {0x450ca000}, {0x450cc000}, {0x450ce000}, 
+    {0x450d0000}, {0x450d2000}, {0x450d4000}, {0x450d6000}, 
+    {0x450d8000}, {0x450da000}, {0x450dc000}, {0x450de000}, 
+    {0x450e0000}, {0x450e2000}, {0x450e4000}, {0x450e6000}, 
+    {0x450e8000}, {0x450ea000}, {0x450ec000}, {0x450ee000}, 
+    {0x450f0000}, {0x450f2000}, {0x450f4000}, {0x450f6000}, 
+    {0x450f8000}, {0x450fa000}, {0x450fc000}, {0x450fe000}, 
+    {0x45100000}, {0x45102000}, {0x45104000}, {0x45106000}, 
+    {0x45108000}, {0x4510a000}, {0x4510c000}, {0x4510e000}, 
+    {0x45110000}, {0x45112000}, {0x45114000}, {0x45116000}, 
+    {0x45118000}, {0x4511a000}, {0x4511c000}, {0x4511e000}, 
+    {0x45120000}, {0x45122000}, {0x45124000}, {0x45126000}, 
+    {0x45128000}, {0x4512a000}, {0x4512c000}, {0x4512e000}, 
+    {0x45130000}, {0x45132000}, {0x45134000}, {0x45136000}, 
+    {0x45138000}, {0x4513a000}, {0x4513c000}, {0x4513e000}, 
+    {0x45140000}, {0x45142000}, {0x45144000}, {0x45146000}, 
+    {0x45148000}, {0x4514a000}, {0x4514c000}, {0x4514e000}, 
+    {0x45150000}, {0x45152000}, {0x45154000}, {0x45156000}, 
+    {0x45158000}, {0x4515a000}, {0x4515c000}, {0x4515e000}, 
+    {0x45160000}, {0x45162000}, {0x45164000}, {0x45166000}, 
+    {0x45168000}, {0x4516a000}, {0x4516c000}, {0x4516e000}, 
+    {0x45170000}, {0x45172000}, {0x45174000}, {0x45176000}, 
+    {0x45178000}, {0x4517a000}, {0x4517c000}, {0x4517e000}, 
+    {0x45180000}, {0x45182000}, {0x45184000}, {0x45186000}, 
+    {0x45188000}, {0x4518a000}, {0x4518c000}, {0x4518e000}, 
+    {0x45190000}, {0x45192000}, {0x45194000}, {0x45196000}, 
+    {0x45198000}, {0x4519a000}, {0x4519c000}, {0x4519e000}, 
+    {0x451a0000}, {0x451a2000}, {0x451a4000}, {0x451a6000}, 
+    {0x451a8000}, {0x451aa000}, {0x451ac000}, {0x451ae000}, 
+    {0x451b0000}, {0x451b2000}, {0x451b4000}, {0x451b6000}, 
+    {0x451b8000}, {0x451ba000}, {0x451bc000}, {0x451be000}, 
+    {0x451c0000}, {0x451c2000}, {0x451c4000}, {0x451c6000}, 
+    {0x451c8000}, {0x451ca000}, {0x451cc000}, {0x451ce000}, 
+    {0x451d0000}, {0x451d2000}, {0x451d4000}, {0x451d6000}, 
+    {0x451d8000}, {0x451da000}, {0x451dc000}, {0x451de000}, 
+    {0x451e0000}, {0x451e2000}, {0x451e4000}, {0x451e6000}, 
+    {0x451e8000}, {0x451ea000}, {0x451ec000}, {0x451ee000}, 
+    {0x451f0000}, {0x451f2000}, {0x451f4000}, {0x451f6000}, 
+    {0x451f8000}, {0x451fa000}, {0x451fc000}, {0x451fe000}, 
+    {0x45200000}, {0x45202000}, {0x45204000}, {0x45206000}, 
+    {0x45208000}, {0x4520a000}, {0x4520c000}, {0x4520e000}, 
+    {0x45210000}, {0x45212000}, {0x45214000}, {0x45216000}, 
+    {0x45218000}, {0x4521a000}, {0x4521c000}, {0x4521e000}, 
+    {0x45220000}, {0x45222000}, {0x45224000}, {0x45226000}, 
+    {0x45228000}, {0x4522a000}, {0x4522c000}, {0x4522e000}, 
+    {0x45230000}, {0x45232000}, {0x45234000}, {0x45236000}, 
+    {0x45238000}, {0x4523a000}, {0x4523c000}, {0x4523e000}, 
+    {0x45240000}, {0x45242000}, {0x45244000}, {0x45246000}, 
+    {0x45248000}, {0x4524a000}, {0x4524c000}, {0x4524e000}, 
+    {0x45250000}, {0x45252000}, {0x45254000}, {0x45256000}, 
+    {0x45258000}, {0x4525a000}, {0x4525c000}, {0x4525e000}, 
+    {0x45260000}, {0x45262000}, {0x45264000}, {0x45266000}, 
+    {0x45268000}, {0x4526a000}, {0x4526c000}, {0x4526e000}, 
+    {0x45270000}, {0x45272000}, {0x45274000}, {0x45276000}, 
+    {0x45278000}, {0x4527a000}, {0x4527c000}, {0x4527e000}, 
+    {0x45280000}, {0x45282000}, {0x45284000}, {0x45286000}, 
+    {0x45288000}, {0x4528a000}, {0x4528c000}, {0x4528e000}, 
+    {0x45290000}, {0x45292000}, {0x45294000}, {0x45296000}, 
+    {0x45298000}, {0x4529a000}, {0x4529c000}, {0x4529e000}, 
+    {0x452a0000}, {0x452a2000}, {0x452a4000}, {0x452a6000}, 
+    {0x452a8000}, {0x452aa000}, {0x452ac000}, {0x452ae000}, 
+    {0x452b0000}, {0x452b2000}, {0x452b4000}, {0x452b6000}, 
+    {0x452b8000}, {0x452ba000}, {0x452bc000}, {0x452be000}, 
+    {0x452c0000}, {0x452c2000}, {0x452c4000}, {0x452c6000}, 
+    {0x452c8000}, {0x452ca000}, {0x452cc000}, {0x452ce000}, 
+    {0x452d0000}, {0x452d2000}, {0x452d4000}, {0x452d6000}, 
+    {0x452d8000}, {0x452da000}, {0x452dc000}, {0x452de000}, 
+    {0x452e0000}, {0x452e2000}, {0x452e4000}, {0x452e6000}, 
+    {0x452e8000}, {0x452ea000}, {0x452ec000}, {0x452ee000}, 
+    {0x452f0000}, {0x452f2000}, {0x452f4000}, {0x452f6000}, 
+    {0x452f8000}, {0x452fa000}, {0x452fc000}, {0x452fe000}, 
+    {0x45300000}, {0x45302000}, {0x45304000}, {0x45306000}, 
+    {0x45308000}, {0x4530a000}, {0x4530c000}, {0x4530e000}, 
+    {0x45310000}, {0x45312000}, {0x45314000}, {0x45316000}, 
+    {0x45318000}, {0x4531a000}, {0x4531c000}, {0x4531e000}, 
+    {0x45320000}, {0x45322000}, {0x45324000}, {0x45326000}, 
+    {0x45328000}, {0x4532a000}, {0x4532c000}, {0x4532e000}, 
+    {0x45330000}, {0x45332000}, {0x45334000}, {0x45336000}, 
+    {0x45338000}, {0x4533a000}, {0x4533c000}, {0x4533e000}, 
+    {0x45340000}, {0x45342000}, {0x45344000}, {0x45346000}, 
+    {0x45348000}, {0x4534a000}, {0x4534c000}, {0x4534e000}, 
+    {0x45350000}, {0x45352000}, {0x45354000}, {0x45356000}, 
+    {0x45358000}, {0x4535a000}, {0x4535c000}, {0x4535e000}, 
+    {0x45360000}, {0x45362000}, {0x45364000}, {0x45366000}, 
+    {0x45368000}, {0x4536a000}, {0x4536c000}, {0x4536e000}, 
+    {0x45370000}, {0x45372000}, {0x45374000}, {0x45376000}, 
+    {0x45378000}, {0x4537a000}, {0x4537c000}, {0x4537e000}, 
+    {0x45380000}, {0x45382000}, {0x45384000}, {0x45386000}, 
+    {0x45388000}, {0x4538a000}, {0x4538c000}, {0x4538e000}, 
+    {0x45390000}, {0x45392000}, {0x45394000}, {0x45396000}, 
+    {0x45398000}, {0x4539a000}, {0x4539c000}, {0x4539e000}, 
+    {0x453a0000}, {0x453a2000}, {0x453a4000}, {0x453a6000}, 
+    {0x453a8000}, {0x453aa000}, {0x453ac000}, {0x453ae000}, 
+    {0x453b0000}, {0x453b2000}, {0x453b4000}, {0x453b6000}, 
+    {0x453b8000}, {0x453ba000}, {0x453bc000}, {0x453be000}, 
+    {0x453c0000}, {0x453c2000}, {0x453c4000}, {0x453c6000}, 
+    {0x453c8000}, {0x453ca000}, {0x453cc000}, {0x453ce000}, 
+    {0x453d0000}, {0x453d2000}, {0x453d4000}, {0x453d6000}, 
+    {0x453d8000}, {0x453da000}, {0x453dc000}, {0x453de000}, 
+    {0x453e0000}, {0x453e2000}, {0x453e4000}, {0x453e6000}, 
+    {0x453e8000}, {0x453ea000}, {0x453ec000}, {0x453ee000}, 
+    {0x453f0000}, {0x453f2000}, {0x453f4000}, {0x453f6000}, 
+    {0x453f8000}, {0x453fa000}, {0x453fc000}, {0x453fe000}, 
+    {0x45400000}, {0x45402000}, {0x45404000}, {0x45406000}, 
+    {0x45408000}, {0x4540a000}, {0x4540c000}, {0x4540e000}, 
+    {0x45410000}, {0x45412000}, {0x45414000}, {0x45416000}, 
+    {0x45418000}, {0x4541a000}, {0x4541c000}, {0x4541e000}, 
+    {0x45420000}, {0x45422000}, {0x45424000}, {0x45426000}, 
+    {0x45428000}, {0x4542a000}, {0x4542c000}, {0x4542e000}, 
+    {0x45430000}, {0x45432000}, {0x45434000}, {0x45436000}, 
+    {0x45438000}, {0x4543a000}, {0x4543c000}, {0x4543e000}, 
+    {0x45440000}, {0x45442000}, {0x45444000}, {0x45446000}, 
+    {0x45448000}, {0x4544a000}, {0x4544c000}, {0x4544e000}, 
+    {0x45450000}, {0x45452000}, {0x45454000}, {0x45456000}, 
+    {0x45458000}, {0x4545a000}, {0x4545c000}, {0x4545e000}, 
+    {0x45460000}, {0x45462000}, {0x45464000}, {0x45466000}, 
+    {0x45468000}, {0x4546a000}, {0x4546c000}, {0x4546e000}, 
+    {0x45470000}, {0x45472000}, {0x45474000}, {0x45476000}, 
+    {0x45478000}, {0x4547a000}, {0x4547c000}, {0x4547e000}, 
+    {0x45480000}, {0x45482000}, {0x45484000}, {0x45486000}, 
+    {0x45488000}, {0x4548a000}, {0x4548c000}, {0x4548e000}, 
+    {0x45490000}, {0x45492000}, {0x45494000}, {0x45496000}, 
+    {0x45498000}, {0x4549a000}, {0x4549c000}, {0x4549e000}, 
+    {0x454a0000}, {0x454a2000}, {0x454a4000}, {0x454a6000}, 
+    {0x454a8000}, {0x454aa000}, {0x454ac000}, {0x454ae000}, 
+    {0x454b0000}, {0x454b2000}, {0x454b4000}, {0x454b6000}, 
+    {0x454b8000}, {0x454ba000}, {0x454bc000}, {0x454be000}, 
+    {0x454c0000}, {0x454c2000}, {0x454c4000}, {0x454c6000}, 
+    {0x454c8000}, {0x454ca000}, {0x454cc000}, {0x454ce000}, 
+    {0x454d0000}, {0x454d2000}, {0x454d4000}, {0x454d6000}, 
+    {0x454d8000}, {0x454da000}, {0x454dc000}, {0x454de000}, 
+    {0x454e0000}, {0x454e2000}, {0x454e4000}, {0x454e6000}, 
+    {0x454e8000}, {0x454ea000}, {0x454ec000}, {0x454ee000}, 
+    {0x454f0000}, {0x454f2000}, {0x454f4000}, {0x454f6000}, 
+    {0x454f8000}, {0x454fa000}, {0x454fc000}, {0x454fe000}, 
+    {0x45500000}, {0x45502000}, {0x45504000}, {0x45506000}, 
+    {0x45508000}, {0x4550a000}, {0x4550c000}, {0x4550e000}, 
+    {0x45510000}, {0x45512000}, {0x45514000}, {0x45516000}, 
+    {0x45518000}, {0x4551a000}, {0x4551c000}, {0x4551e000}, 
+    {0x45520000}, {0x45522000}, {0x45524000}, {0x45526000}, 
+    {0x45528000}, {0x4552a000}, {0x4552c000}, {0x4552e000}, 
+    {0x45530000}, {0x45532000}, {0x45534000}, {0x45536000}, 
+    {0x45538000}, {0x4553a000}, {0x4553c000}, {0x4553e000}, 
+    {0x45540000}, {0x45542000}, {0x45544000}, {0x45546000}, 
+    {0x45548000}, {0x4554a000}, {0x4554c000}, {0x4554e000}, 
+    {0x45550000}, {0x45552000}, {0x45554000}, {0x45556000}, 
+    {0x45558000}, {0x4555a000}, {0x4555c000}, {0x4555e000}, 
+    {0x45560000}, {0x45562000}, {0x45564000}, {0x45566000}, 
+    {0x45568000}, {0x4556a000}, {0x4556c000}, {0x4556e000}, 
+    {0x45570000}, {0x45572000}, {0x45574000}, {0x45576000}, 
+    {0x45578000}, {0x4557a000}, {0x4557c000}, {0x4557e000}, 
+    {0x45580000}, {0x45582000}, {0x45584000}, {0x45586000}, 
+    {0x45588000}, {0x4558a000}, {0x4558c000}, {0x4558e000}, 
+    {0x45590000}, {0x45592000}, {0x45594000}, {0x45596000}, 
+    {0x45598000}, {0x4559a000}, {0x4559c000}, {0x4559e000}, 
+    {0x455a0000}, {0x455a2000}, {0x455a4000}, {0x455a6000}, 
+    {0x455a8000}, {0x455aa000}, {0x455ac000}, {0x455ae000}, 
+    {0x455b0000}, {0x455b2000}, {0x455b4000}, {0x455b6000}, 
+    {0x455b8000}, {0x455ba000}, {0x455bc000}, {0x455be000}, 
+    {0x455c0000}, {0x455c2000}, {0x455c4000}, {0x455c6000}, 
+    {0x455c8000}, {0x455ca000}, {0x455cc000}, {0x455ce000}, 
+    {0x455d0000}, {0x455d2000}, {0x455d4000}, {0x455d6000}, 
+    {0x455d8000}, {0x455da000}, {0x455dc000}, {0x455de000}, 
+    {0x455e0000}, {0x455e2000}, {0x455e4000}, {0x455e6000}, 
+    {0x455e8000}, {0x455ea000}, {0x455ec000}, {0x455ee000}, 
+    {0x455f0000}, {0x455f2000}, {0x455f4000}, {0x455f6000}, 
+    {0x455f8000}, {0x455fa000}, {0x455fc000}, {0x455fe000}, 
+    {0x45600000}, {0x45602000}, {0x45604000}, {0x45606000}, 
+    {0x45608000}, {0x4560a000}, {0x4560c000}, {0x4560e000}, 
+    {0x45610000}, {0x45612000}, {0x45614000}, {0x45616000}, 
+    {0x45618000}, {0x4561a000}, {0x4561c000}, {0x4561e000}, 
+    {0x45620000}, {0x45622000}, {0x45624000}, {0x45626000}, 
+    {0x45628000}, {0x4562a000}, {0x4562c000}, {0x4562e000}, 
+    {0x45630000}, {0x45632000}, {0x45634000}, {0x45636000}, 
+    {0x45638000}, {0x4563a000}, {0x4563c000}, {0x4563e000}, 
+    {0x45640000}, {0x45642000}, {0x45644000}, {0x45646000}, 
+    {0x45648000}, {0x4564a000}, {0x4564c000}, {0x4564e000}, 
+    {0x45650000}, {0x45652000}, {0x45654000}, {0x45656000}, 
+    {0x45658000}, {0x4565a000}, {0x4565c000}, {0x4565e000}, 
+    {0x45660000}, {0x45662000}, {0x45664000}, {0x45666000}, 
+    {0x45668000}, {0x4566a000}, {0x4566c000}, {0x4566e000}, 
+    {0x45670000}, {0x45672000}, {0x45674000}, {0x45676000}, 
+    {0x45678000}, {0x4567a000}, {0x4567c000}, {0x4567e000}, 
+    {0x45680000}, {0x45682000}, {0x45684000}, {0x45686000}, 
+    {0x45688000}, {0x4568a000}, {0x4568c000}, {0x4568e000}, 
+    {0x45690000}, {0x45692000}, {0x45694000}, {0x45696000}, 
+    {0x45698000}, {0x4569a000}, {0x4569c000}, {0x4569e000}, 
+    {0x456a0000}, {0x456a2000}, {0x456a4000}, {0x456a6000}, 
+    {0x456a8000}, {0x456aa000}, {0x456ac000}, {0x456ae000}, 
+    {0x456b0000}, {0x456b2000}, {0x456b4000}, {0x456b6000}, 
+    {0x456b8000}, {0x456ba000}, {0x456bc000}, {0x456be000}, 
+    {0x456c0000}, {0x456c2000}, {0x456c4000}, {0x456c6000}, 
+    {0x456c8000}, {0x456ca000}, {0x456cc000}, {0x456ce000}, 
+    {0x456d0000}, {0x456d2000}, {0x456d4000}, {0x456d6000}, 
+    {0x456d8000}, {0x456da000}, {0x456dc000}, {0x456de000}, 
+    {0x456e0000}, {0x456e2000}, {0x456e4000}, {0x456e6000}, 
+    {0x456e8000}, {0x456ea000}, {0x456ec000}, {0x456ee000}, 
+    {0x456f0000}, {0x456f2000}, {0x456f4000}, {0x456f6000}, 
+    {0x456f8000}, {0x456fa000}, {0x456fc000}, {0x456fe000}, 
+    {0x45700000}, {0x45702000}, {0x45704000}, {0x45706000}, 
+    {0x45708000}, {0x4570a000}, {0x4570c000}, {0x4570e000}, 
+    {0x45710000}, {0x45712000}, {0x45714000}, {0x45716000}, 
+    {0x45718000}, {0x4571a000}, {0x4571c000}, {0x4571e000}, 
+    {0x45720000}, {0x45722000}, {0x45724000}, {0x45726000}, 
+    {0x45728000}, {0x4572a000}, {0x4572c000}, {0x4572e000}, 
+    {0x45730000}, {0x45732000}, {0x45734000}, {0x45736000}, 
+    {0x45738000}, {0x4573a000}, {0x4573c000}, {0x4573e000}, 
+    {0x45740000}, {0x45742000}, {0x45744000}, {0x45746000}, 
+    {0x45748000}, {0x4574a000}, {0x4574c000}, {0x4574e000}, 
+    {0x45750000}, {0x45752000}, {0x45754000}, {0x45756000}, 
+    {0x45758000}, {0x4575a000}, {0x4575c000}, {0x4575e000}, 
+    {0x45760000}, {0x45762000}, {0x45764000}, {0x45766000}, 
+    {0x45768000}, {0x4576a000}, {0x4576c000}, {0x4576e000}, 
+    {0x45770000}, {0x45772000}, {0x45774000}, {0x45776000}, 
+    {0x45778000}, {0x4577a000}, {0x4577c000}, {0x4577e000}, 
+    {0x45780000}, {0x45782000}, {0x45784000}, {0x45786000}, 
+    {0x45788000}, {0x4578a000}, {0x4578c000}, {0x4578e000}, 
+    {0x45790000}, {0x45792000}, {0x45794000}, {0x45796000}, 
+    {0x45798000}, {0x4579a000}, {0x4579c000}, {0x4579e000}, 
+    {0x457a0000}, {0x457a2000}, {0x457a4000}, {0x457a6000}, 
+    {0x457a8000}, {0x457aa000}, {0x457ac000}, {0x457ae000}, 
+    {0x457b0000}, {0x457b2000}, {0x457b4000}, {0x457b6000}, 
+    {0x457b8000}, {0x457ba000}, {0x457bc000}, {0x457be000}, 
+    {0x457c0000}, {0x457c2000}, {0x457c4000}, {0x457c6000}, 
+    {0x457c8000}, {0x457ca000}, {0x457cc000}, {0x457ce000}, 
+    {0x457d0000}, {0x457d2000}, {0x457d4000}, {0x457d6000}, 
+    {0x457d8000}, {0x457da000}, {0x457dc000}, {0x457de000}, 
+    {0x457e0000}, {0x457e2000}, {0x457e4000}, {0x457e6000}, 
+    {0x457e8000}, {0x457ea000}, {0x457ec000}, {0x457ee000}, 
+    {0x457f0000}, {0x457f2000}, {0x457f4000}, {0x457f6000}, 
+    {0x457f8000}, {0x457fa000}, {0x457fc000}, {0x457fe000}, 
+    {0x45800000}, {0x45802000}, {0x45804000}, {0x45806000}, 
+    {0x45808000}, {0x4580a000}, {0x4580c000}, {0x4580e000}, 
+    {0x45810000}, {0x45812000}, {0x45814000}, {0x45816000}, 
+    {0x45818000}, {0x4581a000}, {0x4581c000}, {0x4581e000}, 
+    {0x45820000}, {0x45822000}, {0x45824000}, {0x45826000}, 
+    {0x45828000}, {0x4582a000}, {0x4582c000}, {0x4582e000}, 
+    {0x45830000}, {0x45832000}, {0x45834000}, {0x45836000}, 
+    {0x45838000}, {0x4583a000}, {0x4583c000}, {0x4583e000}, 
+    {0x45840000}, {0x45842000}, {0x45844000}, {0x45846000}, 
+    {0x45848000}, {0x4584a000}, {0x4584c000}, {0x4584e000}, 
+    {0x45850000}, {0x45852000}, {0x45854000}, {0x45856000}, 
+    {0x45858000}, {0x4585a000}, {0x4585c000}, {0x4585e000}, 
+    {0x45860000}, {0x45862000}, {0x45864000}, {0x45866000}, 
+    {0x45868000}, {0x4586a000}, {0x4586c000}, {0x4586e000}, 
+    {0x45870000}, {0x45872000}, {0x45874000}, {0x45876000}, 
+    {0x45878000}, {0x4587a000}, {0x4587c000}, {0x4587e000}, 
+    {0x45880000}, {0x45882000}, {0x45884000}, {0x45886000}, 
+    {0x45888000}, {0x4588a000}, {0x4588c000}, {0x4588e000}, 
+    {0x45890000}, {0x45892000}, {0x45894000}, {0x45896000}, 
+    {0x45898000}, {0x4589a000}, {0x4589c000}, {0x4589e000}, 
+    {0x458a0000}, {0x458a2000}, {0x458a4000}, {0x458a6000}, 
+    {0x458a8000}, {0x458aa000}, {0x458ac000}, {0x458ae000}, 
+    {0x458b0000}, {0x458b2000}, {0x458b4000}, {0x458b6000}, 
+    {0x458b8000}, {0x458ba000}, {0x458bc000}, {0x458be000}, 
+    {0x458c0000}, {0x458c2000}, {0x458c4000}, {0x458c6000}, 
+    {0x458c8000}, {0x458ca000}, {0x458cc000}, {0x458ce000}, 
+    {0x458d0000}, {0x458d2000}, {0x458d4000}, {0x458d6000}, 
+    {0x458d8000}, {0x458da000}, {0x458dc000}, {0x458de000}, 
+    {0x458e0000}, {0x458e2000}, {0x458e4000}, {0x458e6000}, 
+    {0x458e8000}, {0x458ea000}, {0x458ec000}, {0x458ee000}, 
+    {0x458f0000}, {0x458f2000}, {0x458f4000}, {0x458f6000}, 
+    {0x458f8000}, {0x458fa000}, {0x458fc000}, {0x458fe000}, 
+    {0x45900000}, {0x45902000}, {0x45904000}, {0x45906000}, 
+    {0x45908000}, {0x4590a000}, {0x4590c000}, {0x4590e000}, 
+    {0x45910000}, {0x45912000}, {0x45914000}, {0x45916000}, 
+    {0x45918000}, {0x4591a000}, {0x4591c000}, {0x4591e000}, 
+    {0x45920000}, {0x45922000}, {0x45924000}, {0x45926000}, 
+    {0x45928000}, {0x4592a000}, {0x4592c000}, {0x4592e000}, 
+    {0x45930000}, {0x45932000}, {0x45934000}, {0x45936000}, 
+    {0x45938000}, {0x4593a000}, {0x4593c000}, {0x4593e000}, 
+    {0x45940000}, {0x45942000}, {0x45944000}, {0x45946000}, 
+    {0x45948000}, {0x4594a000}, {0x4594c000}, {0x4594e000}, 
+    {0x45950000}, {0x45952000}, {0x45954000}, {0x45956000}, 
+    {0x45958000}, {0x4595a000}, {0x4595c000}, {0x4595e000}, 
+    {0x45960000}, {0x45962000}, {0x45964000}, {0x45966000}, 
+    {0x45968000}, {0x4596a000}, {0x4596c000}, {0x4596e000}, 
+    {0x45970000}, {0x45972000}, {0x45974000}, {0x45976000}, 
+    {0x45978000}, {0x4597a000}, {0x4597c000}, {0x4597e000}, 
+    {0x45980000}, {0x45982000}, {0x45984000}, {0x45986000}, 
+    {0x45988000}, {0x4598a000}, {0x4598c000}, {0x4598e000}, 
+    {0x45990000}, {0x45992000}, {0x45994000}, {0x45996000}, 
+    {0x45998000}, {0x4599a000}, {0x4599c000}, {0x4599e000}, 
+    {0x459a0000}, {0x459a2000}, {0x459a4000}, {0x459a6000}, 
+    {0x459a8000}, {0x459aa000}, {0x459ac000}, {0x459ae000}, 
+    {0x459b0000}, {0x459b2000}, {0x459b4000}, {0x459b6000}, 
+    {0x459b8000}, {0x459ba000}, {0x459bc000}, {0x459be000}, 
+    {0x459c0000}, {0x459c2000}, {0x459c4000}, {0x459c6000}, 
+    {0x459c8000}, {0x459ca000}, {0x459cc000}, {0x459ce000}, 
+    {0x459d0000}, {0x459d2000}, {0x459d4000}, {0x459d6000}, 
+    {0x459d8000}, {0x459da000}, {0x459dc000}, {0x459de000}, 
+    {0x459e0000}, {0x459e2000}, {0x459e4000}, {0x459e6000}, 
+    {0x459e8000}, {0x459ea000}, {0x459ec000}, {0x459ee000}, 
+    {0x459f0000}, {0x459f2000}, {0x459f4000}, {0x459f6000}, 
+    {0x459f8000}, {0x459fa000}, {0x459fc000}, {0x459fe000}, 
+    {0x45a00000}, {0x45a02000}, {0x45a04000}, {0x45a06000}, 
+    {0x45a08000}, {0x45a0a000}, {0x45a0c000}, {0x45a0e000}, 
+    {0x45a10000}, {0x45a12000}, {0x45a14000}, {0x45a16000}, 
+    {0x45a18000}, {0x45a1a000}, {0x45a1c000}, {0x45a1e000}, 
+    {0x45a20000}, {0x45a22000}, {0x45a24000}, {0x45a26000}, 
+    {0x45a28000}, {0x45a2a000}, {0x45a2c000}, {0x45a2e000}, 
+    {0x45a30000}, {0x45a32000}, {0x45a34000}, {0x45a36000}, 
+    {0x45a38000}, {0x45a3a000}, {0x45a3c000}, {0x45a3e000}, 
+    {0x45a40000}, {0x45a42000}, {0x45a44000}, {0x45a46000}, 
+    {0x45a48000}, {0x45a4a000}, {0x45a4c000}, {0x45a4e000}, 
+    {0x45a50000}, {0x45a52000}, {0x45a54000}, {0x45a56000}, 
+    {0x45a58000}, {0x45a5a000}, {0x45a5c000}, {0x45a5e000}, 
+    {0x45a60000}, {0x45a62000}, {0x45a64000}, {0x45a66000}, 
+    {0x45a68000}, {0x45a6a000}, {0x45a6c000}, {0x45a6e000}, 
+    {0x45a70000}, {0x45a72000}, {0x45a74000}, {0x45a76000}, 
+    {0x45a78000}, {0x45a7a000}, {0x45a7c000}, {0x45a7e000}, 
+    {0x45a80000}, {0x45a82000}, {0x45a84000}, {0x45a86000}, 
+    {0x45a88000}, {0x45a8a000}, {0x45a8c000}, {0x45a8e000}, 
+    {0x45a90000}, {0x45a92000}, {0x45a94000}, {0x45a96000}, 
+    {0x45a98000}, {0x45a9a000}, {0x45a9c000}, {0x45a9e000}, 
+    {0x45aa0000}, {0x45aa2000}, {0x45aa4000}, {0x45aa6000}, 
+    {0x45aa8000}, {0x45aaa000}, {0x45aac000}, {0x45aae000}, 
+    {0x45ab0000}, {0x45ab2000}, {0x45ab4000}, {0x45ab6000}, 
+    {0x45ab8000}, {0x45aba000}, {0x45abc000}, {0x45abe000}, 
+    {0x45ac0000}, {0x45ac2000}, {0x45ac4000}, {0x45ac6000}, 
+    {0x45ac8000}, {0x45aca000}, {0x45acc000}, {0x45ace000}, 
+    {0x45ad0000}, {0x45ad2000}, {0x45ad4000}, {0x45ad6000}, 
+    {0x45ad8000}, {0x45ada000}, {0x45adc000}, {0x45ade000}, 
+    {0x45ae0000}, {0x45ae2000}, {0x45ae4000}, {0x45ae6000}, 
+    {0x45ae8000}, {0x45aea000}, {0x45aec000}, {0x45aee000}, 
+    {0x45af0000}, {0x45af2000}, {0x45af4000}, {0x45af6000}, 
+    {0x45af8000}, {0x45afa000}, {0x45afc000}, {0x45afe000}, 
+    {0x45b00000}, {0x45b02000}, {0x45b04000}, {0x45b06000}, 
+    {0x45b08000}, {0x45b0a000}, {0x45b0c000}, {0x45b0e000}, 
+    {0x45b10000}, {0x45b12000}, {0x45b14000}, {0x45b16000}, 
+    {0x45b18000}, {0x45b1a000}, {0x45b1c000}, {0x45b1e000}, 
+    {0x45b20000}, {0x45b22000}, {0x45b24000}, {0x45b26000}, 
+    {0x45b28000}, {0x45b2a000}, {0x45b2c000}, {0x45b2e000}, 
+    {0x45b30000}, {0x45b32000}, {0x45b34000}, {0x45b36000}, 
+    {0x45b38000}, {0x45b3a000}, {0x45b3c000}, {0x45b3e000}, 
+    {0x45b40000}, {0x45b42000}, {0x45b44000}, {0x45b46000}, 
+    {0x45b48000}, {0x45b4a000}, {0x45b4c000}, {0x45b4e000}, 
+    {0x45b50000}, {0x45b52000}, {0x45b54000}, {0x45b56000}, 
+    {0x45b58000}, {0x45b5a000}, {0x45b5c000}, {0x45b5e000}, 
+    {0x45b60000}, {0x45b62000}, {0x45b64000}, {0x45b66000}, 
+    {0x45b68000}, {0x45b6a000}, {0x45b6c000}, {0x45b6e000}, 
+    {0x45b70000}, {0x45b72000}, {0x45b74000}, {0x45b76000}, 
+    {0x45b78000}, {0x45b7a000}, {0x45b7c000}, {0x45b7e000}, 
+    {0x45b80000}, {0x45b82000}, {0x45b84000}, {0x45b86000}, 
+    {0x45b88000}, {0x45b8a000}, {0x45b8c000}, {0x45b8e000}, 
+    {0x45b90000}, {0x45b92000}, {0x45b94000}, {0x45b96000}, 
+    {0x45b98000}, {0x45b9a000}, {0x45b9c000}, {0x45b9e000}, 
+    {0x45ba0000}, {0x45ba2000}, {0x45ba4000}, {0x45ba6000}, 
+    {0x45ba8000}, {0x45baa000}, {0x45bac000}, {0x45bae000}, 
+    {0x45bb0000}, {0x45bb2000}, {0x45bb4000}, {0x45bb6000}, 
+    {0x45bb8000}, {0x45bba000}, {0x45bbc000}, {0x45bbe000}, 
+    {0x45bc0000}, {0x45bc2000}, {0x45bc4000}, {0x45bc6000}, 
+    {0x45bc8000}, {0x45bca000}, {0x45bcc000}, {0x45bce000}, 
+    {0x45bd0000}, {0x45bd2000}, {0x45bd4000}, {0x45bd6000}, 
+    {0x45bd8000}, {0x45bda000}, {0x45bdc000}, {0x45bde000}, 
+    {0x45be0000}, {0x45be2000}, {0x45be4000}, {0x45be6000}, 
+    {0x45be8000}, {0x45bea000}, {0x45bec000}, {0x45bee000}, 
+    {0x45bf0000}, {0x45bf2000}, {0x45bf4000}, {0x45bf6000}, 
+    {0x45bf8000}, {0x45bfa000}, {0x45bfc000}, {0x45bfe000}, 
+    {0x45c00000}, {0x45c02000}, {0x45c04000}, {0x45c06000}, 
+    {0x45c08000}, {0x45c0a000}, {0x45c0c000}, {0x45c0e000}, 
+    {0x45c10000}, {0x45c12000}, {0x45c14000}, {0x45c16000}, 
+    {0x45c18000}, {0x45c1a000}, {0x45c1c000}, {0x45c1e000}, 
+    {0x45c20000}, {0x45c22000}, {0x45c24000}, {0x45c26000}, 
+    {0x45c28000}, {0x45c2a000}, {0x45c2c000}, {0x45c2e000}, 
+    {0x45c30000}, {0x45c32000}, {0x45c34000}, {0x45c36000}, 
+    {0x45c38000}, {0x45c3a000}, {0x45c3c000}, {0x45c3e000}, 
+    {0x45c40000}, {0x45c42000}, {0x45c44000}, {0x45c46000}, 
+    {0x45c48000}, {0x45c4a000}, {0x45c4c000}, {0x45c4e000}, 
+    {0x45c50000}, {0x45c52000}, {0x45c54000}, {0x45c56000}, 
+    {0x45c58000}, {0x45c5a000}, {0x45c5c000}, {0x45c5e000}, 
+    {0x45c60000}, {0x45c62000}, {0x45c64000}, {0x45c66000}, 
+    {0x45c68000}, {0x45c6a000}, {0x45c6c000}, {0x45c6e000}, 
+    {0x45c70000}, {0x45c72000}, {0x45c74000}, {0x45c76000}, 
+    {0x45c78000}, {0x45c7a000}, {0x45c7c000}, {0x45c7e000}, 
+    {0x45c80000}, {0x45c82000}, {0x45c84000}, {0x45c86000}, 
+    {0x45c88000}, {0x45c8a000}, {0x45c8c000}, {0x45c8e000}, 
+    {0x45c90000}, {0x45c92000}, {0x45c94000}, {0x45c96000}, 
+    {0x45c98000}, {0x45c9a000}, {0x45c9c000}, {0x45c9e000}, 
+    {0x45ca0000}, {0x45ca2000}, {0x45ca4000}, {0x45ca6000}, 
+    {0x45ca8000}, {0x45caa000}, {0x45cac000}, {0x45cae000}, 
+    {0x45cb0000}, {0x45cb2000}, {0x45cb4000}, {0x45cb6000}, 
+    {0x45cb8000}, {0x45cba000}, {0x45cbc000}, {0x45cbe000}, 
+    {0x45cc0000}, {0x45cc2000}, {0x45cc4000}, {0x45cc6000}, 
+    {0x45cc8000}, {0x45cca000}, {0x45ccc000}, {0x45cce000}, 
+    {0x45cd0000}, {0x45cd2000}, {0x45cd4000}, {0x45cd6000}, 
+    {0x45cd8000}, {0x45cda000}, {0x45cdc000}, {0x45cde000}, 
+    {0x45ce0000}, {0x45ce2000}, {0x45ce4000}, {0x45ce6000}, 
+    {0x45ce8000}, {0x45cea000}, {0x45cec000}, {0x45cee000}, 
+    {0x45cf0000}, {0x45cf2000}, {0x45cf4000}, {0x45cf6000}, 
+    {0x45cf8000}, {0x45cfa000}, {0x45cfc000}, {0x45cfe000}, 
+    {0x45d00000}, {0x45d02000}, {0x45d04000}, {0x45d06000}, 
+    {0x45d08000}, {0x45d0a000}, {0x45d0c000}, {0x45d0e000}, 
+    {0x45d10000}, {0x45d12000}, {0x45d14000}, {0x45d16000}, 
+    {0x45d18000}, {0x45d1a000}, {0x45d1c000}, {0x45d1e000}, 
+    {0x45d20000}, {0x45d22000}, {0x45d24000}, {0x45d26000}, 
+    {0x45d28000}, {0x45d2a000}, {0x45d2c000}, {0x45d2e000}, 
+    {0x45d30000}, {0x45d32000}, {0x45d34000}, {0x45d36000}, 
+    {0x45d38000}, {0x45d3a000}, {0x45d3c000}, {0x45d3e000}, 
+    {0x45d40000}, {0x45d42000}, {0x45d44000}, {0x45d46000}, 
+    {0x45d48000}, {0x45d4a000}, {0x45d4c000}, {0x45d4e000}, 
+    {0x45d50000}, {0x45d52000}, {0x45d54000}, {0x45d56000}, 
+    {0x45d58000}, {0x45d5a000}, {0x45d5c000}, {0x45d5e000}, 
+    {0x45d60000}, {0x45d62000}, {0x45d64000}, {0x45d66000}, 
+    {0x45d68000}, {0x45d6a000}, {0x45d6c000}, {0x45d6e000}, 
+    {0x45d70000}, {0x45d72000}, {0x45d74000}, {0x45d76000}, 
+    {0x45d78000}, {0x45d7a000}, {0x45d7c000}, {0x45d7e000}, 
+    {0x45d80000}, {0x45d82000}, {0x45d84000}, {0x45d86000}, 
+    {0x45d88000}, {0x45d8a000}, {0x45d8c000}, {0x45d8e000}, 
+    {0x45d90000}, {0x45d92000}, {0x45d94000}, {0x45d96000}, 
+    {0x45d98000}, {0x45d9a000}, {0x45d9c000}, {0x45d9e000}, 
+    {0x45da0000}, {0x45da2000}, {0x45da4000}, {0x45da6000}, 
+    {0x45da8000}, {0x45daa000}, {0x45dac000}, {0x45dae000}, 
+    {0x45db0000}, {0x45db2000}, {0x45db4000}, {0x45db6000}, 
+    {0x45db8000}, {0x45dba000}, {0x45dbc000}, {0x45dbe000}, 
+    {0x45dc0000}, {0x45dc2000}, {0x45dc4000}, {0x45dc6000}, 
+    {0x45dc8000}, {0x45dca000}, {0x45dcc000}, {0x45dce000}, 
+    {0x45dd0000}, {0x45dd2000}, {0x45dd4000}, {0x45dd6000}, 
+    {0x45dd8000}, {0x45dda000}, {0x45ddc000}, {0x45dde000}, 
+    {0x45de0000}, {0x45de2000}, {0x45de4000}, {0x45de6000}, 
+    {0x45de8000}, {0x45dea000}, {0x45dec000}, {0x45dee000}, 
+    {0x45df0000}, {0x45df2000}, {0x45df4000}, {0x45df6000}, 
+    {0x45df8000}, {0x45dfa000}, {0x45dfc000}, {0x45dfe000}, 
+    {0x45e00000}, {0x45e02000}, {0x45e04000}, {0x45e06000}, 
+    {0x45e08000}, {0x45e0a000}, {0x45e0c000}, {0x45e0e000}, 
+    {0x45e10000}, {0x45e12000}, {0x45e14000}, {0x45e16000}, 
+    {0x45e18000}, {0x45e1a000}, {0x45e1c000}, {0x45e1e000}, 
+    {0x45e20000}, {0x45e22000}, {0x45e24000}, {0x45e26000}, 
+    {0x45e28000}, {0x45e2a000}, {0x45e2c000}, {0x45e2e000}, 
+    {0x45e30000}, {0x45e32000}, {0x45e34000}, {0x45e36000}, 
+    {0x45e38000}, {0x45e3a000}, {0x45e3c000}, {0x45e3e000}, 
+    {0x45e40000}, {0x45e42000}, {0x45e44000}, {0x45e46000}, 
+    {0x45e48000}, {0x45e4a000}, {0x45e4c000}, {0x45e4e000}, 
+    {0x45e50000}, {0x45e52000}, {0x45e54000}, {0x45e56000}, 
+    {0x45e58000}, {0x45e5a000}, {0x45e5c000}, {0x45e5e000}, 
+    {0x45e60000}, {0x45e62000}, {0x45e64000}, {0x45e66000}, 
+    {0x45e68000}, {0x45e6a000}, {0x45e6c000}, {0x45e6e000}, 
+    {0x45e70000}, {0x45e72000}, {0x45e74000}, {0x45e76000}, 
+    {0x45e78000}, {0x45e7a000}, {0x45e7c000}, {0x45e7e000}, 
+    {0x45e80000}, {0x45e82000}, {0x45e84000}, {0x45e86000}, 
+    {0x45e88000}, {0x45e8a000}, {0x45e8c000}, {0x45e8e000}, 
+    {0x45e90000}, {0x45e92000}, {0x45e94000}, {0x45e96000}, 
+    {0x45e98000}, {0x45e9a000}, {0x45e9c000}, {0x45e9e000}, 
+    {0x45ea0000}, {0x45ea2000}, {0x45ea4000}, {0x45ea6000}, 
+    {0x45ea8000}, {0x45eaa000}, {0x45eac000}, {0x45eae000}, 
+    {0x45eb0000}, {0x45eb2000}, {0x45eb4000}, {0x45eb6000}, 
+    {0x45eb8000}, {0x45eba000}, {0x45ebc000}, {0x45ebe000}, 
+    {0x45ec0000}, {0x45ec2000}, {0x45ec4000}, {0x45ec6000}, 
+    {0x45ec8000}, {0x45eca000}, {0x45ecc000}, {0x45ece000}, 
+    {0x45ed0000}, {0x45ed2000}, {0x45ed4000}, {0x45ed6000}, 
+    {0x45ed8000}, {0x45eda000}, {0x45edc000}, {0x45ede000}, 
+    {0x45ee0000}, {0x45ee2000}, {0x45ee4000}, {0x45ee6000}, 
+    {0x45ee8000}, {0x45eea000}, {0x45eec000}, {0x45eee000}, 
+    {0x45ef0000}, {0x45ef2000}, {0x45ef4000}, {0x45ef6000}, 
+    {0x45ef8000}, {0x45efa000}, {0x45efc000}, {0x45efe000}, 
+    {0x45f00000}, {0x45f02000}, {0x45f04000}, {0x45f06000}, 
+    {0x45f08000}, {0x45f0a000}, {0x45f0c000}, {0x45f0e000}, 
+    {0x45f10000}, {0x45f12000}, {0x45f14000}, {0x45f16000}, 
+    {0x45f18000}, {0x45f1a000}, {0x45f1c000}, {0x45f1e000}, 
+    {0x45f20000}, {0x45f22000}, {0x45f24000}, {0x45f26000}, 
+    {0x45f28000}, {0x45f2a000}, {0x45f2c000}, {0x45f2e000}, 
+    {0x45f30000}, {0x45f32000}, {0x45f34000}, {0x45f36000}, 
+    {0x45f38000}, {0x45f3a000}, {0x45f3c000}, {0x45f3e000}, 
+    {0x45f40000}, {0x45f42000}, {0x45f44000}, {0x45f46000}, 
+    {0x45f48000}, {0x45f4a000}, {0x45f4c000}, {0x45f4e000}, 
+    {0x45f50000}, {0x45f52000}, {0x45f54000}, {0x45f56000}, 
+    {0x45f58000}, {0x45f5a000}, {0x45f5c000}, {0x45f5e000}, 
+    {0x45f60000}, {0x45f62000}, {0x45f64000}, {0x45f66000}, 
+    {0x45f68000}, {0x45f6a000}, {0x45f6c000}, {0x45f6e000}, 
+    {0x45f70000}, {0x45f72000}, {0x45f74000}, {0x45f76000}, 
+    {0x45f78000}, {0x45f7a000}, {0x45f7c000}, {0x45f7e000}, 
+    {0x45f80000}, {0x45f82000}, {0x45f84000}, {0x45f86000}, 
+    {0x45f88000}, {0x45f8a000}, {0x45f8c000}, {0x45f8e000}, 
+    {0x45f90000}, {0x45f92000}, {0x45f94000}, {0x45f96000}, 
+    {0x45f98000}, {0x45f9a000}, {0x45f9c000}, {0x45f9e000}, 
+    {0x45fa0000}, {0x45fa2000}, {0x45fa4000}, {0x45fa6000}, 
+    {0x45fa8000}, {0x45faa000}, {0x45fac000}, {0x45fae000}, 
+    {0x45fb0000}, {0x45fb2000}, {0x45fb4000}, {0x45fb6000}, 
+    {0x45fb8000}, {0x45fba000}, {0x45fbc000}, {0x45fbe000}, 
+    {0x45fc0000}, {0x45fc2000}, {0x45fc4000}, {0x45fc6000}, 
+    {0x45fc8000}, {0x45fca000}, {0x45fcc000}, {0x45fce000}, 
+    {0x45fd0000}, {0x45fd2000}, {0x45fd4000}, {0x45fd6000}, 
+    {0x45fd8000}, {0x45fda000}, {0x45fdc000}, {0x45fde000}, 
+    {0x45fe0000}, {0x45fe2000}, {0x45fe4000}, {0x45fe6000}, 
+    {0x45fe8000}, {0x45fea000}, {0x45fec000}, {0x45fee000}, 
+    {0x45ff0000}, {0x45ff2000}, {0x45ff4000}, {0x45ff6000}, 
+    {0x45ff8000}, {0x45ffa000}, {0x45ffc000}, {0x45ffe000}, 
+    {0x46000000}, {0x46002000}, {0x46004000}, {0x46006000}, 
+    {0x46008000}, {0x4600a000}, {0x4600c000}, {0x4600e000}, 
+    {0x46010000}, {0x46012000}, {0x46014000}, {0x46016000}, 
+    {0x46018000}, {0x4601a000}, {0x4601c000}, {0x4601e000}, 
+    {0x46020000}, {0x46022000}, {0x46024000}, {0x46026000}, 
+    {0x46028000}, {0x4602a000}, {0x4602c000}, {0x4602e000}, 
+    {0x46030000}, {0x46032000}, {0x46034000}, {0x46036000}, 
+    {0x46038000}, {0x4603a000}, {0x4603c000}, {0x4603e000}, 
+    {0x46040000}, {0x46042000}, {0x46044000}, {0x46046000}, 
+    {0x46048000}, {0x4604a000}, {0x4604c000}, {0x4604e000}, 
+    {0x46050000}, {0x46052000}, {0x46054000}, {0x46056000}, 
+    {0x46058000}, {0x4605a000}, {0x4605c000}, {0x4605e000}, 
+    {0x46060000}, {0x46062000}, {0x46064000}, {0x46066000}, 
+    {0x46068000}, {0x4606a000}, {0x4606c000}, {0x4606e000}, 
+    {0x46070000}, {0x46072000}, {0x46074000}, {0x46076000}, 
+    {0x46078000}, {0x4607a000}, {0x4607c000}, {0x4607e000}, 
+    {0x46080000}, {0x46082000}, {0x46084000}, {0x46086000}, 
+    {0x46088000}, {0x4608a000}, {0x4608c000}, {0x4608e000}, 
+    {0x46090000}, {0x46092000}, {0x46094000}, {0x46096000}, 
+    {0x46098000}, {0x4609a000}, {0x4609c000}, {0x4609e000}, 
+    {0x460a0000}, {0x460a2000}, {0x460a4000}, {0x460a6000}, 
+    {0x460a8000}, {0x460aa000}, {0x460ac000}, {0x460ae000}, 
+    {0x460b0000}, {0x460b2000}, {0x460b4000}, {0x460b6000}, 
+    {0x460b8000}, {0x460ba000}, {0x460bc000}, {0x460be000}, 
+    {0x460c0000}, {0x460c2000}, {0x460c4000}, {0x460c6000}, 
+    {0x460c8000}, {0x460ca000}, {0x460cc000}, {0x460ce000}, 
+    {0x460d0000}, {0x460d2000}, {0x460d4000}, {0x460d6000}, 
+    {0x460d8000}, {0x460da000}, {0x460dc000}, {0x460de000}, 
+    {0x460e0000}, {0x460e2000}, {0x460e4000}, {0x460e6000}, 
+    {0x460e8000}, {0x460ea000}, {0x460ec000}, {0x460ee000}, 
+    {0x460f0000}, {0x460f2000}, {0x460f4000}, {0x460f6000}, 
+    {0x460f8000}, {0x460fa000}, {0x460fc000}, {0x460fe000}, 
+    {0x46100000}, {0x46102000}, {0x46104000}, {0x46106000}, 
+    {0x46108000}, {0x4610a000}, {0x4610c000}, {0x4610e000}, 
+    {0x46110000}, {0x46112000}, {0x46114000}, {0x46116000}, 
+    {0x46118000}, {0x4611a000}, {0x4611c000}, {0x4611e000}, 
+    {0x46120000}, {0x46122000}, {0x46124000}, {0x46126000}, 
+    {0x46128000}, {0x4612a000}, {0x4612c000}, {0x4612e000}, 
+    {0x46130000}, {0x46132000}, {0x46134000}, {0x46136000}, 
+    {0x46138000}, {0x4613a000}, {0x4613c000}, {0x4613e000}, 
+    {0x46140000}, {0x46142000}, {0x46144000}, {0x46146000}, 
+    {0x46148000}, {0x4614a000}, {0x4614c000}, {0x4614e000}, 
+    {0x46150000}, {0x46152000}, {0x46154000}, {0x46156000}, 
+    {0x46158000}, {0x4615a000}, {0x4615c000}, {0x4615e000}, 
+    {0x46160000}, {0x46162000}, {0x46164000}, {0x46166000}, 
+    {0x46168000}, {0x4616a000}, {0x4616c000}, {0x4616e000}, 
+    {0x46170000}, {0x46172000}, {0x46174000}, {0x46176000}, 
+    {0x46178000}, {0x4617a000}, {0x4617c000}, {0x4617e000}, 
+    {0x46180000}, {0x46182000}, {0x46184000}, {0x46186000}, 
+    {0x46188000}, {0x4618a000}, {0x4618c000}, {0x4618e000}, 
+    {0x46190000}, {0x46192000}, {0x46194000}, {0x46196000}, 
+    {0x46198000}, {0x4619a000}, {0x4619c000}, {0x4619e000}, 
+    {0x461a0000}, {0x461a2000}, {0x461a4000}, {0x461a6000}, 
+    {0x461a8000}, {0x461aa000}, {0x461ac000}, {0x461ae000}, 
+    {0x461b0000}, {0x461b2000}, {0x461b4000}, {0x461b6000}, 
+    {0x461b8000}, {0x461ba000}, {0x461bc000}, {0x461be000}, 
+    {0x461c0000}, {0x461c2000}, {0x461c4000}, {0x461c6000}, 
+    {0x461c8000}, {0x461ca000}, {0x461cc000}, {0x461ce000}, 
+    {0x461d0000}, {0x461d2000}, {0x461d4000}, {0x461d6000}, 
+    {0x461d8000}, {0x461da000}, {0x461dc000}, {0x461de000}, 
+    {0x461e0000}, {0x461e2000}, {0x461e4000}, {0x461e6000}, 
+    {0x461e8000}, {0x461ea000}, {0x461ec000}, {0x461ee000}, 
+    {0x461f0000}, {0x461f2000}, {0x461f4000}, {0x461f6000}, 
+    {0x461f8000}, {0x461fa000}, {0x461fc000}, {0x461fe000}, 
+    {0x46200000}, {0x46202000}, {0x46204000}, {0x46206000}, 
+    {0x46208000}, {0x4620a000}, {0x4620c000}, {0x4620e000}, 
+    {0x46210000}, {0x46212000}, {0x46214000}, {0x46216000}, 
+    {0x46218000}, {0x4621a000}, {0x4621c000}, {0x4621e000}, 
+    {0x46220000}, {0x46222000}, {0x46224000}, {0x46226000}, 
+    {0x46228000}, {0x4622a000}, {0x4622c000}, {0x4622e000}, 
+    {0x46230000}, {0x46232000}, {0x46234000}, {0x46236000}, 
+    {0x46238000}, {0x4623a000}, {0x4623c000}, {0x4623e000}, 
+    {0x46240000}, {0x46242000}, {0x46244000}, {0x46246000}, 
+    {0x46248000}, {0x4624a000}, {0x4624c000}, {0x4624e000}, 
+    {0x46250000}, {0x46252000}, {0x46254000}, {0x46256000}, 
+    {0x46258000}, {0x4625a000}, {0x4625c000}, {0x4625e000}, 
+    {0x46260000}, {0x46262000}, {0x46264000}, {0x46266000}, 
+    {0x46268000}, {0x4626a000}, {0x4626c000}, {0x4626e000}, 
+    {0x46270000}, {0x46272000}, {0x46274000}, {0x46276000}, 
+    {0x46278000}, {0x4627a000}, {0x4627c000}, {0x4627e000}, 
+    {0x46280000}, {0x46282000}, {0x46284000}, {0x46286000}, 
+    {0x46288000}, {0x4628a000}, {0x4628c000}, {0x4628e000}, 
+    {0x46290000}, {0x46292000}, {0x46294000}, {0x46296000}, 
+    {0x46298000}, {0x4629a000}, {0x4629c000}, {0x4629e000}, 
+    {0x462a0000}, {0x462a2000}, {0x462a4000}, {0x462a6000}, 
+    {0x462a8000}, {0x462aa000}, {0x462ac000}, {0x462ae000}, 
+    {0x462b0000}, {0x462b2000}, {0x462b4000}, {0x462b6000}, 
+    {0x462b8000}, {0x462ba000}, {0x462bc000}, {0x462be000}, 
+    {0x462c0000}, {0x462c2000}, {0x462c4000}, {0x462c6000}, 
+    {0x462c8000}, {0x462ca000}, {0x462cc000}, {0x462ce000}, 
+    {0x462d0000}, {0x462d2000}, {0x462d4000}, {0x462d6000}, 
+    {0x462d8000}, {0x462da000}, {0x462dc000}, {0x462de000}, 
+    {0x462e0000}, {0x462e2000}, {0x462e4000}, {0x462e6000}, 
+    {0x462e8000}, {0x462ea000}, {0x462ec000}, {0x462ee000}, 
+    {0x462f0000}, {0x462f2000}, {0x462f4000}, {0x462f6000}, 
+    {0x462f8000}, {0x462fa000}, {0x462fc000}, {0x462fe000}, 
+    {0x46300000}, {0x46302000}, {0x46304000}, {0x46306000}, 
+    {0x46308000}, {0x4630a000}, {0x4630c000}, {0x4630e000}, 
+    {0x46310000}, {0x46312000}, {0x46314000}, {0x46316000}, 
+    {0x46318000}, {0x4631a000}, {0x4631c000}, {0x4631e000}, 
+    {0x46320000}, {0x46322000}, {0x46324000}, {0x46326000}, 
+    {0x46328000}, {0x4632a000}, {0x4632c000}, {0x4632e000}, 
+    {0x46330000}, {0x46332000}, {0x46334000}, {0x46336000}, 
+    {0x46338000}, {0x4633a000}, {0x4633c000}, {0x4633e000}, 
+    {0x46340000}, {0x46342000}, {0x46344000}, {0x46346000}, 
+    {0x46348000}, {0x4634a000}, {0x4634c000}, {0x4634e000}, 
+    {0x46350000}, {0x46352000}, {0x46354000}, {0x46356000}, 
+    {0x46358000}, {0x4635a000}, {0x4635c000}, {0x4635e000}, 
+    {0x46360000}, {0x46362000}, {0x46364000}, {0x46366000}, 
+    {0x46368000}, {0x4636a000}, {0x4636c000}, {0x4636e000}, 
+    {0x46370000}, {0x46372000}, {0x46374000}, {0x46376000}, 
+    {0x46378000}, {0x4637a000}, {0x4637c000}, {0x4637e000}, 
+    {0x46380000}, {0x46382000}, {0x46384000}, {0x46386000}, 
+    {0x46388000}, {0x4638a000}, {0x4638c000}, {0x4638e000}, 
+    {0x46390000}, {0x46392000}, {0x46394000}, {0x46396000}, 
+    {0x46398000}, {0x4639a000}, {0x4639c000}, {0x4639e000}, 
+    {0x463a0000}, {0x463a2000}, {0x463a4000}, {0x463a6000}, 
+    {0x463a8000}, {0x463aa000}, {0x463ac000}, {0x463ae000}, 
+    {0x463b0000}, {0x463b2000}, {0x463b4000}, {0x463b6000}, 
+    {0x463b8000}, {0x463ba000}, {0x463bc000}, {0x463be000}, 
+    {0x463c0000}, {0x463c2000}, {0x463c4000}, {0x463c6000}, 
+    {0x463c8000}, {0x463ca000}, {0x463cc000}, {0x463ce000}, 
+    {0x463d0000}, {0x463d2000}, {0x463d4000}, {0x463d6000}, 
+    {0x463d8000}, {0x463da000}, {0x463dc000}, {0x463de000}, 
+    {0x463e0000}, {0x463e2000}, {0x463e4000}, {0x463e6000}, 
+    {0x463e8000}, {0x463ea000}, {0x463ec000}, {0x463ee000}, 
+    {0x463f0000}, {0x463f2000}, {0x463f4000}, {0x463f6000}, 
+    {0x463f8000}, {0x463fa000}, {0x463fc000}, {0x463fe000}, 
+    {0x46400000}, {0x46402000}, {0x46404000}, {0x46406000}, 
+    {0x46408000}, {0x4640a000}, {0x4640c000}, {0x4640e000}, 
+    {0x46410000}, {0x46412000}, {0x46414000}, {0x46416000}, 
+    {0x46418000}, {0x4641a000}, {0x4641c000}, {0x4641e000}, 
+    {0x46420000}, {0x46422000}, {0x46424000}, {0x46426000}, 
+    {0x46428000}, {0x4642a000}, {0x4642c000}, {0x4642e000}, 
+    {0x46430000}, {0x46432000}, {0x46434000}, {0x46436000}, 
+    {0x46438000}, {0x4643a000}, {0x4643c000}, {0x4643e000}, 
+    {0x46440000}, {0x46442000}, {0x46444000}, {0x46446000}, 
+    {0x46448000}, {0x4644a000}, {0x4644c000}, {0x4644e000}, 
+    {0x46450000}, {0x46452000}, {0x46454000}, {0x46456000}, 
+    {0x46458000}, {0x4645a000}, {0x4645c000}, {0x4645e000}, 
+    {0x46460000}, {0x46462000}, {0x46464000}, {0x46466000}, 
+    {0x46468000}, {0x4646a000}, {0x4646c000}, {0x4646e000}, 
+    {0x46470000}, {0x46472000}, {0x46474000}, {0x46476000}, 
+    {0x46478000}, {0x4647a000}, {0x4647c000}, {0x4647e000}, 
+    {0x46480000}, {0x46482000}, {0x46484000}, {0x46486000}, 
+    {0x46488000}, {0x4648a000}, {0x4648c000}, {0x4648e000}, 
+    {0x46490000}, {0x46492000}, {0x46494000}, {0x46496000}, 
+    {0x46498000}, {0x4649a000}, {0x4649c000}, {0x4649e000}, 
+    {0x464a0000}, {0x464a2000}, {0x464a4000}, {0x464a6000}, 
+    {0x464a8000}, {0x464aa000}, {0x464ac000}, {0x464ae000}, 
+    {0x464b0000}, {0x464b2000}, {0x464b4000}, {0x464b6000}, 
+    {0x464b8000}, {0x464ba000}, {0x464bc000}, {0x464be000}, 
+    {0x464c0000}, {0x464c2000}, {0x464c4000}, {0x464c6000}, 
+    {0x464c8000}, {0x464ca000}, {0x464cc000}, {0x464ce000}, 
+    {0x464d0000}, {0x464d2000}, {0x464d4000}, {0x464d6000}, 
+    {0x464d8000}, {0x464da000}, {0x464dc000}, {0x464de000}, 
+    {0x464e0000}, {0x464e2000}, {0x464e4000}, {0x464e6000}, 
+    {0x464e8000}, {0x464ea000}, {0x464ec000}, {0x464ee000}, 
+    {0x464f0000}, {0x464f2000}, {0x464f4000}, {0x464f6000}, 
+    {0x464f8000}, {0x464fa000}, {0x464fc000}, {0x464fe000}, 
+    {0x46500000}, {0x46502000}, {0x46504000}, {0x46506000}, 
+    {0x46508000}, {0x4650a000}, {0x4650c000}, {0x4650e000}, 
+    {0x46510000}, {0x46512000}, {0x46514000}, {0x46516000}, 
+    {0x46518000}, {0x4651a000}, {0x4651c000}, {0x4651e000}, 
+    {0x46520000}, {0x46522000}, {0x46524000}, {0x46526000}, 
+    {0x46528000}, {0x4652a000}, {0x4652c000}, {0x4652e000}, 
+    {0x46530000}, {0x46532000}, {0x46534000}, {0x46536000}, 
+    {0x46538000}, {0x4653a000}, {0x4653c000}, {0x4653e000}, 
+    {0x46540000}, {0x46542000}, {0x46544000}, {0x46546000}, 
+    {0x46548000}, {0x4654a000}, {0x4654c000}, {0x4654e000}, 
+    {0x46550000}, {0x46552000}, {0x46554000}, {0x46556000}, 
+    {0x46558000}, {0x4655a000}, {0x4655c000}, {0x4655e000}, 
+    {0x46560000}, {0x46562000}, {0x46564000}, {0x46566000}, 
+    {0x46568000}, {0x4656a000}, {0x4656c000}, {0x4656e000}, 
+    {0x46570000}, {0x46572000}, {0x46574000}, {0x46576000}, 
+    {0x46578000}, {0x4657a000}, {0x4657c000}, {0x4657e000}, 
+    {0x46580000}, {0x46582000}, {0x46584000}, {0x46586000}, 
+    {0x46588000}, {0x4658a000}, {0x4658c000}, {0x4658e000}, 
+    {0x46590000}, {0x46592000}, {0x46594000}, {0x46596000}, 
+    {0x46598000}, {0x4659a000}, {0x4659c000}, {0x4659e000}, 
+    {0x465a0000}, {0x465a2000}, {0x465a4000}, {0x465a6000}, 
+    {0x465a8000}, {0x465aa000}, {0x465ac000}, {0x465ae000}, 
+    {0x465b0000}, {0x465b2000}, {0x465b4000}, {0x465b6000}, 
+    {0x465b8000}, {0x465ba000}, {0x465bc000}, {0x465be000}, 
+    {0x465c0000}, {0x465c2000}, {0x465c4000}, {0x465c6000}, 
+    {0x465c8000}, {0x465ca000}, {0x465cc000}, {0x465ce000}, 
+    {0x465d0000}, {0x465d2000}, {0x465d4000}, {0x465d6000}, 
+    {0x465d8000}, {0x465da000}, {0x465dc000}, {0x465de000}, 
+    {0x465e0000}, {0x465e2000}, {0x465e4000}, {0x465e6000}, 
+    {0x465e8000}, {0x465ea000}, {0x465ec000}, {0x465ee000}, 
+    {0x465f0000}, {0x465f2000}, {0x465f4000}, {0x465f6000}, 
+    {0x465f8000}, {0x465fa000}, {0x465fc000}, {0x465fe000}, 
+    {0x46600000}, {0x46602000}, {0x46604000}, {0x46606000}, 
+    {0x46608000}, {0x4660a000}, {0x4660c000}, {0x4660e000}, 
+    {0x46610000}, {0x46612000}, {0x46614000}, {0x46616000}, 
+    {0x46618000}, {0x4661a000}, {0x4661c000}, {0x4661e000}, 
+    {0x46620000}, {0x46622000}, {0x46624000}, {0x46626000}, 
+    {0x46628000}, {0x4662a000}, {0x4662c000}, {0x4662e000}, 
+    {0x46630000}, {0x46632000}, {0x46634000}, {0x46636000}, 
+    {0x46638000}, {0x4663a000}, {0x4663c000}, {0x4663e000}, 
+    {0x46640000}, {0x46642000}, {0x46644000}, {0x46646000}, 
+    {0x46648000}, {0x4664a000}, {0x4664c000}, {0x4664e000}, 
+    {0x46650000}, {0x46652000}, {0x46654000}, {0x46656000}, 
+    {0x46658000}, {0x4665a000}, {0x4665c000}, {0x4665e000}, 
+    {0x46660000}, {0x46662000}, {0x46664000}, {0x46666000}, 
+    {0x46668000}, {0x4666a000}, {0x4666c000}, {0x4666e000}, 
+    {0x46670000}, {0x46672000}, {0x46674000}, {0x46676000}, 
+    {0x46678000}, {0x4667a000}, {0x4667c000}, {0x4667e000}, 
+    {0x46680000}, {0x46682000}, {0x46684000}, {0x46686000}, 
+    {0x46688000}, {0x4668a000}, {0x4668c000}, {0x4668e000}, 
+    {0x46690000}, {0x46692000}, {0x46694000}, {0x46696000}, 
+    {0x46698000}, {0x4669a000}, {0x4669c000}, {0x4669e000}, 
+    {0x466a0000}, {0x466a2000}, {0x466a4000}, {0x466a6000}, 
+    {0x466a8000}, {0x466aa000}, {0x466ac000}, {0x466ae000}, 
+    {0x466b0000}, {0x466b2000}, {0x466b4000}, {0x466b6000}, 
+    {0x466b8000}, {0x466ba000}, {0x466bc000}, {0x466be000}, 
+    {0x466c0000}, {0x466c2000}, {0x466c4000}, {0x466c6000}, 
+    {0x466c8000}, {0x466ca000}, {0x466cc000}, {0x466ce000}, 
+    {0x466d0000}, {0x466d2000}, {0x466d4000}, {0x466d6000}, 
+    {0x466d8000}, {0x466da000}, {0x466dc000}, {0x466de000}, 
+    {0x466e0000}, {0x466e2000}, {0x466e4000}, {0x466e6000}, 
+    {0x466e8000}, {0x466ea000}, {0x466ec000}, {0x466ee000}, 
+    {0x466f0000}, {0x466f2000}, {0x466f4000}, {0x466f6000}, 
+    {0x466f8000}, {0x466fa000}, {0x466fc000}, {0x466fe000}, 
+    {0x46700000}, {0x46702000}, {0x46704000}, {0x46706000}, 
+    {0x46708000}, {0x4670a000}, {0x4670c000}, {0x4670e000}, 
+    {0x46710000}, {0x46712000}, {0x46714000}, {0x46716000}, 
+    {0x46718000}, {0x4671a000}, {0x4671c000}, {0x4671e000}, 
+    {0x46720000}, {0x46722000}, {0x46724000}, {0x46726000}, 
+    {0x46728000}, {0x4672a000}, {0x4672c000}, {0x4672e000}, 
+    {0x46730000}, {0x46732000}, {0x46734000}, {0x46736000}, 
+    {0x46738000}, {0x4673a000}, {0x4673c000}, {0x4673e000}, 
+    {0x46740000}, {0x46742000}, {0x46744000}, {0x46746000}, 
+    {0x46748000}, {0x4674a000}, {0x4674c000}, {0x4674e000}, 
+    {0x46750000}, {0x46752000}, {0x46754000}, {0x46756000}, 
+    {0x46758000}, {0x4675a000}, {0x4675c000}, {0x4675e000}, 
+    {0x46760000}, {0x46762000}, {0x46764000}, {0x46766000}, 
+    {0x46768000}, {0x4676a000}, {0x4676c000}, {0x4676e000}, 
+    {0x46770000}, {0x46772000}, {0x46774000}, {0x46776000}, 
+    {0x46778000}, {0x4677a000}, {0x4677c000}, {0x4677e000}, 
+    {0x46780000}, {0x46782000}, {0x46784000}, {0x46786000}, 
+    {0x46788000}, {0x4678a000}, {0x4678c000}, {0x4678e000}, 
+    {0x46790000}, {0x46792000}, {0x46794000}, {0x46796000}, 
+    {0x46798000}, {0x4679a000}, {0x4679c000}, {0x4679e000}, 
+    {0x467a0000}, {0x467a2000}, {0x467a4000}, {0x467a6000}, 
+    {0x467a8000}, {0x467aa000}, {0x467ac000}, {0x467ae000}, 
+    {0x467b0000}, {0x467b2000}, {0x467b4000}, {0x467b6000}, 
+    {0x467b8000}, {0x467ba000}, {0x467bc000}, {0x467be000}, 
+    {0x467c0000}, {0x467c2000}, {0x467c4000}, {0x467c6000}, 
+    {0x467c8000}, {0x467ca000}, {0x467cc000}, {0x467ce000}, 
+    {0x467d0000}, {0x467d2000}, {0x467d4000}, {0x467d6000}, 
+    {0x467d8000}, {0x467da000}, {0x467dc000}, {0x467de000}, 
+    {0x467e0000}, {0x467e2000}, {0x467e4000}, {0x467e6000}, 
+    {0x467e8000}, {0x467ea000}, {0x467ec000}, {0x467ee000}, 
+    {0x467f0000}, {0x467f2000}, {0x467f4000}, {0x467f6000}, 
+    {0x467f8000}, {0x467fa000}, {0x467fc000}, {0x467fe000}, 
+    {0x46800000}, {0x46802000}, {0x46804000}, {0x46806000}, 
+    {0x46808000}, {0x4680a000}, {0x4680c000}, {0x4680e000}, 
+    {0x46810000}, {0x46812000}, {0x46814000}, {0x46816000}, 
+    {0x46818000}, {0x4681a000}, {0x4681c000}, {0x4681e000}, 
+    {0x46820000}, {0x46822000}, {0x46824000}, {0x46826000}, 
+    {0x46828000}, {0x4682a000}, {0x4682c000}, {0x4682e000}, 
+    {0x46830000}, {0x46832000}, {0x46834000}, {0x46836000}, 
+    {0x46838000}, {0x4683a000}, {0x4683c000}, {0x4683e000}, 
+    {0x46840000}, {0x46842000}, {0x46844000}, {0x46846000}, 
+    {0x46848000}, {0x4684a000}, {0x4684c000}, {0x4684e000}, 
+    {0x46850000}, {0x46852000}, {0x46854000}, {0x46856000}, 
+    {0x46858000}, {0x4685a000}, {0x4685c000}, {0x4685e000}, 
+    {0x46860000}, {0x46862000}, {0x46864000}, {0x46866000}, 
+    {0x46868000}, {0x4686a000}, {0x4686c000}, {0x4686e000}, 
+    {0x46870000}, {0x46872000}, {0x46874000}, {0x46876000}, 
+    {0x46878000}, {0x4687a000}, {0x4687c000}, {0x4687e000}, 
+    {0x46880000}, {0x46882000}, {0x46884000}, {0x46886000}, 
+    {0x46888000}, {0x4688a000}, {0x4688c000}, {0x4688e000}, 
+    {0x46890000}, {0x46892000}, {0x46894000}, {0x46896000}, 
+    {0x46898000}, {0x4689a000}, {0x4689c000}, {0x4689e000}, 
+    {0x468a0000}, {0x468a2000}, {0x468a4000}, {0x468a6000}, 
+    {0x468a8000}, {0x468aa000}, {0x468ac000}, {0x468ae000}, 
+    {0x468b0000}, {0x468b2000}, {0x468b4000}, {0x468b6000}, 
+    {0x468b8000}, {0x468ba000}, {0x468bc000}, {0x468be000}, 
+    {0x468c0000}, {0x468c2000}, {0x468c4000}, {0x468c6000}, 
+    {0x468c8000}, {0x468ca000}, {0x468cc000}, {0x468ce000}, 
+    {0x468d0000}, {0x468d2000}, {0x468d4000}, {0x468d6000}, 
+    {0x468d8000}, {0x468da000}, {0x468dc000}, {0x468de000}, 
+    {0x468e0000}, {0x468e2000}, {0x468e4000}, {0x468e6000}, 
+    {0x468e8000}, {0x468ea000}, {0x468ec000}, {0x468ee000}, 
+    {0x468f0000}, {0x468f2000}, {0x468f4000}, {0x468f6000}, 
+    {0x468f8000}, {0x468fa000}, {0x468fc000}, {0x468fe000}, 
+    {0x46900000}, {0x46902000}, {0x46904000}, {0x46906000}, 
+    {0x46908000}, {0x4690a000}, {0x4690c000}, {0x4690e000}, 
+    {0x46910000}, {0x46912000}, {0x46914000}, {0x46916000}, 
+    {0x46918000}, {0x4691a000}, {0x4691c000}, {0x4691e000}, 
+    {0x46920000}, {0x46922000}, {0x46924000}, {0x46926000}, 
+    {0x46928000}, {0x4692a000}, {0x4692c000}, {0x4692e000}, 
+    {0x46930000}, {0x46932000}, {0x46934000}, {0x46936000}, 
+    {0x46938000}, {0x4693a000}, {0x4693c000}, {0x4693e000}, 
+    {0x46940000}, {0x46942000}, {0x46944000}, {0x46946000}, 
+    {0x46948000}, {0x4694a000}, {0x4694c000}, {0x4694e000}, 
+    {0x46950000}, {0x46952000}, {0x46954000}, {0x46956000}, 
+    {0x46958000}, {0x4695a000}, {0x4695c000}, {0x4695e000}, 
+    {0x46960000}, {0x46962000}, {0x46964000}, {0x46966000}, 
+    {0x46968000}, {0x4696a000}, {0x4696c000}, {0x4696e000}, 
+    {0x46970000}, {0x46972000}, {0x46974000}, {0x46976000}, 
+    {0x46978000}, {0x4697a000}, {0x4697c000}, {0x4697e000}, 
+    {0x46980000}, {0x46982000}, {0x46984000}, {0x46986000}, 
+    {0x46988000}, {0x4698a000}, {0x4698c000}, {0x4698e000}, 
+    {0x46990000}, {0x46992000}, {0x46994000}, {0x46996000}, 
+    {0x46998000}, {0x4699a000}, {0x4699c000}, {0x4699e000}, 
+    {0x469a0000}, {0x469a2000}, {0x469a4000}, {0x469a6000}, 
+    {0x469a8000}, {0x469aa000}, {0x469ac000}, {0x469ae000}, 
+    {0x469b0000}, {0x469b2000}, {0x469b4000}, {0x469b6000}, 
+    {0x469b8000}, {0x469ba000}, {0x469bc000}, {0x469be000}, 
+    {0x469c0000}, {0x469c2000}, {0x469c4000}, {0x469c6000}, 
+    {0x469c8000}, {0x469ca000}, {0x469cc000}, {0x469ce000}, 
+    {0x469d0000}, {0x469d2000}, {0x469d4000}, {0x469d6000}, 
+    {0x469d8000}, {0x469da000}, {0x469dc000}, {0x469de000}, 
+    {0x469e0000}, {0x469e2000}, {0x469e4000}, {0x469e6000}, 
+    {0x469e8000}, {0x469ea000}, {0x469ec000}, {0x469ee000}, 
+    {0x469f0000}, {0x469f2000}, {0x469f4000}, {0x469f6000}, 
+    {0x469f8000}, {0x469fa000}, {0x469fc000}, {0x469fe000}, 
+    {0x46a00000}, {0x46a02000}, {0x46a04000}, {0x46a06000}, 
+    {0x46a08000}, {0x46a0a000}, {0x46a0c000}, {0x46a0e000}, 
+    {0x46a10000}, {0x46a12000}, {0x46a14000}, {0x46a16000}, 
+    {0x46a18000}, {0x46a1a000}, {0x46a1c000}, {0x46a1e000}, 
+    {0x46a20000}, {0x46a22000}, {0x46a24000}, {0x46a26000}, 
+    {0x46a28000}, {0x46a2a000}, {0x46a2c000}, {0x46a2e000}, 
+    {0x46a30000}, {0x46a32000}, {0x46a34000}, {0x46a36000}, 
+    {0x46a38000}, {0x46a3a000}, {0x46a3c000}, {0x46a3e000}, 
+    {0x46a40000}, {0x46a42000}, {0x46a44000}, {0x46a46000}, 
+    {0x46a48000}, {0x46a4a000}, {0x46a4c000}, {0x46a4e000}, 
+    {0x46a50000}, {0x46a52000}, {0x46a54000}, {0x46a56000}, 
+    {0x46a58000}, {0x46a5a000}, {0x46a5c000}, {0x46a5e000}, 
+    {0x46a60000}, {0x46a62000}, {0x46a64000}, {0x46a66000}, 
+    {0x46a68000}, {0x46a6a000}, {0x46a6c000}, {0x46a6e000}, 
+    {0x46a70000}, {0x46a72000}, {0x46a74000}, {0x46a76000}, 
+    {0x46a78000}, {0x46a7a000}, {0x46a7c000}, {0x46a7e000}, 
+    {0x46a80000}, {0x46a82000}, {0x46a84000}, {0x46a86000}, 
+    {0x46a88000}, {0x46a8a000}, {0x46a8c000}, {0x46a8e000}, 
+    {0x46a90000}, {0x46a92000}, {0x46a94000}, {0x46a96000}, 
+    {0x46a98000}, {0x46a9a000}, {0x46a9c000}, {0x46a9e000}, 
+    {0x46aa0000}, {0x46aa2000}, {0x46aa4000}, {0x46aa6000}, 
+    {0x46aa8000}, {0x46aaa000}, {0x46aac000}, {0x46aae000}, 
+    {0x46ab0000}, {0x46ab2000}, {0x46ab4000}, {0x46ab6000}, 
+    {0x46ab8000}, {0x46aba000}, {0x46abc000}, {0x46abe000}, 
+    {0x46ac0000}, {0x46ac2000}, {0x46ac4000}, {0x46ac6000}, 
+    {0x46ac8000}, {0x46aca000}, {0x46acc000}, {0x46ace000}, 
+    {0x46ad0000}, {0x46ad2000}, {0x46ad4000}, {0x46ad6000}, 
+    {0x46ad8000}, {0x46ada000}, {0x46adc000}, {0x46ade000}, 
+    {0x46ae0000}, {0x46ae2000}, {0x46ae4000}, {0x46ae6000}, 
+    {0x46ae8000}, {0x46aea000}, {0x46aec000}, {0x46aee000}, 
+    {0x46af0000}, {0x46af2000}, {0x46af4000}, {0x46af6000}, 
+    {0x46af8000}, {0x46afa000}, {0x46afc000}, {0x46afe000}, 
+    {0x46b00000}, {0x46b02000}, {0x46b04000}, {0x46b06000}, 
+    {0x46b08000}, {0x46b0a000}, {0x46b0c000}, {0x46b0e000}, 
+    {0x46b10000}, {0x46b12000}, {0x46b14000}, {0x46b16000}, 
+    {0x46b18000}, {0x46b1a000}, {0x46b1c000}, {0x46b1e000}, 
+    {0x46b20000}, {0x46b22000}, {0x46b24000}, {0x46b26000}, 
+    {0x46b28000}, {0x46b2a000}, {0x46b2c000}, {0x46b2e000}, 
+    {0x46b30000}, {0x46b32000}, {0x46b34000}, {0x46b36000}, 
+    {0x46b38000}, {0x46b3a000}, {0x46b3c000}, {0x46b3e000}, 
+    {0x46b40000}, {0x46b42000}, {0x46b44000}, {0x46b46000}, 
+    {0x46b48000}, {0x46b4a000}, {0x46b4c000}, {0x46b4e000}, 
+    {0x46b50000}, {0x46b52000}, {0x46b54000}, {0x46b56000}, 
+    {0x46b58000}, {0x46b5a000}, {0x46b5c000}, {0x46b5e000}, 
+    {0x46b60000}, {0x46b62000}, {0x46b64000}, {0x46b66000}, 
+    {0x46b68000}, {0x46b6a000}, {0x46b6c000}, {0x46b6e000}, 
+    {0x46b70000}, {0x46b72000}, {0x46b74000}, {0x46b76000}, 
+    {0x46b78000}, {0x46b7a000}, {0x46b7c000}, {0x46b7e000}, 
+    {0x46b80000}, {0x46b82000}, {0x46b84000}, {0x46b86000}, 
+    {0x46b88000}, {0x46b8a000}, {0x46b8c000}, {0x46b8e000}, 
+    {0x46b90000}, {0x46b92000}, {0x46b94000}, {0x46b96000}, 
+    {0x46b98000}, {0x46b9a000}, {0x46b9c000}, {0x46b9e000}, 
+    {0x46ba0000}, {0x46ba2000}, {0x46ba4000}, {0x46ba6000}, 
+    {0x46ba8000}, {0x46baa000}, {0x46bac000}, {0x46bae000}, 
+    {0x46bb0000}, {0x46bb2000}, {0x46bb4000}, {0x46bb6000}, 
+    {0x46bb8000}, {0x46bba000}, {0x46bbc000}, {0x46bbe000}, 
+    {0x46bc0000}, {0x46bc2000}, {0x46bc4000}, {0x46bc6000}, 
+    {0x46bc8000}, {0x46bca000}, {0x46bcc000}, {0x46bce000}, 
+    {0x46bd0000}, {0x46bd2000}, {0x46bd4000}, {0x46bd6000}, 
+    {0x46bd8000}, {0x46bda000}, {0x46bdc000}, {0x46bde000}, 
+    {0x46be0000}, {0x46be2000}, {0x46be4000}, {0x46be6000}, 
+    {0x46be8000}, {0x46bea000}, {0x46bec000}, {0x46bee000}, 
+    {0x46bf0000}, {0x46bf2000}, {0x46bf4000}, {0x46bf6000}, 
+    {0x46bf8000}, {0x46bfa000}, {0x46bfc000}, {0x46bfe000}, 
+    {0x46c00000}, {0x46c02000}, {0x46c04000}, {0x46c06000}, 
+    {0x46c08000}, {0x46c0a000}, {0x46c0c000}, {0x46c0e000}, 
+    {0x46c10000}, {0x46c12000}, {0x46c14000}, {0x46c16000}, 
+    {0x46c18000}, {0x46c1a000}, {0x46c1c000}, {0x46c1e000}, 
+    {0x46c20000}, {0x46c22000}, {0x46c24000}, {0x46c26000}, 
+    {0x46c28000}, {0x46c2a000}, {0x46c2c000}, {0x46c2e000}, 
+    {0x46c30000}, {0x46c32000}, {0x46c34000}, {0x46c36000}, 
+    {0x46c38000}, {0x46c3a000}, {0x46c3c000}, {0x46c3e000}, 
+    {0x46c40000}, {0x46c42000}, {0x46c44000}, {0x46c46000}, 
+    {0x46c48000}, {0x46c4a000}, {0x46c4c000}, {0x46c4e000}, 
+    {0x46c50000}, {0x46c52000}, {0x46c54000}, {0x46c56000}, 
+    {0x46c58000}, {0x46c5a000}, {0x46c5c000}, {0x46c5e000}, 
+    {0x46c60000}, {0x46c62000}, {0x46c64000}, {0x46c66000}, 
+    {0x46c68000}, {0x46c6a000}, {0x46c6c000}, {0x46c6e000}, 
+    {0x46c70000}, {0x46c72000}, {0x46c74000}, {0x46c76000}, 
+    {0x46c78000}, {0x46c7a000}, {0x46c7c000}, {0x46c7e000}, 
+    {0x46c80000}, {0x46c82000}, {0x46c84000}, {0x46c86000}, 
+    {0x46c88000}, {0x46c8a000}, {0x46c8c000}, {0x46c8e000}, 
+    {0x46c90000}, {0x46c92000}, {0x46c94000}, {0x46c96000}, 
+    {0x46c98000}, {0x46c9a000}, {0x46c9c000}, {0x46c9e000}, 
+    {0x46ca0000}, {0x46ca2000}, {0x46ca4000}, {0x46ca6000}, 
+    {0x46ca8000}, {0x46caa000}, {0x46cac000}, {0x46cae000}, 
+    {0x46cb0000}, {0x46cb2000}, {0x46cb4000}, {0x46cb6000}, 
+    {0x46cb8000}, {0x46cba000}, {0x46cbc000}, {0x46cbe000}, 
+    {0x46cc0000}, {0x46cc2000}, {0x46cc4000}, {0x46cc6000}, 
+    {0x46cc8000}, {0x46cca000}, {0x46ccc000}, {0x46cce000}, 
+    {0x46cd0000}, {0x46cd2000}, {0x46cd4000}, {0x46cd6000}, 
+    {0x46cd8000}, {0x46cda000}, {0x46cdc000}, {0x46cde000}, 
+    {0x46ce0000}, {0x46ce2000}, {0x46ce4000}, {0x46ce6000}, 
+    {0x46ce8000}, {0x46cea000}, {0x46cec000}, {0x46cee000}, 
+    {0x46cf0000}, {0x46cf2000}, {0x46cf4000}, {0x46cf6000}, 
+    {0x46cf8000}, {0x46cfa000}, {0x46cfc000}, {0x46cfe000}, 
+    {0x46d00000}, {0x46d02000}, {0x46d04000}, {0x46d06000}, 
+    {0x46d08000}, {0x46d0a000}, {0x46d0c000}, {0x46d0e000}, 
+    {0x46d10000}, {0x46d12000}, {0x46d14000}, {0x46d16000}, 
+    {0x46d18000}, {0x46d1a000}, {0x46d1c000}, {0x46d1e000}, 
+    {0x46d20000}, {0x46d22000}, {0x46d24000}, {0x46d26000}, 
+    {0x46d28000}, {0x46d2a000}, {0x46d2c000}, {0x46d2e000}, 
+    {0x46d30000}, {0x46d32000}, {0x46d34000}, {0x46d36000}, 
+    {0x46d38000}, {0x46d3a000}, {0x46d3c000}, {0x46d3e000}, 
+    {0x46d40000}, {0x46d42000}, {0x46d44000}, {0x46d46000}, 
+    {0x46d48000}, {0x46d4a000}, {0x46d4c000}, {0x46d4e000}, 
+    {0x46d50000}, {0x46d52000}, {0x46d54000}, {0x46d56000}, 
+    {0x46d58000}, {0x46d5a000}, {0x46d5c000}, {0x46d5e000}, 
+    {0x46d60000}, {0x46d62000}, {0x46d64000}, {0x46d66000}, 
+    {0x46d68000}, {0x46d6a000}, {0x46d6c000}, {0x46d6e000}, 
+    {0x46d70000}, {0x46d72000}, {0x46d74000}, {0x46d76000}, 
+    {0x46d78000}, {0x46d7a000}, {0x46d7c000}, {0x46d7e000}, 
+    {0x46d80000}, {0x46d82000}, {0x46d84000}, {0x46d86000}, 
+    {0x46d88000}, {0x46d8a000}, {0x46d8c000}, {0x46d8e000}, 
+    {0x46d90000}, {0x46d92000}, {0x46d94000}, {0x46d96000}, 
+    {0x46d98000}, {0x46d9a000}, {0x46d9c000}, {0x46d9e000}, 
+    {0x46da0000}, {0x46da2000}, {0x46da4000}, {0x46da6000}, 
+    {0x46da8000}, {0x46daa000}, {0x46dac000}, {0x46dae000}, 
+    {0x46db0000}, {0x46db2000}, {0x46db4000}, {0x46db6000}, 
+    {0x46db8000}, {0x46dba000}, {0x46dbc000}, {0x46dbe000}, 
+    {0x46dc0000}, {0x46dc2000}, {0x46dc4000}, {0x46dc6000}, 
+    {0x46dc8000}, {0x46dca000}, {0x46dcc000}, {0x46dce000}, 
+    {0x46dd0000}, {0x46dd2000}, {0x46dd4000}, {0x46dd6000}, 
+    {0x46dd8000}, {0x46dda000}, {0x46ddc000}, {0x46dde000}, 
+    {0x46de0000}, {0x46de2000}, {0x46de4000}, {0x46de6000}, 
+    {0x46de8000}, {0x46dea000}, {0x46dec000}, {0x46dee000}, 
+    {0x46df0000}, {0x46df2000}, {0x46df4000}, {0x46df6000}, 
+    {0x46df8000}, {0x46dfa000}, {0x46dfc000}, {0x46dfe000}, 
+    {0x46e00000}, {0x46e02000}, {0x46e04000}, {0x46e06000}, 
+    {0x46e08000}, {0x46e0a000}, {0x46e0c000}, {0x46e0e000}, 
+    {0x46e10000}, {0x46e12000}, {0x46e14000}, {0x46e16000}, 
+    {0x46e18000}, {0x46e1a000}, {0x46e1c000}, {0x46e1e000}, 
+    {0x46e20000}, {0x46e22000}, {0x46e24000}, {0x46e26000}, 
+    {0x46e28000}, {0x46e2a000}, {0x46e2c000}, {0x46e2e000}, 
+    {0x46e30000}, {0x46e32000}, {0x46e34000}, {0x46e36000}, 
+    {0x46e38000}, {0x46e3a000}, {0x46e3c000}, {0x46e3e000}, 
+    {0x46e40000}, {0x46e42000}, {0x46e44000}, {0x46e46000}, 
+    {0x46e48000}, {0x46e4a000}, {0x46e4c000}, {0x46e4e000}, 
+    {0x46e50000}, {0x46e52000}, {0x46e54000}, {0x46e56000}, 
+    {0x46e58000}, {0x46e5a000}, {0x46e5c000}, {0x46e5e000}, 
+    {0x46e60000}, {0x46e62000}, {0x46e64000}, {0x46e66000}, 
+    {0x46e68000}, {0x46e6a000}, {0x46e6c000}, {0x46e6e000}, 
+    {0x46e70000}, {0x46e72000}, {0x46e74000}, {0x46e76000}, 
+    {0x46e78000}, {0x46e7a000}, {0x46e7c000}, {0x46e7e000}, 
+    {0x46e80000}, {0x46e82000}, {0x46e84000}, {0x46e86000}, 
+    {0x46e88000}, {0x46e8a000}, {0x46e8c000}, {0x46e8e000}, 
+    {0x46e90000}, {0x46e92000}, {0x46e94000}, {0x46e96000}, 
+    {0x46e98000}, {0x46e9a000}, {0x46e9c000}, {0x46e9e000}, 
+    {0x46ea0000}, {0x46ea2000}, {0x46ea4000}, {0x46ea6000}, 
+    {0x46ea8000}, {0x46eaa000}, {0x46eac000}, {0x46eae000}, 
+    {0x46eb0000}, {0x46eb2000}, {0x46eb4000}, {0x46eb6000}, 
+    {0x46eb8000}, {0x46eba000}, {0x46ebc000}, {0x46ebe000}, 
+    {0x46ec0000}, {0x46ec2000}, {0x46ec4000}, {0x46ec6000}, 
+    {0x46ec8000}, {0x46eca000}, {0x46ecc000}, {0x46ece000}, 
+    {0x46ed0000}, {0x46ed2000}, {0x46ed4000}, {0x46ed6000}, 
+    {0x46ed8000}, {0x46eda000}, {0x46edc000}, {0x46ede000}, 
+    {0x46ee0000}, {0x46ee2000}, {0x46ee4000}, {0x46ee6000}, 
+    {0x46ee8000}, {0x46eea000}, {0x46eec000}, {0x46eee000}, 
+    {0x46ef0000}, {0x46ef2000}, {0x46ef4000}, {0x46ef6000}, 
+    {0x46ef8000}, {0x46efa000}, {0x46efc000}, {0x46efe000}, 
+    {0x46f00000}, {0x46f02000}, {0x46f04000}, {0x46f06000}, 
+    {0x46f08000}, {0x46f0a000}, {0x46f0c000}, {0x46f0e000}, 
+    {0x46f10000}, {0x46f12000}, {0x46f14000}, {0x46f16000}, 
+    {0x46f18000}, {0x46f1a000}, {0x46f1c000}, {0x46f1e000}, 
+    {0x46f20000}, {0x46f22000}, {0x46f24000}, {0x46f26000}, 
+    {0x46f28000}, {0x46f2a000}, {0x46f2c000}, {0x46f2e000}, 
+    {0x46f30000}, {0x46f32000}, {0x46f34000}, {0x46f36000}, 
+    {0x46f38000}, {0x46f3a000}, {0x46f3c000}, {0x46f3e000}, 
+    {0x46f40000}, {0x46f42000}, {0x46f44000}, {0x46f46000}, 
+    {0x46f48000}, {0x46f4a000}, {0x46f4c000}, {0x46f4e000}, 
+    {0x46f50000}, {0x46f52000}, {0x46f54000}, {0x46f56000}, 
+    {0x46f58000}, {0x46f5a000}, {0x46f5c000}, {0x46f5e000}, 
+    {0x46f60000}, {0x46f62000}, {0x46f64000}, {0x46f66000}, 
+    {0x46f68000}, {0x46f6a000}, {0x46f6c000}, {0x46f6e000}, 
+    {0x46f70000}, {0x46f72000}, {0x46f74000}, {0x46f76000}, 
+    {0x46f78000}, {0x46f7a000}, {0x46f7c000}, {0x46f7e000}, 
+    {0x46f80000}, {0x46f82000}, {0x46f84000}, {0x46f86000}, 
+    {0x46f88000}, {0x46f8a000}, {0x46f8c000}, {0x46f8e000}, 
+    {0x46f90000}, {0x46f92000}, {0x46f94000}, {0x46f96000}, 
+    {0x46f98000}, {0x46f9a000}, {0x46f9c000}, {0x46f9e000}, 
+    {0x46fa0000}, {0x46fa2000}, {0x46fa4000}, {0x46fa6000}, 
+    {0x46fa8000}, {0x46faa000}, {0x46fac000}, {0x46fae000}, 
+    {0x46fb0000}, {0x46fb2000}, {0x46fb4000}, {0x46fb6000}, 
+    {0x46fb8000}, {0x46fba000}, {0x46fbc000}, {0x46fbe000}, 
+    {0x46fc0000}, {0x46fc2000}, {0x46fc4000}, {0x46fc6000}, 
+    {0x46fc8000}, {0x46fca000}, {0x46fcc000}, {0x46fce000}, 
+    {0x46fd0000}, {0x46fd2000}, {0x46fd4000}, {0x46fd6000}, 
+    {0x46fd8000}, {0x46fda000}, {0x46fdc000}, {0x46fde000}, 
+    {0x46fe0000}, {0x46fe2000}, {0x46fe4000}, {0x46fe6000}, 
+    {0x46fe8000}, {0x46fea000}, {0x46fec000}, {0x46fee000}, 
+    {0x46ff0000}, {0x46ff2000}, {0x46ff4000}, {0x46ff6000}, 
+    {0x46ff8000}, {0x46ffa000}, {0x46ffc000}, {0x46ffe000}, 
+    {0x47000000}, {0x47002000}, {0x47004000}, {0x47006000}, 
+    {0x47008000}, {0x4700a000}, {0x4700c000}, {0x4700e000}, 
+    {0x47010000}, {0x47012000}, {0x47014000}, {0x47016000}, 
+    {0x47018000}, {0x4701a000}, {0x4701c000}, {0x4701e000}, 
+    {0x47020000}, {0x47022000}, {0x47024000}, {0x47026000}, 
+    {0x47028000}, {0x4702a000}, {0x4702c000}, {0x4702e000}, 
+    {0x47030000}, {0x47032000}, {0x47034000}, {0x47036000}, 
+    {0x47038000}, {0x4703a000}, {0x4703c000}, {0x4703e000}, 
+    {0x47040000}, {0x47042000}, {0x47044000}, {0x47046000}, 
+    {0x47048000}, {0x4704a000}, {0x4704c000}, {0x4704e000}, 
+    {0x47050000}, {0x47052000}, {0x47054000}, {0x47056000}, 
+    {0x47058000}, {0x4705a000}, {0x4705c000}, {0x4705e000}, 
+    {0x47060000}, {0x47062000}, {0x47064000}, {0x47066000}, 
+    {0x47068000}, {0x4706a000}, {0x4706c000}, {0x4706e000}, 
+    {0x47070000}, {0x47072000}, {0x47074000}, {0x47076000}, 
+    {0x47078000}, {0x4707a000}, {0x4707c000}, {0x4707e000}, 
+    {0x47080000}, {0x47082000}, {0x47084000}, {0x47086000}, 
+    {0x47088000}, {0x4708a000}, {0x4708c000}, {0x4708e000}, 
+    {0x47090000}, {0x47092000}, {0x47094000}, {0x47096000}, 
+    {0x47098000}, {0x4709a000}, {0x4709c000}, {0x4709e000}, 
+    {0x470a0000}, {0x470a2000}, {0x470a4000}, {0x470a6000}, 
+    {0x470a8000}, {0x470aa000}, {0x470ac000}, {0x470ae000}, 
+    {0x470b0000}, {0x470b2000}, {0x470b4000}, {0x470b6000}, 
+    {0x470b8000}, {0x470ba000}, {0x470bc000}, {0x470be000}, 
+    {0x470c0000}, {0x470c2000}, {0x470c4000}, {0x470c6000}, 
+    {0x470c8000}, {0x470ca000}, {0x470cc000}, {0x470ce000}, 
+    {0x470d0000}, {0x470d2000}, {0x470d4000}, {0x470d6000}, 
+    {0x470d8000}, {0x470da000}, {0x470dc000}, {0x470de000}, 
+    {0x470e0000}, {0x470e2000}, {0x470e4000}, {0x470e6000}, 
+    {0x470e8000}, {0x470ea000}, {0x470ec000}, {0x470ee000}, 
+    {0x470f0000}, {0x470f2000}, {0x470f4000}, {0x470f6000}, 
+    {0x470f8000}, {0x470fa000}, {0x470fc000}, {0x470fe000}, 
+    {0x47100000}, {0x47102000}, {0x47104000}, {0x47106000}, 
+    {0x47108000}, {0x4710a000}, {0x4710c000}, {0x4710e000}, 
+    {0x47110000}, {0x47112000}, {0x47114000}, {0x47116000}, 
+    {0x47118000}, {0x4711a000}, {0x4711c000}, {0x4711e000}, 
+    {0x47120000}, {0x47122000}, {0x47124000}, {0x47126000}, 
+    {0x47128000}, {0x4712a000}, {0x4712c000}, {0x4712e000}, 
+    {0x47130000}, {0x47132000}, {0x47134000}, {0x47136000}, 
+    {0x47138000}, {0x4713a000}, {0x4713c000}, {0x4713e000}, 
+    {0x47140000}, {0x47142000}, {0x47144000}, {0x47146000}, 
+    {0x47148000}, {0x4714a000}, {0x4714c000}, {0x4714e000}, 
+    {0x47150000}, {0x47152000}, {0x47154000}, {0x47156000}, 
+    {0x47158000}, {0x4715a000}, {0x4715c000}, {0x4715e000}, 
+    {0x47160000}, {0x47162000}, {0x47164000}, {0x47166000}, 
+    {0x47168000}, {0x4716a000}, {0x4716c000}, {0x4716e000}, 
+    {0x47170000}, {0x47172000}, {0x47174000}, {0x47176000}, 
+    {0x47178000}, {0x4717a000}, {0x4717c000}, {0x4717e000}, 
+    {0x47180000}, {0x47182000}, {0x47184000}, {0x47186000}, 
+    {0x47188000}, {0x4718a000}, {0x4718c000}, {0x4718e000}, 
+    {0x47190000}, {0x47192000}, {0x47194000}, {0x47196000}, 
+    {0x47198000}, {0x4719a000}, {0x4719c000}, {0x4719e000}, 
+    {0x471a0000}, {0x471a2000}, {0x471a4000}, {0x471a6000}, 
+    {0x471a8000}, {0x471aa000}, {0x471ac000}, {0x471ae000}, 
+    {0x471b0000}, {0x471b2000}, {0x471b4000}, {0x471b6000}, 
+    {0x471b8000}, {0x471ba000}, {0x471bc000}, {0x471be000}, 
+    {0x471c0000}, {0x471c2000}, {0x471c4000}, {0x471c6000}, 
+    {0x471c8000}, {0x471ca000}, {0x471cc000}, {0x471ce000}, 
+    {0x471d0000}, {0x471d2000}, {0x471d4000}, {0x471d6000}, 
+    {0x471d8000}, {0x471da000}, {0x471dc000}, {0x471de000}, 
+    {0x471e0000}, {0x471e2000}, {0x471e4000}, {0x471e6000}, 
+    {0x471e8000}, {0x471ea000}, {0x471ec000}, {0x471ee000}, 
+    {0x471f0000}, {0x471f2000}, {0x471f4000}, {0x471f6000}, 
+    {0x471f8000}, {0x471fa000}, {0x471fc000}, {0x471fe000}, 
+    {0x47200000}, {0x47202000}, {0x47204000}, {0x47206000}, 
+    {0x47208000}, {0x4720a000}, {0x4720c000}, {0x4720e000}, 
+    {0x47210000}, {0x47212000}, {0x47214000}, {0x47216000}, 
+    {0x47218000}, {0x4721a000}, {0x4721c000}, {0x4721e000}, 
+    {0x47220000}, {0x47222000}, {0x47224000}, {0x47226000}, 
+    {0x47228000}, {0x4722a000}, {0x4722c000}, {0x4722e000}, 
+    {0x47230000}, {0x47232000}, {0x47234000}, {0x47236000}, 
+    {0x47238000}, {0x4723a000}, {0x4723c000}, {0x4723e000}, 
+    {0x47240000}, {0x47242000}, {0x47244000}, {0x47246000}, 
+    {0x47248000}, {0x4724a000}, {0x4724c000}, {0x4724e000}, 
+    {0x47250000}, {0x47252000}, {0x47254000}, {0x47256000}, 
+    {0x47258000}, {0x4725a000}, {0x4725c000}, {0x4725e000}, 
+    {0x47260000}, {0x47262000}, {0x47264000}, {0x47266000}, 
+    {0x47268000}, {0x4726a000}, {0x4726c000}, {0x4726e000}, 
+    {0x47270000}, {0x47272000}, {0x47274000}, {0x47276000}, 
+    {0x47278000}, {0x4727a000}, {0x4727c000}, {0x4727e000}, 
+    {0x47280000}, {0x47282000}, {0x47284000}, {0x47286000}, 
+    {0x47288000}, {0x4728a000}, {0x4728c000}, {0x4728e000}, 
+    {0x47290000}, {0x47292000}, {0x47294000}, {0x47296000}, 
+    {0x47298000}, {0x4729a000}, {0x4729c000}, {0x4729e000}, 
+    {0x472a0000}, {0x472a2000}, {0x472a4000}, {0x472a6000}, 
+    {0x472a8000}, {0x472aa000}, {0x472ac000}, {0x472ae000}, 
+    {0x472b0000}, {0x472b2000}, {0x472b4000}, {0x472b6000}, 
+    {0x472b8000}, {0x472ba000}, {0x472bc000}, {0x472be000}, 
+    {0x472c0000}, {0x472c2000}, {0x472c4000}, {0x472c6000}, 
+    {0x472c8000}, {0x472ca000}, {0x472cc000}, {0x472ce000}, 
+    {0x472d0000}, {0x472d2000}, {0x472d4000}, {0x472d6000}, 
+    {0x472d8000}, {0x472da000}, {0x472dc000}, {0x472de000}, 
+    {0x472e0000}, {0x472e2000}, {0x472e4000}, {0x472e6000}, 
+    {0x472e8000}, {0x472ea000}, {0x472ec000}, {0x472ee000}, 
+    {0x472f0000}, {0x472f2000}, {0x472f4000}, {0x472f6000}, 
+    {0x472f8000}, {0x472fa000}, {0x472fc000}, {0x472fe000}, 
+    {0x47300000}, {0x47302000}, {0x47304000}, {0x47306000}, 
+    {0x47308000}, {0x4730a000}, {0x4730c000}, {0x4730e000}, 
+    {0x47310000}, {0x47312000}, {0x47314000}, {0x47316000}, 
+    {0x47318000}, {0x4731a000}, {0x4731c000}, {0x4731e000}, 
+    {0x47320000}, {0x47322000}, {0x47324000}, {0x47326000}, 
+    {0x47328000}, {0x4732a000}, {0x4732c000}, {0x4732e000}, 
+    {0x47330000}, {0x47332000}, {0x47334000}, {0x47336000}, 
+    {0x47338000}, {0x4733a000}, {0x4733c000}, {0x4733e000}, 
+    {0x47340000}, {0x47342000}, {0x47344000}, {0x47346000}, 
+    {0x47348000}, {0x4734a000}, {0x4734c000}, {0x4734e000}, 
+    {0x47350000}, {0x47352000}, {0x47354000}, {0x47356000}, 
+    {0x47358000}, {0x4735a000}, {0x4735c000}, {0x4735e000}, 
+    {0x47360000}, {0x47362000}, {0x47364000}, {0x47366000}, 
+    {0x47368000}, {0x4736a000}, {0x4736c000}, {0x4736e000}, 
+    {0x47370000}, {0x47372000}, {0x47374000}, {0x47376000}, 
+    {0x47378000}, {0x4737a000}, {0x4737c000}, {0x4737e000}, 
+    {0x47380000}, {0x47382000}, {0x47384000}, {0x47386000}, 
+    {0x47388000}, {0x4738a000}, {0x4738c000}, {0x4738e000}, 
+    {0x47390000}, {0x47392000}, {0x47394000}, {0x47396000}, 
+    {0x47398000}, {0x4739a000}, {0x4739c000}, {0x4739e000}, 
+    {0x473a0000}, {0x473a2000}, {0x473a4000}, {0x473a6000}, 
+    {0x473a8000}, {0x473aa000}, {0x473ac000}, {0x473ae000}, 
+    {0x473b0000}, {0x473b2000}, {0x473b4000}, {0x473b6000}, 
+    {0x473b8000}, {0x473ba000}, {0x473bc000}, {0x473be000}, 
+    {0x473c0000}, {0x473c2000}, {0x473c4000}, {0x473c6000}, 
+    {0x473c8000}, {0x473ca000}, {0x473cc000}, {0x473ce000}, 
+    {0x473d0000}, {0x473d2000}, {0x473d4000}, {0x473d6000}, 
+    {0x473d8000}, {0x473da000}, {0x473dc000}, {0x473de000}, 
+    {0x473e0000}, {0x473e2000}, {0x473e4000}, {0x473e6000}, 
+    {0x473e8000}, {0x473ea000}, {0x473ec000}, {0x473ee000}, 
+    {0x473f0000}, {0x473f2000}, {0x473f4000}, {0x473f6000}, 
+    {0x473f8000}, {0x473fa000}, {0x473fc000}, {0x473fe000}, 
+    {0x47400000}, {0x47402000}, {0x47404000}, {0x47406000}, 
+    {0x47408000}, {0x4740a000}, {0x4740c000}, {0x4740e000}, 
+    {0x47410000}, {0x47412000}, {0x47414000}, {0x47416000}, 
+    {0x47418000}, {0x4741a000}, {0x4741c000}, {0x4741e000}, 
+    {0x47420000}, {0x47422000}, {0x47424000}, {0x47426000}, 
+    {0x47428000}, {0x4742a000}, {0x4742c000}, {0x4742e000}, 
+    {0x47430000}, {0x47432000}, {0x47434000}, {0x47436000}, 
+    {0x47438000}, {0x4743a000}, {0x4743c000}, {0x4743e000}, 
+    {0x47440000}, {0x47442000}, {0x47444000}, {0x47446000}, 
+    {0x47448000}, {0x4744a000}, {0x4744c000}, {0x4744e000}, 
+    {0x47450000}, {0x47452000}, {0x47454000}, {0x47456000}, 
+    {0x47458000}, {0x4745a000}, {0x4745c000}, {0x4745e000}, 
+    {0x47460000}, {0x47462000}, {0x47464000}, {0x47466000}, 
+    {0x47468000}, {0x4746a000}, {0x4746c000}, {0x4746e000}, 
+    {0x47470000}, {0x47472000}, {0x47474000}, {0x47476000}, 
+    {0x47478000}, {0x4747a000}, {0x4747c000}, {0x4747e000}, 
+    {0x47480000}, {0x47482000}, {0x47484000}, {0x47486000}, 
+    {0x47488000}, {0x4748a000}, {0x4748c000}, {0x4748e000}, 
+    {0x47490000}, {0x47492000}, {0x47494000}, {0x47496000}, 
+    {0x47498000}, {0x4749a000}, {0x4749c000}, {0x4749e000}, 
+    {0x474a0000}, {0x474a2000}, {0x474a4000}, {0x474a6000}, 
+    {0x474a8000}, {0x474aa000}, {0x474ac000}, {0x474ae000}, 
+    {0x474b0000}, {0x474b2000}, {0x474b4000}, {0x474b6000}, 
+    {0x474b8000}, {0x474ba000}, {0x474bc000}, {0x474be000}, 
+    {0x474c0000}, {0x474c2000}, {0x474c4000}, {0x474c6000}, 
+    {0x474c8000}, {0x474ca000}, {0x474cc000}, {0x474ce000}, 
+    {0x474d0000}, {0x474d2000}, {0x474d4000}, {0x474d6000}, 
+    {0x474d8000}, {0x474da000}, {0x474dc000}, {0x474de000}, 
+    {0x474e0000}, {0x474e2000}, {0x474e4000}, {0x474e6000}, 
+    {0x474e8000}, {0x474ea000}, {0x474ec000}, {0x474ee000}, 
+    {0x474f0000}, {0x474f2000}, {0x474f4000}, {0x474f6000}, 
+    {0x474f8000}, {0x474fa000}, {0x474fc000}, {0x474fe000}, 
+    {0x47500000}, {0x47502000}, {0x47504000}, {0x47506000}, 
+    {0x47508000}, {0x4750a000}, {0x4750c000}, {0x4750e000}, 
+    {0x47510000}, {0x47512000}, {0x47514000}, {0x47516000}, 
+    {0x47518000}, {0x4751a000}, {0x4751c000}, {0x4751e000}, 
+    {0x47520000}, {0x47522000}, {0x47524000}, {0x47526000}, 
+    {0x47528000}, {0x4752a000}, {0x4752c000}, {0x4752e000}, 
+    {0x47530000}, {0x47532000}, {0x47534000}, {0x47536000}, 
+    {0x47538000}, {0x4753a000}, {0x4753c000}, {0x4753e000}, 
+    {0x47540000}, {0x47542000}, {0x47544000}, {0x47546000}, 
+    {0x47548000}, {0x4754a000}, {0x4754c000}, {0x4754e000}, 
+    {0x47550000}, {0x47552000}, {0x47554000}, {0x47556000}, 
+    {0x47558000}, {0x4755a000}, {0x4755c000}, {0x4755e000}, 
+    {0x47560000}, {0x47562000}, {0x47564000}, {0x47566000}, 
+    {0x47568000}, {0x4756a000}, {0x4756c000}, {0x4756e000}, 
+    {0x47570000}, {0x47572000}, {0x47574000}, {0x47576000}, 
+    {0x47578000}, {0x4757a000}, {0x4757c000}, {0x4757e000}, 
+    {0x47580000}, {0x47582000}, {0x47584000}, {0x47586000}, 
+    {0x47588000}, {0x4758a000}, {0x4758c000}, {0x4758e000}, 
+    {0x47590000}, {0x47592000}, {0x47594000}, {0x47596000}, 
+    {0x47598000}, {0x4759a000}, {0x4759c000}, {0x4759e000}, 
+    {0x475a0000}, {0x475a2000}, {0x475a4000}, {0x475a6000}, 
+    {0x475a8000}, {0x475aa000}, {0x475ac000}, {0x475ae000}, 
+    {0x475b0000}, {0x475b2000}, {0x475b4000}, {0x475b6000}, 
+    {0x475b8000}, {0x475ba000}, {0x475bc000}, {0x475be000}, 
+    {0x475c0000}, {0x475c2000}, {0x475c4000}, {0x475c6000}, 
+    {0x475c8000}, {0x475ca000}, {0x475cc000}, {0x475ce000}, 
+    {0x475d0000}, {0x475d2000}, {0x475d4000}, {0x475d6000}, 
+    {0x475d8000}, {0x475da000}, {0x475dc000}, {0x475de000}, 
+    {0x475e0000}, {0x475e2000}, {0x475e4000}, {0x475e6000}, 
+    {0x475e8000}, {0x475ea000}, {0x475ec000}, {0x475ee000}, 
+    {0x475f0000}, {0x475f2000}, {0x475f4000}, {0x475f6000}, 
+    {0x475f8000}, {0x475fa000}, {0x475fc000}, {0x475fe000}, 
+    {0x47600000}, {0x47602000}, {0x47604000}, {0x47606000}, 
+    {0x47608000}, {0x4760a000}, {0x4760c000}, {0x4760e000}, 
+    {0x47610000}, {0x47612000}, {0x47614000}, {0x47616000}, 
+    {0x47618000}, {0x4761a000}, {0x4761c000}, {0x4761e000}, 
+    {0x47620000}, {0x47622000}, {0x47624000}, {0x47626000}, 
+    {0x47628000}, {0x4762a000}, {0x4762c000}, {0x4762e000}, 
+    {0x47630000}, {0x47632000}, {0x47634000}, {0x47636000}, 
+    {0x47638000}, {0x4763a000}, {0x4763c000}, {0x4763e000}, 
+    {0x47640000}, {0x47642000}, {0x47644000}, {0x47646000}, 
+    {0x47648000}, {0x4764a000}, {0x4764c000}, {0x4764e000}, 
+    {0x47650000}, {0x47652000}, {0x47654000}, {0x47656000}, 
+    {0x47658000}, {0x4765a000}, {0x4765c000}, {0x4765e000}, 
+    {0x47660000}, {0x47662000}, {0x47664000}, {0x47666000}, 
+    {0x47668000}, {0x4766a000}, {0x4766c000}, {0x4766e000}, 
+    {0x47670000}, {0x47672000}, {0x47674000}, {0x47676000}, 
+    {0x47678000}, {0x4767a000}, {0x4767c000}, {0x4767e000}, 
+    {0x47680000}, {0x47682000}, {0x47684000}, {0x47686000}, 
+    {0x47688000}, {0x4768a000}, {0x4768c000}, {0x4768e000}, 
+    {0x47690000}, {0x47692000}, {0x47694000}, {0x47696000}, 
+    {0x47698000}, {0x4769a000}, {0x4769c000}, {0x4769e000}, 
+    {0x476a0000}, {0x476a2000}, {0x476a4000}, {0x476a6000}, 
+    {0x476a8000}, {0x476aa000}, {0x476ac000}, {0x476ae000}, 
+    {0x476b0000}, {0x476b2000}, {0x476b4000}, {0x476b6000}, 
+    {0x476b8000}, {0x476ba000}, {0x476bc000}, {0x476be000}, 
+    {0x476c0000}, {0x476c2000}, {0x476c4000}, {0x476c6000}, 
+    {0x476c8000}, {0x476ca000}, {0x476cc000}, {0x476ce000}, 
+    {0x476d0000}, {0x476d2000}, {0x476d4000}, {0x476d6000}, 
+    {0x476d8000}, {0x476da000}, {0x476dc000}, {0x476de000}, 
+    {0x476e0000}, {0x476e2000}, {0x476e4000}, {0x476e6000}, 
+    {0x476e8000}, {0x476ea000}, {0x476ec000}, {0x476ee000}, 
+    {0x476f0000}, {0x476f2000}, {0x476f4000}, {0x476f6000}, 
+    {0x476f8000}, {0x476fa000}, {0x476fc000}, {0x476fe000}, 
+    {0x47700000}, {0x47702000}, {0x47704000}, {0x47706000}, 
+    {0x47708000}, {0x4770a000}, {0x4770c000}, {0x4770e000}, 
+    {0x47710000}, {0x47712000}, {0x47714000}, {0x47716000}, 
+    {0x47718000}, {0x4771a000}, {0x4771c000}, {0x4771e000}, 
+    {0x47720000}, {0x47722000}, {0x47724000}, {0x47726000}, 
+    {0x47728000}, {0x4772a000}, {0x4772c000}, {0x4772e000}, 
+    {0x47730000}, {0x47732000}, {0x47734000}, {0x47736000}, 
+    {0x47738000}, {0x4773a000}, {0x4773c000}, {0x4773e000}, 
+    {0x47740000}, {0x47742000}, {0x47744000}, {0x47746000}, 
+    {0x47748000}, {0x4774a000}, {0x4774c000}, {0x4774e000}, 
+    {0x47750000}, {0x47752000}, {0x47754000}, {0x47756000}, 
+    {0x47758000}, {0x4775a000}, {0x4775c000}, {0x4775e000}, 
+    {0x47760000}, {0x47762000}, {0x47764000}, {0x47766000}, 
+    {0x47768000}, {0x4776a000}, {0x4776c000}, {0x4776e000}, 
+    {0x47770000}, {0x47772000}, {0x47774000}, {0x47776000}, 
+    {0x47778000}, {0x4777a000}, {0x4777c000}, {0x4777e000}, 
+    {0x47780000}, {0x47782000}, {0x47784000}, {0x47786000}, 
+    {0x47788000}, {0x4778a000}, {0x4778c000}, {0x4778e000}, 
+    {0x47790000}, {0x47792000}, {0x47794000}, {0x47796000}, 
+    {0x47798000}, {0x4779a000}, {0x4779c000}, {0x4779e000}, 
+    {0x477a0000}, {0x477a2000}, {0x477a4000}, {0x477a6000}, 
+    {0x477a8000}, {0x477aa000}, {0x477ac000}, {0x477ae000}, 
+    {0x477b0000}, {0x477b2000}, {0x477b4000}, {0x477b6000}, 
+    {0x477b8000}, {0x477ba000}, {0x477bc000}, {0x477be000}, 
+    {0x477c0000}, {0x477c2000}, {0x477c4000}, {0x477c6000}, 
+    {0x477c8000}, {0x477ca000}, {0x477cc000}, {0x477ce000}, 
+    {0x477d0000}, {0x477d2000}, {0x477d4000}, {0x477d6000}, 
+    {0x477d8000}, {0x477da000}, {0x477dc000}, {0x477de000}, 
+    {0x477e0000}, {0x477e2000}, {0x477e4000}, {0x477e6000}, 
+    {0x477e8000}, {0x477ea000}, {0x477ec000}, {0x477ee000}, 
+    {0x477f0000}, {0x477f2000}, {0x477f4000}, {0x477f6000}, 
+    {0x477f8000}, {0x477fa000}, {0x477fc000}, {0x477fe000}, 
+    {0x7f800000}, {0x7f802000}, {0x7f804000}, {0x7f806000}, 
+    {0x7f808000}, {0x7f80a000}, {0x7f80c000}, {0x7f80e000}, 
+    {0x7f810000}, {0x7f812000}, {0x7f814000}, {0x7f816000}, 
+    {0x7f818000}, {0x7f81a000}, {0x7f81c000}, {0x7f81e000}, 
+    {0x7f820000}, {0x7f822000}, {0x7f824000}, {0x7f826000}, 
+    {0x7f828000}, {0x7f82a000}, {0x7f82c000}, {0x7f82e000}, 
+    {0x7f830000}, {0x7f832000}, {0x7f834000}, {0x7f836000}, 
+    {0x7f838000}, {0x7f83a000}, {0x7f83c000}, {0x7f83e000}, 
+    {0x7f840000}, {0x7f842000}, {0x7f844000}, {0x7f846000}, 
+    {0x7f848000}, {0x7f84a000}, {0x7f84c000}, {0x7f84e000}, 
+    {0x7f850000}, {0x7f852000}, {0x7f854000}, {0x7f856000}, 
+    {0x7f858000}, {0x7f85a000}, {0x7f85c000}, {0x7f85e000}, 
+    {0x7f860000}, {0x7f862000}, {0x7f864000}, {0x7f866000}, 
+    {0x7f868000}, {0x7f86a000}, {0x7f86c000}, {0x7f86e000}, 
+    {0x7f870000}, {0x7f872000}, {0x7f874000}, {0x7f876000}, 
+    {0x7f878000}, {0x7f87a000}, {0x7f87c000}, {0x7f87e000}, 
+    {0x7f880000}, {0x7f882000}, {0x7f884000}, {0x7f886000}, 
+    {0x7f888000}, {0x7f88a000}, {0x7f88c000}, {0x7f88e000}, 
+    {0x7f890000}, {0x7f892000}, {0x7f894000}, {0x7f896000}, 
+    {0x7f898000}, {0x7f89a000}, {0x7f89c000}, {0x7f89e000}, 
+    {0x7f8a0000}, {0x7f8a2000}, {0x7f8a4000}, {0x7f8a6000}, 
+    {0x7f8a8000}, {0x7f8aa000}, {0x7f8ac000}, {0x7f8ae000}, 
+    {0x7f8b0000}, {0x7f8b2000}, {0x7f8b4000}, {0x7f8b6000}, 
+    {0x7f8b8000}, {0x7f8ba000}, {0x7f8bc000}, {0x7f8be000}, 
+    {0x7f8c0000}, {0x7f8c2000}, {0x7f8c4000}, {0x7f8c6000}, 
+    {0x7f8c8000}, {0x7f8ca000}, {0x7f8cc000}, {0x7f8ce000}, 
+    {0x7f8d0000}, {0x7f8d2000}, {0x7f8d4000}, {0x7f8d6000}, 
+    {0x7f8d8000}, {0x7f8da000}, {0x7f8dc000}, {0x7f8de000}, 
+    {0x7f8e0000}, {0x7f8e2000}, {0x7f8e4000}, {0x7f8e6000}, 
+    {0x7f8e8000}, {0x7f8ea000}, {0x7f8ec000}, {0x7f8ee000}, 
+    {0x7f8f0000}, {0x7f8f2000}, {0x7f8f4000}, {0x7f8f6000}, 
+    {0x7f8f8000}, {0x7f8fa000}, {0x7f8fc000}, {0x7f8fe000}, 
+    {0x7f900000}, {0x7f902000}, {0x7f904000}, {0x7f906000}, 
+    {0x7f908000}, {0x7f90a000}, {0x7f90c000}, {0x7f90e000}, 
+    {0x7f910000}, {0x7f912000}, {0x7f914000}, {0x7f916000}, 
+    {0x7f918000}, {0x7f91a000}, {0x7f91c000}, {0x7f91e000}, 
+    {0x7f920000}, {0x7f922000}, {0x7f924000}, {0x7f926000}, 
+    {0x7f928000}, {0x7f92a000}, {0x7f92c000}, {0x7f92e000}, 
+    {0x7f930000}, {0x7f932000}, {0x7f934000}, {0x7f936000}, 
+    {0x7f938000}, {0x7f93a000}, {0x7f93c000}, {0x7f93e000}, 
+    {0x7f940000}, {0x7f942000}, {0x7f944000}, {0x7f946000}, 
+    {0x7f948000}, {0x7f94a000}, {0x7f94c000}, {0x7f94e000}, 
+    {0x7f950000}, {0x7f952000}, {0x7f954000}, {0x7f956000}, 
+    {0x7f958000}, {0x7f95a000}, {0x7f95c000}, {0x7f95e000}, 
+    {0x7f960000}, {0x7f962000}, {0x7f964000}, {0x7f966000}, 
+    {0x7f968000}, {0x7f96a000}, {0x7f96c000}, {0x7f96e000}, 
+    {0x7f970000}, {0x7f972000}, {0x7f974000}, {0x7f976000}, 
+    {0x7f978000}, {0x7f97a000}, {0x7f97c000}, {0x7f97e000}, 
+    {0x7f980000}, {0x7f982000}, {0x7f984000}, {0x7f986000}, 
+    {0x7f988000}, {0x7f98a000}, {0x7f98c000}, {0x7f98e000}, 
+    {0x7f990000}, {0x7f992000}, {0x7f994000}, {0x7f996000}, 
+    {0x7f998000}, {0x7f99a000}, {0x7f99c000}, {0x7f99e000}, 
+    {0x7f9a0000}, {0x7f9a2000}, {0x7f9a4000}, {0x7f9a6000}, 
+    {0x7f9a8000}, {0x7f9aa000}, {0x7f9ac000}, {0x7f9ae000}, 
+    {0x7f9b0000}, {0x7f9b2000}, {0x7f9b4000}, {0x7f9b6000}, 
+    {0x7f9b8000}, {0x7f9ba000}, {0x7f9bc000}, {0x7f9be000}, 
+    {0x7f9c0000}, {0x7f9c2000}, {0x7f9c4000}, {0x7f9c6000}, 
+    {0x7f9c8000}, {0x7f9ca000}, {0x7f9cc000}, {0x7f9ce000}, 
+    {0x7f9d0000}, {0x7f9d2000}, {0x7f9d4000}, {0x7f9d6000}, 
+    {0x7f9d8000}, {0x7f9da000}, {0x7f9dc000}, {0x7f9de000}, 
+    {0x7f9e0000}, {0x7f9e2000}, {0x7f9e4000}, {0x7f9e6000}, 
+    {0x7f9e8000}, {0x7f9ea000}, {0x7f9ec000}, {0x7f9ee000}, 
+    {0x7f9f0000}, {0x7f9f2000}, {0x7f9f4000}, {0x7f9f6000}, 
+    {0x7f9f8000}, {0x7f9fa000}, {0x7f9fc000}, {0x7f9fe000}, 
+    {0x7fa00000}, {0x7fa02000}, {0x7fa04000}, {0x7fa06000}, 
+    {0x7fa08000}, {0x7fa0a000}, {0x7fa0c000}, {0x7fa0e000}, 
+    {0x7fa10000}, {0x7fa12000}, {0x7fa14000}, {0x7fa16000}, 
+    {0x7fa18000}, {0x7fa1a000}, {0x7fa1c000}, {0x7fa1e000}, 
+    {0x7fa20000}, {0x7fa22000}, {0x7fa24000}, {0x7fa26000}, 
+    {0x7fa28000}, {0x7fa2a000}, {0x7fa2c000}, {0x7fa2e000}, 
+    {0x7fa30000}, {0x7fa32000}, {0x7fa34000}, {0x7fa36000}, 
+    {0x7fa38000}, {0x7fa3a000}, {0x7fa3c000}, {0x7fa3e000}, 
+    {0x7fa40000}, {0x7fa42000}, {0x7fa44000}, {0x7fa46000}, 
+    {0x7fa48000}, {0x7fa4a000}, {0x7fa4c000}, {0x7fa4e000}, 
+    {0x7fa50000}, {0x7fa52000}, {0x7fa54000}, {0x7fa56000}, 
+    {0x7fa58000}, {0x7fa5a000}, {0x7fa5c000}, {0x7fa5e000}, 
+    {0x7fa60000}, {0x7fa62000}, {0x7fa64000}, {0x7fa66000}, 
+    {0x7fa68000}, {0x7fa6a000}, {0x7fa6c000}, {0x7fa6e000}, 
+    {0x7fa70000}, {0x7fa72000}, {0x7fa74000}, {0x7fa76000}, 
+    {0x7fa78000}, {0x7fa7a000}, {0x7fa7c000}, {0x7fa7e000}, 
+    {0x7fa80000}, {0x7fa82000}, {0x7fa84000}, {0x7fa86000}, 
+    {0x7fa88000}, {0x7fa8a000}, {0x7fa8c000}, {0x7fa8e000}, 
+    {0x7fa90000}, {0x7fa92000}, {0x7fa94000}, {0x7fa96000}, 
+    {0x7fa98000}, {0x7fa9a000}, {0x7fa9c000}, {0x7fa9e000}, 
+    {0x7faa0000}, {0x7faa2000}, {0x7faa4000}, {0x7faa6000}, 
+    {0x7faa8000}, {0x7faaa000}, {0x7faac000}, {0x7faae000}, 
+    {0x7fab0000}, {0x7fab2000}, {0x7fab4000}, {0x7fab6000}, 
+    {0x7fab8000}, {0x7faba000}, {0x7fabc000}, {0x7fabe000}, 
+    {0x7fac0000}, {0x7fac2000}, {0x7fac4000}, {0x7fac6000}, 
+    {0x7fac8000}, {0x7faca000}, {0x7facc000}, {0x7face000}, 
+    {0x7fad0000}, {0x7fad2000}, {0x7fad4000}, {0x7fad6000}, 
+    {0x7fad8000}, {0x7fada000}, {0x7fadc000}, {0x7fade000}, 
+    {0x7fae0000}, {0x7fae2000}, {0x7fae4000}, {0x7fae6000}, 
+    {0x7fae8000}, {0x7faea000}, {0x7faec000}, {0x7faee000}, 
+    {0x7faf0000}, {0x7faf2000}, {0x7faf4000}, {0x7faf6000}, 
+    {0x7faf8000}, {0x7fafa000}, {0x7fafc000}, {0x7fafe000}, 
+    {0x7fb00000}, {0x7fb02000}, {0x7fb04000}, {0x7fb06000}, 
+    {0x7fb08000}, {0x7fb0a000}, {0x7fb0c000}, {0x7fb0e000}, 
+    {0x7fb10000}, {0x7fb12000}, {0x7fb14000}, {0x7fb16000}, 
+    {0x7fb18000}, {0x7fb1a000}, {0x7fb1c000}, {0x7fb1e000}, 
+    {0x7fb20000}, {0x7fb22000}, {0x7fb24000}, {0x7fb26000}, 
+    {0x7fb28000}, {0x7fb2a000}, {0x7fb2c000}, {0x7fb2e000}, 
+    {0x7fb30000}, {0x7fb32000}, {0x7fb34000}, {0x7fb36000}, 
+    {0x7fb38000}, {0x7fb3a000}, {0x7fb3c000}, {0x7fb3e000}, 
+    {0x7fb40000}, {0x7fb42000}, {0x7fb44000}, {0x7fb46000}, 
+    {0x7fb48000}, {0x7fb4a000}, {0x7fb4c000}, {0x7fb4e000}, 
+    {0x7fb50000}, {0x7fb52000}, {0x7fb54000}, {0x7fb56000}, 
+    {0x7fb58000}, {0x7fb5a000}, {0x7fb5c000}, {0x7fb5e000}, 
+    {0x7fb60000}, {0x7fb62000}, {0x7fb64000}, {0x7fb66000}, 
+    {0x7fb68000}, {0x7fb6a000}, {0x7fb6c000}, {0x7fb6e000}, 
+    {0x7fb70000}, {0x7fb72000}, {0x7fb74000}, {0x7fb76000}, 
+    {0x7fb78000}, {0x7fb7a000}, {0x7fb7c000}, {0x7fb7e000}, 
+    {0x7fb80000}, {0x7fb82000}, {0x7fb84000}, {0x7fb86000}, 
+    {0x7fb88000}, {0x7fb8a000}, {0x7fb8c000}, {0x7fb8e000}, 
+    {0x7fb90000}, {0x7fb92000}, {0x7fb94000}, {0x7fb96000}, 
+    {0x7fb98000}, {0x7fb9a000}, {0x7fb9c000}, {0x7fb9e000}, 
+    {0x7fba0000}, {0x7fba2000}, {0x7fba4000}, {0x7fba6000}, 
+    {0x7fba8000}, {0x7fbaa000}, {0x7fbac000}, {0x7fbae000}, 
+    {0x7fbb0000}, {0x7fbb2000}, {0x7fbb4000}, {0x7fbb6000}, 
+    {0x7fbb8000}, {0x7fbba000}, {0x7fbbc000}, {0x7fbbe000}, 
+    {0x7fbc0000}, {0x7fbc2000}, {0x7fbc4000}, {0x7fbc6000}, 
+    {0x7fbc8000}, {0x7fbca000}, {0x7fbcc000}, {0x7fbce000}, 
+    {0x7fbd0000}, {0x7fbd2000}, {0x7fbd4000}, {0x7fbd6000}, 
+    {0x7fbd8000}, {0x7fbda000}, {0x7fbdc000}, {0x7fbde000}, 
+    {0x7fbe0000}, {0x7fbe2000}, {0x7fbe4000}, {0x7fbe6000}, 
+    {0x7fbe8000}, {0x7fbea000}, {0x7fbec000}, {0x7fbee000}, 
+    {0x7fbf0000}, {0x7fbf2000}, {0x7fbf4000}, {0x7fbf6000}, 
+    {0x7fbf8000}, {0x7fbfa000}, {0x7fbfc000}, {0x7fbfe000}, 
+    {0x7fc00000}, {0x7fc02000}, {0x7fc04000}, {0x7fc06000}, 
+    {0x7fc08000}, {0x7fc0a000}, {0x7fc0c000}, {0x7fc0e000}, 
+    {0x7fc10000}, {0x7fc12000}, {0x7fc14000}, {0x7fc16000}, 
+    {0x7fc18000}, {0x7fc1a000}, {0x7fc1c000}, {0x7fc1e000}, 
+    {0x7fc20000}, {0x7fc22000}, {0x7fc24000}, {0x7fc26000}, 
+    {0x7fc28000}, {0x7fc2a000}, {0x7fc2c000}, {0x7fc2e000}, 
+    {0x7fc30000}, {0x7fc32000}, {0x7fc34000}, {0x7fc36000}, 
+    {0x7fc38000}, {0x7fc3a000}, {0x7fc3c000}, {0x7fc3e000}, 
+    {0x7fc40000}, {0x7fc42000}, {0x7fc44000}, {0x7fc46000}, 
+    {0x7fc48000}, {0x7fc4a000}, {0x7fc4c000}, {0x7fc4e000}, 
+    {0x7fc50000}, {0x7fc52000}, {0x7fc54000}, {0x7fc56000}, 
+    {0x7fc58000}, {0x7fc5a000}, {0x7fc5c000}, {0x7fc5e000}, 
+    {0x7fc60000}, {0x7fc62000}, {0x7fc64000}, {0x7fc66000}, 
+    {0x7fc68000}, {0x7fc6a000}, {0x7fc6c000}, {0x7fc6e000}, 
+    {0x7fc70000}, {0x7fc72000}, {0x7fc74000}, {0x7fc76000}, 
+    {0x7fc78000}, {0x7fc7a000}, {0x7fc7c000}, {0x7fc7e000}, 
+    {0x7fc80000}, {0x7fc82000}, {0x7fc84000}, {0x7fc86000}, 
+    {0x7fc88000}, {0x7fc8a000}, {0x7fc8c000}, {0x7fc8e000}, 
+    {0x7fc90000}, {0x7fc92000}, {0x7fc94000}, {0x7fc96000}, 
+    {0x7fc98000}, {0x7fc9a000}, {0x7fc9c000}, {0x7fc9e000}, 
+    {0x7fca0000}, {0x7fca2000}, {0x7fca4000}, {0x7fca6000}, 
+    {0x7fca8000}, {0x7fcaa000}, {0x7fcac000}, {0x7fcae000}, 
+    {0x7fcb0000}, {0x7fcb2000}, {0x7fcb4000}, {0x7fcb6000}, 
+    {0x7fcb8000}, {0x7fcba000}, {0x7fcbc000}, {0x7fcbe000}, 
+    {0x7fcc0000}, {0x7fcc2000}, {0x7fcc4000}, {0x7fcc6000}, 
+    {0x7fcc8000}, {0x7fcca000}, {0x7fccc000}, {0x7fcce000}, 
+    {0x7fcd0000}, {0x7fcd2000}, {0x7fcd4000}, {0x7fcd6000}, 
+    {0x7fcd8000}, {0x7fcda000}, {0x7fcdc000}, {0x7fcde000}, 
+    {0x7fce0000}, {0x7fce2000}, {0x7fce4000}, {0x7fce6000}, 
+    {0x7fce8000}, {0x7fcea000}, {0x7fcec000}, {0x7fcee000}, 
+    {0x7fcf0000}, {0x7fcf2000}, {0x7fcf4000}, {0x7fcf6000}, 
+    {0x7fcf8000}, {0x7fcfa000}, {0x7fcfc000}, {0x7fcfe000}, 
+    {0x7fd00000}, {0x7fd02000}, {0x7fd04000}, {0x7fd06000}, 
+    {0x7fd08000}, {0x7fd0a000}, {0x7fd0c000}, {0x7fd0e000}, 
+    {0x7fd10000}, {0x7fd12000}, {0x7fd14000}, {0x7fd16000}, 
+    {0x7fd18000}, {0x7fd1a000}, {0x7fd1c000}, {0x7fd1e000}, 
+    {0x7fd20000}, {0x7fd22000}, {0x7fd24000}, {0x7fd26000}, 
+    {0x7fd28000}, {0x7fd2a000}, {0x7fd2c000}, {0x7fd2e000}, 
+    {0x7fd30000}, {0x7fd32000}, {0x7fd34000}, {0x7fd36000}, 
+    {0x7fd38000}, {0x7fd3a000}, {0x7fd3c000}, {0x7fd3e000}, 
+    {0x7fd40000}, {0x7fd42000}, {0x7fd44000}, {0x7fd46000}, 
+    {0x7fd48000}, {0x7fd4a000}, {0x7fd4c000}, {0x7fd4e000}, 
+    {0x7fd50000}, {0x7fd52000}, {0x7fd54000}, {0x7fd56000}, 
+    {0x7fd58000}, {0x7fd5a000}, {0x7fd5c000}, {0x7fd5e000}, 
+    {0x7fd60000}, {0x7fd62000}, {0x7fd64000}, {0x7fd66000}, 
+    {0x7fd68000}, {0x7fd6a000}, {0x7fd6c000}, {0x7fd6e000}, 
+    {0x7fd70000}, {0x7fd72000}, {0x7fd74000}, {0x7fd76000}, 
+    {0x7fd78000}, {0x7fd7a000}, {0x7fd7c000}, {0x7fd7e000}, 
+    {0x7fd80000}, {0x7fd82000}, {0x7fd84000}, {0x7fd86000}, 
+    {0x7fd88000}, {0x7fd8a000}, {0x7fd8c000}, {0x7fd8e000}, 
+    {0x7fd90000}, {0x7fd92000}, {0x7fd94000}, {0x7fd96000}, 
+    {0x7fd98000}, {0x7fd9a000}, {0x7fd9c000}, {0x7fd9e000}, 
+    {0x7fda0000}, {0x7fda2000}, {0x7fda4000}, {0x7fda6000}, 
+    {0x7fda8000}, {0x7fdaa000}, {0x7fdac000}, {0x7fdae000}, 
+    {0x7fdb0000}, {0x7fdb2000}, {0x7fdb4000}, {0x7fdb6000}, 
+    {0x7fdb8000}, {0x7fdba000}, {0x7fdbc000}, {0x7fdbe000}, 
+    {0x7fdc0000}, {0x7fdc2000}, {0x7fdc4000}, {0x7fdc6000}, 
+    {0x7fdc8000}, {0x7fdca000}, {0x7fdcc000}, {0x7fdce000}, 
+    {0x7fdd0000}, {0x7fdd2000}, {0x7fdd4000}, {0x7fdd6000}, 
+    {0x7fdd8000}, {0x7fdda000}, {0x7fddc000}, {0x7fdde000}, 
+    {0x7fde0000}, {0x7fde2000}, {0x7fde4000}, {0x7fde6000}, 
+    {0x7fde8000}, {0x7fdea000}, {0x7fdec000}, {0x7fdee000}, 
+    {0x7fdf0000}, {0x7fdf2000}, {0x7fdf4000}, {0x7fdf6000}, 
+    {0x7fdf8000}, {0x7fdfa000}, {0x7fdfc000}, {0x7fdfe000}, 
+    {0x7fe00000}, {0x7fe02000}, {0x7fe04000}, {0x7fe06000}, 
+    {0x7fe08000}, {0x7fe0a000}, {0x7fe0c000}, {0x7fe0e000}, 
+    {0x7fe10000}, {0x7fe12000}, {0x7fe14000}, {0x7fe16000}, 
+    {0x7fe18000}, {0x7fe1a000}, {0x7fe1c000}, {0x7fe1e000}, 
+    {0x7fe20000}, {0x7fe22000}, {0x7fe24000}, {0x7fe26000}, 
+    {0x7fe28000}, {0x7fe2a000}, {0x7fe2c000}, {0x7fe2e000}, 
+    {0x7fe30000}, {0x7fe32000}, {0x7fe34000}, {0x7fe36000}, 
+    {0x7fe38000}, {0x7fe3a000}, {0x7fe3c000}, {0x7fe3e000}, 
+    {0x7fe40000}, {0x7fe42000}, {0x7fe44000}, {0x7fe46000}, 
+    {0x7fe48000}, {0x7fe4a000}, {0x7fe4c000}, {0x7fe4e000}, 
+    {0x7fe50000}, {0x7fe52000}, {0x7fe54000}, {0x7fe56000}, 
+    {0x7fe58000}, {0x7fe5a000}, {0x7fe5c000}, {0x7fe5e000}, 
+    {0x7fe60000}, {0x7fe62000}, {0x7fe64000}, {0x7fe66000}, 
+    {0x7fe68000}, {0x7fe6a000}, {0x7fe6c000}, {0x7fe6e000}, 
+    {0x7fe70000}, {0x7fe72000}, {0x7fe74000}, {0x7fe76000}, 
+    {0x7fe78000}, {0x7fe7a000}, {0x7fe7c000}, {0x7fe7e000}, 
+    {0x7fe80000}, {0x7fe82000}, {0x7fe84000}, {0x7fe86000}, 
+    {0x7fe88000}, {0x7fe8a000}, {0x7fe8c000}, {0x7fe8e000}, 
+    {0x7fe90000}, {0x7fe92000}, {0x7fe94000}, {0x7fe96000}, 
+    {0x7fe98000}, {0x7fe9a000}, {0x7fe9c000}, {0x7fe9e000}, 
+    {0x7fea0000}, {0x7fea2000}, {0x7fea4000}, {0x7fea6000}, 
+    {0x7fea8000}, {0x7feaa000}, {0x7feac000}, {0x7feae000}, 
+    {0x7feb0000}, {0x7feb2000}, {0x7feb4000}, {0x7feb6000}, 
+    {0x7feb8000}, {0x7feba000}, {0x7febc000}, {0x7febe000}, 
+    {0x7fec0000}, {0x7fec2000}, {0x7fec4000}, {0x7fec6000}, 
+    {0x7fec8000}, {0x7feca000}, {0x7fecc000}, {0x7fece000}, 
+    {0x7fed0000}, {0x7fed2000}, {0x7fed4000}, {0x7fed6000}, 
+    {0x7fed8000}, {0x7feda000}, {0x7fedc000}, {0x7fede000}, 
+    {0x7fee0000}, {0x7fee2000}, {0x7fee4000}, {0x7fee6000}, 
+    {0x7fee8000}, {0x7feea000}, {0x7feec000}, {0x7feee000}, 
+    {0x7fef0000}, {0x7fef2000}, {0x7fef4000}, {0x7fef6000}, 
+    {0x7fef8000}, {0x7fefa000}, {0x7fefc000}, {0x7fefe000}, 
+    {0x7ff00000}, {0x7ff02000}, {0x7ff04000}, {0x7ff06000}, 
+    {0x7ff08000}, {0x7ff0a000}, {0x7ff0c000}, {0x7ff0e000}, 
+    {0x7ff10000}, {0x7ff12000}, {0x7ff14000}, {0x7ff16000}, 
+    {0x7ff18000}, {0x7ff1a000}, {0x7ff1c000}, {0x7ff1e000}, 
+    {0x7ff20000}, {0x7ff22000}, {0x7ff24000}, {0x7ff26000}, 
+    {0x7ff28000}, {0x7ff2a000}, {0x7ff2c000}, {0x7ff2e000}, 
+    {0x7ff30000}, {0x7ff32000}, {0x7ff34000}, {0x7ff36000}, 
+    {0x7ff38000}, {0x7ff3a000}, {0x7ff3c000}, {0x7ff3e000}, 
+    {0x7ff40000}, {0x7ff42000}, {0x7ff44000}, {0x7ff46000}, 
+    {0x7ff48000}, {0x7ff4a000}, {0x7ff4c000}, {0x7ff4e000}, 
+    {0x7ff50000}, {0x7ff52000}, {0x7ff54000}, {0x7ff56000}, 
+    {0x7ff58000}, {0x7ff5a000}, {0x7ff5c000}, {0x7ff5e000}, 
+    {0x7ff60000}, {0x7ff62000}, {0x7ff64000}, {0x7ff66000}, 
+    {0x7ff68000}, {0x7ff6a000}, {0x7ff6c000}, {0x7ff6e000}, 
+    {0x7ff70000}, {0x7ff72000}, {0x7ff74000}, {0x7ff76000}, 
+    {0x7ff78000}, {0x7ff7a000}, {0x7ff7c000}, {0x7ff7e000}, 
+    {0x7ff80000}, {0x7ff82000}, {0x7ff84000}, {0x7ff86000}, 
+    {0x7ff88000}, {0x7ff8a000}, {0x7ff8c000}, {0x7ff8e000}, 
+    {0x7ff90000}, {0x7ff92000}, {0x7ff94000}, {0x7ff96000}, 
+    {0x7ff98000}, {0x7ff9a000}, {0x7ff9c000}, {0x7ff9e000}, 
+    {0x7ffa0000}, {0x7ffa2000}, {0x7ffa4000}, {0x7ffa6000}, 
+    {0x7ffa8000}, {0x7ffaa000}, {0x7ffac000}, {0x7ffae000}, 
+    {0x7ffb0000}, {0x7ffb2000}, {0x7ffb4000}, {0x7ffb6000}, 
+    {0x7ffb8000}, {0x7ffba000}, {0x7ffbc000}, {0x7ffbe000}, 
+    {0x7ffc0000}, {0x7ffc2000}, {0x7ffc4000}, {0x7ffc6000}, 
+    {0x7ffc8000}, {0x7ffca000}, {0x7ffcc000}, {0x7ffce000}, 
+    {0x7ffd0000}, {0x7ffd2000}, {0x7ffd4000}, {0x7ffd6000}, 
+    {0x7ffd8000}, {0x7ffda000}, {0x7ffdc000}, {0x7ffde000}, 
+    {0x7ffe0000}, {0x7ffe2000}, {0x7ffe4000}, {0x7ffe6000}, 
+    {0x7ffe8000}, {0x7ffea000}, {0x7ffec000}, {0x7ffee000}, 
+    {0x7fff0000}, {0x7fff2000}, {0x7fff4000}, {0x7fff6000}, 
+    {0x7fff8000}, {0x7fffa000}, {0x7fffc000}, {0x7fffe000}, 
+    {0x80000000}, {0xb3800000}, {0xb4000000}, {0xb4400000}, 
+    {0xb4800000}, {0xb4a00000}, {0xb4c00000}, {0xb4e00000}, 
+    {0xb5000000}, {0xb5100000}, {0xb5200000}, {0xb5300000}, 
+    {0xb5400000}, {0xb5500000}, {0xb5600000}, {0xb5700000}, 
+    {0xb5800000}, {0xb5880000}, {0xb5900000}, {0xb5980000}, 
+    {0xb5a00000}, {0xb5a80000}, {0xb5b00000}, {0xb5b80000}, 
+    {0xb5c00000}, {0xb5c80000}, {0xb5d00000}, {0xb5d80000}, 
+    {0xb5e00000}, {0xb5e80000}, {0xb5f00000}, {0xb5f80000}, 
+    {0xb6000000}, {0xb6040000}, {0xb6080000}, {0xb60c0000}, 
+    {0xb6100000}, {0xb6140000}, {0xb6180000}, {0xb61c0000}, 
+    {0xb6200000}, {0xb6240000}, {0xb6280000}, {0xb62c0000}, 
+    {0xb6300000}, {0xb6340000}, {0xb6380000}, {0xb63c0000}, 
+    {0xb6400000}, {0xb6440000}, {0xb6480000}, {0xb64c0000}, 
+    {0xb6500000}, {0xb6540000}, {0xb6580000}, {0xb65c0000}, 
+    {0xb6600000}, {0xb6640000}, {0xb6680000}, {0xb66c0000}, 
+    {0xb6700000}, {0xb6740000}, {0xb6780000}, {0xb67c0000}, 
+    {0xb6800000}, {0xb6820000}, {0xb6840000}, {0xb6860000}, 
+    {0xb6880000}, {0xb68a0000}, {0xb68c0000}, {0xb68e0000}, 
+    {0xb6900000}, {0xb6920000}, {0xb6940000}, {0xb6960000}, 
+    {0xb6980000}, {0xb69a0000}, {0xb69c0000}, {0xb69e0000}, 
+    {0xb6a00000}, {0xb6a20000}, {0xb6a40000}, {0xb6a60000}, 
+    {0xb6a80000}, {0xb6aa0000}, {0xb6ac0000}, {0xb6ae0000}, 
+    {0xb6b00000}, {0xb6b20000}, {0xb6b40000}, {0xb6b60000}, 
+    {0xb6b80000}, {0xb6ba0000}, {0xb6bc0000}, {0xb6be0000}, 
+    {0xb6c00000}, {0xb6c20000}, {0xb6c40000}, {0xb6c60000}, 
+    {0xb6c80000}, {0xb6ca0000}, {0xb6cc0000}, {0xb6ce0000}, 
+    {0xb6d00000}, {0xb6d20000}, {0xb6d40000}, {0xb6d60000}, 
+    {0xb6d80000}, {0xb6da0000}, {0xb6dc0000}, {0xb6de0000}, 
+    {0xb6e00000}, {0xb6e20000}, {0xb6e40000}, {0xb6e60000}, 
+    {0xb6e80000}, {0xb6ea0000}, {0xb6ec0000}, {0xb6ee0000}, 
+    {0xb6f00000}, {0xb6f20000}, {0xb6f40000}, {0xb6f60000}, 
+    {0xb6f80000}, {0xb6fa0000}, {0xb6fc0000}, {0xb6fe0000}, 
+    {0xb7000000}, {0xb7010000}, {0xb7020000}, {0xb7030000}, 
+    {0xb7040000}, {0xb7050000}, {0xb7060000}, {0xb7070000}, 
+    {0xb7080000}, {0xb7090000}, {0xb70a0000}, {0xb70b0000}, 
+    {0xb70c0000}, {0xb70d0000}, {0xb70e0000}, {0xb70f0000}, 
+    {0xb7100000}, {0xb7110000}, {0xb7120000}, {0xb7130000}, 
+    {0xb7140000}, {0xb7150000}, {0xb7160000}, {0xb7170000}, 
+    {0xb7180000}, {0xb7190000}, {0xb71a0000}, {0xb71b0000}, 
+    {0xb71c0000}, {0xb71d0000}, {0xb71e0000}, {0xb71f0000}, 
+    {0xb7200000}, {0xb7210000}, {0xb7220000}, {0xb7230000}, 
+    {0xb7240000}, {0xb7250000}, {0xb7260000}, {0xb7270000}, 
+    {0xb7280000}, {0xb7290000}, {0xb72a0000}, {0xb72b0000}, 
+    {0xb72c0000}, {0xb72d0000}, {0xb72e0000}, {0xb72f0000}, 
+    {0xb7300000}, {0xb7310000}, {0xb7320000}, {0xb7330000}, 
+    {0xb7340000}, {0xb7350000}, {0xb7360000}, {0xb7370000}, 
+    {0xb7380000}, {0xb7390000}, {0xb73a0000}, {0xb73b0000}, 
+    {0xb73c0000}, {0xb73d0000}, {0xb73e0000}, {0xb73f0000}, 
+    {0xb7400000}, {0xb7410000}, {0xb7420000}, {0xb7430000}, 
+    {0xb7440000}, {0xb7450000}, {0xb7460000}, {0xb7470000}, 
+    {0xb7480000}, {0xb7490000}, {0xb74a0000}, {0xb74b0000}, 
+    {0xb74c0000}, {0xb74d0000}, {0xb74e0000}, {0xb74f0000}, 
+    {0xb7500000}, {0xb7510000}, {0xb7520000}, {0xb7530000}, 
+    {0xb7540000}, {0xb7550000}, {0xb7560000}, {0xb7570000}, 
+    {0xb7580000}, {0xb7590000}, {0xb75a0000}, {0xb75b0000}, 
+    {0xb75c0000}, {0xb75d0000}, {0xb75e0000}, {0xb75f0000}, 
+    {0xb7600000}, {0xb7610000}, {0xb7620000}, {0xb7630000}, 
+    {0xb7640000}, {0xb7650000}, {0xb7660000}, {0xb7670000}, 
+    {0xb7680000}, {0xb7690000}, {0xb76a0000}, {0xb76b0000}, 
+    {0xb76c0000}, {0xb76d0000}, {0xb76e0000}, {0xb76f0000}, 
+    {0xb7700000}, {0xb7710000}, {0xb7720000}, {0xb7730000}, 
+    {0xb7740000}, {0xb7750000}, {0xb7760000}, {0xb7770000}, 
+    {0xb7780000}, {0xb7790000}, {0xb77a0000}, {0xb77b0000}, 
+    {0xb77c0000}, {0xb77d0000}, {0xb77e0000}, {0xb77f0000}, 
+    {0xb7800000}, {0xb7808000}, {0xb7810000}, {0xb7818000}, 
+    {0xb7820000}, {0xb7828000}, {0xb7830000}, {0xb7838000}, 
+    {0xb7840000}, {0xb7848000}, {0xb7850000}, {0xb7858000}, 
+    {0xb7860000}, {0xb7868000}, {0xb7870000}, {0xb7878000}, 
+    {0xb7880000}, {0xb7888000}, {0xb7890000}, {0xb7898000}, 
+    {0xb78a0000}, {0xb78a8000}, {0xb78b0000}, {0xb78b8000}, 
+    {0xb78c0000}, {0xb78c8000}, {0xb78d0000}, {0xb78d8000}, 
+    {0xb78e0000}, {0xb78e8000}, {0xb78f0000}, {0xb78f8000}, 
+    {0xb7900000}, {0xb7908000}, {0xb7910000}, {0xb7918000}, 
+    {0xb7920000}, {0xb7928000}, {0xb7930000}, {0xb7938000}, 
+    {0xb7940000}, {0xb7948000}, {0xb7950000}, {0xb7958000}, 
+    {0xb7960000}, {0xb7968000}, {0xb7970000}, {0xb7978000}, 
+    {0xb7980000}, {0xb7988000}, {0xb7990000}, {0xb7998000}, 
+    {0xb79a0000}, {0xb79a8000}, {0xb79b0000}, {0xb79b8000}, 
+    {0xb79c0000}, {0xb79c8000}, {0xb79d0000}, {0xb79d8000}, 
+    {0xb79e0000}, {0xb79e8000}, {0xb79f0000}, {0xb79f8000}, 
+    {0xb7a00000}, {0xb7a08000}, {0xb7a10000}, {0xb7a18000}, 
+    {0xb7a20000}, {0xb7a28000}, {0xb7a30000}, {0xb7a38000}, 
+    {0xb7a40000}, {0xb7a48000}, {0xb7a50000}, {0xb7a58000}, 
+    {0xb7a60000}, {0xb7a68000}, {0xb7a70000}, {0xb7a78000}, 
+    {0xb7a80000}, {0xb7a88000}, {0xb7a90000}, {0xb7a98000}, 
+    {0xb7aa0000}, {0xb7aa8000}, {0xb7ab0000}, {0xb7ab8000}, 
+    {0xb7ac0000}, {0xb7ac8000}, {0xb7ad0000}, {0xb7ad8000}, 
+    {0xb7ae0000}, {0xb7ae8000}, {0xb7af0000}, {0xb7af8000}, 
+    {0xb7b00000}, {0xb7b08000}, {0xb7b10000}, {0xb7b18000}, 
+    {0xb7b20000}, {0xb7b28000}, {0xb7b30000}, {0xb7b38000}, 
+    {0xb7b40000}, {0xb7b48000}, {0xb7b50000}, {0xb7b58000}, 
+    {0xb7b60000}, {0xb7b68000}, {0xb7b70000}, {0xb7b78000}, 
+    {0xb7b80000}, {0xb7b88000}, {0xb7b90000}, {0xb7b98000}, 
+    {0xb7ba0000}, {0xb7ba8000}, {0xb7bb0000}, {0xb7bb8000}, 
+    {0xb7bc0000}, {0xb7bc8000}, {0xb7bd0000}, {0xb7bd8000}, 
+    {0xb7be0000}, {0xb7be8000}, {0xb7bf0000}, {0xb7bf8000}, 
+    {0xb7c00000}, {0xb7c08000}, {0xb7c10000}, {0xb7c18000}, 
+    {0xb7c20000}, {0xb7c28000}, {0xb7c30000}, {0xb7c38000}, 
+    {0xb7c40000}, {0xb7c48000}, {0xb7c50000}, {0xb7c58000}, 
+    {0xb7c60000}, {0xb7c68000}, {0xb7c70000}, {0xb7c78000}, 
+    {0xb7c80000}, {0xb7c88000}, {0xb7c90000}, {0xb7c98000}, 
+    {0xb7ca0000}, {0xb7ca8000}, {0xb7cb0000}, {0xb7cb8000}, 
+    {0xb7cc0000}, {0xb7cc8000}, {0xb7cd0000}, {0xb7cd8000}, 
+    {0xb7ce0000}, {0xb7ce8000}, {0xb7cf0000}, {0xb7cf8000}, 
+    {0xb7d00000}, {0xb7d08000}, {0xb7d10000}, {0xb7d18000}, 
+    {0xb7d20000}, {0xb7d28000}, {0xb7d30000}, {0xb7d38000}, 
+    {0xb7d40000}, {0xb7d48000}, {0xb7d50000}, {0xb7d58000}, 
+    {0xb7d60000}, {0xb7d68000}, {0xb7d70000}, {0xb7d78000}, 
+    {0xb7d80000}, {0xb7d88000}, {0xb7d90000}, {0xb7d98000}, 
+    {0xb7da0000}, {0xb7da8000}, {0xb7db0000}, {0xb7db8000}, 
+    {0xb7dc0000}, {0xb7dc8000}, {0xb7dd0000}, {0xb7dd8000}, 
+    {0xb7de0000}, {0xb7de8000}, {0xb7df0000}, {0xb7df8000}, 
+    {0xb7e00000}, {0xb7e08000}, {0xb7e10000}, {0xb7e18000}, 
+    {0xb7e20000}, {0xb7e28000}, {0xb7e30000}, {0xb7e38000}, 
+    {0xb7e40000}, {0xb7e48000}, {0xb7e50000}, {0xb7e58000}, 
+    {0xb7e60000}, {0xb7e68000}, {0xb7e70000}, {0xb7e78000}, 
+    {0xb7e80000}, {0xb7e88000}, {0xb7e90000}, {0xb7e98000}, 
+    {0xb7ea0000}, {0xb7ea8000}, {0xb7eb0000}, {0xb7eb8000}, 
+    {0xb7ec0000}, {0xb7ec8000}, {0xb7ed0000}, {0xb7ed8000}, 
+    {0xb7ee0000}, {0xb7ee8000}, {0xb7ef0000}, {0xb7ef8000}, 
+    {0xb7f00000}, {0xb7f08000}, {0xb7f10000}, {0xb7f18000}, 
+    {0xb7f20000}, {0xb7f28000}, {0xb7f30000}, {0xb7f38000}, 
+    {0xb7f40000}, {0xb7f48000}, {0xb7f50000}, {0xb7f58000}, 
+    {0xb7f60000}, {0xb7f68000}, {0xb7f70000}, {0xb7f78000}, 
+    {0xb7f80000}, {0xb7f88000}, {0xb7f90000}, {0xb7f98000}, 
+    {0xb7fa0000}, {0xb7fa8000}, {0xb7fb0000}, {0xb7fb8000}, 
+    {0xb7fc0000}, {0xb7fc8000}, {0xb7fd0000}, {0xb7fd8000}, 
+    {0xb7fe0000}, {0xb7fe8000}, {0xb7ff0000}, {0xb7ff8000}, 
+    {0xb8000000}, {0xb8004000}, {0xb8008000}, {0xb800c000}, 
+    {0xb8010000}, {0xb8014000}, {0xb8018000}, {0xb801c000}, 
+    {0xb8020000}, {0xb8024000}, {0xb8028000}, {0xb802c000}, 
+    {0xb8030000}, {0xb8034000}, {0xb8038000}, {0xb803c000}, 
+    {0xb8040000}, {0xb8044000}, {0xb8048000}, {0xb804c000}, 
+    {0xb8050000}, {0xb8054000}, {0xb8058000}, {0xb805c000}, 
+    {0xb8060000}, {0xb8064000}, {0xb8068000}, {0xb806c000}, 
+    {0xb8070000}, {0xb8074000}, {0xb8078000}, {0xb807c000}, 
+    {0xb8080000}, {0xb8084000}, {0xb8088000}, {0xb808c000}, 
+    {0xb8090000}, {0xb8094000}, {0xb8098000}, {0xb809c000}, 
+    {0xb80a0000}, {0xb80a4000}, {0xb80a8000}, {0xb80ac000}, 
+    {0xb80b0000}, {0xb80b4000}, {0xb80b8000}, {0xb80bc000}, 
+    {0xb80c0000}, {0xb80c4000}, {0xb80c8000}, {0xb80cc000}, 
+    {0xb80d0000}, {0xb80d4000}, {0xb80d8000}, {0xb80dc000}, 
+    {0xb80e0000}, {0xb80e4000}, {0xb80e8000}, {0xb80ec000}, 
+    {0xb80f0000}, {0xb80f4000}, {0xb80f8000}, {0xb80fc000}, 
+    {0xb8100000}, {0xb8104000}, {0xb8108000}, {0xb810c000}, 
+    {0xb8110000}, {0xb8114000}, {0xb8118000}, {0xb811c000}, 
+    {0xb8120000}, {0xb8124000}, {0xb8128000}, {0xb812c000}, 
+    {0xb8130000}, {0xb8134000}, {0xb8138000}, {0xb813c000}, 
+    {0xb8140000}, {0xb8144000}, {0xb8148000}, {0xb814c000}, 
+    {0xb8150000}, {0xb8154000}, {0xb8158000}, {0xb815c000}, 
+    {0xb8160000}, {0xb8164000}, {0xb8168000}, {0xb816c000}, 
+    {0xb8170000}, {0xb8174000}, {0xb8178000}, {0xb817c000}, 
+    {0xb8180000}, {0xb8184000}, {0xb8188000}, {0xb818c000}, 
+    {0xb8190000}, {0xb8194000}, {0xb8198000}, {0xb819c000}, 
+    {0xb81a0000}, {0xb81a4000}, {0xb81a8000}, {0xb81ac000}, 
+    {0xb81b0000}, {0xb81b4000}, {0xb81b8000}, {0xb81bc000}, 
+    {0xb81c0000}, {0xb81c4000}, {0xb81c8000}, {0xb81cc000}, 
+    {0xb81d0000}, {0xb81d4000}, {0xb81d8000}, {0xb81dc000}, 
+    {0xb81e0000}, {0xb81e4000}, {0xb81e8000}, {0xb81ec000}, 
+    {0xb81f0000}, {0xb81f4000}, {0xb81f8000}, {0xb81fc000}, 
+    {0xb8200000}, {0xb8204000}, {0xb8208000}, {0xb820c000}, 
+    {0xb8210000}, {0xb8214000}, {0xb8218000}, {0xb821c000}, 
+    {0xb8220000}, {0xb8224000}, {0xb8228000}, {0xb822c000}, 
+    {0xb8230000}, {0xb8234000}, {0xb8238000}, {0xb823c000}, 
+    {0xb8240000}, {0xb8244000}, {0xb8248000}, {0xb824c000}, 
+    {0xb8250000}, {0xb8254000}, {0xb8258000}, {0xb825c000}, 
+    {0xb8260000}, {0xb8264000}, {0xb8268000}, {0xb826c000}, 
+    {0xb8270000}, {0xb8274000}, {0xb8278000}, {0xb827c000}, 
+    {0xb8280000}, {0xb8284000}, {0xb8288000}, {0xb828c000}, 
+    {0xb8290000}, {0xb8294000}, {0xb8298000}, {0xb829c000}, 
+    {0xb82a0000}, {0xb82a4000}, {0xb82a8000}, {0xb82ac000}, 
+    {0xb82b0000}, {0xb82b4000}, {0xb82b8000}, {0xb82bc000}, 
+    {0xb82c0000}, {0xb82c4000}, {0xb82c8000}, {0xb82cc000}, 
+    {0xb82d0000}, {0xb82d4000}, {0xb82d8000}, {0xb82dc000}, 
+    {0xb82e0000}, {0xb82e4000}, {0xb82e8000}, {0xb82ec000}, 
+    {0xb82f0000}, {0xb82f4000}, {0xb82f8000}, {0xb82fc000}, 
+    {0xb8300000}, {0xb8304000}, {0xb8308000}, {0xb830c000}, 
+    {0xb8310000}, {0xb8314000}, {0xb8318000}, {0xb831c000}, 
+    {0xb8320000}, {0xb8324000}, {0xb8328000}, {0xb832c000}, 
+    {0xb8330000}, {0xb8334000}, {0xb8338000}, {0xb833c000}, 
+    {0xb8340000}, {0xb8344000}, {0xb8348000}, {0xb834c000}, 
+    {0xb8350000}, {0xb8354000}, {0xb8358000}, {0xb835c000}, 
+    {0xb8360000}, {0xb8364000}, {0xb8368000}, {0xb836c000}, 
+    {0xb8370000}, {0xb8374000}, {0xb8378000}, {0xb837c000}, 
+    {0xb8380000}, {0xb8384000}, {0xb8388000}, {0xb838c000}, 
+    {0xb8390000}, {0xb8394000}, {0xb8398000}, {0xb839c000}, 
+    {0xb83a0000}, {0xb83a4000}, {0xb83a8000}, {0xb83ac000}, 
+    {0xb83b0000}, {0xb83b4000}, {0xb83b8000}, {0xb83bc000}, 
+    {0xb83c0000}, {0xb83c4000}, {0xb83c8000}, {0xb83cc000}, 
+    {0xb83d0000}, {0xb83d4000}, {0xb83d8000}, {0xb83dc000}, 
+    {0xb83e0000}, {0xb83e4000}, {0xb83e8000}, {0xb83ec000}, 
+    {0xb83f0000}, {0xb83f4000}, {0xb83f8000}, {0xb83fc000}, 
+    {0xb8400000}, {0xb8404000}, {0xb8408000}, {0xb840c000}, 
+    {0xb8410000}, {0xb8414000}, {0xb8418000}, {0xb841c000}, 
+    {0xb8420000}, {0xb8424000}, {0xb8428000}, {0xb842c000}, 
+    {0xb8430000}, {0xb8434000}, {0xb8438000}, {0xb843c000}, 
+    {0xb8440000}, {0xb8444000}, {0xb8448000}, {0xb844c000}, 
+    {0xb8450000}, {0xb8454000}, {0xb8458000}, {0xb845c000}, 
+    {0xb8460000}, {0xb8464000}, {0xb8468000}, {0xb846c000}, 
+    {0xb8470000}, {0xb8474000}, {0xb8478000}, {0xb847c000}, 
+    {0xb8480000}, {0xb8484000}, {0xb8488000}, {0xb848c000}, 
+    {0xb8490000}, {0xb8494000}, {0xb8498000}, {0xb849c000}, 
+    {0xb84a0000}, {0xb84a4000}, {0xb84a8000}, {0xb84ac000}, 
+    {0xb84b0000}, {0xb84b4000}, {0xb84b8000}, {0xb84bc000}, 
+    {0xb84c0000}, {0xb84c4000}, {0xb84c8000}, {0xb84cc000}, 
+    {0xb84d0000}, {0xb84d4000}, {0xb84d8000}, {0xb84dc000}, 
+    {0xb84e0000}, {0xb84e4000}, {0xb84e8000}, {0xb84ec000}, 
+    {0xb84f0000}, {0xb84f4000}, {0xb84f8000}, {0xb84fc000}, 
+    {0xb8500000}, {0xb8504000}, {0xb8508000}, {0xb850c000}, 
+    {0xb8510000}, {0xb8514000}, {0xb8518000}, {0xb851c000}, 
+    {0xb8520000}, {0xb8524000}, {0xb8528000}, {0xb852c000}, 
+    {0xb8530000}, {0xb8534000}, {0xb8538000}, {0xb853c000}, 
+    {0xb8540000}, {0xb8544000}, {0xb8548000}, {0xb854c000}, 
+    {0xb8550000}, {0xb8554000}, {0xb8558000}, {0xb855c000}, 
+    {0xb8560000}, {0xb8564000}, {0xb8568000}, {0xb856c000}, 
+    {0xb8570000}, {0xb8574000}, {0xb8578000}, {0xb857c000}, 
+    {0xb8580000}, {0xb8584000}, {0xb8588000}, {0xb858c000}, 
+    {0xb8590000}, {0xb8594000}, {0xb8598000}, {0xb859c000}, 
+    {0xb85a0000}, {0xb85a4000}, {0xb85a8000}, {0xb85ac000}, 
+    {0xb85b0000}, {0xb85b4000}, {0xb85b8000}, {0xb85bc000}, 
+    {0xb85c0000}, {0xb85c4000}, {0xb85c8000}, {0xb85cc000}, 
+    {0xb85d0000}, {0xb85d4000}, {0xb85d8000}, {0xb85dc000}, 
+    {0xb85e0000}, {0xb85e4000}, {0xb85e8000}, {0xb85ec000}, 
+    {0xb85f0000}, {0xb85f4000}, {0xb85f8000}, {0xb85fc000}, 
+    {0xb8600000}, {0xb8604000}, {0xb8608000}, {0xb860c000}, 
+    {0xb8610000}, {0xb8614000}, {0xb8618000}, {0xb861c000}, 
+    {0xb8620000}, {0xb8624000}, {0xb8628000}, {0xb862c000}, 
+    {0xb8630000}, {0xb8634000}, {0xb8638000}, {0xb863c000}, 
+    {0xb8640000}, {0xb8644000}, {0xb8648000}, {0xb864c000}, 
+    {0xb8650000}, {0xb8654000}, {0xb8658000}, {0xb865c000}, 
+    {0xb8660000}, {0xb8664000}, {0xb8668000}, {0xb866c000}, 
+    {0xb8670000}, {0xb8674000}, {0xb8678000}, {0xb867c000}, 
+    {0xb8680000}, {0xb8684000}, {0xb8688000}, {0xb868c000}, 
+    {0xb8690000}, {0xb8694000}, {0xb8698000}, {0xb869c000}, 
+    {0xb86a0000}, {0xb86a4000}, {0xb86a8000}, {0xb86ac000}, 
+    {0xb86b0000}, {0xb86b4000}, {0xb86b8000}, {0xb86bc000}, 
+    {0xb86c0000}, {0xb86c4000}, {0xb86c8000}, {0xb86cc000}, 
+    {0xb86d0000}, {0xb86d4000}, {0xb86d8000}, {0xb86dc000}, 
+    {0xb86e0000}, {0xb86e4000}, {0xb86e8000}, {0xb86ec000}, 
+    {0xb86f0000}, {0xb86f4000}, {0xb86f8000}, {0xb86fc000}, 
+    {0xb8700000}, {0xb8704000}, {0xb8708000}, {0xb870c000}, 
+    {0xb8710000}, {0xb8714000}, {0xb8718000}, {0xb871c000}, 
+    {0xb8720000}, {0xb8724000}, {0xb8728000}, {0xb872c000}, 
+    {0xb8730000}, {0xb8734000}, {0xb8738000}, {0xb873c000}, 
+    {0xb8740000}, {0xb8744000}, {0xb8748000}, {0xb874c000}, 
+    {0xb8750000}, {0xb8754000}, {0xb8758000}, {0xb875c000}, 
+    {0xb8760000}, {0xb8764000}, {0xb8768000}, {0xb876c000}, 
+    {0xb8770000}, {0xb8774000}, {0xb8778000}, {0xb877c000}, 
+    {0xb8780000}, {0xb8784000}, {0xb8788000}, {0xb878c000}, 
+    {0xb8790000}, {0xb8794000}, {0xb8798000}, {0xb879c000}, 
+    {0xb87a0000}, {0xb87a4000}, {0xb87a8000}, {0xb87ac000}, 
+    {0xb87b0000}, {0xb87b4000}, {0xb87b8000}, {0xb87bc000}, 
+    {0xb87c0000}, {0xb87c4000}, {0xb87c8000}, {0xb87cc000}, 
+    {0xb87d0000}, {0xb87d4000}, {0xb87d8000}, {0xb87dc000}, 
+    {0xb87e0000}, {0xb87e4000}, {0xb87e8000}, {0xb87ec000}, 
+    {0xb87f0000}, {0xb87f4000}, {0xb87f8000}, {0xb87fc000}, 
+    {0xb8800000}, {0xb8802000}, {0xb8804000}, {0xb8806000}, 
+    {0xb8808000}, {0xb880a000}, {0xb880c000}, {0xb880e000}, 
+    {0xb8810000}, {0xb8812000}, {0xb8814000}, {0xb8816000}, 
+    {0xb8818000}, {0xb881a000}, {0xb881c000}, {0xb881e000}, 
+    {0xb8820000}, {0xb8822000}, {0xb8824000}, {0xb8826000}, 
+    {0xb8828000}, {0xb882a000}, {0xb882c000}, {0xb882e000}, 
+    {0xb8830000}, {0xb8832000}, {0xb8834000}, {0xb8836000}, 
+    {0xb8838000}, {0xb883a000}, {0xb883c000}, {0xb883e000}, 
+    {0xb8840000}, {0xb8842000}, {0xb8844000}, {0xb8846000}, 
+    {0xb8848000}, {0xb884a000}, {0xb884c000}, {0xb884e000}, 
+    {0xb8850000}, {0xb8852000}, {0xb8854000}, {0xb8856000}, 
+    {0xb8858000}, {0xb885a000}, {0xb885c000}, {0xb885e000}, 
+    {0xb8860000}, {0xb8862000}, {0xb8864000}, {0xb8866000}, 
+    {0xb8868000}, {0xb886a000}, {0xb886c000}, {0xb886e000}, 
+    {0xb8870000}, {0xb8872000}, {0xb8874000}, {0xb8876000}, 
+    {0xb8878000}, {0xb887a000}, {0xb887c000}, {0xb887e000}, 
+    {0xb8880000}, {0xb8882000}, {0xb8884000}, {0xb8886000}, 
+    {0xb8888000}, {0xb888a000}, {0xb888c000}, {0xb888e000}, 
+    {0xb8890000}, {0xb8892000}, {0xb8894000}, {0xb8896000}, 
+    {0xb8898000}, {0xb889a000}, {0xb889c000}, {0xb889e000}, 
+    {0xb88a0000}, {0xb88a2000}, {0xb88a4000}, {0xb88a6000}, 
+    {0xb88a8000}, {0xb88aa000}, {0xb88ac000}, {0xb88ae000}, 
+    {0xb88b0000}, {0xb88b2000}, {0xb88b4000}, {0xb88b6000}, 
+    {0xb88b8000}, {0xb88ba000}, {0xb88bc000}, {0xb88be000}, 
+    {0xb88c0000}, {0xb88c2000}, {0xb88c4000}, {0xb88c6000}, 
+    {0xb88c8000}, {0xb88ca000}, {0xb88cc000}, {0xb88ce000}, 
+    {0xb88d0000}, {0xb88d2000}, {0xb88d4000}, {0xb88d6000}, 
+    {0xb88d8000}, {0xb88da000}, {0xb88dc000}, {0xb88de000}, 
+    {0xb88e0000}, {0xb88e2000}, {0xb88e4000}, {0xb88e6000}, 
+    {0xb88e8000}, {0xb88ea000}, {0xb88ec000}, {0xb88ee000}, 
+    {0xb88f0000}, {0xb88f2000}, {0xb88f4000}, {0xb88f6000}, 
+    {0xb88f8000}, {0xb88fa000}, {0xb88fc000}, {0xb88fe000}, 
+    {0xb8900000}, {0xb8902000}, {0xb8904000}, {0xb8906000}, 
+    {0xb8908000}, {0xb890a000}, {0xb890c000}, {0xb890e000}, 
+    {0xb8910000}, {0xb8912000}, {0xb8914000}, {0xb8916000}, 
+    {0xb8918000}, {0xb891a000}, {0xb891c000}, {0xb891e000}, 
+    {0xb8920000}, {0xb8922000}, {0xb8924000}, {0xb8926000}, 
+    {0xb8928000}, {0xb892a000}, {0xb892c000}, {0xb892e000}, 
+    {0xb8930000}, {0xb8932000}, {0xb8934000}, {0xb8936000}, 
+    {0xb8938000}, {0xb893a000}, {0xb893c000}, {0xb893e000}, 
+    {0xb8940000}, {0xb8942000}, {0xb8944000}, {0xb8946000}, 
+    {0xb8948000}, {0xb894a000}, {0xb894c000}, {0xb894e000}, 
+    {0xb8950000}, {0xb8952000}, {0xb8954000}, {0xb8956000}, 
+    {0xb8958000}, {0xb895a000}, {0xb895c000}, {0xb895e000}, 
+    {0xb8960000}, {0xb8962000}, {0xb8964000}, {0xb8966000}, 
+    {0xb8968000}, {0xb896a000}, {0xb896c000}, {0xb896e000}, 
+    {0xb8970000}, {0xb8972000}, {0xb8974000}, {0xb8976000}, 
+    {0xb8978000}, {0xb897a000}, {0xb897c000}, {0xb897e000}, 
+    {0xb8980000}, {0xb8982000}, {0xb8984000}, {0xb8986000}, 
+    {0xb8988000}, {0xb898a000}, {0xb898c000}, {0xb898e000}, 
+    {0xb8990000}, {0xb8992000}, {0xb8994000}, {0xb8996000}, 
+    {0xb8998000}, {0xb899a000}, {0xb899c000}, {0xb899e000}, 
+    {0xb89a0000}, {0xb89a2000}, {0xb89a4000}, {0xb89a6000}, 
+    {0xb89a8000}, {0xb89aa000}, {0xb89ac000}, {0xb89ae000}, 
+    {0xb89b0000}, {0xb89b2000}, {0xb89b4000}, {0xb89b6000}, 
+    {0xb89b8000}, {0xb89ba000}, {0xb89bc000}, {0xb89be000}, 
+    {0xb89c0000}, {0xb89c2000}, {0xb89c4000}, {0xb89c6000}, 
+    {0xb89c8000}, {0xb89ca000}, {0xb89cc000}, {0xb89ce000}, 
+    {0xb89d0000}, {0xb89d2000}, {0xb89d4000}, {0xb89d6000}, 
+    {0xb89d8000}, {0xb89da000}, {0xb89dc000}, {0xb89de000}, 
+    {0xb89e0000}, {0xb89e2000}, {0xb89e4000}, {0xb89e6000}, 
+    {0xb89e8000}, {0xb89ea000}, {0xb89ec000}, {0xb89ee000}, 
+    {0xb89f0000}, {0xb89f2000}, {0xb89f4000}, {0xb89f6000}, 
+    {0xb89f8000}, {0xb89fa000}, {0xb89fc000}, {0xb89fe000}, 
+    {0xb8a00000}, {0xb8a02000}, {0xb8a04000}, {0xb8a06000}, 
+    {0xb8a08000}, {0xb8a0a000}, {0xb8a0c000}, {0xb8a0e000}, 
+    {0xb8a10000}, {0xb8a12000}, {0xb8a14000}, {0xb8a16000}, 
+    {0xb8a18000}, {0xb8a1a000}, {0xb8a1c000}, {0xb8a1e000}, 
+    {0xb8a20000}, {0xb8a22000}, {0xb8a24000}, {0xb8a26000}, 
+    {0xb8a28000}, {0xb8a2a000}, {0xb8a2c000}, {0xb8a2e000}, 
+    {0xb8a30000}, {0xb8a32000}, {0xb8a34000}, {0xb8a36000}, 
+    {0xb8a38000}, {0xb8a3a000}, {0xb8a3c000}, {0xb8a3e000}, 
+    {0xb8a40000}, {0xb8a42000}, {0xb8a44000}, {0xb8a46000}, 
+    {0xb8a48000}, {0xb8a4a000}, {0xb8a4c000}, {0xb8a4e000}, 
+    {0xb8a50000}, {0xb8a52000}, {0xb8a54000}, {0xb8a56000}, 
+    {0xb8a58000}, {0xb8a5a000}, {0xb8a5c000}, {0xb8a5e000}, 
+    {0xb8a60000}, {0xb8a62000}, {0xb8a64000}, {0xb8a66000}, 
+    {0xb8a68000}, {0xb8a6a000}, {0xb8a6c000}, {0xb8a6e000}, 
+    {0xb8a70000}, {0xb8a72000}, {0xb8a74000}, {0xb8a76000}, 
+    {0xb8a78000}, {0xb8a7a000}, {0xb8a7c000}, {0xb8a7e000}, 
+    {0xb8a80000}, {0xb8a82000}, {0xb8a84000}, {0xb8a86000}, 
+    {0xb8a88000}, {0xb8a8a000}, {0xb8a8c000}, {0xb8a8e000}, 
+    {0xb8a90000}, {0xb8a92000}, {0xb8a94000}, {0xb8a96000}, 
+    {0xb8a98000}, {0xb8a9a000}, {0xb8a9c000}, {0xb8a9e000}, 
+    {0xb8aa0000}, {0xb8aa2000}, {0xb8aa4000}, {0xb8aa6000}, 
+    {0xb8aa8000}, {0xb8aaa000}, {0xb8aac000}, {0xb8aae000}, 
+    {0xb8ab0000}, {0xb8ab2000}, {0xb8ab4000}, {0xb8ab6000}, 
+    {0xb8ab8000}, {0xb8aba000}, {0xb8abc000}, {0xb8abe000}, 
+    {0xb8ac0000}, {0xb8ac2000}, {0xb8ac4000}, {0xb8ac6000}, 
+    {0xb8ac8000}, {0xb8aca000}, {0xb8acc000}, {0xb8ace000}, 
+    {0xb8ad0000}, {0xb8ad2000}, {0xb8ad4000}, {0xb8ad6000}, 
+    {0xb8ad8000}, {0xb8ada000}, {0xb8adc000}, {0xb8ade000}, 
+    {0xb8ae0000}, {0xb8ae2000}, {0xb8ae4000}, {0xb8ae6000}, 
+    {0xb8ae8000}, {0xb8aea000}, {0xb8aec000}, {0xb8aee000}, 
+    {0xb8af0000}, {0xb8af2000}, {0xb8af4000}, {0xb8af6000}, 
+    {0xb8af8000}, {0xb8afa000}, {0xb8afc000}, {0xb8afe000}, 
+    {0xb8b00000}, {0xb8b02000}, {0xb8b04000}, {0xb8b06000}, 
+    {0xb8b08000}, {0xb8b0a000}, {0xb8b0c000}, {0xb8b0e000}, 
+    {0xb8b10000}, {0xb8b12000}, {0xb8b14000}, {0xb8b16000}, 
+    {0xb8b18000}, {0xb8b1a000}, {0xb8b1c000}, {0xb8b1e000}, 
+    {0xb8b20000}, {0xb8b22000}, {0xb8b24000}, {0xb8b26000}, 
+    {0xb8b28000}, {0xb8b2a000}, {0xb8b2c000}, {0xb8b2e000}, 
+    {0xb8b30000}, {0xb8b32000}, {0xb8b34000}, {0xb8b36000}, 
+    {0xb8b38000}, {0xb8b3a000}, {0xb8b3c000}, {0xb8b3e000}, 
+    {0xb8b40000}, {0xb8b42000}, {0xb8b44000}, {0xb8b46000}, 
+    {0xb8b48000}, {0xb8b4a000}, {0xb8b4c000}, {0xb8b4e000}, 
+    {0xb8b50000}, {0xb8b52000}, {0xb8b54000}, {0xb8b56000}, 
+    {0xb8b58000}, {0xb8b5a000}, {0xb8b5c000}, {0xb8b5e000}, 
+    {0xb8b60000}, {0xb8b62000}, {0xb8b64000}, {0xb8b66000}, 
+    {0xb8b68000}, {0xb8b6a000}, {0xb8b6c000}, {0xb8b6e000}, 
+    {0xb8b70000}, {0xb8b72000}, {0xb8b74000}, {0xb8b76000}, 
+    {0xb8b78000}, {0xb8b7a000}, {0xb8b7c000}, {0xb8b7e000}, 
+    {0xb8b80000}, {0xb8b82000}, {0xb8b84000}, {0xb8b86000}, 
+    {0xb8b88000}, {0xb8b8a000}, {0xb8b8c000}, {0xb8b8e000}, 
+    {0xb8b90000}, {0xb8b92000}, {0xb8b94000}, {0xb8b96000}, 
+    {0xb8b98000}, {0xb8b9a000}, {0xb8b9c000}, {0xb8b9e000}, 
+    {0xb8ba0000}, {0xb8ba2000}, {0xb8ba4000}, {0xb8ba6000}, 
+    {0xb8ba8000}, {0xb8baa000}, {0xb8bac000}, {0xb8bae000}, 
+    {0xb8bb0000}, {0xb8bb2000}, {0xb8bb4000}, {0xb8bb6000}, 
+    {0xb8bb8000}, {0xb8bba000}, {0xb8bbc000}, {0xb8bbe000}, 
+    {0xb8bc0000}, {0xb8bc2000}, {0xb8bc4000}, {0xb8bc6000}, 
+    {0xb8bc8000}, {0xb8bca000}, {0xb8bcc000}, {0xb8bce000}, 
+    {0xb8bd0000}, {0xb8bd2000}, {0xb8bd4000}, {0xb8bd6000}, 
+    {0xb8bd8000}, {0xb8bda000}, {0xb8bdc000}, {0xb8bde000}, 
+    {0xb8be0000}, {0xb8be2000}, {0xb8be4000}, {0xb8be6000}, 
+    {0xb8be8000}, {0xb8bea000}, {0xb8bec000}, {0xb8bee000}, 
+    {0xb8bf0000}, {0xb8bf2000}, {0xb8bf4000}, {0xb8bf6000}, 
+    {0xb8bf8000}, {0xb8bfa000}, {0xb8bfc000}, {0xb8bfe000}, 
+    {0xb8c00000}, {0xb8c02000}, {0xb8c04000}, {0xb8c06000}, 
+    {0xb8c08000}, {0xb8c0a000}, {0xb8c0c000}, {0xb8c0e000}, 
+    {0xb8c10000}, {0xb8c12000}, {0xb8c14000}, {0xb8c16000}, 
+    {0xb8c18000}, {0xb8c1a000}, {0xb8c1c000}, {0xb8c1e000}, 
+    {0xb8c20000}, {0xb8c22000}, {0xb8c24000}, {0xb8c26000}, 
+    {0xb8c28000}, {0xb8c2a000}, {0xb8c2c000}, {0xb8c2e000}, 
+    {0xb8c30000}, {0xb8c32000}, {0xb8c34000}, {0xb8c36000}, 
+    {0xb8c38000}, {0xb8c3a000}, {0xb8c3c000}, {0xb8c3e000}, 
+    {0xb8c40000}, {0xb8c42000}, {0xb8c44000}, {0xb8c46000}, 
+    {0xb8c48000}, {0xb8c4a000}, {0xb8c4c000}, {0xb8c4e000}, 
+    {0xb8c50000}, {0xb8c52000}, {0xb8c54000}, {0xb8c56000}, 
+    {0xb8c58000}, {0xb8c5a000}, {0xb8c5c000}, {0xb8c5e000}, 
+    {0xb8c60000}, {0xb8c62000}, {0xb8c64000}, {0xb8c66000}, 
+    {0xb8c68000}, {0xb8c6a000}, {0xb8c6c000}, {0xb8c6e000}, 
+    {0xb8c70000}, {0xb8c72000}, {0xb8c74000}, {0xb8c76000}, 
+    {0xb8c78000}, {0xb8c7a000}, {0xb8c7c000}, {0xb8c7e000}, 
+    {0xb8c80000}, {0xb8c82000}, {0xb8c84000}, {0xb8c86000}, 
+    {0xb8c88000}, {0xb8c8a000}, {0xb8c8c000}, {0xb8c8e000}, 
+    {0xb8c90000}, {0xb8c92000}, {0xb8c94000}, {0xb8c96000}, 
+    {0xb8c98000}, {0xb8c9a000}, {0xb8c9c000}, {0xb8c9e000}, 
+    {0xb8ca0000}, {0xb8ca2000}, {0xb8ca4000}, {0xb8ca6000}, 
+    {0xb8ca8000}, {0xb8caa000}, {0xb8cac000}, {0xb8cae000}, 
+    {0xb8cb0000}, {0xb8cb2000}, {0xb8cb4000}, {0xb8cb6000}, 
+    {0xb8cb8000}, {0xb8cba000}, {0xb8cbc000}, {0xb8cbe000}, 
+    {0xb8cc0000}, {0xb8cc2000}, {0xb8cc4000}, {0xb8cc6000}, 
+    {0xb8cc8000}, {0xb8cca000}, {0xb8ccc000}, {0xb8cce000}, 
+    {0xb8cd0000}, {0xb8cd2000}, {0xb8cd4000}, {0xb8cd6000}, 
+    {0xb8cd8000}, {0xb8cda000}, {0xb8cdc000}, {0xb8cde000}, 
+    {0xb8ce0000}, {0xb8ce2000}, {0xb8ce4000}, {0xb8ce6000}, 
+    {0xb8ce8000}, {0xb8cea000}, {0xb8cec000}, {0xb8cee000}, 
+    {0xb8cf0000}, {0xb8cf2000}, {0xb8cf4000}, {0xb8cf6000}, 
+    {0xb8cf8000}, {0xb8cfa000}, {0xb8cfc000}, {0xb8cfe000}, 
+    {0xb8d00000}, {0xb8d02000}, {0xb8d04000}, {0xb8d06000}, 
+    {0xb8d08000}, {0xb8d0a000}, {0xb8d0c000}, {0xb8d0e000}, 
+    {0xb8d10000}, {0xb8d12000}, {0xb8d14000}, {0xb8d16000}, 
+    {0xb8d18000}, {0xb8d1a000}, {0xb8d1c000}, {0xb8d1e000}, 
+    {0xb8d20000}, {0xb8d22000}, {0xb8d24000}, {0xb8d26000}, 
+    {0xb8d28000}, {0xb8d2a000}, {0xb8d2c000}, {0xb8d2e000}, 
+    {0xb8d30000}, {0xb8d32000}, {0xb8d34000}, {0xb8d36000}, 
+    {0xb8d38000}, {0xb8d3a000}, {0xb8d3c000}, {0xb8d3e000}, 
+    {0xb8d40000}, {0xb8d42000}, {0xb8d44000}, {0xb8d46000}, 
+    {0xb8d48000}, {0xb8d4a000}, {0xb8d4c000}, {0xb8d4e000}, 
+    {0xb8d50000}, {0xb8d52000}, {0xb8d54000}, {0xb8d56000}, 
+    {0xb8d58000}, {0xb8d5a000}, {0xb8d5c000}, {0xb8d5e000}, 
+    {0xb8d60000}, {0xb8d62000}, {0xb8d64000}, {0xb8d66000}, 
+    {0xb8d68000}, {0xb8d6a000}, {0xb8d6c000}, {0xb8d6e000}, 
+    {0xb8d70000}, {0xb8d72000}, {0xb8d74000}, {0xb8d76000}, 
+    {0xb8d78000}, {0xb8d7a000}, {0xb8d7c000}, {0xb8d7e000}, 
+    {0xb8d80000}, {0xb8d82000}, {0xb8d84000}, {0xb8d86000}, 
+    {0xb8d88000}, {0xb8d8a000}, {0xb8d8c000}, {0xb8d8e000}, 
+    {0xb8d90000}, {0xb8d92000}, {0xb8d94000}, {0xb8d96000}, 
+    {0xb8d98000}, {0xb8d9a000}, {0xb8d9c000}, {0xb8d9e000}, 
+    {0xb8da0000}, {0xb8da2000}, {0xb8da4000}, {0xb8da6000}, 
+    {0xb8da8000}, {0xb8daa000}, {0xb8dac000}, {0xb8dae000}, 
+    {0xb8db0000}, {0xb8db2000}, {0xb8db4000}, {0xb8db6000}, 
+    {0xb8db8000}, {0xb8dba000}, {0xb8dbc000}, {0xb8dbe000}, 
+    {0xb8dc0000}, {0xb8dc2000}, {0xb8dc4000}, {0xb8dc6000}, 
+    {0xb8dc8000}, {0xb8dca000}, {0xb8dcc000}, {0xb8dce000}, 
+    {0xb8dd0000}, {0xb8dd2000}, {0xb8dd4000}, {0xb8dd6000}, 
+    {0xb8dd8000}, {0xb8dda000}, {0xb8ddc000}, {0xb8dde000}, 
+    {0xb8de0000}, {0xb8de2000}, {0xb8de4000}, {0xb8de6000}, 
+    {0xb8de8000}, {0xb8dea000}, {0xb8dec000}, {0xb8dee000}, 
+    {0xb8df0000}, {0xb8df2000}, {0xb8df4000}, {0xb8df6000}, 
+    {0xb8df8000}, {0xb8dfa000}, {0xb8dfc000}, {0xb8dfe000}, 
+    {0xb8e00000}, {0xb8e02000}, {0xb8e04000}, {0xb8e06000}, 
+    {0xb8e08000}, {0xb8e0a000}, {0xb8e0c000}, {0xb8e0e000}, 
+    {0xb8e10000}, {0xb8e12000}, {0xb8e14000}, {0xb8e16000}, 
+    {0xb8e18000}, {0xb8e1a000}, {0xb8e1c000}, {0xb8e1e000}, 
+    {0xb8e20000}, {0xb8e22000}, {0xb8e24000}, {0xb8e26000}, 
+    {0xb8e28000}, {0xb8e2a000}, {0xb8e2c000}, {0xb8e2e000}, 
+    {0xb8e30000}, {0xb8e32000}, {0xb8e34000}, {0xb8e36000}, 
+    {0xb8e38000}, {0xb8e3a000}, {0xb8e3c000}, {0xb8e3e000}, 
+    {0xb8e40000}, {0xb8e42000}, {0xb8e44000}, {0xb8e46000}, 
+    {0xb8e48000}, {0xb8e4a000}, {0xb8e4c000}, {0xb8e4e000}, 
+    {0xb8e50000}, {0xb8e52000}, {0xb8e54000}, {0xb8e56000}, 
+    {0xb8e58000}, {0xb8e5a000}, {0xb8e5c000}, {0xb8e5e000}, 
+    {0xb8e60000}, {0xb8e62000}, {0xb8e64000}, {0xb8e66000}, 
+    {0xb8e68000}, {0xb8e6a000}, {0xb8e6c000}, {0xb8e6e000}, 
+    {0xb8e70000}, {0xb8e72000}, {0xb8e74000}, {0xb8e76000}, 
+    {0xb8e78000}, {0xb8e7a000}, {0xb8e7c000}, {0xb8e7e000}, 
+    {0xb8e80000}, {0xb8e82000}, {0xb8e84000}, {0xb8e86000}, 
+    {0xb8e88000}, {0xb8e8a000}, {0xb8e8c000}, {0xb8e8e000}, 
+    {0xb8e90000}, {0xb8e92000}, {0xb8e94000}, {0xb8e96000}, 
+    {0xb8e98000}, {0xb8e9a000}, {0xb8e9c000}, {0xb8e9e000}, 
+    {0xb8ea0000}, {0xb8ea2000}, {0xb8ea4000}, {0xb8ea6000}, 
+    {0xb8ea8000}, {0xb8eaa000}, {0xb8eac000}, {0xb8eae000}, 
+    {0xb8eb0000}, {0xb8eb2000}, {0xb8eb4000}, {0xb8eb6000}, 
+    {0xb8eb8000}, {0xb8eba000}, {0xb8ebc000}, {0xb8ebe000}, 
+    {0xb8ec0000}, {0xb8ec2000}, {0xb8ec4000}, {0xb8ec6000}, 
+    {0xb8ec8000}, {0xb8eca000}, {0xb8ecc000}, {0xb8ece000}, 
+    {0xb8ed0000}, {0xb8ed2000}, {0xb8ed4000}, {0xb8ed6000}, 
+    {0xb8ed8000}, {0xb8eda000}, {0xb8edc000}, {0xb8ede000}, 
+    {0xb8ee0000}, {0xb8ee2000}, {0xb8ee4000}, {0xb8ee6000}, 
+    {0xb8ee8000}, {0xb8eea000}, {0xb8eec000}, {0xb8eee000}, 
+    {0xb8ef0000}, {0xb8ef2000}, {0xb8ef4000}, {0xb8ef6000}, 
+    {0xb8ef8000}, {0xb8efa000}, {0xb8efc000}, {0xb8efe000}, 
+    {0xb8f00000}, {0xb8f02000}, {0xb8f04000}, {0xb8f06000}, 
+    {0xb8f08000}, {0xb8f0a000}, {0xb8f0c000}, {0xb8f0e000}, 
+    {0xb8f10000}, {0xb8f12000}, {0xb8f14000}, {0xb8f16000}, 
+    {0xb8f18000}, {0xb8f1a000}, {0xb8f1c000}, {0xb8f1e000}, 
+    {0xb8f20000}, {0xb8f22000}, {0xb8f24000}, {0xb8f26000}, 
+    {0xb8f28000}, {0xb8f2a000}, {0xb8f2c000}, {0xb8f2e000}, 
+    {0xb8f30000}, {0xb8f32000}, {0xb8f34000}, {0xb8f36000}, 
+    {0xb8f38000}, {0xb8f3a000}, {0xb8f3c000}, {0xb8f3e000}, 
+    {0xb8f40000}, {0xb8f42000}, {0xb8f44000}, {0xb8f46000}, 
+    {0xb8f48000}, {0xb8f4a000}, {0xb8f4c000}, {0xb8f4e000}, 
+    {0xb8f50000}, {0xb8f52000}, {0xb8f54000}, {0xb8f56000}, 
+    {0xb8f58000}, {0xb8f5a000}, {0xb8f5c000}, {0xb8f5e000}, 
+    {0xb8f60000}, {0xb8f62000}, {0xb8f64000}, {0xb8f66000}, 
+    {0xb8f68000}, {0xb8f6a000}, {0xb8f6c000}, {0xb8f6e000}, 
+    {0xb8f70000}, {0xb8f72000}, {0xb8f74000}, {0xb8f76000}, 
+    {0xb8f78000}, {0xb8f7a000}, {0xb8f7c000}, {0xb8f7e000}, 
+    {0xb8f80000}, {0xb8f82000}, {0xb8f84000}, {0xb8f86000}, 
+    {0xb8f88000}, {0xb8f8a000}, {0xb8f8c000}, {0xb8f8e000}, 
+    {0xb8f90000}, {0xb8f92000}, {0xb8f94000}, {0xb8f96000}, 
+    {0xb8f98000}, {0xb8f9a000}, {0xb8f9c000}, {0xb8f9e000}, 
+    {0xb8fa0000}, {0xb8fa2000}, {0xb8fa4000}, {0xb8fa6000}, 
+    {0xb8fa8000}, {0xb8faa000}, {0xb8fac000}, {0xb8fae000}, 
+    {0xb8fb0000}, {0xb8fb2000}, {0xb8fb4000}, {0xb8fb6000}, 
+    {0xb8fb8000}, {0xb8fba000}, {0xb8fbc000}, {0xb8fbe000}, 
+    {0xb8fc0000}, {0xb8fc2000}, {0xb8fc4000}, {0xb8fc6000}, 
+    {0xb8fc8000}, {0xb8fca000}, {0xb8fcc000}, {0xb8fce000}, 
+    {0xb8fd0000}, {0xb8fd2000}, {0xb8fd4000}, {0xb8fd6000}, 
+    {0xb8fd8000}, {0xb8fda000}, {0xb8fdc000}, {0xb8fde000}, 
+    {0xb8fe0000}, {0xb8fe2000}, {0xb8fe4000}, {0xb8fe6000}, 
+    {0xb8fe8000}, {0xb8fea000}, {0xb8fec000}, {0xb8fee000}, 
+    {0xb8ff0000}, {0xb8ff2000}, {0xb8ff4000}, {0xb8ff6000}, 
+    {0xb8ff8000}, {0xb8ffa000}, {0xb8ffc000}, {0xb8ffe000}, 
+    {0xb9000000}, {0xb9002000}, {0xb9004000}, {0xb9006000}, 
+    {0xb9008000}, {0xb900a000}, {0xb900c000}, {0xb900e000}, 
+    {0xb9010000}, {0xb9012000}, {0xb9014000}, {0xb9016000}, 
+    {0xb9018000}, {0xb901a000}, {0xb901c000}, {0xb901e000}, 
+    {0xb9020000}, {0xb9022000}, {0xb9024000}, {0xb9026000}, 
+    {0xb9028000}, {0xb902a000}, {0xb902c000}, {0xb902e000}, 
+    {0xb9030000}, {0xb9032000}, {0xb9034000}, {0xb9036000}, 
+    {0xb9038000}, {0xb903a000}, {0xb903c000}, {0xb903e000}, 
+    {0xb9040000}, {0xb9042000}, {0xb9044000}, {0xb9046000}, 
+    {0xb9048000}, {0xb904a000}, {0xb904c000}, {0xb904e000}, 
+    {0xb9050000}, {0xb9052000}, {0xb9054000}, {0xb9056000}, 
+    {0xb9058000}, {0xb905a000}, {0xb905c000}, {0xb905e000}, 
+    {0xb9060000}, {0xb9062000}, {0xb9064000}, {0xb9066000}, 
+    {0xb9068000}, {0xb906a000}, {0xb906c000}, {0xb906e000}, 
+    {0xb9070000}, {0xb9072000}, {0xb9074000}, {0xb9076000}, 
+    {0xb9078000}, {0xb907a000}, {0xb907c000}, {0xb907e000}, 
+    {0xb9080000}, {0xb9082000}, {0xb9084000}, {0xb9086000}, 
+    {0xb9088000}, {0xb908a000}, {0xb908c000}, {0xb908e000}, 
+    {0xb9090000}, {0xb9092000}, {0xb9094000}, {0xb9096000}, 
+    {0xb9098000}, {0xb909a000}, {0xb909c000}, {0xb909e000}, 
+    {0xb90a0000}, {0xb90a2000}, {0xb90a4000}, {0xb90a6000}, 
+    {0xb90a8000}, {0xb90aa000}, {0xb90ac000}, {0xb90ae000}, 
+    {0xb90b0000}, {0xb90b2000}, {0xb90b4000}, {0xb90b6000}, 
+    {0xb90b8000}, {0xb90ba000}, {0xb90bc000}, {0xb90be000}, 
+    {0xb90c0000}, {0xb90c2000}, {0xb90c4000}, {0xb90c6000}, 
+    {0xb90c8000}, {0xb90ca000}, {0xb90cc000}, {0xb90ce000}, 
+    {0xb90d0000}, {0xb90d2000}, {0xb90d4000}, {0xb90d6000}, 
+    {0xb90d8000}, {0xb90da000}, {0xb90dc000}, {0xb90de000}, 
+    {0xb90e0000}, {0xb90e2000}, {0xb90e4000}, {0xb90e6000}, 
+    {0xb90e8000}, {0xb90ea000}, {0xb90ec000}, {0xb90ee000}, 
+    {0xb90f0000}, {0xb90f2000}, {0xb90f4000}, {0xb90f6000}, 
+    {0xb90f8000}, {0xb90fa000}, {0xb90fc000}, {0xb90fe000}, 
+    {0xb9100000}, {0xb9102000}, {0xb9104000}, {0xb9106000}, 
+    {0xb9108000}, {0xb910a000}, {0xb910c000}, {0xb910e000}, 
+    {0xb9110000}, {0xb9112000}, {0xb9114000}, {0xb9116000}, 
+    {0xb9118000}, {0xb911a000}, {0xb911c000}, {0xb911e000}, 
+    {0xb9120000}, {0xb9122000}, {0xb9124000}, {0xb9126000}, 
+    {0xb9128000}, {0xb912a000}, {0xb912c000}, {0xb912e000}, 
+    {0xb9130000}, {0xb9132000}, {0xb9134000}, {0xb9136000}, 
+    {0xb9138000}, {0xb913a000}, {0xb913c000}, {0xb913e000}, 
+    {0xb9140000}, {0xb9142000}, {0xb9144000}, {0xb9146000}, 
+    {0xb9148000}, {0xb914a000}, {0xb914c000}, {0xb914e000}, 
+    {0xb9150000}, {0xb9152000}, {0xb9154000}, {0xb9156000}, 
+    {0xb9158000}, {0xb915a000}, {0xb915c000}, {0xb915e000}, 
+    {0xb9160000}, {0xb9162000}, {0xb9164000}, {0xb9166000}, 
+    {0xb9168000}, {0xb916a000}, {0xb916c000}, {0xb916e000}, 
+    {0xb9170000}, {0xb9172000}, {0xb9174000}, {0xb9176000}, 
+    {0xb9178000}, {0xb917a000}, {0xb917c000}, {0xb917e000}, 
+    {0xb9180000}, {0xb9182000}, {0xb9184000}, {0xb9186000}, 
+    {0xb9188000}, {0xb918a000}, {0xb918c000}, {0xb918e000}, 
+    {0xb9190000}, {0xb9192000}, {0xb9194000}, {0xb9196000}, 
+    {0xb9198000}, {0xb919a000}, {0xb919c000}, {0xb919e000}, 
+    {0xb91a0000}, {0xb91a2000}, {0xb91a4000}, {0xb91a6000}, 
+    {0xb91a8000}, {0xb91aa000}, {0xb91ac000}, {0xb91ae000}, 
+    {0xb91b0000}, {0xb91b2000}, {0xb91b4000}, {0xb91b6000}, 
+    {0xb91b8000}, {0xb91ba000}, {0xb91bc000}, {0xb91be000}, 
+    {0xb91c0000}, {0xb91c2000}, {0xb91c4000}, {0xb91c6000}, 
+    {0xb91c8000}, {0xb91ca000}, {0xb91cc000}, {0xb91ce000}, 
+    {0xb91d0000}, {0xb91d2000}, {0xb91d4000}, {0xb91d6000}, 
+    {0xb91d8000}, {0xb91da000}, {0xb91dc000}, {0xb91de000}, 
+    {0xb91e0000}, {0xb91e2000}, {0xb91e4000}, {0xb91e6000}, 
+    {0xb91e8000}, {0xb91ea000}, {0xb91ec000}, {0xb91ee000}, 
+    {0xb91f0000}, {0xb91f2000}, {0xb91f4000}, {0xb91f6000}, 
+    {0xb91f8000}, {0xb91fa000}, {0xb91fc000}, {0xb91fe000}, 
+    {0xb9200000}, {0xb9202000}, {0xb9204000}, {0xb9206000}, 
+    {0xb9208000}, {0xb920a000}, {0xb920c000}, {0xb920e000}, 
+    {0xb9210000}, {0xb9212000}, {0xb9214000}, {0xb9216000}, 
+    {0xb9218000}, {0xb921a000}, {0xb921c000}, {0xb921e000}, 
+    {0xb9220000}, {0xb9222000}, {0xb9224000}, {0xb9226000}, 
+    {0xb9228000}, {0xb922a000}, {0xb922c000}, {0xb922e000}, 
+    {0xb9230000}, {0xb9232000}, {0xb9234000}, {0xb9236000}, 
+    {0xb9238000}, {0xb923a000}, {0xb923c000}, {0xb923e000}, 
+    {0xb9240000}, {0xb9242000}, {0xb9244000}, {0xb9246000}, 
+    {0xb9248000}, {0xb924a000}, {0xb924c000}, {0xb924e000}, 
+    {0xb9250000}, {0xb9252000}, {0xb9254000}, {0xb9256000}, 
+    {0xb9258000}, {0xb925a000}, {0xb925c000}, {0xb925e000}, 
+    {0xb9260000}, {0xb9262000}, {0xb9264000}, {0xb9266000}, 
+    {0xb9268000}, {0xb926a000}, {0xb926c000}, {0xb926e000}, 
+    {0xb9270000}, {0xb9272000}, {0xb9274000}, {0xb9276000}, 
+    {0xb9278000}, {0xb927a000}, {0xb927c000}, {0xb927e000}, 
+    {0xb9280000}, {0xb9282000}, {0xb9284000}, {0xb9286000}, 
+    {0xb9288000}, {0xb928a000}, {0xb928c000}, {0xb928e000}, 
+    {0xb9290000}, {0xb9292000}, {0xb9294000}, {0xb9296000}, 
+    {0xb9298000}, {0xb929a000}, {0xb929c000}, {0xb929e000}, 
+    {0xb92a0000}, {0xb92a2000}, {0xb92a4000}, {0xb92a6000}, 
+    {0xb92a8000}, {0xb92aa000}, {0xb92ac000}, {0xb92ae000}, 
+    {0xb92b0000}, {0xb92b2000}, {0xb92b4000}, {0xb92b6000}, 
+    {0xb92b8000}, {0xb92ba000}, {0xb92bc000}, {0xb92be000}, 
+    {0xb92c0000}, {0xb92c2000}, {0xb92c4000}, {0xb92c6000}, 
+    {0xb92c8000}, {0xb92ca000}, {0xb92cc000}, {0xb92ce000}, 
+    {0xb92d0000}, {0xb92d2000}, {0xb92d4000}, {0xb92d6000}, 
+    {0xb92d8000}, {0xb92da000}, {0xb92dc000}, {0xb92de000}, 
+    {0xb92e0000}, {0xb92e2000}, {0xb92e4000}, {0xb92e6000}, 
+    {0xb92e8000}, {0xb92ea000}, {0xb92ec000}, {0xb92ee000}, 
+    {0xb92f0000}, {0xb92f2000}, {0xb92f4000}, {0xb92f6000}, 
+    {0xb92f8000}, {0xb92fa000}, {0xb92fc000}, {0xb92fe000}, 
+    {0xb9300000}, {0xb9302000}, {0xb9304000}, {0xb9306000}, 
+    {0xb9308000}, {0xb930a000}, {0xb930c000}, {0xb930e000}, 
+    {0xb9310000}, {0xb9312000}, {0xb9314000}, {0xb9316000}, 
+    {0xb9318000}, {0xb931a000}, {0xb931c000}, {0xb931e000}, 
+    {0xb9320000}, {0xb9322000}, {0xb9324000}, {0xb9326000}, 
+    {0xb9328000}, {0xb932a000}, {0xb932c000}, {0xb932e000}, 
+    {0xb9330000}, {0xb9332000}, {0xb9334000}, {0xb9336000}, 
+    {0xb9338000}, {0xb933a000}, {0xb933c000}, {0xb933e000}, 
+    {0xb9340000}, {0xb9342000}, {0xb9344000}, {0xb9346000}, 
+    {0xb9348000}, {0xb934a000}, {0xb934c000}, {0xb934e000}, 
+    {0xb9350000}, {0xb9352000}, {0xb9354000}, {0xb9356000}, 
+    {0xb9358000}, {0xb935a000}, {0xb935c000}, {0xb935e000}, 
+    {0xb9360000}, {0xb9362000}, {0xb9364000}, {0xb9366000}, 
+    {0xb9368000}, {0xb936a000}, {0xb936c000}, {0xb936e000}, 
+    {0xb9370000}, {0xb9372000}, {0xb9374000}, {0xb9376000}, 
+    {0xb9378000}, {0xb937a000}, {0xb937c000}, {0xb937e000}, 
+    {0xb9380000}, {0xb9382000}, {0xb9384000}, {0xb9386000}, 
+    {0xb9388000}, {0xb938a000}, {0xb938c000}, {0xb938e000}, 
+    {0xb9390000}, {0xb9392000}, {0xb9394000}, {0xb9396000}, 
+    {0xb9398000}, {0xb939a000}, {0xb939c000}, {0xb939e000}, 
+    {0xb93a0000}, {0xb93a2000}, {0xb93a4000}, {0xb93a6000}, 
+    {0xb93a8000}, {0xb93aa000}, {0xb93ac000}, {0xb93ae000}, 
+    {0xb93b0000}, {0xb93b2000}, {0xb93b4000}, {0xb93b6000}, 
+    {0xb93b8000}, {0xb93ba000}, {0xb93bc000}, {0xb93be000}, 
+    {0xb93c0000}, {0xb93c2000}, {0xb93c4000}, {0xb93c6000}, 
+    {0xb93c8000}, {0xb93ca000}, {0xb93cc000}, {0xb93ce000}, 
+    {0xb93d0000}, {0xb93d2000}, {0xb93d4000}, {0xb93d6000}, 
+    {0xb93d8000}, {0xb93da000}, {0xb93dc000}, {0xb93de000}, 
+    {0xb93e0000}, {0xb93e2000}, {0xb93e4000}, {0xb93e6000}, 
+    {0xb93e8000}, {0xb93ea000}, {0xb93ec000}, {0xb93ee000}, 
+    {0xb93f0000}, {0xb93f2000}, {0xb93f4000}, {0xb93f6000}, 
+    {0xb93f8000}, {0xb93fa000}, {0xb93fc000}, {0xb93fe000}, 
+    {0xb9400000}, {0xb9402000}, {0xb9404000}, {0xb9406000}, 
+    {0xb9408000}, {0xb940a000}, {0xb940c000}, {0xb940e000}, 
+    {0xb9410000}, {0xb9412000}, {0xb9414000}, {0xb9416000}, 
+    {0xb9418000}, {0xb941a000}, {0xb941c000}, {0xb941e000}, 
+    {0xb9420000}, {0xb9422000}, {0xb9424000}, {0xb9426000}, 
+    {0xb9428000}, {0xb942a000}, {0xb942c000}, {0xb942e000}, 
+    {0xb9430000}, {0xb9432000}, {0xb9434000}, {0xb9436000}, 
+    {0xb9438000}, {0xb943a000}, {0xb943c000}, {0xb943e000}, 
+    {0xb9440000}, {0xb9442000}, {0xb9444000}, {0xb9446000}, 
+    {0xb9448000}, {0xb944a000}, {0xb944c000}, {0xb944e000}, 
+    {0xb9450000}, {0xb9452000}, {0xb9454000}, {0xb9456000}, 
+    {0xb9458000}, {0xb945a000}, {0xb945c000}, {0xb945e000}, 
+    {0xb9460000}, {0xb9462000}, {0xb9464000}, {0xb9466000}, 
+    {0xb9468000}, {0xb946a000}, {0xb946c000}, {0xb946e000}, 
+    {0xb9470000}, {0xb9472000}, {0xb9474000}, {0xb9476000}, 
+    {0xb9478000}, {0xb947a000}, {0xb947c000}, {0xb947e000}, 
+    {0xb9480000}, {0xb9482000}, {0xb9484000}, {0xb9486000}, 
+    {0xb9488000}, {0xb948a000}, {0xb948c000}, {0xb948e000}, 
+    {0xb9490000}, {0xb9492000}, {0xb9494000}, {0xb9496000}, 
+    {0xb9498000}, {0xb949a000}, {0xb949c000}, {0xb949e000}, 
+    {0xb94a0000}, {0xb94a2000}, {0xb94a4000}, {0xb94a6000}, 
+    {0xb94a8000}, {0xb94aa000}, {0xb94ac000}, {0xb94ae000}, 
+    {0xb94b0000}, {0xb94b2000}, {0xb94b4000}, {0xb94b6000}, 
+    {0xb94b8000}, {0xb94ba000}, {0xb94bc000}, {0xb94be000}, 
+    {0xb94c0000}, {0xb94c2000}, {0xb94c4000}, {0xb94c6000}, 
+    {0xb94c8000}, {0xb94ca000}, {0xb94cc000}, {0xb94ce000}, 
+    {0xb94d0000}, {0xb94d2000}, {0xb94d4000}, {0xb94d6000}, 
+    {0xb94d8000}, {0xb94da000}, {0xb94dc000}, {0xb94de000}, 
+    {0xb94e0000}, {0xb94e2000}, {0xb94e4000}, {0xb94e6000}, 
+    {0xb94e8000}, {0xb94ea000}, {0xb94ec000}, {0xb94ee000}, 
+    {0xb94f0000}, {0xb94f2000}, {0xb94f4000}, {0xb94f6000}, 
+    {0xb94f8000}, {0xb94fa000}, {0xb94fc000}, {0xb94fe000}, 
+    {0xb9500000}, {0xb9502000}, {0xb9504000}, {0xb9506000}, 
+    {0xb9508000}, {0xb950a000}, {0xb950c000}, {0xb950e000}, 
+    {0xb9510000}, {0xb9512000}, {0xb9514000}, {0xb9516000}, 
+    {0xb9518000}, {0xb951a000}, {0xb951c000}, {0xb951e000}, 
+    {0xb9520000}, {0xb9522000}, {0xb9524000}, {0xb9526000}, 
+    {0xb9528000}, {0xb952a000}, {0xb952c000}, {0xb952e000}, 
+    {0xb9530000}, {0xb9532000}, {0xb9534000}, {0xb9536000}, 
+    {0xb9538000}, {0xb953a000}, {0xb953c000}, {0xb953e000}, 
+    {0xb9540000}, {0xb9542000}, {0xb9544000}, {0xb9546000}, 
+    {0xb9548000}, {0xb954a000}, {0xb954c000}, {0xb954e000}, 
+    {0xb9550000}, {0xb9552000}, {0xb9554000}, {0xb9556000}, 
+    {0xb9558000}, {0xb955a000}, {0xb955c000}, {0xb955e000}, 
+    {0xb9560000}, {0xb9562000}, {0xb9564000}, {0xb9566000}, 
+    {0xb9568000}, {0xb956a000}, {0xb956c000}, {0xb956e000}, 
+    {0xb9570000}, {0xb9572000}, {0xb9574000}, {0xb9576000}, 
+    {0xb9578000}, {0xb957a000}, {0xb957c000}, {0xb957e000}, 
+    {0xb9580000}, {0xb9582000}, {0xb9584000}, {0xb9586000}, 
+    {0xb9588000}, {0xb958a000}, {0xb958c000}, {0xb958e000}, 
+    {0xb9590000}, {0xb9592000}, {0xb9594000}, {0xb9596000}, 
+    {0xb9598000}, {0xb959a000}, {0xb959c000}, {0xb959e000}, 
+    {0xb95a0000}, {0xb95a2000}, {0xb95a4000}, {0xb95a6000}, 
+    {0xb95a8000}, {0xb95aa000}, {0xb95ac000}, {0xb95ae000}, 
+    {0xb95b0000}, {0xb95b2000}, {0xb95b4000}, {0xb95b6000}, 
+    {0xb95b8000}, {0xb95ba000}, {0xb95bc000}, {0xb95be000}, 
+    {0xb95c0000}, {0xb95c2000}, {0xb95c4000}, {0xb95c6000}, 
+    {0xb95c8000}, {0xb95ca000}, {0xb95cc000}, {0xb95ce000}, 
+    {0xb95d0000}, {0xb95d2000}, {0xb95d4000}, {0xb95d6000}, 
+    {0xb95d8000}, {0xb95da000}, {0xb95dc000}, {0xb95de000}, 
+    {0xb95e0000}, {0xb95e2000}, {0xb95e4000}, {0xb95e6000}, 
+    {0xb95e8000}, {0xb95ea000}, {0xb95ec000}, {0xb95ee000}, 
+    {0xb95f0000}, {0xb95f2000}, {0xb95f4000}, {0xb95f6000}, 
+    {0xb95f8000}, {0xb95fa000}, {0xb95fc000}, {0xb95fe000}, 
+    {0xb9600000}, {0xb9602000}, {0xb9604000}, {0xb9606000}, 
+    {0xb9608000}, {0xb960a000}, {0xb960c000}, {0xb960e000}, 
+    {0xb9610000}, {0xb9612000}, {0xb9614000}, {0xb9616000}, 
+    {0xb9618000}, {0xb961a000}, {0xb961c000}, {0xb961e000}, 
+    {0xb9620000}, {0xb9622000}, {0xb9624000}, {0xb9626000}, 
+    {0xb9628000}, {0xb962a000}, {0xb962c000}, {0xb962e000}, 
+    {0xb9630000}, {0xb9632000}, {0xb9634000}, {0xb9636000}, 
+    {0xb9638000}, {0xb963a000}, {0xb963c000}, {0xb963e000}, 
+    {0xb9640000}, {0xb9642000}, {0xb9644000}, {0xb9646000}, 
+    {0xb9648000}, {0xb964a000}, {0xb964c000}, {0xb964e000}, 
+    {0xb9650000}, {0xb9652000}, {0xb9654000}, {0xb9656000}, 
+    {0xb9658000}, {0xb965a000}, {0xb965c000}, {0xb965e000}, 
+    {0xb9660000}, {0xb9662000}, {0xb9664000}, {0xb9666000}, 
+    {0xb9668000}, {0xb966a000}, {0xb966c000}, {0xb966e000}, 
+    {0xb9670000}, {0xb9672000}, {0xb9674000}, {0xb9676000}, 
+    {0xb9678000}, {0xb967a000}, {0xb967c000}, {0xb967e000}, 
+    {0xb9680000}, {0xb9682000}, {0xb9684000}, {0xb9686000}, 
+    {0xb9688000}, {0xb968a000}, {0xb968c000}, {0xb968e000}, 
+    {0xb9690000}, {0xb9692000}, {0xb9694000}, {0xb9696000}, 
+    {0xb9698000}, {0xb969a000}, {0xb969c000}, {0xb969e000}, 
+    {0xb96a0000}, {0xb96a2000}, {0xb96a4000}, {0xb96a6000}, 
+    {0xb96a8000}, {0xb96aa000}, {0xb96ac000}, {0xb96ae000}, 
+    {0xb96b0000}, {0xb96b2000}, {0xb96b4000}, {0xb96b6000}, 
+    {0xb96b8000}, {0xb96ba000}, {0xb96bc000}, {0xb96be000}, 
+    {0xb96c0000}, {0xb96c2000}, {0xb96c4000}, {0xb96c6000}, 
+    {0xb96c8000}, {0xb96ca000}, {0xb96cc000}, {0xb96ce000}, 
+    {0xb96d0000}, {0xb96d2000}, {0xb96d4000}, {0xb96d6000}, 
+    {0xb96d8000}, {0xb96da000}, {0xb96dc000}, {0xb96de000}, 
+    {0xb96e0000}, {0xb96e2000}, {0xb96e4000}, {0xb96e6000}, 
+    {0xb96e8000}, {0xb96ea000}, {0xb96ec000}, {0xb96ee000}, 
+    {0xb96f0000}, {0xb96f2000}, {0xb96f4000}, {0xb96f6000}, 
+    {0xb96f8000}, {0xb96fa000}, {0xb96fc000}, {0xb96fe000}, 
+    {0xb9700000}, {0xb9702000}, {0xb9704000}, {0xb9706000}, 
+    {0xb9708000}, {0xb970a000}, {0xb970c000}, {0xb970e000}, 
+    {0xb9710000}, {0xb9712000}, {0xb9714000}, {0xb9716000}, 
+    {0xb9718000}, {0xb971a000}, {0xb971c000}, {0xb971e000}, 
+    {0xb9720000}, {0xb9722000}, {0xb9724000}, {0xb9726000}, 
+    {0xb9728000}, {0xb972a000}, {0xb972c000}, {0xb972e000}, 
+    {0xb9730000}, {0xb9732000}, {0xb9734000}, {0xb9736000}, 
+    {0xb9738000}, {0xb973a000}, {0xb973c000}, {0xb973e000}, 
+    {0xb9740000}, {0xb9742000}, {0xb9744000}, {0xb9746000}, 
+    {0xb9748000}, {0xb974a000}, {0xb974c000}, {0xb974e000}, 
+    {0xb9750000}, {0xb9752000}, {0xb9754000}, {0xb9756000}, 
+    {0xb9758000}, {0xb975a000}, {0xb975c000}, {0xb975e000}, 
+    {0xb9760000}, {0xb9762000}, {0xb9764000}, {0xb9766000}, 
+    {0xb9768000}, {0xb976a000}, {0xb976c000}, {0xb976e000}, 
+    {0xb9770000}, {0xb9772000}, {0xb9774000}, {0xb9776000}, 
+    {0xb9778000}, {0xb977a000}, {0xb977c000}, {0xb977e000}, 
+    {0xb9780000}, {0xb9782000}, {0xb9784000}, {0xb9786000}, 
+    {0xb9788000}, {0xb978a000}, {0xb978c000}, {0xb978e000}, 
+    {0xb9790000}, {0xb9792000}, {0xb9794000}, {0xb9796000}, 
+    {0xb9798000}, {0xb979a000}, {0xb979c000}, {0xb979e000}, 
+    {0xb97a0000}, {0xb97a2000}, {0xb97a4000}, {0xb97a6000}, 
+    {0xb97a8000}, {0xb97aa000}, {0xb97ac000}, {0xb97ae000}, 
+    {0xb97b0000}, {0xb97b2000}, {0xb97b4000}, {0xb97b6000}, 
+    {0xb97b8000}, {0xb97ba000}, {0xb97bc000}, {0xb97be000}, 
+    {0xb97c0000}, {0xb97c2000}, {0xb97c4000}, {0xb97c6000}, 
+    {0xb97c8000}, {0xb97ca000}, {0xb97cc000}, {0xb97ce000}, 
+    {0xb97d0000}, {0xb97d2000}, {0xb97d4000}, {0xb97d6000}, 
+    {0xb97d8000}, {0xb97da000}, {0xb97dc000}, {0xb97de000}, 
+    {0xb97e0000}, {0xb97e2000}, {0xb97e4000}, {0xb97e6000}, 
+    {0xb97e8000}, {0xb97ea000}, {0xb97ec000}, {0xb97ee000}, 
+    {0xb97f0000}, {0xb97f2000}, {0xb97f4000}, {0xb97f6000}, 
+    {0xb97f8000}, {0xb97fa000}, {0xb97fc000}, {0xb97fe000}, 
+    {0xb9800000}, {0xb9802000}, {0xb9804000}, {0xb9806000}, 
+    {0xb9808000}, {0xb980a000}, {0xb980c000}, {0xb980e000}, 
+    {0xb9810000}, {0xb9812000}, {0xb9814000}, {0xb9816000}, 
+    {0xb9818000}, {0xb981a000}, {0xb981c000}, {0xb981e000}, 
+    {0xb9820000}, {0xb9822000}, {0xb9824000}, {0xb9826000}, 
+    {0xb9828000}, {0xb982a000}, {0xb982c000}, {0xb982e000}, 
+    {0xb9830000}, {0xb9832000}, {0xb9834000}, {0xb9836000}, 
+    {0xb9838000}, {0xb983a000}, {0xb983c000}, {0xb983e000}, 
+    {0xb9840000}, {0xb9842000}, {0xb9844000}, {0xb9846000}, 
+    {0xb9848000}, {0xb984a000}, {0xb984c000}, {0xb984e000}, 
+    {0xb9850000}, {0xb9852000}, {0xb9854000}, {0xb9856000}, 
+    {0xb9858000}, {0xb985a000}, {0xb985c000}, {0xb985e000}, 
+    {0xb9860000}, {0xb9862000}, {0xb9864000}, {0xb9866000}, 
+    {0xb9868000}, {0xb986a000}, {0xb986c000}, {0xb986e000}, 
+    {0xb9870000}, {0xb9872000}, {0xb9874000}, {0xb9876000}, 
+    {0xb9878000}, {0xb987a000}, {0xb987c000}, {0xb987e000}, 
+    {0xb9880000}, {0xb9882000}, {0xb9884000}, {0xb9886000}, 
+    {0xb9888000}, {0xb988a000}, {0xb988c000}, {0xb988e000}, 
+    {0xb9890000}, {0xb9892000}, {0xb9894000}, {0xb9896000}, 
+    {0xb9898000}, {0xb989a000}, {0xb989c000}, {0xb989e000}, 
+    {0xb98a0000}, {0xb98a2000}, {0xb98a4000}, {0xb98a6000}, 
+    {0xb98a8000}, {0xb98aa000}, {0xb98ac000}, {0xb98ae000}, 
+    {0xb98b0000}, {0xb98b2000}, {0xb98b4000}, {0xb98b6000}, 
+    {0xb98b8000}, {0xb98ba000}, {0xb98bc000}, {0xb98be000}, 
+    {0xb98c0000}, {0xb98c2000}, {0xb98c4000}, {0xb98c6000}, 
+    {0xb98c8000}, {0xb98ca000}, {0xb98cc000}, {0xb98ce000}, 
+    {0xb98d0000}, {0xb98d2000}, {0xb98d4000}, {0xb98d6000}, 
+    {0xb98d8000}, {0xb98da000}, {0xb98dc000}, {0xb98de000}, 
+    {0xb98e0000}, {0xb98e2000}, {0xb98e4000}, {0xb98e6000}, 
+    {0xb98e8000}, {0xb98ea000}, {0xb98ec000}, {0xb98ee000}, 
+    {0xb98f0000}, {0xb98f2000}, {0xb98f4000}, {0xb98f6000}, 
+    {0xb98f8000}, {0xb98fa000}, {0xb98fc000}, {0xb98fe000}, 
+    {0xb9900000}, {0xb9902000}, {0xb9904000}, {0xb9906000}, 
+    {0xb9908000}, {0xb990a000}, {0xb990c000}, {0xb990e000}, 
+    {0xb9910000}, {0xb9912000}, {0xb9914000}, {0xb9916000}, 
+    {0xb9918000}, {0xb991a000}, {0xb991c000}, {0xb991e000}, 
+    {0xb9920000}, {0xb9922000}, {0xb9924000}, {0xb9926000}, 
+    {0xb9928000}, {0xb992a000}, {0xb992c000}, {0xb992e000}, 
+    {0xb9930000}, {0xb9932000}, {0xb9934000}, {0xb9936000}, 
+    {0xb9938000}, {0xb993a000}, {0xb993c000}, {0xb993e000}, 
+    {0xb9940000}, {0xb9942000}, {0xb9944000}, {0xb9946000}, 
+    {0xb9948000}, {0xb994a000}, {0xb994c000}, {0xb994e000}, 
+    {0xb9950000}, {0xb9952000}, {0xb9954000}, {0xb9956000}, 
+    {0xb9958000}, {0xb995a000}, {0xb995c000}, {0xb995e000}, 
+    {0xb9960000}, {0xb9962000}, {0xb9964000}, {0xb9966000}, 
+    {0xb9968000}, {0xb996a000}, {0xb996c000}, {0xb996e000}, 
+    {0xb9970000}, {0xb9972000}, {0xb9974000}, {0xb9976000}, 
+    {0xb9978000}, {0xb997a000}, {0xb997c000}, {0xb997e000}, 
+    {0xb9980000}, {0xb9982000}, {0xb9984000}, {0xb9986000}, 
+    {0xb9988000}, {0xb998a000}, {0xb998c000}, {0xb998e000}, 
+    {0xb9990000}, {0xb9992000}, {0xb9994000}, {0xb9996000}, 
+    {0xb9998000}, {0xb999a000}, {0xb999c000}, {0xb999e000}, 
+    {0xb99a0000}, {0xb99a2000}, {0xb99a4000}, {0xb99a6000}, 
+    {0xb99a8000}, {0xb99aa000}, {0xb99ac000}, {0xb99ae000}, 
+    {0xb99b0000}, {0xb99b2000}, {0xb99b4000}, {0xb99b6000}, 
+    {0xb99b8000}, {0xb99ba000}, {0xb99bc000}, {0xb99be000}, 
+    {0xb99c0000}, {0xb99c2000}, {0xb99c4000}, {0xb99c6000}, 
+    {0xb99c8000}, {0xb99ca000}, {0xb99cc000}, {0xb99ce000}, 
+    {0xb99d0000}, {0xb99d2000}, {0xb99d4000}, {0xb99d6000}, 
+    {0xb99d8000}, {0xb99da000}, {0xb99dc000}, {0xb99de000}, 
+    {0xb99e0000}, {0xb99e2000}, {0xb99e4000}, {0xb99e6000}, 
+    {0xb99e8000}, {0xb99ea000}, {0xb99ec000}, {0xb99ee000}, 
+    {0xb99f0000}, {0xb99f2000}, {0xb99f4000}, {0xb99f6000}, 
+    {0xb99f8000}, {0xb99fa000}, {0xb99fc000}, {0xb99fe000}, 
+    {0xb9a00000}, {0xb9a02000}, {0xb9a04000}, {0xb9a06000}, 
+    {0xb9a08000}, {0xb9a0a000}, {0xb9a0c000}, {0xb9a0e000}, 
+    {0xb9a10000}, {0xb9a12000}, {0xb9a14000}, {0xb9a16000}, 
+    {0xb9a18000}, {0xb9a1a000}, {0xb9a1c000}, {0xb9a1e000}, 
+    {0xb9a20000}, {0xb9a22000}, {0xb9a24000}, {0xb9a26000}, 
+    {0xb9a28000}, {0xb9a2a000}, {0xb9a2c000}, {0xb9a2e000}, 
+    {0xb9a30000}, {0xb9a32000}, {0xb9a34000}, {0xb9a36000}, 
+    {0xb9a38000}, {0xb9a3a000}, {0xb9a3c000}, {0xb9a3e000}, 
+    {0xb9a40000}, {0xb9a42000}, {0xb9a44000}, {0xb9a46000}, 
+    {0xb9a48000}, {0xb9a4a000}, {0xb9a4c000}, {0xb9a4e000}, 
+    {0xb9a50000}, {0xb9a52000}, {0xb9a54000}, {0xb9a56000}, 
+    {0xb9a58000}, {0xb9a5a000}, {0xb9a5c000}, {0xb9a5e000}, 
+    {0xb9a60000}, {0xb9a62000}, {0xb9a64000}, {0xb9a66000}, 
+    {0xb9a68000}, {0xb9a6a000}, {0xb9a6c000}, {0xb9a6e000}, 
+    {0xb9a70000}, {0xb9a72000}, {0xb9a74000}, {0xb9a76000}, 
+    {0xb9a78000}, {0xb9a7a000}, {0xb9a7c000}, {0xb9a7e000}, 
+    {0xb9a80000}, {0xb9a82000}, {0xb9a84000}, {0xb9a86000}, 
+    {0xb9a88000}, {0xb9a8a000}, {0xb9a8c000}, {0xb9a8e000}, 
+    {0xb9a90000}, {0xb9a92000}, {0xb9a94000}, {0xb9a96000}, 
+    {0xb9a98000}, {0xb9a9a000}, {0xb9a9c000}, {0xb9a9e000}, 
+    {0xb9aa0000}, {0xb9aa2000}, {0xb9aa4000}, {0xb9aa6000}, 
+    {0xb9aa8000}, {0xb9aaa000}, {0xb9aac000}, {0xb9aae000}, 
+    {0xb9ab0000}, {0xb9ab2000}, {0xb9ab4000}, {0xb9ab6000}, 
+    {0xb9ab8000}, {0xb9aba000}, {0xb9abc000}, {0xb9abe000}, 
+    {0xb9ac0000}, {0xb9ac2000}, {0xb9ac4000}, {0xb9ac6000}, 
+    {0xb9ac8000}, {0xb9aca000}, {0xb9acc000}, {0xb9ace000}, 
+    {0xb9ad0000}, {0xb9ad2000}, {0xb9ad4000}, {0xb9ad6000}, 
+    {0xb9ad8000}, {0xb9ada000}, {0xb9adc000}, {0xb9ade000}, 
+    {0xb9ae0000}, {0xb9ae2000}, {0xb9ae4000}, {0xb9ae6000}, 
+    {0xb9ae8000}, {0xb9aea000}, {0xb9aec000}, {0xb9aee000}, 
+    {0xb9af0000}, {0xb9af2000}, {0xb9af4000}, {0xb9af6000}, 
+    {0xb9af8000}, {0xb9afa000}, {0xb9afc000}, {0xb9afe000}, 
+    {0xb9b00000}, {0xb9b02000}, {0xb9b04000}, {0xb9b06000}, 
+    {0xb9b08000}, {0xb9b0a000}, {0xb9b0c000}, {0xb9b0e000}, 
+    {0xb9b10000}, {0xb9b12000}, {0xb9b14000}, {0xb9b16000}, 
+    {0xb9b18000}, {0xb9b1a000}, {0xb9b1c000}, {0xb9b1e000}, 
+    {0xb9b20000}, {0xb9b22000}, {0xb9b24000}, {0xb9b26000}, 
+    {0xb9b28000}, {0xb9b2a000}, {0xb9b2c000}, {0xb9b2e000}, 
+    {0xb9b30000}, {0xb9b32000}, {0xb9b34000}, {0xb9b36000}, 
+    {0xb9b38000}, {0xb9b3a000}, {0xb9b3c000}, {0xb9b3e000}, 
+    {0xb9b40000}, {0xb9b42000}, {0xb9b44000}, {0xb9b46000}, 
+    {0xb9b48000}, {0xb9b4a000}, {0xb9b4c000}, {0xb9b4e000}, 
+    {0xb9b50000}, {0xb9b52000}, {0xb9b54000}, {0xb9b56000}, 
+    {0xb9b58000}, {0xb9b5a000}, {0xb9b5c000}, {0xb9b5e000}, 
+    {0xb9b60000}, {0xb9b62000}, {0xb9b64000}, {0xb9b66000}, 
+    {0xb9b68000}, {0xb9b6a000}, {0xb9b6c000}, {0xb9b6e000}, 
+    {0xb9b70000}, {0xb9b72000}, {0xb9b74000}, {0xb9b76000}, 
+    {0xb9b78000}, {0xb9b7a000}, {0xb9b7c000}, {0xb9b7e000}, 
+    {0xb9b80000}, {0xb9b82000}, {0xb9b84000}, {0xb9b86000}, 
+    {0xb9b88000}, {0xb9b8a000}, {0xb9b8c000}, {0xb9b8e000}, 
+    {0xb9b90000}, {0xb9b92000}, {0xb9b94000}, {0xb9b96000}, 
+    {0xb9b98000}, {0xb9b9a000}, {0xb9b9c000}, {0xb9b9e000}, 
+    {0xb9ba0000}, {0xb9ba2000}, {0xb9ba4000}, {0xb9ba6000}, 
+    {0xb9ba8000}, {0xb9baa000}, {0xb9bac000}, {0xb9bae000}, 
+    {0xb9bb0000}, {0xb9bb2000}, {0xb9bb4000}, {0xb9bb6000}, 
+    {0xb9bb8000}, {0xb9bba000}, {0xb9bbc000}, {0xb9bbe000}, 
+    {0xb9bc0000}, {0xb9bc2000}, {0xb9bc4000}, {0xb9bc6000}, 
+    {0xb9bc8000}, {0xb9bca000}, {0xb9bcc000}, {0xb9bce000}, 
+    {0xb9bd0000}, {0xb9bd2000}, {0xb9bd4000}, {0xb9bd6000}, 
+    {0xb9bd8000}, {0xb9bda000}, {0xb9bdc000}, {0xb9bde000}, 
+    {0xb9be0000}, {0xb9be2000}, {0xb9be4000}, {0xb9be6000}, 
+    {0xb9be8000}, {0xb9bea000}, {0xb9bec000}, {0xb9bee000}, 
+    {0xb9bf0000}, {0xb9bf2000}, {0xb9bf4000}, {0xb9bf6000}, 
+    {0xb9bf8000}, {0xb9bfa000}, {0xb9bfc000}, {0xb9bfe000}, 
+    {0xb9c00000}, {0xb9c02000}, {0xb9c04000}, {0xb9c06000}, 
+    {0xb9c08000}, {0xb9c0a000}, {0xb9c0c000}, {0xb9c0e000}, 
+    {0xb9c10000}, {0xb9c12000}, {0xb9c14000}, {0xb9c16000}, 
+    {0xb9c18000}, {0xb9c1a000}, {0xb9c1c000}, {0xb9c1e000}, 
+    {0xb9c20000}, {0xb9c22000}, {0xb9c24000}, {0xb9c26000}, 
+    {0xb9c28000}, {0xb9c2a000}, {0xb9c2c000}, {0xb9c2e000}, 
+    {0xb9c30000}, {0xb9c32000}, {0xb9c34000}, {0xb9c36000}, 
+    {0xb9c38000}, {0xb9c3a000}, {0xb9c3c000}, {0xb9c3e000}, 
+    {0xb9c40000}, {0xb9c42000}, {0xb9c44000}, {0xb9c46000}, 
+    {0xb9c48000}, {0xb9c4a000}, {0xb9c4c000}, {0xb9c4e000}, 
+    {0xb9c50000}, {0xb9c52000}, {0xb9c54000}, {0xb9c56000}, 
+    {0xb9c58000}, {0xb9c5a000}, {0xb9c5c000}, {0xb9c5e000}, 
+    {0xb9c60000}, {0xb9c62000}, {0xb9c64000}, {0xb9c66000}, 
+    {0xb9c68000}, {0xb9c6a000}, {0xb9c6c000}, {0xb9c6e000}, 
+    {0xb9c70000}, {0xb9c72000}, {0xb9c74000}, {0xb9c76000}, 
+    {0xb9c78000}, {0xb9c7a000}, {0xb9c7c000}, {0xb9c7e000}, 
+    {0xb9c80000}, {0xb9c82000}, {0xb9c84000}, {0xb9c86000}, 
+    {0xb9c88000}, {0xb9c8a000}, {0xb9c8c000}, {0xb9c8e000}, 
+    {0xb9c90000}, {0xb9c92000}, {0xb9c94000}, {0xb9c96000}, 
+    {0xb9c98000}, {0xb9c9a000}, {0xb9c9c000}, {0xb9c9e000}, 
+    {0xb9ca0000}, {0xb9ca2000}, {0xb9ca4000}, {0xb9ca6000}, 
+    {0xb9ca8000}, {0xb9caa000}, {0xb9cac000}, {0xb9cae000}, 
+    {0xb9cb0000}, {0xb9cb2000}, {0xb9cb4000}, {0xb9cb6000}, 
+    {0xb9cb8000}, {0xb9cba000}, {0xb9cbc000}, {0xb9cbe000}, 
+    {0xb9cc0000}, {0xb9cc2000}, {0xb9cc4000}, {0xb9cc6000}, 
+    {0xb9cc8000}, {0xb9cca000}, {0xb9ccc000}, {0xb9cce000}, 
+    {0xb9cd0000}, {0xb9cd2000}, {0xb9cd4000}, {0xb9cd6000}, 
+    {0xb9cd8000}, {0xb9cda000}, {0xb9cdc000}, {0xb9cde000}, 
+    {0xb9ce0000}, {0xb9ce2000}, {0xb9ce4000}, {0xb9ce6000}, 
+    {0xb9ce8000}, {0xb9cea000}, {0xb9cec000}, {0xb9cee000}, 
+    {0xb9cf0000}, {0xb9cf2000}, {0xb9cf4000}, {0xb9cf6000}, 
+    {0xb9cf8000}, {0xb9cfa000}, {0xb9cfc000}, {0xb9cfe000}, 
+    {0xb9d00000}, {0xb9d02000}, {0xb9d04000}, {0xb9d06000}, 
+    {0xb9d08000}, {0xb9d0a000}, {0xb9d0c000}, {0xb9d0e000}, 
+    {0xb9d10000}, {0xb9d12000}, {0xb9d14000}, {0xb9d16000}, 
+    {0xb9d18000}, {0xb9d1a000}, {0xb9d1c000}, {0xb9d1e000}, 
+    {0xb9d20000}, {0xb9d22000}, {0xb9d24000}, {0xb9d26000}, 
+    {0xb9d28000}, {0xb9d2a000}, {0xb9d2c000}, {0xb9d2e000}, 
+    {0xb9d30000}, {0xb9d32000}, {0xb9d34000}, {0xb9d36000}, 
+    {0xb9d38000}, {0xb9d3a000}, {0xb9d3c000}, {0xb9d3e000}, 
+    {0xb9d40000}, {0xb9d42000}, {0xb9d44000}, {0xb9d46000}, 
+    {0xb9d48000}, {0xb9d4a000}, {0xb9d4c000}, {0xb9d4e000}, 
+    {0xb9d50000}, {0xb9d52000}, {0xb9d54000}, {0xb9d56000}, 
+    {0xb9d58000}, {0xb9d5a000}, {0xb9d5c000}, {0xb9d5e000}, 
+    {0xb9d60000}, {0xb9d62000}, {0xb9d64000}, {0xb9d66000}, 
+    {0xb9d68000}, {0xb9d6a000}, {0xb9d6c000}, {0xb9d6e000}, 
+    {0xb9d70000}, {0xb9d72000}, {0xb9d74000}, {0xb9d76000}, 
+    {0xb9d78000}, {0xb9d7a000}, {0xb9d7c000}, {0xb9d7e000}, 
+    {0xb9d80000}, {0xb9d82000}, {0xb9d84000}, {0xb9d86000}, 
+    {0xb9d88000}, {0xb9d8a000}, {0xb9d8c000}, {0xb9d8e000}, 
+    {0xb9d90000}, {0xb9d92000}, {0xb9d94000}, {0xb9d96000}, 
+    {0xb9d98000}, {0xb9d9a000}, {0xb9d9c000}, {0xb9d9e000}, 
+    {0xb9da0000}, {0xb9da2000}, {0xb9da4000}, {0xb9da6000}, 
+    {0xb9da8000}, {0xb9daa000}, {0xb9dac000}, {0xb9dae000}, 
+    {0xb9db0000}, {0xb9db2000}, {0xb9db4000}, {0xb9db6000}, 
+    {0xb9db8000}, {0xb9dba000}, {0xb9dbc000}, {0xb9dbe000}, 
+    {0xb9dc0000}, {0xb9dc2000}, {0xb9dc4000}, {0xb9dc6000}, 
+    {0xb9dc8000}, {0xb9dca000}, {0xb9dcc000}, {0xb9dce000}, 
+    {0xb9dd0000}, {0xb9dd2000}, {0xb9dd4000}, {0xb9dd6000}, 
+    {0xb9dd8000}, {0xb9dda000}, {0xb9ddc000}, {0xb9dde000}, 
+    {0xb9de0000}, {0xb9de2000}, {0xb9de4000}, {0xb9de6000}, 
+    {0xb9de8000}, {0xb9dea000}, {0xb9dec000}, {0xb9dee000}, 
+    {0xb9df0000}, {0xb9df2000}, {0xb9df4000}, {0xb9df6000}, 
+    {0xb9df8000}, {0xb9dfa000}, {0xb9dfc000}, {0xb9dfe000}, 
+    {0xb9e00000}, {0xb9e02000}, {0xb9e04000}, {0xb9e06000}, 
+    {0xb9e08000}, {0xb9e0a000}, {0xb9e0c000}, {0xb9e0e000}, 
+    {0xb9e10000}, {0xb9e12000}, {0xb9e14000}, {0xb9e16000}, 
+    {0xb9e18000}, {0xb9e1a000}, {0xb9e1c000}, {0xb9e1e000}, 
+    {0xb9e20000}, {0xb9e22000}, {0xb9e24000}, {0xb9e26000}, 
+    {0xb9e28000}, {0xb9e2a000}, {0xb9e2c000}, {0xb9e2e000}, 
+    {0xb9e30000}, {0xb9e32000}, {0xb9e34000}, {0xb9e36000}, 
+    {0xb9e38000}, {0xb9e3a000}, {0xb9e3c000}, {0xb9e3e000}, 
+    {0xb9e40000}, {0xb9e42000}, {0xb9e44000}, {0xb9e46000}, 
+    {0xb9e48000}, {0xb9e4a000}, {0xb9e4c000}, {0xb9e4e000}, 
+    {0xb9e50000}, {0xb9e52000}, {0xb9e54000}, {0xb9e56000}, 
+    {0xb9e58000}, {0xb9e5a000}, {0xb9e5c000}, {0xb9e5e000}, 
+    {0xb9e60000}, {0xb9e62000}, {0xb9e64000}, {0xb9e66000}, 
+    {0xb9e68000}, {0xb9e6a000}, {0xb9e6c000}, {0xb9e6e000}, 
+    {0xb9e70000}, {0xb9e72000}, {0xb9e74000}, {0xb9e76000}, 
+    {0xb9e78000}, {0xb9e7a000}, {0xb9e7c000}, {0xb9e7e000}, 
+    {0xb9e80000}, {0xb9e82000}, {0xb9e84000}, {0xb9e86000}, 
+    {0xb9e88000}, {0xb9e8a000}, {0xb9e8c000}, {0xb9e8e000}, 
+    {0xb9e90000}, {0xb9e92000}, {0xb9e94000}, {0xb9e96000}, 
+    {0xb9e98000}, {0xb9e9a000}, {0xb9e9c000}, {0xb9e9e000}, 
+    {0xb9ea0000}, {0xb9ea2000}, {0xb9ea4000}, {0xb9ea6000}, 
+    {0xb9ea8000}, {0xb9eaa000}, {0xb9eac000}, {0xb9eae000}, 
+    {0xb9eb0000}, {0xb9eb2000}, {0xb9eb4000}, {0xb9eb6000}, 
+    {0xb9eb8000}, {0xb9eba000}, {0xb9ebc000}, {0xb9ebe000}, 
+    {0xb9ec0000}, {0xb9ec2000}, {0xb9ec4000}, {0xb9ec6000}, 
+    {0xb9ec8000}, {0xb9eca000}, {0xb9ecc000}, {0xb9ece000}, 
+    {0xb9ed0000}, {0xb9ed2000}, {0xb9ed4000}, {0xb9ed6000}, 
+    {0xb9ed8000}, {0xb9eda000}, {0xb9edc000}, {0xb9ede000}, 
+    {0xb9ee0000}, {0xb9ee2000}, {0xb9ee4000}, {0xb9ee6000}, 
+    {0xb9ee8000}, {0xb9eea000}, {0xb9eec000}, {0xb9eee000}, 
+    {0xb9ef0000}, {0xb9ef2000}, {0xb9ef4000}, {0xb9ef6000}, 
+    {0xb9ef8000}, {0xb9efa000}, {0xb9efc000}, {0xb9efe000}, 
+    {0xb9f00000}, {0xb9f02000}, {0xb9f04000}, {0xb9f06000}, 
+    {0xb9f08000}, {0xb9f0a000}, {0xb9f0c000}, {0xb9f0e000}, 
+    {0xb9f10000}, {0xb9f12000}, {0xb9f14000}, {0xb9f16000}, 
+    {0xb9f18000}, {0xb9f1a000}, {0xb9f1c000}, {0xb9f1e000}, 
+    {0xb9f20000}, {0xb9f22000}, {0xb9f24000}, {0xb9f26000}, 
+    {0xb9f28000}, {0xb9f2a000}, {0xb9f2c000}, {0xb9f2e000}, 
+    {0xb9f30000}, {0xb9f32000}, {0xb9f34000}, {0xb9f36000}, 
+    {0xb9f38000}, {0xb9f3a000}, {0xb9f3c000}, {0xb9f3e000}, 
+    {0xb9f40000}, {0xb9f42000}, {0xb9f44000}, {0xb9f46000}, 
+    {0xb9f48000}, {0xb9f4a000}, {0xb9f4c000}, {0xb9f4e000}, 
+    {0xb9f50000}, {0xb9f52000}, {0xb9f54000}, {0xb9f56000}, 
+    {0xb9f58000}, {0xb9f5a000}, {0xb9f5c000}, {0xb9f5e000}, 
+    {0xb9f60000}, {0xb9f62000}, {0xb9f64000}, {0xb9f66000}, 
+    {0xb9f68000}, {0xb9f6a000}, {0xb9f6c000}, {0xb9f6e000}, 
+    {0xb9f70000}, {0xb9f72000}, {0xb9f74000}, {0xb9f76000}, 
+    {0xb9f78000}, {0xb9f7a000}, {0xb9f7c000}, {0xb9f7e000}, 
+    {0xb9f80000}, {0xb9f82000}, {0xb9f84000}, {0xb9f86000}, 
+    {0xb9f88000}, {0xb9f8a000}, {0xb9f8c000}, {0xb9f8e000}, 
+    {0xb9f90000}, {0xb9f92000}, {0xb9f94000}, {0xb9f96000}, 
+    {0xb9f98000}, {0xb9f9a000}, {0xb9f9c000}, {0xb9f9e000}, 
+    {0xb9fa0000}, {0xb9fa2000}, {0xb9fa4000}, {0xb9fa6000}, 
+    {0xb9fa8000}, {0xb9faa000}, {0xb9fac000}, {0xb9fae000}, 
+    {0xb9fb0000}, {0xb9fb2000}, {0xb9fb4000}, {0xb9fb6000}, 
+    {0xb9fb8000}, {0xb9fba000}, {0xb9fbc000}, {0xb9fbe000}, 
+    {0xb9fc0000}, {0xb9fc2000}, {0xb9fc4000}, {0xb9fc6000}, 
+    {0xb9fc8000}, {0xb9fca000}, {0xb9fcc000}, {0xb9fce000}, 
+    {0xb9fd0000}, {0xb9fd2000}, {0xb9fd4000}, {0xb9fd6000}, 
+    {0xb9fd8000}, {0xb9fda000}, {0xb9fdc000}, {0xb9fde000}, 
+    {0xb9fe0000}, {0xb9fe2000}, {0xb9fe4000}, {0xb9fe6000}, 
+    {0xb9fe8000}, {0xb9fea000}, {0xb9fec000}, {0xb9fee000}, 
+    {0xb9ff0000}, {0xb9ff2000}, {0xb9ff4000}, {0xb9ff6000}, 
+    {0xb9ff8000}, {0xb9ffa000}, {0xb9ffc000}, {0xb9ffe000}, 
+    {0xba000000}, {0xba002000}, {0xba004000}, {0xba006000}, 
+    {0xba008000}, {0xba00a000}, {0xba00c000}, {0xba00e000}, 
+    {0xba010000}, {0xba012000}, {0xba014000}, {0xba016000}, 
+    {0xba018000}, {0xba01a000}, {0xba01c000}, {0xba01e000}, 
+    {0xba020000}, {0xba022000}, {0xba024000}, {0xba026000}, 
+    {0xba028000}, {0xba02a000}, {0xba02c000}, {0xba02e000}, 
+    {0xba030000}, {0xba032000}, {0xba034000}, {0xba036000}, 
+    {0xba038000}, {0xba03a000}, {0xba03c000}, {0xba03e000}, 
+    {0xba040000}, {0xba042000}, {0xba044000}, {0xba046000}, 
+    {0xba048000}, {0xba04a000}, {0xba04c000}, {0xba04e000}, 
+    {0xba050000}, {0xba052000}, {0xba054000}, {0xba056000}, 
+    {0xba058000}, {0xba05a000}, {0xba05c000}, {0xba05e000}, 
+    {0xba060000}, {0xba062000}, {0xba064000}, {0xba066000}, 
+    {0xba068000}, {0xba06a000}, {0xba06c000}, {0xba06e000}, 
+    {0xba070000}, {0xba072000}, {0xba074000}, {0xba076000}, 
+    {0xba078000}, {0xba07a000}, {0xba07c000}, {0xba07e000}, 
+    {0xba080000}, {0xba082000}, {0xba084000}, {0xba086000}, 
+    {0xba088000}, {0xba08a000}, {0xba08c000}, {0xba08e000}, 
+    {0xba090000}, {0xba092000}, {0xba094000}, {0xba096000}, 
+    {0xba098000}, {0xba09a000}, {0xba09c000}, {0xba09e000}, 
+    {0xba0a0000}, {0xba0a2000}, {0xba0a4000}, {0xba0a6000}, 
+    {0xba0a8000}, {0xba0aa000}, {0xba0ac000}, {0xba0ae000}, 
+    {0xba0b0000}, {0xba0b2000}, {0xba0b4000}, {0xba0b6000}, 
+    {0xba0b8000}, {0xba0ba000}, {0xba0bc000}, {0xba0be000}, 
+    {0xba0c0000}, {0xba0c2000}, {0xba0c4000}, {0xba0c6000}, 
+    {0xba0c8000}, {0xba0ca000}, {0xba0cc000}, {0xba0ce000}, 
+    {0xba0d0000}, {0xba0d2000}, {0xba0d4000}, {0xba0d6000}, 
+    {0xba0d8000}, {0xba0da000}, {0xba0dc000}, {0xba0de000}, 
+    {0xba0e0000}, {0xba0e2000}, {0xba0e4000}, {0xba0e6000}, 
+    {0xba0e8000}, {0xba0ea000}, {0xba0ec000}, {0xba0ee000}, 
+    {0xba0f0000}, {0xba0f2000}, {0xba0f4000}, {0xba0f6000}, 
+    {0xba0f8000}, {0xba0fa000}, {0xba0fc000}, {0xba0fe000}, 
+    {0xba100000}, {0xba102000}, {0xba104000}, {0xba106000}, 
+    {0xba108000}, {0xba10a000}, {0xba10c000}, {0xba10e000}, 
+    {0xba110000}, {0xba112000}, {0xba114000}, {0xba116000}, 
+    {0xba118000}, {0xba11a000}, {0xba11c000}, {0xba11e000}, 
+    {0xba120000}, {0xba122000}, {0xba124000}, {0xba126000}, 
+    {0xba128000}, {0xba12a000}, {0xba12c000}, {0xba12e000}, 
+    {0xba130000}, {0xba132000}, {0xba134000}, {0xba136000}, 
+    {0xba138000}, {0xba13a000}, {0xba13c000}, {0xba13e000}, 
+    {0xba140000}, {0xba142000}, {0xba144000}, {0xba146000}, 
+    {0xba148000}, {0xba14a000}, {0xba14c000}, {0xba14e000}, 
+    {0xba150000}, {0xba152000}, {0xba154000}, {0xba156000}, 
+    {0xba158000}, {0xba15a000}, {0xba15c000}, {0xba15e000}, 
+    {0xba160000}, {0xba162000}, {0xba164000}, {0xba166000}, 
+    {0xba168000}, {0xba16a000}, {0xba16c000}, {0xba16e000}, 
+    {0xba170000}, {0xba172000}, {0xba174000}, {0xba176000}, 
+    {0xba178000}, {0xba17a000}, {0xba17c000}, {0xba17e000}, 
+    {0xba180000}, {0xba182000}, {0xba184000}, {0xba186000}, 
+    {0xba188000}, {0xba18a000}, {0xba18c000}, {0xba18e000}, 
+    {0xba190000}, {0xba192000}, {0xba194000}, {0xba196000}, 
+    {0xba198000}, {0xba19a000}, {0xba19c000}, {0xba19e000}, 
+    {0xba1a0000}, {0xba1a2000}, {0xba1a4000}, {0xba1a6000}, 
+    {0xba1a8000}, {0xba1aa000}, {0xba1ac000}, {0xba1ae000}, 
+    {0xba1b0000}, {0xba1b2000}, {0xba1b4000}, {0xba1b6000}, 
+    {0xba1b8000}, {0xba1ba000}, {0xba1bc000}, {0xba1be000}, 
+    {0xba1c0000}, {0xba1c2000}, {0xba1c4000}, {0xba1c6000}, 
+    {0xba1c8000}, {0xba1ca000}, {0xba1cc000}, {0xba1ce000}, 
+    {0xba1d0000}, {0xba1d2000}, {0xba1d4000}, {0xba1d6000}, 
+    {0xba1d8000}, {0xba1da000}, {0xba1dc000}, {0xba1de000}, 
+    {0xba1e0000}, {0xba1e2000}, {0xba1e4000}, {0xba1e6000}, 
+    {0xba1e8000}, {0xba1ea000}, {0xba1ec000}, {0xba1ee000}, 
+    {0xba1f0000}, {0xba1f2000}, {0xba1f4000}, {0xba1f6000}, 
+    {0xba1f8000}, {0xba1fa000}, {0xba1fc000}, {0xba1fe000}, 
+    {0xba200000}, {0xba202000}, {0xba204000}, {0xba206000}, 
+    {0xba208000}, {0xba20a000}, {0xba20c000}, {0xba20e000}, 
+    {0xba210000}, {0xba212000}, {0xba214000}, {0xba216000}, 
+    {0xba218000}, {0xba21a000}, {0xba21c000}, {0xba21e000}, 
+    {0xba220000}, {0xba222000}, {0xba224000}, {0xba226000}, 
+    {0xba228000}, {0xba22a000}, {0xba22c000}, {0xba22e000}, 
+    {0xba230000}, {0xba232000}, {0xba234000}, {0xba236000}, 
+    {0xba238000}, {0xba23a000}, {0xba23c000}, {0xba23e000}, 
+    {0xba240000}, {0xba242000}, {0xba244000}, {0xba246000}, 
+    {0xba248000}, {0xba24a000}, {0xba24c000}, {0xba24e000}, 
+    {0xba250000}, {0xba252000}, {0xba254000}, {0xba256000}, 
+    {0xba258000}, {0xba25a000}, {0xba25c000}, {0xba25e000}, 
+    {0xba260000}, {0xba262000}, {0xba264000}, {0xba266000}, 
+    {0xba268000}, {0xba26a000}, {0xba26c000}, {0xba26e000}, 
+    {0xba270000}, {0xba272000}, {0xba274000}, {0xba276000}, 
+    {0xba278000}, {0xba27a000}, {0xba27c000}, {0xba27e000}, 
+    {0xba280000}, {0xba282000}, {0xba284000}, {0xba286000}, 
+    {0xba288000}, {0xba28a000}, {0xba28c000}, {0xba28e000}, 
+    {0xba290000}, {0xba292000}, {0xba294000}, {0xba296000}, 
+    {0xba298000}, {0xba29a000}, {0xba29c000}, {0xba29e000}, 
+    {0xba2a0000}, {0xba2a2000}, {0xba2a4000}, {0xba2a6000}, 
+    {0xba2a8000}, {0xba2aa000}, {0xba2ac000}, {0xba2ae000}, 
+    {0xba2b0000}, {0xba2b2000}, {0xba2b4000}, {0xba2b6000}, 
+    {0xba2b8000}, {0xba2ba000}, {0xba2bc000}, {0xba2be000}, 
+    {0xba2c0000}, {0xba2c2000}, {0xba2c4000}, {0xba2c6000}, 
+    {0xba2c8000}, {0xba2ca000}, {0xba2cc000}, {0xba2ce000}, 
+    {0xba2d0000}, {0xba2d2000}, {0xba2d4000}, {0xba2d6000}, 
+    {0xba2d8000}, {0xba2da000}, {0xba2dc000}, {0xba2de000}, 
+    {0xba2e0000}, {0xba2e2000}, {0xba2e4000}, {0xba2e6000}, 
+    {0xba2e8000}, {0xba2ea000}, {0xba2ec000}, {0xba2ee000}, 
+    {0xba2f0000}, {0xba2f2000}, {0xba2f4000}, {0xba2f6000}, 
+    {0xba2f8000}, {0xba2fa000}, {0xba2fc000}, {0xba2fe000}, 
+    {0xba300000}, {0xba302000}, {0xba304000}, {0xba306000}, 
+    {0xba308000}, {0xba30a000}, {0xba30c000}, {0xba30e000}, 
+    {0xba310000}, {0xba312000}, {0xba314000}, {0xba316000}, 
+    {0xba318000}, {0xba31a000}, {0xba31c000}, {0xba31e000}, 
+    {0xba320000}, {0xba322000}, {0xba324000}, {0xba326000}, 
+    {0xba328000}, {0xba32a000}, {0xba32c000}, {0xba32e000}, 
+    {0xba330000}, {0xba332000}, {0xba334000}, {0xba336000}, 
+    {0xba338000}, {0xba33a000}, {0xba33c000}, {0xba33e000}, 
+    {0xba340000}, {0xba342000}, {0xba344000}, {0xba346000}, 
+    {0xba348000}, {0xba34a000}, {0xba34c000}, {0xba34e000}, 
+    {0xba350000}, {0xba352000}, {0xba354000}, {0xba356000}, 
+    {0xba358000}, {0xba35a000}, {0xba35c000}, {0xba35e000}, 
+    {0xba360000}, {0xba362000}, {0xba364000}, {0xba366000}, 
+    {0xba368000}, {0xba36a000}, {0xba36c000}, {0xba36e000}, 
+    {0xba370000}, {0xba372000}, {0xba374000}, {0xba376000}, 
+    {0xba378000}, {0xba37a000}, {0xba37c000}, {0xba37e000}, 
+    {0xba380000}, {0xba382000}, {0xba384000}, {0xba386000}, 
+    {0xba388000}, {0xba38a000}, {0xba38c000}, {0xba38e000}, 
+    {0xba390000}, {0xba392000}, {0xba394000}, {0xba396000}, 
+    {0xba398000}, {0xba39a000}, {0xba39c000}, {0xba39e000}, 
+    {0xba3a0000}, {0xba3a2000}, {0xba3a4000}, {0xba3a6000}, 
+    {0xba3a8000}, {0xba3aa000}, {0xba3ac000}, {0xba3ae000}, 
+    {0xba3b0000}, {0xba3b2000}, {0xba3b4000}, {0xba3b6000}, 
+    {0xba3b8000}, {0xba3ba000}, {0xba3bc000}, {0xba3be000}, 
+    {0xba3c0000}, {0xba3c2000}, {0xba3c4000}, {0xba3c6000}, 
+    {0xba3c8000}, {0xba3ca000}, {0xba3cc000}, {0xba3ce000}, 
+    {0xba3d0000}, {0xba3d2000}, {0xba3d4000}, {0xba3d6000}, 
+    {0xba3d8000}, {0xba3da000}, {0xba3dc000}, {0xba3de000}, 
+    {0xba3e0000}, {0xba3e2000}, {0xba3e4000}, {0xba3e6000}, 
+    {0xba3e8000}, {0xba3ea000}, {0xba3ec000}, {0xba3ee000}, 
+    {0xba3f0000}, {0xba3f2000}, {0xba3f4000}, {0xba3f6000}, 
+    {0xba3f8000}, {0xba3fa000}, {0xba3fc000}, {0xba3fe000}, 
+    {0xba400000}, {0xba402000}, {0xba404000}, {0xba406000}, 
+    {0xba408000}, {0xba40a000}, {0xba40c000}, {0xba40e000}, 
+    {0xba410000}, {0xba412000}, {0xba414000}, {0xba416000}, 
+    {0xba418000}, {0xba41a000}, {0xba41c000}, {0xba41e000}, 
+    {0xba420000}, {0xba422000}, {0xba424000}, {0xba426000}, 
+    {0xba428000}, {0xba42a000}, {0xba42c000}, {0xba42e000}, 
+    {0xba430000}, {0xba432000}, {0xba434000}, {0xba436000}, 
+    {0xba438000}, {0xba43a000}, {0xba43c000}, {0xba43e000}, 
+    {0xba440000}, {0xba442000}, {0xba444000}, {0xba446000}, 
+    {0xba448000}, {0xba44a000}, {0xba44c000}, {0xba44e000}, 
+    {0xba450000}, {0xba452000}, {0xba454000}, {0xba456000}, 
+    {0xba458000}, {0xba45a000}, {0xba45c000}, {0xba45e000}, 
+    {0xba460000}, {0xba462000}, {0xba464000}, {0xba466000}, 
+    {0xba468000}, {0xba46a000}, {0xba46c000}, {0xba46e000}, 
+    {0xba470000}, {0xba472000}, {0xba474000}, {0xba476000}, 
+    {0xba478000}, {0xba47a000}, {0xba47c000}, {0xba47e000}, 
+    {0xba480000}, {0xba482000}, {0xba484000}, {0xba486000}, 
+    {0xba488000}, {0xba48a000}, {0xba48c000}, {0xba48e000}, 
+    {0xba490000}, {0xba492000}, {0xba494000}, {0xba496000}, 
+    {0xba498000}, {0xba49a000}, {0xba49c000}, {0xba49e000}, 
+    {0xba4a0000}, {0xba4a2000}, {0xba4a4000}, {0xba4a6000}, 
+    {0xba4a8000}, {0xba4aa000}, {0xba4ac000}, {0xba4ae000}, 
+    {0xba4b0000}, {0xba4b2000}, {0xba4b4000}, {0xba4b6000}, 
+    {0xba4b8000}, {0xba4ba000}, {0xba4bc000}, {0xba4be000}, 
+    {0xba4c0000}, {0xba4c2000}, {0xba4c4000}, {0xba4c6000}, 
+    {0xba4c8000}, {0xba4ca000}, {0xba4cc000}, {0xba4ce000}, 
+    {0xba4d0000}, {0xba4d2000}, {0xba4d4000}, {0xba4d6000}, 
+    {0xba4d8000}, {0xba4da000}, {0xba4dc000}, {0xba4de000}, 
+    {0xba4e0000}, {0xba4e2000}, {0xba4e4000}, {0xba4e6000}, 
+    {0xba4e8000}, {0xba4ea000}, {0xba4ec000}, {0xba4ee000}, 
+    {0xba4f0000}, {0xba4f2000}, {0xba4f4000}, {0xba4f6000}, 
+    {0xba4f8000}, {0xba4fa000}, {0xba4fc000}, {0xba4fe000}, 
+    {0xba500000}, {0xba502000}, {0xba504000}, {0xba506000}, 
+    {0xba508000}, {0xba50a000}, {0xba50c000}, {0xba50e000}, 
+    {0xba510000}, {0xba512000}, {0xba514000}, {0xba516000}, 
+    {0xba518000}, {0xba51a000}, {0xba51c000}, {0xba51e000}, 
+    {0xba520000}, {0xba522000}, {0xba524000}, {0xba526000}, 
+    {0xba528000}, {0xba52a000}, {0xba52c000}, {0xba52e000}, 
+    {0xba530000}, {0xba532000}, {0xba534000}, {0xba536000}, 
+    {0xba538000}, {0xba53a000}, {0xba53c000}, {0xba53e000}, 
+    {0xba540000}, {0xba542000}, {0xba544000}, {0xba546000}, 
+    {0xba548000}, {0xba54a000}, {0xba54c000}, {0xba54e000}, 
+    {0xba550000}, {0xba552000}, {0xba554000}, {0xba556000}, 
+    {0xba558000}, {0xba55a000}, {0xba55c000}, {0xba55e000}, 
+    {0xba560000}, {0xba562000}, {0xba564000}, {0xba566000}, 
+    {0xba568000}, {0xba56a000}, {0xba56c000}, {0xba56e000}, 
+    {0xba570000}, {0xba572000}, {0xba574000}, {0xba576000}, 
+    {0xba578000}, {0xba57a000}, {0xba57c000}, {0xba57e000}, 
+    {0xba580000}, {0xba582000}, {0xba584000}, {0xba586000}, 
+    {0xba588000}, {0xba58a000}, {0xba58c000}, {0xba58e000}, 
+    {0xba590000}, {0xba592000}, {0xba594000}, {0xba596000}, 
+    {0xba598000}, {0xba59a000}, {0xba59c000}, {0xba59e000}, 
+    {0xba5a0000}, {0xba5a2000}, {0xba5a4000}, {0xba5a6000}, 
+    {0xba5a8000}, {0xba5aa000}, {0xba5ac000}, {0xba5ae000}, 
+    {0xba5b0000}, {0xba5b2000}, {0xba5b4000}, {0xba5b6000}, 
+    {0xba5b8000}, {0xba5ba000}, {0xba5bc000}, {0xba5be000}, 
+    {0xba5c0000}, {0xba5c2000}, {0xba5c4000}, {0xba5c6000}, 
+    {0xba5c8000}, {0xba5ca000}, {0xba5cc000}, {0xba5ce000}, 
+    {0xba5d0000}, {0xba5d2000}, {0xba5d4000}, {0xba5d6000}, 
+    {0xba5d8000}, {0xba5da000}, {0xba5dc000}, {0xba5de000}, 
+    {0xba5e0000}, {0xba5e2000}, {0xba5e4000}, {0xba5e6000}, 
+    {0xba5e8000}, {0xba5ea000}, {0xba5ec000}, {0xba5ee000}, 
+    {0xba5f0000}, {0xba5f2000}, {0xba5f4000}, {0xba5f6000}, 
+    {0xba5f8000}, {0xba5fa000}, {0xba5fc000}, {0xba5fe000}, 
+    {0xba600000}, {0xba602000}, {0xba604000}, {0xba606000}, 
+    {0xba608000}, {0xba60a000}, {0xba60c000}, {0xba60e000}, 
+    {0xba610000}, {0xba612000}, {0xba614000}, {0xba616000}, 
+    {0xba618000}, {0xba61a000}, {0xba61c000}, {0xba61e000}, 
+    {0xba620000}, {0xba622000}, {0xba624000}, {0xba626000}, 
+    {0xba628000}, {0xba62a000}, {0xba62c000}, {0xba62e000}, 
+    {0xba630000}, {0xba632000}, {0xba634000}, {0xba636000}, 
+    {0xba638000}, {0xba63a000}, {0xba63c000}, {0xba63e000}, 
+    {0xba640000}, {0xba642000}, {0xba644000}, {0xba646000}, 
+    {0xba648000}, {0xba64a000}, {0xba64c000}, {0xba64e000}, 
+    {0xba650000}, {0xba652000}, {0xba654000}, {0xba656000}, 
+    {0xba658000}, {0xba65a000}, {0xba65c000}, {0xba65e000}, 
+    {0xba660000}, {0xba662000}, {0xba664000}, {0xba666000}, 
+    {0xba668000}, {0xba66a000}, {0xba66c000}, {0xba66e000}, 
+    {0xba670000}, {0xba672000}, {0xba674000}, {0xba676000}, 
+    {0xba678000}, {0xba67a000}, {0xba67c000}, {0xba67e000}, 
+    {0xba680000}, {0xba682000}, {0xba684000}, {0xba686000}, 
+    {0xba688000}, {0xba68a000}, {0xba68c000}, {0xba68e000}, 
+    {0xba690000}, {0xba692000}, {0xba694000}, {0xba696000}, 
+    {0xba698000}, {0xba69a000}, {0xba69c000}, {0xba69e000}, 
+    {0xba6a0000}, {0xba6a2000}, {0xba6a4000}, {0xba6a6000}, 
+    {0xba6a8000}, {0xba6aa000}, {0xba6ac000}, {0xba6ae000}, 
+    {0xba6b0000}, {0xba6b2000}, {0xba6b4000}, {0xba6b6000}, 
+    {0xba6b8000}, {0xba6ba000}, {0xba6bc000}, {0xba6be000}, 
+    {0xba6c0000}, {0xba6c2000}, {0xba6c4000}, {0xba6c6000}, 
+    {0xba6c8000}, {0xba6ca000}, {0xba6cc000}, {0xba6ce000}, 
+    {0xba6d0000}, {0xba6d2000}, {0xba6d4000}, {0xba6d6000}, 
+    {0xba6d8000}, {0xba6da000}, {0xba6dc000}, {0xba6de000}, 
+    {0xba6e0000}, {0xba6e2000}, {0xba6e4000}, {0xba6e6000}, 
+    {0xba6e8000}, {0xba6ea000}, {0xba6ec000}, {0xba6ee000}, 
+    {0xba6f0000}, {0xba6f2000}, {0xba6f4000}, {0xba6f6000}, 
+    {0xba6f8000}, {0xba6fa000}, {0xba6fc000}, {0xba6fe000}, 
+    {0xba700000}, {0xba702000}, {0xba704000}, {0xba706000}, 
+    {0xba708000}, {0xba70a000}, {0xba70c000}, {0xba70e000}, 
+    {0xba710000}, {0xba712000}, {0xba714000}, {0xba716000}, 
+    {0xba718000}, {0xba71a000}, {0xba71c000}, {0xba71e000}, 
+    {0xba720000}, {0xba722000}, {0xba724000}, {0xba726000}, 
+    {0xba728000}, {0xba72a000}, {0xba72c000}, {0xba72e000}, 
+    {0xba730000}, {0xba732000}, {0xba734000}, {0xba736000}, 
+    {0xba738000}, {0xba73a000}, {0xba73c000}, {0xba73e000}, 
+    {0xba740000}, {0xba742000}, {0xba744000}, {0xba746000}, 
+    {0xba748000}, {0xba74a000}, {0xba74c000}, {0xba74e000}, 
+    {0xba750000}, {0xba752000}, {0xba754000}, {0xba756000}, 
+    {0xba758000}, {0xba75a000}, {0xba75c000}, {0xba75e000}, 
+    {0xba760000}, {0xba762000}, {0xba764000}, {0xba766000}, 
+    {0xba768000}, {0xba76a000}, {0xba76c000}, {0xba76e000}, 
+    {0xba770000}, {0xba772000}, {0xba774000}, {0xba776000}, 
+    {0xba778000}, {0xba77a000}, {0xba77c000}, {0xba77e000}, 
+    {0xba780000}, {0xba782000}, {0xba784000}, {0xba786000}, 
+    {0xba788000}, {0xba78a000}, {0xba78c000}, {0xba78e000}, 
+    {0xba790000}, {0xba792000}, {0xba794000}, {0xba796000}, 
+    {0xba798000}, {0xba79a000}, {0xba79c000}, {0xba79e000}, 
+    {0xba7a0000}, {0xba7a2000}, {0xba7a4000}, {0xba7a6000}, 
+    {0xba7a8000}, {0xba7aa000}, {0xba7ac000}, {0xba7ae000}, 
+    {0xba7b0000}, {0xba7b2000}, {0xba7b4000}, {0xba7b6000}, 
+    {0xba7b8000}, {0xba7ba000}, {0xba7bc000}, {0xba7be000}, 
+    {0xba7c0000}, {0xba7c2000}, {0xba7c4000}, {0xba7c6000}, 
+    {0xba7c8000}, {0xba7ca000}, {0xba7cc000}, {0xba7ce000}, 
+    {0xba7d0000}, {0xba7d2000}, {0xba7d4000}, {0xba7d6000}, 
+    {0xba7d8000}, {0xba7da000}, {0xba7dc000}, {0xba7de000}, 
+    {0xba7e0000}, {0xba7e2000}, {0xba7e4000}, {0xba7e6000}, 
+    {0xba7e8000}, {0xba7ea000}, {0xba7ec000}, {0xba7ee000}, 
+    {0xba7f0000}, {0xba7f2000}, {0xba7f4000}, {0xba7f6000}, 
+    {0xba7f8000}, {0xba7fa000}, {0xba7fc000}, {0xba7fe000}, 
+    {0xba800000}, {0xba802000}, {0xba804000}, {0xba806000}, 
+    {0xba808000}, {0xba80a000}, {0xba80c000}, {0xba80e000}, 
+    {0xba810000}, {0xba812000}, {0xba814000}, {0xba816000}, 
+    {0xba818000}, {0xba81a000}, {0xba81c000}, {0xba81e000}, 
+    {0xba820000}, {0xba822000}, {0xba824000}, {0xba826000}, 
+    {0xba828000}, {0xba82a000}, {0xba82c000}, {0xba82e000}, 
+    {0xba830000}, {0xba832000}, {0xba834000}, {0xba836000}, 
+    {0xba838000}, {0xba83a000}, {0xba83c000}, {0xba83e000}, 
+    {0xba840000}, {0xba842000}, {0xba844000}, {0xba846000}, 
+    {0xba848000}, {0xba84a000}, {0xba84c000}, {0xba84e000}, 
+    {0xba850000}, {0xba852000}, {0xba854000}, {0xba856000}, 
+    {0xba858000}, {0xba85a000}, {0xba85c000}, {0xba85e000}, 
+    {0xba860000}, {0xba862000}, {0xba864000}, {0xba866000}, 
+    {0xba868000}, {0xba86a000}, {0xba86c000}, {0xba86e000}, 
+    {0xba870000}, {0xba872000}, {0xba874000}, {0xba876000}, 
+    {0xba878000}, {0xba87a000}, {0xba87c000}, {0xba87e000}, 
+    {0xba880000}, {0xba882000}, {0xba884000}, {0xba886000}, 
+    {0xba888000}, {0xba88a000}, {0xba88c000}, {0xba88e000}, 
+    {0xba890000}, {0xba892000}, {0xba894000}, {0xba896000}, 
+    {0xba898000}, {0xba89a000}, {0xba89c000}, {0xba89e000}, 
+    {0xba8a0000}, {0xba8a2000}, {0xba8a4000}, {0xba8a6000}, 
+    {0xba8a8000}, {0xba8aa000}, {0xba8ac000}, {0xba8ae000}, 
+    {0xba8b0000}, {0xba8b2000}, {0xba8b4000}, {0xba8b6000}, 
+    {0xba8b8000}, {0xba8ba000}, {0xba8bc000}, {0xba8be000}, 
+    {0xba8c0000}, {0xba8c2000}, {0xba8c4000}, {0xba8c6000}, 
+    {0xba8c8000}, {0xba8ca000}, {0xba8cc000}, {0xba8ce000}, 
+    {0xba8d0000}, {0xba8d2000}, {0xba8d4000}, {0xba8d6000}, 
+    {0xba8d8000}, {0xba8da000}, {0xba8dc000}, {0xba8de000}, 
+    {0xba8e0000}, {0xba8e2000}, {0xba8e4000}, {0xba8e6000}, 
+    {0xba8e8000}, {0xba8ea000}, {0xba8ec000}, {0xba8ee000}, 
+    {0xba8f0000}, {0xba8f2000}, {0xba8f4000}, {0xba8f6000}, 
+    {0xba8f8000}, {0xba8fa000}, {0xba8fc000}, {0xba8fe000}, 
+    {0xba900000}, {0xba902000}, {0xba904000}, {0xba906000}, 
+    {0xba908000}, {0xba90a000}, {0xba90c000}, {0xba90e000}, 
+    {0xba910000}, {0xba912000}, {0xba914000}, {0xba916000}, 
+    {0xba918000}, {0xba91a000}, {0xba91c000}, {0xba91e000}, 
+    {0xba920000}, {0xba922000}, {0xba924000}, {0xba926000}, 
+    {0xba928000}, {0xba92a000}, {0xba92c000}, {0xba92e000}, 
+    {0xba930000}, {0xba932000}, {0xba934000}, {0xba936000}, 
+    {0xba938000}, {0xba93a000}, {0xba93c000}, {0xba93e000}, 
+    {0xba940000}, {0xba942000}, {0xba944000}, {0xba946000}, 
+    {0xba948000}, {0xba94a000}, {0xba94c000}, {0xba94e000}, 
+    {0xba950000}, {0xba952000}, {0xba954000}, {0xba956000}, 
+    {0xba958000}, {0xba95a000}, {0xba95c000}, {0xba95e000}, 
+    {0xba960000}, {0xba962000}, {0xba964000}, {0xba966000}, 
+    {0xba968000}, {0xba96a000}, {0xba96c000}, {0xba96e000}, 
+    {0xba970000}, {0xba972000}, {0xba974000}, {0xba976000}, 
+    {0xba978000}, {0xba97a000}, {0xba97c000}, {0xba97e000}, 
+    {0xba980000}, {0xba982000}, {0xba984000}, {0xba986000}, 
+    {0xba988000}, {0xba98a000}, {0xba98c000}, {0xba98e000}, 
+    {0xba990000}, {0xba992000}, {0xba994000}, {0xba996000}, 
+    {0xba998000}, {0xba99a000}, {0xba99c000}, {0xba99e000}, 
+    {0xba9a0000}, {0xba9a2000}, {0xba9a4000}, {0xba9a6000}, 
+    {0xba9a8000}, {0xba9aa000}, {0xba9ac000}, {0xba9ae000}, 
+    {0xba9b0000}, {0xba9b2000}, {0xba9b4000}, {0xba9b6000}, 
+    {0xba9b8000}, {0xba9ba000}, {0xba9bc000}, {0xba9be000}, 
+    {0xba9c0000}, {0xba9c2000}, {0xba9c4000}, {0xba9c6000}, 
+    {0xba9c8000}, {0xba9ca000}, {0xba9cc000}, {0xba9ce000}, 
+    {0xba9d0000}, {0xba9d2000}, {0xba9d4000}, {0xba9d6000}, 
+    {0xba9d8000}, {0xba9da000}, {0xba9dc000}, {0xba9de000}, 
+    {0xba9e0000}, {0xba9e2000}, {0xba9e4000}, {0xba9e6000}, 
+    {0xba9e8000}, {0xba9ea000}, {0xba9ec000}, {0xba9ee000}, 
+    {0xba9f0000}, {0xba9f2000}, {0xba9f4000}, {0xba9f6000}, 
+    {0xba9f8000}, {0xba9fa000}, {0xba9fc000}, {0xba9fe000}, 
+    {0xbaa00000}, {0xbaa02000}, {0xbaa04000}, {0xbaa06000}, 
+    {0xbaa08000}, {0xbaa0a000}, {0xbaa0c000}, {0xbaa0e000}, 
+    {0xbaa10000}, {0xbaa12000}, {0xbaa14000}, {0xbaa16000}, 
+    {0xbaa18000}, {0xbaa1a000}, {0xbaa1c000}, {0xbaa1e000}, 
+    {0xbaa20000}, {0xbaa22000}, {0xbaa24000}, {0xbaa26000}, 
+    {0xbaa28000}, {0xbaa2a000}, {0xbaa2c000}, {0xbaa2e000}, 
+    {0xbaa30000}, {0xbaa32000}, {0xbaa34000}, {0xbaa36000}, 
+    {0xbaa38000}, {0xbaa3a000}, {0xbaa3c000}, {0xbaa3e000}, 
+    {0xbaa40000}, {0xbaa42000}, {0xbaa44000}, {0xbaa46000}, 
+    {0xbaa48000}, {0xbaa4a000}, {0xbaa4c000}, {0xbaa4e000}, 
+    {0xbaa50000}, {0xbaa52000}, {0xbaa54000}, {0xbaa56000}, 
+    {0xbaa58000}, {0xbaa5a000}, {0xbaa5c000}, {0xbaa5e000}, 
+    {0xbaa60000}, {0xbaa62000}, {0xbaa64000}, {0xbaa66000}, 
+    {0xbaa68000}, {0xbaa6a000}, {0xbaa6c000}, {0xbaa6e000}, 
+    {0xbaa70000}, {0xbaa72000}, {0xbaa74000}, {0xbaa76000}, 
+    {0xbaa78000}, {0xbaa7a000}, {0xbaa7c000}, {0xbaa7e000}, 
+    {0xbaa80000}, {0xbaa82000}, {0xbaa84000}, {0xbaa86000}, 
+    {0xbaa88000}, {0xbaa8a000}, {0xbaa8c000}, {0xbaa8e000}, 
+    {0xbaa90000}, {0xbaa92000}, {0xbaa94000}, {0xbaa96000}, 
+    {0xbaa98000}, {0xbaa9a000}, {0xbaa9c000}, {0xbaa9e000}, 
+    {0xbaaa0000}, {0xbaaa2000}, {0xbaaa4000}, {0xbaaa6000}, 
+    {0xbaaa8000}, {0xbaaaa000}, {0xbaaac000}, {0xbaaae000}, 
+    {0xbaab0000}, {0xbaab2000}, {0xbaab4000}, {0xbaab6000}, 
+    {0xbaab8000}, {0xbaaba000}, {0xbaabc000}, {0xbaabe000}, 
+    {0xbaac0000}, {0xbaac2000}, {0xbaac4000}, {0xbaac6000}, 
+    {0xbaac8000}, {0xbaaca000}, {0xbaacc000}, {0xbaace000}, 
+    {0xbaad0000}, {0xbaad2000}, {0xbaad4000}, {0xbaad6000}, 
+    {0xbaad8000}, {0xbaada000}, {0xbaadc000}, {0xbaade000}, 
+    {0xbaae0000}, {0xbaae2000}, {0xbaae4000}, {0xbaae6000}, 
+    {0xbaae8000}, {0xbaaea000}, {0xbaaec000}, {0xbaaee000}, 
+    {0xbaaf0000}, {0xbaaf2000}, {0xbaaf4000}, {0xbaaf6000}, 
+    {0xbaaf8000}, {0xbaafa000}, {0xbaafc000}, {0xbaafe000}, 
+    {0xbab00000}, {0xbab02000}, {0xbab04000}, {0xbab06000}, 
+    {0xbab08000}, {0xbab0a000}, {0xbab0c000}, {0xbab0e000}, 
+    {0xbab10000}, {0xbab12000}, {0xbab14000}, {0xbab16000}, 
+    {0xbab18000}, {0xbab1a000}, {0xbab1c000}, {0xbab1e000}, 
+    {0xbab20000}, {0xbab22000}, {0xbab24000}, {0xbab26000}, 
+    {0xbab28000}, {0xbab2a000}, {0xbab2c000}, {0xbab2e000}, 
+    {0xbab30000}, {0xbab32000}, {0xbab34000}, {0xbab36000}, 
+    {0xbab38000}, {0xbab3a000}, {0xbab3c000}, {0xbab3e000}, 
+    {0xbab40000}, {0xbab42000}, {0xbab44000}, {0xbab46000}, 
+    {0xbab48000}, {0xbab4a000}, {0xbab4c000}, {0xbab4e000}, 
+    {0xbab50000}, {0xbab52000}, {0xbab54000}, {0xbab56000}, 
+    {0xbab58000}, {0xbab5a000}, {0xbab5c000}, {0xbab5e000}, 
+    {0xbab60000}, {0xbab62000}, {0xbab64000}, {0xbab66000}, 
+    {0xbab68000}, {0xbab6a000}, {0xbab6c000}, {0xbab6e000}, 
+    {0xbab70000}, {0xbab72000}, {0xbab74000}, {0xbab76000}, 
+    {0xbab78000}, {0xbab7a000}, {0xbab7c000}, {0xbab7e000}, 
+    {0xbab80000}, {0xbab82000}, {0xbab84000}, {0xbab86000}, 
+    {0xbab88000}, {0xbab8a000}, {0xbab8c000}, {0xbab8e000}, 
+    {0xbab90000}, {0xbab92000}, {0xbab94000}, {0xbab96000}, 
+    {0xbab98000}, {0xbab9a000}, {0xbab9c000}, {0xbab9e000}, 
+    {0xbaba0000}, {0xbaba2000}, {0xbaba4000}, {0xbaba6000}, 
+    {0xbaba8000}, {0xbabaa000}, {0xbabac000}, {0xbabae000}, 
+    {0xbabb0000}, {0xbabb2000}, {0xbabb4000}, {0xbabb6000}, 
+    {0xbabb8000}, {0xbabba000}, {0xbabbc000}, {0xbabbe000}, 
+    {0xbabc0000}, {0xbabc2000}, {0xbabc4000}, {0xbabc6000}, 
+    {0xbabc8000}, {0xbabca000}, {0xbabcc000}, {0xbabce000}, 
+    {0xbabd0000}, {0xbabd2000}, {0xbabd4000}, {0xbabd6000}, 
+    {0xbabd8000}, {0xbabda000}, {0xbabdc000}, {0xbabde000}, 
+    {0xbabe0000}, {0xbabe2000}, {0xbabe4000}, {0xbabe6000}, 
+    {0xbabe8000}, {0xbabea000}, {0xbabec000}, {0xbabee000}, 
+    {0xbabf0000}, {0xbabf2000}, {0xbabf4000}, {0xbabf6000}, 
+    {0xbabf8000}, {0xbabfa000}, {0xbabfc000}, {0xbabfe000}, 
+    {0xbac00000}, {0xbac02000}, {0xbac04000}, {0xbac06000}, 
+    {0xbac08000}, {0xbac0a000}, {0xbac0c000}, {0xbac0e000}, 
+    {0xbac10000}, {0xbac12000}, {0xbac14000}, {0xbac16000}, 
+    {0xbac18000}, {0xbac1a000}, {0xbac1c000}, {0xbac1e000}, 
+    {0xbac20000}, {0xbac22000}, {0xbac24000}, {0xbac26000}, 
+    {0xbac28000}, {0xbac2a000}, {0xbac2c000}, {0xbac2e000}, 
+    {0xbac30000}, {0xbac32000}, {0xbac34000}, {0xbac36000}, 
+    {0xbac38000}, {0xbac3a000}, {0xbac3c000}, {0xbac3e000}, 
+    {0xbac40000}, {0xbac42000}, {0xbac44000}, {0xbac46000}, 
+    {0xbac48000}, {0xbac4a000}, {0xbac4c000}, {0xbac4e000}, 
+    {0xbac50000}, {0xbac52000}, {0xbac54000}, {0xbac56000}, 
+    {0xbac58000}, {0xbac5a000}, {0xbac5c000}, {0xbac5e000}, 
+    {0xbac60000}, {0xbac62000}, {0xbac64000}, {0xbac66000}, 
+    {0xbac68000}, {0xbac6a000}, {0xbac6c000}, {0xbac6e000}, 
+    {0xbac70000}, {0xbac72000}, {0xbac74000}, {0xbac76000}, 
+    {0xbac78000}, {0xbac7a000}, {0xbac7c000}, {0xbac7e000}, 
+    {0xbac80000}, {0xbac82000}, {0xbac84000}, {0xbac86000}, 
+    {0xbac88000}, {0xbac8a000}, {0xbac8c000}, {0xbac8e000}, 
+    {0xbac90000}, {0xbac92000}, {0xbac94000}, {0xbac96000}, 
+    {0xbac98000}, {0xbac9a000}, {0xbac9c000}, {0xbac9e000}, 
+    {0xbaca0000}, {0xbaca2000}, {0xbaca4000}, {0xbaca6000}, 
+    {0xbaca8000}, {0xbacaa000}, {0xbacac000}, {0xbacae000}, 
+    {0xbacb0000}, {0xbacb2000}, {0xbacb4000}, {0xbacb6000}, 
+    {0xbacb8000}, {0xbacba000}, {0xbacbc000}, {0xbacbe000}, 
+    {0xbacc0000}, {0xbacc2000}, {0xbacc4000}, {0xbacc6000}, 
+    {0xbacc8000}, {0xbacca000}, {0xbaccc000}, {0xbacce000}, 
+    {0xbacd0000}, {0xbacd2000}, {0xbacd4000}, {0xbacd6000}, 
+    {0xbacd8000}, {0xbacda000}, {0xbacdc000}, {0xbacde000}, 
+    {0xbace0000}, {0xbace2000}, {0xbace4000}, {0xbace6000}, 
+    {0xbace8000}, {0xbacea000}, {0xbacec000}, {0xbacee000}, 
+    {0xbacf0000}, {0xbacf2000}, {0xbacf4000}, {0xbacf6000}, 
+    {0xbacf8000}, {0xbacfa000}, {0xbacfc000}, {0xbacfe000}, 
+    {0xbad00000}, {0xbad02000}, {0xbad04000}, {0xbad06000}, 
+    {0xbad08000}, {0xbad0a000}, {0xbad0c000}, {0xbad0e000}, 
+    {0xbad10000}, {0xbad12000}, {0xbad14000}, {0xbad16000}, 
+    {0xbad18000}, {0xbad1a000}, {0xbad1c000}, {0xbad1e000}, 
+    {0xbad20000}, {0xbad22000}, {0xbad24000}, {0xbad26000}, 
+    {0xbad28000}, {0xbad2a000}, {0xbad2c000}, {0xbad2e000}, 
+    {0xbad30000}, {0xbad32000}, {0xbad34000}, {0xbad36000}, 
+    {0xbad38000}, {0xbad3a000}, {0xbad3c000}, {0xbad3e000}, 
+    {0xbad40000}, {0xbad42000}, {0xbad44000}, {0xbad46000}, 
+    {0xbad48000}, {0xbad4a000}, {0xbad4c000}, {0xbad4e000}, 
+    {0xbad50000}, {0xbad52000}, {0xbad54000}, {0xbad56000}, 
+    {0xbad58000}, {0xbad5a000}, {0xbad5c000}, {0xbad5e000}, 
+    {0xbad60000}, {0xbad62000}, {0xbad64000}, {0xbad66000}, 
+    {0xbad68000}, {0xbad6a000}, {0xbad6c000}, {0xbad6e000}, 
+    {0xbad70000}, {0xbad72000}, {0xbad74000}, {0xbad76000}, 
+    {0xbad78000}, {0xbad7a000}, {0xbad7c000}, {0xbad7e000}, 
+    {0xbad80000}, {0xbad82000}, {0xbad84000}, {0xbad86000}, 
+    {0xbad88000}, {0xbad8a000}, {0xbad8c000}, {0xbad8e000}, 
+    {0xbad90000}, {0xbad92000}, {0xbad94000}, {0xbad96000}, 
+    {0xbad98000}, {0xbad9a000}, {0xbad9c000}, {0xbad9e000}, 
+    {0xbada0000}, {0xbada2000}, {0xbada4000}, {0xbada6000}, 
+    {0xbada8000}, {0xbadaa000}, {0xbadac000}, {0xbadae000}, 
+    {0xbadb0000}, {0xbadb2000}, {0xbadb4000}, {0xbadb6000}, 
+    {0xbadb8000}, {0xbadba000}, {0xbadbc000}, {0xbadbe000}, 
+    {0xbadc0000}, {0xbadc2000}, {0xbadc4000}, {0xbadc6000}, 
+    {0xbadc8000}, {0xbadca000}, {0xbadcc000}, {0xbadce000}, 
+    {0xbadd0000}, {0xbadd2000}, {0xbadd4000}, {0xbadd6000}, 
+    {0xbadd8000}, {0xbadda000}, {0xbaddc000}, {0xbadde000}, 
+    {0xbade0000}, {0xbade2000}, {0xbade4000}, {0xbade6000}, 
+    {0xbade8000}, {0xbadea000}, {0xbadec000}, {0xbadee000}, 
+    {0xbadf0000}, {0xbadf2000}, {0xbadf4000}, {0xbadf6000}, 
+    {0xbadf8000}, {0xbadfa000}, {0xbadfc000}, {0xbadfe000}, 
+    {0xbae00000}, {0xbae02000}, {0xbae04000}, {0xbae06000}, 
+    {0xbae08000}, {0xbae0a000}, {0xbae0c000}, {0xbae0e000}, 
+    {0xbae10000}, {0xbae12000}, {0xbae14000}, {0xbae16000}, 
+    {0xbae18000}, {0xbae1a000}, {0xbae1c000}, {0xbae1e000}, 
+    {0xbae20000}, {0xbae22000}, {0xbae24000}, {0xbae26000}, 
+    {0xbae28000}, {0xbae2a000}, {0xbae2c000}, {0xbae2e000}, 
+    {0xbae30000}, {0xbae32000}, {0xbae34000}, {0xbae36000}, 
+    {0xbae38000}, {0xbae3a000}, {0xbae3c000}, {0xbae3e000}, 
+    {0xbae40000}, {0xbae42000}, {0xbae44000}, {0xbae46000}, 
+    {0xbae48000}, {0xbae4a000}, {0xbae4c000}, {0xbae4e000}, 
+    {0xbae50000}, {0xbae52000}, {0xbae54000}, {0xbae56000}, 
+    {0xbae58000}, {0xbae5a000}, {0xbae5c000}, {0xbae5e000}, 
+    {0xbae60000}, {0xbae62000}, {0xbae64000}, {0xbae66000}, 
+    {0xbae68000}, {0xbae6a000}, {0xbae6c000}, {0xbae6e000}, 
+    {0xbae70000}, {0xbae72000}, {0xbae74000}, {0xbae76000}, 
+    {0xbae78000}, {0xbae7a000}, {0xbae7c000}, {0xbae7e000}, 
+    {0xbae80000}, {0xbae82000}, {0xbae84000}, {0xbae86000}, 
+    {0xbae88000}, {0xbae8a000}, {0xbae8c000}, {0xbae8e000}, 
+    {0xbae90000}, {0xbae92000}, {0xbae94000}, {0xbae96000}, 
+    {0xbae98000}, {0xbae9a000}, {0xbae9c000}, {0xbae9e000}, 
+    {0xbaea0000}, {0xbaea2000}, {0xbaea4000}, {0xbaea6000}, 
+    {0xbaea8000}, {0xbaeaa000}, {0xbaeac000}, {0xbaeae000}, 
+    {0xbaeb0000}, {0xbaeb2000}, {0xbaeb4000}, {0xbaeb6000}, 
+    {0xbaeb8000}, {0xbaeba000}, {0xbaebc000}, {0xbaebe000}, 
+    {0xbaec0000}, {0xbaec2000}, {0xbaec4000}, {0xbaec6000}, 
+    {0xbaec8000}, {0xbaeca000}, {0xbaecc000}, {0xbaece000}, 
+    {0xbaed0000}, {0xbaed2000}, {0xbaed4000}, {0xbaed6000}, 
+    {0xbaed8000}, {0xbaeda000}, {0xbaedc000}, {0xbaede000}, 
+    {0xbaee0000}, {0xbaee2000}, {0xbaee4000}, {0xbaee6000}, 
+    {0xbaee8000}, {0xbaeea000}, {0xbaeec000}, {0xbaeee000}, 
+    {0xbaef0000}, {0xbaef2000}, {0xbaef4000}, {0xbaef6000}, 
+    {0xbaef8000}, {0xbaefa000}, {0xbaefc000}, {0xbaefe000}, 
+    {0xbaf00000}, {0xbaf02000}, {0xbaf04000}, {0xbaf06000}, 
+    {0xbaf08000}, {0xbaf0a000}, {0xbaf0c000}, {0xbaf0e000}, 
+    {0xbaf10000}, {0xbaf12000}, {0xbaf14000}, {0xbaf16000}, 
+    {0xbaf18000}, {0xbaf1a000}, {0xbaf1c000}, {0xbaf1e000}, 
+    {0xbaf20000}, {0xbaf22000}, {0xbaf24000}, {0xbaf26000}, 
+    {0xbaf28000}, {0xbaf2a000}, {0xbaf2c000}, {0xbaf2e000}, 
+    {0xbaf30000}, {0xbaf32000}, {0xbaf34000}, {0xbaf36000}, 
+    {0xbaf38000}, {0xbaf3a000}, {0xbaf3c000}, {0xbaf3e000}, 
+    {0xbaf40000}, {0xbaf42000}, {0xbaf44000}, {0xbaf46000}, 
+    {0xbaf48000}, {0xbaf4a000}, {0xbaf4c000}, {0xbaf4e000}, 
+    {0xbaf50000}, {0xbaf52000}, {0xbaf54000}, {0xbaf56000}, 
+    {0xbaf58000}, {0xbaf5a000}, {0xbaf5c000}, {0xbaf5e000}, 
+    {0xbaf60000}, {0xbaf62000}, {0xbaf64000}, {0xbaf66000}, 
+    {0xbaf68000}, {0xbaf6a000}, {0xbaf6c000}, {0xbaf6e000}, 
+    {0xbaf70000}, {0xbaf72000}, {0xbaf74000}, {0xbaf76000}, 
+    {0xbaf78000}, {0xbaf7a000}, {0xbaf7c000}, {0xbaf7e000}, 
+    {0xbaf80000}, {0xbaf82000}, {0xbaf84000}, {0xbaf86000}, 
+    {0xbaf88000}, {0xbaf8a000}, {0xbaf8c000}, {0xbaf8e000}, 
+    {0xbaf90000}, {0xbaf92000}, {0xbaf94000}, {0xbaf96000}, 
+    {0xbaf98000}, {0xbaf9a000}, {0xbaf9c000}, {0xbaf9e000}, 
+    {0xbafa0000}, {0xbafa2000}, {0xbafa4000}, {0xbafa6000}, 
+    {0xbafa8000}, {0xbafaa000}, {0xbafac000}, {0xbafae000}, 
+    {0xbafb0000}, {0xbafb2000}, {0xbafb4000}, {0xbafb6000}, 
+    {0xbafb8000}, {0xbafba000}, {0xbafbc000}, {0xbafbe000}, 
+    {0xbafc0000}, {0xbafc2000}, {0xbafc4000}, {0xbafc6000}, 
+    {0xbafc8000}, {0xbafca000}, {0xbafcc000}, {0xbafce000}, 
+    {0xbafd0000}, {0xbafd2000}, {0xbafd4000}, {0xbafd6000}, 
+    {0xbafd8000}, {0xbafda000}, {0xbafdc000}, {0xbafde000}, 
+    {0xbafe0000}, {0xbafe2000}, {0xbafe4000}, {0xbafe6000}, 
+    {0xbafe8000}, {0xbafea000}, {0xbafec000}, {0xbafee000}, 
+    {0xbaff0000}, {0xbaff2000}, {0xbaff4000}, {0xbaff6000}, 
+    {0xbaff8000}, {0xbaffa000}, {0xbaffc000}, {0xbaffe000}, 
+    {0xbb000000}, {0xbb002000}, {0xbb004000}, {0xbb006000}, 
+    {0xbb008000}, {0xbb00a000}, {0xbb00c000}, {0xbb00e000}, 
+    {0xbb010000}, {0xbb012000}, {0xbb014000}, {0xbb016000}, 
+    {0xbb018000}, {0xbb01a000}, {0xbb01c000}, {0xbb01e000}, 
+    {0xbb020000}, {0xbb022000}, {0xbb024000}, {0xbb026000}, 
+    {0xbb028000}, {0xbb02a000}, {0xbb02c000}, {0xbb02e000}, 
+    {0xbb030000}, {0xbb032000}, {0xbb034000}, {0xbb036000}, 
+    {0xbb038000}, {0xbb03a000}, {0xbb03c000}, {0xbb03e000}, 
+    {0xbb040000}, {0xbb042000}, {0xbb044000}, {0xbb046000}, 
+    {0xbb048000}, {0xbb04a000}, {0xbb04c000}, {0xbb04e000}, 
+    {0xbb050000}, {0xbb052000}, {0xbb054000}, {0xbb056000}, 
+    {0xbb058000}, {0xbb05a000}, {0xbb05c000}, {0xbb05e000}, 
+    {0xbb060000}, {0xbb062000}, {0xbb064000}, {0xbb066000}, 
+    {0xbb068000}, {0xbb06a000}, {0xbb06c000}, {0xbb06e000}, 
+    {0xbb070000}, {0xbb072000}, {0xbb074000}, {0xbb076000}, 
+    {0xbb078000}, {0xbb07a000}, {0xbb07c000}, {0xbb07e000}, 
+    {0xbb080000}, {0xbb082000}, {0xbb084000}, {0xbb086000}, 
+    {0xbb088000}, {0xbb08a000}, {0xbb08c000}, {0xbb08e000}, 
+    {0xbb090000}, {0xbb092000}, {0xbb094000}, {0xbb096000}, 
+    {0xbb098000}, {0xbb09a000}, {0xbb09c000}, {0xbb09e000}, 
+    {0xbb0a0000}, {0xbb0a2000}, {0xbb0a4000}, {0xbb0a6000}, 
+    {0xbb0a8000}, {0xbb0aa000}, {0xbb0ac000}, {0xbb0ae000}, 
+    {0xbb0b0000}, {0xbb0b2000}, {0xbb0b4000}, {0xbb0b6000}, 
+    {0xbb0b8000}, {0xbb0ba000}, {0xbb0bc000}, {0xbb0be000}, 
+    {0xbb0c0000}, {0xbb0c2000}, {0xbb0c4000}, {0xbb0c6000}, 
+    {0xbb0c8000}, {0xbb0ca000}, {0xbb0cc000}, {0xbb0ce000}, 
+    {0xbb0d0000}, {0xbb0d2000}, {0xbb0d4000}, {0xbb0d6000}, 
+    {0xbb0d8000}, {0xbb0da000}, {0xbb0dc000}, {0xbb0de000}, 
+    {0xbb0e0000}, {0xbb0e2000}, {0xbb0e4000}, {0xbb0e6000}, 
+    {0xbb0e8000}, {0xbb0ea000}, {0xbb0ec000}, {0xbb0ee000}, 
+    {0xbb0f0000}, {0xbb0f2000}, {0xbb0f4000}, {0xbb0f6000}, 
+    {0xbb0f8000}, {0xbb0fa000}, {0xbb0fc000}, {0xbb0fe000}, 
+    {0xbb100000}, {0xbb102000}, {0xbb104000}, {0xbb106000}, 
+    {0xbb108000}, {0xbb10a000}, {0xbb10c000}, {0xbb10e000}, 
+    {0xbb110000}, {0xbb112000}, {0xbb114000}, {0xbb116000}, 
+    {0xbb118000}, {0xbb11a000}, {0xbb11c000}, {0xbb11e000}, 
+    {0xbb120000}, {0xbb122000}, {0xbb124000}, {0xbb126000}, 
+    {0xbb128000}, {0xbb12a000}, {0xbb12c000}, {0xbb12e000}, 
+    {0xbb130000}, {0xbb132000}, {0xbb134000}, {0xbb136000}, 
+    {0xbb138000}, {0xbb13a000}, {0xbb13c000}, {0xbb13e000}, 
+    {0xbb140000}, {0xbb142000}, {0xbb144000}, {0xbb146000}, 
+    {0xbb148000}, {0xbb14a000}, {0xbb14c000}, {0xbb14e000}, 
+    {0xbb150000}, {0xbb152000}, {0xbb154000}, {0xbb156000}, 
+    {0xbb158000}, {0xbb15a000}, {0xbb15c000}, {0xbb15e000}, 
+    {0xbb160000}, {0xbb162000}, {0xbb164000}, {0xbb166000}, 
+    {0xbb168000}, {0xbb16a000}, {0xbb16c000}, {0xbb16e000}, 
+    {0xbb170000}, {0xbb172000}, {0xbb174000}, {0xbb176000}, 
+    {0xbb178000}, {0xbb17a000}, {0xbb17c000}, {0xbb17e000}, 
+    {0xbb180000}, {0xbb182000}, {0xbb184000}, {0xbb186000}, 
+    {0xbb188000}, {0xbb18a000}, {0xbb18c000}, {0xbb18e000}, 
+    {0xbb190000}, {0xbb192000}, {0xbb194000}, {0xbb196000}, 
+    {0xbb198000}, {0xbb19a000}, {0xbb19c000}, {0xbb19e000}, 
+    {0xbb1a0000}, {0xbb1a2000}, {0xbb1a4000}, {0xbb1a6000}, 
+    {0xbb1a8000}, {0xbb1aa000}, {0xbb1ac000}, {0xbb1ae000}, 
+    {0xbb1b0000}, {0xbb1b2000}, {0xbb1b4000}, {0xbb1b6000}, 
+    {0xbb1b8000}, {0xbb1ba000}, {0xbb1bc000}, {0xbb1be000}, 
+    {0xbb1c0000}, {0xbb1c2000}, {0xbb1c4000}, {0xbb1c6000}, 
+    {0xbb1c8000}, {0xbb1ca000}, {0xbb1cc000}, {0xbb1ce000}, 
+    {0xbb1d0000}, {0xbb1d2000}, {0xbb1d4000}, {0xbb1d6000}, 
+    {0xbb1d8000}, {0xbb1da000}, {0xbb1dc000}, {0xbb1de000}, 
+    {0xbb1e0000}, {0xbb1e2000}, {0xbb1e4000}, {0xbb1e6000}, 
+    {0xbb1e8000}, {0xbb1ea000}, {0xbb1ec000}, {0xbb1ee000}, 
+    {0xbb1f0000}, {0xbb1f2000}, {0xbb1f4000}, {0xbb1f6000}, 
+    {0xbb1f8000}, {0xbb1fa000}, {0xbb1fc000}, {0xbb1fe000}, 
+    {0xbb200000}, {0xbb202000}, {0xbb204000}, {0xbb206000}, 
+    {0xbb208000}, {0xbb20a000}, {0xbb20c000}, {0xbb20e000}, 
+    {0xbb210000}, {0xbb212000}, {0xbb214000}, {0xbb216000}, 
+    {0xbb218000}, {0xbb21a000}, {0xbb21c000}, {0xbb21e000}, 
+    {0xbb220000}, {0xbb222000}, {0xbb224000}, {0xbb226000}, 
+    {0xbb228000}, {0xbb22a000}, {0xbb22c000}, {0xbb22e000}, 
+    {0xbb230000}, {0xbb232000}, {0xbb234000}, {0xbb236000}, 
+    {0xbb238000}, {0xbb23a000}, {0xbb23c000}, {0xbb23e000}, 
+    {0xbb240000}, {0xbb242000}, {0xbb244000}, {0xbb246000}, 
+    {0xbb248000}, {0xbb24a000}, {0xbb24c000}, {0xbb24e000}, 
+    {0xbb250000}, {0xbb252000}, {0xbb254000}, {0xbb256000}, 
+    {0xbb258000}, {0xbb25a000}, {0xbb25c000}, {0xbb25e000}, 
+    {0xbb260000}, {0xbb262000}, {0xbb264000}, {0xbb266000}, 
+    {0xbb268000}, {0xbb26a000}, {0xbb26c000}, {0xbb26e000}, 
+    {0xbb270000}, {0xbb272000}, {0xbb274000}, {0xbb276000}, 
+    {0xbb278000}, {0xbb27a000}, {0xbb27c000}, {0xbb27e000}, 
+    {0xbb280000}, {0xbb282000}, {0xbb284000}, {0xbb286000}, 
+    {0xbb288000}, {0xbb28a000}, {0xbb28c000}, {0xbb28e000}, 
+    {0xbb290000}, {0xbb292000}, {0xbb294000}, {0xbb296000}, 
+    {0xbb298000}, {0xbb29a000}, {0xbb29c000}, {0xbb29e000}, 
+    {0xbb2a0000}, {0xbb2a2000}, {0xbb2a4000}, {0xbb2a6000}, 
+    {0xbb2a8000}, {0xbb2aa000}, {0xbb2ac000}, {0xbb2ae000}, 
+    {0xbb2b0000}, {0xbb2b2000}, {0xbb2b4000}, {0xbb2b6000}, 
+    {0xbb2b8000}, {0xbb2ba000}, {0xbb2bc000}, {0xbb2be000}, 
+    {0xbb2c0000}, {0xbb2c2000}, {0xbb2c4000}, {0xbb2c6000}, 
+    {0xbb2c8000}, {0xbb2ca000}, {0xbb2cc000}, {0xbb2ce000}, 
+    {0xbb2d0000}, {0xbb2d2000}, {0xbb2d4000}, {0xbb2d6000}, 
+    {0xbb2d8000}, {0xbb2da000}, {0xbb2dc000}, {0xbb2de000}, 
+    {0xbb2e0000}, {0xbb2e2000}, {0xbb2e4000}, {0xbb2e6000}, 
+    {0xbb2e8000}, {0xbb2ea000}, {0xbb2ec000}, {0xbb2ee000}, 
+    {0xbb2f0000}, {0xbb2f2000}, {0xbb2f4000}, {0xbb2f6000}, 
+    {0xbb2f8000}, {0xbb2fa000}, {0xbb2fc000}, {0xbb2fe000}, 
+    {0xbb300000}, {0xbb302000}, {0xbb304000}, {0xbb306000}, 
+    {0xbb308000}, {0xbb30a000}, {0xbb30c000}, {0xbb30e000}, 
+    {0xbb310000}, {0xbb312000}, {0xbb314000}, {0xbb316000}, 
+    {0xbb318000}, {0xbb31a000}, {0xbb31c000}, {0xbb31e000}, 
+    {0xbb320000}, {0xbb322000}, {0xbb324000}, {0xbb326000}, 
+    {0xbb328000}, {0xbb32a000}, {0xbb32c000}, {0xbb32e000}, 
+    {0xbb330000}, {0xbb332000}, {0xbb334000}, {0xbb336000}, 
+    {0xbb338000}, {0xbb33a000}, {0xbb33c000}, {0xbb33e000}, 
+    {0xbb340000}, {0xbb342000}, {0xbb344000}, {0xbb346000}, 
+    {0xbb348000}, {0xbb34a000}, {0xbb34c000}, {0xbb34e000}, 
+    {0xbb350000}, {0xbb352000}, {0xbb354000}, {0xbb356000}, 
+    {0xbb358000}, {0xbb35a000}, {0xbb35c000}, {0xbb35e000}, 
+    {0xbb360000}, {0xbb362000}, {0xbb364000}, {0xbb366000}, 
+    {0xbb368000}, {0xbb36a000}, {0xbb36c000}, {0xbb36e000}, 
+    {0xbb370000}, {0xbb372000}, {0xbb374000}, {0xbb376000}, 
+    {0xbb378000}, {0xbb37a000}, {0xbb37c000}, {0xbb37e000}, 
+    {0xbb380000}, {0xbb382000}, {0xbb384000}, {0xbb386000}, 
+    {0xbb388000}, {0xbb38a000}, {0xbb38c000}, {0xbb38e000}, 
+    {0xbb390000}, {0xbb392000}, {0xbb394000}, {0xbb396000}, 
+    {0xbb398000}, {0xbb39a000}, {0xbb39c000}, {0xbb39e000}, 
+    {0xbb3a0000}, {0xbb3a2000}, {0xbb3a4000}, {0xbb3a6000}, 
+    {0xbb3a8000}, {0xbb3aa000}, {0xbb3ac000}, {0xbb3ae000}, 
+    {0xbb3b0000}, {0xbb3b2000}, {0xbb3b4000}, {0xbb3b6000}, 
+    {0xbb3b8000}, {0xbb3ba000}, {0xbb3bc000}, {0xbb3be000}, 
+    {0xbb3c0000}, {0xbb3c2000}, {0xbb3c4000}, {0xbb3c6000}, 
+    {0xbb3c8000}, {0xbb3ca000}, {0xbb3cc000}, {0xbb3ce000}, 
+    {0xbb3d0000}, {0xbb3d2000}, {0xbb3d4000}, {0xbb3d6000}, 
+    {0xbb3d8000}, {0xbb3da000}, {0xbb3dc000}, {0xbb3de000}, 
+    {0xbb3e0000}, {0xbb3e2000}, {0xbb3e4000}, {0xbb3e6000}, 
+    {0xbb3e8000}, {0xbb3ea000}, {0xbb3ec000}, {0xbb3ee000}, 
+    {0xbb3f0000}, {0xbb3f2000}, {0xbb3f4000}, {0xbb3f6000}, 
+    {0xbb3f8000}, {0xbb3fa000}, {0xbb3fc000}, {0xbb3fe000}, 
+    {0xbb400000}, {0xbb402000}, {0xbb404000}, {0xbb406000}, 
+    {0xbb408000}, {0xbb40a000}, {0xbb40c000}, {0xbb40e000}, 
+    {0xbb410000}, {0xbb412000}, {0xbb414000}, {0xbb416000}, 
+    {0xbb418000}, {0xbb41a000}, {0xbb41c000}, {0xbb41e000}, 
+    {0xbb420000}, {0xbb422000}, {0xbb424000}, {0xbb426000}, 
+    {0xbb428000}, {0xbb42a000}, {0xbb42c000}, {0xbb42e000}, 
+    {0xbb430000}, {0xbb432000}, {0xbb434000}, {0xbb436000}, 
+    {0xbb438000}, {0xbb43a000}, {0xbb43c000}, {0xbb43e000}, 
+    {0xbb440000}, {0xbb442000}, {0xbb444000}, {0xbb446000}, 
+    {0xbb448000}, {0xbb44a000}, {0xbb44c000}, {0xbb44e000}, 
+    {0xbb450000}, {0xbb452000}, {0xbb454000}, {0xbb456000}, 
+    {0xbb458000}, {0xbb45a000}, {0xbb45c000}, {0xbb45e000}, 
+    {0xbb460000}, {0xbb462000}, {0xbb464000}, {0xbb466000}, 
+    {0xbb468000}, {0xbb46a000}, {0xbb46c000}, {0xbb46e000}, 
+    {0xbb470000}, {0xbb472000}, {0xbb474000}, {0xbb476000}, 
+    {0xbb478000}, {0xbb47a000}, {0xbb47c000}, {0xbb47e000}, 
+    {0xbb480000}, {0xbb482000}, {0xbb484000}, {0xbb486000}, 
+    {0xbb488000}, {0xbb48a000}, {0xbb48c000}, {0xbb48e000}, 
+    {0xbb490000}, {0xbb492000}, {0xbb494000}, {0xbb496000}, 
+    {0xbb498000}, {0xbb49a000}, {0xbb49c000}, {0xbb49e000}, 
+    {0xbb4a0000}, {0xbb4a2000}, {0xbb4a4000}, {0xbb4a6000}, 
+    {0xbb4a8000}, {0xbb4aa000}, {0xbb4ac000}, {0xbb4ae000}, 
+    {0xbb4b0000}, {0xbb4b2000}, {0xbb4b4000}, {0xbb4b6000}, 
+    {0xbb4b8000}, {0xbb4ba000}, {0xbb4bc000}, {0xbb4be000}, 
+    {0xbb4c0000}, {0xbb4c2000}, {0xbb4c4000}, {0xbb4c6000}, 
+    {0xbb4c8000}, {0xbb4ca000}, {0xbb4cc000}, {0xbb4ce000}, 
+    {0xbb4d0000}, {0xbb4d2000}, {0xbb4d4000}, {0xbb4d6000}, 
+    {0xbb4d8000}, {0xbb4da000}, {0xbb4dc000}, {0xbb4de000}, 
+    {0xbb4e0000}, {0xbb4e2000}, {0xbb4e4000}, {0xbb4e6000}, 
+    {0xbb4e8000}, {0xbb4ea000}, {0xbb4ec000}, {0xbb4ee000}, 
+    {0xbb4f0000}, {0xbb4f2000}, {0xbb4f4000}, {0xbb4f6000}, 
+    {0xbb4f8000}, {0xbb4fa000}, {0xbb4fc000}, {0xbb4fe000}, 
+    {0xbb500000}, {0xbb502000}, {0xbb504000}, {0xbb506000}, 
+    {0xbb508000}, {0xbb50a000}, {0xbb50c000}, {0xbb50e000}, 
+    {0xbb510000}, {0xbb512000}, {0xbb514000}, {0xbb516000}, 
+    {0xbb518000}, {0xbb51a000}, {0xbb51c000}, {0xbb51e000}, 
+    {0xbb520000}, {0xbb522000}, {0xbb524000}, {0xbb526000}, 
+    {0xbb528000}, {0xbb52a000}, {0xbb52c000}, {0xbb52e000}, 
+    {0xbb530000}, {0xbb532000}, {0xbb534000}, {0xbb536000}, 
+    {0xbb538000}, {0xbb53a000}, {0xbb53c000}, {0xbb53e000}, 
+    {0xbb540000}, {0xbb542000}, {0xbb544000}, {0xbb546000}, 
+    {0xbb548000}, {0xbb54a000}, {0xbb54c000}, {0xbb54e000}, 
+    {0xbb550000}, {0xbb552000}, {0xbb554000}, {0xbb556000}, 
+    {0xbb558000}, {0xbb55a000}, {0xbb55c000}, {0xbb55e000}, 
+    {0xbb560000}, {0xbb562000}, {0xbb564000}, {0xbb566000}, 
+    {0xbb568000}, {0xbb56a000}, {0xbb56c000}, {0xbb56e000}, 
+    {0xbb570000}, {0xbb572000}, {0xbb574000}, {0xbb576000}, 
+    {0xbb578000}, {0xbb57a000}, {0xbb57c000}, {0xbb57e000}, 
+    {0xbb580000}, {0xbb582000}, {0xbb584000}, {0xbb586000}, 
+    {0xbb588000}, {0xbb58a000}, {0xbb58c000}, {0xbb58e000}, 
+    {0xbb590000}, {0xbb592000}, {0xbb594000}, {0xbb596000}, 
+    {0xbb598000}, {0xbb59a000}, {0xbb59c000}, {0xbb59e000}, 
+    {0xbb5a0000}, {0xbb5a2000}, {0xbb5a4000}, {0xbb5a6000}, 
+    {0xbb5a8000}, {0xbb5aa000}, {0xbb5ac000}, {0xbb5ae000}, 
+    {0xbb5b0000}, {0xbb5b2000}, {0xbb5b4000}, {0xbb5b6000}, 
+    {0xbb5b8000}, {0xbb5ba000}, {0xbb5bc000}, {0xbb5be000}, 
+    {0xbb5c0000}, {0xbb5c2000}, {0xbb5c4000}, {0xbb5c6000}, 
+    {0xbb5c8000}, {0xbb5ca000}, {0xbb5cc000}, {0xbb5ce000}, 
+    {0xbb5d0000}, {0xbb5d2000}, {0xbb5d4000}, {0xbb5d6000}, 
+    {0xbb5d8000}, {0xbb5da000}, {0xbb5dc000}, {0xbb5de000}, 
+    {0xbb5e0000}, {0xbb5e2000}, {0xbb5e4000}, {0xbb5e6000}, 
+    {0xbb5e8000}, {0xbb5ea000}, {0xbb5ec000}, {0xbb5ee000}, 
+    {0xbb5f0000}, {0xbb5f2000}, {0xbb5f4000}, {0xbb5f6000}, 
+    {0xbb5f8000}, {0xbb5fa000}, {0xbb5fc000}, {0xbb5fe000}, 
+    {0xbb600000}, {0xbb602000}, {0xbb604000}, {0xbb606000}, 
+    {0xbb608000}, {0xbb60a000}, {0xbb60c000}, {0xbb60e000}, 
+    {0xbb610000}, {0xbb612000}, {0xbb614000}, {0xbb616000}, 
+    {0xbb618000}, {0xbb61a000}, {0xbb61c000}, {0xbb61e000}, 
+    {0xbb620000}, {0xbb622000}, {0xbb624000}, {0xbb626000}, 
+    {0xbb628000}, {0xbb62a000}, {0xbb62c000}, {0xbb62e000}, 
+    {0xbb630000}, {0xbb632000}, {0xbb634000}, {0xbb636000}, 
+    {0xbb638000}, {0xbb63a000}, {0xbb63c000}, {0xbb63e000}, 
+    {0xbb640000}, {0xbb642000}, {0xbb644000}, {0xbb646000}, 
+    {0xbb648000}, {0xbb64a000}, {0xbb64c000}, {0xbb64e000}, 
+    {0xbb650000}, {0xbb652000}, {0xbb654000}, {0xbb656000}, 
+    {0xbb658000}, {0xbb65a000}, {0xbb65c000}, {0xbb65e000}, 
+    {0xbb660000}, {0xbb662000}, {0xbb664000}, {0xbb666000}, 
+    {0xbb668000}, {0xbb66a000}, {0xbb66c000}, {0xbb66e000}, 
+    {0xbb670000}, {0xbb672000}, {0xbb674000}, {0xbb676000}, 
+    {0xbb678000}, {0xbb67a000}, {0xbb67c000}, {0xbb67e000}, 
+    {0xbb680000}, {0xbb682000}, {0xbb684000}, {0xbb686000}, 
+    {0xbb688000}, {0xbb68a000}, {0xbb68c000}, {0xbb68e000}, 
+    {0xbb690000}, {0xbb692000}, {0xbb694000}, {0xbb696000}, 
+    {0xbb698000}, {0xbb69a000}, {0xbb69c000}, {0xbb69e000}, 
+    {0xbb6a0000}, {0xbb6a2000}, {0xbb6a4000}, {0xbb6a6000}, 
+    {0xbb6a8000}, {0xbb6aa000}, {0xbb6ac000}, {0xbb6ae000}, 
+    {0xbb6b0000}, {0xbb6b2000}, {0xbb6b4000}, {0xbb6b6000}, 
+    {0xbb6b8000}, {0xbb6ba000}, {0xbb6bc000}, {0xbb6be000}, 
+    {0xbb6c0000}, {0xbb6c2000}, {0xbb6c4000}, {0xbb6c6000}, 
+    {0xbb6c8000}, {0xbb6ca000}, {0xbb6cc000}, {0xbb6ce000}, 
+    {0xbb6d0000}, {0xbb6d2000}, {0xbb6d4000}, {0xbb6d6000}, 
+    {0xbb6d8000}, {0xbb6da000}, {0xbb6dc000}, {0xbb6de000}, 
+    {0xbb6e0000}, {0xbb6e2000}, {0xbb6e4000}, {0xbb6e6000}, 
+    {0xbb6e8000}, {0xbb6ea000}, {0xbb6ec000}, {0xbb6ee000}, 
+    {0xbb6f0000}, {0xbb6f2000}, {0xbb6f4000}, {0xbb6f6000}, 
+    {0xbb6f8000}, {0xbb6fa000}, {0xbb6fc000}, {0xbb6fe000}, 
+    {0xbb700000}, {0xbb702000}, {0xbb704000}, {0xbb706000}, 
+    {0xbb708000}, {0xbb70a000}, {0xbb70c000}, {0xbb70e000}, 
+    {0xbb710000}, {0xbb712000}, {0xbb714000}, {0xbb716000}, 
+    {0xbb718000}, {0xbb71a000}, {0xbb71c000}, {0xbb71e000}, 
+    {0xbb720000}, {0xbb722000}, {0xbb724000}, {0xbb726000}, 
+    {0xbb728000}, {0xbb72a000}, {0xbb72c000}, {0xbb72e000}, 
+    {0xbb730000}, {0xbb732000}, {0xbb734000}, {0xbb736000}, 
+    {0xbb738000}, {0xbb73a000}, {0xbb73c000}, {0xbb73e000}, 
+    {0xbb740000}, {0xbb742000}, {0xbb744000}, {0xbb746000}, 
+    {0xbb748000}, {0xbb74a000}, {0xbb74c000}, {0xbb74e000}, 
+    {0xbb750000}, {0xbb752000}, {0xbb754000}, {0xbb756000}, 
+    {0xbb758000}, {0xbb75a000}, {0xbb75c000}, {0xbb75e000}, 
+    {0xbb760000}, {0xbb762000}, {0xbb764000}, {0xbb766000}, 
+    {0xbb768000}, {0xbb76a000}, {0xbb76c000}, {0xbb76e000}, 
+    {0xbb770000}, {0xbb772000}, {0xbb774000}, {0xbb776000}, 
+    {0xbb778000}, {0xbb77a000}, {0xbb77c000}, {0xbb77e000}, 
+    {0xbb780000}, {0xbb782000}, {0xbb784000}, {0xbb786000}, 
+    {0xbb788000}, {0xbb78a000}, {0xbb78c000}, {0xbb78e000}, 
+    {0xbb790000}, {0xbb792000}, {0xbb794000}, {0xbb796000}, 
+    {0xbb798000}, {0xbb79a000}, {0xbb79c000}, {0xbb79e000}, 
+    {0xbb7a0000}, {0xbb7a2000}, {0xbb7a4000}, {0xbb7a6000}, 
+    {0xbb7a8000}, {0xbb7aa000}, {0xbb7ac000}, {0xbb7ae000}, 
+    {0xbb7b0000}, {0xbb7b2000}, {0xbb7b4000}, {0xbb7b6000}, 
+    {0xbb7b8000}, {0xbb7ba000}, {0xbb7bc000}, {0xbb7be000}, 
+    {0xbb7c0000}, {0xbb7c2000}, {0xbb7c4000}, {0xbb7c6000}, 
+    {0xbb7c8000}, {0xbb7ca000}, {0xbb7cc000}, {0xbb7ce000}, 
+    {0xbb7d0000}, {0xbb7d2000}, {0xbb7d4000}, {0xbb7d6000}, 
+    {0xbb7d8000}, {0xbb7da000}, {0xbb7dc000}, {0xbb7de000}, 
+    {0xbb7e0000}, {0xbb7e2000}, {0xbb7e4000}, {0xbb7e6000}, 
+    {0xbb7e8000}, {0xbb7ea000}, {0xbb7ec000}, {0xbb7ee000}, 
+    {0xbb7f0000}, {0xbb7f2000}, {0xbb7f4000}, {0xbb7f6000}, 
+    {0xbb7f8000}, {0xbb7fa000}, {0xbb7fc000}, {0xbb7fe000}, 
+    {0xbb800000}, {0xbb802000}, {0xbb804000}, {0xbb806000}, 
+    {0xbb808000}, {0xbb80a000}, {0xbb80c000}, {0xbb80e000}, 
+    {0xbb810000}, {0xbb812000}, {0xbb814000}, {0xbb816000}, 
+    {0xbb818000}, {0xbb81a000}, {0xbb81c000}, {0xbb81e000}, 
+    {0xbb820000}, {0xbb822000}, {0xbb824000}, {0xbb826000}, 
+    {0xbb828000}, {0xbb82a000}, {0xbb82c000}, {0xbb82e000}, 
+    {0xbb830000}, {0xbb832000}, {0xbb834000}, {0xbb836000}, 
+    {0xbb838000}, {0xbb83a000}, {0xbb83c000}, {0xbb83e000}, 
+    {0xbb840000}, {0xbb842000}, {0xbb844000}, {0xbb846000}, 
+    {0xbb848000}, {0xbb84a000}, {0xbb84c000}, {0xbb84e000}, 
+    {0xbb850000}, {0xbb852000}, {0xbb854000}, {0xbb856000}, 
+    {0xbb858000}, {0xbb85a000}, {0xbb85c000}, {0xbb85e000}, 
+    {0xbb860000}, {0xbb862000}, {0xbb864000}, {0xbb866000}, 
+    {0xbb868000}, {0xbb86a000}, {0xbb86c000}, {0xbb86e000}, 
+    {0xbb870000}, {0xbb872000}, {0xbb874000}, {0xbb876000}, 
+    {0xbb878000}, {0xbb87a000}, {0xbb87c000}, {0xbb87e000}, 
+    {0xbb880000}, {0xbb882000}, {0xbb884000}, {0xbb886000}, 
+    {0xbb888000}, {0xbb88a000}, {0xbb88c000}, {0xbb88e000}, 
+    {0xbb890000}, {0xbb892000}, {0xbb894000}, {0xbb896000}, 
+    {0xbb898000}, {0xbb89a000}, {0xbb89c000}, {0xbb89e000}, 
+    {0xbb8a0000}, {0xbb8a2000}, {0xbb8a4000}, {0xbb8a6000}, 
+    {0xbb8a8000}, {0xbb8aa000}, {0xbb8ac000}, {0xbb8ae000}, 
+    {0xbb8b0000}, {0xbb8b2000}, {0xbb8b4000}, {0xbb8b6000}, 
+    {0xbb8b8000}, {0xbb8ba000}, {0xbb8bc000}, {0xbb8be000}, 
+    {0xbb8c0000}, {0xbb8c2000}, {0xbb8c4000}, {0xbb8c6000}, 
+    {0xbb8c8000}, {0xbb8ca000}, {0xbb8cc000}, {0xbb8ce000}, 
+    {0xbb8d0000}, {0xbb8d2000}, {0xbb8d4000}, {0xbb8d6000}, 
+    {0xbb8d8000}, {0xbb8da000}, {0xbb8dc000}, {0xbb8de000}, 
+    {0xbb8e0000}, {0xbb8e2000}, {0xbb8e4000}, {0xbb8e6000}, 
+    {0xbb8e8000}, {0xbb8ea000}, {0xbb8ec000}, {0xbb8ee000}, 
+    {0xbb8f0000}, {0xbb8f2000}, {0xbb8f4000}, {0xbb8f6000}, 
+    {0xbb8f8000}, {0xbb8fa000}, {0xbb8fc000}, {0xbb8fe000}, 
+    {0xbb900000}, {0xbb902000}, {0xbb904000}, {0xbb906000}, 
+    {0xbb908000}, {0xbb90a000}, {0xbb90c000}, {0xbb90e000}, 
+    {0xbb910000}, {0xbb912000}, {0xbb914000}, {0xbb916000}, 
+    {0xbb918000}, {0xbb91a000}, {0xbb91c000}, {0xbb91e000}, 
+    {0xbb920000}, {0xbb922000}, {0xbb924000}, {0xbb926000}, 
+    {0xbb928000}, {0xbb92a000}, {0xbb92c000}, {0xbb92e000}, 
+    {0xbb930000}, {0xbb932000}, {0xbb934000}, {0xbb936000}, 
+    {0xbb938000}, {0xbb93a000}, {0xbb93c000}, {0xbb93e000}, 
+    {0xbb940000}, {0xbb942000}, {0xbb944000}, {0xbb946000}, 
+    {0xbb948000}, {0xbb94a000}, {0xbb94c000}, {0xbb94e000}, 
+    {0xbb950000}, {0xbb952000}, {0xbb954000}, {0xbb956000}, 
+    {0xbb958000}, {0xbb95a000}, {0xbb95c000}, {0xbb95e000}, 
+    {0xbb960000}, {0xbb962000}, {0xbb964000}, {0xbb966000}, 
+    {0xbb968000}, {0xbb96a000}, {0xbb96c000}, {0xbb96e000}, 
+    {0xbb970000}, {0xbb972000}, {0xbb974000}, {0xbb976000}, 
+    {0xbb978000}, {0xbb97a000}, {0xbb97c000}, {0xbb97e000}, 
+    {0xbb980000}, {0xbb982000}, {0xbb984000}, {0xbb986000}, 
+    {0xbb988000}, {0xbb98a000}, {0xbb98c000}, {0xbb98e000}, 
+    {0xbb990000}, {0xbb992000}, {0xbb994000}, {0xbb996000}, 
+    {0xbb998000}, {0xbb99a000}, {0xbb99c000}, {0xbb99e000}, 
+    {0xbb9a0000}, {0xbb9a2000}, {0xbb9a4000}, {0xbb9a6000}, 
+    {0xbb9a8000}, {0xbb9aa000}, {0xbb9ac000}, {0xbb9ae000}, 
+    {0xbb9b0000}, {0xbb9b2000}, {0xbb9b4000}, {0xbb9b6000}, 
+    {0xbb9b8000}, {0xbb9ba000}, {0xbb9bc000}, {0xbb9be000}, 
+    {0xbb9c0000}, {0xbb9c2000}, {0xbb9c4000}, {0xbb9c6000}, 
+    {0xbb9c8000}, {0xbb9ca000}, {0xbb9cc000}, {0xbb9ce000}, 
+    {0xbb9d0000}, {0xbb9d2000}, {0xbb9d4000}, {0xbb9d6000}, 
+    {0xbb9d8000}, {0xbb9da000}, {0xbb9dc000}, {0xbb9de000}, 
+    {0xbb9e0000}, {0xbb9e2000}, {0xbb9e4000}, {0xbb9e6000}, 
+    {0xbb9e8000}, {0xbb9ea000}, {0xbb9ec000}, {0xbb9ee000}, 
+    {0xbb9f0000}, {0xbb9f2000}, {0xbb9f4000}, {0xbb9f6000}, 
+    {0xbb9f8000}, {0xbb9fa000}, {0xbb9fc000}, {0xbb9fe000}, 
+    {0xbba00000}, {0xbba02000}, {0xbba04000}, {0xbba06000}, 
+    {0xbba08000}, {0xbba0a000}, {0xbba0c000}, {0xbba0e000}, 
+    {0xbba10000}, {0xbba12000}, {0xbba14000}, {0xbba16000}, 
+    {0xbba18000}, {0xbba1a000}, {0xbba1c000}, {0xbba1e000}, 
+    {0xbba20000}, {0xbba22000}, {0xbba24000}, {0xbba26000}, 
+    {0xbba28000}, {0xbba2a000}, {0xbba2c000}, {0xbba2e000}, 
+    {0xbba30000}, {0xbba32000}, {0xbba34000}, {0xbba36000}, 
+    {0xbba38000}, {0xbba3a000}, {0xbba3c000}, {0xbba3e000}, 
+    {0xbba40000}, {0xbba42000}, {0xbba44000}, {0xbba46000}, 
+    {0xbba48000}, {0xbba4a000}, {0xbba4c000}, {0xbba4e000}, 
+    {0xbba50000}, {0xbba52000}, {0xbba54000}, {0xbba56000}, 
+    {0xbba58000}, {0xbba5a000}, {0xbba5c000}, {0xbba5e000}, 
+    {0xbba60000}, {0xbba62000}, {0xbba64000}, {0xbba66000}, 
+    {0xbba68000}, {0xbba6a000}, {0xbba6c000}, {0xbba6e000}, 
+    {0xbba70000}, {0xbba72000}, {0xbba74000}, {0xbba76000}, 
+    {0xbba78000}, {0xbba7a000}, {0xbba7c000}, {0xbba7e000}, 
+    {0xbba80000}, {0xbba82000}, {0xbba84000}, {0xbba86000}, 
+    {0xbba88000}, {0xbba8a000}, {0xbba8c000}, {0xbba8e000}, 
+    {0xbba90000}, {0xbba92000}, {0xbba94000}, {0xbba96000}, 
+    {0xbba98000}, {0xbba9a000}, {0xbba9c000}, {0xbba9e000}, 
+    {0xbbaa0000}, {0xbbaa2000}, {0xbbaa4000}, {0xbbaa6000}, 
+    {0xbbaa8000}, {0xbbaaa000}, {0xbbaac000}, {0xbbaae000}, 
+    {0xbbab0000}, {0xbbab2000}, {0xbbab4000}, {0xbbab6000}, 
+    {0xbbab8000}, {0xbbaba000}, {0xbbabc000}, {0xbbabe000}, 
+    {0xbbac0000}, {0xbbac2000}, {0xbbac4000}, {0xbbac6000}, 
+    {0xbbac8000}, {0xbbaca000}, {0xbbacc000}, {0xbbace000}, 
+    {0xbbad0000}, {0xbbad2000}, {0xbbad4000}, {0xbbad6000}, 
+    {0xbbad8000}, {0xbbada000}, {0xbbadc000}, {0xbbade000}, 
+    {0xbbae0000}, {0xbbae2000}, {0xbbae4000}, {0xbbae6000}, 
+    {0xbbae8000}, {0xbbaea000}, {0xbbaec000}, {0xbbaee000}, 
+    {0xbbaf0000}, {0xbbaf2000}, {0xbbaf4000}, {0xbbaf6000}, 
+    {0xbbaf8000}, {0xbbafa000}, {0xbbafc000}, {0xbbafe000}, 
+    {0xbbb00000}, {0xbbb02000}, {0xbbb04000}, {0xbbb06000}, 
+    {0xbbb08000}, {0xbbb0a000}, {0xbbb0c000}, {0xbbb0e000}, 
+    {0xbbb10000}, {0xbbb12000}, {0xbbb14000}, {0xbbb16000}, 
+    {0xbbb18000}, {0xbbb1a000}, {0xbbb1c000}, {0xbbb1e000}, 
+    {0xbbb20000}, {0xbbb22000}, {0xbbb24000}, {0xbbb26000}, 
+    {0xbbb28000}, {0xbbb2a000}, {0xbbb2c000}, {0xbbb2e000}, 
+    {0xbbb30000}, {0xbbb32000}, {0xbbb34000}, {0xbbb36000}, 
+    {0xbbb38000}, {0xbbb3a000}, {0xbbb3c000}, {0xbbb3e000}, 
+    {0xbbb40000}, {0xbbb42000}, {0xbbb44000}, {0xbbb46000}, 
+    {0xbbb48000}, {0xbbb4a000}, {0xbbb4c000}, {0xbbb4e000}, 
+    {0xbbb50000}, {0xbbb52000}, {0xbbb54000}, {0xbbb56000}, 
+    {0xbbb58000}, {0xbbb5a000}, {0xbbb5c000}, {0xbbb5e000}, 
+    {0xbbb60000}, {0xbbb62000}, {0xbbb64000}, {0xbbb66000}, 
+    {0xbbb68000}, {0xbbb6a000}, {0xbbb6c000}, {0xbbb6e000}, 
+    {0xbbb70000}, {0xbbb72000}, {0xbbb74000}, {0xbbb76000}, 
+    {0xbbb78000}, {0xbbb7a000}, {0xbbb7c000}, {0xbbb7e000}, 
+    {0xbbb80000}, {0xbbb82000}, {0xbbb84000}, {0xbbb86000}, 
+    {0xbbb88000}, {0xbbb8a000}, {0xbbb8c000}, {0xbbb8e000}, 
+    {0xbbb90000}, {0xbbb92000}, {0xbbb94000}, {0xbbb96000}, 
+    {0xbbb98000}, {0xbbb9a000}, {0xbbb9c000}, {0xbbb9e000}, 
+    {0xbbba0000}, {0xbbba2000}, {0xbbba4000}, {0xbbba6000}, 
+    {0xbbba8000}, {0xbbbaa000}, {0xbbbac000}, {0xbbbae000}, 
+    {0xbbbb0000}, {0xbbbb2000}, {0xbbbb4000}, {0xbbbb6000}, 
+    {0xbbbb8000}, {0xbbbba000}, {0xbbbbc000}, {0xbbbbe000}, 
+    {0xbbbc0000}, {0xbbbc2000}, {0xbbbc4000}, {0xbbbc6000}, 
+    {0xbbbc8000}, {0xbbbca000}, {0xbbbcc000}, {0xbbbce000}, 
+    {0xbbbd0000}, {0xbbbd2000}, {0xbbbd4000}, {0xbbbd6000}, 
+    {0xbbbd8000}, {0xbbbda000}, {0xbbbdc000}, {0xbbbde000}, 
+    {0xbbbe0000}, {0xbbbe2000}, {0xbbbe4000}, {0xbbbe6000}, 
+    {0xbbbe8000}, {0xbbbea000}, {0xbbbec000}, {0xbbbee000}, 
+    {0xbbbf0000}, {0xbbbf2000}, {0xbbbf4000}, {0xbbbf6000}, 
+    {0xbbbf8000}, {0xbbbfa000}, {0xbbbfc000}, {0xbbbfe000}, 
+    {0xbbc00000}, {0xbbc02000}, {0xbbc04000}, {0xbbc06000}, 
+    {0xbbc08000}, {0xbbc0a000}, {0xbbc0c000}, {0xbbc0e000}, 
+    {0xbbc10000}, {0xbbc12000}, {0xbbc14000}, {0xbbc16000}, 
+    {0xbbc18000}, {0xbbc1a000}, {0xbbc1c000}, {0xbbc1e000}, 
+    {0xbbc20000}, {0xbbc22000}, {0xbbc24000}, {0xbbc26000}, 
+    {0xbbc28000}, {0xbbc2a000}, {0xbbc2c000}, {0xbbc2e000}, 
+    {0xbbc30000}, {0xbbc32000}, {0xbbc34000}, {0xbbc36000}, 
+    {0xbbc38000}, {0xbbc3a000}, {0xbbc3c000}, {0xbbc3e000}, 
+    {0xbbc40000}, {0xbbc42000}, {0xbbc44000}, {0xbbc46000}, 
+    {0xbbc48000}, {0xbbc4a000}, {0xbbc4c000}, {0xbbc4e000}, 
+    {0xbbc50000}, {0xbbc52000}, {0xbbc54000}, {0xbbc56000}, 
+    {0xbbc58000}, {0xbbc5a000}, {0xbbc5c000}, {0xbbc5e000}, 
+    {0xbbc60000}, {0xbbc62000}, {0xbbc64000}, {0xbbc66000}, 
+    {0xbbc68000}, {0xbbc6a000}, {0xbbc6c000}, {0xbbc6e000}, 
+    {0xbbc70000}, {0xbbc72000}, {0xbbc74000}, {0xbbc76000}, 
+    {0xbbc78000}, {0xbbc7a000}, {0xbbc7c000}, {0xbbc7e000}, 
+    {0xbbc80000}, {0xbbc82000}, {0xbbc84000}, {0xbbc86000}, 
+    {0xbbc88000}, {0xbbc8a000}, {0xbbc8c000}, {0xbbc8e000}, 
+    {0xbbc90000}, {0xbbc92000}, {0xbbc94000}, {0xbbc96000}, 
+    {0xbbc98000}, {0xbbc9a000}, {0xbbc9c000}, {0xbbc9e000}, 
+    {0xbbca0000}, {0xbbca2000}, {0xbbca4000}, {0xbbca6000}, 
+    {0xbbca8000}, {0xbbcaa000}, {0xbbcac000}, {0xbbcae000}, 
+    {0xbbcb0000}, {0xbbcb2000}, {0xbbcb4000}, {0xbbcb6000}, 
+    {0xbbcb8000}, {0xbbcba000}, {0xbbcbc000}, {0xbbcbe000}, 
+    {0xbbcc0000}, {0xbbcc2000}, {0xbbcc4000}, {0xbbcc6000}, 
+    {0xbbcc8000}, {0xbbcca000}, {0xbbccc000}, {0xbbcce000}, 
+    {0xbbcd0000}, {0xbbcd2000}, {0xbbcd4000}, {0xbbcd6000}, 
+    {0xbbcd8000}, {0xbbcda000}, {0xbbcdc000}, {0xbbcde000}, 
+    {0xbbce0000}, {0xbbce2000}, {0xbbce4000}, {0xbbce6000}, 
+    {0xbbce8000}, {0xbbcea000}, {0xbbcec000}, {0xbbcee000}, 
+    {0xbbcf0000}, {0xbbcf2000}, {0xbbcf4000}, {0xbbcf6000}, 
+    {0xbbcf8000}, {0xbbcfa000}, {0xbbcfc000}, {0xbbcfe000}, 
+    {0xbbd00000}, {0xbbd02000}, {0xbbd04000}, {0xbbd06000}, 
+    {0xbbd08000}, {0xbbd0a000}, {0xbbd0c000}, {0xbbd0e000}, 
+    {0xbbd10000}, {0xbbd12000}, {0xbbd14000}, {0xbbd16000}, 
+    {0xbbd18000}, {0xbbd1a000}, {0xbbd1c000}, {0xbbd1e000}, 
+    {0xbbd20000}, {0xbbd22000}, {0xbbd24000}, {0xbbd26000}, 
+    {0xbbd28000}, {0xbbd2a000}, {0xbbd2c000}, {0xbbd2e000}, 
+    {0xbbd30000}, {0xbbd32000}, {0xbbd34000}, {0xbbd36000}, 
+    {0xbbd38000}, {0xbbd3a000}, {0xbbd3c000}, {0xbbd3e000}, 
+    {0xbbd40000}, {0xbbd42000}, {0xbbd44000}, {0xbbd46000}, 
+    {0xbbd48000}, {0xbbd4a000}, {0xbbd4c000}, {0xbbd4e000}, 
+    {0xbbd50000}, {0xbbd52000}, {0xbbd54000}, {0xbbd56000}, 
+    {0xbbd58000}, {0xbbd5a000}, {0xbbd5c000}, {0xbbd5e000}, 
+    {0xbbd60000}, {0xbbd62000}, {0xbbd64000}, {0xbbd66000}, 
+    {0xbbd68000}, {0xbbd6a000}, {0xbbd6c000}, {0xbbd6e000}, 
+    {0xbbd70000}, {0xbbd72000}, {0xbbd74000}, {0xbbd76000}, 
+    {0xbbd78000}, {0xbbd7a000}, {0xbbd7c000}, {0xbbd7e000}, 
+    {0xbbd80000}, {0xbbd82000}, {0xbbd84000}, {0xbbd86000}, 
+    {0xbbd88000}, {0xbbd8a000}, {0xbbd8c000}, {0xbbd8e000}, 
+    {0xbbd90000}, {0xbbd92000}, {0xbbd94000}, {0xbbd96000}, 
+    {0xbbd98000}, {0xbbd9a000}, {0xbbd9c000}, {0xbbd9e000}, 
+    {0xbbda0000}, {0xbbda2000}, {0xbbda4000}, {0xbbda6000}, 
+    {0xbbda8000}, {0xbbdaa000}, {0xbbdac000}, {0xbbdae000}, 
+    {0xbbdb0000}, {0xbbdb2000}, {0xbbdb4000}, {0xbbdb6000}, 
+    {0xbbdb8000}, {0xbbdba000}, {0xbbdbc000}, {0xbbdbe000}, 
+    {0xbbdc0000}, {0xbbdc2000}, {0xbbdc4000}, {0xbbdc6000}, 
+    {0xbbdc8000}, {0xbbdca000}, {0xbbdcc000}, {0xbbdce000}, 
+    {0xbbdd0000}, {0xbbdd2000}, {0xbbdd4000}, {0xbbdd6000}, 
+    {0xbbdd8000}, {0xbbdda000}, {0xbbddc000}, {0xbbdde000}, 
+    {0xbbde0000}, {0xbbde2000}, {0xbbde4000}, {0xbbde6000}, 
+    {0xbbde8000}, {0xbbdea000}, {0xbbdec000}, {0xbbdee000}, 
+    {0xbbdf0000}, {0xbbdf2000}, {0xbbdf4000}, {0xbbdf6000}, 
+    {0xbbdf8000}, {0xbbdfa000}, {0xbbdfc000}, {0xbbdfe000}, 
+    {0xbbe00000}, {0xbbe02000}, {0xbbe04000}, {0xbbe06000}, 
+    {0xbbe08000}, {0xbbe0a000}, {0xbbe0c000}, {0xbbe0e000}, 
+    {0xbbe10000}, {0xbbe12000}, {0xbbe14000}, {0xbbe16000}, 
+    {0xbbe18000}, {0xbbe1a000}, {0xbbe1c000}, {0xbbe1e000}, 
+    {0xbbe20000}, {0xbbe22000}, {0xbbe24000}, {0xbbe26000}, 
+    {0xbbe28000}, {0xbbe2a000}, {0xbbe2c000}, {0xbbe2e000}, 
+    {0xbbe30000}, {0xbbe32000}, {0xbbe34000}, {0xbbe36000}, 
+    {0xbbe38000}, {0xbbe3a000}, {0xbbe3c000}, {0xbbe3e000}, 
+    {0xbbe40000}, {0xbbe42000}, {0xbbe44000}, {0xbbe46000}, 
+    {0xbbe48000}, {0xbbe4a000}, {0xbbe4c000}, {0xbbe4e000}, 
+    {0xbbe50000}, {0xbbe52000}, {0xbbe54000}, {0xbbe56000}, 
+    {0xbbe58000}, {0xbbe5a000}, {0xbbe5c000}, {0xbbe5e000}, 
+    {0xbbe60000}, {0xbbe62000}, {0xbbe64000}, {0xbbe66000}, 
+    {0xbbe68000}, {0xbbe6a000}, {0xbbe6c000}, {0xbbe6e000}, 
+    {0xbbe70000}, {0xbbe72000}, {0xbbe74000}, {0xbbe76000}, 
+    {0xbbe78000}, {0xbbe7a000}, {0xbbe7c000}, {0xbbe7e000}, 
+    {0xbbe80000}, {0xbbe82000}, {0xbbe84000}, {0xbbe86000}, 
+    {0xbbe88000}, {0xbbe8a000}, {0xbbe8c000}, {0xbbe8e000}, 
+    {0xbbe90000}, {0xbbe92000}, {0xbbe94000}, {0xbbe96000}, 
+    {0xbbe98000}, {0xbbe9a000}, {0xbbe9c000}, {0xbbe9e000}, 
+    {0xbbea0000}, {0xbbea2000}, {0xbbea4000}, {0xbbea6000}, 
+    {0xbbea8000}, {0xbbeaa000}, {0xbbeac000}, {0xbbeae000}, 
+    {0xbbeb0000}, {0xbbeb2000}, {0xbbeb4000}, {0xbbeb6000}, 
+    {0xbbeb8000}, {0xbbeba000}, {0xbbebc000}, {0xbbebe000}, 
+    {0xbbec0000}, {0xbbec2000}, {0xbbec4000}, {0xbbec6000}, 
+    {0xbbec8000}, {0xbbeca000}, {0xbbecc000}, {0xbbece000}, 
+    {0xbbed0000}, {0xbbed2000}, {0xbbed4000}, {0xbbed6000}, 
+    {0xbbed8000}, {0xbbeda000}, {0xbbedc000}, {0xbbede000}, 
+    {0xbbee0000}, {0xbbee2000}, {0xbbee4000}, {0xbbee6000}, 
+    {0xbbee8000}, {0xbbeea000}, {0xbbeec000}, {0xbbeee000}, 
+    {0xbbef0000}, {0xbbef2000}, {0xbbef4000}, {0xbbef6000}, 
+    {0xbbef8000}, {0xbbefa000}, {0xbbefc000}, {0xbbefe000}, 
+    {0xbbf00000}, {0xbbf02000}, {0xbbf04000}, {0xbbf06000}, 
+    {0xbbf08000}, {0xbbf0a000}, {0xbbf0c000}, {0xbbf0e000}, 
+    {0xbbf10000}, {0xbbf12000}, {0xbbf14000}, {0xbbf16000}, 
+    {0xbbf18000}, {0xbbf1a000}, {0xbbf1c000}, {0xbbf1e000}, 
+    {0xbbf20000}, {0xbbf22000}, {0xbbf24000}, {0xbbf26000}, 
+    {0xbbf28000}, {0xbbf2a000}, {0xbbf2c000}, {0xbbf2e000}, 
+    {0xbbf30000}, {0xbbf32000}, {0xbbf34000}, {0xbbf36000}, 
+    {0xbbf38000}, {0xbbf3a000}, {0xbbf3c000}, {0xbbf3e000}, 
+    {0xbbf40000}, {0xbbf42000}, {0xbbf44000}, {0xbbf46000}, 
+    {0xbbf48000}, {0xbbf4a000}, {0xbbf4c000}, {0xbbf4e000}, 
+    {0xbbf50000}, {0xbbf52000}, {0xbbf54000}, {0xbbf56000}, 
+    {0xbbf58000}, {0xbbf5a000}, {0xbbf5c000}, {0xbbf5e000}, 
+    {0xbbf60000}, {0xbbf62000}, {0xbbf64000}, {0xbbf66000}, 
+    {0xbbf68000}, {0xbbf6a000}, {0xbbf6c000}, {0xbbf6e000}, 
+    {0xbbf70000}, {0xbbf72000}, {0xbbf74000}, {0xbbf76000}, 
+    {0xbbf78000}, {0xbbf7a000}, {0xbbf7c000}, {0xbbf7e000}, 
+    {0xbbf80000}, {0xbbf82000}, {0xbbf84000}, {0xbbf86000}, 
+    {0xbbf88000}, {0xbbf8a000}, {0xbbf8c000}, {0xbbf8e000}, 
+    {0xbbf90000}, {0xbbf92000}, {0xbbf94000}, {0xbbf96000}, 
+    {0xbbf98000}, {0xbbf9a000}, {0xbbf9c000}, {0xbbf9e000}, 
+    {0xbbfa0000}, {0xbbfa2000}, {0xbbfa4000}, {0xbbfa6000}, 
+    {0xbbfa8000}, {0xbbfaa000}, {0xbbfac000}, {0xbbfae000}, 
+    {0xbbfb0000}, {0xbbfb2000}, {0xbbfb4000}, {0xbbfb6000}, 
+    {0xbbfb8000}, {0xbbfba000}, {0xbbfbc000}, {0xbbfbe000}, 
+    {0xbbfc0000}, {0xbbfc2000}, {0xbbfc4000}, {0xbbfc6000}, 
+    {0xbbfc8000}, {0xbbfca000}, {0xbbfcc000}, {0xbbfce000}, 
+    {0xbbfd0000}, {0xbbfd2000}, {0xbbfd4000}, {0xbbfd6000}, 
+    {0xbbfd8000}, {0xbbfda000}, {0xbbfdc000}, {0xbbfde000}, 
+    {0xbbfe0000}, {0xbbfe2000}, {0xbbfe4000}, {0xbbfe6000}, 
+    {0xbbfe8000}, {0xbbfea000}, {0xbbfec000}, {0xbbfee000}, 
+    {0xbbff0000}, {0xbbff2000}, {0xbbff4000}, {0xbbff6000}, 
+    {0xbbff8000}, {0xbbffa000}, {0xbbffc000}, {0xbbffe000}, 
+    {0xbc000000}, {0xbc002000}, {0xbc004000}, {0xbc006000}, 
+    {0xbc008000}, {0xbc00a000}, {0xbc00c000}, {0xbc00e000}, 
+    {0xbc010000}, {0xbc012000}, {0xbc014000}, {0xbc016000}, 
+    {0xbc018000}, {0xbc01a000}, {0xbc01c000}, {0xbc01e000}, 
+    {0xbc020000}, {0xbc022000}, {0xbc024000}, {0xbc026000}, 
+    {0xbc028000}, {0xbc02a000}, {0xbc02c000}, {0xbc02e000}, 
+    {0xbc030000}, {0xbc032000}, {0xbc034000}, {0xbc036000}, 
+    {0xbc038000}, {0xbc03a000}, {0xbc03c000}, {0xbc03e000}, 
+    {0xbc040000}, {0xbc042000}, {0xbc044000}, {0xbc046000}, 
+    {0xbc048000}, {0xbc04a000}, {0xbc04c000}, {0xbc04e000}, 
+    {0xbc050000}, {0xbc052000}, {0xbc054000}, {0xbc056000}, 
+    {0xbc058000}, {0xbc05a000}, {0xbc05c000}, {0xbc05e000}, 
+    {0xbc060000}, {0xbc062000}, {0xbc064000}, {0xbc066000}, 
+    {0xbc068000}, {0xbc06a000}, {0xbc06c000}, {0xbc06e000}, 
+    {0xbc070000}, {0xbc072000}, {0xbc074000}, {0xbc076000}, 
+    {0xbc078000}, {0xbc07a000}, {0xbc07c000}, {0xbc07e000}, 
+    {0xbc080000}, {0xbc082000}, {0xbc084000}, {0xbc086000}, 
+    {0xbc088000}, {0xbc08a000}, {0xbc08c000}, {0xbc08e000}, 
+    {0xbc090000}, {0xbc092000}, {0xbc094000}, {0xbc096000}, 
+    {0xbc098000}, {0xbc09a000}, {0xbc09c000}, {0xbc09e000}, 
+    {0xbc0a0000}, {0xbc0a2000}, {0xbc0a4000}, {0xbc0a6000}, 
+    {0xbc0a8000}, {0xbc0aa000}, {0xbc0ac000}, {0xbc0ae000}, 
+    {0xbc0b0000}, {0xbc0b2000}, {0xbc0b4000}, {0xbc0b6000}, 
+    {0xbc0b8000}, {0xbc0ba000}, {0xbc0bc000}, {0xbc0be000}, 
+    {0xbc0c0000}, {0xbc0c2000}, {0xbc0c4000}, {0xbc0c6000}, 
+    {0xbc0c8000}, {0xbc0ca000}, {0xbc0cc000}, {0xbc0ce000}, 
+    {0xbc0d0000}, {0xbc0d2000}, {0xbc0d4000}, {0xbc0d6000}, 
+    {0xbc0d8000}, {0xbc0da000}, {0xbc0dc000}, {0xbc0de000}, 
+    {0xbc0e0000}, {0xbc0e2000}, {0xbc0e4000}, {0xbc0e6000}, 
+    {0xbc0e8000}, {0xbc0ea000}, {0xbc0ec000}, {0xbc0ee000}, 
+    {0xbc0f0000}, {0xbc0f2000}, {0xbc0f4000}, {0xbc0f6000}, 
+    {0xbc0f8000}, {0xbc0fa000}, {0xbc0fc000}, {0xbc0fe000}, 
+    {0xbc100000}, {0xbc102000}, {0xbc104000}, {0xbc106000}, 
+    {0xbc108000}, {0xbc10a000}, {0xbc10c000}, {0xbc10e000}, 
+    {0xbc110000}, {0xbc112000}, {0xbc114000}, {0xbc116000}, 
+    {0xbc118000}, {0xbc11a000}, {0xbc11c000}, {0xbc11e000}, 
+    {0xbc120000}, {0xbc122000}, {0xbc124000}, {0xbc126000}, 
+    {0xbc128000}, {0xbc12a000}, {0xbc12c000}, {0xbc12e000}, 
+    {0xbc130000}, {0xbc132000}, {0xbc134000}, {0xbc136000}, 
+    {0xbc138000}, {0xbc13a000}, {0xbc13c000}, {0xbc13e000}, 
+    {0xbc140000}, {0xbc142000}, {0xbc144000}, {0xbc146000}, 
+    {0xbc148000}, {0xbc14a000}, {0xbc14c000}, {0xbc14e000}, 
+    {0xbc150000}, {0xbc152000}, {0xbc154000}, {0xbc156000}, 
+    {0xbc158000}, {0xbc15a000}, {0xbc15c000}, {0xbc15e000}, 
+    {0xbc160000}, {0xbc162000}, {0xbc164000}, {0xbc166000}, 
+    {0xbc168000}, {0xbc16a000}, {0xbc16c000}, {0xbc16e000}, 
+    {0xbc170000}, {0xbc172000}, {0xbc174000}, {0xbc176000}, 
+    {0xbc178000}, {0xbc17a000}, {0xbc17c000}, {0xbc17e000}, 
+    {0xbc180000}, {0xbc182000}, {0xbc184000}, {0xbc186000}, 
+    {0xbc188000}, {0xbc18a000}, {0xbc18c000}, {0xbc18e000}, 
+    {0xbc190000}, {0xbc192000}, {0xbc194000}, {0xbc196000}, 
+    {0xbc198000}, {0xbc19a000}, {0xbc19c000}, {0xbc19e000}, 
+    {0xbc1a0000}, {0xbc1a2000}, {0xbc1a4000}, {0xbc1a6000}, 
+    {0xbc1a8000}, {0xbc1aa000}, {0xbc1ac000}, {0xbc1ae000}, 
+    {0xbc1b0000}, {0xbc1b2000}, {0xbc1b4000}, {0xbc1b6000}, 
+    {0xbc1b8000}, {0xbc1ba000}, {0xbc1bc000}, {0xbc1be000}, 
+    {0xbc1c0000}, {0xbc1c2000}, {0xbc1c4000}, {0xbc1c6000}, 
+    {0xbc1c8000}, {0xbc1ca000}, {0xbc1cc000}, {0xbc1ce000}, 
+    {0xbc1d0000}, {0xbc1d2000}, {0xbc1d4000}, {0xbc1d6000}, 
+    {0xbc1d8000}, {0xbc1da000}, {0xbc1dc000}, {0xbc1de000}, 
+    {0xbc1e0000}, {0xbc1e2000}, {0xbc1e4000}, {0xbc1e6000}, 
+    {0xbc1e8000}, {0xbc1ea000}, {0xbc1ec000}, {0xbc1ee000}, 
+    {0xbc1f0000}, {0xbc1f2000}, {0xbc1f4000}, {0xbc1f6000}, 
+    {0xbc1f8000}, {0xbc1fa000}, {0xbc1fc000}, {0xbc1fe000}, 
+    {0xbc200000}, {0xbc202000}, {0xbc204000}, {0xbc206000}, 
+    {0xbc208000}, {0xbc20a000}, {0xbc20c000}, {0xbc20e000}, 
+    {0xbc210000}, {0xbc212000}, {0xbc214000}, {0xbc216000}, 
+    {0xbc218000}, {0xbc21a000}, {0xbc21c000}, {0xbc21e000}, 
+    {0xbc220000}, {0xbc222000}, {0xbc224000}, {0xbc226000}, 
+    {0xbc228000}, {0xbc22a000}, {0xbc22c000}, {0xbc22e000}, 
+    {0xbc230000}, {0xbc232000}, {0xbc234000}, {0xbc236000}, 
+    {0xbc238000}, {0xbc23a000}, {0xbc23c000}, {0xbc23e000}, 
+    {0xbc240000}, {0xbc242000}, {0xbc244000}, {0xbc246000}, 
+    {0xbc248000}, {0xbc24a000}, {0xbc24c000}, {0xbc24e000}, 
+    {0xbc250000}, {0xbc252000}, {0xbc254000}, {0xbc256000}, 
+    {0xbc258000}, {0xbc25a000}, {0xbc25c000}, {0xbc25e000}, 
+    {0xbc260000}, {0xbc262000}, {0xbc264000}, {0xbc266000}, 
+    {0xbc268000}, {0xbc26a000}, {0xbc26c000}, {0xbc26e000}, 
+    {0xbc270000}, {0xbc272000}, {0xbc274000}, {0xbc276000}, 
+    {0xbc278000}, {0xbc27a000}, {0xbc27c000}, {0xbc27e000}, 
+    {0xbc280000}, {0xbc282000}, {0xbc284000}, {0xbc286000}, 
+    {0xbc288000}, {0xbc28a000}, {0xbc28c000}, {0xbc28e000}, 
+    {0xbc290000}, {0xbc292000}, {0xbc294000}, {0xbc296000}, 
+    {0xbc298000}, {0xbc29a000}, {0xbc29c000}, {0xbc29e000}, 
+    {0xbc2a0000}, {0xbc2a2000}, {0xbc2a4000}, {0xbc2a6000}, 
+    {0xbc2a8000}, {0xbc2aa000}, {0xbc2ac000}, {0xbc2ae000}, 
+    {0xbc2b0000}, {0xbc2b2000}, {0xbc2b4000}, {0xbc2b6000}, 
+    {0xbc2b8000}, {0xbc2ba000}, {0xbc2bc000}, {0xbc2be000}, 
+    {0xbc2c0000}, {0xbc2c2000}, {0xbc2c4000}, {0xbc2c6000}, 
+    {0xbc2c8000}, {0xbc2ca000}, {0xbc2cc000}, {0xbc2ce000}, 
+    {0xbc2d0000}, {0xbc2d2000}, {0xbc2d4000}, {0xbc2d6000}, 
+    {0xbc2d8000}, {0xbc2da000}, {0xbc2dc000}, {0xbc2de000}, 
+    {0xbc2e0000}, {0xbc2e2000}, {0xbc2e4000}, {0xbc2e6000}, 
+    {0xbc2e8000}, {0xbc2ea000}, {0xbc2ec000}, {0xbc2ee000}, 
+    {0xbc2f0000}, {0xbc2f2000}, {0xbc2f4000}, {0xbc2f6000}, 
+    {0xbc2f8000}, {0xbc2fa000}, {0xbc2fc000}, {0xbc2fe000}, 
+    {0xbc300000}, {0xbc302000}, {0xbc304000}, {0xbc306000}, 
+    {0xbc308000}, {0xbc30a000}, {0xbc30c000}, {0xbc30e000}, 
+    {0xbc310000}, {0xbc312000}, {0xbc314000}, {0xbc316000}, 
+    {0xbc318000}, {0xbc31a000}, {0xbc31c000}, {0xbc31e000}, 
+    {0xbc320000}, {0xbc322000}, {0xbc324000}, {0xbc326000}, 
+    {0xbc328000}, {0xbc32a000}, {0xbc32c000}, {0xbc32e000}, 
+    {0xbc330000}, {0xbc332000}, {0xbc334000}, {0xbc336000}, 
+    {0xbc338000}, {0xbc33a000}, {0xbc33c000}, {0xbc33e000}, 
+    {0xbc340000}, {0xbc342000}, {0xbc344000}, {0xbc346000}, 
+    {0xbc348000}, {0xbc34a000}, {0xbc34c000}, {0xbc34e000}, 
+    {0xbc350000}, {0xbc352000}, {0xbc354000}, {0xbc356000}, 
+    {0xbc358000}, {0xbc35a000}, {0xbc35c000}, {0xbc35e000}, 
+    {0xbc360000}, {0xbc362000}, {0xbc364000}, {0xbc366000}, 
+    {0xbc368000}, {0xbc36a000}, {0xbc36c000}, {0xbc36e000}, 
+    {0xbc370000}, {0xbc372000}, {0xbc374000}, {0xbc376000}, 
+    {0xbc378000}, {0xbc37a000}, {0xbc37c000}, {0xbc37e000}, 
+    {0xbc380000}, {0xbc382000}, {0xbc384000}, {0xbc386000}, 
+    {0xbc388000}, {0xbc38a000}, {0xbc38c000}, {0xbc38e000}, 
+    {0xbc390000}, {0xbc392000}, {0xbc394000}, {0xbc396000}, 
+    {0xbc398000}, {0xbc39a000}, {0xbc39c000}, {0xbc39e000}, 
+    {0xbc3a0000}, {0xbc3a2000}, {0xbc3a4000}, {0xbc3a6000}, 
+    {0xbc3a8000}, {0xbc3aa000}, {0xbc3ac000}, {0xbc3ae000}, 
+    {0xbc3b0000}, {0xbc3b2000}, {0xbc3b4000}, {0xbc3b6000}, 
+    {0xbc3b8000}, {0xbc3ba000}, {0xbc3bc000}, {0xbc3be000}, 
+    {0xbc3c0000}, {0xbc3c2000}, {0xbc3c4000}, {0xbc3c6000}, 
+    {0xbc3c8000}, {0xbc3ca000}, {0xbc3cc000}, {0xbc3ce000}, 
+    {0xbc3d0000}, {0xbc3d2000}, {0xbc3d4000}, {0xbc3d6000}, 
+    {0xbc3d8000}, {0xbc3da000}, {0xbc3dc000}, {0xbc3de000}, 
+    {0xbc3e0000}, {0xbc3e2000}, {0xbc3e4000}, {0xbc3e6000}, 
+    {0xbc3e8000}, {0xbc3ea000}, {0xbc3ec000}, {0xbc3ee000}, 
+    {0xbc3f0000}, {0xbc3f2000}, {0xbc3f4000}, {0xbc3f6000}, 
+    {0xbc3f8000}, {0xbc3fa000}, {0xbc3fc000}, {0xbc3fe000}, 
+    {0xbc400000}, {0xbc402000}, {0xbc404000}, {0xbc406000}, 
+    {0xbc408000}, {0xbc40a000}, {0xbc40c000}, {0xbc40e000}, 
+    {0xbc410000}, {0xbc412000}, {0xbc414000}, {0xbc416000}, 
+    {0xbc418000}, {0xbc41a000}, {0xbc41c000}, {0xbc41e000}, 
+    {0xbc420000}, {0xbc422000}, {0xbc424000}, {0xbc426000}, 
+    {0xbc428000}, {0xbc42a000}, {0xbc42c000}, {0xbc42e000}, 
+    {0xbc430000}, {0xbc432000}, {0xbc434000}, {0xbc436000}, 
+    {0xbc438000}, {0xbc43a000}, {0xbc43c000}, {0xbc43e000}, 
+    {0xbc440000}, {0xbc442000}, {0xbc444000}, {0xbc446000}, 
+    {0xbc448000}, {0xbc44a000}, {0xbc44c000}, {0xbc44e000}, 
+    {0xbc450000}, {0xbc452000}, {0xbc454000}, {0xbc456000}, 
+    {0xbc458000}, {0xbc45a000}, {0xbc45c000}, {0xbc45e000}, 
+    {0xbc460000}, {0xbc462000}, {0xbc464000}, {0xbc466000}, 
+    {0xbc468000}, {0xbc46a000}, {0xbc46c000}, {0xbc46e000}, 
+    {0xbc470000}, {0xbc472000}, {0xbc474000}, {0xbc476000}, 
+    {0xbc478000}, {0xbc47a000}, {0xbc47c000}, {0xbc47e000}, 
+    {0xbc480000}, {0xbc482000}, {0xbc484000}, {0xbc486000}, 
+    {0xbc488000}, {0xbc48a000}, {0xbc48c000}, {0xbc48e000}, 
+    {0xbc490000}, {0xbc492000}, {0xbc494000}, {0xbc496000}, 
+    {0xbc498000}, {0xbc49a000}, {0xbc49c000}, {0xbc49e000}, 
+    {0xbc4a0000}, {0xbc4a2000}, {0xbc4a4000}, {0xbc4a6000}, 
+    {0xbc4a8000}, {0xbc4aa000}, {0xbc4ac000}, {0xbc4ae000}, 
+    {0xbc4b0000}, {0xbc4b2000}, {0xbc4b4000}, {0xbc4b6000}, 
+    {0xbc4b8000}, {0xbc4ba000}, {0xbc4bc000}, {0xbc4be000}, 
+    {0xbc4c0000}, {0xbc4c2000}, {0xbc4c4000}, {0xbc4c6000}, 
+    {0xbc4c8000}, {0xbc4ca000}, {0xbc4cc000}, {0xbc4ce000}, 
+    {0xbc4d0000}, {0xbc4d2000}, {0xbc4d4000}, {0xbc4d6000}, 
+    {0xbc4d8000}, {0xbc4da000}, {0xbc4dc000}, {0xbc4de000}, 
+    {0xbc4e0000}, {0xbc4e2000}, {0xbc4e4000}, {0xbc4e6000}, 
+    {0xbc4e8000}, {0xbc4ea000}, {0xbc4ec000}, {0xbc4ee000}, 
+    {0xbc4f0000}, {0xbc4f2000}, {0xbc4f4000}, {0xbc4f6000}, 
+    {0xbc4f8000}, {0xbc4fa000}, {0xbc4fc000}, {0xbc4fe000}, 
+    {0xbc500000}, {0xbc502000}, {0xbc504000}, {0xbc506000}, 
+    {0xbc508000}, {0xbc50a000}, {0xbc50c000}, {0xbc50e000}, 
+    {0xbc510000}, {0xbc512000}, {0xbc514000}, {0xbc516000}, 
+    {0xbc518000}, {0xbc51a000}, {0xbc51c000}, {0xbc51e000}, 
+    {0xbc520000}, {0xbc522000}, {0xbc524000}, {0xbc526000}, 
+    {0xbc528000}, {0xbc52a000}, {0xbc52c000}, {0xbc52e000}, 
+    {0xbc530000}, {0xbc532000}, {0xbc534000}, {0xbc536000}, 
+    {0xbc538000}, {0xbc53a000}, {0xbc53c000}, {0xbc53e000}, 
+    {0xbc540000}, {0xbc542000}, {0xbc544000}, {0xbc546000}, 
+    {0xbc548000}, {0xbc54a000}, {0xbc54c000}, {0xbc54e000}, 
+    {0xbc550000}, {0xbc552000}, {0xbc554000}, {0xbc556000}, 
+    {0xbc558000}, {0xbc55a000}, {0xbc55c000}, {0xbc55e000}, 
+    {0xbc560000}, {0xbc562000}, {0xbc564000}, {0xbc566000}, 
+    {0xbc568000}, {0xbc56a000}, {0xbc56c000}, {0xbc56e000}, 
+    {0xbc570000}, {0xbc572000}, {0xbc574000}, {0xbc576000}, 
+    {0xbc578000}, {0xbc57a000}, {0xbc57c000}, {0xbc57e000}, 
+    {0xbc580000}, {0xbc582000}, {0xbc584000}, {0xbc586000}, 
+    {0xbc588000}, {0xbc58a000}, {0xbc58c000}, {0xbc58e000}, 
+    {0xbc590000}, {0xbc592000}, {0xbc594000}, {0xbc596000}, 
+    {0xbc598000}, {0xbc59a000}, {0xbc59c000}, {0xbc59e000}, 
+    {0xbc5a0000}, {0xbc5a2000}, {0xbc5a4000}, {0xbc5a6000}, 
+    {0xbc5a8000}, {0xbc5aa000}, {0xbc5ac000}, {0xbc5ae000}, 
+    {0xbc5b0000}, {0xbc5b2000}, {0xbc5b4000}, {0xbc5b6000}, 
+    {0xbc5b8000}, {0xbc5ba000}, {0xbc5bc000}, {0xbc5be000}, 
+    {0xbc5c0000}, {0xbc5c2000}, {0xbc5c4000}, {0xbc5c6000}, 
+    {0xbc5c8000}, {0xbc5ca000}, {0xbc5cc000}, {0xbc5ce000}, 
+    {0xbc5d0000}, {0xbc5d2000}, {0xbc5d4000}, {0xbc5d6000}, 
+    {0xbc5d8000}, {0xbc5da000}, {0xbc5dc000}, {0xbc5de000}, 
+    {0xbc5e0000}, {0xbc5e2000}, {0xbc5e4000}, {0xbc5e6000}, 
+    {0xbc5e8000}, {0xbc5ea000}, {0xbc5ec000}, {0xbc5ee000}, 
+    {0xbc5f0000}, {0xbc5f2000}, {0xbc5f4000}, {0xbc5f6000}, 
+    {0xbc5f8000}, {0xbc5fa000}, {0xbc5fc000}, {0xbc5fe000}, 
+    {0xbc600000}, {0xbc602000}, {0xbc604000}, {0xbc606000}, 
+    {0xbc608000}, {0xbc60a000}, {0xbc60c000}, {0xbc60e000}, 
+    {0xbc610000}, {0xbc612000}, {0xbc614000}, {0xbc616000}, 
+    {0xbc618000}, {0xbc61a000}, {0xbc61c000}, {0xbc61e000}, 
+    {0xbc620000}, {0xbc622000}, {0xbc624000}, {0xbc626000}, 
+    {0xbc628000}, {0xbc62a000}, {0xbc62c000}, {0xbc62e000}, 
+    {0xbc630000}, {0xbc632000}, {0xbc634000}, {0xbc636000}, 
+    {0xbc638000}, {0xbc63a000}, {0xbc63c000}, {0xbc63e000}, 
+    {0xbc640000}, {0xbc642000}, {0xbc644000}, {0xbc646000}, 
+    {0xbc648000}, {0xbc64a000}, {0xbc64c000}, {0xbc64e000}, 
+    {0xbc650000}, {0xbc652000}, {0xbc654000}, {0xbc656000}, 
+    {0xbc658000}, {0xbc65a000}, {0xbc65c000}, {0xbc65e000}, 
+    {0xbc660000}, {0xbc662000}, {0xbc664000}, {0xbc666000}, 
+    {0xbc668000}, {0xbc66a000}, {0xbc66c000}, {0xbc66e000}, 
+    {0xbc670000}, {0xbc672000}, {0xbc674000}, {0xbc676000}, 
+    {0xbc678000}, {0xbc67a000}, {0xbc67c000}, {0xbc67e000}, 
+    {0xbc680000}, {0xbc682000}, {0xbc684000}, {0xbc686000}, 
+    {0xbc688000}, {0xbc68a000}, {0xbc68c000}, {0xbc68e000}, 
+    {0xbc690000}, {0xbc692000}, {0xbc694000}, {0xbc696000}, 
+    {0xbc698000}, {0xbc69a000}, {0xbc69c000}, {0xbc69e000}, 
+    {0xbc6a0000}, {0xbc6a2000}, {0xbc6a4000}, {0xbc6a6000}, 
+    {0xbc6a8000}, {0xbc6aa000}, {0xbc6ac000}, {0xbc6ae000}, 
+    {0xbc6b0000}, {0xbc6b2000}, {0xbc6b4000}, {0xbc6b6000}, 
+    {0xbc6b8000}, {0xbc6ba000}, {0xbc6bc000}, {0xbc6be000}, 
+    {0xbc6c0000}, {0xbc6c2000}, {0xbc6c4000}, {0xbc6c6000}, 
+    {0xbc6c8000}, {0xbc6ca000}, {0xbc6cc000}, {0xbc6ce000}, 
+    {0xbc6d0000}, {0xbc6d2000}, {0xbc6d4000}, {0xbc6d6000}, 
+    {0xbc6d8000}, {0xbc6da000}, {0xbc6dc000}, {0xbc6de000}, 
+    {0xbc6e0000}, {0xbc6e2000}, {0xbc6e4000}, {0xbc6e6000}, 
+    {0xbc6e8000}, {0xbc6ea000}, {0xbc6ec000}, {0xbc6ee000}, 
+    {0xbc6f0000}, {0xbc6f2000}, {0xbc6f4000}, {0xbc6f6000}, 
+    {0xbc6f8000}, {0xbc6fa000}, {0xbc6fc000}, {0xbc6fe000}, 
+    {0xbc700000}, {0xbc702000}, {0xbc704000}, {0xbc706000}, 
+    {0xbc708000}, {0xbc70a000}, {0xbc70c000}, {0xbc70e000}, 
+    {0xbc710000}, {0xbc712000}, {0xbc714000}, {0xbc716000}, 
+    {0xbc718000}, {0xbc71a000}, {0xbc71c000}, {0xbc71e000}, 
+    {0xbc720000}, {0xbc722000}, {0xbc724000}, {0xbc726000}, 
+    {0xbc728000}, {0xbc72a000}, {0xbc72c000}, {0xbc72e000}, 
+    {0xbc730000}, {0xbc732000}, {0xbc734000}, {0xbc736000}, 
+    {0xbc738000}, {0xbc73a000}, {0xbc73c000}, {0xbc73e000}, 
+    {0xbc740000}, {0xbc742000}, {0xbc744000}, {0xbc746000}, 
+    {0xbc748000}, {0xbc74a000}, {0xbc74c000}, {0xbc74e000}, 
+    {0xbc750000}, {0xbc752000}, {0xbc754000}, {0xbc756000}, 
+    {0xbc758000}, {0xbc75a000}, {0xbc75c000}, {0xbc75e000}, 
+    {0xbc760000}, {0xbc762000}, {0xbc764000}, {0xbc766000}, 
+    {0xbc768000}, {0xbc76a000}, {0xbc76c000}, {0xbc76e000}, 
+    {0xbc770000}, {0xbc772000}, {0xbc774000}, {0xbc776000}, 
+    {0xbc778000}, {0xbc77a000}, {0xbc77c000}, {0xbc77e000}, 
+    {0xbc780000}, {0xbc782000}, {0xbc784000}, {0xbc786000}, 
+    {0xbc788000}, {0xbc78a000}, {0xbc78c000}, {0xbc78e000}, 
+    {0xbc790000}, {0xbc792000}, {0xbc794000}, {0xbc796000}, 
+    {0xbc798000}, {0xbc79a000}, {0xbc79c000}, {0xbc79e000}, 
+    {0xbc7a0000}, {0xbc7a2000}, {0xbc7a4000}, {0xbc7a6000}, 
+    {0xbc7a8000}, {0xbc7aa000}, {0xbc7ac000}, {0xbc7ae000}, 
+    {0xbc7b0000}, {0xbc7b2000}, {0xbc7b4000}, {0xbc7b6000}, 
+    {0xbc7b8000}, {0xbc7ba000}, {0xbc7bc000}, {0xbc7be000}, 
+    {0xbc7c0000}, {0xbc7c2000}, {0xbc7c4000}, {0xbc7c6000}, 
+    {0xbc7c8000}, {0xbc7ca000}, {0xbc7cc000}, {0xbc7ce000}, 
+    {0xbc7d0000}, {0xbc7d2000}, {0xbc7d4000}, {0xbc7d6000}, 
+    {0xbc7d8000}, {0xbc7da000}, {0xbc7dc000}, {0xbc7de000}, 
+    {0xbc7e0000}, {0xbc7e2000}, {0xbc7e4000}, {0xbc7e6000}, 
+    {0xbc7e8000}, {0xbc7ea000}, {0xbc7ec000}, {0xbc7ee000}, 
+    {0xbc7f0000}, {0xbc7f2000}, {0xbc7f4000}, {0xbc7f6000}, 
+    {0xbc7f8000}, {0xbc7fa000}, {0xbc7fc000}, {0xbc7fe000}, 
+    {0xbc800000}, {0xbc802000}, {0xbc804000}, {0xbc806000}, 
+    {0xbc808000}, {0xbc80a000}, {0xbc80c000}, {0xbc80e000}, 
+    {0xbc810000}, {0xbc812000}, {0xbc814000}, {0xbc816000}, 
+    {0xbc818000}, {0xbc81a000}, {0xbc81c000}, {0xbc81e000}, 
+    {0xbc820000}, {0xbc822000}, {0xbc824000}, {0xbc826000}, 
+    {0xbc828000}, {0xbc82a000}, {0xbc82c000}, {0xbc82e000}, 
+    {0xbc830000}, {0xbc832000}, {0xbc834000}, {0xbc836000}, 
+    {0xbc838000}, {0xbc83a000}, {0xbc83c000}, {0xbc83e000}, 
+    {0xbc840000}, {0xbc842000}, {0xbc844000}, {0xbc846000}, 
+    {0xbc848000}, {0xbc84a000}, {0xbc84c000}, {0xbc84e000}, 
+    {0xbc850000}, {0xbc852000}, {0xbc854000}, {0xbc856000}, 
+    {0xbc858000}, {0xbc85a000}, {0xbc85c000}, {0xbc85e000}, 
+    {0xbc860000}, {0xbc862000}, {0xbc864000}, {0xbc866000}, 
+    {0xbc868000}, {0xbc86a000}, {0xbc86c000}, {0xbc86e000}, 
+    {0xbc870000}, {0xbc872000}, {0xbc874000}, {0xbc876000}, 
+    {0xbc878000}, {0xbc87a000}, {0xbc87c000}, {0xbc87e000}, 
+    {0xbc880000}, {0xbc882000}, {0xbc884000}, {0xbc886000}, 
+    {0xbc888000}, {0xbc88a000}, {0xbc88c000}, {0xbc88e000}, 
+    {0xbc890000}, {0xbc892000}, {0xbc894000}, {0xbc896000}, 
+    {0xbc898000}, {0xbc89a000}, {0xbc89c000}, {0xbc89e000}, 
+    {0xbc8a0000}, {0xbc8a2000}, {0xbc8a4000}, {0xbc8a6000}, 
+    {0xbc8a8000}, {0xbc8aa000}, {0xbc8ac000}, {0xbc8ae000}, 
+    {0xbc8b0000}, {0xbc8b2000}, {0xbc8b4000}, {0xbc8b6000}, 
+    {0xbc8b8000}, {0xbc8ba000}, {0xbc8bc000}, {0xbc8be000}, 
+    {0xbc8c0000}, {0xbc8c2000}, {0xbc8c4000}, {0xbc8c6000}, 
+    {0xbc8c8000}, {0xbc8ca000}, {0xbc8cc000}, {0xbc8ce000}, 
+    {0xbc8d0000}, {0xbc8d2000}, {0xbc8d4000}, {0xbc8d6000}, 
+    {0xbc8d8000}, {0xbc8da000}, {0xbc8dc000}, {0xbc8de000}, 
+    {0xbc8e0000}, {0xbc8e2000}, {0xbc8e4000}, {0xbc8e6000}, 
+    {0xbc8e8000}, {0xbc8ea000}, {0xbc8ec000}, {0xbc8ee000}, 
+    {0xbc8f0000}, {0xbc8f2000}, {0xbc8f4000}, {0xbc8f6000}, 
+    {0xbc8f8000}, {0xbc8fa000}, {0xbc8fc000}, {0xbc8fe000}, 
+    {0xbc900000}, {0xbc902000}, {0xbc904000}, {0xbc906000}, 
+    {0xbc908000}, {0xbc90a000}, {0xbc90c000}, {0xbc90e000}, 
+    {0xbc910000}, {0xbc912000}, {0xbc914000}, {0xbc916000}, 
+    {0xbc918000}, {0xbc91a000}, {0xbc91c000}, {0xbc91e000}, 
+    {0xbc920000}, {0xbc922000}, {0xbc924000}, {0xbc926000}, 
+    {0xbc928000}, {0xbc92a000}, {0xbc92c000}, {0xbc92e000}, 
+    {0xbc930000}, {0xbc932000}, {0xbc934000}, {0xbc936000}, 
+    {0xbc938000}, {0xbc93a000}, {0xbc93c000}, {0xbc93e000}, 
+    {0xbc940000}, {0xbc942000}, {0xbc944000}, {0xbc946000}, 
+    {0xbc948000}, {0xbc94a000}, {0xbc94c000}, {0xbc94e000}, 
+    {0xbc950000}, {0xbc952000}, {0xbc954000}, {0xbc956000}, 
+    {0xbc958000}, {0xbc95a000}, {0xbc95c000}, {0xbc95e000}, 
+    {0xbc960000}, {0xbc962000}, {0xbc964000}, {0xbc966000}, 
+    {0xbc968000}, {0xbc96a000}, {0xbc96c000}, {0xbc96e000}, 
+    {0xbc970000}, {0xbc972000}, {0xbc974000}, {0xbc976000}, 
+    {0xbc978000}, {0xbc97a000}, {0xbc97c000}, {0xbc97e000}, 
+    {0xbc980000}, {0xbc982000}, {0xbc984000}, {0xbc986000}, 
+    {0xbc988000}, {0xbc98a000}, {0xbc98c000}, {0xbc98e000}, 
+    {0xbc990000}, {0xbc992000}, {0xbc994000}, {0xbc996000}, 
+    {0xbc998000}, {0xbc99a000}, {0xbc99c000}, {0xbc99e000}, 
+    {0xbc9a0000}, {0xbc9a2000}, {0xbc9a4000}, {0xbc9a6000}, 
+    {0xbc9a8000}, {0xbc9aa000}, {0xbc9ac000}, {0xbc9ae000}, 
+    {0xbc9b0000}, {0xbc9b2000}, {0xbc9b4000}, {0xbc9b6000}, 
+    {0xbc9b8000}, {0xbc9ba000}, {0xbc9bc000}, {0xbc9be000}, 
+    {0xbc9c0000}, {0xbc9c2000}, {0xbc9c4000}, {0xbc9c6000}, 
+    {0xbc9c8000}, {0xbc9ca000}, {0xbc9cc000}, {0xbc9ce000}, 
+    {0xbc9d0000}, {0xbc9d2000}, {0xbc9d4000}, {0xbc9d6000}, 
+    {0xbc9d8000}, {0xbc9da000}, {0xbc9dc000}, {0xbc9de000}, 
+    {0xbc9e0000}, {0xbc9e2000}, {0xbc9e4000}, {0xbc9e6000}, 
+    {0xbc9e8000}, {0xbc9ea000}, {0xbc9ec000}, {0xbc9ee000}, 
+    {0xbc9f0000}, {0xbc9f2000}, {0xbc9f4000}, {0xbc9f6000}, 
+    {0xbc9f8000}, {0xbc9fa000}, {0xbc9fc000}, {0xbc9fe000}, 
+    {0xbca00000}, {0xbca02000}, {0xbca04000}, {0xbca06000}, 
+    {0xbca08000}, {0xbca0a000}, {0xbca0c000}, {0xbca0e000}, 
+    {0xbca10000}, {0xbca12000}, {0xbca14000}, {0xbca16000}, 
+    {0xbca18000}, {0xbca1a000}, {0xbca1c000}, {0xbca1e000}, 
+    {0xbca20000}, {0xbca22000}, {0xbca24000}, {0xbca26000}, 
+    {0xbca28000}, {0xbca2a000}, {0xbca2c000}, {0xbca2e000}, 
+    {0xbca30000}, {0xbca32000}, {0xbca34000}, {0xbca36000}, 
+    {0xbca38000}, {0xbca3a000}, {0xbca3c000}, {0xbca3e000}, 
+    {0xbca40000}, {0xbca42000}, {0xbca44000}, {0xbca46000}, 
+    {0xbca48000}, {0xbca4a000}, {0xbca4c000}, {0xbca4e000}, 
+    {0xbca50000}, {0xbca52000}, {0xbca54000}, {0xbca56000}, 
+    {0xbca58000}, {0xbca5a000}, {0xbca5c000}, {0xbca5e000}, 
+    {0xbca60000}, {0xbca62000}, {0xbca64000}, {0xbca66000}, 
+    {0xbca68000}, {0xbca6a000}, {0xbca6c000}, {0xbca6e000}, 
+    {0xbca70000}, {0xbca72000}, {0xbca74000}, {0xbca76000}, 
+    {0xbca78000}, {0xbca7a000}, {0xbca7c000}, {0xbca7e000}, 
+    {0xbca80000}, {0xbca82000}, {0xbca84000}, {0xbca86000}, 
+    {0xbca88000}, {0xbca8a000}, {0xbca8c000}, {0xbca8e000}, 
+    {0xbca90000}, {0xbca92000}, {0xbca94000}, {0xbca96000}, 
+    {0xbca98000}, {0xbca9a000}, {0xbca9c000}, {0xbca9e000}, 
+    {0xbcaa0000}, {0xbcaa2000}, {0xbcaa4000}, {0xbcaa6000}, 
+    {0xbcaa8000}, {0xbcaaa000}, {0xbcaac000}, {0xbcaae000}, 
+    {0xbcab0000}, {0xbcab2000}, {0xbcab4000}, {0xbcab6000}, 
+    {0xbcab8000}, {0xbcaba000}, {0xbcabc000}, {0xbcabe000}, 
+    {0xbcac0000}, {0xbcac2000}, {0xbcac4000}, {0xbcac6000}, 
+    {0xbcac8000}, {0xbcaca000}, {0xbcacc000}, {0xbcace000}, 
+    {0xbcad0000}, {0xbcad2000}, {0xbcad4000}, {0xbcad6000}, 
+    {0xbcad8000}, {0xbcada000}, {0xbcadc000}, {0xbcade000}, 
+    {0xbcae0000}, {0xbcae2000}, {0xbcae4000}, {0xbcae6000}, 
+    {0xbcae8000}, {0xbcaea000}, {0xbcaec000}, {0xbcaee000}, 
+    {0xbcaf0000}, {0xbcaf2000}, {0xbcaf4000}, {0xbcaf6000}, 
+    {0xbcaf8000}, {0xbcafa000}, {0xbcafc000}, {0xbcafe000}, 
+    {0xbcb00000}, {0xbcb02000}, {0xbcb04000}, {0xbcb06000}, 
+    {0xbcb08000}, {0xbcb0a000}, {0xbcb0c000}, {0xbcb0e000}, 
+    {0xbcb10000}, {0xbcb12000}, {0xbcb14000}, {0xbcb16000}, 
+    {0xbcb18000}, {0xbcb1a000}, {0xbcb1c000}, {0xbcb1e000}, 
+    {0xbcb20000}, {0xbcb22000}, {0xbcb24000}, {0xbcb26000}, 
+    {0xbcb28000}, {0xbcb2a000}, {0xbcb2c000}, {0xbcb2e000}, 
+    {0xbcb30000}, {0xbcb32000}, {0xbcb34000}, {0xbcb36000}, 
+    {0xbcb38000}, {0xbcb3a000}, {0xbcb3c000}, {0xbcb3e000}, 
+    {0xbcb40000}, {0xbcb42000}, {0xbcb44000}, {0xbcb46000}, 
+    {0xbcb48000}, {0xbcb4a000}, {0xbcb4c000}, {0xbcb4e000}, 
+    {0xbcb50000}, {0xbcb52000}, {0xbcb54000}, {0xbcb56000}, 
+    {0xbcb58000}, {0xbcb5a000}, {0xbcb5c000}, {0xbcb5e000}, 
+    {0xbcb60000}, {0xbcb62000}, {0xbcb64000}, {0xbcb66000}, 
+    {0xbcb68000}, {0xbcb6a000}, {0xbcb6c000}, {0xbcb6e000}, 
+    {0xbcb70000}, {0xbcb72000}, {0xbcb74000}, {0xbcb76000}, 
+    {0xbcb78000}, {0xbcb7a000}, {0xbcb7c000}, {0xbcb7e000}, 
+    {0xbcb80000}, {0xbcb82000}, {0xbcb84000}, {0xbcb86000}, 
+    {0xbcb88000}, {0xbcb8a000}, {0xbcb8c000}, {0xbcb8e000}, 
+    {0xbcb90000}, {0xbcb92000}, {0xbcb94000}, {0xbcb96000}, 
+    {0xbcb98000}, {0xbcb9a000}, {0xbcb9c000}, {0xbcb9e000}, 
+    {0xbcba0000}, {0xbcba2000}, {0xbcba4000}, {0xbcba6000}, 
+    {0xbcba8000}, {0xbcbaa000}, {0xbcbac000}, {0xbcbae000}, 
+    {0xbcbb0000}, {0xbcbb2000}, {0xbcbb4000}, {0xbcbb6000}, 
+    {0xbcbb8000}, {0xbcbba000}, {0xbcbbc000}, {0xbcbbe000}, 
+    {0xbcbc0000}, {0xbcbc2000}, {0xbcbc4000}, {0xbcbc6000}, 
+    {0xbcbc8000}, {0xbcbca000}, {0xbcbcc000}, {0xbcbce000}, 
+    {0xbcbd0000}, {0xbcbd2000}, {0xbcbd4000}, {0xbcbd6000}, 
+    {0xbcbd8000}, {0xbcbda000}, {0xbcbdc000}, {0xbcbde000}, 
+    {0xbcbe0000}, {0xbcbe2000}, {0xbcbe4000}, {0xbcbe6000}, 
+    {0xbcbe8000}, {0xbcbea000}, {0xbcbec000}, {0xbcbee000}, 
+    {0xbcbf0000}, {0xbcbf2000}, {0xbcbf4000}, {0xbcbf6000}, 
+    {0xbcbf8000}, {0xbcbfa000}, {0xbcbfc000}, {0xbcbfe000}, 
+    {0xbcc00000}, {0xbcc02000}, {0xbcc04000}, {0xbcc06000}, 
+    {0xbcc08000}, {0xbcc0a000}, {0xbcc0c000}, {0xbcc0e000}, 
+    {0xbcc10000}, {0xbcc12000}, {0xbcc14000}, {0xbcc16000}, 
+    {0xbcc18000}, {0xbcc1a000}, {0xbcc1c000}, {0xbcc1e000}, 
+    {0xbcc20000}, {0xbcc22000}, {0xbcc24000}, {0xbcc26000}, 
+    {0xbcc28000}, {0xbcc2a000}, {0xbcc2c000}, {0xbcc2e000}, 
+    {0xbcc30000}, {0xbcc32000}, {0xbcc34000}, {0xbcc36000}, 
+    {0xbcc38000}, {0xbcc3a000}, {0xbcc3c000}, {0xbcc3e000}, 
+    {0xbcc40000}, {0xbcc42000}, {0xbcc44000}, {0xbcc46000}, 
+    {0xbcc48000}, {0xbcc4a000}, {0xbcc4c000}, {0xbcc4e000}, 
+    {0xbcc50000}, {0xbcc52000}, {0xbcc54000}, {0xbcc56000}, 
+    {0xbcc58000}, {0xbcc5a000}, {0xbcc5c000}, {0xbcc5e000}, 
+    {0xbcc60000}, {0xbcc62000}, {0xbcc64000}, {0xbcc66000}, 
+    {0xbcc68000}, {0xbcc6a000}, {0xbcc6c000}, {0xbcc6e000}, 
+    {0xbcc70000}, {0xbcc72000}, {0xbcc74000}, {0xbcc76000}, 
+    {0xbcc78000}, {0xbcc7a000}, {0xbcc7c000}, {0xbcc7e000}, 
+    {0xbcc80000}, {0xbcc82000}, {0xbcc84000}, {0xbcc86000}, 
+    {0xbcc88000}, {0xbcc8a000}, {0xbcc8c000}, {0xbcc8e000}, 
+    {0xbcc90000}, {0xbcc92000}, {0xbcc94000}, {0xbcc96000}, 
+    {0xbcc98000}, {0xbcc9a000}, {0xbcc9c000}, {0xbcc9e000}, 
+    {0xbcca0000}, {0xbcca2000}, {0xbcca4000}, {0xbcca6000}, 
+    {0xbcca8000}, {0xbccaa000}, {0xbccac000}, {0xbccae000}, 
+    {0xbccb0000}, {0xbccb2000}, {0xbccb4000}, {0xbccb6000}, 
+    {0xbccb8000}, {0xbccba000}, {0xbccbc000}, {0xbccbe000}, 
+    {0xbccc0000}, {0xbccc2000}, {0xbccc4000}, {0xbccc6000}, 
+    {0xbccc8000}, {0xbccca000}, {0xbcccc000}, {0xbccce000}, 
+    {0xbccd0000}, {0xbccd2000}, {0xbccd4000}, {0xbccd6000}, 
+    {0xbccd8000}, {0xbccda000}, {0xbccdc000}, {0xbccde000}, 
+    {0xbcce0000}, {0xbcce2000}, {0xbcce4000}, {0xbcce6000}, 
+    {0xbcce8000}, {0xbccea000}, {0xbccec000}, {0xbccee000}, 
+    {0xbccf0000}, {0xbccf2000}, {0xbccf4000}, {0xbccf6000}, 
+    {0xbccf8000}, {0xbccfa000}, {0xbccfc000}, {0xbccfe000}, 
+    {0xbcd00000}, {0xbcd02000}, {0xbcd04000}, {0xbcd06000}, 
+    {0xbcd08000}, {0xbcd0a000}, {0xbcd0c000}, {0xbcd0e000}, 
+    {0xbcd10000}, {0xbcd12000}, {0xbcd14000}, {0xbcd16000}, 
+    {0xbcd18000}, {0xbcd1a000}, {0xbcd1c000}, {0xbcd1e000}, 
+    {0xbcd20000}, {0xbcd22000}, {0xbcd24000}, {0xbcd26000}, 
+    {0xbcd28000}, {0xbcd2a000}, {0xbcd2c000}, {0xbcd2e000}, 
+    {0xbcd30000}, {0xbcd32000}, {0xbcd34000}, {0xbcd36000}, 
+    {0xbcd38000}, {0xbcd3a000}, {0xbcd3c000}, {0xbcd3e000}, 
+    {0xbcd40000}, {0xbcd42000}, {0xbcd44000}, {0xbcd46000}, 
+    {0xbcd48000}, {0xbcd4a000}, {0xbcd4c000}, {0xbcd4e000}, 
+    {0xbcd50000}, {0xbcd52000}, {0xbcd54000}, {0xbcd56000}, 
+    {0xbcd58000}, {0xbcd5a000}, {0xbcd5c000}, {0xbcd5e000}, 
+    {0xbcd60000}, {0xbcd62000}, {0xbcd64000}, {0xbcd66000}, 
+    {0xbcd68000}, {0xbcd6a000}, {0xbcd6c000}, {0xbcd6e000}, 
+    {0xbcd70000}, {0xbcd72000}, {0xbcd74000}, {0xbcd76000}, 
+    {0xbcd78000}, {0xbcd7a000}, {0xbcd7c000}, {0xbcd7e000}, 
+    {0xbcd80000}, {0xbcd82000}, {0xbcd84000}, {0xbcd86000}, 
+    {0xbcd88000}, {0xbcd8a000}, {0xbcd8c000}, {0xbcd8e000}, 
+    {0xbcd90000}, {0xbcd92000}, {0xbcd94000}, {0xbcd96000}, 
+    {0xbcd98000}, {0xbcd9a000}, {0xbcd9c000}, {0xbcd9e000}, 
+    {0xbcda0000}, {0xbcda2000}, {0xbcda4000}, {0xbcda6000}, 
+    {0xbcda8000}, {0xbcdaa000}, {0xbcdac000}, {0xbcdae000}, 
+    {0xbcdb0000}, {0xbcdb2000}, {0xbcdb4000}, {0xbcdb6000}, 
+    {0xbcdb8000}, {0xbcdba000}, {0xbcdbc000}, {0xbcdbe000}, 
+    {0xbcdc0000}, {0xbcdc2000}, {0xbcdc4000}, {0xbcdc6000}, 
+    {0xbcdc8000}, {0xbcdca000}, {0xbcdcc000}, {0xbcdce000}, 
+    {0xbcdd0000}, {0xbcdd2000}, {0xbcdd4000}, {0xbcdd6000}, 
+    {0xbcdd8000}, {0xbcdda000}, {0xbcddc000}, {0xbcdde000}, 
+    {0xbcde0000}, {0xbcde2000}, {0xbcde4000}, {0xbcde6000}, 
+    {0xbcde8000}, {0xbcdea000}, {0xbcdec000}, {0xbcdee000}, 
+    {0xbcdf0000}, {0xbcdf2000}, {0xbcdf4000}, {0xbcdf6000}, 
+    {0xbcdf8000}, {0xbcdfa000}, {0xbcdfc000}, {0xbcdfe000}, 
+    {0xbce00000}, {0xbce02000}, {0xbce04000}, {0xbce06000}, 
+    {0xbce08000}, {0xbce0a000}, {0xbce0c000}, {0xbce0e000}, 
+    {0xbce10000}, {0xbce12000}, {0xbce14000}, {0xbce16000}, 
+    {0xbce18000}, {0xbce1a000}, {0xbce1c000}, {0xbce1e000}, 
+    {0xbce20000}, {0xbce22000}, {0xbce24000}, {0xbce26000}, 
+    {0xbce28000}, {0xbce2a000}, {0xbce2c000}, {0xbce2e000}, 
+    {0xbce30000}, {0xbce32000}, {0xbce34000}, {0xbce36000}, 
+    {0xbce38000}, {0xbce3a000}, {0xbce3c000}, {0xbce3e000}, 
+    {0xbce40000}, {0xbce42000}, {0xbce44000}, {0xbce46000}, 
+    {0xbce48000}, {0xbce4a000}, {0xbce4c000}, {0xbce4e000}, 
+    {0xbce50000}, {0xbce52000}, {0xbce54000}, {0xbce56000}, 
+    {0xbce58000}, {0xbce5a000}, {0xbce5c000}, {0xbce5e000}, 
+    {0xbce60000}, {0xbce62000}, {0xbce64000}, {0xbce66000}, 
+    {0xbce68000}, {0xbce6a000}, {0xbce6c000}, {0xbce6e000}, 
+    {0xbce70000}, {0xbce72000}, {0xbce74000}, {0xbce76000}, 
+    {0xbce78000}, {0xbce7a000}, {0xbce7c000}, {0xbce7e000}, 
+    {0xbce80000}, {0xbce82000}, {0xbce84000}, {0xbce86000}, 
+    {0xbce88000}, {0xbce8a000}, {0xbce8c000}, {0xbce8e000}, 
+    {0xbce90000}, {0xbce92000}, {0xbce94000}, {0xbce96000}, 
+    {0xbce98000}, {0xbce9a000}, {0xbce9c000}, {0xbce9e000}, 
+    {0xbcea0000}, {0xbcea2000}, {0xbcea4000}, {0xbcea6000}, 
+    {0xbcea8000}, {0xbceaa000}, {0xbceac000}, {0xbceae000}, 
+    {0xbceb0000}, {0xbceb2000}, {0xbceb4000}, {0xbceb6000}, 
+    {0xbceb8000}, {0xbceba000}, {0xbcebc000}, {0xbcebe000}, 
+    {0xbcec0000}, {0xbcec2000}, {0xbcec4000}, {0xbcec6000}, 
+    {0xbcec8000}, {0xbceca000}, {0xbcecc000}, {0xbcece000}, 
+    {0xbced0000}, {0xbced2000}, {0xbced4000}, {0xbced6000}, 
+    {0xbced8000}, {0xbceda000}, {0xbcedc000}, {0xbcede000}, 
+    {0xbcee0000}, {0xbcee2000}, {0xbcee4000}, {0xbcee6000}, 
+    {0xbcee8000}, {0xbceea000}, {0xbceec000}, {0xbceee000}, 
+    {0xbcef0000}, {0xbcef2000}, {0xbcef4000}, {0xbcef6000}, 
+    {0xbcef8000}, {0xbcefa000}, {0xbcefc000}, {0xbcefe000}, 
+    {0xbcf00000}, {0xbcf02000}, {0xbcf04000}, {0xbcf06000}, 
+    {0xbcf08000}, {0xbcf0a000}, {0xbcf0c000}, {0xbcf0e000}, 
+    {0xbcf10000}, {0xbcf12000}, {0xbcf14000}, {0xbcf16000}, 
+    {0xbcf18000}, {0xbcf1a000}, {0xbcf1c000}, {0xbcf1e000}, 
+    {0xbcf20000}, {0xbcf22000}, {0xbcf24000}, {0xbcf26000}, 
+    {0xbcf28000}, {0xbcf2a000}, {0xbcf2c000}, {0xbcf2e000}, 
+    {0xbcf30000}, {0xbcf32000}, {0xbcf34000}, {0xbcf36000}, 
+    {0xbcf38000}, {0xbcf3a000}, {0xbcf3c000}, {0xbcf3e000}, 
+    {0xbcf40000}, {0xbcf42000}, {0xbcf44000}, {0xbcf46000}, 
+    {0xbcf48000}, {0xbcf4a000}, {0xbcf4c000}, {0xbcf4e000}, 
+    {0xbcf50000}, {0xbcf52000}, {0xbcf54000}, {0xbcf56000}, 
+    {0xbcf58000}, {0xbcf5a000}, {0xbcf5c000}, {0xbcf5e000}, 
+    {0xbcf60000}, {0xbcf62000}, {0xbcf64000}, {0xbcf66000}, 
+    {0xbcf68000}, {0xbcf6a000}, {0xbcf6c000}, {0xbcf6e000}, 
+    {0xbcf70000}, {0xbcf72000}, {0xbcf74000}, {0xbcf76000}, 
+    {0xbcf78000}, {0xbcf7a000}, {0xbcf7c000}, {0xbcf7e000}, 
+    {0xbcf80000}, {0xbcf82000}, {0xbcf84000}, {0xbcf86000}, 
+    {0xbcf88000}, {0xbcf8a000}, {0xbcf8c000}, {0xbcf8e000}, 
+    {0xbcf90000}, {0xbcf92000}, {0xbcf94000}, {0xbcf96000}, 
+    {0xbcf98000}, {0xbcf9a000}, {0xbcf9c000}, {0xbcf9e000}, 
+    {0xbcfa0000}, {0xbcfa2000}, {0xbcfa4000}, {0xbcfa6000}, 
+    {0xbcfa8000}, {0xbcfaa000}, {0xbcfac000}, {0xbcfae000}, 
+    {0xbcfb0000}, {0xbcfb2000}, {0xbcfb4000}, {0xbcfb6000}, 
+    {0xbcfb8000}, {0xbcfba000}, {0xbcfbc000}, {0xbcfbe000}, 
+    {0xbcfc0000}, {0xbcfc2000}, {0xbcfc4000}, {0xbcfc6000}, 
+    {0xbcfc8000}, {0xbcfca000}, {0xbcfcc000}, {0xbcfce000}, 
+    {0xbcfd0000}, {0xbcfd2000}, {0xbcfd4000}, {0xbcfd6000}, 
+    {0xbcfd8000}, {0xbcfda000}, {0xbcfdc000}, {0xbcfde000}, 
+    {0xbcfe0000}, {0xbcfe2000}, {0xbcfe4000}, {0xbcfe6000}, 
+    {0xbcfe8000}, {0xbcfea000}, {0xbcfec000}, {0xbcfee000}, 
+    {0xbcff0000}, {0xbcff2000}, {0xbcff4000}, {0xbcff6000}, 
+    {0xbcff8000}, {0xbcffa000}, {0xbcffc000}, {0xbcffe000}, 
+    {0xbd000000}, {0xbd002000}, {0xbd004000}, {0xbd006000}, 
+    {0xbd008000}, {0xbd00a000}, {0xbd00c000}, {0xbd00e000}, 
+    {0xbd010000}, {0xbd012000}, {0xbd014000}, {0xbd016000}, 
+    {0xbd018000}, {0xbd01a000}, {0xbd01c000}, {0xbd01e000}, 
+    {0xbd020000}, {0xbd022000}, {0xbd024000}, {0xbd026000}, 
+    {0xbd028000}, {0xbd02a000}, {0xbd02c000}, {0xbd02e000}, 
+    {0xbd030000}, {0xbd032000}, {0xbd034000}, {0xbd036000}, 
+    {0xbd038000}, {0xbd03a000}, {0xbd03c000}, {0xbd03e000}, 
+    {0xbd040000}, {0xbd042000}, {0xbd044000}, {0xbd046000}, 
+    {0xbd048000}, {0xbd04a000}, {0xbd04c000}, {0xbd04e000}, 
+    {0xbd050000}, {0xbd052000}, {0xbd054000}, {0xbd056000}, 
+    {0xbd058000}, {0xbd05a000}, {0xbd05c000}, {0xbd05e000}, 
+    {0xbd060000}, {0xbd062000}, {0xbd064000}, {0xbd066000}, 
+    {0xbd068000}, {0xbd06a000}, {0xbd06c000}, {0xbd06e000}, 
+    {0xbd070000}, {0xbd072000}, {0xbd074000}, {0xbd076000}, 
+    {0xbd078000}, {0xbd07a000}, {0xbd07c000}, {0xbd07e000}, 
+    {0xbd080000}, {0xbd082000}, {0xbd084000}, {0xbd086000}, 
+    {0xbd088000}, {0xbd08a000}, {0xbd08c000}, {0xbd08e000}, 
+    {0xbd090000}, {0xbd092000}, {0xbd094000}, {0xbd096000}, 
+    {0xbd098000}, {0xbd09a000}, {0xbd09c000}, {0xbd09e000}, 
+    {0xbd0a0000}, {0xbd0a2000}, {0xbd0a4000}, {0xbd0a6000}, 
+    {0xbd0a8000}, {0xbd0aa000}, {0xbd0ac000}, {0xbd0ae000}, 
+    {0xbd0b0000}, {0xbd0b2000}, {0xbd0b4000}, {0xbd0b6000}, 
+    {0xbd0b8000}, {0xbd0ba000}, {0xbd0bc000}, {0xbd0be000}, 
+    {0xbd0c0000}, {0xbd0c2000}, {0xbd0c4000}, {0xbd0c6000}, 
+    {0xbd0c8000}, {0xbd0ca000}, {0xbd0cc000}, {0xbd0ce000}, 
+    {0xbd0d0000}, {0xbd0d2000}, {0xbd0d4000}, {0xbd0d6000}, 
+    {0xbd0d8000}, {0xbd0da000}, {0xbd0dc000}, {0xbd0de000}, 
+    {0xbd0e0000}, {0xbd0e2000}, {0xbd0e4000}, {0xbd0e6000}, 
+    {0xbd0e8000}, {0xbd0ea000}, {0xbd0ec000}, {0xbd0ee000}, 
+    {0xbd0f0000}, {0xbd0f2000}, {0xbd0f4000}, {0xbd0f6000}, 
+    {0xbd0f8000}, {0xbd0fa000}, {0xbd0fc000}, {0xbd0fe000}, 
+    {0xbd100000}, {0xbd102000}, {0xbd104000}, {0xbd106000}, 
+    {0xbd108000}, {0xbd10a000}, {0xbd10c000}, {0xbd10e000}, 
+    {0xbd110000}, {0xbd112000}, {0xbd114000}, {0xbd116000}, 
+    {0xbd118000}, {0xbd11a000}, {0xbd11c000}, {0xbd11e000}, 
+    {0xbd120000}, {0xbd122000}, {0xbd124000}, {0xbd126000}, 
+    {0xbd128000}, {0xbd12a000}, {0xbd12c000}, {0xbd12e000}, 
+    {0xbd130000}, {0xbd132000}, {0xbd134000}, {0xbd136000}, 
+    {0xbd138000}, {0xbd13a000}, {0xbd13c000}, {0xbd13e000}, 
+    {0xbd140000}, {0xbd142000}, {0xbd144000}, {0xbd146000}, 
+    {0xbd148000}, {0xbd14a000}, {0xbd14c000}, {0xbd14e000}, 
+    {0xbd150000}, {0xbd152000}, {0xbd154000}, {0xbd156000}, 
+    {0xbd158000}, {0xbd15a000}, {0xbd15c000}, {0xbd15e000}, 
+    {0xbd160000}, {0xbd162000}, {0xbd164000}, {0xbd166000}, 
+    {0xbd168000}, {0xbd16a000}, {0xbd16c000}, {0xbd16e000}, 
+    {0xbd170000}, {0xbd172000}, {0xbd174000}, {0xbd176000}, 
+    {0xbd178000}, {0xbd17a000}, {0xbd17c000}, {0xbd17e000}, 
+    {0xbd180000}, {0xbd182000}, {0xbd184000}, {0xbd186000}, 
+    {0xbd188000}, {0xbd18a000}, {0xbd18c000}, {0xbd18e000}, 
+    {0xbd190000}, {0xbd192000}, {0xbd194000}, {0xbd196000}, 
+    {0xbd198000}, {0xbd19a000}, {0xbd19c000}, {0xbd19e000}, 
+    {0xbd1a0000}, {0xbd1a2000}, {0xbd1a4000}, {0xbd1a6000}, 
+    {0xbd1a8000}, {0xbd1aa000}, {0xbd1ac000}, {0xbd1ae000}, 
+    {0xbd1b0000}, {0xbd1b2000}, {0xbd1b4000}, {0xbd1b6000}, 
+    {0xbd1b8000}, {0xbd1ba000}, {0xbd1bc000}, {0xbd1be000}, 
+    {0xbd1c0000}, {0xbd1c2000}, {0xbd1c4000}, {0xbd1c6000}, 
+    {0xbd1c8000}, {0xbd1ca000}, {0xbd1cc000}, {0xbd1ce000}, 
+    {0xbd1d0000}, {0xbd1d2000}, {0xbd1d4000}, {0xbd1d6000}, 
+    {0xbd1d8000}, {0xbd1da000}, {0xbd1dc000}, {0xbd1de000}, 
+    {0xbd1e0000}, {0xbd1e2000}, {0xbd1e4000}, {0xbd1e6000}, 
+    {0xbd1e8000}, {0xbd1ea000}, {0xbd1ec000}, {0xbd1ee000}, 
+    {0xbd1f0000}, {0xbd1f2000}, {0xbd1f4000}, {0xbd1f6000}, 
+    {0xbd1f8000}, {0xbd1fa000}, {0xbd1fc000}, {0xbd1fe000}, 
+    {0xbd200000}, {0xbd202000}, {0xbd204000}, {0xbd206000}, 
+    {0xbd208000}, {0xbd20a000}, {0xbd20c000}, {0xbd20e000}, 
+    {0xbd210000}, {0xbd212000}, {0xbd214000}, {0xbd216000}, 
+    {0xbd218000}, {0xbd21a000}, {0xbd21c000}, {0xbd21e000}, 
+    {0xbd220000}, {0xbd222000}, {0xbd224000}, {0xbd226000}, 
+    {0xbd228000}, {0xbd22a000}, {0xbd22c000}, {0xbd22e000}, 
+    {0xbd230000}, {0xbd232000}, {0xbd234000}, {0xbd236000}, 
+    {0xbd238000}, {0xbd23a000}, {0xbd23c000}, {0xbd23e000}, 
+    {0xbd240000}, {0xbd242000}, {0xbd244000}, {0xbd246000}, 
+    {0xbd248000}, {0xbd24a000}, {0xbd24c000}, {0xbd24e000}, 
+    {0xbd250000}, {0xbd252000}, {0xbd254000}, {0xbd256000}, 
+    {0xbd258000}, {0xbd25a000}, {0xbd25c000}, {0xbd25e000}, 
+    {0xbd260000}, {0xbd262000}, {0xbd264000}, {0xbd266000}, 
+    {0xbd268000}, {0xbd26a000}, {0xbd26c000}, {0xbd26e000}, 
+    {0xbd270000}, {0xbd272000}, {0xbd274000}, {0xbd276000}, 
+    {0xbd278000}, {0xbd27a000}, {0xbd27c000}, {0xbd27e000}, 
+    {0xbd280000}, {0xbd282000}, {0xbd284000}, {0xbd286000}, 
+    {0xbd288000}, {0xbd28a000}, {0xbd28c000}, {0xbd28e000}, 
+    {0xbd290000}, {0xbd292000}, {0xbd294000}, {0xbd296000}, 
+    {0xbd298000}, {0xbd29a000}, {0xbd29c000}, {0xbd29e000}, 
+    {0xbd2a0000}, {0xbd2a2000}, {0xbd2a4000}, {0xbd2a6000}, 
+    {0xbd2a8000}, {0xbd2aa000}, {0xbd2ac000}, {0xbd2ae000}, 
+    {0xbd2b0000}, {0xbd2b2000}, {0xbd2b4000}, {0xbd2b6000}, 
+    {0xbd2b8000}, {0xbd2ba000}, {0xbd2bc000}, {0xbd2be000}, 
+    {0xbd2c0000}, {0xbd2c2000}, {0xbd2c4000}, {0xbd2c6000}, 
+    {0xbd2c8000}, {0xbd2ca000}, {0xbd2cc000}, {0xbd2ce000}, 
+    {0xbd2d0000}, {0xbd2d2000}, {0xbd2d4000}, {0xbd2d6000}, 
+    {0xbd2d8000}, {0xbd2da000}, {0xbd2dc000}, {0xbd2de000}, 
+    {0xbd2e0000}, {0xbd2e2000}, {0xbd2e4000}, {0xbd2e6000}, 
+    {0xbd2e8000}, {0xbd2ea000}, {0xbd2ec000}, {0xbd2ee000}, 
+    {0xbd2f0000}, {0xbd2f2000}, {0xbd2f4000}, {0xbd2f6000}, 
+    {0xbd2f8000}, {0xbd2fa000}, {0xbd2fc000}, {0xbd2fe000}, 
+    {0xbd300000}, {0xbd302000}, {0xbd304000}, {0xbd306000}, 
+    {0xbd308000}, {0xbd30a000}, {0xbd30c000}, {0xbd30e000}, 
+    {0xbd310000}, {0xbd312000}, {0xbd314000}, {0xbd316000}, 
+    {0xbd318000}, {0xbd31a000}, {0xbd31c000}, {0xbd31e000}, 
+    {0xbd320000}, {0xbd322000}, {0xbd324000}, {0xbd326000}, 
+    {0xbd328000}, {0xbd32a000}, {0xbd32c000}, {0xbd32e000}, 
+    {0xbd330000}, {0xbd332000}, {0xbd334000}, {0xbd336000}, 
+    {0xbd338000}, {0xbd33a000}, {0xbd33c000}, {0xbd33e000}, 
+    {0xbd340000}, {0xbd342000}, {0xbd344000}, {0xbd346000}, 
+    {0xbd348000}, {0xbd34a000}, {0xbd34c000}, {0xbd34e000}, 
+    {0xbd350000}, {0xbd352000}, {0xbd354000}, {0xbd356000}, 
+    {0xbd358000}, {0xbd35a000}, {0xbd35c000}, {0xbd35e000}, 
+    {0xbd360000}, {0xbd362000}, {0xbd364000}, {0xbd366000}, 
+    {0xbd368000}, {0xbd36a000}, {0xbd36c000}, {0xbd36e000}, 
+    {0xbd370000}, {0xbd372000}, {0xbd374000}, {0xbd376000}, 
+    {0xbd378000}, {0xbd37a000}, {0xbd37c000}, {0xbd37e000}, 
+    {0xbd380000}, {0xbd382000}, {0xbd384000}, {0xbd386000}, 
+    {0xbd388000}, {0xbd38a000}, {0xbd38c000}, {0xbd38e000}, 
+    {0xbd390000}, {0xbd392000}, {0xbd394000}, {0xbd396000}, 
+    {0xbd398000}, {0xbd39a000}, {0xbd39c000}, {0xbd39e000}, 
+    {0xbd3a0000}, {0xbd3a2000}, {0xbd3a4000}, {0xbd3a6000}, 
+    {0xbd3a8000}, {0xbd3aa000}, {0xbd3ac000}, {0xbd3ae000}, 
+    {0xbd3b0000}, {0xbd3b2000}, {0xbd3b4000}, {0xbd3b6000}, 
+    {0xbd3b8000}, {0xbd3ba000}, {0xbd3bc000}, {0xbd3be000}, 
+    {0xbd3c0000}, {0xbd3c2000}, {0xbd3c4000}, {0xbd3c6000}, 
+    {0xbd3c8000}, {0xbd3ca000}, {0xbd3cc000}, {0xbd3ce000}, 
+    {0xbd3d0000}, {0xbd3d2000}, {0xbd3d4000}, {0xbd3d6000}, 
+    {0xbd3d8000}, {0xbd3da000}, {0xbd3dc000}, {0xbd3de000}, 
+    {0xbd3e0000}, {0xbd3e2000}, {0xbd3e4000}, {0xbd3e6000}, 
+    {0xbd3e8000}, {0xbd3ea000}, {0xbd3ec000}, {0xbd3ee000}, 
+    {0xbd3f0000}, {0xbd3f2000}, {0xbd3f4000}, {0xbd3f6000}, 
+    {0xbd3f8000}, {0xbd3fa000}, {0xbd3fc000}, {0xbd3fe000}, 
+    {0xbd400000}, {0xbd402000}, {0xbd404000}, {0xbd406000}, 
+    {0xbd408000}, {0xbd40a000}, {0xbd40c000}, {0xbd40e000}, 
+    {0xbd410000}, {0xbd412000}, {0xbd414000}, {0xbd416000}, 
+    {0xbd418000}, {0xbd41a000}, {0xbd41c000}, {0xbd41e000}, 
+    {0xbd420000}, {0xbd422000}, {0xbd424000}, {0xbd426000}, 
+    {0xbd428000}, {0xbd42a000}, {0xbd42c000}, {0xbd42e000}, 
+    {0xbd430000}, {0xbd432000}, {0xbd434000}, {0xbd436000}, 
+    {0xbd438000}, {0xbd43a000}, {0xbd43c000}, {0xbd43e000}, 
+    {0xbd440000}, {0xbd442000}, {0xbd444000}, {0xbd446000}, 
+    {0xbd448000}, {0xbd44a000}, {0xbd44c000}, {0xbd44e000}, 
+    {0xbd450000}, {0xbd452000}, {0xbd454000}, {0xbd456000}, 
+    {0xbd458000}, {0xbd45a000}, {0xbd45c000}, {0xbd45e000}, 
+    {0xbd460000}, {0xbd462000}, {0xbd464000}, {0xbd466000}, 
+    {0xbd468000}, {0xbd46a000}, {0xbd46c000}, {0xbd46e000}, 
+    {0xbd470000}, {0xbd472000}, {0xbd474000}, {0xbd476000}, 
+    {0xbd478000}, {0xbd47a000}, {0xbd47c000}, {0xbd47e000}, 
+    {0xbd480000}, {0xbd482000}, {0xbd484000}, {0xbd486000}, 
+    {0xbd488000}, {0xbd48a000}, {0xbd48c000}, {0xbd48e000}, 
+    {0xbd490000}, {0xbd492000}, {0xbd494000}, {0xbd496000}, 
+    {0xbd498000}, {0xbd49a000}, {0xbd49c000}, {0xbd49e000}, 
+    {0xbd4a0000}, {0xbd4a2000}, {0xbd4a4000}, {0xbd4a6000}, 
+    {0xbd4a8000}, {0xbd4aa000}, {0xbd4ac000}, {0xbd4ae000}, 
+    {0xbd4b0000}, {0xbd4b2000}, {0xbd4b4000}, {0xbd4b6000}, 
+    {0xbd4b8000}, {0xbd4ba000}, {0xbd4bc000}, {0xbd4be000}, 
+    {0xbd4c0000}, {0xbd4c2000}, {0xbd4c4000}, {0xbd4c6000}, 
+    {0xbd4c8000}, {0xbd4ca000}, {0xbd4cc000}, {0xbd4ce000}, 
+    {0xbd4d0000}, {0xbd4d2000}, {0xbd4d4000}, {0xbd4d6000}, 
+    {0xbd4d8000}, {0xbd4da000}, {0xbd4dc000}, {0xbd4de000}, 
+    {0xbd4e0000}, {0xbd4e2000}, {0xbd4e4000}, {0xbd4e6000}, 
+    {0xbd4e8000}, {0xbd4ea000}, {0xbd4ec000}, {0xbd4ee000}, 
+    {0xbd4f0000}, {0xbd4f2000}, {0xbd4f4000}, {0xbd4f6000}, 
+    {0xbd4f8000}, {0xbd4fa000}, {0xbd4fc000}, {0xbd4fe000}, 
+    {0xbd500000}, {0xbd502000}, {0xbd504000}, {0xbd506000}, 
+    {0xbd508000}, {0xbd50a000}, {0xbd50c000}, {0xbd50e000}, 
+    {0xbd510000}, {0xbd512000}, {0xbd514000}, {0xbd516000}, 
+    {0xbd518000}, {0xbd51a000}, {0xbd51c000}, {0xbd51e000}, 
+    {0xbd520000}, {0xbd522000}, {0xbd524000}, {0xbd526000}, 
+    {0xbd528000}, {0xbd52a000}, {0xbd52c000}, {0xbd52e000}, 
+    {0xbd530000}, {0xbd532000}, {0xbd534000}, {0xbd536000}, 
+    {0xbd538000}, {0xbd53a000}, {0xbd53c000}, {0xbd53e000}, 
+    {0xbd540000}, {0xbd542000}, {0xbd544000}, {0xbd546000}, 
+    {0xbd548000}, {0xbd54a000}, {0xbd54c000}, {0xbd54e000}, 
+    {0xbd550000}, {0xbd552000}, {0xbd554000}, {0xbd556000}, 
+    {0xbd558000}, {0xbd55a000}, {0xbd55c000}, {0xbd55e000}, 
+    {0xbd560000}, {0xbd562000}, {0xbd564000}, {0xbd566000}, 
+    {0xbd568000}, {0xbd56a000}, {0xbd56c000}, {0xbd56e000}, 
+    {0xbd570000}, {0xbd572000}, {0xbd574000}, {0xbd576000}, 
+    {0xbd578000}, {0xbd57a000}, {0xbd57c000}, {0xbd57e000}, 
+    {0xbd580000}, {0xbd582000}, {0xbd584000}, {0xbd586000}, 
+    {0xbd588000}, {0xbd58a000}, {0xbd58c000}, {0xbd58e000}, 
+    {0xbd590000}, {0xbd592000}, {0xbd594000}, {0xbd596000}, 
+    {0xbd598000}, {0xbd59a000}, {0xbd59c000}, {0xbd59e000}, 
+    {0xbd5a0000}, {0xbd5a2000}, {0xbd5a4000}, {0xbd5a6000}, 
+    {0xbd5a8000}, {0xbd5aa000}, {0xbd5ac000}, {0xbd5ae000}, 
+    {0xbd5b0000}, {0xbd5b2000}, {0xbd5b4000}, {0xbd5b6000}, 
+    {0xbd5b8000}, {0xbd5ba000}, {0xbd5bc000}, {0xbd5be000}, 
+    {0xbd5c0000}, {0xbd5c2000}, {0xbd5c4000}, {0xbd5c6000}, 
+    {0xbd5c8000}, {0xbd5ca000}, {0xbd5cc000}, {0xbd5ce000}, 
+    {0xbd5d0000}, {0xbd5d2000}, {0xbd5d4000}, {0xbd5d6000}, 
+    {0xbd5d8000}, {0xbd5da000}, {0xbd5dc000}, {0xbd5de000}, 
+    {0xbd5e0000}, {0xbd5e2000}, {0xbd5e4000}, {0xbd5e6000}, 
+    {0xbd5e8000}, {0xbd5ea000}, {0xbd5ec000}, {0xbd5ee000}, 
+    {0xbd5f0000}, {0xbd5f2000}, {0xbd5f4000}, {0xbd5f6000}, 
+    {0xbd5f8000}, {0xbd5fa000}, {0xbd5fc000}, {0xbd5fe000}, 
+    {0xbd600000}, {0xbd602000}, {0xbd604000}, {0xbd606000}, 
+    {0xbd608000}, {0xbd60a000}, {0xbd60c000}, {0xbd60e000}, 
+    {0xbd610000}, {0xbd612000}, {0xbd614000}, {0xbd616000}, 
+    {0xbd618000}, {0xbd61a000}, {0xbd61c000}, {0xbd61e000}, 
+    {0xbd620000}, {0xbd622000}, {0xbd624000}, {0xbd626000}, 
+    {0xbd628000}, {0xbd62a000}, {0xbd62c000}, {0xbd62e000}, 
+    {0xbd630000}, {0xbd632000}, {0xbd634000}, {0xbd636000}, 
+    {0xbd638000}, {0xbd63a000}, {0xbd63c000}, {0xbd63e000}, 
+    {0xbd640000}, {0xbd642000}, {0xbd644000}, {0xbd646000}, 
+    {0xbd648000}, {0xbd64a000}, {0xbd64c000}, {0xbd64e000}, 
+    {0xbd650000}, {0xbd652000}, {0xbd654000}, {0xbd656000}, 
+    {0xbd658000}, {0xbd65a000}, {0xbd65c000}, {0xbd65e000}, 
+    {0xbd660000}, {0xbd662000}, {0xbd664000}, {0xbd666000}, 
+    {0xbd668000}, {0xbd66a000}, {0xbd66c000}, {0xbd66e000}, 
+    {0xbd670000}, {0xbd672000}, {0xbd674000}, {0xbd676000}, 
+    {0xbd678000}, {0xbd67a000}, {0xbd67c000}, {0xbd67e000}, 
+    {0xbd680000}, {0xbd682000}, {0xbd684000}, {0xbd686000}, 
+    {0xbd688000}, {0xbd68a000}, {0xbd68c000}, {0xbd68e000}, 
+    {0xbd690000}, {0xbd692000}, {0xbd694000}, {0xbd696000}, 
+    {0xbd698000}, {0xbd69a000}, {0xbd69c000}, {0xbd69e000}, 
+    {0xbd6a0000}, {0xbd6a2000}, {0xbd6a4000}, {0xbd6a6000}, 
+    {0xbd6a8000}, {0xbd6aa000}, {0xbd6ac000}, {0xbd6ae000}, 
+    {0xbd6b0000}, {0xbd6b2000}, {0xbd6b4000}, {0xbd6b6000}, 
+    {0xbd6b8000}, {0xbd6ba000}, {0xbd6bc000}, {0xbd6be000}, 
+    {0xbd6c0000}, {0xbd6c2000}, {0xbd6c4000}, {0xbd6c6000}, 
+    {0xbd6c8000}, {0xbd6ca000}, {0xbd6cc000}, {0xbd6ce000}, 
+    {0xbd6d0000}, {0xbd6d2000}, {0xbd6d4000}, {0xbd6d6000}, 
+    {0xbd6d8000}, {0xbd6da000}, {0xbd6dc000}, {0xbd6de000}, 
+    {0xbd6e0000}, {0xbd6e2000}, {0xbd6e4000}, {0xbd6e6000}, 
+    {0xbd6e8000}, {0xbd6ea000}, {0xbd6ec000}, {0xbd6ee000}, 
+    {0xbd6f0000}, {0xbd6f2000}, {0xbd6f4000}, {0xbd6f6000}, 
+    {0xbd6f8000}, {0xbd6fa000}, {0xbd6fc000}, {0xbd6fe000}, 
+    {0xbd700000}, {0xbd702000}, {0xbd704000}, {0xbd706000}, 
+    {0xbd708000}, {0xbd70a000}, {0xbd70c000}, {0xbd70e000}, 
+    {0xbd710000}, {0xbd712000}, {0xbd714000}, {0xbd716000}, 
+    {0xbd718000}, {0xbd71a000}, {0xbd71c000}, {0xbd71e000}, 
+    {0xbd720000}, {0xbd722000}, {0xbd724000}, {0xbd726000}, 
+    {0xbd728000}, {0xbd72a000}, {0xbd72c000}, {0xbd72e000}, 
+    {0xbd730000}, {0xbd732000}, {0xbd734000}, {0xbd736000}, 
+    {0xbd738000}, {0xbd73a000}, {0xbd73c000}, {0xbd73e000}, 
+    {0xbd740000}, {0xbd742000}, {0xbd744000}, {0xbd746000}, 
+    {0xbd748000}, {0xbd74a000}, {0xbd74c000}, {0xbd74e000}, 
+    {0xbd750000}, {0xbd752000}, {0xbd754000}, {0xbd756000}, 
+    {0xbd758000}, {0xbd75a000}, {0xbd75c000}, {0xbd75e000}, 
+    {0xbd760000}, {0xbd762000}, {0xbd764000}, {0xbd766000}, 
+    {0xbd768000}, {0xbd76a000}, {0xbd76c000}, {0xbd76e000}, 
+    {0xbd770000}, {0xbd772000}, {0xbd774000}, {0xbd776000}, 
+    {0xbd778000}, {0xbd77a000}, {0xbd77c000}, {0xbd77e000}, 
+    {0xbd780000}, {0xbd782000}, {0xbd784000}, {0xbd786000}, 
+    {0xbd788000}, {0xbd78a000}, {0xbd78c000}, {0xbd78e000}, 
+    {0xbd790000}, {0xbd792000}, {0xbd794000}, {0xbd796000}, 
+    {0xbd798000}, {0xbd79a000}, {0xbd79c000}, {0xbd79e000}, 
+    {0xbd7a0000}, {0xbd7a2000}, {0xbd7a4000}, {0xbd7a6000}, 
+    {0xbd7a8000}, {0xbd7aa000}, {0xbd7ac000}, {0xbd7ae000}, 
+    {0xbd7b0000}, {0xbd7b2000}, {0xbd7b4000}, {0xbd7b6000}, 
+    {0xbd7b8000}, {0xbd7ba000}, {0xbd7bc000}, {0xbd7be000}, 
+    {0xbd7c0000}, {0xbd7c2000}, {0xbd7c4000}, {0xbd7c6000}, 
+    {0xbd7c8000}, {0xbd7ca000}, {0xbd7cc000}, {0xbd7ce000}, 
+    {0xbd7d0000}, {0xbd7d2000}, {0xbd7d4000}, {0xbd7d6000}, 
+    {0xbd7d8000}, {0xbd7da000}, {0xbd7dc000}, {0xbd7de000}, 
+    {0xbd7e0000}, {0xbd7e2000}, {0xbd7e4000}, {0xbd7e6000}, 
+    {0xbd7e8000}, {0xbd7ea000}, {0xbd7ec000}, {0xbd7ee000}, 
+    {0xbd7f0000}, {0xbd7f2000}, {0xbd7f4000}, {0xbd7f6000}, 
+    {0xbd7f8000}, {0xbd7fa000}, {0xbd7fc000}, {0xbd7fe000}, 
+    {0xbd800000}, {0xbd802000}, {0xbd804000}, {0xbd806000}, 
+    {0xbd808000}, {0xbd80a000}, {0xbd80c000}, {0xbd80e000}, 
+    {0xbd810000}, {0xbd812000}, {0xbd814000}, {0xbd816000}, 
+    {0xbd818000}, {0xbd81a000}, {0xbd81c000}, {0xbd81e000}, 
+    {0xbd820000}, {0xbd822000}, {0xbd824000}, {0xbd826000}, 
+    {0xbd828000}, {0xbd82a000}, {0xbd82c000}, {0xbd82e000}, 
+    {0xbd830000}, {0xbd832000}, {0xbd834000}, {0xbd836000}, 
+    {0xbd838000}, {0xbd83a000}, {0xbd83c000}, {0xbd83e000}, 
+    {0xbd840000}, {0xbd842000}, {0xbd844000}, {0xbd846000}, 
+    {0xbd848000}, {0xbd84a000}, {0xbd84c000}, {0xbd84e000}, 
+    {0xbd850000}, {0xbd852000}, {0xbd854000}, {0xbd856000}, 
+    {0xbd858000}, {0xbd85a000}, {0xbd85c000}, {0xbd85e000}, 
+    {0xbd860000}, {0xbd862000}, {0xbd864000}, {0xbd866000}, 
+    {0xbd868000}, {0xbd86a000}, {0xbd86c000}, {0xbd86e000}, 
+    {0xbd870000}, {0xbd872000}, {0xbd874000}, {0xbd876000}, 
+    {0xbd878000}, {0xbd87a000}, {0xbd87c000}, {0xbd87e000}, 
+    {0xbd880000}, {0xbd882000}, {0xbd884000}, {0xbd886000}, 
+    {0xbd888000}, {0xbd88a000}, {0xbd88c000}, {0xbd88e000}, 
+    {0xbd890000}, {0xbd892000}, {0xbd894000}, {0xbd896000}, 
+    {0xbd898000}, {0xbd89a000}, {0xbd89c000}, {0xbd89e000}, 
+    {0xbd8a0000}, {0xbd8a2000}, {0xbd8a4000}, {0xbd8a6000}, 
+    {0xbd8a8000}, {0xbd8aa000}, {0xbd8ac000}, {0xbd8ae000}, 
+    {0xbd8b0000}, {0xbd8b2000}, {0xbd8b4000}, {0xbd8b6000}, 
+    {0xbd8b8000}, {0xbd8ba000}, {0xbd8bc000}, {0xbd8be000}, 
+    {0xbd8c0000}, {0xbd8c2000}, {0xbd8c4000}, {0xbd8c6000}, 
+    {0xbd8c8000}, {0xbd8ca000}, {0xbd8cc000}, {0xbd8ce000}, 
+    {0xbd8d0000}, {0xbd8d2000}, {0xbd8d4000}, {0xbd8d6000}, 
+    {0xbd8d8000}, {0xbd8da000}, {0xbd8dc000}, {0xbd8de000}, 
+    {0xbd8e0000}, {0xbd8e2000}, {0xbd8e4000}, {0xbd8e6000}, 
+    {0xbd8e8000}, {0xbd8ea000}, {0xbd8ec000}, {0xbd8ee000}, 
+    {0xbd8f0000}, {0xbd8f2000}, {0xbd8f4000}, {0xbd8f6000}, 
+    {0xbd8f8000}, {0xbd8fa000}, {0xbd8fc000}, {0xbd8fe000}, 
+    {0xbd900000}, {0xbd902000}, {0xbd904000}, {0xbd906000}, 
+    {0xbd908000}, {0xbd90a000}, {0xbd90c000}, {0xbd90e000}, 
+    {0xbd910000}, {0xbd912000}, {0xbd914000}, {0xbd916000}, 
+    {0xbd918000}, {0xbd91a000}, {0xbd91c000}, {0xbd91e000}, 
+    {0xbd920000}, {0xbd922000}, {0xbd924000}, {0xbd926000}, 
+    {0xbd928000}, {0xbd92a000}, {0xbd92c000}, {0xbd92e000}, 
+    {0xbd930000}, {0xbd932000}, {0xbd934000}, {0xbd936000}, 
+    {0xbd938000}, {0xbd93a000}, {0xbd93c000}, {0xbd93e000}, 
+    {0xbd940000}, {0xbd942000}, {0xbd944000}, {0xbd946000}, 
+    {0xbd948000}, {0xbd94a000}, {0xbd94c000}, {0xbd94e000}, 
+    {0xbd950000}, {0xbd952000}, {0xbd954000}, {0xbd956000}, 
+    {0xbd958000}, {0xbd95a000}, {0xbd95c000}, {0xbd95e000}, 
+    {0xbd960000}, {0xbd962000}, {0xbd964000}, {0xbd966000}, 
+    {0xbd968000}, {0xbd96a000}, {0xbd96c000}, {0xbd96e000}, 
+    {0xbd970000}, {0xbd972000}, {0xbd974000}, {0xbd976000}, 
+    {0xbd978000}, {0xbd97a000}, {0xbd97c000}, {0xbd97e000}, 
+    {0xbd980000}, {0xbd982000}, {0xbd984000}, {0xbd986000}, 
+    {0xbd988000}, {0xbd98a000}, {0xbd98c000}, {0xbd98e000}, 
+    {0xbd990000}, {0xbd992000}, {0xbd994000}, {0xbd996000}, 
+    {0xbd998000}, {0xbd99a000}, {0xbd99c000}, {0xbd99e000}, 
+    {0xbd9a0000}, {0xbd9a2000}, {0xbd9a4000}, {0xbd9a6000}, 
+    {0xbd9a8000}, {0xbd9aa000}, {0xbd9ac000}, {0xbd9ae000}, 
+    {0xbd9b0000}, {0xbd9b2000}, {0xbd9b4000}, {0xbd9b6000}, 
+    {0xbd9b8000}, {0xbd9ba000}, {0xbd9bc000}, {0xbd9be000}, 
+    {0xbd9c0000}, {0xbd9c2000}, {0xbd9c4000}, {0xbd9c6000}, 
+    {0xbd9c8000}, {0xbd9ca000}, {0xbd9cc000}, {0xbd9ce000}, 
+    {0xbd9d0000}, {0xbd9d2000}, {0xbd9d4000}, {0xbd9d6000}, 
+    {0xbd9d8000}, {0xbd9da000}, {0xbd9dc000}, {0xbd9de000}, 
+    {0xbd9e0000}, {0xbd9e2000}, {0xbd9e4000}, {0xbd9e6000}, 
+    {0xbd9e8000}, {0xbd9ea000}, {0xbd9ec000}, {0xbd9ee000}, 
+    {0xbd9f0000}, {0xbd9f2000}, {0xbd9f4000}, {0xbd9f6000}, 
+    {0xbd9f8000}, {0xbd9fa000}, {0xbd9fc000}, {0xbd9fe000}, 
+    {0xbda00000}, {0xbda02000}, {0xbda04000}, {0xbda06000}, 
+    {0xbda08000}, {0xbda0a000}, {0xbda0c000}, {0xbda0e000}, 
+    {0xbda10000}, {0xbda12000}, {0xbda14000}, {0xbda16000}, 
+    {0xbda18000}, {0xbda1a000}, {0xbda1c000}, {0xbda1e000}, 
+    {0xbda20000}, {0xbda22000}, {0xbda24000}, {0xbda26000}, 
+    {0xbda28000}, {0xbda2a000}, {0xbda2c000}, {0xbda2e000}, 
+    {0xbda30000}, {0xbda32000}, {0xbda34000}, {0xbda36000}, 
+    {0xbda38000}, {0xbda3a000}, {0xbda3c000}, {0xbda3e000}, 
+    {0xbda40000}, {0xbda42000}, {0xbda44000}, {0xbda46000}, 
+    {0xbda48000}, {0xbda4a000}, {0xbda4c000}, {0xbda4e000}, 
+    {0xbda50000}, {0xbda52000}, {0xbda54000}, {0xbda56000}, 
+    {0xbda58000}, {0xbda5a000}, {0xbda5c000}, {0xbda5e000}, 
+    {0xbda60000}, {0xbda62000}, {0xbda64000}, {0xbda66000}, 
+    {0xbda68000}, {0xbda6a000}, {0xbda6c000}, {0xbda6e000}, 
+    {0xbda70000}, {0xbda72000}, {0xbda74000}, {0xbda76000}, 
+    {0xbda78000}, {0xbda7a000}, {0xbda7c000}, {0xbda7e000}, 
+    {0xbda80000}, {0xbda82000}, {0xbda84000}, {0xbda86000}, 
+    {0xbda88000}, {0xbda8a000}, {0xbda8c000}, {0xbda8e000}, 
+    {0xbda90000}, {0xbda92000}, {0xbda94000}, {0xbda96000}, 
+    {0xbda98000}, {0xbda9a000}, {0xbda9c000}, {0xbda9e000}, 
+    {0xbdaa0000}, {0xbdaa2000}, {0xbdaa4000}, {0xbdaa6000}, 
+    {0xbdaa8000}, {0xbdaaa000}, {0xbdaac000}, {0xbdaae000}, 
+    {0xbdab0000}, {0xbdab2000}, {0xbdab4000}, {0xbdab6000}, 
+    {0xbdab8000}, {0xbdaba000}, {0xbdabc000}, {0xbdabe000}, 
+    {0xbdac0000}, {0xbdac2000}, {0xbdac4000}, {0xbdac6000}, 
+    {0xbdac8000}, {0xbdaca000}, {0xbdacc000}, {0xbdace000}, 
+    {0xbdad0000}, {0xbdad2000}, {0xbdad4000}, {0xbdad6000}, 
+    {0xbdad8000}, {0xbdada000}, {0xbdadc000}, {0xbdade000}, 
+    {0xbdae0000}, {0xbdae2000}, {0xbdae4000}, {0xbdae6000}, 
+    {0xbdae8000}, {0xbdaea000}, {0xbdaec000}, {0xbdaee000}, 
+    {0xbdaf0000}, {0xbdaf2000}, {0xbdaf4000}, {0xbdaf6000}, 
+    {0xbdaf8000}, {0xbdafa000}, {0xbdafc000}, {0xbdafe000}, 
+    {0xbdb00000}, {0xbdb02000}, {0xbdb04000}, {0xbdb06000}, 
+    {0xbdb08000}, {0xbdb0a000}, {0xbdb0c000}, {0xbdb0e000}, 
+    {0xbdb10000}, {0xbdb12000}, {0xbdb14000}, {0xbdb16000}, 
+    {0xbdb18000}, {0xbdb1a000}, {0xbdb1c000}, {0xbdb1e000}, 
+    {0xbdb20000}, {0xbdb22000}, {0xbdb24000}, {0xbdb26000}, 
+    {0xbdb28000}, {0xbdb2a000}, {0xbdb2c000}, {0xbdb2e000}, 
+    {0xbdb30000}, {0xbdb32000}, {0xbdb34000}, {0xbdb36000}, 
+    {0xbdb38000}, {0xbdb3a000}, {0xbdb3c000}, {0xbdb3e000}, 
+    {0xbdb40000}, {0xbdb42000}, {0xbdb44000}, {0xbdb46000}, 
+    {0xbdb48000}, {0xbdb4a000}, {0xbdb4c000}, {0xbdb4e000}, 
+    {0xbdb50000}, {0xbdb52000}, {0xbdb54000}, {0xbdb56000}, 
+    {0xbdb58000}, {0xbdb5a000}, {0xbdb5c000}, {0xbdb5e000}, 
+    {0xbdb60000}, {0xbdb62000}, {0xbdb64000}, {0xbdb66000}, 
+    {0xbdb68000}, {0xbdb6a000}, {0xbdb6c000}, {0xbdb6e000}, 
+    {0xbdb70000}, {0xbdb72000}, {0xbdb74000}, {0xbdb76000}, 
+    {0xbdb78000}, {0xbdb7a000}, {0xbdb7c000}, {0xbdb7e000}, 
+    {0xbdb80000}, {0xbdb82000}, {0xbdb84000}, {0xbdb86000}, 
+    {0xbdb88000}, {0xbdb8a000}, {0xbdb8c000}, {0xbdb8e000}, 
+    {0xbdb90000}, {0xbdb92000}, {0xbdb94000}, {0xbdb96000}, 
+    {0xbdb98000}, {0xbdb9a000}, {0xbdb9c000}, {0xbdb9e000}, 
+    {0xbdba0000}, {0xbdba2000}, {0xbdba4000}, {0xbdba6000}, 
+    {0xbdba8000}, {0xbdbaa000}, {0xbdbac000}, {0xbdbae000}, 
+    {0xbdbb0000}, {0xbdbb2000}, {0xbdbb4000}, {0xbdbb6000}, 
+    {0xbdbb8000}, {0xbdbba000}, {0xbdbbc000}, {0xbdbbe000}, 
+    {0xbdbc0000}, {0xbdbc2000}, {0xbdbc4000}, {0xbdbc6000}, 
+    {0xbdbc8000}, {0xbdbca000}, {0xbdbcc000}, {0xbdbce000}, 
+    {0xbdbd0000}, {0xbdbd2000}, {0xbdbd4000}, {0xbdbd6000}, 
+    {0xbdbd8000}, {0xbdbda000}, {0xbdbdc000}, {0xbdbde000}, 
+    {0xbdbe0000}, {0xbdbe2000}, {0xbdbe4000}, {0xbdbe6000}, 
+    {0xbdbe8000}, {0xbdbea000}, {0xbdbec000}, {0xbdbee000}, 
+    {0xbdbf0000}, {0xbdbf2000}, {0xbdbf4000}, {0xbdbf6000}, 
+    {0xbdbf8000}, {0xbdbfa000}, {0xbdbfc000}, {0xbdbfe000}, 
+    {0xbdc00000}, {0xbdc02000}, {0xbdc04000}, {0xbdc06000}, 
+    {0xbdc08000}, {0xbdc0a000}, {0xbdc0c000}, {0xbdc0e000}, 
+    {0xbdc10000}, {0xbdc12000}, {0xbdc14000}, {0xbdc16000}, 
+    {0xbdc18000}, {0xbdc1a000}, {0xbdc1c000}, {0xbdc1e000}, 
+    {0xbdc20000}, {0xbdc22000}, {0xbdc24000}, {0xbdc26000}, 
+    {0xbdc28000}, {0xbdc2a000}, {0xbdc2c000}, {0xbdc2e000}, 
+    {0xbdc30000}, {0xbdc32000}, {0xbdc34000}, {0xbdc36000}, 
+    {0xbdc38000}, {0xbdc3a000}, {0xbdc3c000}, {0xbdc3e000}, 
+    {0xbdc40000}, {0xbdc42000}, {0xbdc44000}, {0xbdc46000}, 
+    {0xbdc48000}, {0xbdc4a000}, {0xbdc4c000}, {0xbdc4e000}, 
+    {0xbdc50000}, {0xbdc52000}, {0xbdc54000}, {0xbdc56000}, 
+    {0xbdc58000}, {0xbdc5a000}, {0xbdc5c000}, {0xbdc5e000}, 
+    {0xbdc60000}, {0xbdc62000}, {0xbdc64000}, {0xbdc66000}, 
+    {0xbdc68000}, {0xbdc6a000}, {0xbdc6c000}, {0xbdc6e000}, 
+    {0xbdc70000}, {0xbdc72000}, {0xbdc74000}, {0xbdc76000}, 
+    {0xbdc78000}, {0xbdc7a000}, {0xbdc7c000}, {0xbdc7e000}, 
+    {0xbdc80000}, {0xbdc82000}, {0xbdc84000}, {0xbdc86000}, 
+    {0xbdc88000}, {0xbdc8a000}, {0xbdc8c000}, {0xbdc8e000}, 
+    {0xbdc90000}, {0xbdc92000}, {0xbdc94000}, {0xbdc96000}, 
+    {0xbdc98000}, {0xbdc9a000}, {0xbdc9c000}, {0xbdc9e000}, 
+    {0xbdca0000}, {0xbdca2000}, {0xbdca4000}, {0xbdca6000}, 
+    {0xbdca8000}, {0xbdcaa000}, {0xbdcac000}, {0xbdcae000}, 
+    {0xbdcb0000}, {0xbdcb2000}, {0xbdcb4000}, {0xbdcb6000}, 
+    {0xbdcb8000}, {0xbdcba000}, {0xbdcbc000}, {0xbdcbe000}, 
+    {0xbdcc0000}, {0xbdcc2000}, {0xbdcc4000}, {0xbdcc6000}, 
+    {0xbdcc8000}, {0xbdcca000}, {0xbdccc000}, {0xbdcce000}, 
+    {0xbdcd0000}, {0xbdcd2000}, {0xbdcd4000}, {0xbdcd6000}, 
+    {0xbdcd8000}, {0xbdcda000}, {0xbdcdc000}, {0xbdcde000}, 
+    {0xbdce0000}, {0xbdce2000}, {0xbdce4000}, {0xbdce6000}, 
+    {0xbdce8000}, {0xbdcea000}, {0xbdcec000}, {0xbdcee000}, 
+    {0xbdcf0000}, {0xbdcf2000}, {0xbdcf4000}, {0xbdcf6000}, 
+    {0xbdcf8000}, {0xbdcfa000}, {0xbdcfc000}, {0xbdcfe000}, 
+    {0xbdd00000}, {0xbdd02000}, {0xbdd04000}, {0xbdd06000}, 
+    {0xbdd08000}, {0xbdd0a000}, {0xbdd0c000}, {0xbdd0e000}, 
+    {0xbdd10000}, {0xbdd12000}, {0xbdd14000}, {0xbdd16000}, 
+    {0xbdd18000}, {0xbdd1a000}, {0xbdd1c000}, {0xbdd1e000}, 
+    {0xbdd20000}, {0xbdd22000}, {0xbdd24000}, {0xbdd26000}, 
+    {0xbdd28000}, {0xbdd2a000}, {0xbdd2c000}, {0xbdd2e000}, 
+    {0xbdd30000}, {0xbdd32000}, {0xbdd34000}, {0xbdd36000}, 
+    {0xbdd38000}, {0xbdd3a000}, {0xbdd3c000}, {0xbdd3e000}, 
+    {0xbdd40000}, {0xbdd42000}, {0xbdd44000}, {0xbdd46000}, 
+    {0xbdd48000}, {0xbdd4a000}, {0xbdd4c000}, {0xbdd4e000}, 
+    {0xbdd50000}, {0xbdd52000}, {0xbdd54000}, {0xbdd56000}, 
+    {0xbdd58000}, {0xbdd5a000}, {0xbdd5c000}, {0xbdd5e000}, 
+    {0xbdd60000}, {0xbdd62000}, {0xbdd64000}, {0xbdd66000}, 
+    {0xbdd68000}, {0xbdd6a000}, {0xbdd6c000}, {0xbdd6e000}, 
+    {0xbdd70000}, {0xbdd72000}, {0xbdd74000}, {0xbdd76000}, 
+    {0xbdd78000}, {0xbdd7a000}, {0xbdd7c000}, {0xbdd7e000}, 
+    {0xbdd80000}, {0xbdd82000}, {0xbdd84000}, {0xbdd86000}, 
+    {0xbdd88000}, {0xbdd8a000}, {0xbdd8c000}, {0xbdd8e000}, 
+    {0xbdd90000}, {0xbdd92000}, {0xbdd94000}, {0xbdd96000}, 
+    {0xbdd98000}, {0xbdd9a000}, {0xbdd9c000}, {0xbdd9e000}, 
+    {0xbdda0000}, {0xbdda2000}, {0xbdda4000}, {0xbdda6000}, 
+    {0xbdda8000}, {0xbddaa000}, {0xbddac000}, {0xbddae000}, 
+    {0xbddb0000}, {0xbddb2000}, {0xbddb4000}, {0xbddb6000}, 
+    {0xbddb8000}, {0xbddba000}, {0xbddbc000}, {0xbddbe000}, 
+    {0xbddc0000}, {0xbddc2000}, {0xbddc4000}, {0xbddc6000}, 
+    {0xbddc8000}, {0xbddca000}, {0xbddcc000}, {0xbddce000}, 
+    {0xbddd0000}, {0xbddd2000}, {0xbddd4000}, {0xbddd6000}, 
+    {0xbddd8000}, {0xbddda000}, {0xbdddc000}, {0xbddde000}, 
+    {0xbdde0000}, {0xbdde2000}, {0xbdde4000}, {0xbdde6000}, 
+    {0xbdde8000}, {0xbddea000}, {0xbddec000}, {0xbddee000}, 
+    {0xbddf0000}, {0xbddf2000}, {0xbddf4000}, {0xbddf6000}, 
+    {0xbddf8000}, {0xbddfa000}, {0xbddfc000}, {0xbddfe000}, 
+    {0xbde00000}, {0xbde02000}, {0xbde04000}, {0xbde06000}, 
+    {0xbde08000}, {0xbde0a000}, {0xbde0c000}, {0xbde0e000}, 
+    {0xbde10000}, {0xbde12000}, {0xbde14000}, {0xbde16000}, 
+    {0xbde18000}, {0xbde1a000}, {0xbde1c000}, {0xbde1e000}, 
+    {0xbde20000}, {0xbde22000}, {0xbde24000}, {0xbde26000}, 
+    {0xbde28000}, {0xbde2a000}, {0xbde2c000}, {0xbde2e000}, 
+    {0xbde30000}, {0xbde32000}, {0xbde34000}, {0xbde36000}, 
+    {0xbde38000}, {0xbde3a000}, {0xbde3c000}, {0xbde3e000}, 
+    {0xbde40000}, {0xbde42000}, {0xbde44000}, {0xbde46000}, 
+    {0xbde48000}, {0xbde4a000}, {0xbde4c000}, {0xbde4e000}, 
+    {0xbde50000}, {0xbde52000}, {0xbde54000}, {0xbde56000}, 
+    {0xbde58000}, {0xbde5a000}, {0xbde5c000}, {0xbde5e000}, 
+    {0xbde60000}, {0xbde62000}, {0xbde64000}, {0xbde66000}, 
+    {0xbde68000}, {0xbde6a000}, {0xbde6c000}, {0xbde6e000}, 
+    {0xbde70000}, {0xbde72000}, {0xbde74000}, {0xbde76000}, 
+    {0xbde78000}, {0xbde7a000}, {0xbde7c000}, {0xbde7e000}, 
+    {0xbde80000}, {0xbde82000}, {0xbde84000}, {0xbde86000}, 
+    {0xbde88000}, {0xbde8a000}, {0xbde8c000}, {0xbde8e000}, 
+    {0xbde90000}, {0xbde92000}, {0xbde94000}, {0xbde96000}, 
+    {0xbde98000}, {0xbde9a000}, {0xbde9c000}, {0xbde9e000}, 
+    {0xbdea0000}, {0xbdea2000}, {0xbdea4000}, {0xbdea6000}, 
+    {0xbdea8000}, {0xbdeaa000}, {0xbdeac000}, {0xbdeae000}, 
+    {0xbdeb0000}, {0xbdeb2000}, {0xbdeb4000}, {0xbdeb6000}, 
+    {0xbdeb8000}, {0xbdeba000}, {0xbdebc000}, {0xbdebe000}, 
+    {0xbdec0000}, {0xbdec2000}, {0xbdec4000}, {0xbdec6000}, 
+    {0xbdec8000}, {0xbdeca000}, {0xbdecc000}, {0xbdece000}, 
+    {0xbded0000}, {0xbded2000}, {0xbded4000}, {0xbded6000}, 
+    {0xbded8000}, {0xbdeda000}, {0xbdedc000}, {0xbdede000}, 
+    {0xbdee0000}, {0xbdee2000}, {0xbdee4000}, {0xbdee6000}, 
+    {0xbdee8000}, {0xbdeea000}, {0xbdeec000}, {0xbdeee000}, 
+    {0xbdef0000}, {0xbdef2000}, {0xbdef4000}, {0xbdef6000}, 
+    {0xbdef8000}, {0xbdefa000}, {0xbdefc000}, {0xbdefe000}, 
+    {0xbdf00000}, {0xbdf02000}, {0xbdf04000}, {0xbdf06000}, 
+    {0xbdf08000}, {0xbdf0a000}, {0xbdf0c000}, {0xbdf0e000}, 
+    {0xbdf10000}, {0xbdf12000}, {0xbdf14000}, {0xbdf16000}, 
+    {0xbdf18000}, {0xbdf1a000}, {0xbdf1c000}, {0xbdf1e000}, 
+    {0xbdf20000}, {0xbdf22000}, {0xbdf24000}, {0xbdf26000}, 
+    {0xbdf28000}, {0xbdf2a000}, {0xbdf2c000}, {0xbdf2e000}, 
+    {0xbdf30000}, {0xbdf32000}, {0xbdf34000}, {0xbdf36000}, 
+    {0xbdf38000}, {0xbdf3a000}, {0xbdf3c000}, {0xbdf3e000}, 
+    {0xbdf40000}, {0xbdf42000}, {0xbdf44000}, {0xbdf46000}, 
+    {0xbdf48000}, {0xbdf4a000}, {0xbdf4c000}, {0xbdf4e000}, 
+    {0xbdf50000}, {0xbdf52000}, {0xbdf54000}, {0xbdf56000}, 
+    {0xbdf58000}, {0xbdf5a000}, {0xbdf5c000}, {0xbdf5e000}, 
+    {0xbdf60000}, {0xbdf62000}, {0xbdf64000}, {0xbdf66000}, 
+    {0xbdf68000}, {0xbdf6a000}, {0xbdf6c000}, {0xbdf6e000}, 
+    {0xbdf70000}, {0xbdf72000}, {0xbdf74000}, {0xbdf76000}, 
+    {0xbdf78000}, {0xbdf7a000}, {0xbdf7c000}, {0xbdf7e000}, 
+    {0xbdf80000}, {0xbdf82000}, {0xbdf84000}, {0xbdf86000}, 
+    {0xbdf88000}, {0xbdf8a000}, {0xbdf8c000}, {0xbdf8e000}, 
+    {0xbdf90000}, {0xbdf92000}, {0xbdf94000}, {0xbdf96000}, 
+    {0xbdf98000}, {0xbdf9a000}, {0xbdf9c000}, {0xbdf9e000}, 
+    {0xbdfa0000}, {0xbdfa2000}, {0xbdfa4000}, {0xbdfa6000}, 
+    {0xbdfa8000}, {0xbdfaa000}, {0xbdfac000}, {0xbdfae000}, 
+    {0xbdfb0000}, {0xbdfb2000}, {0xbdfb4000}, {0xbdfb6000}, 
+    {0xbdfb8000}, {0xbdfba000}, {0xbdfbc000}, {0xbdfbe000}, 
+    {0xbdfc0000}, {0xbdfc2000}, {0xbdfc4000}, {0xbdfc6000}, 
+    {0xbdfc8000}, {0xbdfca000}, {0xbdfcc000}, {0xbdfce000}, 
+    {0xbdfd0000}, {0xbdfd2000}, {0xbdfd4000}, {0xbdfd6000}, 
+    {0xbdfd8000}, {0xbdfda000}, {0xbdfdc000}, {0xbdfde000}, 
+    {0xbdfe0000}, {0xbdfe2000}, {0xbdfe4000}, {0xbdfe6000}, 
+    {0xbdfe8000}, {0xbdfea000}, {0xbdfec000}, {0xbdfee000}, 
+    {0xbdff0000}, {0xbdff2000}, {0xbdff4000}, {0xbdff6000}, 
+    {0xbdff8000}, {0xbdffa000}, {0xbdffc000}, {0xbdffe000}, 
+    {0xbe000000}, {0xbe002000}, {0xbe004000}, {0xbe006000}, 
+    {0xbe008000}, {0xbe00a000}, {0xbe00c000}, {0xbe00e000}, 
+    {0xbe010000}, {0xbe012000}, {0xbe014000}, {0xbe016000}, 
+    {0xbe018000}, {0xbe01a000}, {0xbe01c000}, {0xbe01e000}, 
+    {0xbe020000}, {0xbe022000}, {0xbe024000}, {0xbe026000}, 
+    {0xbe028000}, {0xbe02a000}, {0xbe02c000}, {0xbe02e000}, 
+    {0xbe030000}, {0xbe032000}, {0xbe034000}, {0xbe036000}, 
+    {0xbe038000}, {0xbe03a000}, {0xbe03c000}, {0xbe03e000}, 
+    {0xbe040000}, {0xbe042000}, {0xbe044000}, {0xbe046000}, 
+    {0xbe048000}, {0xbe04a000}, {0xbe04c000}, {0xbe04e000}, 
+    {0xbe050000}, {0xbe052000}, {0xbe054000}, {0xbe056000}, 
+    {0xbe058000}, {0xbe05a000}, {0xbe05c000}, {0xbe05e000}, 
+    {0xbe060000}, {0xbe062000}, {0xbe064000}, {0xbe066000}, 
+    {0xbe068000}, {0xbe06a000}, {0xbe06c000}, {0xbe06e000}, 
+    {0xbe070000}, {0xbe072000}, {0xbe074000}, {0xbe076000}, 
+    {0xbe078000}, {0xbe07a000}, {0xbe07c000}, {0xbe07e000}, 
+    {0xbe080000}, {0xbe082000}, {0xbe084000}, {0xbe086000}, 
+    {0xbe088000}, {0xbe08a000}, {0xbe08c000}, {0xbe08e000}, 
+    {0xbe090000}, {0xbe092000}, {0xbe094000}, {0xbe096000}, 
+    {0xbe098000}, {0xbe09a000}, {0xbe09c000}, {0xbe09e000}, 
+    {0xbe0a0000}, {0xbe0a2000}, {0xbe0a4000}, {0xbe0a6000}, 
+    {0xbe0a8000}, {0xbe0aa000}, {0xbe0ac000}, {0xbe0ae000}, 
+    {0xbe0b0000}, {0xbe0b2000}, {0xbe0b4000}, {0xbe0b6000}, 
+    {0xbe0b8000}, {0xbe0ba000}, {0xbe0bc000}, {0xbe0be000}, 
+    {0xbe0c0000}, {0xbe0c2000}, {0xbe0c4000}, {0xbe0c6000}, 
+    {0xbe0c8000}, {0xbe0ca000}, {0xbe0cc000}, {0xbe0ce000}, 
+    {0xbe0d0000}, {0xbe0d2000}, {0xbe0d4000}, {0xbe0d6000}, 
+    {0xbe0d8000}, {0xbe0da000}, {0xbe0dc000}, {0xbe0de000}, 
+    {0xbe0e0000}, {0xbe0e2000}, {0xbe0e4000}, {0xbe0e6000}, 
+    {0xbe0e8000}, {0xbe0ea000}, {0xbe0ec000}, {0xbe0ee000}, 
+    {0xbe0f0000}, {0xbe0f2000}, {0xbe0f4000}, {0xbe0f6000}, 
+    {0xbe0f8000}, {0xbe0fa000}, {0xbe0fc000}, {0xbe0fe000}, 
+    {0xbe100000}, {0xbe102000}, {0xbe104000}, {0xbe106000}, 
+    {0xbe108000}, {0xbe10a000}, {0xbe10c000}, {0xbe10e000}, 
+    {0xbe110000}, {0xbe112000}, {0xbe114000}, {0xbe116000}, 
+    {0xbe118000}, {0xbe11a000}, {0xbe11c000}, {0xbe11e000}, 
+    {0xbe120000}, {0xbe122000}, {0xbe124000}, {0xbe126000}, 
+    {0xbe128000}, {0xbe12a000}, {0xbe12c000}, {0xbe12e000}, 
+    {0xbe130000}, {0xbe132000}, {0xbe134000}, {0xbe136000}, 
+    {0xbe138000}, {0xbe13a000}, {0xbe13c000}, {0xbe13e000}, 
+    {0xbe140000}, {0xbe142000}, {0xbe144000}, {0xbe146000}, 
+    {0xbe148000}, {0xbe14a000}, {0xbe14c000}, {0xbe14e000}, 
+    {0xbe150000}, {0xbe152000}, {0xbe154000}, {0xbe156000}, 
+    {0xbe158000}, {0xbe15a000}, {0xbe15c000}, {0xbe15e000}, 
+    {0xbe160000}, {0xbe162000}, {0xbe164000}, {0xbe166000}, 
+    {0xbe168000}, {0xbe16a000}, {0xbe16c000}, {0xbe16e000}, 
+    {0xbe170000}, {0xbe172000}, {0xbe174000}, {0xbe176000}, 
+    {0xbe178000}, {0xbe17a000}, {0xbe17c000}, {0xbe17e000}, 
+    {0xbe180000}, {0xbe182000}, {0xbe184000}, {0xbe186000}, 
+    {0xbe188000}, {0xbe18a000}, {0xbe18c000}, {0xbe18e000}, 
+    {0xbe190000}, {0xbe192000}, {0xbe194000}, {0xbe196000}, 
+    {0xbe198000}, {0xbe19a000}, {0xbe19c000}, {0xbe19e000}, 
+    {0xbe1a0000}, {0xbe1a2000}, {0xbe1a4000}, {0xbe1a6000}, 
+    {0xbe1a8000}, {0xbe1aa000}, {0xbe1ac000}, {0xbe1ae000}, 
+    {0xbe1b0000}, {0xbe1b2000}, {0xbe1b4000}, {0xbe1b6000}, 
+    {0xbe1b8000}, {0xbe1ba000}, {0xbe1bc000}, {0xbe1be000}, 
+    {0xbe1c0000}, {0xbe1c2000}, {0xbe1c4000}, {0xbe1c6000}, 
+    {0xbe1c8000}, {0xbe1ca000}, {0xbe1cc000}, {0xbe1ce000}, 
+    {0xbe1d0000}, {0xbe1d2000}, {0xbe1d4000}, {0xbe1d6000}, 
+    {0xbe1d8000}, {0xbe1da000}, {0xbe1dc000}, {0xbe1de000}, 
+    {0xbe1e0000}, {0xbe1e2000}, {0xbe1e4000}, {0xbe1e6000}, 
+    {0xbe1e8000}, {0xbe1ea000}, {0xbe1ec000}, {0xbe1ee000}, 
+    {0xbe1f0000}, {0xbe1f2000}, {0xbe1f4000}, {0xbe1f6000}, 
+    {0xbe1f8000}, {0xbe1fa000}, {0xbe1fc000}, {0xbe1fe000}, 
+    {0xbe200000}, {0xbe202000}, {0xbe204000}, {0xbe206000}, 
+    {0xbe208000}, {0xbe20a000}, {0xbe20c000}, {0xbe20e000}, 
+    {0xbe210000}, {0xbe212000}, {0xbe214000}, {0xbe216000}, 
+    {0xbe218000}, {0xbe21a000}, {0xbe21c000}, {0xbe21e000}, 
+    {0xbe220000}, {0xbe222000}, {0xbe224000}, {0xbe226000}, 
+    {0xbe228000}, {0xbe22a000}, {0xbe22c000}, {0xbe22e000}, 
+    {0xbe230000}, {0xbe232000}, {0xbe234000}, {0xbe236000}, 
+    {0xbe238000}, {0xbe23a000}, {0xbe23c000}, {0xbe23e000}, 
+    {0xbe240000}, {0xbe242000}, {0xbe244000}, {0xbe246000}, 
+    {0xbe248000}, {0xbe24a000}, {0xbe24c000}, {0xbe24e000}, 
+    {0xbe250000}, {0xbe252000}, {0xbe254000}, {0xbe256000}, 
+    {0xbe258000}, {0xbe25a000}, {0xbe25c000}, {0xbe25e000}, 
+    {0xbe260000}, {0xbe262000}, {0xbe264000}, {0xbe266000}, 
+    {0xbe268000}, {0xbe26a000}, {0xbe26c000}, {0xbe26e000}, 
+    {0xbe270000}, {0xbe272000}, {0xbe274000}, {0xbe276000}, 
+    {0xbe278000}, {0xbe27a000}, {0xbe27c000}, {0xbe27e000}, 
+    {0xbe280000}, {0xbe282000}, {0xbe284000}, {0xbe286000}, 
+    {0xbe288000}, {0xbe28a000}, {0xbe28c000}, {0xbe28e000}, 
+    {0xbe290000}, {0xbe292000}, {0xbe294000}, {0xbe296000}, 
+    {0xbe298000}, {0xbe29a000}, {0xbe29c000}, {0xbe29e000}, 
+    {0xbe2a0000}, {0xbe2a2000}, {0xbe2a4000}, {0xbe2a6000}, 
+    {0xbe2a8000}, {0xbe2aa000}, {0xbe2ac000}, {0xbe2ae000}, 
+    {0xbe2b0000}, {0xbe2b2000}, {0xbe2b4000}, {0xbe2b6000}, 
+    {0xbe2b8000}, {0xbe2ba000}, {0xbe2bc000}, {0xbe2be000}, 
+    {0xbe2c0000}, {0xbe2c2000}, {0xbe2c4000}, {0xbe2c6000}, 
+    {0xbe2c8000}, {0xbe2ca000}, {0xbe2cc000}, {0xbe2ce000}, 
+    {0xbe2d0000}, {0xbe2d2000}, {0xbe2d4000}, {0xbe2d6000}, 
+    {0xbe2d8000}, {0xbe2da000}, {0xbe2dc000}, {0xbe2de000}, 
+    {0xbe2e0000}, {0xbe2e2000}, {0xbe2e4000}, {0xbe2e6000}, 
+    {0xbe2e8000}, {0xbe2ea000}, {0xbe2ec000}, {0xbe2ee000}, 
+    {0xbe2f0000}, {0xbe2f2000}, {0xbe2f4000}, {0xbe2f6000}, 
+    {0xbe2f8000}, {0xbe2fa000}, {0xbe2fc000}, {0xbe2fe000}, 
+    {0xbe300000}, {0xbe302000}, {0xbe304000}, {0xbe306000}, 
+    {0xbe308000}, {0xbe30a000}, {0xbe30c000}, {0xbe30e000}, 
+    {0xbe310000}, {0xbe312000}, {0xbe314000}, {0xbe316000}, 
+    {0xbe318000}, {0xbe31a000}, {0xbe31c000}, {0xbe31e000}, 
+    {0xbe320000}, {0xbe322000}, {0xbe324000}, {0xbe326000}, 
+    {0xbe328000}, {0xbe32a000}, {0xbe32c000}, {0xbe32e000}, 
+    {0xbe330000}, {0xbe332000}, {0xbe334000}, {0xbe336000}, 
+    {0xbe338000}, {0xbe33a000}, {0xbe33c000}, {0xbe33e000}, 
+    {0xbe340000}, {0xbe342000}, {0xbe344000}, {0xbe346000}, 
+    {0xbe348000}, {0xbe34a000}, {0xbe34c000}, {0xbe34e000}, 
+    {0xbe350000}, {0xbe352000}, {0xbe354000}, {0xbe356000}, 
+    {0xbe358000}, {0xbe35a000}, {0xbe35c000}, {0xbe35e000}, 
+    {0xbe360000}, {0xbe362000}, {0xbe364000}, {0xbe366000}, 
+    {0xbe368000}, {0xbe36a000}, {0xbe36c000}, {0xbe36e000}, 
+    {0xbe370000}, {0xbe372000}, {0xbe374000}, {0xbe376000}, 
+    {0xbe378000}, {0xbe37a000}, {0xbe37c000}, {0xbe37e000}, 
+    {0xbe380000}, {0xbe382000}, {0xbe384000}, {0xbe386000}, 
+    {0xbe388000}, {0xbe38a000}, {0xbe38c000}, {0xbe38e000}, 
+    {0xbe390000}, {0xbe392000}, {0xbe394000}, {0xbe396000}, 
+    {0xbe398000}, {0xbe39a000}, {0xbe39c000}, {0xbe39e000}, 
+    {0xbe3a0000}, {0xbe3a2000}, {0xbe3a4000}, {0xbe3a6000}, 
+    {0xbe3a8000}, {0xbe3aa000}, {0xbe3ac000}, {0xbe3ae000}, 
+    {0xbe3b0000}, {0xbe3b2000}, {0xbe3b4000}, {0xbe3b6000}, 
+    {0xbe3b8000}, {0xbe3ba000}, {0xbe3bc000}, {0xbe3be000}, 
+    {0xbe3c0000}, {0xbe3c2000}, {0xbe3c4000}, {0xbe3c6000}, 
+    {0xbe3c8000}, {0xbe3ca000}, {0xbe3cc000}, {0xbe3ce000}, 
+    {0xbe3d0000}, {0xbe3d2000}, {0xbe3d4000}, {0xbe3d6000}, 
+    {0xbe3d8000}, {0xbe3da000}, {0xbe3dc000}, {0xbe3de000}, 
+    {0xbe3e0000}, {0xbe3e2000}, {0xbe3e4000}, {0xbe3e6000}, 
+    {0xbe3e8000}, {0xbe3ea000}, {0xbe3ec000}, {0xbe3ee000}, 
+    {0xbe3f0000}, {0xbe3f2000}, {0xbe3f4000}, {0xbe3f6000}, 
+    {0xbe3f8000}, {0xbe3fa000}, {0xbe3fc000}, {0xbe3fe000}, 
+    {0xbe400000}, {0xbe402000}, {0xbe404000}, {0xbe406000}, 
+    {0xbe408000}, {0xbe40a000}, {0xbe40c000}, {0xbe40e000}, 
+    {0xbe410000}, {0xbe412000}, {0xbe414000}, {0xbe416000}, 
+    {0xbe418000}, {0xbe41a000}, {0xbe41c000}, {0xbe41e000}, 
+    {0xbe420000}, {0xbe422000}, {0xbe424000}, {0xbe426000}, 
+    {0xbe428000}, {0xbe42a000}, {0xbe42c000}, {0xbe42e000}, 
+    {0xbe430000}, {0xbe432000}, {0xbe434000}, {0xbe436000}, 
+    {0xbe438000}, {0xbe43a000}, {0xbe43c000}, {0xbe43e000}, 
+    {0xbe440000}, {0xbe442000}, {0xbe444000}, {0xbe446000}, 
+    {0xbe448000}, {0xbe44a000}, {0xbe44c000}, {0xbe44e000}, 
+    {0xbe450000}, {0xbe452000}, {0xbe454000}, {0xbe456000}, 
+    {0xbe458000}, {0xbe45a000}, {0xbe45c000}, {0xbe45e000}, 
+    {0xbe460000}, {0xbe462000}, {0xbe464000}, {0xbe466000}, 
+    {0xbe468000}, {0xbe46a000}, {0xbe46c000}, {0xbe46e000}, 
+    {0xbe470000}, {0xbe472000}, {0xbe474000}, {0xbe476000}, 
+    {0xbe478000}, {0xbe47a000}, {0xbe47c000}, {0xbe47e000}, 
+    {0xbe480000}, {0xbe482000}, {0xbe484000}, {0xbe486000}, 
+    {0xbe488000}, {0xbe48a000}, {0xbe48c000}, {0xbe48e000}, 
+    {0xbe490000}, {0xbe492000}, {0xbe494000}, {0xbe496000}, 
+    {0xbe498000}, {0xbe49a000}, {0xbe49c000}, {0xbe49e000}, 
+    {0xbe4a0000}, {0xbe4a2000}, {0xbe4a4000}, {0xbe4a6000}, 
+    {0xbe4a8000}, {0xbe4aa000}, {0xbe4ac000}, {0xbe4ae000}, 
+    {0xbe4b0000}, {0xbe4b2000}, {0xbe4b4000}, {0xbe4b6000}, 
+    {0xbe4b8000}, {0xbe4ba000}, {0xbe4bc000}, {0xbe4be000}, 
+    {0xbe4c0000}, {0xbe4c2000}, {0xbe4c4000}, {0xbe4c6000}, 
+    {0xbe4c8000}, {0xbe4ca000}, {0xbe4cc000}, {0xbe4ce000}, 
+    {0xbe4d0000}, {0xbe4d2000}, {0xbe4d4000}, {0xbe4d6000}, 
+    {0xbe4d8000}, {0xbe4da000}, {0xbe4dc000}, {0xbe4de000}, 
+    {0xbe4e0000}, {0xbe4e2000}, {0xbe4e4000}, {0xbe4e6000}, 
+    {0xbe4e8000}, {0xbe4ea000}, {0xbe4ec000}, {0xbe4ee000}, 
+    {0xbe4f0000}, {0xbe4f2000}, {0xbe4f4000}, {0xbe4f6000}, 
+    {0xbe4f8000}, {0xbe4fa000}, {0xbe4fc000}, {0xbe4fe000}, 
+    {0xbe500000}, {0xbe502000}, {0xbe504000}, {0xbe506000}, 
+    {0xbe508000}, {0xbe50a000}, {0xbe50c000}, {0xbe50e000}, 
+    {0xbe510000}, {0xbe512000}, {0xbe514000}, {0xbe516000}, 
+    {0xbe518000}, {0xbe51a000}, {0xbe51c000}, {0xbe51e000}, 
+    {0xbe520000}, {0xbe522000}, {0xbe524000}, {0xbe526000}, 
+    {0xbe528000}, {0xbe52a000}, {0xbe52c000}, {0xbe52e000}, 
+    {0xbe530000}, {0xbe532000}, {0xbe534000}, {0xbe536000}, 
+    {0xbe538000}, {0xbe53a000}, {0xbe53c000}, {0xbe53e000}, 
+    {0xbe540000}, {0xbe542000}, {0xbe544000}, {0xbe546000}, 
+    {0xbe548000}, {0xbe54a000}, {0xbe54c000}, {0xbe54e000}, 
+    {0xbe550000}, {0xbe552000}, {0xbe554000}, {0xbe556000}, 
+    {0xbe558000}, {0xbe55a000}, {0xbe55c000}, {0xbe55e000}, 
+    {0xbe560000}, {0xbe562000}, {0xbe564000}, {0xbe566000}, 
+    {0xbe568000}, {0xbe56a000}, {0xbe56c000}, {0xbe56e000}, 
+    {0xbe570000}, {0xbe572000}, {0xbe574000}, {0xbe576000}, 
+    {0xbe578000}, {0xbe57a000}, {0xbe57c000}, {0xbe57e000}, 
+    {0xbe580000}, {0xbe582000}, {0xbe584000}, {0xbe586000}, 
+    {0xbe588000}, {0xbe58a000}, {0xbe58c000}, {0xbe58e000}, 
+    {0xbe590000}, {0xbe592000}, {0xbe594000}, {0xbe596000}, 
+    {0xbe598000}, {0xbe59a000}, {0xbe59c000}, {0xbe59e000}, 
+    {0xbe5a0000}, {0xbe5a2000}, {0xbe5a4000}, {0xbe5a6000}, 
+    {0xbe5a8000}, {0xbe5aa000}, {0xbe5ac000}, {0xbe5ae000}, 
+    {0xbe5b0000}, {0xbe5b2000}, {0xbe5b4000}, {0xbe5b6000}, 
+    {0xbe5b8000}, {0xbe5ba000}, {0xbe5bc000}, {0xbe5be000}, 
+    {0xbe5c0000}, {0xbe5c2000}, {0xbe5c4000}, {0xbe5c6000}, 
+    {0xbe5c8000}, {0xbe5ca000}, {0xbe5cc000}, {0xbe5ce000}, 
+    {0xbe5d0000}, {0xbe5d2000}, {0xbe5d4000}, {0xbe5d6000}, 
+    {0xbe5d8000}, {0xbe5da000}, {0xbe5dc000}, {0xbe5de000}, 
+    {0xbe5e0000}, {0xbe5e2000}, {0xbe5e4000}, {0xbe5e6000}, 
+    {0xbe5e8000}, {0xbe5ea000}, {0xbe5ec000}, {0xbe5ee000}, 
+    {0xbe5f0000}, {0xbe5f2000}, {0xbe5f4000}, {0xbe5f6000}, 
+    {0xbe5f8000}, {0xbe5fa000}, {0xbe5fc000}, {0xbe5fe000}, 
+    {0xbe600000}, {0xbe602000}, {0xbe604000}, {0xbe606000}, 
+    {0xbe608000}, {0xbe60a000}, {0xbe60c000}, {0xbe60e000}, 
+    {0xbe610000}, {0xbe612000}, {0xbe614000}, {0xbe616000}, 
+    {0xbe618000}, {0xbe61a000}, {0xbe61c000}, {0xbe61e000}, 
+    {0xbe620000}, {0xbe622000}, {0xbe624000}, {0xbe626000}, 
+    {0xbe628000}, {0xbe62a000}, {0xbe62c000}, {0xbe62e000}, 
+    {0xbe630000}, {0xbe632000}, {0xbe634000}, {0xbe636000}, 
+    {0xbe638000}, {0xbe63a000}, {0xbe63c000}, {0xbe63e000}, 
+    {0xbe640000}, {0xbe642000}, {0xbe644000}, {0xbe646000}, 
+    {0xbe648000}, {0xbe64a000}, {0xbe64c000}, {0xbe64e000}, 
+    {0xbe650000}, {0xbe652000}, {0xbe654000}, {0xbe656000}, 
+    {0xbe658000}, {0xbe65a000}, {0xbe65c000}, {0xbe65e000}, 
+    {0xbe660000}, {0xbe662000}, {0xbe664000}, {0xbe666000}, 
+    {0xbe668000}, {0xbe66a000}, {0xbe66c000}, {0xbe66e000}, 
+    {0xbe670000}, {0xbe672000}, {0xbe674000}, {0xbe676000}, 
+    {0xbe678000}, {0xbe67a000}, {0xbe67c000}, {0xbe67e000}, 
+    {0xbe680000}, {0xbe682000}, {0xbe684000}, {0xbe686000}, 
+    {0xbe688000}, {0xbe68a000}, {0xbe68c000}, {0xbe68e000}, 
+    {0xbe690000}, {0xbe692000}, {0xbe694000}, {0xbe696000}, 
+    {0xbe698000}, {0xbe69a000}, {0xbe69c000}, {0xbe69e000}, 
+    {0xbe6a0000}, {0xbe6a2000}, {0xbe6a4000}, {0xbe6a6000}, 
+    {0xbe6a8000}, {0xbe6aa000}, {0xbe6ac000}, {0xbe6ae000}, 
+    {0xbe6b0000}, {0xbe6b2000}, {0xbe6b4000}, {0xbe6b6000}, 
+    {0xbe6b8000}, {0xbe6ba000}, {0xbe6bc000}, {0xbe6be000}, 
+    {0xbe6c0000}, {0xbe6c2000}, {0xbe6c4000}, {0xbe6c6000}, 
+    {0xbe6c8000}, {0xbe6ca000}, {0xbe6cc000}, {0xbe6ce000}, 
+    {0xbe6d0000}, {0xbe6d2000}, {0xbe6d4000}, {0xbe6d6000}, 
+    {0xbe6d8000}, {0xbe6da000}, {0xbe6dc000}, {0xbe6de000}, 
+    {0xbe6e0000}, {0xbe6e2000}, {0xbe6e4000}, {0xbe6e6000}, 
+    {0xbe6e8000}, {0xbe6ea000}, {0xbe6ec000}, {0xbe6ee000}, 
+    {0xbe6f0000}, {0xbe6f2000}, {0xbe6f4000}, {0xbe6f6000}, 
+    {0xbe6f8000}, {0xbe6fa000}, {0xbe6fc000}, {0xbe6fe000}, 
+    {0xbe700000}, {0xbe702000}, {0xbe704000}, {0xbe706000}, 
+    {0xbe708000}, {0xbe70a000}, {0xbe70c000}, {0xbe70e000}, 
+    {0xbe710000}, {0xbe712000}, {0xbe714000}, {0xbe716000}, 
+    {0xbe718000}, {0xbe71a000}, {0xbe71c000}, {0xbe71e000}, 
+    {0xbe720000}, {0xbe722000}, {0xbe724000}, {0xbe726000}, 
+    {0xbe728000}, {0xbe72a000}, {0xbe72c000}, {0xbe72e000}, 
+    {0xbe730000}, {0xbe732000}, {0xbe734000}, {0xbe736000}, 
+    {0xbe738000}, {0xbe73a000}, {0xbe73c000}, {0xbe73e000}, 
+    {0xbe740000}, {0xbe742000}, {0xbe744000}, {0xbe746000}, 
+    {0xbe748000}, {0xbe74a000}, {0xbe74c000}, {0xbe74e000}, 
+    {0xbe750000}, {0xbe752000}, {0xbe754000}, {0xbe756000}, 
+    {0xbe758000}, {0xbe75a000}, {0xbe75c000}, {0xbe75e000}, 
+    {0xbe760000}, {0xbe762000}, {0xbe764000}, {0xbe766000}, 
+    {0xbe768000}, {0xbe76a000}, {0xbe76c000}, {0xbe76e000}, 
+    {0xbe770000}, {0xbe772000}, {0xbe774000}, {0xbe776000}, 
+    {0xbe778000}, {0xbe77a000}, {0xbe77c000}, {0xbe77e000}, 
+    {0xbe780000}, {0xbe782000}, {0xbe784000}, {0xbe786000}, 
+    {0xbe788000}, {0xbe78a000}, {0xbe78c000}, {0xbe78e000}, 
+    {0xbe790000}, {0xbe792000}, {0xbe794000}, {0xbe796000}, 
+    {0xbe798000}, {0xbe79a000}, {0xbe79c000}, {0xbe79e000}, 
+    {0xbe7a0000}, {0xbe7a2000}, {0xbe7a4000}, {0xbe7a6000}, 
+    {0xbe7a8000}, {0xbe7aa000}, {0xbe7ac000}, {0xbe7ae000}, 
+    {0xbe7b0000}, {0xbe7b2000}, {0xbe7b4000}, {0xbe7b6000}, 
+    {0xbe7b8000}, {0xbe7ba000}, {0xbe7bc000}, {0xbe7be000}, 
+    {0xbe7c0000}, {0xbe7c2000}, {0xbe7c4000}, {0xbe7c6000}, 
+    {0xbe7c8000}, {0xbe7ca000}, {0xbe7cc000}, {0xbe7ce000}, 
+    {0xbe7d0000}, {0xbe7d2000}, {0xbe7d4000}, {0xbe7d6000}, 
+    {0xbe7d8000}, {0xbe7da000}, {0xbe7dc000}, {0xbe7de000}, 
+    {0xbe7e0000}, {0xbe7e2000}, {0xbe7e4000}, {0xbe7e6000}, 
+    {0xbe7e8000}, {0xbe7ea000}, {0xbe7ec000}, {0xbe7ee000}, 
+    {0xbe7f0000}, {0xbe7f2000}, {0xbe7f4000}, {0xbe7f6000}, 
+    {0xbe7f8000}, {0xbe7fa000}, {0xbe7fc000}, {0xbe7fe000}, 
+    {0xbe800000}, {0xbe802000}, {0xbe804000}, {0xbe806000}, 
+    {0xbe808000}, {0xbe80a000}, {0xbe80c000}, {0xbe80e000}, 
+    {0xbe810000}, {0xbe812000}, {0xbe814000}, {0xbe816000}, 
+    {0xbe818000}, {0xbe81a000}, {0xbe81c000}, {0xbe81e000}, 
+    {0xbe820000}, {0xbe822000}, {0xbe824000}, {0xbe826000}, 
+    {0xbe828000}, {0xbe82a000}, {0xbe82c000}, {0xbe82e000}, 
+    {0xbe830000}, {0xbe832000}, {0xbe834000}, {0xbe836000}, 
+    {0xbe838000}, {0xbe83a000}, {0xbe83c000}, {0xbe83e000}, 
+    {0xbe840000}, {0xbe842000}, {0xbe844000}, {0xbe846000}, 
+    {0xbe848000}, {0xbe84a000}, {0xbe84c000}, {0xbe84e000}, 
+    {0xbe850000}, {0xbe852000}, {0xbe854000}, {0xbe856000}, 
+    {0xbe858000}, {0xbe85a000}, {0xbe85c000}, {0xbe85e000}, 
+    {0xbe860000}, {0xbe862000}, {0xbe864000}, {0xbe866000}, 
+    {0xbe868000}, {0xbe86a000}, {0xbe86c000}, {0xbe86e000}, 
+    {0xbe870000}, {0xbe872000}, {0xbe874000}, {0xbe876000}, 
+    {0xbe878000}, {0xbe87a000}, {0xbe87c000}, {0xbe87e000}, 
+    {0xbe880000}, {0xbe882000}, {0xbe884000}, {0xbe886000}, 
+    {0xbe888000}, {0xbe88a000}, {0xbe88c000}, {0xbe88e000}, 
+    {0xbe890000}, {0xbe892000}, {0xbe894000}, {0xbe896000}, 
+    {0xbe898000}, {0xbe89a000}, {0xbe89c000}, {0xbe89e000}, 
+    {0xbe8a0000}, {0xbe8a2000}, {0xbe8a4000}, {0xbe8a6000}, 
+    {0xbe8a8000}, {0xbe8aa000}, {0xbe8ac000}, {0xbe8ae000}, 
+    {0xbe8b0000}, {0xbe8b2000}, {0xbe8b4000}, {0xbe8b6000}, 
+    {0xbe8b8000}, {0xbe8ba000}, {0xbe8bc000}, {0xbe8be000}, 
+    {0xbe8c0000}, {0xbe8c2000}, {0xbe8c4000}, {0xbe8c6000}, 
+    {0xbe8c8000}, {0xbe8ca000}, {0xbe8cc000}, {0xbe8ce000}, 
+    {0xbe8d0000}, {0xbe8d2000}, {0xbe8d4000}, {0xbe8d6000}, 
+    {0xbe8d8000}, {0xbe8da000}, {0xbe8dc000}, {0xbe8de000}, 
+    {0xbe8e0000}, {0xbe8e2000}, {0xbe8e4000}, {0xbe8e6000}, 
+    {0xbe8e8000}, {0xbe8ea000}, {0xbe8ec000}, {0xbe8ee000}, 
+    {0xbe8f0000}, {0xbe8f2000}, {0xbe8f4000}, {0xbe8f6000}, 
+    {0xbe8f8000}, {0xbe8fa000}, {0xbe8fc000}, {0xbe8fe000}, 
+    {0xbe900000}, {0xbe902000}, {0xbe904000}, {0xbe906000}, 
+    {0xbe908000}, {0xbe90a000}, {0xbe90c000}, {0xbe90e000}, 
+    {0xbe910000}, {0xbe912000}, {0xbe914000}, {0xbe916000}, 
+    {0xbe918000}, {0xbe91a000}, {0xbe91c000}, {0xbe91e000}, 
+    {0xbe920000}, {0xbe922000}, {0xbe924000}, {0xbe926000}, 
+    {0xbe928000}, {0xbe92a000}, {0xbe92c000}, {0xbe92e000}, 
+    {0xbe930000}, {0xbe932000}, {0xbe934000}, {0xbe936000}, 
+    {0xbe938000}, {0xbe93a000}, {0xbe93c000}, {0xbe93e000}, 
+    {0xbe940000}, {0xbe942000}, {0xbe944000}, {0xbe946000}, 
+    {0xbe948000}, {0xbe94a000}, {0xbe94c000}, {0xbe94e000}, 
+    {0xbe950000}, {0xbe952000}, {0xbe954000}, {0xbe956000}, 
+    {0xbe958000}, {0xbe95a000}, {0xbe95c000}, {0xbe95e000}, 
+    {0xbe960000}, {0xbe962000}, {0xbe964000}, {0xbe966000}, 
+    {0xbe968000}, {0xbe96a000}, {0xbe96c000}, {0xbe96e000}, 
+    {0xbe970000}, {0xbe972000}, {0xbe974000}, {0xbe976000}, 
+    {0xbe978000}, {0xbe97a000}, {0xbe97c000}, {0xbe97e000}, 
+    {0xbe980000}, {0xbe982000}, {0xbe984000}, {0xbe986000}, 
+    {0xbe988000}, {0xbe98a000}, {0xbe98c000}, {0xbe98e000}, 
+    {0xbe990000}, {0xbe992000}, {0xbe994000}, {0xbe996000}, 
+    {0xbe998000}, {0xbe99a000}, {0xbe99c000}, {0xbe99e000}, 
+    {0xbe9a0000}, {0xbe9a2000}, {0xbe9a4000}, {0xbe9a6000}, 
+    {0xbe9a8000}, {0xbe9aa000}, {0xbe9ac000}, {0xbe9ae000}, 
+    {0xbe9b0000}, {0xbe9b2000}, {0xbe9b4000}, {0xbe9b6000}, 
+    {0xbe9b8000}, {0xbe9ba000}, {0xbe9bc000}, {0xbe9be000}, 
+    {0xbe9c0000}, {0xbe9c2000}, {0xbe9c4000}, {0xbe9c6000}, 
+    {0xbe9c8000}, {0xbe9ca000}, {0xbe9cc000}, {0xbe9ce000}, 
+    {0xbe9d0000}, {0xbe9d2000}, {0xbe9d4000}, {0xbe9d6000}, 
+    {0xbe9d8000}, {0xbe9da000}, {0xbe9dc000}, {0xbe9de000}, 
+    {0xbe9e0000}, {0xbe9e2000}, {0xbe9e4000}, {0xbe9e6000}, 
+    {0xbe9e8000}, {0xbe9ea000}, {0xbe9ec000}, {0xbe9ee000}, 
+    {0xbe9f0000}, {0xbe9f2000}, {0xbe9f4000}, {0xbe9f6000}, 
+    {0xbe9f8000}, {0xbe9fa000}, {0xbe9fc000}, {0xbe9fe000}, 
+    {0xbea00000}, {0xbea02000}, {0xbea04000}, {0xbea06000}, 
+    {0xbea08000}, {0xbea0a000}, {0xbea0c000}, {0xbea0e000}, 
+    {0xbea10000}, {0xbea12000}, {0xbea14000}, {0xbea16000}, 
+    {0xbea18000}, {0xbea1a000}, {0xbea1c000}, {0xbea1e000}, 
+    {0xbea20000}, {0xbea22000}, {0xbea24000}, {0xbea26000}, 
+    {0xbea28000}, {0xbea2a000}, {0xbea2c000}, {0xbea2e000}, 
+    {0xbea30000}, {0xbea32000}, {0xbea34000}, {0xbea36000}, 
+    {0xbea38000}, {0xbea3a000}, {0xbea3c000}, {0xbea3e000}, 
+    {0xbea40000}, {0xbea42000}, {0xbea44000}, {0xbea46000}, 
+    {0xbea48000}, {0xbea4a000}, {0xbea4c000}, {0xbea4e000}, 
+    {0xbea50000}, {0xbea52000}, {0xbea54000}, {0xbea56000}, 
+    {0xbea58000}, {0xbea5a000}, {0xbea5c000}, {0xbea5e000}, 
+    {0xbea60000}, {0xbea62000}, {0xbea64000}, {0xbea66000}, 
+    {0xbea68000}, {0xbea6a000}, {0xbea6c000}, {0xbea6e000}, 
+    {0xbea70000}, {0xbea72000}, {0xbea74000}, {0xbea76000}, 
+    {0xbea78000}, {0xbea7a000}, {0xbea7c000}, {0xbea7e000}, 
+    {0xbea80000}, {0xbea82000}, {0xbea84000}, {0xbea86000}, 
+    {0xbea88000}, {0xbea8a000}, {0xbea8c000}, {0xbea8e000}, 
+    {0xbea90000}, {0xbea92000}, {0xbea94000}, {0xbea96000}, 
+    {0xbea98000}, {0xbea9a000}, {0xbea9c000}, {0xbea9e000}, 
+    {0xbeaa0000}, {0xbeaa2000}, {0xbeaa4000}, {0xbeaa6000}, 
+    {0xbeaa8000}, {0xbeaaa000}, {0xbeaac000}, {0xbeaae000}, 
+    {0xbeab0000}, {0xbeab2000}, {0xbeab4000}, {0xbeab6000}, 
+    {0xbeab8000}, {0xbeaba000}, {0xbeabc000}, {0xbeabe000}, 
+    {0xbeac0000}, {0xbeac2000}, {0xbeac4000}, {0xbeac6000}, 
+    {0xbeac8000}, {0xbeaca000}, {0xbeacc000}, {0xbeace000}, 
+    {0xbead0000}, {0xbead2000}, {0xbead4000}, {0xbead6000}, 
+    {0xbead8000}, {0xbeada000}, {0xbeadc000}, {0xbeade000}, 
+    {0xbeae0000}, {0xbeae2000}, {0xbeae4000}, {0xbeae6000}, 
+    {0xbeae8000}, {0xbeaea000}, {0xbeaec000}, {0xbeaee000}, 
+    {0xbeaf0000}, {0xbeaf2000}, {0xbeaf4000}, {0xbeaf6000}, 
+    {0xbeaf8000}, {0xbeafa000}, {0xbeafc000}, {0xbeafe000}, 
+    {0xbeb00000}, {0xbeb02000}, {0xbeb04000}, {0xbeb06000}, 
+    {0xbeb08000}, {0xbeb0a000}, {0xbeb0c000}, {0xbeb0e000}, 
+    {0xbeb10000}, {0xbeb12000}, {0xbeb14000}, {0xbeb16000}, 
+    {0xbeb18000}, {0xbeb1a000}, {0xbeb1c000}, {0xbeb1e000}, 
+    {0xbeb20000}, {0xbeb22000}, {0xbeb24000}, {0xbeb26000}, 
+    {0xbeb28000}, {0xbeb2a000}, {0xbeb2c000}, {0xbeb2e000}, 
+    {0xbeb30000}, {0xbeb32000}, {0xbeb34000}, {0xbeb36000}, 
+    {0xbeb38000}, {0xbeb3a000}, {0xbeb3c000}, {0xbeb3e000}, 
+    {0xbeb40000}, {0xbeb42000}, {0xbeb44000}, {0xbeb46000}, 
+    {0xbeb48000}, {0xbeb4a000}, {0xbeb4c000}, {0xbeb4e000}, 
+    {0xbeb50000}, {0xbeb52000}, {0xbeb54000}, {0xbeb56000}, 
+    {0xbeb58000}, {0xbeb5a000}, {0xbeb5c000}, {0xbeb5e000}, 
+    {0xbeb60000}, {0xbeb62000}, {0xbeb64000}, {0xbeb66000}, 
+    {0xbeb68000}, {0xbeb6a000}, {0xbeb6c000}, {0xbeb6e000}, 
+    {0xbeb70000}, {0xbeb72000}, {0xbeb74000}, {0xbeb76000}, 
+    {0xbeb78000}, {0xbeb7a000}, {0xbeb7c000}, {0xbeb7e000}, 
+    {0xbeb80000}, {0xbeb82000}, {0xbeb84000}, {0xbeb86000}, 
+    {0xbeb88000}, {0xbeb8a000}, {0xbeb8c000}, {0xbeb8e000}, 
+    {0xbeb90000}, {0xbeb92000}, {0xbeb94000}, {0xbeb96000}, 
+    {0xbeb98000}, {0xbeb9a000}, {0xbeb9c000}, {0xbeb9e000}, 
+    {0xbeba0000}, {0xbeba2000}, {0xbeba4000}, {0xbeba6000}, 
+    {0xbeba8000}, {0xbebaa000}, {0xbebac000}, {0xbebae000}, 
+    {0xbebb0000}, {0xbebb2000}, {0xbebb4000}, {0xbebb6000}, 
+    {0xbebb8000}, {0xbebba000}, {0xbebbc000}, {0xbebbe000}, 
+    {0xbebc0000}, {0xbebc2000}, {0xbebc4000}, {0xbebc6000}, 
+    {0xbebc8000}, {0xbebca000}, {0xbebcc000}, {0xbebce000}, 
+    {0xbebd0000}, {0xbebd2000}, {0xbebd4000}, {0xbebd6000}, 
+    {0xbebd8000}, {0xbebda000}, {0xbebdc000}, {0xbebde000}, 
+    {0xbebe0000}, {0xbebe2000}, {0xbebe4000}, {0xbebe6000}, 
+    {0xbebe8000}, {0xbebea000}, {0xbebec000}, {0xbebee000}, 
+    {0xbebf0000}, {0xbebf2000}, {0xbebf4000}, {0xbebf6000}, 
+    {0xbebf8000}, {0xbebfa000}, {0xbebfc000}, {0xbebfe000}, 
+    {0xbec00000}, {0xbec02000}, {0xbec04000}, {0xbec06000}, 
+    {0xbec08000}, {0xbec0a000}, {0xbec0c000}, {0xbec0e000}, 
+    {0xbec10000}, {0xbec12000}, {0xbec14000}, {0xbec16000}, 
+    {0xbec18000}, {0xbec1a000}, {0xbec1c000}, {0xbec1e000}, 
+    {0xbec20000}, {0xbec22000}, {0xbec24000}, {0xbec26000}, 
+    {0xbec28000}, {0xbec2a000}, {0xbec2c000}, {0xbec2e000}, 
+    {0xbec30000}, {0xbec32000}, {0xbec34000}, {0xbec36000}, 
+    {0xbec38000}, {0xbec3a000}, {0xbec3c000}, {0xbec3e000}, 
+    {0xbec40000}, {0xbec42000}, {0xbec44000}, {0xbec46000}, 
+    {0xbec48000}, {0xbec4a000}, {0xbec4c000}, {0xbec4e000}, 
+    {0xbec50000}, {0xbec52000}, {0xbec54000}, {0xbec56000}, 
+    {0xbec58000}, {0xbec5a000}, {0xbec5c000}, {0xbec5e000}, 
+    {0xbec60000}, {0xbec62000}, {0xbec64000}, {0xbec66000}, 
+    {0xbec68000}, {0xbec6a000}, {0xbec6c000}, {0xbec6e000}, 
+    {0xbec70000}, {0xbec72000}, {0xbec74000}, {0xbec76000}, 
+    {0xbec78000}, {0xbec7a000}, {0xbec7c000}, {0xbec7e000}, 
+    {0xbec80000}, {0xbec82000}, {0xbec84000}, {0xbec86000}, 
+    {0xbec88000}, {0xbec8a000}, {0xbec8c000}, {0xbec8e000}, 
+    {0xbec90000}, {0xbec92000}, {0xbec94000}, {0xbec96000}, 
+    {0xbec98000}, {0xbec9a000}, {0xbec9c000}, {0xbec9e000}, 
+    {0xbeca0000}, {0xbeca2000}, {0xbeca4000}, {0xbeca6000}, 
+    {0xbeca8000}, {0xbecaa000}, {0xbecac000}, {0xbecae000}, 
+    {0xbecb0000}, {0xbecb2000}, {0xbecb4000}, {0xbecb6000}, 
+    {0xbecb8000}, {0xbecba000}, {0xbecbc000}, {0xbecbe000}, 
+    {0xbecc0000}, {0xbecc2000}, {0xbecc4000}, {0xbecc6000}, 
+    {0xbecc8000}, {0xbecca000}, {0xbeccc000}, {0xbecce000}, 
+    {0xbecd0000}, {0xbecd2000}, {0xbecd4000}, {0xbecd6000}, 
+    {0xbecd8000}, {0xbecda000}, {0xbecdc000}, {0xbecde000}, 
+    {0xbece0000}, {0xbece2000}, {0xbece4000}, {0xbece6000}, 
+    {0xbece8000}, {0xbecea000}, {0xbecec000}, {0xbecee000}, 
+    {0xbecf0000}, {0xbecf2000}, {0xbecf4000}, {0xbecf6000}, 
+    {0xbecf8000}, {0xbecfa000}, {0xbecfc000}, {0xbecfe000}, 
+    {0xbed00000}, {0xbed02000}, {0xbed04000}, {0xbed06000}, 
+    {0xbed08000}, {0xbed0a000}, {0xbed0c000}, {0xbed0e000}, 
+    {0xbed10000}, {0xbed12000}, {0xbed14000}, {0xbed16000}, 
+    {0xbed18000}, {0xbed1a000}, {0xbed1c000}, {0xbed1e000}, 
+    {0xbed20000}, {0xbed22000}, {0xbed24000}, {0xbed26000}, 
+    {0xbed28000}, {0xbed2a000}, {0xbed2c000}, {0xbed2e000}, 
+    {0xbed30000}, {0xbed32000}, {0xbed34000}, {0xbed36000}, 
+    {0xbed38000}, {0xbed3a000}, {0xbed3c000}, {0xbed3e000}, 
+    {0xbed40000}, {0xbed42000}, {0xbed44000}, {0xbed46000}, 
+    {0xbed48000}, {0xbed4a000}, {0xbed4c000}, {0xbed4e000}, 
+    {0xbed50000}, {0xbed52000}, {0xbed54000}, {0xbed56000}, 
+    {0xbed58000}, {0xbed5a000}, {0xbed5c000}, {0xbed5e000}, 
+    {0xbed60000}, {0xbed62000}, {0xbed64000}, {0xbed66000}, 
+    {0xbed68000}, {0xbed6a000}, {0xbed6c000}, {0xbed6e000}, 
+    {0xbed70000}, {0xbed72000}, {0xbed74000}, {0xbed76000}, 
+    {0xbed78000}, {0xbed7a000}, {0xbed7c000}, {0xbed7e000}, 
+    {0xbed80000}, {0xbed82000}, {0xbed84000}, {0xbed86000}, 
+    {0xbed88000}, {0xbed8a000}, {0xbed8c000}, {0xbed8e000}, 
+    {0xbed90000}, {0xbed92000}, {0xbed94000}, {0xbed96000}, 
+    {0xbed98000}, {0xbed9a000}, {0xbed9c000}, {0xbed9e000}, 
+    {0xbeda0000}, {0xbeda2000}, {0xbeda4000}, {0xbeda6000}, 
+    {0xbeda8000}, {0xbedaa000}, {0xbedac000}, {0xbedae000}, 
+    {0xbedb0000}, {0xbedb2000}, {0xbedb4000}, {0xbedb6000}, 
+    {0xbedb8000}, {0xbedba000}, {0xbedbc000}, {0xbedbe000}, 
+    {0xbedc0000}, {0xbedc2000}, {0xbedc4000}, {0xbedc6000}, 
+    {0xbedc8000}, {0xbedca000}, {0xbedcc000}, {0xbedce000}, 
+    {0xbedd0000}, {0xbedd2000}, {0xbedd4000}, {0xbedd6000}, 
+    {0xbedd8000}, {0xbedda000}, {0xbeddc000}, {0xbedde000}, 
+    {0xbede0000}, {0xbede2000}, {0xbede4000}, {0xbede6000}, 
+    {0xbede8000}, {0xbedea000}, {0xbedec000}, {0xbedee000}, 
+    {0xbedf0000}, {0xbedf2000}, {0xbedf4000}, {0xbedf6000}, 
+    {0xbedf8000}, {0xbedfa000}, {0xbedfc000}, {0xbedfe000}, 
+    {0xbee00000}, {0xbee02000}, {0xbee04000}, {0xbee06000}, 
+    {0xbee08000}, {0xbee0a000}, {0xbee0c000}, {0xbee0e000}, 
+    {0xbee10000}, {0xbee12000}, {0xbee14000}, {0xbee16000}, 
+    {0xbee18000}, {0xbee1a000}, {0xbee1c000}, {0xbee1e000}, 
+    {0xbee20000}, {0xbee22000}, {0xbee24000}, {0xbee26000}, 
+    {0xbee28000}, {0xbee2a000}, {0xbee2c000}, {0xbee2e000}, 
+    {0xbee30000}, {0xbee32000}, {0xbee34000}, {0xbee36000}, 
+    {0xbee38000}, {0xbee3a000}, {0xbee3c000}, {0xbee3e000}, 
+    {0xbee40000}, {0xbee42000}, {0xbee44000}, {0xbee46000}, 
+    {0xbee48000}, {0xbee4a000}, {0xbee4c000}, {0xbee4e000}, 
+    {0xbee50000}, {0xbee52000}, {0xbee54000}, {0xbee56000}, 
+    {0xbee58000}, {0xbee5a000}, {0xbee5c000}, {0xbee5e000}, 
+    {0xbee60000}, {0xbee62000}, {0xbee64000}, {0xbee66000}, 
+    {0xbee68000}, {0xbee6a000}, {0xbee6c000}, {0xbee6e000}, 
+    {0xbee70000}, {0xbee72000}, {0xbee74000}, {0xbee76000}, 
+    {0xbee78000}, {0xbee7a000}, {0xbee7c000}, {0xbee7e000}, 
+    {0xbee80000}, {0xbee82000}, {0xbee84000}, {0xbee86000}, 
+    {0xbee88000}, {0xbee8a000}, {0xbee8c000}, {0xbee8e000}, 
+    {0xbee90000}, {0xbee92000}, {0xbee94000}, {0xbee96000}, 
+    {0xbee98000}, {0xbee9a000}, {0xbee9c000}, {0xbee9e000}, 
+    {0xbeea0000}, {0xbeea2000}, {0xbeea4000}, {0xbeea6000}, 
+    {0xbeea8000}, {0xbeeaa000}, {0xbeeac000}, {0xbeeae000}, 
+    {0xbeeb0000}, {0xbeeb2000}, {0xbeeb4000}, {0xbeeb6000}, 
+    {0xbeeb8000}, {0xbeeba000}, {0xbeebc000}, {0xbeebe000}, 
+    {0xbeec0000}, {0xbeec2000}, {0xbeec4000}, {0xbeec6000}, 
+    {0xbeec8000}, {0xbeeca000}, {0xbeecc000}, {0xbeece000}, 
+    {0xbeed0000}, {0xbeed2000}, {0xbeed4000}, {0xbeed6000}, 
+    {0xbeed8000}, {0xbeeda000}, {0xbeedc000}, {0xbeede000}, 
+    {0xbeee0000}, {0xbeee2000}, {0xbeee4000}, {0xbeee6000}, 
+    {0xbeee8000}, {0xbeeea000}, {0xbeeec000}, {0xbeeee000}, 
+    {0xbeef0000}, {0xbeef2000}, {0xbeef4000}, {0xbeef6000}, 
+    {0xbeef8000}, {0xbeefa000}, {0xbeefc000}, {0xbeefe000}, 
+    {0xbef00000}, {0xbef02000}, {0xbef04000}, {0xbef06000}, 
+    {0xbef08000}, {0xbef0a000}, {0xbef0c000}, {0xbef0e000}, 
+    {0xbef10000}, {0xbef12000}, {0xbef14000}, {0xbef16000}, 
+    {0xbef18000}, {0xbef1a000}, {0xbef1c000}, {0xbef1e000}, 
+    {0xbef20000}, {0xbef22000}, {0xbef24000}, {0xbef26000}, 
+    {0xbef28000}, {0xbef2a000}, {0xbef2c000}, {0xbef2e000}, 
+    {0xbef30000}, {0xbef32000}, {0xbef34000}, {0xbef36000}, 
+    {0xbef38000}, {0xbef3a000}, {0xbef3c000}, {0xbef3e000}, 
+    {0xbef40000}, {0xbef42000}, {0xbef44000}, {0xbef46000}, 
+    {0xbef48000}, {0xbef4a000}, {0xbef4c000}, {0xbef4e000}, 
+    {0xbef50000}, {0xbef52000}, {0xbef54000}, {0xbef56000}, 
+    {0xbef58000}, {0xbef5a000}, {0xbef5c000}, {0xbef5e000}, 
+    {0xbef60000}, {0xbef62000}, {0xbef64000}, {0xbef66000}, 
+    {0xbef68000}, {0xbef6a000}, {0xbef6c000}, {0xbef6e000}, 
+    {0xbef70000}, {0xbef72000}, {0xbef74000}, {0xbef76000}, 
+    {0xbef78000}, {0xbef7a000}, {0xbef7c000}, {0xbef7e000}, 
+    {0xbef80000}, {0xbef82000}, {0xbef84000}, {0xbef86000}, 
+    {0xbef88000}, {0xbef8a000}, {0xbef8c000}, {0xbef8e000}, 
+    {0xbef90000}, {0xbef92000}, {0xbef94000}, {0xbef96000}, 
+    {0xbef98000}, {0xbef9a000}, {0xbef9c000}, {0xbef9e000}, 
+    {0xbefa0000}, {0xbefa2000}, {0xbefa4000}, {0xbefa6000}, 
+    {0xbefa8000}, {0xbefaa000}, {0xbefac000}, {0xbefae000}, 
+    {0xbefb0000}, {0xbefb2000}, {0xbefb4000}, {0xbefb6000}, 
+    {0xbefb8000}, {0xbefba000}, {0xbefbc000}, {0xbefbe000}, 
+    {0xbefc0000}, {0xbefc2000}, {0xbefc4000}, {0xbefc6000}, 
+    {0xbefc8000}, {0xbefca000}, {0xbefcc000}, {0xbefce000}, 
+    {0xbefd0000}, {0xbefd2000}, {0xbefd4000}, {0xbefd6000}, 
+    {0xbefd8000}, {0xbefda000}, {0xbefdc000}, {0xbefde000}, 
+    {0xbefe0000}, {0xbefe2000}, {0xbefe4000}, {0xbefe6000}, 
+    {0xbefe8000}, {0xbefea000}, {0xbefec000}, {0xbefee000}, 
+    {0xbeff0000}, {0xbeff2000}, {0xbeff4000}, {0xbeff6000}, 
+    {0xbeff8000}, {0xbeffa000}, {0xbeffc000}, {0xbeffe000}, 
+    {0xbf000000}, {0xbf002000}, {0xbf004000}, {0xbf006000}, 
+    {0xbf008000}, {0xbf00a000}, {0xbf00c000}, {0xbf00e000}, 
+    {0xbf010000}, {0xbf012000}, {0xbf014000}, {0xbf016000}, 
+    {0xbf018000}, {0xbf01a000}, {0xbf01c000}, {0xbf01e000}, 
+    {0xbf020000}, {0xbf022000}, {0xbf024000}, {0xbf026000}, 
+    {0xbf028000}, {0xbf02a000}, {0xbf02c000}, {0xbf02e000}, 
+    {0xbf030000}, {0xbf032000}, {0xbf034000}, {0xbf036000}, 
+    {0xbf038000}, {0xbf03a000}, {0xbf03c000}, {0xbf03e000}, 
+    {0xbf040000}, {0xbf042000}, {0xbf044000}, {0xbf046000}, 
+    {0xbf048000}, {0xbf04a000}, {0xbf04c000}, {0xbf04e000}, 
+    {0xbf050000}, {0xbf052000}, {0xbf054000}, {0xbf056000}, 
+    {0xbf058000}, {0xbf05a000}, {0xbf05c000}, {0xbf05e000}, 
+    {0xbf060000}, {0xbf062000}, {0xbf064000}, {0xbf066000}, 
+    {0xbf068000}, {0xbf06a000}, {0xbf06c000}, {0xbf06e000}, 
+    {0xbf070000}, {0xbf072000}, {0xbf074000}, {0xbf076000}, 
+    {0xbf078000}, {0xbf07a000}, {0xbf07c000}, {0xbf07e000}, 
+    {0xbf080000}, {0xbf082000}, {0xbf084000}, {0xbf086000}, 
+    {0xbf088000}, {0xbf08a000}, {0xbf08c000}, {0xbf08e000}, 
+    {0xbf090000}, {0xbf092000}, {0xbf094000}, {0xbf096000}, 
+    {0xbf098000}, {0xbf09a000}, {0xbf09c000}, {0xbf09e000}, 
+    {0xbf0a0000}, {0xbf0a2000}, {0xbf0a4000}, {0xbf0a6000}, 
+    {0xbf0a8000}, {0xbf0aa000}, {0xbf0ac000}, {0xbf0ae000}, 
+    {0xbf0b0000}, {0xbf0b2000}, {0xbf0b4000}, {0xbf0b6000}, 
+    {0xbf0b8000}, {0xbf0ba000}, {0xbf0bc000}, {0xbf0be000}, 
+    {0xbf0c0000}, {0xbf0c2000}, {0xbf0c4000}, {0xbf0c6000}, 
+    {0xbf0c8000}, {0xbf0ca000}, {0xbf0cc000}, {0xbf0ce000}, 
+    {0xbf0d0000}, {0xbf0d2000}, {0xbf0d4000}, {0xbf0d6000}, 
+    {0xbf0d8000}, {0xbf0da000}, {0xbf0dc000}, {0xbf0de000}, 
+    {0xbf0e0000}, {0xbf0e2000}, {0xbf0e4000}, {0xbf0e6000}, 
+    {0xbf0e8000}, {0xbf0ea000}, {0xbf0ec000}, {0xbf0ee000}, 
+    {0xbf0f0000}, {0xbf0f2000}, {0xbf0f4000}, {0xbf0f6000}, 
+    {0xbf0f8000}, {0xbf0fa000}, {0xbf0fc000}, {0xbf0fe000}, 
+    {0xbf100000}, {0xbf102000}, {0xbf104000}, {0xbf106000}, 
+    {0xbf108000}, {0xbf10a000}, {0xbf10c000}, {0xbf10e000}, 
+    {0xbf110000}, {0xbf112000}, {0xbf114000}, {0xbf116000}, 
+    {0xbf118000}, {0xbf11a000}, {0xbf11c000}, {0xbf11e000}, 
+    {0xbf120000}, {0xbf122000}, {0xbf124000}, {0xbf126000}, 
+    {0xbf128000}, {0xbf12a000}, {0xbf12c000}, {0xbf12e000}, 
+    {0xbf130000}, {0xbf132000}, {0xbf134000}, {0xbf136000}, 
+    {0xbf138000}, {0xbf13a000}, {0xbf13c000}, {0xbf13e000}, 
+    {0xbf140000}, {0xbf142000}, {0xbf144000}, {0xbf146000}, 
+    {0xbf148000}, {0xbf14a000}, {0xbf14c000}, {0xbf14e000}, 
+    {0xbf150000}, {0xbf152000}, {0xbf154000}, {0xbf156000}, 
+    {0xbf158000}, {0xbf15a000}, {0xbf15c000}, {0xbf15e000}, 
+    {0xbf160000}, {0xbf162000}, {0xbf164000}, {0xbf166000}, 
+    {0xbf168000}, {0xbf16a000}, {0xbf16c000}, {0xbf16e000}, 
+    {0xbf170000}, {0xbf172000}, {0xbf174000}, {0xbf176000}, 
+    {0xbf178000}, {0xbf17a000}, {0xbf17c000}, {0xbf17e000}, 
+    {0xbf180000}, {0xbf182000}, {0xbf184000}, {0xbf186000}, 
+    {0xbf188000}, {0xbf18a000}, {0xbf18c000}, {0xbf18e000}, 
+    {0xbf190000}, {0xbf192000}, {0xbf194000}, {0xbf196000}, 
+    {0xbf198000}, {0xbf19a000}, {0xbf19c000}, {0xbf19e000}, 
+    {0xbf1a0000}, {0xbf1a2000}, {0xbf1a4000}, {0xbf1a6000}, 
+    {0xbf1a8000}, {0xbf1aa000}, {0xbf1ac000}, {0xbf1ae000}, 
+    {0xbf1b0000}, {0xbf1b2000}, {0xbf1b4000}, {0xbf1b6000}, 
+    {0xbf1b8000}, {0xbf1ba000}, {0xbf1bc000}, {0xbf1be000}, 
+    {0xbf1c0000}, {0xbf1c2000}, {0xbf1c4000}, {0xbf1c6000}, 
+    {0xbf1c8000}, {0xbf1ca000}, {0xbf1cc000}, {0xbf1ce000}, 
+    {0xbf1d0000}, {0xbf1d2000}, {0xbf1d4000}, {0xbf1d6000}, 
+    {0xbf1d8000}, {0xbf1da000}, {0xbf1dc000}, {0xbf1de000}, 
+    {0xbf1e0000}, {0xbf1e2000}, {0xbf1e4000}, {0xbf1e6000}, 
+    {0xbf1e8000}, {0xbf1ea000}, {0xbf1ec000}, {0xbf1ee000}, 
+    {0xbf1f0000}, {0xbf1f2000}, {0xbf1f4000}, {0xbf1f6000}, 
+    {0xbf1f8000}, {0xbf1fa000}, {0xbf1fc000}, {0xbf1fe000}, 
+    {0xbf200000}, {0xbf202000}, {0xbf204000}, {0xbf206000}, 
+    {0xbf208000}, {0xbf20a000}, {0xbf20c000}, {0xbf20e000}, 
+    {0xbf210000}, {0xbf212000}, {0xbf214000}, {0xbf216000}, 
+    {0xbf218000}, {0xbf21a000}, {0xbf21c000}, {0xbf21e000}, 
+    {0xbf220000}, {0xbf222000}, {0xbf224000}, {0xbf226000}, 
+    {0xbf228000}, {0xbf22a000}, {0xbf22c000}, {0xbf22e000}, 
+    {0xbf230000}, {0xbf232000}, {0xbf234000}, {0xbf236000}, 
+    {0xbf238000}, {0xbf23a000}, {0xbf23c000}, {0xbf23e000}, 
+    {0xbf240000}, {0xbf242000}, {0xbf244000}, {0xbf246000}, 
+    {0xbf248000}, {0xbf24a000}, {0xbf24c000}, {0xbf24e000}, 
+    {0xbf250000}, {0xbf252000}, {0xbf254000}, {0xbf256000}, 
+    {0xbf258000}, {0xbf25a000}, {0xbf25c000}, {0xbf25e000}, 
+    {0xbf260000}, {0xbf262000}, {0xbf264000}, {0xbf266000}, 
+    {0xbf268000}, {0xbf26a000}, {0xbf26c000}, {0xbf26e000}, 
+    {0xbf270000}, {0xbf272000}, {0xbf274000}, {0xbf276000}, 
+    {0xbf278000}, {0xbf27a000}, {0xbf27c000}, {0xbf27e000}, 
+    {0xbf280000}, {0xbf282000}, {0xbf284000}, {0xbf286000}, 
+    {0xbf288000}, {0xbf28a000}, {0xbf28c000}, {0xbf28e000}, 
+    {0xbf290000}, {0xbf292000}, {0xbf294000}, {0xbf296000}, 
+    {0xbf298000}, {0xbf29a000}, {0xbf29c000}, {0xbf29e000}, 
+    {0xbf2a0000}, {0xbf2a2000}, {0xbf2a4000}, {0xbf2a6000}, 
+    {0xbf2a8000}, {0xbf2aa000}, {0xbf2ac000}, {0xbf2ae000}, 
+    {0xbf2b0000}, {0xbf2b2000}, {0xbf2b4000}, {0xbf2b6000}, 
+    {0xbf2b8000}, {0xbf2ba000}, {0xbf2bc000}, {0xbf2be000}, 
+    {0xbf2c0000}, {0xbf2c2000}, {0xbf2c4000}, {0xbf2c6000}, 
+    {0xbf2c8000}, {0xbf2ca000}, {0xbf2cc000}, {0xbf2ce000}, 
+    {0xbf2d0000}, {0xbf2d2000}, {0xbf2d4000}, {0xbf2d6000}, 
+    {0xbf2d8000}, {0xbf2da000}, {0xbf2dc000}, {0xbf2de000}, 
+    {0xbf2e0000}, {0xbf2e2000}, {0xbf2e4000}, {0xbf2e6000}, 
+    {0xbf2e8000}, {0xbf2ea000}, {0xbf2ec000}, {0xbf2ee000}, 
+    {0xbf2f0000}, {0xbf2f2000}, {0xbf2f4000}, {0xbf2f6000}, 
+    {0xbf2f8000}, {0xbf2fa000}, {0xbf2fc000}, {0xbf2fe000}, 
+    {0xbf300000}, {0xbf302000}, {0xbf304000}, {0xbf306000}, 
+    {0xbf308000}, {0xbf30a000}, {0xbf30c000}, {0xbf30e000}, 
+    {0xbf310000}, {0xbf312000}, {0xbf314000}, {0xbf316000}, 
+    {0xbf318000}, {0xbf31a000}, {0xbf31c000}, {0xbf31e000}, 
+    {0xbf320000}, {0xbf322000}, {0xbf324000}, {0xbf326000}, 
+    {0xbf328000}, {0xbf32a000}, {0xbf32c000}, {0xbf32e000}, 
+    {0xbf330000}, {0xbf332000}, {0xbf334000}, {0xbf336000}, 
+    {0xbf338000}, {0xbf33a000}, {0xbf33c000}, {0xbf33e000}, 
+    {0xbf340000}, {0xbf342000}, {0xbf344000}, {0xbf346000}, 
+    {0xbf348000}, {0xbf34a000}, {0xbf34c000}, {0xbf34e000}, 
+    {0xbf350000}, {0xbf352000}, {0xbf354000}, {0xbf356000}, 
+    {0xbf358000}, {0xbf35a000}, {0xbf35c000}, {0xbf35e000}, 
+    {0xbf360000}, {0xbf362000}, {0xbf364000}, {0xbf366000}, 
+    {0xbf368000}, {0xbf36a000}, {0xbf36c000}, {0xbf36e000}, 
+    {0xbf370000}, {0xbf372000}, {0xbf374000}, {0xbf376000}, 
+    {0xbf378000}, {0xbf37a000}, {0xbf37c000}, {0xbf37e000}, 
+    {0xbf380000}, {0xbf382000}, {0xbf384000}, {0xbf386000}, 
+    {0xbf388000}, {0xbf38a000}, {0xbf38c000}, {0xbf38e000}, 
+    {0xbf390000}, {0xbf392000}, {0xbf394000}, {0xbf396000}, 
+    {0xbf398000}, {0xbf39a000}, {0xbf39c000}, {0xbf39e000}, 
+    {0xbf3a0000}, {0xbf3a2000}, {0xbf3a4000}, {0xbf3a6000}, 
+    {0xbf3a8000}, {0xbf3aa000}, {0xbf3ac000}, {0xbf3ae000}, 
+    {0xbf3b0000}, {0xbf3b2000}, {0xbf3b4000}, {0xbf3b6000}, 
+    {0xbf3b8000}, {0xbf3ba000}, {0xbf3bc000}, {0xbf3be000}, 
+    {0xbf3c0000}, {0xbf3c2000}, {0xbf3c4000}, {0xbf3c6000}, 
+    {0xbf3c8000}, {0xbf3ca000}, {0xbf3cc000}, {0xbf3ce000}, 
+    {0xbf3d0000}, {0xbf3d2000}, {0xbf3d4000}, {0xbf3d6000}, 
+    {0xbf3d8000}, {0xbf3da000}, {0xbf3dc000}, {0xbf3de000}, 
+    {0xbf3e0000}, {0xbf3e2000}, {0xbf3e4000}, {0xbf3e6000}, 
+    {0xbf3e8000}, {0xbf3ea000}, {0xbf3ec000}, {0xbf3ee000}, 
+    {0xbf3f0000}, {0xbf3f2000}, {0xbf3f4000}, {0xbf3f6000}, 
+    {0xbf3f8000}, {0xbf3fa000}, {0xbf3fc000}, {0xbf3fe000}, 
+    {0xbf400000}, {0xbf402000}, {0xbf404000}, {0xbf406000}, 
+    {0xbf408000}, {0xbf40a000}, {0xbf40c000}, {0xbf40e000}, 
+    {0xbf410000}, {0xbf412000}, {0xbf414000}, {0xbf416000}, 
+    {0xbf418000}, {0xbf41a000}, {0xbf41c000}, {0xbf41e000}, 
+    {0xbf420000}, {0xbf422000}, {0xbf424000}, {0xbf426000}, 
+    {0xbf428000}, {0xbf42a000}, {0xbf42c000}, {0xbf42e000}, 
+    {0xbf430000}, {0xbf432000}, {0xbf434000}, {0xbf436000}, 
+    {0xbf438000}, {0xbf43a000}, {0xbf43c000}, {0xbf43e000}, 
+    {0xbf440000}, {0xbf442000}, {0xbf444000}, {0xbf446000}, 
+    {0xbf448000}, {0xbf44a000}, {0xbf44c000}, {0xbf44e000}, 
+    {0xbf450000}, {0xbf452000}, {0xbf454000}, {0xbf456000}, 
+    {0xbf458000}, {0xbf45a000}, {0xbf45c000}, {0xbf45e000}, 
+    {0xbf460000}, {0xbf462000}, {0xbf464000}, {0xbf466000}, 
+    {0xbf468000}, {0xbf46a000}, {0xbf46c000}, {0xbf46e000}, 
+    {0xbf470000}, {0xbf472000}, {0xbf474000}, {0xbf476000}, 
+    {0xbf478000}, {0xbf47a000}, {0xbf47c000}, {0xbf47e000}, 
+    {0xbf480000}, {0xbf482000}, {0xbf484000}, {0xbf486000}, 
+    {0xbf488000}, {0xbf48a000}, {0xbf48c000}, {0xbf48e000}, 
+    {0xbf490000}, {0xbf492000}, {0xbf494000}, {0xbf496000}, 
+    {0xbf498000}, {0xbf49a000}, {0xbf49c000}, {0xbf49e000}, 
+    {0xbf4a0000}, {0xbf4a2000}, {0xbf4a4000}, {0xbf4a6000}, 
+    {0xbf4a8000}, {0xbf4aa000}, {0xbf4ac000}, {0xbf4ae000}, 
+    {0xbf4b0000}, {0xbf4b2000}, {0xbf4b4000}, {0xbf4b6000}, 
+    {0xbf4b8000}, {0xbf4ba000}, {0xbf4bc000}, {0xbf4be000}, 
+    {0xbf4c0000}, {0xbf4c2000}, {0xbf4c4000}, {0xbf4c6000}, 
+    {0xbf4c8000}, {0xbf4ca000}, {0xbf4cc000}, {0xbf4ce000}, 
+    {0xbf4d0000}, {0xbf4d2000}, {0xbf4d4000}, {0xbf4d6000}, 
+    {0xbf4d8000}, {0xbf4da000}, {0xbf4dc000}, {0xbf4de000}, 
+    {0xbf4e0000}, {0xbf4e2000}, {0xbf4e4000}, {0xbf4e6000}, 
+    {0xbf4e8000}, {0xbf4ea000}, {0xbf4ec000}, {0xbf4ee000}, 
+    {0xbf4f0000}, {0xbf4f2000}, {0xbf4f4000}, {0xbf4f6000}, 
+    {0xbf4f8000}, {0xbf4fa000}, {0xbf4fc000}, {0xbf4fe000}, 
+    {0xbf500000}, {0xbf502000}, {0xbf504000}, {0xbf506000}, 
+    {0xbf508000}, {0xbf50a000}, {0xbf50c000}, {0xbf50e000}, 
+    {0xbf510000}, {0xbf512000}, {0xbf514000}, {0xbf516000}, 
+    {0xbf518000}, {0xbf51a000}, {0xbf51c000}, {0xbf51e000}, 
+    {0xbf520000}, {0xbf522000}, {0xbf524000}, {0xbf526000}, 
+    {0xbf528000}, {0xbf52a000}, {0xbf52c000}, {0xbf52e000}, 
+    {0xbf530000}, {0xbf532000}, {0xbf534000}, {0xbf536000}, 
+    {0xbf538000}, {0xbf53a000}, {0xbf53c000}, {0xbf53e000}, 
+    {0xbf540000}, {0xbf542000}, {0xbf544000}, {0xbf546000}, 
+    {0xbf548000}, {0xbf54a000}, {0xbf54c000}, {0xbf54e000}, 
+    {0xbf550000}, {0xbf552000}, {0xbf554000}, {0xbf556000}, 
+    {0xbf558000}, {0xbf55a000}, {0xbf55c000}, {0xbf55e000}, 
+    {0xbf560000}, {0xbf562000}, {0xbf564000}, {0xbf566000}, 
+    {0xbf568000}, {0xbf56a000}, {0xbf56c000}, {0xbf56e000}, 
+    {0xbf570000}, {0xbf572000}, {0xbf574000}, {0xbf576000}, 
+    {0xbf578000}, {0xbf57a000}, {0xbf57c000}, {0xbf57e000}, 
+    {0xbf580000}, {0xbf582000}, {0xbf584000}, {0xbf586000}, 
+    {0xbf588000}, {0xbf58a000}, {0xbf58c000}, {0xbf58e000}, 
+    {0xbf590000}, {0xbf592000}, {0xbf594000}, {0xbf596000}, 
+    {0xbf598000}, {0xbf59a000}, {0xbf59c000}, {0xbf59e000}, 
+    {0xbf5a0000}, {0xbf5a2000}, {0xbf5a4000}, {0xbf5a6000}, 
+    {0xbf5a8000}, {0xbf5aa000}, {0xbf5ac000}, {0xbf5ae000}, 
+    {0xbf5b0000}, {0xbf5b2000}, {0xbf5b4000}, {0xbf5b6000}, 
+    {0xbf5b8000}, {0xbf5ba000}, {0xbf5bc000}, {0xbf5be000}, 
+    {0xbf5c0000}, {0xbf5c2000}, {0xbf5c4000}, {0xbf5c6000}, 
+    {0xbf5c8000}, {0xbf5ca000}, {0xbf5cc000}, {0xbf5ce000}, 
+    {0xbf5d0000}, {0xbf5d2000}, {0xbf5d4000}, {0xbf5d6000}, 
+    {0xbf5d8000}, {0xbf5da000}, {0xbf5dc000}, {0xbf5de000}, 
+    {0xbf5e0000}, {0xbf5e2000}, {0xbf5e4000}, {0xbf5e6000}, 
+    {0xbf5e8000}, {0xbf5ea000}, {0xbf5ec000}, {0xbf5ee000}, 
+    {0xbf5f0000}, {0xbf5f2000}, {0xbf5f4000}, {0xbf5f6000}, 
+    {0xbf5f8000}, {0xbf5fa000}, {0xbf5fc000}, {0xbf5fe000}, 
+    {0xbf600000}, {0xbf602000}, {0xbf604000}, {0xbf606000}, 
+    {0xbf608000}, {0xbf60a000}, {0xbf60c000}, {0xbf60e000}, 
+    {0xbf610000}, {0xbf612000}, {0xbf614000}, {0xbf616000}, 
+    {0xbf618000}, {0xbf61a000}, {0xbf61c000}, {0xbf61e000}, 
+    {0xbf620000}, {0xbf622000}, {0xbf624000}, {0xbf626000}, 
+    {0xbf628000}, {0xbf62a000}, {0xbf62c000}, {0xbf62e000}, 
+    {0xbf630000}, {0xbf632000}, {0xbf634000}, {0xbf636000}, 
+    {0xbf638000}, {0xbf63a000}, {0xbf63c000}, {0xbf63e000}, 
+    {0xbf640000}, {0xbf642000}, {0xbf644000}, {0xbf646000}, 
+    {0xbf648000}, {0xbf64a000}, {0xbf64c000}, {0xbf64e000}, 
+    {0xbf650000}, {0xbf652000}, {0xbf654000}, {0xbf656000}, 
+    {0xbf658000}, {0xbf65a000}, {0xbf65c000}, {0xbf65e000}, 
+    {0xbf660000}, {0xbf662000}, {0xbf664000}, {0xbf666000}, 
+    {0xbf668000}, {0xbf66a000}, {0xbf66c000}, {0xbf66e000}, 
+    {0xbf670000}, {0xbf672000}, {0xbf674000}, {0xbf676000}, 
+    {0xbf678000}, {0xbf67a000}, {0xbf67c000}, {0xbf67e000}, 
+    {0xbf680000}, {0xbf682000}, {0xbf684000}, {0xbf686000}, 
+    {0xbf688000}, {0xbf68a000}, {0xbf68c000}, {0xbf68e000}, 
+    {0xbf690000}, {0xbf692000}, {0xbf694000}, {0xbf696000}, 
+    {0xbf698000}, {0xbf69a000}, {0xbf69c000}, {0xbf69e000}, 
+    {0xbf6a0000}, {0xbf6a2000}, {0xbf6a4000}, {0xbf6a6000}, 
+    {0xbf6a8000}, {0xbf6aa000}, {0xbf6ac000}, {0xbf6ae000}, 
+    {0xbf6b0000}, {0xbf6b2000}, {0xbf6b4000}, {0xbf6b6000}, 
+    {0xbf6b8000}, {0xbf6ba000}, {0xbf6bc000}, {0xbf6be000}, 
+    {0xbf6c0000}, {0xbf6c2000}, {0xbf6c4000}, {0xbf6c6000}, 
+    {0xbf6c8000}, {0xbf6ca000}, {0xbf6cc000}, {0xbf6ce000}, 
+    {0xbf6d0000}, {0xbf6d2000}, {0xbf6d4000}, {0xbf6d6000}, 
+    {0xbf6d8000}, {0xbf6da000}, {0xbf6dc000}, {0xbf6de000}, 
+    {0xbf6e0000}, {0xbf6e2000}, {0xbf6e4000}, {0xbf6e6000}, 
+    {0xbf6e8000}, {0xbf6ea000}, {0xbf6ec000}, {0xbf6ee000}, 
+    {0xbf6f0000}, {0xbf6f2000}, {0xbf6f4000}, {0xbf6f6000}, 
+    {0xbf6f8000}, {0xbf6fa000}, {0xbf6fc000}, {0xbf6fe000}, 
+    {0xbf700000}, {0xbf702000}, {0xbf704000}, {0xbf706000}, 
+    {0xbf708000}, {0xbf70a000}, {0xbf70c000}, {0xbf70e000}, 
+    {0xbf710000}, {0xbf712000}, {0xbf714000}, {0xbf716000}, 
+    {0xbf718000}, {0xbf71a000}, {0xbf71c000}, {0xbf71e000}, 
+    {0xbf720000}, {0xbf722000}, {0xbf724000}, {0xbf726000}, 
+    {0xbf728000}, {0xbf72a000}, {0xbf72c000}, {0xbf72e000}, 
+    {0xbf730000}, {0xbf732000}, {0xbf734000}, {0xbf736000}, 
+    {0xbf738000}, {0xbf73a000}, {0xbf73c000}, {0xbf73e000}, 
+    {0xbf740000}, {0xbf742000}, {0xbf744000}, {0xbf746000}, 
+    {0xbf748000}, {0xbf74a000}, {0xbf74c000}, {0xbf74e000}, 
+    {0xbf750000}, {0xbf752000}, {0xbf754000}, {0xbf756000}, 
+    {0xbf758000}, {0xbf75a000}, {0xbf75c000}, {0xbf75e000}, 
+    {0xbf760000}, {0xbf762000}, {0xbf764000}, {0xbf766000}, 
+    {0xbf768000}, {0xbf76a000}, {0xbf76c000}, {0xbf76e000}, 
+    {0xbf770000}, {0xbf772000}, {0xbf774000}, {0xbf776000}, 
+    {0xbf778000}, {0xbf77a000}, {0xbf77c000}, {0xbf77e000}, 
+    {0xbf780000}, {0xbf782000}, {0xbf784000}, {0xbf786000}, 
+    {0xbf788000}, {0xbf78a000}, {0xbf78c000}, {0xbf78e000}, 
+    {0xbf790000}, {0xbf792000}, {0xbf794000}, {0xbf796000}, 
+    {0xbf798000}, {0xbf79a000}, {0xbf79c000}, {0xbf79e000}, 
+    {0xbf7a0000}, {0xbf7a2000}, {0xbf7a4000}, {0xbf7a6000}, 
+    {0xbf7a8000}, {0xbf7aa000}, {0xbf7ac000}, {0xbf7ae000}, 
+    {0xbf7b0000}, {0xbf7b2000}, {0xbf7b4000}, {0xbf7b6000}, 
+    {0xbf7b8000}, {0xbf7ba000}, {0xbf7bc000}, {0xbf7be000}, 
+    {0xbf7c0000}, {0xbf7c2000}, {0xbf7c4000}, {0xbf7c6000}, 
+    {0xbf7c8000}, {0xbf7ca000}, {0xbf7cc000}, {0xbf7ce000}, 
+    {0xbf7d0000}, {0xbf7d2000}, {0xbf7d4000}, {0xbf7d6000}, 
+    {0xbf7d8000}, {0xbf7da000}, {0xbf7dc000}, {0xbf7de000}, 
+    {0xbf7e0000}, {0xbf7e2000}, {0xbf7e4000}, {0xbf7e6000}, 
+    {0xbf7e8000}, {0xbf7ea000}, {0xbf7ec000}, {0xbf7ee000}, 
+    {0xbf7f0000}, {0xbf7f2000}, {0xbf7f4000}, {0xbf7f6000}, 
+    {0xbf7f8000}, {0xbf7fa000}, {0xbf7fc000}, {0xbf7fe000}, 
+    {0xbf800000}, {0xbf802000}, {0xbf804000}, {0xbf806000}, 
+    {0xbf808000}, {0xbf80a000}, {0xbf80c000}, {0xbf80e000}, 
+    {0xbf810000}, {0xbf812000}, {0xbf814000}, {0xbf816000}, 
+    {0xbf818000}, {0xbf81a000}, {0xbf81c000}, {0xbf81e000}, 
+    {0xbf820000}, {0xbf822000}, {0xbf824000}, {0xbf826000}, 
+    {0xbf828000}, {0xbf82a000}, {0xbf82c000}, {0xbf82e000}, 
+    {0xbf830000}, {0xbf832000}, {0xbf834000}, {0xbf836000}, 
+    {0xbf838000}, {0xbf83a000}, {0xbf83c000}, {0xbf83e000}, 
+    {0xbf840000}, {0xbf842000}, {0xbf844000}, {0xbf846000}, 
+    {0xbf848000}, {0xbf84a000}, {0xbf84c000}, {0xbf84e000}, 
+    {0xbf850000}, {0xbf852000}, {0xbf854000}, {0xbf856000}, 
+    {0xbf858000}, {0xbf85a000}, {0xbf85c000}, {0xbf85e000}, 
+    {0xbf860000}, {0xbf862000}, {0xbf864000}, {0xbf866000}, 
+    {0xbf868000}, {0xbf86a000}, {0xbf86c000}, {0xbf86e000}, 
+    {0xbf870000}, {0xbf872000}, {0xbf874000}, {0xbf876000}, 
+    {0xbf878000}, {0xbf87a000}, {0xbf87c000}, {0xbf87e000}, 
+    {0xbf880000}, {0xbf882000}, {0xbf884000}, {0xbf886000}, 
+    {0xbf888000}, {0xbf88a000}, {0xbf88c000}, {0xbf88e000}, 
+    {0xbf890000}, {0xbf892000}, {0xbf894000}, {0xbf896000}, 
+    {0xbf898000}, {0xbf89a000}, {0xbf89c000}, {0xbf89e000}, 
+    {0xbf8a0000}, {0xbf8a2000}, {0xbf8a4000}, {0xbf8a6000}, 
+    {0xbf8a8000}, {0xbf8aa000}, {0xbf8ac000}, {0xbf8ae000}, 
+    {0xbf8b0000}, {0xbf8b2000}, {0xbf8b4000}, {0xbf8b6000}, 
+    {0xbf8b8000}, {0xbf8ba000}, {0xbf8bc000}, {0xbf8be000}, 
+    {0xbf8c0000}, {0xbf8c2000}, {0xbf8c4000}, {0xbf8c6000}, 
+    {0xbf8c8000}, {0xbf8ca000}, {0xbf8cc000}, {0xbf8ce000}, 
+    {0xbf8d0000}, {0xbf8d2000}, {0xbf8d4000}, {0xbf8d6000}, 
+    {0xbf8d8000}, {0xbf8da000}, {0xbf8dc000}, {0xbf8de000}, 
+    {0xbf8e0000}, {0xbf8e2000}, {0xbf8e4000}, {0xbf8e6000}, 
+    {0xbf8e8000}, {0xbf8ea000}, {0xbf8ec000}, {0xbf8ee000}, 
+    {0xbf8f0000}, {0xbf8f2000}, {0xbf8f4000}, {0xbf8f6000}, 
+    {0xbf8f8000}, {0xbf8fa000}, {0xbf8fc000}, {0xbf8fe000}, 
+    {0xbf900000}, {0xbf902000}, {0xbf904000}, {0xbf906000}, 
+    {0xbf908000}, {0xbf90a000}, {0xbf90c000}, {0xbf90e000}, 
+    {0xbf910000}, {0xbf912000}, {0xbf914000}, {0xbf916000}, 
+    {0xbf918000}, {0xbf91a000}, {0xbf91c000}, {0xbf91e000}, 
+    {0xbf920000}, {0xbf922000}, {0xbf924000}, {0xbf926000}, 
+    {0xbf928000}, {0xbf92a000}, {0xbf92c000}, {0xbf92e000}, 
+    {0xbf930000}, {0xbf932000}, {0xbf934000}, {0xbf936000}, 
+    {0xbf938000}, {0xbf93a000}, {0xbf93c000}, {0xbf93e000}, 
+    {0xbf940000}, {0xbf942000}, {0xbf944000}, {0xbf946000}, 
+    {0xbf948000}, {0xbf94a000}, {0xbf94c000}, {0xbf94e000}, 
+    {0xbf950000}, {0xbf952000}, {0xbf954000}, {0xbf956000}, 
+    {0xbf958000}, {0xbf95a000}, {0xbf95c000}, {0xbf95e000}, 
+    {0xbf960000}, {0xbf962000}, {0xbf964000}, {0xbf966000}, 
+    {0xbf968000}, {0xbf96a000}, {0xbf96c000}, {0xbf96e000}, 
+    {0xbf970000}, {0xbf972000}, {0xbf974000}, {0xbf976000}, 
+    {0xbf978000}, {0xbf97a000}, {0xbf97c000}, {0xbf97e000}, 
+    {0xbf980000}, {0xbf982000}, {0xbf984000}, {0xbf986000}, 
+    {0xbf988000}, {0xbf98a000}, {0xbf98c000}, {0xbf98e000}, 
+    {0xbf990000}, {0xbf992000}, {0xbf994000}, {0xbf996000}, 
+    {0xbf998000}, {0xbf99a000}, {0xbf99c000}, {0xbf99e000}, 
+    {0xbf9a0000}, {0xbf9a2000}, {0xbf9a4000}, {0xbf9a6000}, 
+    {0xbf9a8000}, {0xbf9aa000}, {0xbf9ac000}, {0xbf9ae000}, 
+    {0xbf9b0000}, {0xbf9b2000}, {0xbf9b4000}, {0xbf9b6000}, 
+    {0xbf9b8000}, {0xbf9ba000}, {0xbf9bc000}, {0xbf9be000}, 
+    {0xbf9c0000}, {0xbf9c2000}, {0xbf9c4000}, {0xbf9c6000}, 
+    {0xbf9c8000}, {0xbf9ca000}, {0xbf9cc000}, {0xbf9ce000}, 
+    {0xbf9d0000}, {0xbf9d2000}, {0xbf9d4000}, {0xbf9d6000}, 
+    {0xbf9d8000}, {0xbf9da000}, {0xbf9dc000}, {0xbf9de000}, 
+    {0xbf9e0000}, {0xbf9e2000}, {0xbf9e4000}, {0xbf9e6000}, 
+    {0xbf9e8000}, {0xbf9ea000}, {0xbf9ec000}, {0xbf9ee000}, 
+    {0xbf9f0000}, {0xbf9f2000}, {0xbf9f4000}, {0xbf9f6000}, 
+    {0xbf9f8000}, {0xbf9fa000}, {0xbf9fc000}, {0xbf9fe000}, 
+    {0xbfa00000}, {0xbfa02000}, {0xbfa04000}, {0xbfa06000}, 
+    {0xbfa08000}, {0xbfa0a000}, {0xbfa0c000}, {0xbfa0e000}, 
+    {0xbfa10000}, {0xbfa12000}, {0xbfa14000}, {0xbfa16000}, 
+    {0xbfa18000}, {0xbfa1a000}, {0xbfa1c000}, {0xbfa1e000}, 
+    {0xbfa20000}, {0xbfa22000}, {0xbfa24000}, {0xbfa26000}, 
+    {0xbfa28000}, {0xbfa2a000}, {0xbfa2c000}, {0xbfa2e000}, 
+    {0xbfa30000}, {0xbfa32000}, {0xbfa34000}, {0xbfa36000}, 
+    {0xbfa38000}, {0xbfa3a000}, {0xbfa3c000}, {0xbfa3e000}, 
+    {0xbfa40000}, {0xbfa42000}, {0xbfa44000}, {0xbfa46000}, 
+    {0xbfa48000}, {0xbfa4a000}, {0xbfa4c000}, {0xbfa4e000}, 
+    {0xbfa50000}, {0xbfa52000}, {0xbfa54000}, {0xbfa56000}, 
+    {0xbfa58000}, {0xbfa5a000}, {0xbfa5c000}, {0xbfa5e000}, 
+    {0xbfa60000}, {0xbfa62000}, {0xbfa64000}, {0xbfa66000}, 
+    {0xbfa68000}, {0xbfa6a000}, {0xbfa6c000}, {0xbfa6e000}, 
+    {0xbfa70000}, {0xbfa72000}, {0xbfa74000}, {0xbfa76000}, 
+    {0xbfa78000}, {0xbfa7a000}, {0xbfa7c000}, {0xbfa7e000}, 
+    {0xbfa80000}, {0xbfa82000}, {0xbfa84000}, {0xbfa86000}, 
+    {0xbfa88000}, {0xbfa8a000}, {0xbfa8c000}, {0xbfa8e000}, 
+    {0xbfa90000}, {0xbfa92000}, {0xbfa94000}, {0xbfa96000}, 
+    {0xbfa98000}, {0xbfa9a000}, {0xbfa9c000}, {0xbfa9e000}, 
+    {0xbfaa0000}, {0xbfaa2000}, {0xbfaa4000}, {0xbfaa6000}, 
+    {0xbfaa8000}, {0xbfaaa000}, {0xbfaac000}, {0xbfaae000}, 
+    {0xbfab0000}, {0xbfab2000}, {0xbfab4000}, {0xbfab6000}, 
+    {0xbfab8000}, {0xbfaba000}, {0xbfabc000}, {0xbfabe000}, 
+    {0xbfac0000}, {0xbfac2000}, {0xbfac4000}, {0xbfac6000}, 
+    {0xbfac8000}, {0xbfaca000}, {0xbfacc000}, {0xbface000}, 
+    {0xbfad0000}, {0xbfad2000}, {0xbfad4000}, {0xbfad6000}, 
+    {0xbfad8000}, {0xbfada000}, {0xbfadc000}, {0xbfade000}, 
+    {0xbfae0000}, {0xbfae2000}, {0xbfae4000}, {0xbfae6000}, 
+    {0xbfae8000}, {0xbfaea000}, {0xbfaec000}, {0xbfaee000}, 
+    {0xbfaf0000}, {0xbfaf2000}, {0xbfaf4000}, {0xbfaf6000}, 
+    {0xbfaf8000}, {0xbfafa000}, {0xbfafc000}, {0xbfafe000}, 
+    {0xbfb00000}, {0xbfb02000}, {0xbfb04000}, {0xbfb06000}, 
+    {0xbfb08000}, {0xbfb0a000}, {0xbfb0c000}, {0xbfb0e000}, 
+    {0xbfb10000}, {0xbfb12000}, {0xbfb14000}, {0xbfb16000}, 
+    {0xbfb18000}, {0xbfb1a000}, {0xbfb1c000}, {0xbfb1e000}, 
+    {0xbfb20000}, {0xbfb22000}, {0xbfb24000}, {0xbfb26000}, 
+    {0xbfb28000}, {0xbfb2a000}, {0xbfb2c000}, {0xbfb2e000}, 
+    {0xbfb30000}, {0xbfb32000}, {0xbfb34000}, {0xbfb36000}, 
+    {0xbfb38000}, {0xbfb3a000}, {0xbfb3c000}, {0xbfb3e000}, 
+    {0xbfb40000}, {0xbfb42000}, {0xbfb44000}, {0xbfb46000}, 
+    {0xbfb48000}, {0xbfb4a000}, {0xbfb4c000}, {0xbfb4e000}, 
+    {0xbfb50000}, {0xbfb52000}, {0xbfb54000}, {0xbfb56000}, 
+    {0xbfb58000}, {0xbfb5a000}, {0xbfb5c000}, {0xbfb5e000}, 
+    {0xbfb60000}, {0xbfb62000}, {0xbfb64000}, {0xbfb66000}, 
+    {0xbfb68000}, {0xbfb6a000}, {0xbfb6c000}, {0xbfb6e000}, 
+    {0xbfb70000}, {0xbfb72000}, {0xbfb74000}, {0xbfb76000}, 
+    {0xbfb78000}, {0xbfb7a000}, {0xbfb7c000}, {0xbfb7e000}, 
+    {0xbfb80000}, {0xbfb82000}, {0xbfb84000}, {0xbfb86000}, 
+    {0xbfb88000}, {0xbfb8a000}, {0xbfb8c000}, {0xbfb8e000}, 
+    {0xbfb90000}, {0xbfb92000}, {0xbfb94000}, {0xbfb96000}, 
+    {0xbfb98000}, {0xbfb9a000}, {0xbfb9c000}, {0xbfb9e000}, 
+    {0xbfba0000}, {0xbfba2000}, {0xbfba4000}, {0xbfba6000}, 
+    {0xbfba8000}, {0xbfbaa000}, {0xbfbac000}, {0xbfbae000}, 
+    {0xbfbb0000}, {0xbfbb2000}, {0xbfbb4000}, {0xbfbb6000}, 
+    {0xbfbb8000}, {0xbfbba000}, {0xbfbbc000}, {0xbfbbe000}, 
+    {0xbfbc0000}, {0xbfbc2000}, {0xbfbc4000}, {0xbfbc6000}, 
+    {0xbfbc8000}, {0xbfbca000}, {0xbfbcc000}, {0xbfbce000}, 
+    {0xbfbd0000}, {0xbfbd2000}, {0xbfbd4000}, {0xbfbd6000}, 
+    {0xbfbd8000}, {0xbfbda000}, {0xbfbdc000}, {0xbfbde000}, 
+    {0xbfbe0000}, {0xbfbe2000}, {0xbfbe4000}, {0xbfbe6000}, 
+    {0xbfbe8000}, {0xbfbea000}, {0xbfbec000}, {0xbfbee000}, 
+    {0xbfbf0000}, {0xbfbf2000}, {0xbfbf4000}, {0xbfbf6000}, 
+    {0xbfbf8000}, {0xbfbfa000}, {0xbfbfc000}, {0xbfbfe000}, 
+    {0xbfc00000}, {0xbfc02000}, {0xbfc04000}, {0xbfc06000}, 
+    {0xbfc08000}, {0xbfc0a000}, {0xbfc0c000}, {0xbfc0e000}, 
+    {0xbfc10000}, {0xbfc12000}, {0xbfc14000}, {0xbfc16000}, 
+    {0xbfc18000}, {0xbfc1a000}, {0xbfc1c000}, {0xbfc1e000}, 
+    {0xbfc20000}, {0xbfc22000}, {0xbfc24000}, {0xbfc26000}, 
+    {0xbfc28000}, {0xbfc2a000}, {0xbfc2c000}, {0xbfc2e000}, 
+    {0xbfc30000}, {0xbfc32000}, {0xbfc34000}, {0xbfc36000}, 
+    {0xbfc38000}, {0xbfc3a000}, {0xbfc3c000}, {0xbfc3e000}, 
+    {0xbfc40000}, {0xbfc42000}, {0xbfc44000}, {0xbfc46000}, 
+    {0xbfc48000}, {0xbfc4a000}, {0xbfc4c000}, {0xbfc4e000}, 
+    {0xbfc50000}, {0xbfc52000}, {0xbfc54000}, {0xbfc56000}, 
+    {0xbfc58000}, {0xbfc5a000}, {0xbfc5c000}, {0xbfc5e000}, 
+    {0xbfc60000}, {0xbfc62000}, {0xbfc64000}, {0xbfc66000}, 
+    {0xbfc68000}, {0xbfc6a000}, {0xbfc6c000}, {0xbfc6e000}, 
+    {0xbfc70000}, {0xbfc72000}, {0xbfc74000}, {0xbfc76000}, 
+    {0xbfc78000}, {0xbfc7a000}, {0xbfc7c000}, {0xbfc7e000}, 
+    {0xbfc80000}, {0xbfc82000}, {0xbfc84000}, {0xbfc86000}, 
+    {0xbfc88000}, {0xbfc8a000}, {0xbfc8c000}, {0xbfc8e000}, 
+    {0xbfc90000}, {0xbfc92000}, {0xbfc94000}, {0xbfc96000}, 
+    {0xbfc98000}, {0xbfc9a000}, {0xbfc9c000}, {0xbfc9e000}, 
+    {0xbfca0000}, {0xbfca2000}, {0xbfca4000}, {0xbfca6000}, 
+    {0xbfca8000}, {0xbfcaa000}, {0xbfcac000}, {0xbfcae000}, 
+    {0xbfcb0000}, {0xbfcb2000}, {0xbfcb4000}, {0xbfcb6000}, 
+    {0xbfcb8000}, {0xbfcba000}, {0xbfcbc000}, {0xbfcbe000}, 
+    {0xbfcc0000}, {0xbfcc2000}, {0xbfcc4000}, {0xbfcc6000}, 
+    {0xbfcc8000}, {0xbfcca000}, {0xbfccc000}, {0xbfcce000}, 
+    {0xbfcd0000}, {0xbfcd2000}, {0xbfcd4000}, {0xbfcd6000}, 
+    {0xbfcd8000}, {0xbfcda000}, {0xbfcdc000}, {0xbfcde000}, 
+    {0xbfce0000}, {0xbfce2000}, {0xbfce4000}, {0xbfce6000}, 
+    {0xbfce8000}, {0xbfcea000}, {0xbfcec000}, {0xbfcee000}, 
+    {0xbfcf0000}, {0xbfcf2000}, {0xbfcf4000}, {0xbfcf6000}, 
+    {0xbfcf8000}, {0xbfcfa000}, {0xbfcfc000}, {0xbfcfe000}, 
+    {0xbfd00000}, {0xbfd02000}, {0xbfd04000}, {0xbfd06000}, 
+    {0xbfd08000}, {0xbfd0a000}, {0xbfd0c000}, {0xbfd0e000}, 
+    {0xbfd10000}, {0xbfd12000}, {0xbfd14000}, {0xbfd16000}, 
+    {0xbfd18000}, {0xbfd1a000}, {0xbfd1c000}, {0xbfd1e000}, 
+    {0xbfd20000}, {0xbfd22000}, {0xbfd24000}, {0xbfd26000}, 
+    {0xbfd28000}, {0xbfd2a000}, {0xbfd2c000}, {0xbfd2e000}, 
+    {0xbfd30000}, {0xbfd32000}, {0xbfd34000}, {0xbfd36000}, 
+    {0xbfd38000}, {0xbfd3a000}, {0xbfd3c000}, {0xbfd3e000}, 
+    {0xbfd40000}, {0xbfd42000}, {0xbfd44000}, {0xbfd46000}, 
+    {0xbfd48000}, {0xbfd4a000}, {0xbfd4c000}, {0xbfd4e000}, 
+    {0xbfd50000}, {0xbfd52000}, {0xbfd54000}, {0xbfd56000}, 
+    {0xbfd58000}, {0xbfd5a000}, {0xbfd5c000}, {0xbfd5e000}, 
+    {0xbfd60000}, {0xbfd62000}, {0xbfd64000}, {0xbfd66000}, 
+    {0xbfd68000}, {0xbfd6a000}, {0xbfd6c000}, {0xbfd6e000}, 
+    {0xbfd70000}, {0xbfd72000}, {0xbfd74000}, {0xbfd76000}, 
+    {0xbfd78000}, {0xbfd7a000}, {0xbfd7c000}, {0xbfd7e000}, 
+    {0xbfd80000}, {0xbfd82000}, {0xbfd84000}, {0xbfd86000}, 
+    {0xbfd88000}, {0xbfd8a000}, {0xbfd8c000}, {0xbfd8e000}, 
+    {0xbfd90000}, {0xbfd92000}, {0xbfd94000}, {0xbfd96000}, 
+    {0xbfd98000}, {0xbfd9a000}, {0xbfd9c000}, {0xbfd9e000}, 
+    {0xbfda0000}, {0xbfda2000}, {0xbfda4000}, {0xbfda6000}, 
+    {0xbfda8000}, {0xbfdaa000}, {0xbfdac000}, {0xbfdae000}, 
+    {0xbfdb0000}, {0xbfdb2000}, {0xbfdb4000}, {0xbfdb6000}, 
+    {0xbfdb8000}, {0xbfdba000}, {0xbfdbc000}, {0xbfdbe000}, 
+    {0xbfdc0000}, {0xbfdc2000}, {0xbfdc4000}, {0xbfdc6000}, 
+    {0xbfdc8000}, {0xbfdca000}, {0xbfdcc000}, {0xbfdce000}, 
+    {0xbfdd0000}, {0xbfdd2000}, {0xbfdd4000}, {0xbfdd6000}, 
+    {0xbfdd8000}, {0xbfdda000}, {0xbfddc000}, {0xbfdde000}, 
+    {0xbfde0000}, {0xbfde2000}, {0xbfde4000}, {0xbfde6000}, 
+    {0xbfde8000}, {0xbfdea000}, {0xbfdec000}, {0xbfdee000}, 
+    {0xbfdf0000}, {0xbfdf2000}, {0xbfdf4000}, {0xbfdf6000}, 
+    {0xbfdf8000}, {0xbfdfa000}, {0xbfdfc000}, {0xbfdfe000}, 
+    {0xbfe00000}, {0xbfe02000}, {0xbfe04000}, {0xbfe06000}, 
+    {0xbfe08000}, {0xbfe0a000}, {0xbfe0c000}, {0xbfe0e000}, 
+    {0xbfe10000}, {0xbfe12000}, {0xbfe14000}, {0xbfe16000}, 
+    {0xbfe18000}, {0xbfe1a000}, {0xbfe1c000}, {0xbfe1e000}, 
+    {0xbfe20000}, {0xbfe22000}, {0xbfe24000}, {0xbfe26000}, 
+    {0xbfe28000}, {0xbfe2a000}, {0xbfe2c000}, {0xbfe2e000}, 
+    {0xbfe30000}, {0xbfe32000}, {0xbfe34000}, {0xbfe36000}, 
+    {0xbfe38000}, {0xbfe3a000}, {0xbfe3c000}, {0xbfe3e000}, 
+    {0xbfe40000}, {0xbfe42000}, {0xbfe44000}, {0xbfe46000}, 
+    {0xbfe48000}, {0xbfe4a000}, {0xbfe4c000}, {0xbfe4e000}, 
+    {0xbfe50000}, {0xbfe52000}, {0xbfe54000}, {0xbfe56000}, 
+    {0xbfe58000}, {0xbfe5a000}, {0xbfe5c000}, {0xbfe5e000}, 
+    {0xbfe60000}, {0xbfe62000}, {0xbfe64000}, {0xbfe66000}, 
+    {0xbfe68000}, {0xbfe6a000}, {0xbfe6c000}, {0xbfe6e000}, 
+    {0xbfe70000}, {0xbfe72000}, {0xbfe74000}, {0xbfe76000}, 
+    {0xbfe78000}, {0xbfe7a000}, {0xbfe7c000}, {0xbfe7e000}, 
+    {0xbfe80000}, {0xbfe82000}, {0xbfe84000}, {0xbfe86000}, 
+    {0xbfe88000}, {0xbfe8a000}, {0xbfe8c000}, {0xbfe8e000}, 
+    {0xbfe90000}, {0xbfe92000}, {0xbfe94000}, {0xbfe96000}, 
+    {0xbfe98000}, {0xbfe9a000}, {0xbfe9c000}, {0xbfe9e000}, 
+    {0xbfea0000}, {0xbfea2000}, {0xbfea4000}, {0xbfea6000}, 
+    {0xbfea8000}, {0xbfeaa000}, {0xbfeac000}, {0xbfeae000}, 
+    {0xbfeb0000}, {0xbfeb2000}, {0xbfeb4000}, {0xbfeb6000}, 
+    {0xbfeb8000}, {0xbfeba000}, {0xbfebc000}, {0xbfebe000}, 
+    {0xbfec0000}, {0xbfec2000}, {0xbfec4000}, {0xbfec6000}, 
+    {0xbfec8000}, {0xbfeca000}, {0xbfecc000}, {0xbfece000}, 
+    {0xbfed0000}, {0xbfed2000}, {0xbfed4000}, {0xbfed6000}, 
+    {0xbfed8000}, {0xbfeda000}, {0xbfedc000}, {0xbfede000}, 
+    {0xbfee0000}, {0xbfee2000}, {0xbfee4000}, {0xbfee6000}, 
+    {0xbfee8000}, {0xbfeea000}, {0xbfeec000}, {0xbfeee000}, 
+    {0xbfef0000}, {0xbfef2000}, {0xbfef4000}, {0xbfef6000}, 
+    {0xbfef8000}, {0xbfefa000}, {0xbfefc000}, {0xbfefe000}, 
+    {0xbff00000}, {0xbff02000}, {0xbff04000}, {0xbff06000}, 
+    {0xbff08000}, {0xbff0a000}, {0xbff0c000}, {0xbff0e000}, 
+    {0xbff10000}, {0xbff12000}, {0xbff14000}, {0xbff16000}, 
+    {0xbff18000}, {0xbff1a000}, {0xbff1c000}, {0xbff1e000}, 
+    {0xbff20000}, {0xbff22000}, {0xbff24000}, {0xbff26000}, 
+    {0xbff28000}, {0xbff2a000}, {0xbff2c000}, {0xbff2e000}, 
+    {0xbff30000}, {0xbff32000}, {0xbff34000}, {0xbff36000}, 
+    {0xbff38000}, {0xbff3a000}, {0xbff3c000}, {0xbff3e000}, 
+    {0xbff40000}, {0xbff42000}, {0xbff44000}, {0xbff46000}, 
+    {0xbff48000}, {0xbff4a000}, {0xbff4c000}, {0xbff4e000}, 
+    {0xbff50000}, {0xbff52000}, {0xbff54000}, {0xbff56000}, 
+    {0xbff58000}, {0xbff5a000}, {0xbff5c000}, {0xbff5e000}, 
+    {0xbff60000}, {0xbff62000}, {0xbff64000}, {0xbff66000}, 
+    {0xbff68000}, {0xbff6a000}, {0xbff6c000}, {0xbff6e000}, 
+    {0xbff70000}, {0xbff72000}, {0xbff74000}, {0xbff76000}, 
+    {0xbff78000}, {0xbff7a000}, {0xbff7c000}, {0xbff7e000}, 
+    {0xbff80000}, {0xbff82000}, {0xbff84000}, {0xbff86000}, 
+    {0xbff88000}, {0xbff8a000}, {0xbff8c000}, {0xbff8e000}, 
+    {0xbff90000}, {0xbff92000}, {0xbff94000}, {0xbff96000}, 
+    {0xbff98000}, {0xbff9a000}, {0xbff9c000}, {0xbff9e000}, 
+    {0xbffa0000}, {0xbffa2000}, {0xbffa4000}, {0xbffa6000}, 
+    {0xbffa8000}, {0xbffaa000}, {0xbffac000}, {0xbffae000}, 
+    {0xbffb0000}, {0xbffb2000}, {0xbffb4000}, {0xbffb6000}, 
+    {0xbffb8000}, {0xbffba000}, {0xbffbc000}, {0xbffbe000}, 
+    {0xbffc0000}, {0xbffc2000}, {0xbffc4000}, {0xbffc6000}, 
+    {0xbffc8000}, {0xbffca000}, {0xbffcc000}, {0xbffce000}, 
+    {0xbffd0000}, {0xbffd2000}, {0xbffd4000}, {0xbffd6000}, 
+    {0xbffd8000}, {0xbffda000}, {0xbffdc000}, {0xbffde000}, 
+    {0xbffe0000}, {0xbffe2000}, {0xbffe4000}, {0xbffe6000}, 
+    {0xbffe8000}, {0xbffea000}, {0xbffec000}, {0xbffee000}, 
+    {0xbfff0000}, {0xbfff2000}, {0xbfff4000}, {0xbfff6000}, 
+    {0xbfff8000}, {0xbfffa000}, {0xbfffc000}, {0xbfffe000}, 
+    {0xc0000000}, {0xc0002000}, {0xc0004000}, {0xc0006000}, 
+    {0xc0008000}, {0xc000a000}, {0xc000c000}, {0xc000e000}, 
+    {0xc0010000}, {0xc0012000}, {0xc0014000}, {0xc0016000}, 
+    {0xc0018000}, {0xc001a000}, {0xc001c000}, {0xc001e000}, 
+    {0xc0020000}, {0xc0022000}, {0xc0024000}, {0xc0026000}, 
+    {0xc0028000}, {0xc002a000}, {0xc002c000}, {0xc002e000}, 
+    {0xc0030000}, {0xc0032000}, {0xc0034000}, {0xc0036000}, 
+    {0xc0038000}, {0xc003a000}, {0xc003c000}, {0xc003e000}, 
+    {0xc0040000}, {0xc0042000}, {0xc0044000}, {0xc0046000}, 
+    {0xc0048000}, {0xc004a000}, {0xc004c000}, {0xc004e000}, 
+    {0xc0050000}, {0xc0052000}, {0xc0054000}, {0xc0056000}, 
+    {0xc0058000}, {0xc005a000}, {0xc005c000}, {0xc005e000}, 
+    {0xc0060000}, {0xc0062000}, {0xc0064000}, {0xc0066000}, 
+    {0xc0068000}, {0xc006a000}, {0xc006c000}, {0xc006e000}, 
+    {0xc0070000}, {0xc0072000}, {0xc0074000}, {0xc0076000}, 
+    {0xc0078000}, {0xc007a000}, {0xc007c000}, {0xc007e000}, 
+    {0xc0080000}, {0xc0082000}, {0xc0084000}, {0xc0086000}, 
+    {0xc0088000}, {0xc008a000}, {0xc008c000}, {0xc008e000}, 
+    {0xc0090000}, {0xc0092000}, {0xc0094000}, {0xc0096000}, 
+    {0xc0098000}, {0xc009a000}, {0xc009c000}, {0xc009e000}, 
+    {0xc00a0000}, {0xc00a2000}, {0xc00a4000}, {0xc00a6000}, 
+    {0xc00a8000}, {0xc00aa000}, {0xc00ac000}, {0xc00ae000}, 
+    {0xc00b0000}, {0xc00b2000}, {0xc00b4000}, {0xc00b6000}, 
+    {0xc00b8000}, {0xc00ba000}, {0xc00bc000}, {0xc00be000}, 
+    {0xc00c0000}, {0xc00c2000}, {0xc00c4000}, {0xc00c6000}, 
+    {0xc00c8000}, {0xc00ca000}, {0xc00cc000}, {0xc00ce000}, 
+    {0xc00d0000}, {0xc00d2000}, {0xc00d4000}, {0xc00d6000}, 
+    {0xc00d8000}, {0xc00da000}, {0xc00dc000}, {0xc00de000}, 
+    {0xc00e0000}, {0xc00e2000}, {0xc00e4000}, {0xc00e6000}, 
+    {0xc00e8000}, {0xc00ea000}, {0xc00ec000}, {0xc00ee000}, 
+    {0xc00f0000}, {0xc00f2000}, {0xc00f4000}, {0xc00f6000}, 
+    {0xc00f8000}, {0xc00fa000}, {0xc00fc000}, {0xc00fe000}, 
+    {0xc0100000}, {0xc0102000}, {0xc0104000}, {0xc0106000}, 
+    {0xc0108000}, {0xc010a000}, {0xc010c000}, {0xc010e000}, 
+    {0xc0110000}, {0xc0112000}, {0xc0114000}, {0xc0116000}, 
+    {0xc0118000}, {0xc011a000}, {0xc011c000}, {0xc011e000}, 
+    {0xc0120000}, {0xc0122000}, {0xc0124000}, {0xc0126000}, 
+    {0xc0128000}, {0xc012a000}, {0xc012c000}, {0xc012e000}, 
+    {0xc0130000}, {0xc0132000}, {0xc0134000}, {0xc0136000}, 
+    {0xc0138000}, {0xc013a000}, {0xc013c000}, {0xc013e000}, 
+    {0xc0140000}, {0xc0142000}, {0xc0144000}, {0xc0146000}, 
+    {0xc0148000}, {0xc014a000}, {0xc014c000}, {0xc014e000}, 
+    {0xc0150000}, {0xc0152000}, {0xc0154000}, {0xc0156000}, 
+    {0xc0158000}, {0xc015a000}, {0xc015c000}, {0xc015e000}, 
+    {0xc0160000}, {0xc0162000}, {0xc0164000}, {0xc0166000}, 
+    {0xc0168000}, {0xc016a000}, {0xc016c000}, {0xc016e000}, 
+    {0xc0170000}, {0xc0172000}, {0xc0174000}, {0xc0176000}, 
+    {0xc0178000}, {0xc017a000}, {0xc017c000}, {0xc017e000}, 
+    {0xc0180000}, {0xc0182000}, {0xc0184000}, {0xc0186000}, 
+    {0xc0188000}, {0xc018a000}, {0xc018c000}, {0xc018e000}, 
+    {0xc0190000}, {0xc0192000}, {0xc0194000}, {0xc0196000}, 
+    {0xc0198000}, {0xc019a000}, {0xc019c000}, {0xc019e000}, 
+    {0xc01a0000}, {0xc01a2000}, {0xc01a4000}, {0xc01a6000}, 
+    {0xc01a8000}, {0xc01aa000}, {0xc01ac000}, {0xc01ae000}, 
+    {0xc01b0000}, {0xc01b2000}, {0xc01b4000}, {0xc01b6000}, 
+    {0xc01b8000}, {0xc01ba000}, {0xc01bc000}, {0xc01be000}, 
+    {0xc01c0000}, {0xc01c2000}, {0xc01c4000}, {0xc01c6000}, 
+    {0xc01c8000}, {0xc01ca000}, {0xc01cc000}, {0xc01ce000}, 
+    {0xc01d0000}, {0xc01d2000}, {0xc01d4000}, {0xc01d6000}, 
+    {0xc01d8000}, {0xc01da000}, {0xc01dc000}, {0xc01de000}, 
+    {0xc01e0000}, {0xc01e2000}, {0xc01e4000}, {0xc01e6000}, 
+    {0xc01e8000}, {0xc01ea000}, {0xc01ec000}, {0xc01ee000}, 
+    {0xc01f0000}, {0xc01f2000}, {0xc01f4000}, {0xc01f6000}, 
+    {0xc01f8000}, {0xc01fa000}, {0xc01fc000}, {0xc01fe000}, 
+    {0xc0200000}, {0xc0202000}, {0xc0204000}, {0xc0206000}, 
+    {0xc0208000}, {0xc020a000}, {0xc020c000}, {0xc020e000}, 
+    {0xc0210000}, {0xc0212000}, {0xc0214000}, {0xc0216000}, 
+    {0xc0218000}, {0xc021a000}, {0xc021c000}, {0xc021e000}, 
+    {0xc0220000}, {0xc0222000}, {0xc0224000}, {0xc0226000}, 
+    {0xc0228000}, {0xc022a000}, {0xc022c000}, {0xc022e000}, 
+    {0xc0230000}, {0xc0232000}, {0xc0234000}, {0xc0236000}, 
+    {0xc0238000}, {0xc023a000}, {0xc023c000}, {0xc023e000}, 
+    {0xc0240000}, {0xc0242000}, {0xc0244000}, {0xc0246000}, 
+    {0xc0248000}, {0xc024a000}, {0xc024c000}, {0xc024e000}, 
+    {0xc0250000}, {0xc0252000}, {0xc0254000}, {0xc0256000}, 
+    {0xc0258000}, {0xc025a000}, {0xc025c000}, {0xc025e000}, 
+    {0xc0260000}, {0xc0262000}, {0xc0264000}, {0xc0266000}, 
+    {0xc0268000}, {0xc026a000}, {0xc026c000}, {0xc026e000}, 
+    {0xc0270000}, {0xc0272000}, {0xc0274000}, {0xc0276000}, 
+    {0xc0278000}, {0xc027a000}, {0xc027c000}, {0xc027e000}, 
+    {0xc0280000}, {0xc0282000}, {0xc0284000}, {0xc0286000}, 
+    {0xc0288000}, {0xc028a000}, {0xc028c000}, {0xc028e000}, 
+    {0xc0290000}, {0xc0292000}, {0xc0294000}, {0xc0296000}, 
+    {0xc0298000}, {0xc029a000}, {0xc029c000}, {0xc029e000}, 
+    {0xc02a0000}, {0xc02a2000}, {0xc02a4000}, {0xc02a6000}, 
+    {0xc02a8000}, {0xc02aa000}, {0xc02ac000}, {0xc02ae000}, 
+    {0xc02b0000}, {0xc02b2000}, {0xc02b4000}, {0xc02b6000}, 
+    {0xc02b8000}, {0xc02ba000}, {0xc02bc000}, {0xc02be000}, 
+    {0xc02c0000}, {0xc02c2000}, {0xc02c4000}, {0xc02c6000}, 
+    {0xc02c8000}, {0xc02ca000}, {0xc02cc000}, {0xc02ce000}, 
+    {0xc02d0000}, {0xc02d2000}, {0xc02d4000}, {0xc02d6000}, 
+    {0xc02d8000}, {0xc02da000}, {0xc02dc000}, {0xc02de000}, 
+    {0xc02e0000}, {0xc02e2000}, {0xc02e4000}, {0xc02e6000}, 
+    {0xc02e8000}, {0xc02ea000}, {0xc02ec000}, {0xc02ee000}, 
+    {0xc02f0000}, {0xc02f2000}, {0xc02f4000}, {0xc02f6000}, 
+    {0xc02f8000}, {0xc02fa000}, {0xc02fc000}, {0xc02fe000}, 
+    {0xc0300000}, {0xc0302000}, {0xc0304000}, {0xc0306000}, 
+    {0xc0308000}, {0xc030a000}, {0xc030c000}, {0xc030e000}, 
+    {0xc0310000}, {0xc0312000}, {0xc0314000}, {0xc0316000}, 
+    {0xc0318000}, {0xc031a000}, {0xc031c000}, {0xc031e000}, 
+    {0xc0320000}, {0xc0322000}, {0xc0324000}, {0xc0326000}, 
+    {0xc0328000}, {0xc032a000}, {0xc032c000}, {0xc032e000}, 
+    {0xc0330000}, {0xc0332000}, {0xc0334000}, {0xc0336000}, 
+    {0xc0338000}, {0xc033a000}, {0xc033c000}, {0xc033e000}, 
+    {0xc0340000}, {0xc0342000}, {0xc0344000}, {0xc0346000}, 
+    {0xc0348000}, {0xc034a000}, {0xc034c000}, {0xc034e000}, 
+    {0xc0350000}, {0xc0352000}, {0xc0354000}, {0xc0356000}, 
+    {0xc0358000}, {0xc035a000}, {0xc035c000}, {0xc035e000}, 
+    {0xc0360000}, {0xc0362000}, {0xc0364000}, {0xc0366000}, 
+    {0xc0368000}, {0xc036a000}, {0xc036c000}, {0xc036e000}, 
+    {0xc0370000}, {0xc0372000}, {0xc0374000}, {0xc0376000}, 
+    {0xc0378000}, {0xc037a000}, {0xc037c000}, {0xc037e000}, 
+    {0xc0380000}, {0xc0382000}, {0xc0384000}, {0xc0386000}, 
+    {0xc0388000}, {0xc038a000}, {0xc038c000}, {0xc038e000}, 
+    {0xc0390000}, {0xc0392000}, {0xc0394000}, {0xc0396000}, 
+    {0xc0398000}, {0xc039a000}, {0xc039c000}, {0xc039e000}, 
+    {0xc03a0000}, {0xc03a2000}, {0xc03a4000}, {0xc03a6000}, 
+    {0xc03a8000}, {0xc03aa000}, {0xc03ac000}, {0xc03ae000}, 
+    {0xc03b0000}, {0xc03b2000}, {0xc03b4000}, {0xc03b6000}, 
+    {0xc03b8000}, {0xc03ba000}, {0xc03bc000}, {0xc03be000}, 
+    {0xc03c0000}, {0xc03c2000}, {0xc03c4000}, {0xc03c6000}, 
+    {0xc03c8000}, {0xc03ca000}, {0xc03cc000}, {0xc03ce000}, 
+    {0xc03d0000}, {0xc03d2000}, {0xc03d4000}, {0xc03d6000}, 
+    {0xc03d8000}, {0xc03da000}, {0xc03dc000}, {0xc03de000}, 
+    {0xc03e0000}, {0xc03e2000}, {0xc03e4000}, {0xc03e6000}, 
+    {0xc03e8000}, {0xc03ea000}, {0xc03ec000}, {0xc03ee000}, 
+    {0xc03f0000}, {0xc03f2000}, {0xc03f4000}, {0xc03f6000}, 
+    {0xc03f8000}, {0xc03fa000}, {0xc03fc000}, {0xc03fe000}, 
+    {0xc0400000}, {0xc0402000}, {0xc0404000}, {0xc0406000}, 
+    {0xc0408000}, {0xc040a000}, {0xc040c000}, {0xc040e000}, 
+    {0xc0410000}, {0xc0412000}, {0xc0414000}, {0xc0416000}, 
+    {0xc0418000}, {0xc041a000}, {0xc041c000}, {0xc041e000}, 
+    {0xc0420000}, {0xc0422000}, {0xc0424000}, {0xc0426000}, 
+    {0xc0428000}, {0xc042a000}, {0xc042c000}, {0xc042e000}, 
+    {0xc0430000}, {0xc0432000}, {0xc0434000}, {0xc0436000}, 
+    {0xc0438000}, {0xc043a000}, {0xc043c000}, {0xc043e000}, 
+    {0xc0440000}, {0xc0442000}, {0xc0444000}, {0xc0446000}, 
+    {0xc0448000}, {0xc044a000}, {0xc044c000}, {0xc044e000}, 
+    {0xc0450000}, {0xc0452000}, {0xc0454000}, {0xc0456000}, 
+    {0xc0458000}, {0xc045a000}, {0xc045c000}, {0xc045e000}, 
+    {0xc0460000}, {0xc0462000}, {0xc0464000}, {0xc0466000}, 
+    {0xc0468000}, {0xc046a000}, {0xc046c000}, {0xc046e000}, 
+    {0xc0470000}, {0xc0472000}, {0xc0474000}, {0xc0476000}, 
+    {0xc0478000}, {0xc047a000}, {0xc047c000}, {0xc047e000}, 
+    {0xc0480000}, {0xc0482000}, {0xc0484000}, {0xc0486000}, 
+    {0xc0488000}, {0xc048a000}, {0xc048c000}, {0xc048e000}, 
+    {0xc0490000}, {0xc0492000}, {0xc0494000}, {0xc0496000}, 
+    {0xc0498000}, {0xc049a000}, {0xc049c000}, {0xc049e000}, 
+    {0xc04a0000}, {0xc04a2000}, {0xc04a4000}, {0xc04a6000}, 
+    {0xc04a8000}, {0xc04aa000}, {0xc04ac000}, {0xc04ae000}, 
+    {0xc04b0000}, {0xc04b2000}, {0xc04b4000}, {0xc04b6000}, 
+    {0xc04b8000}, {0xc04ba000}, {0xc04bc000}, {0xc04be000}, 
+    {0xc04c0000}, {0xc04c2000}, {0xc04c4000}, {0xc04c6000}, 
+    {0xc04c8000}, {0xc04ca000}, {0xc04cc000}, {0xc04ce000}, 
+    {0xc04d0000}, {0xc04d2000}, {0xc04d4000}, {0xc04d6000}, 
+    {0xc04d8000}, {0xc04da000}, {0xc04dc000}, {0xc04de000}, 
+    {0xc04e0000}, {0xc04e2000}, {0xc04e4000}, {0xc04e6000}, 
+    {0xc04e8000}, {0xc04ea000}, {0xc04ec000}, {0xc04ee000}, 
+    {0xc04f0000}, {0xc04f2000}, {0xc04f4000}, {0xc04f6000}, 
+    {0xc04f8000}, {0xc04fa000}, {0xc04fc000}, {0xc04fe000}, 
+    {0xc0500000}, {0xc0502000}, {0xc0504000}, {0xc0506000}, 
+    {0xc0508000}, {0xc050a000}, {0xc050c000}, {0xc050e000}, 
+    {0xc0510000}, {0xc0512000}, {0xc0514000}, {0xc0516000}, 
+    {0xc0518000}, {0xc051a000}, {0xc051c000}, {0xc051e000}, 
+    {0xc0520000}, {0xc0522000}, {0xc0524000}, {0xc0526000}, 
+    {0xc0528000}, {0xc052a000}, {0xc052c000}, {0xc052e000}, 
+    {0xc0530000}, {0xc0532000}, {0xc0534000}, {0xc0536000}, 
+    {0xc0538000}, {0xc053a000}, {0xc053c000}, {0xc053e000}, 
+    {0xc0540000}, {0xc0542000}, {0xc0544000}, {0xc0546000}, 
+    {0xc0548000}, {0xc054a000}, {0xc054c000}, {0xc054e000}, 
+    {0xc0550000}, {0xc0552000}, {0xc0554000}, {0xc0556000}, 
+    {0xc0558000}, {0xc055a000}, {0xc055c000}, {0xc055e000}, 
+    {0xc0560000}, {0xc0562000}, {0xc0564000}, {0xc0566000}, 
+    {0xc0568000}, {0xc056a000}, {0xc056c000}, {0xc056e000}, 
+    {0xc0570000}, {0xc0572000}, {0xc0574000}, {0xc0576000}, 
+    {0xc0578000}, {0xc057a000}, {0xc057c000}, {0xc057e000}, 
+    {0xc0580000}, {0xc0582000}, {0xc0584000}, {0xc0586000}, 
+    {0xc0588000}, {0xc058a000}, {0xc058c000}, {0xc058e000}, 
+    {0xc0590000}, {0xc0592000}, {0xc0594000}, {0xc0596000}, 
+    {0xc0598000}, {0xc059a000}, {0xc059c000}, {0xc059e000}, 
+    {0xc05a0000}, {0xc05a2000}, {0xc05a4000}, {0xc05a6000}, 
+    {0xc05a8000}, {0xc05aa000}, {0xc05ac000}, {0xc05ae000}, 
+    {0xc05b0000}, {0xc05b2000}, {0xc05b4000}, {0xc05b6000}, 
+    {0xc05b8000}, {0xc05ba000}, {0xc05bc000}, {0xc05be000}, 
+    {0xc05c0000}, {0xc05c2000}, {0xc05c4000}, {0xc05c6000}, 
+    {0xc05c8000}, {0xc05ca000}, {0xc05cc000}, {0xc05ce000}, 
+    {0xc05d0000}, {0xc05d2000}, {0xc05d4000}, {0xc05d6000}, 
+    {0xc05d8000}, {0xc05da000}, {0xc05dc000}, {0xc05de000}, 
+    {0xc05e0000}, {0xc05e2000}, {0xc05e4000}, {0xc05e6000}, 
+    {0xc05e8000}, {0xc05ea000}, {0xc05ec000}, {0xc05ee000}, 
+    {0xc05f0000}, {0xc05f2000}, {0xc05f4000}, {0xc05f6000}, 
+    {0xc05f8000}, {0xc05fa000}, {0xc05fc000}, {0xc05fe000}, 
+    {0xc0600000}, {0xc0602000}, {0xc0604000}, {0xc0606000}, 
+    {0xc0608000}, {0xc060a000}, {0xc060c000}, {0xc060e000}, 
+    {0xc0610000}, {0xc0612000}, {0xc0614000}, {0xc0616000}, 
+    {0xc0618000}, {0xc061a000}, {0xc061c000}, {0xc061e000}, 
+    {0xc0620000}, {0xc0622000}, {0xc0624000}, {0xc0626000}, 
+    {0xc0628000}, {0xc062a000}, {0xc062c000}, {0xc062e000}, 
+    {0xc0630000}, {0xc0632000}, {0xc0634000}, {0xc0636000}, 
+    {0xc0638000}, {0xc063a000}, {0xc063c000}, {0xc063e000}, 
+    {0xc0640000}, {0xc0642000}, {0xc0644000}, {0xc0646000}, 
+    {0xc0648000}, {0xc064a000}, {0xc064c000}, {0xc064e000}, 
+    {0xc0650000}, {0xc0652000}, {0xc0654000}, {0xc0656000}, 
+    {0xc0658000}, {0xc065a000}, {0xc065c000}, {0xc065e000}, 
+    {0xc0660000}, {0xc0662000}, {0xc0664000}, {0xc0666000}, 
+    {0xc0668000}, {0xc066a000}, {0xc066c000}, {0xc066e000}, 
+    {0xc0670000}, {0xc0672000}, {0xc0674000}, {0xc0676000}, 
+    {0xc0678000}, {0xc067a000}, {0xc067c000}, {0xc067e000}, 
+    {0xc0680000}, {0xc0682000}, {0xc0684000}, {0xc0686000}, 
+    {0xc0688000}, {0xc068a000}, {0xc068c000}, {0xc068e000}, 
+    {0xc0690000}, {0xc0692000}, {0xc0694000}, {0xc0696000}, 
+    {0xc0698000}, {0xc069a000}, {0xc069c000}, {0xc069e000}, 
+    {0xc06a0000}, {0xc06a2000}, {0xc06a4000}, {0xc06a6000}, 
+    {0xc06a8000}, {0xc06aa000}, {0xc06ac000}, {0xc06ae000}, 
+    {0xc06b0000}, {0xc06b2000}, {0xc06b4000}, {0xc06b6000}, 
+    {0xc06b8000}, {0xc06ba000}, {0xc06bc000}, {0xc06be000}, 
+    {0xc06c0000}, {0xc06c2000}, {0xc06c4000}, {0xc06c6000}, 
+    {0xc06c8000}, {0xc06ca000}, {0xc06cc000}, {0xc06ce000}, 
+    {0xc06d0000}, {0xc06d2000}, {0xc06d4000}, {0xc06d6000}, 
+    {0xc06d8000}, {0xc06da000}, {0xc06dc000}, {0xc06de000}, 
+    {0xc06e0000}, {0xc06e2000}, {0xc06e4000}, {0xc06e6000}, 
+    {0xc06e8000}, {0xc06ea000}, {0xc06ec000}, {0xc06ee000}, 
+    {0xc06f0000}, {0xc06f2000}, {0xc06f4000}, {0xc06f6000}, 
+    {0xc06f8000}, {0xc06fa000}, {0xc06fc000}, {0xc06fe000}, 
+    {0xc0700000}, {0xc0702000}, {0xc0704000}, {0xc0706000}, 
+    {0xc0708000}, {0xc070a000}, {0xc070c000}, {0xc070e000}, 
+    {0xc0710000}, {0xc0712000}, {0xc0714000}, {0xc0716000}, 
+    {0xc0718000}, {0xc071a000}, {0xc071c000}, {0xc071e000}, 
+    {0xc0720000}, {0xc0722000}, {0xc0724000}, {0xc0726000}, 
+    {0xc0728000}, {0xc072a000}, {0xc072c000}, {0xc072e000}, 
+    {0xc0730000}, {0xc0732000}, {0xc0734000}, {0xc0736000}, 
+    {0xc0738000}, {0xc073a000}, {0xc073c000}, {0xc073e000}, 
+    {0xc0740000}, {0xc0742000}, {0xc0744000}, {0xc0746000}, 
+    {0xc0748000}, {0xc074a000}, {0xc074c000}, {0xc074e000}, 
+    {0xc0750000}, {0xc0752000}, {0xc0754000}, {0xc0756000}, 
+    {0xc0758000}, {0xc075a000}, {0xc075c000}, {0xc075e000}, 
+    {0xc0760000}, {0xc0762000}, {0xc0764000}, {0xc0766000}, 
+    {0xc0768000}, {0xc076a000}, {0xc076c000}, {0xc076e000}, 
+    {0xc0770000}, {0xc0772000}, {0xc0774000}, {0xc0776000}, 
+    {0xc0778000}, {0xc077a000}, {0xc077c000}, {0xc077e000}, 
+    {0xc0780000}, {0xc0782000}, {0xc0784000}, {0xc0786000}, 
+    {0xc0788000}, {0xc078a000}, {0xc078c000}, {0xc078e000}, 
+    {0xc0790000}, {0xc0792000}, {0xc0794000}, {0xc0796000}, 
+    {0xc0798000}, {0xc079a000}, {0xc079c000}, {0xc079e000}, 
+    {0xc07a0000}, {0xc07a2000}, {0xc07a4000}, {0xc07a6000}, 
+    {0xc07a8000}, {0xc07aa000}, {0xc07ac000}, {0xc07ae000}, 
+    {0xc07b0000}, {0xc07b2000}, {0xc07b4000}, {0xc07b6000}, 
+    {0xc07b8000}, {0xc07ba000}, {0xc07bc000}, {0xc07be000}, 
+    {0xc07c0000}, {0xc07c2000}, {0xc07c4000}, {0xc07c6000}, 
+    {0xc07c8000}, {0xc07ca000}, {0xc07cc000}, {0xc07ce000}, 
+    {0xc07d0000}, {0xc07d2000}, {0xc07d4000}, {0xc07d6000}, 
+    {0xc07d8000}, {0xc07da000}, {0xc07dc000}, {0xc07de000}, 
+    {0xc07e0000}, {0xc07e2000}, {0xc07e4000}, {0xc07e6000}, 
+    {0xc07e8000}, {0xc07ea000}, {0xc07ec000}, {0xc07ee000}, 
+    {0xc07f0000}, {0xc07f2000}, {0xc07f4000}, {0xc07f6000}, 
+    {0xc07f8000}, {0xc07fa000}, {0xc07fc000}, {0xc07fe000}, 
+    {0xc0800000}, {0xc0802000}, {0xc0804000}, {0xc0806000}, 
+    {0xc0808000}, {0xc080a000}, {0xc080c000}, {0xc080e000}, 
+    {0xc0810000}, {0xc0812000}, {0xc0814000}, {0xc0816000}, 
+    {0xc0818000}, {0xc081a000}, {0xc081c000}, {0xc081e000}, 
+    {0xc0820000}, {0xc0822000}, {0xc0824000}, {0xc0826000}, 
+    {0xc0828000}, {0xc082a000}, {0xc082c000}, {0xc082e000}, 
+    {0xc0830000}, {0xc0832000}, {0xc0834000}, {0xc0836000}, 
+    {0xc0838000}, {0xc083a000}, {0xc083c000}, {0xc083e000}, 
+    {0xc0840000}, {0xc0842000}, {0xc0844000}, {0xc0846000}, 
+    {0xc0848000}, {0xc084a000}, {0xc084c000}, {0xc084e000}, 
+    {0xc0850000}, {0xc0852000}, {0xc0854000}, {0xc0856000}, 
+    {0xc0858000}, {0xc085a000}, {0xc085c000}, {0xc085e000}, 
+    {0xc0860000}, {0xc0862000}, {0xc0864000}, {0xc0866000}, 
+    {0xc0868000}, {0xc086a000}, {0xc086c000}, {0xc086e000}, 
+    {0xc0870000}, {0xc0872000}, {0xc0874000}, {0xc0876000}, 
+    {0xc0878000}, {0xc087a000}, {0xc087c000}, {0xc087e000}, 
+    {0xc0880000}, {0xc0882000}, {0xc0884000}, {0xc0886000}, 
+    {0xc0888000}, {0xc088a000}, {0xc088c000}, {0xc088e000}, 
+    {0xc0890000}, {0xc0892000}, {0xc0894000}, {0xc0896000}, 
+    {0xc0898000}, {0xc089a000}, {0xc089c000}, {0xc089e000}, 
+    {0xc08a0000}, {0xc08a2000}, {0xc08a4000}, {0xc08a6000}, 
+    {0xc08a8000}, {0xc08aa000}, {0xc08ac000}, {0xc08ae000}, 
+    {0xc08b0000}, {0xc08b2000}, {0xc08b4000}, {0xc08b6000}, 
+    {0xc08b8000}, {0xc08ba000}, {0xc08bc000}, {0xc08be000}, 
+    {0xc08c0000}, {0xc08c2000}, {0xc08c4000}, {0xc08c6000}, 
+    {0xc08c8000}, {0xc08ca000}, {0xc08cc000}, {0xc08ce000}, 
+    {0xc08d0000}, {0xc08d2000}, {0xc08d4000}, {0xc08d6000}, 
+    {0xc08d8000}, {0xc08da000}, {0xc08dc000}, {0xc08de000}, 
+    {0xc08e0000}, {0xc08e2000}, {0xc08e4000}, {0xc08e6000}, 
+    {0xc08e8000}, {0xc08ea000}, {0xc08ec000}, {0xc08ee000}, 
+    {0xc08f0000}, {0xc08f2000}, {0xc08f4000}, {0xc08f6000}, 
+    {0xc08f8000}, {0xc08fa000}, {0xc08fc000}, {0xc08fe000}, 
+    {0xc0900000}, {0xc0902000}, {0xc0904000}, {0xc0906000}, 
+    {0xc0908000}, {0xc090a000}, {0xc090c000}, {0xc090e000}, 
+    {0xc0910000}, {0xc0912000}, {0xc0914000}, {0xc0916000}, 
+    {0xc0918000}, {0xc091a000}, {0xc091c000}, {0xc091e000}, 
+    {0xc0920000}, {0xc0922000}, {0xc0924000}, {0xc0926000}, 
+    {0xc0928000}, {0xc092a000}, {0xc092c000}, {0xc092e000}, 
+    {0xc0930000}, {0xc0932000}, {0xc0934000}, {0xc0936000}, 
+    {0xc0938000}, {0xc093a000}, {0xc093c000}, {0xc093e000}, 
+    {0xc0940000}, {0xc0942000}, {0xc0944000}, {0xc0946000}, 
+    {0xc0948000}, {0xc094a000}, {0xc094c000}, {0xc094e000}, 
+    {0xc0950000}, {0xc0952000}, {0xc0954000}, {0xc0956000}, 
+    {0xc0958000}, {0xc095a000}, {0xc095c000}, {0xc095e000}, 
+    {0xc0960000}, {0xc0962000}, {0xc0964000}, {0xc0966000}, 
+    {0xc0968000}, {0xc096a000}, {0xc096c000}, {0xc096e000}, 
+    {0xc0970000}, {0xc0972000}, {0xc0974000}, {0xc0976000}, 
+    {0xc0978000}, {0xc097a000}, {0xc097c000}, {0xc097e000}, 
+    {0xc0980000}, {0xc0982000}, {0xc0984000}, {0xc0986000}, 
+    {0xc0988000}, {0xc098a000}, {0xc098c000}, {0xc098e000}, 
+    {0xc0990000}, {0xc0992000}, {0xc0994000}, {0xc0996000}, 
+    {0xc0998000}, {0xc099a000}, {0xc099c000}, {0xc099e000}, 
+    {0xc09a0000}, {0xc09a2000}, {0xc09a4000}, {0xc09a6000}, 
+    {0xc09a8000}, {0xc09aa000}, {0xc09ac000}, {0xc09ae000}, 
+    {0xc09b0000}, {0xc09b2000}, {0xc09b4000}, {0xc09b6000}, 
+    {0xc09b8000}, {0xc09ba000}, {0xc09bc000}, {0xc09be000}, 
+    {0xc09c0000}, {0xc09c2000}, {0xc09c4000}, {0xc09c6000}, 
+    {0xc09c8000}, {0xc09ca000}, {0xc09cc000}, {0xc09ce000}, 
+    {0xc09d0000}, {0xc09d2000}, {0xc09d4000}, {0xc09d6000}, 
+    {0xc09d8000}, {0xc09da000}, {0xc09dc000}, {0xc09de000}, 
+    {0xc09e0000}, {0xc09e2000}, {0xc09e4000}, {0xc09e6000}, 
+    {0xc09e8000}, {0xc09ea000}, {0xc09ec000}, {0xc09ee000}, 
+    {0xc09f0000}, {0xc09f2000}, {0xc09f4000}, {0xc09f6000}, 
+    {0xc09f8000}, {0xc09fa000}, {0xc09fc000}, {0xc09fe000}, 
+    {0xc0a00000}, {0xc0a02000}, {0xc0a04000}, {0xc0a06000}, 
+    {0xc0a08000}, {0xc0a0a000}, {0xc0a0c000}, {0xc0a0e000}, 
+    {0xc0a10000}, {0xc0a12000}, {0xc0a14000}, {0xc0a16000}, 
+    {0xc0a18000}, {0xc0a1a000}, {0xc0a1c000}, {0xc0a1e000}, 
+    {0xc0a20000}, {0xc0a22000}, {0xc0a24000}, {0xc0a26000}, 
+    {0xc0a28000}, {0xc0a2a000}, {0xc0a2c000}, {0xc0a2e000}, 
+    {0xc0a30000}, {0xc0a32000}, {0xc0a34000}, {0xc0a36000}, 
+    {0xc0a38000}, {0xc0a3a000}, {0xc0a3c000}, {0xc0a3e000}, 
+    {0xc0a40000}, {0xc0a42000}, {0xc0a44000}, {0xc0a46000}, 
+    {0xc0a48000}, {0xc0a4a000}, {0xc0a4c000}, {0xc0a4e000}, 
+    {0xc0a50000}, {0xc0a52000}, {0xc0a54000}, {0xc0a56000}, 
+    {0xc0a58000}, {0xc0a5a000}, {0xc0a5c000}, {0xc0a5e000}, 
+    {0xc0a60000}, {0xc0a62000}, {0xc0a64000}, {0xc0a66000}, 
+    {0xc0a68000}, {0xc0a6a000}, {0xc0a6c000}, {0xc0a6e000}, 
+    {0xc0a70000}, {0xc0a72000}, {0xc0a74000}, {0xc0a76000}, 
+    {0xc0a78000}, {0xc0a7a000}, {0xc0a7c000}, {0xc0a7e000}, 
+    {0xc0a80000}, {0xc0a82000}, {0xc0a84000}, {0xc0a86000}, 
+    {0xc0a88000}, {0xc0a8a000}, {0xc0a8c000}, {0xc0a8e000}, 
+    {0xc0a90000}, {0xc0a92000}, {0xc0a94000}, {0xc0a96000}, 
+    {0xc0a98000}, {0xc0a9a000}, {0xc0a9c000}, {0xc0a9e000}, 
+    {0xc0aa0000}, {0xc0aa2000}, {0xc0aa4000}, {0xc0aa6000}, 
+    {0xc0aa8000}, {0xc0aaa000}, {0xc0aac000}, {0xc0aae000}, 
+    {0xc0ab0000}, {0xc0ab2000}, {0xc0ab4000}, {0xc0ab6000}, 
+    {0xc0ab8000}, {0xc0aba000}, {0xc0abc000}, {0xc0abe000}, 
+    {0xc0ac0000}, {0xc0ac2000}, {0xc0ac4000}, {0xc0ac6000}, 
+    {0xc0ac8000}, {0xc0aca000}, {0xc0acc000}, {0xc0ace000}, 
+    {0xc0ad0000}, {0xc0ad2000}, {0xc0ad4000}, {0xc0ad6000}, 
+    {0xc0ad8000}, {0xc0ada000}, {0xc0adc000}, {0xc0ade000}, 
+    {0xc0ae0000}, {0xc0ae2000}, {0xc0ae4000}, {0xc0ae6000}, 
+    {0xc0ae8000}, {0xc0aea000}, {0xc0aec000}, {0xc0aee000}, 
+    {0xc0af0000}, {0xc0af2000}, {0xc0af4000}, {0xc0af6000}, 
+    {0xc0af8000}, {0xc0afa000}, {0xc0afc000}, {0xc0afe000}, 
+    {0xc0b00000}, {0xc0b02000}, {0xc0b04000}, {0xc0b06000}, 
+    {0xc0b08000}, {0xc0b0a000}, {0xc0b0c000}, {0xc0b0e000}, 
+    {0xc0b10000}, {0xc0b12000}, {0xc0b14000}, {0xc0b16000}, 
+    {0xc0b18000}, {0xc0b1a000}, {0xc0b1c000}, {0xc0b1e000}, 
+    {0xc0b20000}, {0xc0b22000}, {0xc0b24000}, {0xc0b26000}, 
+    {0xc0b28000}, {0xc0b2a000}, {0xc0b2c000}, {0xc0b2e000}, 
+    {0xc0b30000}, {0xc0b32000}, {0xc0b34000}, {0xc0b36000}, 
+    {0xc0b38000}, {0xc0b3a000}, {0xc0b3c000}, {0xc0b3e000}, 
+    {0xc0b40000}, {0xc0b42000}, {0xc0b44000}, {0xc0b46000}, 
+    {0xc0b48000}, {0xc0b4a000}, {0xc0b4c000}, {0xc0b4e000}, 
+    {0xc0b50000}, {0xc0b52000}, {0xc0b54000}, {0xc0b56000}, 
+    {0xc0b58000}, {0xc0b5a000}, {0xc0b5c000}, {0xc0b5e000}, 
+    {0xc0b60000}, {0xc0b62000}, {0xc0b64000}, {0xc0b66000}, 
+    {0xc0b68000}, {0xc0b6a000}, {0xc0b6c000}, {0xc0b6e000}, 
+    {0xc0b70000}, {0xc0b72000}, {0xc0b74000}, {0xc0b76000}, 
+    {0xc0b78000}, {0xc0b7a000}, {0xc0b7c000}, {0xc0b7e000}, 
+    {0xc0b80000}, {0xc0b82000}, {0xc0b84000}, {0xc0b86000}, 
+    {0xc0b88000}, {0xc0b8a000}, {0xc0b8c000}, {0xc0b8e000}, 
+    {0xc0b90000}, {0xc0b92000}, {0xc0b94000}, {0xc0b96000}, 
+    {0xc0b98000}, {0xc0b9a000}, {0xc0b9c000}, {0xc0b9e000}, 
+    {0xc0ba0000}, {0xc0ba2000}, {0xc0ba4000}, {0xc0ba6000}, 
+    {0xc0ba8000}, {0xc0baa000}, {0xc0bac000}, {0xc0bae000}, 
+    {0xc0bb0000}, {0xc0bb2000}, {0xc0bb4000}, {0xc0bb6000}, 
+    {0xc0bb8000}, {0xc0bba000}, {0xc0bbc000}, {0xc0bbe000}, 
+    {0xc0bc0000}, {0xc0bc2000}, {0xc0bc4000}, {0xc0bc6000}, 
+    {0xc0bc8000}, {0xc0bca000}, {0xc0bcc000}, {0xc0bce000}, 
+    {0xc0bd0000}, {0xc0bd2000}, {0xc0bd4000}, {0xc0bd6000}, 
+    {0xc0bd8000}, {0xc0bda000}, {0xc0bdc000}, {0xc0bde000}, 
+    {0xc0be0000}, {0xc0be2000}, {0xc0be4000}, {0xc0be6000}, 
+    {0xc0be8000}, {0xc0bea000}, {0xc0bec000}, {0xc0bee000}, 
+    {0xc0bf0000}, {0xc0bf2000}, {0xc0bf4000}, {0xc0bf6000}, 
+    {0xc0bf8000}, {0xc0bfa000}, {0xc0bfc000}, {0xc0bfe000}, 
+    {0xc0c00000}, {0xc0c02000}, {0xc0c04000}, {0xc0c06000}, 
+    {0xc0c08000}, {0xc0c0a000}, {0xc0c0c000}, {0xc0c0e000}, 
+    {0xc0c10000}, {0xc0c12000}, {0xc0c14000}, {0xc0c16000}, 
+    {0xc0c18000}, {0xc0c1a000}, {0xc0c1c000}, {0xc0c1e000}, 
+    {0xc0c20000}, {0xc0c22000}, {0xc0c24000}, {0xc0c26000}, 
+    {0xc0c28000}, {0xc0c2a000}, {0xc0c2c000}, {0xc0c2e000}, 
+    {0xc0c30000}, {0xc0c32000}, {0xc0c34000}, {0xc0c36000}, 
+    {0xc0c38000}, {0xc0c3a000}, {0xc0c3c000}, {0xc0c3e000}, 
+    {0xc0c40000}, {0xc0c42000}, {0xc0c44000}, {0xc0c46000}, 
+    {0xc0c48000}, {0xc0c4a000}, {0xc0c4c000}, {0xc0c4e000}, 
+    {0xc0c50000}, {0xc0c52000}, {0xc0c54000}, {0xc0c56000}, 
+    {0xc0c58000}, {0xc0c5a000}, {0xc0c5c000}, {0xc0c5e000}, 
+    {0xc0c60000}, {0xc0c62000}, {0xc0c64000}, {0xc0c66000}, 
+    {0xc0c68000}, {0xc0c6a000}, {0xc0c6c000}, {0xc0c6e000}, 
+    {0xc0c70000}, {0xc0c72000}, {0xc0c74000}, {0xc0c76000}, 
+    {0xc0c78000}, {0xc0c7a000}, {0xc0c7c000}, {0xc0c7e000}, 
+    {0xc0c80000}, {0xc0c82000}, {0xc0c84000}, {0xc0c86000}, 
+    {0xc0c88000}, {0xc0c8a000}, {0xc0c8c000}, {0xc0c8e000}, 
+    {0xc0c90000}, {0xc0c92000}, {0xc0c94000}, {0xc0c96000}, 
+    {0xc0c98000}, {0xc0c9a000}, {0xc0c9c000}, {0xc0c9e000}, 
+    {0xc0ca0000}, {0xc0ca2000}, {0xc0ca4000}, {0xc0ca6000}, 
+    {0xc0ca8000}, {0xc0caa000}, {0xc0cac000}, {0xc0cae000}, 
+    {0xc0cb0000}, {0xc0cb2000}, {0xc0cb4000}, {0xc0cb6000}, 
+    {0xc0cb8000}, {0xc0cba000}, {0xc0cbc000}, {0xc0cbe000}, 
+    {0xc0cc0000}, {0xc0cc2000}, {0xc0cc4000}, {0xc0cc6000}, 
+    {0xc0cc8000}, {0xc0cca000}, {0xc0ccc000}, {0xc0cce000}, 
+    {0xc0cd0000}, {0xc0cd2000}, {0xc0cd4000}, {0xc0cd6000}, 
+    {0xc0cd8000}, {0xc0cda000}, {0xc0cdc000}, {0xc0cde000}, 
+    {0xc0ce0000}, {0xc0ce2000}, {0xc0ce4000}, {0xc0ce6000}, 
+    {0xc0ce8000}, {0xc0cea000}, {0xc0cec000}, {0xc0cee000}, 
+    {0xc0cf0000}, {0xc0cf2000}, {0xc0cf4000}, {0xc0cf6000}, 
+    {0xc0cf8000}, {0xc0cfa000}, {0xc0cfc000}, {0xc0cfe000}, 
+    {0xc0d00000}, {0xc0d02000}, {0xc0d04000}, {0xc0d06000}, 
+    {0xc0d08000}, {0xc0d0a000}, {0xc0d0c000}, {0xc0d0e000}, 
+    {0xc0d10000}, {0xc0d12000}, {0xc0d14000}, {0xc0d16000}, 
+    {0xc0d18000}, {0xc0d1a000}, {0xc0d1c000}, {0xc0d1e000}, 
+    {0xc0d20000}, {0xc0d22000}, {0xc0d24000}, {0xc0d26000}, 
+    {0xc0d28000}, {0xc0d2a000}, {0xc0d2c000}, {0xc0d2e000}, 
+    {0xc0d30000}, {0xc0d32000}, {0xc0d34000}, {0xc0d36000}, 
+    {0xc0d38000}, {0xc0d3a000}, {0xc0d3c000}, {0xc0d3e000}, 
+    {0xc0d40000}, {0xc0d42000}, {0xc0d44000}, {0xc0d46000}, 
+    {0xc0d48000}, {0xc0d4a000}, {0xc0d4c000}, {0xc0d4e000}, 
+    {0xc0d50000}, {0xc0d52000}, {0xc0d54000}, {0xc0d56000}, 
+    {0xc0d58000}, {0xc0d5a000}, {0xc0d5c000}, {0xc0d5e000}, 
+    {0xc0d60000}, {0xc0d62000}, {0xc0d64000}, {0xc0d66000}, 
+    {0xc0d68000}, {0xc0d6a000}, {0xc0d6c000}, {0xc0d6e000}, 
+    {0xc0d70000}, {0xc0d72000}, {0xc0d74000}, {0xc0d76000}, 
+    {0xc0d78000}, {0xc0d7a000}, {0xc0d7c000}, {0xc0d7e000}, 
+    {0xc0d80000}, {0xc0d82000}, {0xc0d84000}, {0xc0d86000}, 
+    {0xc0d88000}, {0xc0d8a000}, {0xc0d8c000}, {0xc0d8e000}, 
+    {0xc0d90000}, {0xc0d92000}, {0xc0d94000}, {0xc0d96000}, 
+    {0xc0d98000}, {0xc0d9a000}, {0xc0d9c000}, {0xc0d9e000}, 
+    {0xc0da0000}, {0xc0da2000}, {0xc0da4000}, {0xc0da6000}, 
+    {0xc0da8000}, {0xc0daa000}, {0xc0dac000}, {0xc0dae000}, 
+    {0xc0db0000}, {0xc0db2000}, {0xc0db4000}, {0xc0db6000}, 
+    {0xc0db8000}, {0xc0dba000}, {0xc0dbc000}, {0xc0dbe000}, 
+    {0xc0dc0000}, {0xc0dc2000}, {0xc0dc4000}, {0xc0dc6000}, 
+    {0xc0dc8000}, {0xc0dca000}, {0xc0dcc000}, {0xc0dce000}, 
+    {0xc0dd0000}, {0xc0dd2000}, {0xc0dd4000}, {0xc0dd6000}, 
+    {0xc0dd8000}, {0xc0dda000}, {0xc0ddc000}, {0xc0dde000}, 
+    {0xc0de0000}, {0xc0de2000}, {0xc0de4000}, {0xc0de6000}, 
+    {0xc0de8000}, {0xc0dea000}, {0xc0dec000}, {0xc0dee000}, 
+    {0xc0df0000}, {0xc0df2000}, {0xc0df4000}, {0xc0df6000}, 
+    {0xc0df8000}, {0xc0dfa000}, {0xc0dfc000}, {0xc0dfe000}, 
+    {0xc0e00000}, {0xc0e02000}, {0xc0e04000}, {0xc0e06000}, 
+    {0xc0e08000}, {0xc0e0a000}, {0xc0e0c000}, {0xc0e0e000}, 
+    {0xc0e10000}, {0xc0e12000}, {0xc0e14000}, {0xc0e16000}, 
+    {0xc0e18000}, {0xc0e1a000}, {0xc0e1c000}, {0xc0e1e000}, 
+    {0xc0e20000}, {0xc0e22000}, {0xc0e24000}, {0xc0e26000}, 
+    {0xc0e28000}, {0xc0e2a000}, {0xc0e2c000}, {0xc0e2e000}, 
+    {0xc0e30000}, {0xc0e32000}, {0xc0e34000}, {0xc0e36000}, 
+    {0xc0e38000}, {0xc0e3a000}, {0xc0e3c000}, {0xc0e3e000}, 
+    {0xc0e40000}, {0xc0e42000}, {0xc0e44000}, {0xc0e46000}, 
+    {0xc0e48000}, {0xc0e4a000}, {0xc0e4c000}, {0xc0e4e000}, 
+    {0xc0e50000}, {0xc0e52000}, {0xc0e54000}, {0xc0e56000}, 
+    {0xc0e58000}, {0xc0e5a000}, {0xc0e5c000}, {0xc0e5e000}, 
+    {0xc0e60000}, {0xc0e62000}, {0xc0e64000}, {0xc0e66000}, 
+    {0xc0e68000}, {0xc0e6a000}, {0xc0e6c000}, {0xc0e6e000}, 
+    {0xc0e70000}, {0xc0e72000}, {0xc0e74000}, {0xc0e76000}, 
+    {0xc0e78000}, {0xc0e7a000}, {0xc0e7c000}, {0xc0e7e000}, 
+    {0xc0e80000}, {0xc0e82000}, {0xc0e84000}, {0xc0e86000}, 
+    {0xc0e88000}, {0xc0e8a000}, {0xc0e8c000}, {0xc0e8e000}, 
+    {0xc0e90000}, {0xc0e92000}, {0xc0e94000}, {0xc0e96000}, 
+    {0xc0e98000}, {0xc0e9a000}, {0xc0e9c000}, {0xc0e9e000}, 
+    {0xc0ea0000}, {0xc0ea2000}, {0xc0ea4000}, {0xc0ea6000}, 
+    {0xc0ea8000}, {0xc0eaa000}, {0xc0eac000}, {0xc0eae000}, 
+    {0xc0eb0000}, {0xc0eb2000}, {0xc0eb4000}, {0xc0eb6000}, 
+    {0xc0eb8000}, {0xc0eba000}, {0xc0ebc000}, {0xc0ebe000}, 
+    {0xc0ec0000}, {0xc0ec2000}, {0xc0ec4000}, {0xc0ec6000}, 
+    {0xc0ec8000}, {0xc0eca000}, {0xc0ecc000}, {0xc0ece000}, 
+    {0xc0ed0000}, {0xc0ed2000}, {0xc0ed4000}, {0xc0ed6000}, 
+    {0xc0ed8000}, {0xc0eda000}, {0xc0edc000}, {0xc0ede000}, 
+    {0xc0ee0000}, {0xc0ee2000}, {0xc0ee4000}, {0xc0ee6000}, 
+    {0xc0ee8000}, {0xc0eea000}, {0xc0eec000}, {0xc0eee000}, 
+    {0xc0ef0000}, {0xc0ef2000}, {0xc0ef4000}, {0xc0ef6000}, 
+    {0xc0ef8000}, {0xc0efa000}, {0xc0efc000}, {0xc0efe000}, 
+    {0xc0f00000}, {0xc0f02000}, {0xc0f04000}, {0xc0f06000}, 
+    {0xc0f08000}, {0xc0f0a000}, {0xc0f0c000}, {0xc0f0e000}, 
+    {0xc0f10000}, {0xc0f12000}, {0xc0f14000}, {0xc0f16000}, 
+    {0xc0f18000}, {0xc0f1a000}, {0xc0f1c000}, {0xc0f1e000}, 
+    {0xc0f20000}, {0xc0f22000}, {0xc0f24000}, {0xc0f26000}, 
+    {0xc0f28000}, {0xc0f2a000}, {0xc0f2c000}, {0xc0f2e000}, 
+    {0xc0f30000}, {0xc0f32000}, {0xc0f34000}, {0xc0f36000}, 
+    {0xc0f38000}, {0xc0f3a000}, {0xc0f3c000}, {0xc0f3e000}, 
+    {0xc0f40000}, {0xc0f42000}, {0xc0f44000}, {0xc0f46000}, 
+    {0xc0f48000}, {0xc0f4a000}, {0xc0f4c000}, {0xc0f4e000}, 
+    {0xc0f50000}, {0xc0f52000}, {0xc0f54000}, {0xc0f56000}, 
+    {0xc0f58000}, {0xc0f5a000}, {0xc0f5c000}, {0xc0f5e000}, 
+    {0xc0f60000}, {0xc0f62000}, {0xc0f64000}, {0xc0f66000}, 
+    {0xc0f68000}, {0xc0f6a000}, {0xc0f6c000}, {0xc0f6e000}, 
+    {0xc0f70000}, {0xc0f72000}, {0xc0f74000}, {0xc0f76000}, 
+    {0xc0f78000}, {0xc0f7a000}, {0xc0f7c000}, {0xc0f7e000}, 
+    {0xc0f80000}, {0xc0f82000}, {0xc0f84000}, {0xc0f86000}, 
+    {0xc0f88000}, {0xc0f8a000}, {0xc0f8c000}, {0xc0f8e000}, 
+    {0xc0f90000}, {0xc0f92000}, {0xc0f94000}, {0xc0f96000}, 
+    {0xc0f98000}, {0xc0f9a000}, {0xc0f9c000}, {0xc0f9e000}, 
+    {0xc0fa0000}, {0xc0fa2000}, {0xc0fa4000}, {0xc0fa6000}, 
+    {0xc0fa8000}, {0xc0faa000}, {0xc0fac000}, {0xc0fae000}, 
+    {0xc0fb0000}, {0xc0fb2000}, {0xc0fb4000}, {0xc0fb6000}, 
+    {0xc0fb8000}, {0xc0fba000}, {0xc0fbc000}, {0xc0fbe000}, 
+    {0xc0fc0000}, {0xc0fc2000}, {0xc0fc4000}, {0xc0fc6000}, 
+    {0xc0fc8000}, {0xc0fca000}, {0xc0fcc000}, {0xc0fce000}, 
+    {0xc0fd0000}, {0xc0fd2000}, {0xc0fd4000}, {0xc0fd6000}, 
+    {0xc0fd8000}, {0xc0fda000}, {0xc0fdc000}, {0xc0fde000}, 
+    {0xc0fe0000}, {0xc0fe2000}, {0xc0fe4000}, {0xc0fe6000}, 
+    {0xc0fe8000}, {0xc0fea000}, {0xc0fec000}, {0xc0fee000}, 
+    {0xc0ff0000}, {0xc0ff2000}, {0xc0ff4000}, {0xc0ff6000}, 
+    {0xc0ff8000}, {0xc0ffa000}, {0xc0ffc000}, {0xc0ffe000}, 
+    {0xc1000000}, {0xc1002000}, {0xc1004000}, {0xc1006000}, 
+    {0xc1008000}, {0xc100a000}, {0xc100c000}, {0xc100e000}, 
+    {0xc1010000}, {0xc1012000}, {0xc1014000}, {0xc1016000}, 
+    {0xc1018000}, {0xc101a000}, {0xc101c000}, {0xc101e000}, 
+    {0xc1020000}, {0xc1022000}, {0xc1024000}, {0xc1026000}, 
+    {0xc1028000}, {0xc102a000}, {0xc102c000}, {0xc102e000}, 
+    {0xc1030000}, {0xc1032000}, {0xc1034000}, {0xc1036000}, 
+    {0xc1038000}, {0xc103a000}, {0xc103c000}, {0xc103e000}, 
+    {0xc1040000}, {0xc1042000}, {0xc1044000}, {0xc1046000}, 
+    {0xc1048000}, {0xc104a000}, {0xc104c000}, {0xc104e000}, 
+    {0xc1050000}, {0xc1052000}, {0xc1054000}, {0xc1056000}, 
+    {0xc1058000}, {0xc105a000}, {0xc105c000}, {0xc105e000}, 
+    {0xc1060000}, {0xc1062000}, {0xc1064000}, {0xc1066000}, 
+    {0xc1068000}, {0xc106a000}, {0xc106c000}, {0xc106e000}, 
+    {0xc1070000}, {0xc1072000}, {0xc1074000}, {0xc1076000}, 
+    {0xc1078000}, {0xc107a000}, {0xc107c000}, {0xc107e000}, 
+    {0xc1080000}, {0xc1082000}, {0xc1084000}, {0xc1086000}, 
+    {0xc1088000}, {0xc108a000}, {0xc108c000}, {0xc108e000}, 
+    {0xc1090000}, {0xc1092000}, {0xc1094000}, {0xc1096000}, 
+    {0xc1098000}, {0xc109a000}, {0xc109c000}, {0xc109e000}, 
+    {0xc10a0000}, {0xc10a2000}, {0xc10a4000}, {0xc10a6000}, 
+    {0xc10a8000}, {0xc10aa000}, {0xc10ac000}, {0xc10ae000}, 
+    {0xc10b0000}, {0xc10b2000}, {0xc10b4000}, {0xc10b6000}, 
+    {0xc10b8000}, {0xc10ba000}, {0xc10bc000}, {0xc10be000}, 
+    {0xc10c0000}, {0xc10c2000}, {0xc10c4000}, {0xc10c6000}, 
+    {0xc10c8000}, {0xc10ca000}, {0xc10cc000}, {0xc10ce000}, 
+    {0xc10d0000}, {0xc10d2000}, {0xc10d4000}, {0xc10d6000}, 
+    {0xc10d8000}, {0xc10da000}, {0xc10dc000}, {0xc10de000}, 
+    {0xc10e0000}, {0xc10e2000}, {0xc10e4000}, {0xc10e6000}, 
+    {0xc10e8000}, {0xc10ea000}, {0xc10ec000}, {0xc10ee000}, 
+    {0xc10f0000}, {0xc10f2000}, {0xc10f4000}, {0xc10f6000}, 
+    {0xc10f8000}, {0xc10fa000}, {0xc10fc000}, {0xc10fe000}, 
+    {0xc1100000}, {0xc1102000}, {0xc1104000}, {0xc1106000}, 
+    {0xc1108000}, {0xc110a000}, {0xc110c000}, {0xc110e000}, 
+    {0xc1110000}, {0xc1112000}, {0xc1114000}, {0xc1116000}, 
+    {0xc1118000}, {0xc111a000}, {0xc111c000}, {0xc111e000}, 
+    {0xc1120000}, {0xc1122000}, {0xc1124000}, {0xc1126000}, 
+    {0xc1128000}, {0xc112a000}, {0xc112c000}, {0xc112e000}, 
+    {0xc1130000}, {0xc1132000}, {0xc1134000}, {0xc1136000}, 
+    {0xc1138000}, {0xc113a000}, {0xc113c000}, {0xc113e000}, 
+    {0xc1140000}, {0xc1142000}, {0xc1144000}, {0xc1146000}, 
+    {0xc1148000}, {0xc114a000}, {0xc114c000}, {0xc114e000}, 
+    {0xc1150000}, {0xc1152000}, {0xc1154000}, {0xc1156000}, 
+    {0xc1158000}, {0xc115a000}, {0xc115c000}, {0xc115e000}, 
+    {0xc1160000}, {0xc1162000}, {0xc1164000}, {0xc1166000}, 
+    {0xc1168000}, {0xc116a000}, {0xc116c000}, {0xc116e000}, 
+    {0xc1170000}, {0xc1172000}, {0xc1174000}, {0xc1176000}, 
+    {0xc1178000}, {0xc117a000}, {0xc117c000}, {0xc117e000}, 
+    {0xc1180000}, {0xc1182000}, {0xc1184000}, {0xc1186000}, 
+    {0xc1188000}, {0xc118a000}, {0xc118c000}, {0xc118e000}, 
+    {0xc1190000}, {0xc1192000}, {0xc1194000}, {0xc1196000}, 
+    {0xc1198000}, {0xc119a000}, {0xc119c000}, {0xc119e000}, 
+    {0xc11a0000}, {0xc11a2000}, {0xc11a4000}, {0xc11a6000}, 
+    {0xc11a8000}, {0xc11aa000}, {0xc11ac000}, {0xc11ae000}, 
+    {0xc11b0000}, {0xc11b2000}, {0xc11b4000}, {0xc11b6000}, 
+    {0xc11b8000}, {0xc11ba000}, {0xc11bc000}, {0xc11be000}, 
+    {0xc11c0000}, {0xc11c2000}, {0xc11c4000}, {0xc11c6000}, 
+    {0xc11c8000}, {0xc11ca000}, {0xc11cc000}, {0xc11ce000}, 
+    {0xc11d0000}, {0xc11d2000}, {0xc11d4000}, {0xc11d6000}, 
+    {0xc11d8000}, {0xc11da000}, {0xc11dc000}, {0xc11de000}, 
+    {0xc11e0000}, {0xc11e2000}, {0xc11e4000}, {0xc11e6000}, 
+    {0xc11e8000}, {0xc11ea000}, {0xc11ec000}, {0xc11ee000}, 
+    {0xc11f0000}, {0xc11f2000}, {0xc11f4000}, {0xc11f6000}, 
+    {0xc11f8000}, {0xc11fa000}, {0xc11fc000}, {0xc11fe000}, 
+    {0xc1200000}, {0xc1202000}, {0xc1204000}, {0xc1206000}, 
+    {0xc1208000}, {0xc120a000}, {0xc120c000}, {0xc120e000}, 
+    {0xc1210000}, {0xc1212000}, {0xc1214000}, {0xc1216000}, 
+    {0xc1218000}, {0xc121a000}, {0xc121c000}, {0xc121e000}, 
+    {0xc1220000}, {0xc1222000}, {0xc1224000}, {0xc1226000}, 
+    {0xc1228000}, {0xc122a000}, {0xc122c000}, {0xc122e000}, 
+    {0xc1230000}, {0xc1232000}, {0xc1234000}, {0xc1236000}, 
+    {0xc1238000}, {0xc123a000}, {0xc123c000}, {0xc123e000}, 
+    {0xc1240000}, {0xc1242000}, {0xc1244000}, {0xc1246000}, 
+    {0xc1248000}, {0xc124a000}, {0xc124c000}, {0xc124e000}, 
+    {0xc1250000}, {0xc1252000}, {0xc1254000}, {0xc1256000}, 
+    {0xc1258000}, {0xc125a000}, {0xc125c000}, {0xc125e000}, 
+    {0xc1260000}, {0xc1262000}, {0xc1264000}, {0xc1266000}, 
+    {0xc1268000}, {0xc126a000}, {0xc126c000}, {0xc126e000}, 
+    {0xc1270000}, {0xc1272000}, {0xc1274000}, {0xc1276000}, 
+    {0xc1278000}, {0xc127a000}, {0xc127c000}, {0xc127e000}, 
+    {0xc1280000}, {0xc1282000}, {0xc1284000}, {0xc1286000}, 
+    {0xc1288000}, {0xc128a000}, {0xc128c000}, {0xc128e000}, 
+    {0xc1290000}, {0xc1292000}, {0xc1294000}, {0xc1296000}, 
+    {0xc1298000}, {0xc129a000}, {0xc129c000}, {0xc129e000}, 
+    {0xc12a0000}, {0xc12a2000}, {0xc12a4000}, {0xc12a6000}, 
+    {0xc12a8000}, {0xc12aa000}, {0xc12ac000}, {0xc12ae000}, 
+    {0xc12b0000}, {0xc12b2000}, {0xc12b4000}, {0xc12b6000}, 
+    {0xc12b8000}, {0xc12ba000}, {0xc12bc000}, {0xc12be000}, 
+    {0xc12c0000}, {0xc12c2000}, {0xc12c4000}, {0xc12c6000}, 
+    {0xc12c8000}, {0xc12ca000}, {0xc12cc000}, {0xc12ce000}, 
+    {0xc12d0000}, {0xc12d2000}, {0xc12d4000}, {0xc12d6000}, 
+    {0xc12d8000}, {0xc12da000}, {0xc12dc000}, {0xc12de000}, 
+    {0xc12e0000}, {0xc12e2000}, {0xc12e4000}, {0xc12e6000}, 
+    {0xc12e8000}, {0xc12ea000}, {0xc12ec000}, {0xc12ee000}, 
+    {0xc12f0000}, {0xc12f2000}, {0xc12f4000}, {0xc12f6000}, 
+    {0xc12f8000}, {0xc12fa000}, {0xc12fc000}, {0xc12fe000}, 
+    {0xc1300000}, {0xc1302000}, {0xc1304000}, {0xc1306000}, 
+    {0xc1308000}, {0xc130a000}, {0xc130c000}, {0xc130e000}, 
+    {0xc1310000}, {0xc1312000}, {0xc1314000}, {0xc1316000}, 
+    {0xc1318000}, {0xc131a000}, {0xc131c000}, {0xc131e000}, 
+    {0xc1320000}, {0xc1322000}, {0xc1324000}, {0xc1326000}, 
+    {0xc1328000}, {0xc132a000}, {0xc132c000}, {0xc132e000}, 
+    {0xc1330000}, {0xc1332000}, {0xc1334000}, {0xc1336000}, 
+    {0xc1338000}, {0xc133a000}, {0xc133c000}, {0xc133e000}, 
+    {0xc1340000}, {0xc1342000}, {0xc1344000}, {0xc1346000}, 
+    {0xc1348000}, {0xc134a000}, {0xc134c000}, {0xc134e000}, 
+    {0xc1350000}, {0xc1352000}, {0xc1354000}, {0xc1356000}, 
+    {0xc1358000}, {0xc135a000}, {0xc135c000}, {0xc135e000}, 
+    {0xc1360000}, {0xc1362000}, {0xc1364000}, {0xc1366000}, 
+    {0xc1368000}, {0xc136a000}, {0xc136c000}, {0xc136e000}, 
+    {0xc1370000}, {0xc1372000}, {0xc1374000}, {0xc1376000}, 
+    {0xc1378000}, {0xc137a000}, {0xc137c000}, {0xc137e000}, 
+    {0xc1380000}, {0xc1382000}, {0xc1384000}, {0xc1386000}, 
+    {0xc1388000}, {0xc138a000}, {0xc138c000}, {0xc138e000}, 
+    {0xc1390000}, {0xc1392000}, {0xc1394000}, {0xc1396000}, 
+    {0xc1398000}, {0xc139a000}, {0xc139c000}, {0xc139e000}, 
+    {0xc13a0000}, {0xc13a2000}, {0xc13a4000}, {0xc13a6000}, 
+    {0xc13a8000}, {0xc13aa000}, {0xc13ac000}, {0xc13ae000}, 
+    {0xc13b0000}, {0xc13b2000}, {0xc13b4000}, {0xc13b6000}, 
+    {0xc13b8000}, {0xc13ba000}, {0xc13bc000}, {0xc13be000}, 
+    {0xc13c0000}, {0xc13c2000}, {0xc13c4000}, {0xc13c6000}, 
+    {0xc13c8000}, {0xc13ca000}, {0xc13cc000}, {0xc13ce000}, 
+    {0xc13d0000}, {0xc13d2000}, {0xc13d4000}, {0xc13d6000}, 
+    {0xc13d8000}, {0xc13da000}, {0xc13dc000}, {0xc13de000}, 
+    {0xc13e0000}, {0xc13e2000}, {0xc13e4000}, {0xc13e6000}, 
+    {0xc13e8000}, {0xc13ea000}, {0xc13ec000}, {0xc13ee000}, 
+    {0xc13f0000}, {0xc13f2000}, {0xc13f4000}, {0xc13f6000}, 
+    {0xc13f8000}, {0xc13fa000}, {0xc13fc000}, {0xc13fe000}, 
+    {0xc1400000}, {0xc1402000}, {0xc1404000}, {0xc1406000}, 
+    {0xc1408000}, {0xc140a000}, {0xc140c000}, {0xc140e000}, 
+    {0xc1410000}, {0xc1412000}, {0xc1414000}, {0xc1416000}, 
+    {0xc1418000}, {0xc141a000}, {0xc141c000}, {0xc141e000}, 
+    {0xc1420000}, {0xc1422000}, {0xc1424000}, {0xc1426000}, 
+    {0xc1428000}, {0xc142a000}, {0xc142c000}, {0xc142e000}, 
+    {0xc1430000}, {0xc1432000}, {0xc1434000}, {0xc1436000}, 
+    {0xc1438000}, {0xc143a000}, {0xc143c000}, {0xc143e000}, 
+    {0xc1440000}, {0xc1442000}, {0xc1444000}, {0xc1446000}, 
+    {0xc1448000}, {0xc144a000}, {0xc144c000}, {0xc144e000}, 
+    {0xc1450000}, {0xc1452000}, {0xc1454000}, {0xc1456000}, 
+    {0xc1458000}, {0xc145a000}, {0xc145c000}, {0xc145e000}, 
+    {0xc1460000}, {0xc1462000}, {0xc1464000}, {0xc1466000}, 
+    {0xc1468000}, {0xc146a000}, {0xc146c000}, {0xc146e000}, 
+    {0xc1470000}, {0xc1472000}, {0xc1474000}, {0xc1476000}, 
+    {0xc1478000}, {0xc147a000}, {0xc147c000}, {0xc147e000}, 
+    {0xc1480000}, {0xc1482000}, {0xc1484000}, {0xc1486000}, 
+    {0xc1488000}, {0xc148a000}, {0xc148c000}, {0xc148e000}, 
+    {0xc1490000}, {0xc1492000}, {0xc1494000}, {0xc1496000}, 
+    {0xc1498000}, {0xc149a000}, {0xc149c000}, {0xc149e000}, 
+    {0xc14a0000}, {0xc14a2000}, {0xc14a4000}, {0xc14a6000}, 
+    {0xc14a8000}, {0xc14aa000}, {0xc14ac000}, {0xc14ae000}, 
+    {0xc14b0000}, {0xc14b2000}, {0xc14b4000}, {0xc14b6000}, 
+    {0xc14b8000}, {0xc14ba000}, {0xc14bc000}, {0xc14be000}, 
+    {0xc14c0000}, {0xc14c2000}, {0xc14c4000}, {0xc14c6000}, 
+    {0xc14c8000}, {0xc14ca000}, {0xc14cc000}, {0xc14ce000}, 
+    {0xc14d0000}, {0xc14d2000}, {0xc14d4000}, {0xc14d6000}, 
+    {0xc14d8000}, {0xc14da000}, {0xc14dc000}, {0xc14de000}, 
+    {0xc14e0000}, {0xc14e2000}, {0xc14e4000}, {0xc14e6000}, 
+    {0xc14e8000}, {0xc14ea000}, {0xc14ec000}, {0xc14ee000}, 
+    {0xc14f0000}, {0xc14f2000}, {0xc14f4000}, {0xc14f6000}, 
+    {0xc14f8000}, {0xc14fa000}, {0xc14fc000}, {0xc14fe000}, 
+    {0xc1500000}, {0xc1502000}, {0xc1504000}, {0xc1506000}, 
+    {0xc1508000}, {0xc150a000}, {0xc150c000}, {0xc150e000}, 
+    {0xc1510000}, {0xc1512000}, {0xc1514000}, {0xc1516000}, 
+    {0xc1518000}, {0xc151a000}, {0xc151c000}, {0xc151e000}, 
+    {0xc1520000}, {0xc1522000}, {0xc1524000}, {0xc1526000}, 
+    {0xc1528000}, {0xc152a000}, {0xc152c000}, {0xc152e000}, 
+    {0xc1530000}, {0xc1532000}, {0xc1534000}, {0xc1536000}, 
+    {0xc1538000}, {0xc153a000}, {0xc153c000}, {0xc153e000}, 
+    {0xc1540000}, {0xc1542000}, {0xc1544000}, {0xc1546000}, 
+    {0xc1548000}, {0xc154a000}, {0xc154c000}, {0xc154e000}, 
+    {0xc1550000}, {0xc1552000}, {0xc1554000}, {0xc1556000}, 
+    {0xc1558000}, {0xc155a000}, {0xc155c000}, {0xc155e000}, 
+    {0xc1560000}, {0xc1562000}, {0xc1564000}, {0xc1566000}, 
+    {0xc1568000}, {0xc156a000}, {0xc156c000}, {0xc156e000}, 
+    {0xc1570000}, {0xc1572000}, {0xc1574000}, {0xc1576000}, 
+    {0xc1578000}, {0xc157a000}, {0xc157c000}, {0xc157e000}, 
+    {0xc1580000}, {0xc1582000}, {0xc1584000}, {0xc1586000}, 
+    {0xc1588000}, {0xc158a000}, {0xc158c000}, {0xc158e000}, 
+    {0xc1590000}, {0xc1592000}, {0xc1594000}, {0xc1596000}, 
+    {0xc1598000}, {0xc159a000}, {0xc159c000}, {0xc159e000}, 
+    {0xc15a0000}, {0xc15a2000}, {0xc15a4000}, {0xc15a6000}, 
+    {0xc15a8000}, {0xc15aa000}, {0xc15ac000}, {0xc15ae000}, 
+    {0xc15b0000}, {0xc15b2000}, {0xc15b4000}, {0xc15b6000}, 
+    {0xc15b8000}, {0xc15ba000}, {0xc15bc000}, {0xc15be000}, 
+    {0xc15c0000}, {0xc15c2000}, {0xc15c4000}, {0xc15c6000}, 
+    {0xc15c8000}, {0xc15ca000}, {0xc15cc000}, {0xc15ce000}, 
+    {0xc15d0000}, {0xc15d2000}, {0xc15d4000}, {0xc15d6000}, 
+    {0xc15d8000}, {0xc15da000}, {0xc15dc000}, {0xc15de000}, 
+    {0xc15e0000}, {0xc15e2000}, {0xc15e4000}, {0xc15e6000}, 
+    {0xc15e8000}, {0xc15ea000}, {0xc15ec000}, {0xc15ee000}, 
+    {0xc15f0000}, {0xc15f2000}, {0xc15f4000}, {0xc15f6000}, 
+    {0xc15f8000}, {0xc15fa000}, {0xc15fc000}, {0xc15fe000}, 
+    {0xc1600000}, {0xc1602000}, {0xc1604000}, {0xc1606000}, 
+    {0xc1608000}, {0xc160a000}, {0xc160c000}, {0xc160e000}, 
+    {0xc1610000}, {0xc1612000}, {0xc1614000}, {0xc1616000}, 
+    {0xc1618000}, {0xc161a000}, {0xc161c000}, {0xc161e000}, 
+    {0xc1620000}, {0xc1622000}, {0xc1624000}, {0xc1626000}, 
+    {0xc1628000}, {0xc162a000}, {0xc162c000}, {0xc162e000}, 
+    {0xc1630000}, {0xc1632000}, {0xc1634000}, {0xc1636000}, 
+    {0xc1638000}, {0xc163a000}, {0xc163c000}, {0xc163e000}, 
+    {0xc1640000}, {0xc1642000}, {0xc1644000}, {0xc1646000}, 
+    {0xc1648000}, {0xc164a000}, {0xc164c000}, {0xc164e000}, 
+    {0xc1650000}, {0xc1652000}, {0xc1654000}, {0xc1656000}, 
+    {0xc1658000}, {0xc165a000}, {0xc165c000}, {0xc165e000}, 
+    {0xc1660000}, {0xc1662000}, {0xc1664000}, {0xc1666000}, 
+    {0xc1668000}, {0xc166a000}, {0xc166c000}, {0xc166e000}, 
+    {0xc1670000}, {0xc1672000}, {0xc1674000}, {0xc1676000}, 
+    {0xc1678000}, {0xc167a000}, {0xc167c000}, {0xc167e000}, 
+    {0xc1680000}, {0xc1682000}, {0xc1684000}, {0xc1686000}, 
+    {0xc1688000}, {0xc168a000}, {0xc168c000}, {0xc168e000}, 
+    {0xc1690000}, {0xc1692000}, {0xc1694000}, {0xc1696000}, 
+    {0xc1698000}, {0xc169a000}, {0xc169c000}, {0xc169e000}, 
+    {0xc16a0000}, {0xc16a2000}, {0xc16a4000}, {0xc16a6000}, 
+    {0xc16a8000}, {0xc16aa000}, {0xc16ac000}, {0xc16ae000}, 
+    {0xc16b0000}, {0xc16b2000}, {0xc16b4000}, {0xc16b6000}, 
+    {0xc16b8000}, {0xc16ba000}, {0xc16bc000}, {0xc16be000}, 
+    {0xc16c0000}, {0xc16c2000}, {0xc16c4000}, {0xc16c6000}, 
+    {0xc16c8000}, {0xc16ca000}, {0xc16cc000}, {0xc16ce000}, 
+    {0xc16d0000}, {0xc16d2000}, {0xc16d4000}, {0xc16d6000}, 
+    {0xc16d8000}, {0xc16da000}, {0xc16dc000}, {0xc16de000}, 
+    {0xc16e0000}, {0xc16e2000}, {0xc16e4000}, {0xc16e6000}, 
+    {0xc16e8000}, {0xc16ea000}, {0xc16ec000}, {0xc16ee000}, 
+    {0xc16f0000}, {0xc16f2000}, {0xc16f4000}, {0xc16f6000}, 
+    {0xc16f8000}, {0xc16fa000}, {0xc16fc000}, {0xc16fe000}, 
+    {0xc1700000}, {0xc1702000}, {0xc1704000}, {0xc1706000}, 
+    {0xc1708000}, {0xc170a000}, {0xc170c000}, {0xc170e000}, 
+    {0xc1710000}, {0xc1712000}, {0xc1714000}, {0xc1716000}, 
+    {0xc1718000}, {0xc171a000}, {0xc171c000}, {0xc171e000}, 
+    {0xc1720000}, {0xc1722000}, {0xc1724000}, {0xc1726000}, 
+    {0xc1728000}, {0xc172a000}, {0xc172c000}, {0xc172e000}, 
+    {0xc1730000}, {0xc1732000}, {0xc1734000}, {0xc1736000}, 
+    {0xc1738000}, {0xc173a000}, {0xc173c000}, {0xc173e000}, 
+    {0xc1740000}, {0xc1742000}, {0xc1744000}, {0xc1746000}, 
+    {0xc1748000}, {0xc174a000}, {0xc174c000}, {0xc174e000}, 
+    {0xc1750000}, {0xc1752000}, {0xc1754000}, {0xc1756000}, 
+    {0xc1758000}, {0xc175a000}, {0xc175c000}, {0xc175e000}, 
+    {0xc1760000}, {0xc1762000}, {0xc1764000}, {0xc1766000}, 
+    {0xc1768000}, {0xc176a000}, {0xc176c000}, {0xc176e000}, 
+    {0xc1770000}, {0xc1772000}, {0xc1774000}, {0xc1776000}, 
+    {0xc1778000}, {0xc177a000}, {0xc177c000}, {0xc177e000}, 
+    {0xc1780000}, {0xc1782000}, {0xc1784000}, {0xc1786000}, 
+    {0xc1788000}, {0xc178a000}, {0xc178c000}, {0xc178e000}, 
+    {0xc1790000}, {0xc1792000}, {0xc1794000}, {0xc1796000}, 
+    {0xc1798000}, {0xc179a000}, {0xc179c000}, {0xc179e000}, 
+    {0xc17a0000}, {0xc17a2000}, {0xc17a4000}, {0xc17a6000}, 
+    {0xc17a8000}, {0xc17aa000}, {0xc17ac000}, {0xc17ae000}, 
+    {0xc17b0000}, {0xc17b2000}, {0xc17b4000}, {0xc17b6000}, 
+    {0xc17b8000}, {0xc17ba000}, {0xc17bc000}, {0xc17be000}, 
+    {0xc17c0000}, {0xc17c2000}, {0xc17c4000}, {0xc17c6000}, 
+    {0xc17c8000}, {0xc17ca000}, {0xc17cc000}, {0xc17ce000}, 
+    {0xc17d0000}, {0xc17d2000}, {0xc17d4000}, {0xc17d6000}, 
+    {0xc17d8000}, {0xc17da000}, {0xc17dc000}, {0xc17de000}, 
+    {0xc17e0000}, {0xc17e2000}, {0xc17e4000}, {0xc17e6000}, 
+    {0xc17e8000}, {0xc17ea000}, {0xc17ec000}, {0xc17ee000}, 
+    {0xc17f0000}, {0xc17f2000}, {0xc17f4000}, {0xc17f6000}, 
+    {0xc17f8000}, {0xc17fa000}, {0xc17fc000}, {0xc17fe000}, 
+    {0xc1800000}, {0xc1802000}, {0xc1804000}, {0xc1806000}, 
+    {0xc1808000}, {0xc180a000}, {0xc180c000}, {0xc180e000}, 
+    {0xc1810000}, {0xc1812000}, {0xc1814000}, {0xc1816000}, 
+    {0xc1818000}, {0xc181a000}, {0xc181c000}, {0xc181e000}, 
+    {0xc1820000}, {0xc1822000}, {0xc1824000}, {0xc1826000}, 
+    {0xc1828000}, {0xc182a000}, {0xc182c000}, {0xc182e000}, 
+    {0xc1830000}, {0xc1832000}, {0xc1834000}, {0xc1836000}, 
+    {0xc1838000}, {0xc183a000}, {0xc183c000}, {0xc183e000}, 
+    {0xc1840000}, {0xc1842000}, {0xc1844000}, {0xc1846000}, 
+    {0xc1848000}, {0xc184a000}, {0xc184c000}, {0xc184e000}, 
+    {0xc1850000}, {0xc1852000}, {0xc1854000}, {0xc1856000}, 
+    {0xc1858000}, {0xc185a000}, {0xc185c000}, {0xc185e000}, 
+    {0xc1860000}, {0xc1862000}, {0xc1864000}, {0xc1866000}, 
+    {0xc1868000}, {0xc186a000}, {0xc186c000}, {0xc186e000}, 
+    {0xc1870000}, {0xc1872000}, {0xc1874000}, {0xc1876000}, 
+    {0xc1878000}, {0xc187a000}, {0xc187c000}, {0xc187e000}, 
+    {0xc1880000}, {0xc1882000}, {0xc1884000}, {0xc1886000}, 
+    {0xc1888000}, {0xc188a000}, {0xc188c000}, {0xc188e000}, 
+    {0xc1890000}, {0xc1892000}, {0xc1894000}, {0xc1896000}, 
+    {0xc1898000}, {0xc189a000}, {0xc189c000}, {0xc189e000}, 
+    {0xc18a0000}, {0xc18a2000}, {0xc18a4000}, {0xc18a6000}, 
+    {0xc18a8000}, {0xc18aa000}, {0xc18ac000}, {0xc18ae000}, 
+    {0xc18b0000}, {0xc18b2000}, {0xc18b4000}, {0xc18b6000}, 
+    {0xc18b8000}, {0xc18ba000}, {0xc18bc000}, {0xc18be000}, 
+    {0xc18c0000}, {0xc18c2000}, {0xc18c4000}, {0xc18c6000}, 
+    {0xc18c8000}, {0xc18ca000}, {0xc18cc000}, {0xc18ce000}, 
+    {0xc18d0000}, {0xc18d2000}, {0xc18d4000}, {0xc18d6000}, 
+    {0xc18d8000}, {0xc18da000}, {0xc18dc000}, {0xc18de000}, 
+    {0xc18e0000}, {0xc18e2000}, {0xc18e4000}, {0xc18e6000}, 
+    {0xc18e8000}, {0xc18ea000}, {0xc18ec000}, {0xc18ee000}, 
+    {0xc18f0000}, {0xc18f2000}, {0xc18f4000}, {0xc18f6000}, 
+    {0xc18f8000}, {0xc18fa000}, {0xc18fc000}, {0xc18fe000}, 
+    {0xc1900000}, {0xc1902000}, {0xc1904000}, {0xc1906000}, 
+    {0xc1908000}, {0xc190a000}, {0xc190c000}, {0xc190e000}, 
+    {0xc1910000}, {0xc1912000}, {0xc1914000}, {0xc1916000}, 
+    {0xc1918000}, {0xc191a000}, {0xc191c000}, {0xc191e000}, 
+    {0xc1920000}, {0xc1922000}, {0xc1924000}, {0xc1926000}, 
+    {0xc1928000}, {0xc192a000}, {0xc192c000}, {0xc192e000}, 
+    {0xc1930000}, {0xc1932000}, {0xc1934000}, {0xc1936000}, 
+    {0xc1938000}, {0xc193a000}, {0xc193c000}, {0xc193e000}, 
+    {0xc1940000}, {0xc1942000}, {0xc1944000}, {0xc1946000}, 
+    {0xc1948000}, {0xc194a000}, {0xc194c000}, {0xc194e000}, 
+    {0xc1950000}, {0xc1952000}, {0xc1954000}, {0xc1956000}, 
+    {0xc1958000}, {0xc195a000}, {0xc195c000}, {0xc195e000}, 
+    {0xc1960000}, {0xc1962000}, {0xc1964000}, {0xc1966000}, 
+    {0xc1968000}, {0xc196a000}, {0xc196c000}, {0xc196e000}, 
+    {0xc1970000}, {0xc1972000}, {0xc1974000}, {0xc1976000}, 
+    {0xc1978000}, {0xc197a000}, {0xc197c000}, {0xc197e000}, 
+    {0xc1980000}, {0xc1982000}, {0xc1984000}, {0xc1986000}, 
+    {0xc1988000}, {0xc198a000}, {0xc198c000}, {0xc198e000}, 
+    {0xc1990000}, {0xc1992000}, {0xc1994000}, {0xc1996000}, 
+    {0xc1998000}, {0xc199a000}, {0xc199c000}, {0xc199e000}, 
+    {0xc19a0000}, {0xc19a2000}, {0xc19a4000}, {0xc19a6000}, 
+    {0xc19a8000}, {0xc19aa000}, {0xc19ac000}, {0xc19ae000}, 
+    {0xc19b0000}, {0xc19b2000}, {0xc19b4000}, {0xc19b6000}, 
+    {0xc19b8000}, {0xc19ba000}, {0xc19bc000}, {0xc19be000}, 
+    {0xc19c0000}, {0xc19c2000}, {0xc19c4000}, {0xc19c6000}, 
+    {0xc19c8000}, {0xc19ca000}, {0xc19cc000}, {0xc19ce000}, 
+    {0xc19d0000}, {0xc19d2000}, {0xc19d4000}, {0xc19d6000}, 
+    {0xc19d8000}, {0xc19da000}, {0xc19dc000}, {0xc19de000}, 
+    {0xc19e0000}, {0xc19e2000}, {0xc19e4000}, {0xc19e6000}, 
+    {0xc19e8000}, {0xc19ea000}, {0xc19ec000}, {0xc19ee000}, 
+    {0xc19f0000}, {0xc19f2000}, {0xc19f4000}, {0xc19f6000}, 
+    {0xc19f8000}, {0xc19fa000}, {0xc19fc000}, {0xc19fe000}, 
+    {0xc1a00000}, {0xc1a02000}, {0xc1a04000}, {0xc1a06000}, 
+    {0xc1a08000}, {0xc1a0a000}, {0xc1a0c000}, {0xc1a0e000}, 
+    {0xc1a10000}, {0xc1a12000}, {0xc1a14000}, {0xc1a16000}, 
+    {0xc1a18000}, {0xc1a1a000}, {0xc1a1c000}, {0xc1a1e000}, 
+    {0xc1a20000}, {0xc1a22000}, {0xc1a24000}, {0xc1a26000}, 
+    {0xc1a28000}, {0xc1a2a000}, {0xc1a2c000}, {0xc1a2e000}, 
+    {0xc1a30000}, {0xc1a32000}, {0xc1a34000}, {0xc1a36000}, 
+    {0xc1a38000}, {0xc1a3a000}, {0xc1a3c000}, {0xc1a3e000}, 
+    {0xc1a40000}, {0xc1a42000}, {0xc1a44000}, {0xc1a46000}, 
+    {0xc1a48000}, {0xc1a4a000}, {0xc1a4c000}, {0xc1a4e000}, 
+    {0xc1a50000}, {0xc1a52000}, {0xc1a54000}, {0xc1a56000}, 
+    {0xc1a58000}, {0xc1a5a000}, {0xc1a5c000}, {0xc1a5e000}, 
+    {0xc1a60000}, {0xc1a62000}, {0xc1a64000}, {0xc1a66000}, 
+    {0xc1a68000}, {0xc1a6a000}, {0xc1a6c000}, {0xc1a6e000}, 
+    {0xc1a70000}, {0xc1a72000}, {0xc1a74000}, {0xc1a76000}, 
+    {0xc1a78000}, {0xc1a7a000}, {0xc1a7c000}, {0xc1a7e000}, 
+    {0xc1a80000}, {0xc1a82000}, {0xc1a84000}, {0xc1a86000}, 
+    {0xc1a88000}, {0xc1a8a000}, {0xc1a8c000}, {0xc1a8e000}, 
+    {0xc1a90000}, {0xc1a92000}, {0xc1a94000}, {0xc1a96000}, 
+    {0xc1a98000}, {0xc1a9a000}, {0xc1a9c000}, {0xc1a9e000}, 
+    {0xc1aa0000}, {0xc1aa2000}, {0xc1aa4000}, {0xc1aa6000}, 
+    {0xc1aa8000}, {0xc1aaa000}, {0xc1aac000}, {0xc1aae000}, 
+    {0xc1ab0000}, {0xc1ab2000}, {0xc1ab4000}, {0xc1ab6000}, 
+    {0xc1ab8000}, {0xc1aba000}, {0xc1abc000}, {0xc1abe000}, 
+    {0xc1ac0000}, {0xc1ac2000}, {0xc1ac4000}, {0xc1ac6000}, 
+    {0xc1ac8000}, {0xc1aca000}, {0xc1acc000}, {0xc1ace000}, 
+    {0xc1ad0000}, {0xc1ad2000}, {0xc1ad4000}, {0xc1ad6000}, 
+    {0xc1ad8000}, {0xc1ada000}, {0xc1adc000}, {0xc1ade000}, 
+    {0xc1ae0000}, {0xc1ae2000}, {0xc1ae4000}, {0xc1ae6000}, 
+    {0xc1ae8000}, {0xc1aea000}, {0xc1aec000}, {0xc1aee000}, 
+    {0xc1af0000}, {0xc1af2000}, {0xc1af4000}, {0xc1af6000}, 
+    {0xc1af8000}, {0xc1afa000}, {0xc1afc000}, {0xc1afe000}, 
+    {0xc1b00000}, {0xc1b02000}, {0xc1b04000}, {0xc1b06000}, 
+    {0xc1b08000}, {0xc1b0a000}, {0xc1b0c000}, {0xc1b0e000}, 
+    {0xc1b10000}, {0xc1b12000}, {0xc1b14000}, {0xc1b16000}, 
+    {0xc1b18000}, {0xc1b1a000}, {0xc1b1c000}, {0xc1b1e000}, 
+    {0xc1b20000}, {0xc1b22000}, {0xc1b24000}, {0xc1b26000}, 
+    {0xc1b28000}, {0xc1b2a000}, {0xc1b2c000}, {0xc1b2e000}, 
+    {0xc1b30000}, {0xc1b32000}, {0xc1b34000}, {0xc1b36000}, 
+    {0xc1b38000}, {0xc1b3a000}, {0xc1b3c000}, {0xc1b3e000}, 
+    {0xc1b40000}, {0xc1b42000}, {0xc1b44000}, {0xc1b46000}, 
+    {0xc1b48000}, {0xc1b4a000}, {0xc1b4c000}, {0xc1b4e000}, 
+    {0xc1b50000}, {0xc1b52000}, {0xc1b54000}, {0xc1b56000}, 
+    {0xc1b58000}, {0xc1b5a000}, {0xc1b5c000}, {0xc1b5e000}, 
+    {0xc1b60000}, {0xc1b62000}, {0xc1b64000}, {0xc1b66000}, 
+    {0xc1b68000}, {0xc1b6a000}, {0xc1b6c000}, {0xc1b6e000}, 
+    {0xc1b70000}, {0xc1b72000}, {0xc1b74000}, {0xc1b76000}, 
+    {0xc1b78000}, {0xc1b7a000}, {0xc1b7c000}, {0xc1b7e000}, 
+    {0xc1b80000}, {0xc1b82000}, {0xc1b84000}, {0xc1b86000}, 
+    {0xc1b88000}, {0xc1b8a000}, {0xc1b8c000}, {0xc1b8e000}, 
+    {0xc1b90000}, {0xc1b92000}, {0xc1b94000}, {0xc1b96000}, 
+    {0xc1b98000}, {0xc1b9a000}, {0xc1b9c000}, {0xc1b9e000}, 
+    {0xc1ba0000}, {0xc1ba2000}, {0xc1ba4000}, {0xc1ba6000}, 
+    {0xc1ba8000}, {0xc1baa000}, {0xc1bac000}, {0xc1bae000}, 
+    {0xc1bb0000}, {0xc1bb2000}, {0xc1bb4000}, {0xc1bb6000}, 
+    {0xc1bb8000}, {0xc1bba000}, {0xc1bbc000}, {0xc1bbe000}, 
+    {0xc1bc0000}, {0xc1bc2000}, {0xc1bc4000}, {0xc1bc6000}, 
+    {0xc1bc8000}, {0xc1bca000}, {0xc1bcc000}, {0xc1bce000}, 
+    {0xc1bd0000}, {0xc1bd2000}, {0xc1bd4000}, {0xc1bd6000}, 
+    {0xc1bd8000}, {0xc1bda000}, {0xc1bdc000}, {0xc1bde000}, 
+    {0xc1be0000}, {0xc1be2000}, {0xc1be4000}, {0xc1be6000}, 
+    {0xc1be8000}, {0xc1bea000}, {0xc1bec000}, {0xc1bee000}, 
+    {0xc1bf0000}, {0xc1bf2000}, {0xc1bf4000}, {0xc1bf6000}, 
+    {0xc1bf8000}, {0xc1bfa000}, {0xc1bfc000}, {0xc1bfe000}, 
+    {0xc1c00000}, {0xc1c02000}, {0xc1c04000}, {0xc1c06000}, 
+    {0xc1c08000}, {0xc1c0a000}, {0xc1c0c000}, {0xc1c0e000}, 
+    {0xc1c10000}, {0xc1c12000}, {0xc1c14000}, {0xc1c16000}, 
+    {0xc1c18000}, {0xc1c1a000}, {0xc1c1c000}, {0xc1c1e000}, 
+    {0xc1c20000}, {0xc1c22000}, {0xc1c24000}, {0xc1c26000}, 
+    {0xc1c28000}, {0xc1c2a000}, {0xc1c2c000}, {0xc1c2e000}, 
+    {0xc1c30000}, {0xc1c32000}, {0xc1c34000}, {0xc1c36000}, 
+    {0xc1c38000}, {0xc1c3a000}, {0xc1c3c000}, {0xc1c3e000}, 
+    {0xc1c40000}, {0xc1c42000}, {0xc1c44000}, {0xc1c46000}, 
+    {0xc1c48000}, {0xc1c4a000}, {0xc1c4c000}, {0xc1c4e000}, 
+    {0xc1c50000}, {0xc1c52000}, {0xc1c54000}, {0xc1c56000}, 
+    {0xc1c58000}, {0xc1c5a000}, {0xc1c5c000}, {0xc1c5e000}, 
+    {0xc1c60000}, {0xc1c62000}, {0xc1c64000}, {0xc1c66000}, 
+    {0xc1c68000}, {0xc1c6a000}, {0xc1c6c000}, {0xc1c6e000}, 
+    {0xc1c70000}, {0xc1c72000}, {0xc1c74000}, {0xc1c76000}, 
+    {0xc1c78000}, {0xc1c7a000}, {0xc1c7c000}, {0xc1c7e000}, 
+    {0xc1c80000}, {0xc1c82000}, {0xc1c84000}, {0xc1c86000}, 
+    {0xc1c88000}, {0xc1c8a000}, {0xc1c8c000}, {0xc1c8e000}, 
+    {0xc1c90000}, {0xc1c92000}, {0xc1c94000}, {0xc1c96000}, 
+    {0xc1c98000}, {0xc1c9a000}, {0xc1c9c000}, {0xc1c9e000}, 
+    {0xc1ca0000}, {0xc1ca2000}, {0xc1ca4000}, {0xc1ca6000}, 
+    {0xc1ca8000}, {0xc1caa000}, {0xc1cac000}, {0xc1cae000}, 
+    {0xc1cb0000}, {0xc1cb2000}, {0xc1cb4000}, {0xc1cb6000}, 
+    {0xc1cb8000}, {0xc1cba000}, {0xc1cbc000}, {0xc1cbe000}, 
+    {0xc1cc0000}, {0xc1cc2000}, {0xc1cc4000}, {0xc1cc6000}, 
+    {0xc1cc8000}, {0xc1cca000}, {0xc1ccc000}, {0xc1cce000}, 
+    {0xc1cd0000}, {0xc1cd2000}, {0xc1cd4000}, {0xc1cd6000}, 
+    {0xc1cd8000}, {0xc1cda000}, {0xc1cdc000}, {0xc1cde000}, 
+    {0xc1ce0000}, {0xc1ce2000}, {0xc1ce4000}, {0xc1ce6000}, 
+    {0xc1ce8000}, {0xc1cea000}, {0xc1cec000}, {0xc1cee000}, 
+    {0xc1cf0000}, {0xc1cf2000}, {0xc1cf4000}, {0xc1cf6000}, 
+    {0xc1cf8000}, {0xc1cfa000}, {0xc1cfc000}, {0xc1cfe000}, 
+    {0xc1d00000}, {0xc1d02000}, {0xc1d04000}, {0xc1d06000}, 
+    {0xc1d08000}, {0xc1d0a000}, {0xc1d0c000}, {0xc1d0e000}, 
+    {0xc1d10000}, {0xc1d12000}, {0xc1d14000}, {0xc1d16000}, 
+    {0xc1d18000}, {0xc1d1a000}, {0xc1d1c000}, {0xc1d1e000}, 
+    {0xc1d20000}, {0xc1d22000}, {0xc1d24000}, {0xc1d26000}, 
+    {0xc1d28000}, {0xc1d2a000}, {0xc1d2c000}, {0xc1d2e000}, 
+    {0xc1d30000}, {0xc1d32000}, {0xc1d34000}, {0xc1d36000}, 
+    {0xc1d38000}, {0xc1d3a000}, {0xc1d3c000}, {0xc1d3e000}, 
+    {0xc1d40000}, {0xc1d42000}, {0xc1d44000}, {0xc1d46000}, 
+    {0xc1d48000}, {0xc1d4a000}, {0xc1d4c000}, {0xc1d4e000}, 
+    {0xc1d50000}, {0xc1d52000}, {0xc1d54000}, {0xc1d56000}, 
+    {0xc1d58000}, {0xc1d5a000}, {0xc1d5c000}, {0xc1d5e000}, 
+    {0xc1d60000}, {0xc1d62000}, {0xc1d64000}, {0xc1d66000}, 
+    {0xc1d68000}, {0xc1d6a000}, {0xc1d6c000}, {0xc1d6e000}, 
+    {0xc1d70000}, {0xc1d72000}, {0xc1d74000}, {0xc1d76000}, 
+    {0xc1d78000}, {0xc1d7a000}, {0xc1d7c000}, {0xc1d7e000}, 
+    {0xc1d80000}, {0xc1d82000}, {0xc1d84000}, {0xc1d86000}, 
+    {0xc1d88000}, {0xc1d8a000}, {0xc1d8c000}, {0xc1d8e000}, 
+    {0xc1d90000}, {0xc1d92000}, {0xc1d94000}, {0xc1d96000}, 
+    {0xc1d98000}, {0xc1d9a000}, {0xc1d9c000}, {0xc1d9e000}, 
+    {0xc1da0000}, {0xc1da2000}, {0xc1da4000}, {0xc1da6000}, 
+    {0xc1da8000}, {0xc1daa000}, {0xc1dac000}, {0xc1dae000}, 
+    {0xc1db0000}, {0xc1db2000}, {0xc1db4000}, {0xc1db6000}, 
+    {0xc1db8000}, {0xc1dba000}, {0xc1dbc000}, {0xc1dbe000}, 
+    {0xc1dc0000}, {0xc1dc2000}, {0xc1dc4000}, {0xc1dc6000}, 
+    {0xc1dc8000}, {0xc1dca000}, {0xc1dcc000}, {0xc1dce000}, 
+    {0xc1dd0000}, {0xc1dd2000}, {0xc1dd4000}, {0xc1dd6000}, 
+    {0xc1dd8000}, {0xc1dda000}, {0xc1ddc000}, {0xc1dde000}, 
+    {0xc1de0000}, {0xc1de2000}, {0xc1de4000}, {0xc1de6000}, 
+    {0xc1de8000}, {0xc1dea000}, {0xc1dec000}, {0xc1dee000}, 
+    {0xc1df0000}, {0xc1df2000}, {0xc1df4000}, {0xc1df6000}, 
+    {0xc1df8000}, {0xc1dfa000}, {0xc1dfc000}, {0xc1dfe000}, 
+    {0xc1e00000}, {0xc1e02000}, {0xc1e04000}, {0xc1e06000}, 
+    {0xc1e08000}, {0xc1e0a000}, {0xc1e0c000}, {0xc1e0e000}, 
+    {0xc1e10000}, {0xc1e12000}, {0xc1e14000}, {0xc1e16000}, 
+    {0xc1e18000}, {0xc1e1a000}, {0xc1e1c000}, {0xc1e1e000}, 
+    {0xc1e20000}, {0xc1e22000}, {0xc1e24000}, {0xc1e26000}, 
+    {0xc1e28000}, {0xc1e2a000}, {0xc1e2c000}, {0xc1e2e000}, 
+    {0xc1e30000}, {0xc1e32000}, {0xc1e34000}, {0xc1e36000}, 
+    {0xc1e38000}, {0xc1e3a000}, {0xc1e3c000}, {0xc1e3e000}, 
+    {0xc1e40000}, {0xc1e42000}, {0xc1e44000}, {0xc1e46000}, 
+    {0xc1e48000}, {0xc1e4a000}, {0xc1e4c000}, {0xc1e4e000}, 
+    {0xc1e50000}, {0xc1e52000}, {0xc1e54000}, {0xc1e56000}, 
+    {0xc1e58000}, {0xc1e5a000}, {0xc1e5c000}, {0xc1e5e000}, 
+    {0xc1e60000}, {0xc1e62000}, {0xc1e64000}, {0xc1e66000}, 
+    {0xc1e68000}, {0xc1e6a000}, {0xc1e6c000}, {0xc1e6e000}, 
+    {0xc1e70000}, {0xc1e72000}, {0xc1e74000}, {0xc1e76000}, 
+    {0xc1e78000}, {0xc1e7a000}, {0xc1e7c000}, {0xc1e7e000}, 
+    {0xc1e80000}, {0xc1e82000}, {0xc1e84000}, {0xc1e86000}, 
+    {0xc1e88000}, {0xc1e8a000}, {0xc1e8c000}, {0xc1e8e000}, 
+    {0xc1e90000}, {0xc1e92000}, {0xc1e94000}, {0xc1e96000}, 
+    {0xc1e98000}, {0xc1e9a000}, {0xc1e9c000}, {0xc1e9e000}, 
+    {0xc1ea0000}, {0xc1ea2000}, {0xc1ea4000}, {0xc1ea6000}, 
+    {0xc1ea8000}, {0xc1eaa000}, {0xc1eac000}, {0xc1eae000}, 
+    {0xc1eb0000}, {0xc1eb2000}, {0xc1eb4000}, {0xc1eb6000}, 
+    {0xc1eb8000}, {0xc1eba000}, {0xc1ebc000}, {0xc1ebe000}, 
+    {0xc1ec0000}, {0xc1ec2000}, {0xc1ec4000}, {0xc1ec6000}, 
+    {0xc1ec8000}, {0xc1eca000}, {0xc1ecc000}, {0xc1ece000}, 
+    {0xc1ed0000}, {0xc1ed2000}, {0xc1ed4000}, {0xc1ed6000}, 
+    {0xc1ed8000}, {0xc1eda000}, {0xc1edc000}, {0xc1ede000}, 
+    {0xc1ee0000}, {0xc1ee2000}, {0xc1ee4000}, {0xc1ee6000}, 
+    {0xc1ee8000}, {0xc1eea000}, {0xc1eec000}, {0xc1eee000}, 
+    {0xc1ef0000}, {0xc1ef2000}, {0xc1ef4000}, {0xc1ef6000}, 
+    {0xc1ef8000}, {0xc1efa000}, {0xc1efc000}, {0xc1efe000}, 
+    {0xc1f00000}, {0xc1f02000}, {0xc1f04000}, {0xc1f06000}, 
+    {0xc1f08000}, {0xc1f0a000}, {0xc1f0c000}, {0xc1f0e000}, 
+    {0xc1f10000}, {0xc1f12000}, {0xc1f14000}, {0xc1f16000}, 
+    {0xc1f18000}, {0xc1f1a000}, {0xc1f1c000}, {0xc1f1e000}, 
+    {0xc1f20000}, {0xc1f22000}, {0xc1f24000}, {0xc1f26000}, 
+    {0xc1f28000}, {0xc1f2a000}, {0xc1f2c000}, {0xc1f2e000}, 
+    {0xc1f30000}, {0xc1f32000}, {0xc1f34000}, {0xc1f36000}, 
+    {0xc1f38000}, {0xc1f3a000}, {0xc1f3c000}, {0xc1f3e000}, 
+    {0xc1f40000}, {0xc1f42000}, {0xc1f44000}, {0xc1f46000}, 
+    {0xc1f48000}, {0xc1f4a000}, {0xc1f4c000}, {0xc1f4e000}, 
+    {0xc1f50000}, {0xc1f52000}, {0xc1f54000}, {0xc1f56000}, 
+    {0xc1f58000}, {0xc1f5a000}, {0xc1f5c000}, {0xc1f5e000}, 
+    {0xc1f60000}, {0xc1f62000}, {0xc1f64000}, {0xc1f66000}, 
+    {0xc1f68000}, {0xc1f6a000}, {0xc1f6c000}, {0xc1f6e000}, 
+    {0xc1f70000}, {0xc1f72000}, {0xc1f74000}, {0xc1f76000}, 
+    {0xc1f78000}, {0xc1f7a000}, {0xc1f7c000}, {0xc1f7e000}, 
+    {0xc1f80000}, {0xc1f82000}, {0xc1f84000}, {0xc1f86000}, 
+    {0xc1f88000}, {0xc1f8a000}, {0xc1f8c000}, {0xc1f8e000}, 
+    {0xc1f90000}, {0xc1f92000}, {0xc1f94000}, {0xc1f96000}, 
+    {0xc1f98000}, {0xc1f9a000}, {0xc1f9c000}, {0xc1f9e000}, 
+    {0xc1fa0000}, {0xc1fa2000}, {0xc1fa4000}, {0xc1fa6000}, 
+    {0xc1fa8000}, {0xc1faa000}, {0xc1fac000}, {0xc1fae000}, 
+    {0xc1fb0000}, {0xc1fb2000}, {0xc1fb4000}, {0xc1fb6000}, 
+    {0xc1fb8000}, {0xc1fba000}, {0xc1fbc000}, {0xc1fbe000}, 
+    {0xc1fc0000}, {0xc1fc2000}, {0xc1fc4000}, {0xc1fc6000}, 
+    {0xc1fc8000}, {0xc1fca000}, {0xc1fcc000}, {0xc1fce000}, 
+    {0xc1fd0000}, {0xc1fd2000}, {0xc1fd4000}, {0xc1fd6000}, 
+    {0xc1fd8000}, {0xc1fda000}, {0xc1fdc000}, {0xc1fde000}, 
+    {0xc1fe0000}, {0xc1fe2000}, {0xc1fe4000}, {0xc1fe6000}, 
+    {0xc1fe8000}, {0xc1fea000}, {0xc1fec000}, {0xc1fee000}, 
+    {0xc1ff0000}, {0xc1ff2000}, {0xc1ff4000}, {0xc1ff6000}, 
+    {0xc1ff8000}, {0xc1ffa000}, {0xc1ffc000}, {0xc1ffe000}, 
+    {0xc2000000}, {0xc2002000}, {0xc2004000}, {0xc2006000}, 
+    {0xc2008000}, {0xc200a000}, {0xc200c000}, {0xc200e000}, 
+    {0xc2010000}, {0xc2012000}, {0xc2014000}, {0xc2016000}, 
+    {0xc2018000}, {0xc201a000}, {0xc201c000}, {0xc201e000}, 
+    {0xc2020000}, {0xc2022000}, {0xc2024000}, {0xc2026000}, 
+    {0xc2028000}, {0xc202a000}, {0xc202c000}, {0xc202e000}, 
+    {0xc2030000}, {0xc2032000}, {0xc2034000}, {0xc2036000}, 
+    {0xc2038000}, {0xc203a000}, {0xc203c000}, {0xc203e000}, 
+    {0xc2040000}, {0xc2042000}, {0xc2044000}, {0xc2046000}, 
+    {0xc2048000}, {0xc204a000}, {0xc204c000}, {0xc204e000}, 
+    {0xc2050000}, {0xc2052000}, {0xc2054000}, {0xc2056000}, 
+    {0xc2058000}, {0xc205a000}, {0xc205c000}, {0xc205e000}, 
+    {0xc2060000}, {0xc2062000}, {0xc2064000}, {0xc2066000}, 
+    {0xc2068000}, {0xc206a000}, {0xc206c000}, {0xc206e000}, 
+    {0xc2070000}, {0xc2072000}, {0xc2074000}, {0xc2076000}, 
+    {0xc2078000}, {0xc207a000}, {0xc207c000}, {0xc207e000}, 
+    {0xc2080000}, {0xc2082000}, {0xc2084000}, {0xc2086000}, 
+    {0xc2088000}, {0xc208a000}, {0xc208c000}, {0xc208e000}, 
+    {0xc2090000}, {0xc2092000}, {0xc2094000}, {0xc2096000}, 
+    {0xc2098000}, {0xc209a000}, {0xc209c000}, {0xc209e000}, 
+    {0xc20a0000}, {0xc20a2000}, {0xc20a4000}, {0xc20a6000}, 
+    {0xc20a8000}, {0xc20aa000}, {0xc20ac000}, {0xc20ae000}, 
+    {0xc20b0000}, {0xc20b2000}, {0xc20b4000}, {0xc20b6000}, 
+    {0xc20b8000}, {0xc20ba000}, {0xc20bc000}, {0xc20be000}, 
+    {0xc20c0000}, {0xc20c2000}, {0xc20c4000}, {0xc20c6000}, 
+    {0xc20c8000}, {0xc20ca000}, {0xc20cc000}, {0xc20ce000}, 
+    {0xc20d0000}, {0xc20d2000}, {0xc20d4000}, {0xc20d6000}, 
+    {0xc20d8000}, {0xc20da000}, {0xc20dc000}, {0xc20de000}, 
+    {0xc20e0000}, {0xc20e2000}, {0xc20e4000}, {0xc20e6000}, 
+    {0xc20e8000}, {0xc20ea000}, {0xc20ec000}, {0xc20ee000}, 
+    {0xc20f0000}, {0xc20f2000}, {0xc20f4000}, {0xc20f6000}, 
+    {0xc20f8000}, {0xc20fa000}, {0xc20fc000}, {0xc20fe000}, 
+    {0xc2100000}, {0xc2102000}, {0xc2104000}, {0xc2106000}, 
+    {0xc2108000}, {0xc210a000}, {0xc210c000}, {0xc210e000}, 
+    {0xc2110000}, {0xc2112000}, {0xc2114000}, {0xc2116000}, 
+    {0xc2118000}, {0xc211a000}, {0xc211c000}, {0xc211e000}, 
+    {0xc2120000}, {0xc2122000}, {0xc2124000}, {0xc2126000}, 
+    {0xc2128000}, {0xc212a000}, {0xc212c000}, {0xc212e000}, 
+    {0xc2130000}, {0xc2132000}, {0xc2134000}, {0xc2136000}, 
+    {0xc2138000}, {0xc213a000}, {0xc213c000}, {0xc213e000}, 
+    {0xc2140000}, {0xc2142000}, {0xc2144000}, {0xc2146000}, 
+    {0xc2148000}, {0xc214a000}, {0xc214c000}, {0xc214e000}, 
+    {0xc2150000}, {0xc2152000}, {0xc2154000}, {0xc2156000}, 
+    {0xc2158000}, {0xc215a000}, {0xc215c000}, {0xc215e000}, 
+    {0xc2160000}, {0xc2162000}, {0xc2164000}, {0xc2166000}, 
+    {0xc2168000}, {0xc216a000}, {0xc216c000}, {0xc216e000}, 
+    {0xc2170000}, {0xc2172000}, {0xc2174000}, {0xc2176000}, 
+    {0xc2178000}, {0xc217a000}, {0xc217c000}, {0xc217e000}, 
+    {0xc2180000}, {0xc2182000}, {0xc2184000}, {0xc2186000}, 
+    {0xc2188000}, {0xc218a000}, {0xc218c000}, {0xc218e000}, 
+    {0xc2190000}, {0xc2192000}, {0xc2194000}, {0xc2196000}, 
+    {0xc2198000}, {0xc219a000}, {0xc219c000}, {0xc219e000}, 
+    {0xc21a0000}, {0xc21a2000}, {0xc21a4000}, {0xc21a6000}, 
+    {0xc21a8000}, {0xc21aa000}, {0xc21ac000}, {0xc21ae000}, 
+    {0xc21b0000}, {0xc21b2000}, {0xc21b4000}, {0xc21b6000}, 
+    {0xc21b8000}, {0xc21ba000}, {0xc21bc000}, {0xc21be000}, 
+    {0xc21c0000}, {0xc21c2000}, {0xc21c4000}, {0xc21c6000}, 
+    {0xc21c8000}, {0xc21ca000}, {0xc21cc000}, {0xc21ce000}, 
+    {0xc21d0000}, {0xc21d2000}, {0xc21d4000}, {0xc21d6000}, 
+    {0xc21d8000}, {0xc21da000}, {0xc21dc000}, {0xc21de000}, 
+    {0xc21e0000}, {0xc21e2000}, {0xc21e4000}, {0xc21e6000}, 
+    {0xc21e8000}, {0xc21ea000}, {0xc21ec000}, {0xc21ee000}, 
+    {0xc21f0000}, {0xc21f2000}, {0xc21f4000}, {0xc21f6000}, 
+    {0xc21f8000}, {0xc21fa000}, {0xc21fc000}, {0xc21fe000}, 
+    {0xc2200000}, {0xc2202000}, {0xc2204000}, {0xc2206000}, 
+    {0xc2208000}, {0xc220a000}, {0xc220c000}, {0xc220e000}, 
+    {0xc2210000}, {0xc2212000}, {0xc2214000}, {0xc2216000}, 
+    {0xc2218000}, {0xc221a000}, {0xc221c000}, {0xc221e000}, 
+    {0xc2220000}, {0xc2222000}, {0xc2224000}, {0xc2226000}, 
+    {0xc2228000}, {0xc222a000}, {0xc222c000}, {0xc222e000}, 
+    {0xc2230000}, {0xc2232000}, {0xc2234000}, {0xc2236000}, 
+    {0xc2238000}, {0xc223a000}, {0xc223c000}, {0xc223e000}, 
+    {0xc2240000}, {0xc2242000}, {0xc2244000}, {0xc2246000}, 
+    {0xc2248000}, {0xc224a000}, {0xc224c000}, {0xc224e000}, 
+    {0xc2250000}, {0xc2252000}, {0xc2254000}, {0xc2256000}, 
+    {0xc2258000}, {0xc225a000}, {0xc225c000}, {0xc225e000}, 
+    {0xc2260000}, {0xc2262000}, {0xc2264000}, {0xc2266000}, 
+    {0xc2268000}, {0xc226a000}, {0xc226c000}, {0xc226e000}, 
+    {0xc2270000}, {0xc2272000}, {0xc2274000}, {0xc2276000}, 
+    {0xc2278000}, {0xc227a000}, {0xc227c000}, {0xc227e000}, 
+    {0xc2280000}, {0xc2282000}, {0xc2284000}, {0xc2286000}, 
+    {0xc2288000}, {0xc228a000}, {0xc228c000}, {0xc228e000}, 
+    {0xc2290000}, {0xc2292000}, {0xc2294000}, {0xc2296000}, 
+    {0xc2298000}, {0xc229a000}, {0xc229c000}, {0xc229e000}, 
+    {0xc22a0000}, {0xc22a2000}, {0xc22a4000}, {0xc22a6000}, 
+    {0xc22a8000}, {0xc22aa000}, {0xc22ac000}, {0xc22ae000}, 
+    {0xc22b0000}, {0xc22b2000}, {0xc22b4000}, {0xc22b6000}, 
+    {0xc22b8000}, {0xc22ba000}, {0xc22bc000}, {0xc22be000}, 
+    {0xc22c0000}, {0xc22c2000}, {0xc22c4000}, {0xc22c6000}, 
+    {0xc22c8000}, {0xc22ca000}, {0xc22cc000}, {0xc22ce000}, 
+    {0xc22d0000}, {0xc22d2000}, {0xc22d4000}, {0xc22d6000}, 
+    {0xc22d8000}, {0xc22da000}, {0xc22dc000}, {0xc22de000}, 
+    {0xc22e0000}, {0xc22e2000}, {0xc22e4000}, {0xc22e6000}, 
+    {0xc22e8000}, {0xc22ea000}, {0xc22ec000}, {0xc22ee000}, 
+    {0xc22f0000}, {0xc22f2000}, {0xc22f4000}, {0xc22f6000}, 
+    {0xc22f8000}, {0xc22fa000}, {0xc22fc000}, {0xc22fe000}, 
+    {0xc2300000}, {0xc2302000}, {0xc2304000}, {0xc2306000}, 
+    {0xc2308000}, {0xc230a000}, {0xc230c000}, {0xc230e000}, 
+    {0xc2310000}, {0xc2312000}, {0xc2314000}, {0xc2316000}, 
+    {0xc2318000}, {0xc231a000}, {0xc231c000}, {0xc231e000}, 
+    {0xc2320000}, {0xc2322000}, {0xc2324000}, {0xc2326000}, 
+    {0xc2328000}, {0xc232a000}, {0xc232c000}, {0xc232e000}, 
+    {0xc2330000}, {0xc2332000}, {0xc2334000}, {0xc2336000}, 
+    {0xc2338000}, {0xc233a000}, {0xc233c000}, {0xc233e000}, 
+    {0xc2340000}, {0xc2342000}, {0xc2344000}, {0xc2346000}, 
+    {0xc2348000}, {0xc234a000}, {0xc234c000}, {0xc234e000}, 
+    {0xc2350000}, {0xc2352000}, {0xc2354000}, {0xc2356000}, 
+    {0xc2358000}, {0xc235a000}, {0xc235c000}, {0xc235e000}, 
+    {0xc2360000}, {0xc2362000}, {0xc2364000}, {0xc2366000}, 
+    {0xc2368000}, {0xc236a000}, {0xc236c000}, {0xc236e000}, 
+    {0xc2370000}, {0xc2372000}, {0xc2374000}, {0xc2376000}, 
+    {0xc2378000}, {0xc237a000}, {0xc237c000}, {0xc237e000}, 
+    {0xc2380000}, {0xc2382000}, {0xc2384000}, {0xc2386000}, 
+    {0xc2388000}, {0xc238a000}, {0xc238c000}, {0xc238e000}, 
+    {0xc2390000}, {0xc2392000}, {0xc2394000}, {0xc2396000}, 
+    {0xc2398000}, {0xc239a000}, {0xc239c000}, {0xc239e000}, 
+    {0xc23a0000}, {0xc23a2000}, {0xc23a4000}, {0xc23a6000}, 
+    {0xc23a8000}, {0xc23aa000}, {0xc23ac000}, {0xc23ae000}, 
+    {0xc23b0000}, {0xc23b2000}, {0xc23b4000}, {0xc23b6000}, 
+    {0xc23b8000}, {0xc23ba000}, {0xc23bc000}, {0xc23be000}, 
+    {0xc23c0000}, {0xc23c2000}, {0xc23c4000}, {0xc23c6000}, 
+    {0xc23c8000}, {0xc23ca000}, {0xc23cc000}, {0xc23ce000}, 
+    {0xc23d0000}, {0xc23d2000}, {0xc23d4000}, {0xc23d6000}, 
+    {0xc23d8000}, {0xc23da000}, {0xc23dc000}, {0xc23de000}, 
+    {0xc23e0000}, {0xc23e2000}, {0xc23e4000}, {0xc23e6000}, 
+    {0xc23e8000}, {0xc23ea000}, {0xc23ec000}, {0xc23ee000}, 
+    {0xc23f0000}, {0xc23f2000}, {0xc23f4000}, {0xc23f6000}, 
+    {0xc23f8000}, {0xc23fa000}, {0xc23fc000}, {0xc23fe000}, 
+    {0xc2400000}, {0xc2402000}, {0xc2404000}, {0xc2406000}, 
+    {0xc2408000}, {0xc240a000}, {0xc240c000}, {0xc240e000}, 
+    {0xc2410000}, {0xc2412000}, {0xc2414000}, {0xc2416000}, 
+    {0xc2418000}, {0xc241a000}, {0xc241c000}, {0xc241e000}, 
+    {0xc2420000}, {0xc2422000}, {0xc2424000}, {0xc2426000}, 
+    {0xc2428000}, {0xc242a000}, {0xc242c000}, {0xc242e000}, 
+    {0xc2430000}, {0xc2432000}, {0xc2434000}, {0xc2436000}, 
+    {0xc2438000}, {0xc243a000}, {0xc243c000}, {0xc243e000}, 
+    {0xc2440000}, {0xc2442000}, {0xc2444000}, {0xc2446000}, 
+    {0xc2448000}, {0xc244a000}, {0xc244c000}, {0xc244e000}, 
+    {0xc2450000}, {0xc2452000}, {0xc2454000}, {0xc2456000}, 
+    {0xc2458000}, {0xc245a000}, {0xc245c000}, {0xc245e000}, 
+    {0xc2460000}, {0xc2462000}, {0xc2464000}, {0xc2466000}, 
+    {0xc2468000}, {0xc246a000}, {0xc246c000}, {0xc246e000}, 
+    {0xc2470000}, {0xc2472000}, {0xc2474000}, {0xc2476000}, 
+    {0xc2478000}, {0xc247a000}, {0xc247c000}, {0xc247e000}, 
+    {0xc2480000}, {0xc2482000}, {0xc2484000}, {0xc2486000}, 
+    {0xc2488000}, {0xc248a000}, {0xc248c000}, {0xc248e000}, 
+    {0xc2490000}, {0xc2492000}, {0xc2494000}, {0xc2496000}, 
+    {0xc2498000}, {0xc249a000}, {0xc249c000}, {0xc249e000}, 
+    {0xc24a0000}, {0xc24a2000}, {0xc24a4000}, {0xc24a6000}, 
+    {0xc24a8000}, {0xc24aa000}, {0xc24ac000}, {0xc24ae000}, 
+    {0xc24b0000}, {0xc24b2000}, {0xc24b4000}, {0xc24b6000}, 
+    {0xc24b8000}, {0xc24ba000}, {0xc24bc000}, {0xc24be000}, 
+    {0xc24c0000}, {0xc24c2000}, {0xc24c4000}, {0xc24c6000}, 
+    {0xc24c8000}, {0xc24ca000}, {0xc24cc000}, {0xc24ce000}, 
+    {0xc24d0000}, {0xc24d2000}, {0xc24d4000}, {0xc24d6000}, 
+    {0xc24d8000}, {0xc24da000}, {0xc24dc000}, {0xc24de000}, 
+    {0xc24e0000}, {0xc24e2000}, {0xc24e4000}, {0xc24e6000}, 
+    {0xc24e8000}, {0xc24ea000}, {0xc24ec000}, {0xc24ee000}, 
+    {0xc24f0000}, {0xc24f2000}, {0xc24f4000}, {0xc24f6000}, 
+    {0xc24f8000}, {0xc24fa000}, {0xc24fc000}, {0xc24fe000}, 
+    {0xc2500000}, {0xc2502000}, {0xc2504000}, {0xc2506000}, 
+    {0xc2508000}, {0xc250a000}, {0xc250c000}, {0xc250e000}, 
+    {0xc2510000}, {0xc2512000}, {0xc2514000}, {0xc2516000}, 
+    {0xc2518000}, {0xc251a000}, {0xc251c000}, {0xc251e000}, 
+    {0xc2520000}, {0xc2522000}, {0xc2524000}, {0xc2526000}, 
+    {0xc2528000}, {0xc252a000}, {0xc252c000}, {0xc252e000}, 
+    {0xc2530000}, {0xc2532000}, {0xc2534000}, {0xc2536000}, 
+    {0xc2538000}, {0xc253a000}, {0xc253c000}, {0xc253e000}, 
+    {0xc2540000}, {0xc2542000}, {0xc2544000}, {0xc2546000}, 
+    {0xc2548000}, {0xc254a000}, {0xc254c000}, {0xc254e000}, 
+    {0xc2550000}, {0xc2552000}, {0xc2554000}, {0xc2556000}, 
+    {0xc2558000}, {0xc255a000}, {0xc255c000}, {0xc255e000}, 
+    {0xc2560000}, {0xc2562000}, {0xc2564000}, {0xc2566000}, 
+    {0xc2568000}, {0xc256a000}, {0xc256c000}, {0xc256e000}, 
+    {0xc2570000}, {0xc2572000}, {0xc2574000}, {0xc2576000}, 
+    {0xc2578000}, {0xc257a000}, {0xc257c000}, {0xc257e000}, 
+    {0xc2580000}, {0xc2582000}, {0xc2584000}, {0xc2586000}, 
+    {0xc2588000}, {0xc258a000}, {0xc258c000}, {0xc258e000}, 
+    {0xc2590000}, {0xc2592000}, {0xc2594000}, {0xc2596000}, 
+    {0xc2598000}, {0xc259a000}, {0xc259c000}, {0xc259e000}, 
+    {0xc25a0000}, {0xc25a2000}, {0xc25a4000}, {0xc25a6000}, 
+    {0xc25a8000}, {0xc25aa000}, {0xc25ac000}, {0xc25ae000}, 
+    {0xc25b0000}, {0xc25b2000}, {0xc25b4000}, {0xc25b6000}, 
+    {0xc25b8000}, {0xc25ba000}, {0xc25bc000}, {0xc25be000}, 
+    {0xc25c0000}, {0xc25c2000}, {0xc25c4000}, {0xc25c6000}, 
+    {0xc25c8000}, {0xc25ca000}, {0xc25cc000}, {0xc25ce000}, 
+    {0xc25d0000}, {0xc25d2000}, {0xc25d4000}, {0xc25d6000}, 
+    {0xc25d8000}, {0xc25da000}, {0xc25dc000}, {0xc25de000}, 
+    {0xc25e0000}, {0xc25e2000}, {0xc25e4000}, {0xc25e6000}, 
+    {0xc25e8000}, {0xc25ea000}, {0xc25ec000}, {0xc25ee000}, 
+    {0xc25f0000}, {0xc25f2000}, {0xc25f4000}, {0xc25f6000}, 
+    {0xc25f8000}, {0xc25fa000}, {0xc25fc000}, {0xc25fe000}, 
+    {0xc2600000}, {0xc2602000}, {0xc2604000}, {0xc2606000}, 
+    {0xc2608000}, {0xc260a000}, {0xc260c000}, {0xc260e000}, 
+    {0xc2610000}, {0xc2612000}, {0xc2614000}, {0xc2616000}, 
+    {0xc2618000}, {0xc261a000}, {0xc261c000}, {0xc261e000}, 
+    {0xc2620000}, {0xc2622000}, {0xc2624000}, {0xc2626000}, 
+    {0xc2628000}, {0xc262a000}, {0xc262c000}, {0xc262e000}, 
+    {0xc2630000}, {0xc2632000}, {0xc2634000}, {0xc2636000}, 
+    {0xc2638000}, {0xc263a000}, {0xc263c000}, {0xc263e000}, 
+    {0xc2640000}, {0xc2642000}, {0xc2644000}, {0xc2646000}, 
+    {0xc2648000}, {0xc264a000}, {0xc264c000}, {0xc264e000}, 
+    {0xc2650000}, {0xc2652000}, {0xc2654000}, {0xc2656000}, 
+    {0xc2658000}, {0xc265a000}, {0xc265c000}, {0xc265e000}, 
+    {0xc2660000}, {0xc2662000}, {0xc2664000}, {0xc2666000}, 
+    {0xc2668000}, {0xc266a000}, {0xc266c000}, {0xc266e000}, 
+    {0xc2670000}, {0xc2672000}, {0xc2674000}, {0xc2676000}, 
+    {0xc2678000}, {0xc267a000}, {0xc267c000}, {0xc267e000}, 
+    {0xc2680000}, {0xc2682000}, {0xc2684000}, {0xc2686000}, 
+    {0xc2688000}, {0xc268a000}, {0xc268c000}, {0xc268e000}, 
+    {0xc2690000}, {0xc2692000}, {0xc2694000}, {0xc2696000}, 
+    {0xc2698000}, {0xc269a000}, {0xc269c000}, {0xc269e000}, 
+    {0xc26a0000}, {0xc26a2000}, {0xc26a4000}, {0xc26a6000}, 
+    {0xc26a8000}, {0xc26aa000}, {0xc26ac000}, {0xc26ae000}, 
+    {0xc26b0000}, {0xc26b2000}, {0xc26b4000}, {0xc26b6000}, 
+    {0xc26b8000}, {0xc26ba000}, {0xc26bc000}, {0xc26be000}, 
+    {0xc26c0000}, {0xc26c2000}, {0xc26c4000}, {0xc26c6000}, 
+    {0xc26c8000}, {0xc26ca000}, {0xc26cc000}, {0xc26ce000}, 
+    {0xc26d0000}, {0xc26d2000}, {0xc26d4000}, {0xc26d6000}, 
+    {0xc26d8000}, {0xc26da000}, {0xc26dc000}, {0xc26de000}, 
+    {0xc26e0000}, {0xc26e2000}, {0xc26e4000}, {0xc26e6000}, 
+    {0xc26e8000}, {0xc26ea000}, {0xc26ec000}, {0xc26ee000}, 
+    {0xc26f0000}, {0xc26f2000}, {0xc26f4000}, {0xc26f6000}, 
+    {0xc26f8000}, {0xc26fa000}, {0xc26fc000}, {0xc26fe000}, 
+    {0xc2700000}, {0xc2702000}, {0xc2704000}, {0xc2706000}, 
+    {0xc2708000}, {0xc270a000}, {0xc270c000}, {0xc270e000}, 
+    {0xc2710000}, {0xc2712000}, {0xc2714000}, {0xc2716000}, 
+    {0xc2718000}, {0xc271a000}, {0xc271c000}, {0xc271e000}, 
+    {0xc2720000}, {0xc2722000}, {0xc2724000}, {0xc2726000}, 
+    {0xc2728000}, {0xc272a000}, {0xc272c000}, {0xc272e000}, 
+    {0xc2730000}, {0xc2732000}, {0xc2734000}, {0xc2736000}, 
+    {0xc2738000}, {0xc273a000}, {0xc273c000}, {0xc273e000}, 
+    {0xc2740000}, {0xc2742000}, {0xc2744000}, {0xc2746000}, 
+    {0xc2748000}, {0xc274a000}, {0xc274c000}, {0xc274e000}, 
+    {0xc2750000}, {0xc2752000}, {0xc2754000}, {0xc2756000}, 
+    {0xc2758000}, {0xc275a000}, {0xc275c000}, {0xc275e000}, 
+    {0xc2760000}, {0xc2762000}, {0xc2764000}, {0xc2766000}, 
+    {0xc2768000}, {0xc276a000}, {0xc276c000}, {0xc276e000}, 
+    {0xc2770000}, {0xc2772000}, {0xc2774000}, {0xc2776000}, 
+    {0xc2778000}, {0xc277a000}, {0xc277c000}, {0xc277e000}, 
+    {0xc2780000}, {0xc2782000}, {0xc2784000}, {0xc2786000}, 
+    {0xc2788000}, {0xc278a000}, {0xc278c000}, {0xc278e000}, 
+    {0xc2790000}, {0xc2792000}, {0xc2794000}, {0xc2796000}, 
+    {0xc2798000}, {0xc279a000}, {0xc279c000}, {0xc279e000}, 
+    {0xc27a0000}, {0xc27a2000}, {0xc27a4000}, {0xc27a6000}, 
+    {0xc27a8000}, {0xc27aa000}, {0xc27ac000}, {0xc27ae000}, 
+    {0xc27b0000}, {0xc27b2000}, {0xc27b4000}, {0xc27b6000}, 
+    {0xc27b8000}, {0xc27ba000}, {0xc27bc000}, {0xc27be000}, 
+    {0xc27c0000}, {0xc27c2000}, {0xc27c4000}, {0xc27c6000}, 
+    {0xc27c8000}, {0xc27ca000}, {0xc27cc000}, {0xc27ce000}, 
+    {0xc27d0000}, {0xc27d2000}, {0xc27d4000}, {0xc27d6000}, 
+    {0xc27d8000}, {0xc27da000}, {0xc27dc000}, {0xc27de000}, 
+    {0xc27e0000}, {0xc27e2000}, {0xc27e4000}, {0xc27e6000}, 
+    {0xc27e8000}, {0xc27ea000}, {0xc27ec000}, {0xc27ee000}, 
+    {0xc27f0000}, {0xc27f2000}, {0xc27f4000}, {0xc27f6000}, 
+    {0xc27f8000}, {0xc27fa000}, {0xc27fc000}, {0xc27fe000}, 
+    {0xc2800000}, {0xc2802000}, {0xc2804000}, {0xc2806000}, 
+    {0xc2808000}, {0xc280a000}, {0xc280c000}, {0xc280e000}, 
+    {0xc2810000}, {0xc2812000}, {0xc2814000}, {0xc2816000}, 
+    {0xc2818000}, {0xc281a000}, {0xc281c000}, {0xc281e000}, 
+    {0xc2820000}, {0xc2822000}, {0xc2824000}, {0xc2826000}, 
+    {0xc2828000}, {0xc282a000}, {0xc282c000}, {0xc282e000}, 
+    {0xc2830000}, {0xc2832000}, {0xc2834000}, {0xc2836000}, 
+    {0xc2838000}, {0xc283a000}, {0xc283c000}, {0xc283e000}, 
+    {0xc2840000}, {0xc2842000}, {0xc2844000}, {0xc2846000}, 
+    {0xc2848000}, {0xc284a000}, {0xc284c000}, {0xc284e000}, 
+    {0xc2850000}, {0xc2852000}, {0xc2854000}, {0xc2856000}, 
+    {0xc2858000}, {0xc285a000}, {0xc285c000}, {0xc285e000}, 
+    {0xc2860000}, {0xc2862000}, {0xc2864000}, {0xc2866000}, 
+    {0xc2868000}, {0xc286a000}, {0xc286c000}, {0xc286e000}, 
+    {0xc2870000}, {0xc2872000}, {0xc2874000}, {0xc2876000}, 
+    {0xc2878000}, {0xc287a000}, {0xc287c000}, {0xc287e000}, 
+    {0xc2880000}, {0xc2882000}, {0xc2884000}, {0xc2886000}, 
+    {0xc2888000}, {0xc288a000}, {0xc288c000}, {0xc288e000}, 
+    {0xc2890000}, {0xc2892000}, {0xc2894000}, {0xc2896000}, 
+    {0xc2898000}, {0xc289a000}, {0xc289c000}, {0xc289e000}, 
+    {0xc28a0000}, {0xc28a2000}, {0xc28a4000}, {0xc28a6000}, 
+    {0xc28a8000}, {0xc28aa000}, {0xc28ac000}, {0xc28ae000}, 
+    {0xc28b0000}, {0xc28b2000}, {0xc28b4000}, {0xc28b6000}, 
+    {0xc28b8000}, {0xc28ba000}, {0xc28bc000}, {0xc28be000}, 
+    {0xc28c0000}, {0xc28c2000}, {0xc28c4000}, {0xc28c6000}, 
+    {0xc28c8000}, {0xc28ca000}, {0xc28cc000}, {0xc28ce000}, 
+    {0xc28d0000}, {0xc28d2000}, {0xc28d4000}, {0xc28d6000}, 
+    {0xc28d8000}, {0xc28da000}, {0xc28dc000}, {0xc28de000}, 
+    {0xc28e0000}, {0xc28e2000}, {0xc28e4000}, {0xc28e6000}, 
+    {0xc28e8000}, {0xc28ea000}, {0xc28ec000}, {0xc28ee000}, 
+    {0xc28f0000}, {0xc28f2000}, {0xc28f4000}, {0xc28f6000}, 
+    {0xc28f8000}, {0xc28fa000}, {0xc28fc000}, {0xc28fe000}, 
+    {0xc2900000}, {0xc2902000}, {0xc2904000}, {0xc2906000}, 
+    {0xc2908000}, {0xc290a000}, {0xc290c000}, {0xc290e000}, 
+    {0xc2910000}, {0xc2912000}, {0xc2914000}, {0xc2916000}, 
+    {0xc2918000}, {0xc291a000}, {0xc291c000}, {0xc291e000}, 
+    {0xc2920000}, {0xc2922000}, {0xc2924000}, {0xc2926000}, 
+    {0xc2928000}, {0xc292a000}, {0xc292c000}, {0xc292e000}, 
+    {0xc2930000}, {0xc2932000}, {0xc2934000}, {0xc2936000}, 
+    {0xc2938000}, {0xc293a000}, {0xc293c000}, {0xc293e000}, 
+    {0xc2940000}, {0xc2942000}, {0xc2944000}, {0xc2946000}, 
+    {0xc2948000}, {0xc294a000}, {0xc294c000}, {0xc294e000}, 
+    {0xc2950000}, {0xc2952000}, {0xc2954000}, {0xc2956000}, 
+    {0xc2958000}, {0xc295a000}, {0xc295c000}, {0xc295e000}, 
+    {0xc2960000}, {0xc2962000}, {0xc2964000}, {0xc2966000}, 
+    {0xc2968000}, {0xc296a000}, {0xc296c000}, {0xc296e000}, 
+    {0xc2970000}, {0xc2972000}, {0xc2974000}, {0xc2976000}, 
+    {0xc2978000}, {0xc297a000}, {0xc297c000}, {0xc297e000}, 
+    {0xc2980000}, {0xc2982000}, {0xc2984000}, {0xc2986000}, 
+    {0xc2988000}, {0xc298a000}, {0xc298c000}, {0xc298e000}, 
+    {0xc2990000}, {0xc2992000}, {0xc2994000}, {0xc2996000}, 
+    {0xc2998000}, {0xc299a000}, {0xc299c000}, {0xc299e000}, 
+    {0xc29a0000}, {0xc29a2000}, {0xc29a4000}, {0xc29a6000}, 
+    {0xc29a8000}, {0xc29aa000}, {0xc29ac000}, {0xc29ae000}, 
+    {0xc29b0000}, {0xc29b2000}, {0xc29b4000}, {0xc29b6000}, 
+    {0xc29b8000}, {0xc29ba000}, {0xc29bc000}, {0xc29be000}, 
+    {0xc29c0000}, {0xc29c2000}, {0xc29c4000}, {0xc29c6000}, 
+    {0xc29c8000}, {0xc29ca000}, {0xc29cc000}, {0xc29ce000}, 
+    {0xc29d0000}, {0xc29d2000}, {0xc29d4000}, {0xc29d6000}, 
+    {0xc29d8000}, {0xc29da000}, {0xc29dc000}, {0xc29de000}, 
+    {0xc29e0000}, {0xc29e2000}, {0xc29e4000}, {0xc29e6000}, 
+    {0xc29e8000}, {0xc29ea000}, {0xc29ec000}, {0xc29ee000}, 
+    {0xc29f0000}, {0xc29f2000}, {0xc29f4000}, {0xc29f6000}, 
+    {0xc29f8000}, {0xc29fa000}, {0xc29fc000}, {0xc29fe000}, 
+    {0xc2a00000}, {0xc2a02000}, {0xc2a04000}, {0xc2a06000}, 
+    {0xc2a08000}, {0xc2a0a000}, {0xc2a0c000}, {0xc2a0e000}, 
+    {0xc2a10000}, {0xc2a12000}, {0xc2a14000}, {0xc2a16000}, 
+    {0xc2a18000}, {0xc2a1a000}, {0xc2a1c000}, {0xc2a1e000}, 
+    {0xc2a20000}, {0xc2a22000}, {0xc2a24000}, {0xc2a26000}, 
+    {0xc2a28000}, {0xc2a2a000}, {0xc2a2c000}, {0xc2a2e000}, 
+    {0xc2a30000}, {0xc2a32000}, {0xc2a34000}, {0xc2a36000}, 
+    {0xc2a38000}, {0xc2a3a000}, {0xc2a3c000}, {0xc2a3e000}, 
+    {0xc2a40000}, {0xc2a42000}, {0xc2a44000}, {0xc2a46000}, 
+    {0xc2a48000}, {0xc2a4a000}, {0xc2a4c000}, {0xc2a4e000}, 
+    {0xc2a50000}, {0xc2a52000}, {0xc2a54000}, {0xc2a56000}, 
+    {0xc2a58000}, {0xc2a5a000}, {0xc2a5c000}, {0xc2a5e000}, 
+    {0xc2a60000}, {0xc2a62000}, {0xc2a64000}, {0xc2a66000}, 
+    {0xc2a68000}, {0xc2a6a000}, {0xc2a6c000}, {0xc2a6e000}, 
+    {0xc2a70000}, {0xc2a72000}, {0xc2a74000}, {0xc2a76000}, 
+    {0xc2a78000}, {0xc2a7a000}, {0xc2a7c000}, {0xc2a7e000}, 
+    {0xc2a80000}, {0xc2a82000}, {0xc2a84000}, {0xc2a86000}, 
+    {0xc2a88000}, {0xc2a8a000}, {0xc2a8c000}, {0xc2a8e000}, 
+    {0xc2a90000}, {0xc2a92000}, {0xc2a94000}, {0xc2a96000}, 
+    {0xc2a98000}, {0xc2a9a000}, {0xc2a9c000}, {0xc2a9e000}, 
+    {0xc2aa0000}, {0xc2aa2000}, {0xc2aa4000}, {0xc2aa6000}, 
+    {0xc2aa8000}, {0xc2aaa000}, {0xc2aac000}, {0xc2aae000}, 
+    {0xc2ab0000}, {0xc2ab2000}, {0xc2ab4000}, {0xc2ab6000}, 
+    {0xc2ab8000}, {0xc2aba000}, {0xc2abc000}, {0xc2abe000}, 
+    {0xc2ac0000}, {0xc2ac2000}, {0xc2ac4000}, {0xc2ac6000}, 
+    {0xc2ac8000}, {0xc2aca000}, {0xc2acc000}, {0xc2ace000}, 
+    {0xc2ad0000}, {0xc2ad2000}, {0xc2ad4000}, {0xc2ad6000}, 
+    {0xc2ad8000}, {0xc2ada000}, {0xc2adc000}, {0xc2ade000}, 
+    {0xc2ae0000}, {0xc2ae2000}, {0xc2ae4000}, {0xc2ae6000}, 
+    {0xc2ae8000}, {0xc2aea000}, {0xc2aec000}, {0xc2aee000}, 
+    {0xc2af0000}, {0xc2af2000}, {0xc2af4000}, {0xc2af6000}, 
+    {0xc2af8000}, {0xc2afa000}, {0xc2afc000}, {0xc2afe000}, 
+    {0xc2b00000}, {0xc2b02000}, {0xc2b04000}, {0xc2b06000}, 
+    {0xc2b08000}, {0xc2b0a000}, {0xc2b0c000}, {0xc2b0e000}, 
+    {0xc2b10000}, {0xc2b12000}, {0xc2b14000}, {0xc2b16000}, 
+    {0xc2b18000}, {0xc2b1a000}, {0xc2b1c000}, {0xc2b1e000}, 
+    {0xc2b20000}, {0xc2b22000}, {0xc2b24000}, {0xc2b26000}, 
+    {0xc2b28000}, {0xc2b2a000}, {0xc2b2c000}, {0xc2b2e000}, 
+    {0xc2b30000}, {0xc2b32000}, {0xc2b34000}, {0xc2b36000}, 
+    {0xc2b38000}, {0xc2b3a000}, {0xc2b3c000}, {0xc2b3e000}, 
+    {0xc2b40000}, {0xc2b42000}, {0xc2b44000}, {0xc2b46000}, 
+    {0xc2b48000}, {0xc2b4a000}, {0xc2b4c000}, {0xc2b4e000}, 
+    {0xc2b50000}, {0xc2b52000}, {0xc2b54000}, {0xc2b56000}, 
+    {0xc2b58000}, {0xc2b5a000}, {0xc2b5c000}, {0xc2b5e000}, 
+    {0xc2b60000}, {0xc2b62000}, {0xc2b64000}, {0xc2b66000}, 
+    {0xc2b68000}, {0xc2b6a000}, {0xc2b6c000}, {0xc2b6e000}, 
+    {0xc2b70000}, {0xc2b72000}, {0xc2b74000}, {0xc2b76000}, 
+    {0xc2b78000}, {0xc2b7a000}, {0xc2b7c000}, {0xc2b7e000}, 
+    {0xc2b80000}, {0xc2b82000}, {0xc2b84000}, {0xc2b86000}, 
+    {0xc2b88000}, {0xc2b8a000}, {0xc2b8c000}, {0xc2b8e000}, 
+    {0xc2b90000}, {0xc2b92000}, {0xc2b94000}, {0xc2b96000}, 
+    {0xc2b98000}, {0xc2b9a000}, {0xc2b9c000}, {0xc2b9e000}, 
+    {0xc2ba0000}, {0xc2ba2000}, {0xc2ba4000}, {0xc2ba6000}, 
+    {0xc2ba8000}, {0xc2baa000}, {0xc2bac000}, {0xc2bae000}, 
+    {0xc2bb0000}, {0xc2bb2000}, {0xc2bb4000}, {0xc2bb6000}, 
+    {0xc2bb8000}, {0xc2bba000}, {0xc2bbc000}, {0xc2bbe000}, 
+    {0xc2bc0000}, {0xc2bc2000}, {0xc2bc4000}, {0xc2bc6000}, 
+    {0xc2bc8000}, {0xc2bca000}, {0xc2bcc000}, {0xc2bce000}, 
+    {0xc2bd0000}, {0xc2bd2000}, {0xc2bd4000}, {0xc2bd6000}, 
+    {0xc2bd8000}, {0xc2bda000}, {0xc2bdc000}, {0xc2bde000}, 
+    {0xc2be0000}, {0xc2be2000}, {0xc2be4000}, {0xc2be6000}, 
+    {0xc2be8000}, {0xc2bea000}, {0xc2bec000}, {0xc2bee000}, 
+    {0xc2bf0000}, {0xc2bf2000}, {0xc2bf4000}, {0xc2bf6000}, 
+    {0xc2bf8000}, {0xc2bfa000}, {0xc2bfc000}, {0xc2bfe000}, 
+    {0xc2c00000}, {0xc2c02000}, {0xc2c04000}, {0xc2c06000}, 
+    {0xc2c08000}, {0xc2c0a000}, {0xc2c0c000}, {0xc2c0e000}, 
+    {0xc2c10000}, {0xc2c12000}, {0xc2c14000}, {0xc2c16000}, 
+    {0xc2c18000}, {0xc2c1a000}, {0xc2c1c000}, {0xc2c1e000}, 
+    {0xc2c20000}, {0xc2c22000}, {0xc2c24000}, {0xc2c26000}, 
+    {0xc2c28000}, {0xc2c2a000}, {0xc2c2c000}, {0xc2c2e000}, 
+    {0xc2c30000}, {0xc2c32000}, {0xc2c34000}, {0xc2c36000}, 
+    {0xc2c38000}, {0xc2c3a000}, {0xc2c3c000}, {0xc2c3e000}, 
+    {0xc2c40000}, {0xc2c42000}, {0xc2c44000}, {0xc2c46000}, 
+    {0xc2c48000}, {0xc2c4a000}, {0xc2c4c000}, {0xc2c4e000}, 
+    {0xc2c50000}, {0xc2c52000}, {0xc2c54000}, {0xc2c56000}, 
+    {0xc2c58000}, {0xc2c5a000}, {0xc2c5c000}, {0xc2c5e000}, 
+    {0xc2c60000}, {0xc2c62000}, {0xc2c64000}, {0xc2c66000}, 
+    {0xc2c68000}, {0xc2c6a000}, {0xc2c6c000}, {0xc2c6e000}, 
+    {0xc2c70000}, {0xc2c72000}, {0xc2c74000}, {0xc2c76000}, 
+    {0xc2c78000}, {0xc2c7a000}, {0xc2c7c000}, {0xc2c7e000}, 
+    {0xc2c80000}, {0xc2c82000}, {0xc2c84000}, {0xc2c86000}, 
+    {0xc2c88000}, {0xc2c8a000}, {0xc2c8c000}, {0xc2c8e000}, 
+    {0xc2c90000}, {0xc2c92000}, {0xc2c94000}, {0xc2c96000}, 
+    {0xc2c98000}, {0xc2c9a000}, {0xc2c9c000}, {0xc2c9e000}, 
+    {0xc2ca0000}, {0xc2ca2000}, {0xc2ca4000}, {0xc2ca6000}, 
+    {0xc2ca8000}, {0xc2caa000}, {0xc2cac000}, {0xc2cae000}, 
+    {0xc2cb0000}, {0xc2cb2000}, {0xc2cb4000}, {0xc2cb6000}, 
+    {0xc2cb8000}, {0xc2cba000}, {0xc2cbc000}, {0xc2cbe000}, 
+    {0xc2cc0000}, {0xc2cc2000}, {0xc2cc4000}, {0xc2cc6000}, 
+    {0xc2cc8000}, {0xc2cca000}, {0xc2ccc000}, {0xc2cce000}, 
+    {0xc2cd0000}, {0xc2cd2000}, {0xc2cd4000}, {0xc2cd6000}, 
+    {0xc2cd8000}, {0xc2cda000}, {0xc2cdc000}, {0xc2cde000}, 
+    {0xc2ce0000}, {0xc2ce2000}, {0xc2ce4000}, {0xc2ce6000}, 
+    {0xc2ce8000}, {0xc2cea000}, {0xc2cec000}, {0xc2cee000}, 
+    {0xc2cf0000}, {0xc2cf2000}, {0xc2cf4000}, {0xc2cf6000}, 
+    {0xc2cf8000}, {0xc2cfa000}, {0xc2cfc000}, {0xc2cfe000}, 
+    {0xc2d00000}, {0xc2d02000}, {0xc2d04000}, {0xc2d06000}, 
+    {0xc2d08000}, {0xc2d0a000}, {0xc2d0c000}, {0xc2d0e000}, 
+    {0xc2d10000}, {0xc2d12000}, {0xc2d14000}, {0xc2d16000}, 
+    {0xc2d18000}, {0xc2d1a000}, {0xc2d1c000}, {0xc2d1e000}, 
+    {0xc2d20000}, {0xc2d22000}, {0xc2d24000}, {0xc2d26000}, 
+    {0xc2d28000}, {0xc2d2a000}, {0xc2d2c000}, {0xc2d2e000}, 
+    {0xc2d30000}, {0xc2d32000}, {0xc2d34000}, {0xc2d36000}, 
+    {0xc2d38000}, {0xc2d3a000}, {0xc2d3c000}, {0xc2d3e000}, 
+    {0xc2d40000}, {0xc2d42000}, {0xc2d44000}, {0xc2d46000}, 
+    {0xc2d48000}, {0xc2d4a000}, {0xc2d4c000}, {0xc2d4e000}, 
+    {0xc2d50000}, {0xc2d52000}, {0xc2d54000}, {0xc2d56000}, 
+    {0xc2d58000}, {0xc2d5a000}, {0xc2d5c000}, {0xc2d5e000}, 
+    {0xc2d60000}, {0xc2d62000}, {0xc2d64000}, {0xc2d66000}, 
+    {0xc2d68000}, {0xc2d6a000}, {0xc2d6c000}, {0xc2d6e000}, 
+    {0xc2d70000}, {0xc2d72000}, {0xc2d74000}, {0xc2d76000}, 
+    {0xc2d78000}, {0xc2d7a000}, {0xc2d7c000}, {0xc2d7e000}, 
+    {0xc2d80000}, {0xc2d82000}, {0xc2d84000}, {0xc2d86000}, 
+    {0xc2d88000}, {0xc2d8a000}, {0xc2d8c000}, {0xc2d8e000}, 
+    {0xc2d90000}, {0xc2d92000}, {0xc2d94000}, {0xc2d96000}, 
+    {0xc2d98000}, {0xc2d9a000}, {0xc2d9c000}, {0xc2d9e000}, 
+    {0xc2da0000}, {0xc2da2000}, {0xc2da4000}, {0xc2da6000}, 
+    {0xc2da8000}, {0xc2daa000}, {0xc2dac000}, {0xc2dae000}, 
+    {0xc2db0000}, {0xc2db2000}, {0xc2db4000}, {0xc2db6000}, 
+    {0xc2db8000}, {0xc2dba000}, {0xc2dbc000}, {0xc2dbe000}, 
+    {0xc2dc0000}, {0xc2dc2000}, {0xc2dc4000}, {0xc2dc6000}, 
+    {0xc2dc8000}, {0xc2dca000}, {0xc2dcc000}, {0xc2dce000}, 
+    {0xc2dd0000}, {0xc2dd2000}, {0xc2dd4000}, {0xc2dd6000}, 
+    {0xc2dd8000}, {0xc2dda000}, {0xc2ddc000}, {0xc2dde000}, 
+    {0xc2de0000}, {0xc2de2000}, {0xc2de4000}, {0xc2de6000}, 
+    {0xc2de8000}, {0xc2dea000}, {0xc2dec000}, {0xc2dee000}, 
+    {0xc2df0000}, {0xc2df2000}, {0xc2df4000}, {0xc2df6000}, 
+    {0xc2df8000}, {0xc2dfa000}, {0xc2dfc000}, {0xc2dfe000}, 
+    {0xc2e00000}, {0xc2e02000}, {0xc2e04000}, {0xc2e06000}, 
+    {0xc2e08000}, {0xc2e0a000}, {0xc2e0c000}, {0xc2e0e000}, 
+    {0xc2e10000}, {0xc2e12000}, {0xc2e14000}, {0xc2e16000}, 
+    {0xc2e18000}, {0xc2e1a000}, {0xc2e1c000}, {0xc2e1e000}, 
+    {0xc2e20000}, {0xc2e22000}, {0xc2e24000}, {0xc2e26000}, 
+    {0xc2e28000}, {0xc2e2a000}, {0xc2e2c000}, {0xc2e2e000}, 
+    {0xc2e30000}, {0xc2e32000}, {0xc2e34000}, {0xc2e36000}, 
+    {0xc2e38000}, {0xc2e3a000}, {0xc2e3c000}, {0xc2e3e000}, 
+    {0xc2e40000}, {0xc2e42000}, {0xc2e44000}, {0xc2e46000}, 
+    {0xc2e48000}, {0xc2e4a000}, {0xc2e4c000}, {0xc2e4e000}, 
+    {0xc2e50000}, {0xc2e52000}, {0xc2e54000}, {0xc2e56000}, 
+    {0xc2e58000}, {0xc2e5a000}, {0xc2e5c000}, {0xc2e5e000}, 
+    {0xc2e60000}, {0xc2e62000}, {0xc2e64000}, {0xc2e66000}, 
+    {0xc2e68000}, {0xc2e6a000}, {0xc2e6c000}, {0xc2e6e000}, 
+    {0xc2e70000}, {0xc2e72000}, {0xc2e74000}, {0xc2e76000}, 
+    {0xc2e78000}, {0xc2e7a000}, {0xc2e7c000}, {0xc2e7e000}, 
+    {0xc2e80000}, {0xc2e82000}, {0xc2e84000}, {0xc2e86000}, 
+    {0xc2e88000}, {0xc2e8a000}, {0xc2e8c000}, {0xc2e8e000}, 
+    {0xc2e90000}, {0xc2e92000}, {0xc2e94000}, {0xc2e96000}, 
+    {0xc2e98000}, {0xc2e9a000}, {0xc2e9c000}, {0xc2e9e000}, 
+    {0xc2ea0000}, {0xc2ea2000}, {0xc2ea4000}, {0xc2ea6000}, 
+    {0xc2ea8000}, {0xc2eaa000}, {0xc2eac000}, {0xc2eae000}, 
+    {0xc2eb0000}, {0xc2eb2000}, {0xc2eb4000}, {0xc2eb6000}, 
+    {0xc2eb8000}, {0xc2eba000}, {0xc2ebc000}, {0xc2ebe000}, 
+    {0xc2ec0000}, {0xc2ec2000}, {0xc2ec4000}, {0xc2ec6000}, 
+    {0xc2ec8000}, {0xc2eca000}, {0xc2ecc000}, {0xc2ece000}, 
+    {0xc2ed0000}, {0xc2ed2000}, {0xc2ed4000}, {0xc2ed6000}, 
+    {0xc2ed8000}, {0xc2eda000}, {0xc2edc000}, {0xc2ede000}, 
+    {0xc2ee0000}, {0xc2ee2000}, {0xc2ee4000}, {0xc2ee6000}, 
+    {0xc2ee8000}, {0xc2eea000}, {0xc2eec000}, {0xc2eee000}, 
+    {0xc2ef0000}, {0xc2ef2000}, {0xc2ef4000}, {0xc2ef6000}, 
+    {0xc2ef8000}, {0xc2efa000}, {0xc2efc000}, {0xc2efe000}, 
+    {0xc2f00000}, {0xc2f02000}, {0xc2f04000}, {0xc2f06000}, 
+    {0xc2f08000}, {0xc2f0a000}, {0xc2f0c000}, {0xc2f0e000}, 
+    {0xc2f10000}, {0xc2f12000}, {0xc2f14000}, {0xc2f16000}, 
+    {0xc2f18000}, {0xc2f1a000}, {0xc2f1c000}, {0xc2f1e000}, 
+    {0xc2f20000}, {0xc2f22000}, {0xc2f24000}, {0xc2f26000}, 
+    {0xc2f28000}, {0xc2f2a000}, {0xc2f2c000}, {0xc2f2e000}, 
+    {0xc2f30000}, {0xc2f32000}, {0xc2f34000}, {0xc2f36000}, 
+    {0xc2f38000}, {0xc2f3a000}, {0xc2f3c000}, {0xc2f3e000}, 
+    {0xc2f40000}, {0xc2f42000}, {0xc2f44000}, {0xc2f46000}, 
+    {0xc2f48000}, {0xc2f4a000}, {0xc2f4c000}, {0xc2f4e000}, 
+    {0xc2f50000}, {0xc2f52000}, {0xc2f54000}, {0xc2f56000}, 
+    {0xc2f58000}, {0xc2f5a000}, {0xc2f5c000}, {0xc2f5e000}, 
+    {0xc2f60000}, {0xc2f62000}, {0xc2f64000}, {0xc2f66000}, 
+    {0xc2f68000}, {0xc2f6a000}, {0xc2f6c000}, {0xc2f6e000}, 
+    {0xc2f70000}, {0xc2f72000}, {0xc2f74000}, {0xc2f76000}, 
+    {0xc2f78000}, {0xc2f7a000}, {0xc2f7c000}, {0xc2f7e000}, 
+    {0xc2f80000}, {0xc2f82000}, {0xc2f84000}, {0xc2f86000}, 
+    {0xc2f88000}, {0xc2f8a000}, {0xc2f8c000}, {0xc2f8e000}, 
+    {0xc2f90000}, {0xc2f92000}, {0xc2f94000}, {0xc2f96000}, 
+    {0xc2f98000}, {0xc2f9a000}, {0xc2f9c000}, {0xc2f9e000}, 
+    {0xc2fa0000}, {0xc2fa2000}, {0xc2fa4000}, {0xc2fa6000}, 
+    {0xc2fa8000}, {0xc2faa000}, {0xc2fac000}, {0xc2fae000}, 
+    {0xc2fb0000}, {0xc2fb2000}, {0xc2fb4000}, {0xc2fb6000}, 
+    {0xc2fb8000}, {0xc2fba000}, {0xc2fbc000}, {0xc2fbe000}, 
+    {0xc2fc0000}, {0xc2fc2000}, {0xc2fc4000}, {0xc2fc6000}, 
+    {0xc2fc8000}, {0xc2fca000}, {0xc2fcc000}, {0xc2fce000}, 
+    {0xc2fd0000}, {0xc2fd2000}, {0xc2fd4000}, {0xc2fd6000}, 
+    {0xc2fd8000}, {0xc2fda000}, {0xc2fdc000}, {0xc2fde000}, 
+    {0xc2fe0000}, {0xc2fe2000}, {0xc2fe4000}, {0xc2fe6000}, 
+    {0xc2fe8000}, {0xc2fea000}, {0xc2fec000}, {0xc2fee000}, 
+    {0xc2ff0000}, {0xc2ff2000}, {0xc2ff4000}, {0xc2ff6000}, 
+    {0xc2ff8000}, {0xc2ffa000}, {0xc2ffc000}, {0xc2ffe000}, 
+    {0xc3000000}, {0xc3002000}, {0xc3004000}, {0xc3006000}, 
+    {0xc3008000}, {0xc300a000}, {0xc300c000}, {0xc300e000}, 
+    {0xc3010000}, {0xc3012000}, {0xc3014000}, {0xc3016000}, 
+    {0xc3018000}, {0xc301a000}, {0xc301c000}, {0xc301e000}, 
+    {0xc3020000}, {0xc3022000}, {0xc3024000}, {0xc3026000}, 
+    {0xc3028000}, {0xc302a000}, {0xc302c000}, {0xc302e000}, 
+    {0xc3030000}, {0xc3032000}, {0xc3034000}, {0xc3036000}, 
+    {0xc3038000}, {0xc303a000}, {0xc303c000}, {0xc303e000}, 
+    {0xc3040000}, {0xc3042000}, {0xc3044000}, {0xc3046000}, 
+    {0xc3048000}, {0xc304a000}, {0xc304c000}, {0xc304e000}, 
+    {0xc3050000}, {0xc3052000}, {0xc3054000}, {0xc3056000}, 
+    {0xc3058000}, {0xc305a000}, {0xc305c000}, {0xc305e000}, 
+    {0xc3060000}, {0xc3062000}, {0xc3064000}, {0xc3066000}, 
+    {0xc3068000}, {0xc306a000}, {0xc306c000}, {0xc306e000}, 
+    {0xc3070000}, {0xc3072000}, {0xc3074000}, {0xc3076000}, 
+    {0xc3078000}, {0xc307a000}, {0xc307c000}, {0xc307e000}, 
+    {0xc3080000}, {0xc3082000}, {0xc3084000}, {0xc3086000}, 
+    {0xc3088000}, {0xc308a000}, {0xc308c000}, {0xc308e000}, 
+    {0xc3090000}, {0xc3092000}, {0xc3094000}, {0xc3096000}, 
+    {0xc3098000}, {0xc309a000}, {0xc309c000}, {0xc309e000}, 
+    {0xc30a0000}, {0xc30a2000}, {0xc30a4000}, {0xc30a6000}, 
+    {0xc30a8000}, {0xc30aa000}, {0xc30ac000}, {0xc30ae000}, 
+    {0xc30b0000}, {0xc30b2000}, {0xc30b4000}, {0xc30b6000}, 
+    {0xc30b8000}, {0xc30ba000}, {0xc30bc000}, {0xc30be000}, 
+    {0xc30c0000}, {0xc30c2000}, {0xc30c4000}, {0xc30c6000}, 
+    {0xc30c8000}, {0xc30ca000}, {0xc30cc000}, {0xc30ce000}, 
+    {0xc30d0000}, {0xc30d2000}, {0xc30d4000}, {0xc30d6000}, 
+    {0xc30d8000}, {0xc30da000}, {0xc30dc000}, {0xc30de000}, 
+    {0xc30e0000}, {0xc30e2000}, {0xc30e4000}, {0xc30e6000}, 
+    {0xc30e8000}, {0xc30ea000}, {0xc30ec000}, {0xc30ee000}, 
+    {0xc30f0000}, {0xc30f2000}, {0xc30f4000}, {0xc30f6000}, 
+    {0xc30f8000}, {0xc30fa000}, {0xc30fc000}, {0xc30fe000}, 
+    {0xc3100000}, {0xc3102000}, {0xc3104000}, {0xc3106000}, 
+    {0xc3108000}, {0xc310a000}, {0xc310c000}, {0xc310e000}, 
+    {0xc3110000}, {0xc3112000}, {0xc3114000}, {0xc3116000}, 
+    {0xc3118000}, {0xc311a000}, {0xc311c000}, {0xc311e000}, 
+    {0xc3120000}, {0xc3122000}, {0xc3124000}, {0xc3126000}, 
+    {0xc3128000}, {0xc312a000}, {0xc312c000}, {0xc312e000}, 
+    {0xc3130000}, {0xc3132000}, {0xc3134000}, {0xc3136000}, 
+    {0xc3138000}, {0xc313a000}, {0xc313c000}, {0xc313e000}, 
+    {0xc3140000}, {0xc3142000}, {0xc3144000}, {0xc3146000}, 
+    {0xc3148000}, {0xc314a000}, {0xc314c000}, {0xc314e000}, 
+    {0xc3150000}, {0xc3152000}, {0xc3154000}, {0xc3156000}, 
+    {0xc3158000}, {0xc315a000}, {0xc315c000}, {0xc315e000}, 
+    {0xc3160000}, {0xc3162000}, {0xc3164000}, {0xc3166000}, 
+    {0xc3168000}, {0xc316a000}, {0xc316c000}, {0xc316e000}, 
+    {0xc3170000}, {0xc3172000}, {0xc3174000}, {0xc3176000}, 
+    {0xc3178000}, {0xc317a000}, {0xc317c000}, {0xc317e000}, 
+    {0xc3180000}, {0xc3182000}, {0xc3184000}, {0xc3186000}, 
+    {0xc3188000}, {0xc318a000}, {0xc318c000}, {0xc318e000}, 
+    {0xc3190000}, {0xc3192000}, {0xc3194000}, {0xc3196000}, 
+    {0xc3198000}, {0xc319a000}, {0xc319c000}, {0xc319e000}, 
+    {0xc31a0000}, {0xc31a2000}, {0xc31a4000}, {0xc31a6000}, 
+    {0xc31a8000}, {0xc31aa000}, {0xc31ac000}, {0xc31ae000}, 
+    {0xc31b0000}, {0xc31b2000}, {0xc31b4000}, {0xc31b6000}, 
+    {0xc31b8000}, {0xc31ba000}, {0xc31bc000}, {0xc31be000}, 
+    {0xc31c0000}, {0xc31c2000}, {0xc31c4000}, {0xc31c6000}, 
+    {0xc31c8000}, {0xc31ca000}, {0xc31cc000}, {0xc31ce000}, 
+    {0xc31d0000}, {0xc31d2000}, {0xc31d4000}, {0xc31d6000}, 
+    {0xc31d8000}, {0xc31da000}, {0xc31dc000}, {0xc31de000}, 
+    {0xc31e0000}, {0xc31e2000}, {0xc31e4000}, {0xc31e6000}, 
+    {0xc31e8000}, {0xc31ea000}, {0xc31ec000}, {0xc31ee000}, 
+    {0xc31f0000}, {0xc31f2000}, {0xc31f4000}, {0xc31f6000}, 
+    {0xc31f8000}, {0xc31fa000}, {0xc31fc000}, {0xc31fe000}, 
+    {0xc3200000}, {0xc3202000}, {0xc3204000}, {0xc3206000}, 
+    {0xc3208000}, {0xc320a000}, {0xc320c000}, {0xc320e000}, 
+    {0xc3210000}, {0xc3212000}, {0xc3214000}, {0xc3216000}, 
+    {0xc3218000}, {0xc321a000}, {0xc321c000}, {0xc321e000}, 
+    {0xc3220000}, {0xc3222000}, {0xc3224000}, {0xc3226000}, 
+    {0xc3228000}, {0xc322a000}, {0xc322c000}, {0xc322e000}, 
+    {0xc3230000}, {0xc3232000}, {0xc3234000}, {0xc3236000}, 
+    {0xc3238000}, {0xc323a000}, {0xc323c000}, {0xc323e000}, 
+    {0xc3240000}, {0xc3242000}, {0xc3244000}, {0xc3246000}, 
+    {0xc3248000}, {0xc324a000}, {0xc324c000}, {0xc324e000}, 
+    {0xc3250000}, {0xc3252000}, {0xc3254000}, {0xc3256000}, 
+    {0xc3258000}, {0xc325a000}, {0xc325c000}, {0xc325e000}, 
+    {0xc3260000}, {0xc3262000}, {0xc3264000}, {0xc3266000}, 
+    {0xc3268000}, {0xc326a000}, {0xc326c000}, {0xc326e000}, 
+    {0xc3270000}, {0xc3272000}, {0xc3274000}, {0xc3276000}, 
+    {0xc3278000}, {0xc327a000}, {0xc327c000}, {0xc327e000}, 
+    {0xc3280000}, {0xc3282000}, {0xc3284000}, {0xc3286000}, 
+    {0xc3288000}, {0xc328a000}, {0xc328c000}, {0xc328e000}, 
+    {0xc3290000}, {0xc3292000}, {0xc3294000}, {0xc3296000}, 
+    {0xc3298000}, {0xc329a000}, {0xc329c000}, {0xc329e000}, 
+    {0xc32a0000}, {0xc32a2000}, {0xc32a4000}, {0xc32a6000}, 
+    {0xc32a8000}, {0xc32aa000}, {0xc32ac000}, {0xc32ae000}, 
+    {0xc32b0000}, {0xc32b2000}, {0xc32b4000}, {0xc32b6000}, 
+    {0xc32b8000}, {0xc32ba000}, {0xc32bc000}, {0xc32be000}, 
+    {0xc32c0000}, {0xc32c2000}, {0xc32c4000}, {0xc32c6000}, 
+    {0xc32c8000}, {0xc32ca000}, {0xc32cc000}, {0xc32ce000}, 
+    {0xc32d0000}, {0xc32d2000}, {0xc32d4000}, {0xc32d6000}, 
+    {0xc32d8000}, {0xc32da000}, {0xc32dc000}, {0xc32de000}, 
+    {0xc32e0000}, {0xc32e2000}, {0xc32e4000}, {0xc32e6000}, 
+    {0xc32e8000}, {0xc32ea000}, {0xc32ec000}, {0xc32ee000}, 
+    {0xc32f0000}, {0xc32f2000}, {0xc32f4000}, {0xc32f6000}, 
+    {0xc32f8000}, {0xc32fa000}, {0xc32fc000}, {0xc32fe000}, 
+    {0xc3300000}, {0xc3302000}, {0xc3304000}, {0xc3306000}, 
+    {0xc3308000}, {0xc330a000}, {0xc330c000}, {0xc330e000}, 
+    {0xc3310000}, {0xc3312000}, {0xc3314000}, {0xc3316000}, 
+    {0xc3318000}, {0xc331a000}, {0xc331c000}, {0xc331e000}, 
+    {0xc3320000}, {0xc3322000}, {0xc3324000}, {0xc3326000}, 
+    {0xc3328000}, {0xc332a000}, {0xc332c000}, {0xc332e000}, 
+    {0xc3330000}, {0xc3332000}, {0xc3334000}, {0xc3336000}, 
+    {0xc3338000}, {0xc333a000}, {0xc333c000}, {0xc333e000}, 
+    {0xc3340000}, {0xc3342000}, {0xc3344000}, {0xc3346000}, 
+    {0xc3348000}, {0xc334a000}, {0xc334c000}, {0xc334e000}, 
+    {0xc3350000}, {0xc3352000}, {0xc3354000}, {0xc3356000}, 
+    {0xc3358000}, {0xc335a000}, {0xc335c000}, {0xc335e000}, 
+    {0xc3360000}, {0xc3362000}, {0xc3364000}, {0xc3366000}, 
+    {0xc3368000}, {0xc336a000}, {0xc336c000}, {0xc336e000}, 
+    {0xc3370000}, {0xc3372000}, {0xc3374000}, {0xc3376000}, 
+    {0xc3378000}, {0xc337a000}, {0xc337c000}, {0xc337e000}, 
+    {0xc3380000}, {0xc3382000}, {0xc3384000}, {0xc3386000}, 
+    {0xc3388000}, {0xc338a000}, {0xc338c000}, {0xc338e000}, 
+    {0xc3390000}, {0xc3392000}, {0xc3394000}, {0xc3396000}, 
+    {0xc3398000}, {0xc339a000}, {0xc339c000}, {0xc339e000}, 
+    {0xc33a0000}, {0xc33a2000}, {0xc33a4000}, {0xc33a6000}, 
+    {0xc33a8000}, {0xc33aa000}, {0xc33ac000}, {0xc33ae000}, 
+    {0xc33b0000}, {0xc33b2000}, {0xc33b4000}, {0xc33b6000}, 
+    {0xc33b8000}, {0xc33ba000}, {0xc33bc000}, {0xc33be000}, 
+    {0xc33c0000}, {0xc33c2000}, {0xc33c4000}, {0xc33c6000}, 
+    {0xc33c8000}, {0xc33ca000}, {0xc33cc000}, {0xc33ce000}, 
+    {0xc33d0000}, {0xc33d2000}, {0xc33d4000}, {0xc33d6000}, 
+    {0xc33d8000}, {0xc33da000}, {0xc33dc000}, {0xc33de000}, 
+    {0xc33e0000}, {0xc33e2000}, {0xc33e4000}, {0xc33e6000}, 
+    {0xc33e8000}, {0xc33ea000}, {0xc33ec000}, {0xc33ee000}, 
+    {0xc33f0000}, {0xc33f2000}, {0xc33f4000}, {0xc33f6000}, 
+    {0xc33f8000}, {0xc33fa000}, {0xc33fc000}, {0xc33fe000}, 
+    {0xc3400000}, {0xc3402000}, {0xc3404000}, {0xc3406000}, 
+    {0xc3408000}, {0xc340a000}, {0xc340c000}, {0xc340e000}, 
+    {0xc3410000}, {0xc3412000}, {0xc3414000}, {0xc3416000}, 
+    {0xc3418000}, {0xc341a000}, {0xc341c000}, {0xc341e000}, 
+    {0xc3420000}, {0xc3422000}, {0xc3424000}, {0xc3426000}, 
+    {0xc3428000}, {0xc342a000}, {0xc342c000}, {0xc342e000}, 
+    {0xc3430000}, {0xc3432000}, {0xc3434000}, {0xc3436000}, 
+    {0xc3438000}, {0xc343a000}, {0xc343c000}, {0xc343e000}, 
+    {0xc3440000}, {0xc3442000}, {0xc3444000}, {0xc3446000}, 
+    {0xc3448000}, {0xc344a000}, {0xc344c000}, {0xc344e000}, 
+    {0xc3450000}, {0xc3452000}, {0xc3454000}, {0xc3456000}, 
+    {0xc3458000}, {0xc345a000}, {0xc345c000}, {0xc345e000}, 
+    {0xc3460000}, {0xc3462000}, {0xc3464000}, {0xc3466000}, 
+    {0xc3468000}, {0xc346a000}, {0xc346c000}, {0xc346e000}, 
+    {0xc3470000}, {0xc3472000}, {0xc3474000}, {0xc3476000}, 
+    {0xc3478000}, {0xc347a000}, {0xc347c000}, {0xc347e000}, 
+    {0xc3480000}, {0xc3482000}, {0xc3484000}, {0xc3486000}, 
+    {0xc3488000}, {0xc348a000}, {0xc348c000}, {0xc348e000}, 
+    {0xc3490000}, {0xc3492000}, {0xc3494000}, {0xc3496000}, 
+    {0xc3498000}, {0xc349a000}, {0xc349c000}, {0xc349e000}, 
+    {0xc34a0000}, {0xc34a2000}, {0xc34a4000}, {0xc34a6000}, 
+    {0xc34a8000}, {0xc34aa000}, {0xc34ac000}, {0xc34ae000}, 
+    {0xc34b0000}, {0xc34b2000}, {0xc34b4000}, {0xc34b6000}, 
+    {0xc34b8000}, {0xc34ba000}, {0xc34bc000}, {0xc34be000}, 
+    {0xc34c0000}, {0xc34c2000}, {0xc34c4000}, {0xc34c6000}, 
+    {0xc34c8000}, {0xc34ca000}, {0xc34cc000}, {0xc34ce000}, 
+    {0xc34d0000}, {0xc34d2000}, {0xc34d4000}, {0xc34d6000}, 
+    {0xc34d8000}, {0xc34da000}, {0xc34dc000}, {0xc34de000}, 
+    {0xc34e0000}, {0xc34e2000}, {0xc34e4000}, {0xc34e6000}, 
+    {0xc34e8000}, {0xc34ea000}, {0xc34ec000}, {0xc34ee000}, 
+    {0xc34f0000}, {0xc34f2000}, {0xc34f4000}, {0xc34f6000}, 
+    {0xc34f8000}, {0xc34fa000}, {0xc34fc000}, {0xc34fe000}, 
+    {0xc3500000}, {0xc3502000}, {0xc3504000}, {0xc3506000}, 
+    {0xc3508000}, {0xc350a000}, {0xc350c000}, {0xc350e000}, 
+    {0xc3510000}, {0xc3512000}, {0xc3514000}, {0xc3516000}, 
+    {0xc3518000}, {0xc351a000}, {0xc351c000}, {0xc351e000}, 
+    {0xc3520000}, {0xc3522000}, {0xc3524000}, {0xc3526000}, 
+    {0xc3528000}, {0xc352a000}, {0xc352c000}, {0xc352e000}, 
+    {0xc3530000}, {0xc3532000}, {0xc3534000}, {0xc3536000}, 
+    {0xc3538000}, {0xc353a000}, {0xc353c000}, {0xc353e000}, 
+    {0xc3540000}, {0xc3542000}, {0xc3544000}, {0xc3546000}, 
+    {0xc3548000}, {0xc354a000}, {0xc354c000}, {0xc354e000}, 
+    {0xc3550000}, {0xc3552000}, {0xc3554000}, {0xc3556000}, 
+    {0xc3558000}, {0xc355a000}, {0xc355c000}, {0xc355e000}, 
+    {0xc3560000}, {0xc3562000}, {0xc3564000}, {0xc3566000}, 
+    {0xc3568000}, {0xc356a000}, {0xc356c000}, {0xc356e000}, 
+    {0xc3570000}, {0xc3572000}, {0xc3574000}, {0xc3576000}, 
+    {0xc3578000}, {0xc357a000}, {0xc357c000}, {0xc357e000}, 
+    {0xc3580000}, {0xc3582000}, {0xc3584000}, {0xc3586000}, 
+    {0xc3588000}, {0xc358a000}, {0xc358c000}, {0xc358e000}, 
+    {0xc3590000}, {0xc3592000}, {0xc3594000}, {0xc3596000}, 
+    {0xc3598000}, {0xc359a000}, {0xc359c000}, {0xc359e000}, 
+    {0xc35a0000}, {0xc35a2000}, {0xc35a4000}, {0xc35a6000}, 
+    {0xc35a8000}, {0xc35aa000}, {0xc35ac000}, {0xc35ae000}, 
+    {0xc35b0000}, {0xc35b2000}, {0xc35b4000}, {0xc35b6000}, 
+    {0xc35b8000}, {0xc35ba000}, {0xc35bc000}, {0xc35be000}, 
+    {0xc35c0000}, {0xc35c2000}, {0xc35c4000}, {0xc35c6000}, 
+    {0xc35c8000}, {0xc35ca000}, {0xc35cc000}, {0xc35ce000}, 
+    {0xc35d0000}, {0xc35d2000}, {0xc35d4000}, {0xc35d6000}, 
+    {0xc35d8000}, {0xc35da000}, {0xc35dc000}, {0xc35de000}, 
+    {0xc35e0000}, {0xc35e2000}, {0xc35e4000}, {0xc35e6000}, 
+    {0xc35e8000}, {0xc35ea000}, {0xc35ec000}, {0xc35ee000}, 
+    {0xc35f0000}, {0xc35f2000}, {0xc35f4000}, {0xc35f6000}, 
+    {0xc35f8000}, {0xc35fa000}, {0xc35fc000}, {0xc35fe000}, 
+    {0xc3600000}, {0xc3602000}, {0xc3604000}, {0xc3606000}, 
+    {0xc3608000}, {0xc360a000}, {0xc360c000}, {0xc360e000}, 
+    {0xc3610000}, {0xc3612000}, {0xc3614000}, {0xc3616000}, 
+    {0xc3618000}, {0xc361a000}, {0xc361c000}, {0xc361e000}, 
+    {0xc3620000}, {0xc3622000}, {0xc3624000}, {0xc3626000}, 
+    {0xc3628000}, {0xc362a000}, {0xc362c000}, {0xc362e000}, 
+    {0xc3630000}, {0xc3632000}, {0xc3634000}, {0xc3636000}, 
+    {0xc3638000}, {0xc363a000}, {0xc363c000}, {0xc363e000}, 
+    {0xc3640000}, {0xc3642000}, {0xc3644000}, {0xc3646000}, 
+    {0xc3648000}, {0xc364a000}, {0xc364c000}, {0xc364e000}, 
+    {0xc3650000}, {0xc3652000}, {0xc3654000}, {0xc3656000}, 
+    {0xc3658000}, {0xc365a000}, {0xc365c000}, {0xc365e000}, 
+    {0xc3660000}, {0xc3662000}, {0xc3664000}, {0xc3666000}, 
+    {0xc3668000}, {0xc366a000}, {0xc366c000}, {0xc366e000}, 
+    {0xc3670000}, {0xc3672000}, {0xc3674000}, {0xc3676000}, 
+    {0xc3678000}, {0xc367a000}, {0xc367c000}, {0xc367e000}, 
+    {0xc3680000}, {0xc3682000}, {0xc3684000}, {0xc3686000}, 
+    {0xc3688000}, {0xc368a000}, {0xc368c000}, {0xc368e000}, 
+    {0xc3690000}, {0xc3692000}, {0xc3694000}, {0xc3696000}, 
+    {0xc3698000}, {0xc369a000}, {0xc369c000}, {0xc369e000}, 
+    {0xc36a0000}, {0xc36a2000}, {0xc36a4000}, {0xc36a6000}, 
+    {0xc36a8000}, {0xc36aa000}, {0xc36ac000}, {0xc36ae000}, 
+    {0xc36b0000}, {0xc36b2000}, {0xc36b4000}, {0xc36b6000}, 
+    {0xc36b8000}, {0xc36ba000}, {0xc36bc000}, {0xc36be000}, 
+    {0xc36c0000}, {0xc36c2000}, {0xc36c4000}, {0xc36c6000}, 
+    {0xc36c8000}, {0xc36ca000}, {0xc36cc000}, {0xc36ce000}, 
+    {0xc36d0000}, {0xc36d2000}, {0xc36d4000}, {0xc36d6000}, 
+    {0xc36d8000}, {0xc36da000}, {0xc36dc000}, {0xc36de000}, 
+    {0xc36e0000}, {0xc36e2000}, {0xc36e4000}, {0xc36e6000}, 
+    {0xc36e8000}, {0xc36ea000}, {0xc36ec000}, {0xc36ee000}, 
+    {0xc36f0000}, {0xc36f2000}, {0xc36f4000}, {0xc36f6000}, 
+    {0xc36f8000}, {0xc36fa000}, {0xc36fc000}, {0xc36fe000}, 
+    {0xc3700000}, {0xc3702000}, {0xc3704000}, {0xc3706000}, 
+    {0xc3708000}, {0xc370a000}, {0xc370c000}, {0xc370e000}, 
+    {0xc3710000}, {0xc3712000}, {0xc3714000}, {0xc3716000}, 
+    {0xc3718000}, {0xc371a000}, {0xc371c000}, {0xc371e000}, 
+    {0xc3720000}, {0xc3722000}, {0xc3724000}, {0xc3726000}, 
+    {0xc3728000}, {0xc372a000}, {0xc372c000}, {0xc372e000}, 
+    {0xc3730000}, {0xc3732000}, {0xc3734000}, {0xc3736000}, 
+    {0xc3738000}, {0xc373a000}, {0xc373c000}, {0xc373e000}, 
+    {0xc3740000}, {0xc3742000}, {0xc3744000}, {0xc3746000}, 
+    {0xc3748000}, {0xc374a000}, {0xc374c000}, {0xc374e000}, 
+    {0xc3750000}, {0xc3752000}, {0xc3754000}, {0xc3756000}, 
+    {0xc3758000}, {0xc375a000}, {0xc375c000}, {0xc375e000}, 
+    {0xc3760000}, {0xc3762000}, {0xc3764000}, {0xc3766000}, 
+    {0xc3768000}, {0xc376a000}, {0xc376c000}, {0xc376e000}, 
+    {0xc3770000}, {0xc3772000}, {0xc3774000}, {0xc3776000}, 
+    {0xc3778000}, {0xc377a000}, {0xc377c000}, {0xc377e000}, 
+    {0xc3780000}, {0xc3782000}, {0xc3784000}, {0xc3786000}, 
+    {0xc3788000}, {0xc378a000}, {0xc378c000}, {0xc378e000}, 
+    {0xc3790000}, {0xc3792000}, {0xc3794000}, {0xc3796000}, 
+    {0xc3798000}, {0xc379a000}, {0xc379c000}, {0xc379e000}, 
+    {0xc37a0000}, {0xc37a2000}, {0xc37a4000}, {0xc37a6000}, 
+    {0xc37a8000}, {0xc37aa000}, {0xc37ac000}, {0xc37ae000}, 
+    {0xc37b0000}, {0xc37b2000}, {0xc37b4000}, {0xc37b6000}, 
+    {0xc37b8000}, {0xc37ba000}, {0xc37bc000}, {0xc37be000}, 
+    {0xc37c0000}, {0xc37c2000}, {0xc37c4000}, {0xc37c6000}, 
+    {0xc37c8000}, {0xc37ca000}, {0xc37cc000}, {0xc37ce000}, 
+    {0xc37d0000}, {0xc37d2000}, {0xc37d4000}, {0xc37d6000}, 
+    {0xc37d8000}, {0xc37da000}, {0xc37dc000}, {0xc37de000}, 
+    {0xc37e0000}, {0xc37e2000}, {0xc37e4000}, {0xc37e6000}, 
+    {0xc37e8000}, {0xc37ea000}, {0xc37ec000}, {0xc37ee000}, 
+    {0xc37f0000}, {0xc37f2000}, {0xc37f4000}, {0xc37f6000}, 
+    {0xc37f8000}, {0xc37fa000}, {0xc37fc000}, {0xc37fe000}, 
+    {0xc3800000}, {0xc3802000}, {0xc3804000}, {0xc3806000}, 
+    {0xc3808000}, {0xc380a000}, {0xc380c000}, {0xc380e000}, 
+    {0xc3810000}, {0xc3812000}, {0xc3814000}, {0xc3816000}, 
+    {0xc3818000}, {0xc381a000}, {0xc381c000}, {0xc381e000}, 
+    {0xc3820000}, {0xc3822000}, {0xc3824000}, {0xc3826000}, 
+    {0xc3828000}, {0xc382a000}, {0xc382c000}, {0xc382e000}, 
+    {0xc3830000}, {0xc3832000}, {0xc3834000}, {0xc3836000}, 
+    {0xc3838000}, {0xc383a000}, {0xc383c000}, {0xc383e000}, 
+    {0xc3840000}, {0xc3842000}, {0xc3844000}, {0xc3846000}, 
+    {0xc3848000}, {0xc384a000}, {0xc384c000}, {0xc384e000}, 
+    {0xc3850000}, {0xc3852000}, {0xc3854000}, {0xc3856000}, 
+    {0xc3858000}, {0xc385a000}, {0xc385c000}, {0xc385e000}, 
+    {0xc3860000}, {0xc3862000}, {0xc3864000}, {0xc3866000}, 
+    {0xc3868000}, {0xc386a000}, {0xc386c000}, {0xc386e000}, 
+    {0xc3870000}, {0xc3872000}, {0xc3874000}, {0xc3876000}, 
+    {0xc3878000}, {0xc387a000}, {0xc387c000}, {0xc387e000}, 
+    {0xc3880000}, {0xc3882000}, {0xc3884000}, {0xc3886000}, 
+    {0xc3888000}, {0xc388a000}, {0xc388c000}, {0xc388e000}, 
+    {0xc3890000}, {0xc3892000}, {0xc3894000}, {0xc3896000}, 
+    {0xc3898000}, {0xc389a000}, {0xc389c000}, {0xc389e000}, 
+    {0xc38a0000}, {0xc38a2000}, {0xc38a4000}, {0xc38a6000}, 
+    {0xc38a8000}, {0xc38aa000}, {0xc38ac000}, {0xc38ae000}, 
+    {0xc38b0000}, {0xc38b2000}, {0xc38b4000}, {0xc38b6000}, 
+    {0xc38b8000}, {0xc38ba000}, {0xc38bc000}, {0xc38be000}, 
+    {0xc38c0000}, {0xc38c2000}, {0xc38c4000}, {0xc38c6000}, 
+    {0xc38c8000}, {0xc38ca000}, {0xc38cc000}, {0xc38ce000}, 
+    {0xc38d0000}, {0xc38d2000}, {0xc38d4000}, {0xc38d6000}, 
+    {0xc38d8000}, {0xc38da000}, {0xc38dc000}, {0xc38de000}, 
+    {0xc38e0000}, {0xc38e2000}, {0xc38e4000}, {0xc38e6000}, 
+    {0xc38e8000}, {0xc38ea000}, {0xc38ec000}, {0xc38ee000}, 
+    {0xc38f0000}, {0xc38f2000}, {0xc38f4000}, {0xc38f6000}, 
+    {0xc38f8000}, {0xc38fa000}, {0xc38fc000}, {0xc38fe000}, 
+    {0xc3900000}, {0xc3902000}, {0xc3904000}, {0xc3906000}, 
+    {0xc3908000}, {0xc390a000}, {0xc390c000}, {0xc390e000}, 
+    {0xc3910000}, {0xc3912000}, {0xc3914000}, {0xc3916000}, 
+    {0xc3918000}, {0xc391a000}, {0xc391c000}, {0xc391e000}, 
+    {0xc3920000}, {0xc3922000}, {0xc3924000}, {0xc3926000}, 
+    {0xc3928000}, {0xc392a000}, {0xc392c000}, {0xc392e000}, 
+    {0xc3930000}, {0xc3932000}, {0xc3934000}, {0xc3936000}, 
+    {0xc3938000}, {0xc393a000}, {0xc393c000}, {0xc393e000}, 
+    {0xc3940000}, {0xc3942000}, {0xc3944000}, {0xc3946000}, 
+    {0xc3948000}, {0xc394a000}, {0xc394c000}, {0xc394e000}, 
+    {0xc3950000}, {0xc3952000}, {0xc3954000}, {0xc3956000}, 
+    {0xc3958000}, {0xc395a000}, {0xc395c000}, {0xc395e000}, 
+    {0xc3960000}, {0xc3962000}, {0xc3964000}, {0xc3966000}, 
+    {0xc3968000}, {0xc396a000}, {0xc396c000}, {0xc396e000}, 
+    {0xc3970000}, {0xc3972000}, {0xc3974000}, {0xc3976000}, 
+    {0xc3978000}, {0xc397a000}, {0xc397c000}, {0xc397e000}, 
+    {0xc3980000}, {0xc3982000}, {0xc3984000}, {0xc3986000}, 
+    {0xc3988000}, {0xc398a000}, {0xc398c000}, {0xc398e000}, 
+    {0xc3990000}, {0xc3992000}, {0xc3994000}, {0xc3996000}, 
+    {0xc3998000}, {0xc399a000}, {0xc399c000}, {0xc399e000}, 
+    {0xc39a0000}, {0xc39a2000}, {0xc39a4000}, {0xc39a6000}, 
+    {0xc39a8000}, {0xc39aa000}, {0xc39ac000}, {0xc39ae000}, 
+    {0xc39b0000}, {0xc39b2000}, {0xc39b4000}, {0xc39b6000}, 
+    {0xc39b8000}, {0xc39ba000}, {0xc39bc000}, {0xc39be000}, 
+    {0xc39c0000}, {0xc39c2000}, {0xc39c4000}, {0xc39c6000}, 
+    {0xc39c8000}, {0xc39ca000}, {0xc39cc000}, {0xc39ce000}, 
+    {0xc39d0000}, {0xc39d2000}, {0xc39d4000}, {0xc39d6000}, 
+    {0xc39d8000}, {0xc39da000}, {0xc39dc000}, {0xc39de000}, 
+    {0xc39e0000}, {0xc39e2000}, {0xc39e4000}, {0xc39e6000}, 
+    {0xc39e8000}, {0xc39ea000}, {0xc39ec000}, {0xc39ee000}, 
+    {0xc39f0000}, {0xc39f2000}, {0xc39f4000}, {0xc39f6000}, 
+    {0xc39f8000}, {0xc39fa000}, {0xc39fc000}, {0xc39fe000}, 
+    {0xc3a00000}, {0xc3a02000}, {0xc3a04000}, {0xc3a06000}, 
+    {0xc3a08000}, {0xc3a0a000}, {0xc3a0c000}, {0xc3a0e000}, 
+    {0xc3a10000}, {0xc3a12000}, {0xc3a14000}, {0xc3a16000}, 
+    {0xc3a18000}, {0xc3a1a000}, {0xc3a1c000}, {0xc3a1e000}, 
+    {0xc3a20000}, {0xc3a22000}, {0xc3a24000}, {0xc3a26000}, 
+    {0xc3a28000}, {0xc3a2a000}, {0xc3a2c000}, {0xc3a2e000}, 
+    {0xc3a30000}, {0xc3a32000}, {0xc3a34000}, {0xc3a36000}, 
+    {0xc3a38000}, {0xc3a3a000}, {0xc3a3c000}, {0xc3a3e000}, 
+    {0xc3a40000}, {0xc3a42000}, {0xc3a44000}, {0xc3a46000}, 
+    {0xc3a48000}, {0xc3a4a000}, {0xc3a4c000}, {0xc3a4e000}, 
+    {0xc3a50000}, {0xc3a52000}, {0xc3a54000}, {0xc3a56000}, 
+    {0xc3a58000}, {0xc3a5a000}, {0xc3a5c000}, {0xc3a5e000}, 
+    {0xc3a60000}, {0xc3a62000}, {0xc3a64000}, {0xc3a66000}, 
+    {0xc3a68000}, {0xc3a6a000}, {0xc3a6c000}, {0xc3a6e000}, 
+    {0xc3a70000}, {0xc3a72000}, {0xc3a74000}, {0xc3a76000}, 
+    {0xc3a78000}, {0xc3a7a000}, {0xc3a7c000}, {0xc3a7e000}, 
+    {0xc3a80000}, {0xc3a82000}, {0xc3a84000}, {0xc3a86000}, 
+    {0xc3a88000}, {0xc3a8a000}, {0xc3a8c000}, {0xc3a8e000}, 
+    {0xc3a90000}, {0xc3a92000}, {0xc3a94000}, {0xc3a96000}, 
+    {0xc3a98000}, {0xc3a9a000}, {0xc3a9c000}, {0xc3a9e000}, 
+    {0xc3aa0000}, {0xc3aa2000}, {0xc3aa4000}, {0xc3aa6000}, 
+    {0xc3aa8000}, {0xc3aaa000}, {0xc3aac000}, {0xc3aae000}, 
+    {0xc3ab0000}, {0xc3ab2000}, {0xc3ab4000}, {0xc3ab6000}, 
+    {0xc3ab8000}, {0xc3aba000}, {0xc3abc000}, {0xc3abe000}, 
+    {0xc3ac0000}, {0xc3ac2000}, {0xc3ac4000}, {0xc3ac6000}, 
+    {0xc3ac8000}, {0xc3aca000}, {0xc3acc000}, {0xc3ace000}, 
+    {0xc3ad0000}, {0xc3ad2000}, {0xc3ad4000}, {0xc3ad6000}, 
+    {0xc3ad8000}, {0xc3ada000}, {0xc3adc000}, {0xc3ade000}, 
+    {0xc3ae0000}, {0xc3ae2000}, {0xc3ae4000}, {0xc3ae6000}, 
+    {0xc3ae8000}, {0xc3aea000}, {0xc3aec000}, {0xc3aee000}, 
+    {0xc3af0000}, {0xc3af2000}, {0xc3af4000}, {0xc3af6000}, 
+    {0xc3af8000}, {0xc3afa000}, {0xc3afc000}, {0xc3afe000}, 
+    {0xc3b00000}, {0xc3b02000}, {0xc3b04000}, {0xc3b06000}, 
+    {0xc3b08000}, {0xc3b0a000}, {0xc3b0c000}, {0xc3b0e000}, 
+    {0xc3b10000}, {0xc3b12000}, {0xc3b14000}, {0xc3b16000}, 
+    {0xc3b18000}, {0xc3b1a000}, {0xc3b1c000}, {0xc3b1e000}, 
+    {0xc3b20000}, {0xc3b22000}, {0xc3b24000}, {0xc3b26000}, 
+    {0xc3b28000}, {0xc3b2a000}, {0xc3b2c000}, {0xc3b2e000}, 
+    {0xc3b30000}, {0xc3b32000}, {0xc3b34000}, {0xc3b36000}, 
+    {0xc3b38000}, {0xc3b3a000}, {0xc3b3c000}, {0xc3b3e000}, 
+    {0xc3b40000}, {0xc3b42000}, {0xc3b44000}, {0xc3b46000}, 
+    {0xc3b48000}, {0xc3b4a000}, {0xc3b4c000}, {0xc3b4e000}, 
+    {0xc3b50000}, {0xc3b52000}, {0xc3b54000}, {0xc3b56000}, 
+    {0xc3b58000}, {0xc3b5a000}, {0xc3b5c000}, {0xc3b5e000}, 
+    {0xc3b60000}, {0xc3b62000}, {0xc3b64000}, {0xc3b66000}, 
+    {0xc3b68000}, {0xc3b6a000}, {0xc3b6c000}, {0xc3b6e000}, 
+    {0xc3b70000}, {0xc3b72000}, {0xc3b74000}, {0xc3b76000}, 
+    {0xc3b78000}, {0xc3b7a000}, {0xc3b7c000}, {0xc3b7e000}, 
+    {0xc3b80000}, {0xc3b82000}, {0xc3b84000}, {0xc3b86000}, 
+    {0xc3b88000}, {0xc3b8a000}, {0xc3b8c000}, {0xc3b8e000}, 
+    {0xc3b90000}, {0xc3b92000}, {0xc3b94000}, {0xc3b96000}, 
+    {0xc3b98000}, {0xc3b9a000}, {0xc3b9c000}, {0xc3b9e000}, 
+    {0xc3ba0000}, {0xc3ba2000}, {0xc3ba4000}, {0xc3ba6000}, 
+    {0xc3ba8000}, {0xc3baa000}, {0xc3bac000}, {0xc3bae000}, 
+    {0xc3bb0000}, {0xc3bb2000}, {0xc3bb4000}, {0xc3bb6000}, 
+    {0xc3bb8000}, {0xc3bba000}, {0xc3bbc000}, {0xc3bbe000}, 
+    {0xc3bc0000}, {0xc3bc2000}, {0xc3bc4000}, {0xc3bc6000}, 
+    {0xc3bc8000}, {0xc3bca000}, {0xc3bcc000}, {0xc3bce000}, 
+    {0xc3bd0000}, {0xc3bd2000}, {0xc3bd4000}, {0xc3bd6000}, 
+    {0xc3bd8000}, {0xc3bda000}, {0xc3bdc000}, {0xc3bde000}, 
+    {0xc3be0000}, {0xc3be2000}, {0xc3be4000}, {0xc3be6000}, 
+    {0xc3be8000}, {0xc3bea000}, {0xc3bec000}, {0xc3bee000}, 
+    {0xc3bf0000}, {0xc3bf2000}, {0xc3bf4000}, {0xc3bf6000}, 
+    {0xc3bf8000}, {0xc3bfa000}, {0xc3bfc000}, {0xc3bfe000}, 
+    {0xc3c00000}, {0xc3c02000}, {0xc3c04000}, {0xc3c06000}, 
+    {0xc3c08000}, {0xc3c0a000}, {0xc3c0c000}, {0xc3c0e000}, 
+    {0xc3c10000}, {0xc3c12000}, {0xc3c14000}, {0xc3c16000}, 
+    {0xc3c18000}, {0xc3c1a000}, {0xc3c1c000}, {0xc3c1e000}, 
+    {0xc3c20000}, {0xc3c22000}, {0xc3c24000}, {0xc3c26000}, 
+    {0xc3c28000}, {0xc3c2a000}, {0xc3c2c000}, {0xc3c2e000}, 
+    {0xc3c30000}, {0xc3c32000}, {0xc3c34000}, {0xc3c36000}, 
+    {0xc3c38000}, {0xc3c3a000}, {0xc3c3c000}, {0xc3c3e000}, 
+    {0xc3c40000}, {0xc3c42000}, {0xc3c44000}, {0xc3c46000}, 
+    {0xc3c48000}, {0xc3c4a000}, {0xc3c4c000}, {0xc3c4e000}, 
+    {0xc3c50000}, {0xc3c52000}, {0xc3c54000}, {0xc3c56000}, 
+    {0xc3c58000}, {0xc3c5a000}, {0xc3c5c000}, {0xc3c5e000}, 
+    {0xc3c60000}, {0xc3c62000}, {0xc3c64000}, {0xc3c66000}, 
+    {0xc3c68000}, {0xc3c6a000}, {0xc3c6c000}, {0xc3c6e000}, 
+    {0xc3c70000}, {0xc3c72000}, {0xc3c74000}, {0xc3c76000}, 
+    {0xc3c78000}, {0xc3c7a000}, {0xc3c7c000}, {0xc3c7e000}, 
+    {0xc3c80000}, {0xc3c82000}, {0xc3c84000}, {0xc3c86000}, 
+    {0xc3c88000}, {0xc3c8a000}, {0xc3c8c000}, {0xc3c8e000}, 
+    {0xc3c90000}, {0xc3c92000}, {0xc3c94000}, {0xc3c96000}, 
+    {0xc3c98000}, {0xc3c9a000}, {0xc3c9c000}, {0xc3c9e000}, 
+    {0xc3ca0000}, {0xc3ca2000}, {0xc3ca4000}, {0xc3ca6000}, 
+    {0xc3ca8000}, {0xc3caa000}, {0xc3cac000}, {0xc3cae000}, 
+    {0xc3cb0000}, {0xc3cb2000}, {0xc3cb4000}, {0xc3cb6000}, 
+    {0xc3cb8000}, {0xc3cba000}, {0xc3cbc000}, {0xc3cbe000}, 
+    {0xc3cc0000}, {0xc3cc2000}, {0xc3cc4000}, {0xc3cc6000}, 
+    {0xc3cc8000}, {0xc3cca000}, {0xc3ccc000}, {0xc3cce000}, 
+    {0xc3cd0000}, {0xc3cd2000}, {0xc3cd4000}, {0xc3cd6000}, 
+    {0xc3cd8000}, {0xc3cda000}, {0xc3cdc000}, {0xc3cde000}, 
+    {0xc3ce0000}, {0xc3ce2000}, {0xc3ce4000}, {0xc3ce6000}, 
+    {0xc3ce8000}, {0xc3cea000}, {0xc3cec000}, {0xc3cee000}, 
+    {0xc3cf0000}, {0xc3cf2000}, {0xc3cf4000}, {0xc3cf6000}, 
+    {0xc3cf8000}, {0xc3cfa000}, {0xc3cfc000}, {0xc3cfe000}, 
+    {0xc3d00000}, {0xc3d02000}, {0xc3d04000}, {0xc3d06000}, 
+    {0xc3d08000}, {0xc3d0a000}, {0xc3d0c000}, {0xc3d0e000}, 
+    {0xc3d10000}, {0xc3d12000}, {0xc3d14000}, {0xc3d16000}, 
+    {0xc3d18000}, {0xc3d1a000}, {0xc3d1c000}, {0xc3d1e000}, 
+    {0xc3d20000}, {0xc3d22000}, {0xc3d24000}, {0xc3d26000}, 
+    {0xc3d28000}, {0xc3d2a000}, {0xc3d2c000}, {0xc3d2e000}, 
+    {0xc3d30000}, {0xc3d32000}, {0xc3d34000}, {0xc3d36000}, 
+    {0xc3d38000}, {0xc3d3a000}, {0xc3d3c000}, {0xc3d3e000}, 
+    {0xc3d40000}, {0xc3d42000}, {0xc3d44000}, {0xc3d46000}, 
+    {0xc3d48000}, {0xc3d4a000}, {0xc3d4c000}, {0xc3d4e000}, 
+    {0xc3d50000}, {0xc3d52000}, {0xc3d54000}, {0xc3d56000}, 
+    {0xc3d58000}, {0xc3d5a000}, {0xc3d5c000}, {0xc3d5e000}, 
+    {0xc3d60000}, {0xc3d62000}, {0xc3d64000}, {0xc3d66000}, 
+    {0xc3d68000}, {0xc3d6a000}, {0xc3d6c000}, {0xc3d6e000}, 
+    {0xc3d70000}, {0xc3d72000}, {0xc3d74000}, {0xc3d76000}, 
+    {0xc3d78000}, {0xc3d7a000}, {0xc3d7c000}, {0xc3d7e000}, 
+    {0xc3d80000}, {0xc3d82000}, {0xc3d84000}, {0xc3d86000}, 
+    {0xc3d88000}, {0xc3d8a000}, {0xc3d8c000}, {0xc3d8e000}, 
+    {0xc3d90000}, {0xc3d92000}, {0xc3d94000}, {0xc3d96000}, 
+    {0xc3d98000}, {0xc3d9a000}, {0xc3d9c000}, {0xc3d9e000}, 
+    {0xc3da0000}, {0xc3da2000}, {0xc3da4000}, {0xc3da6000}, 
+    {0xc3da8000}, {0xc3daa000}, {0xc3dac000}, {0xc3dae000}, 
+    {0xc3db0000}, {0xc3db2000}, {0xc3db4000}, {0xc3db6000}, 
+    {0xc3db8000}, {0xc3dba000}, {0xc3dbc000}, {0xc3dbe000}, 
+    {0xc3dc0000}, {0xc3dc2000}, {0xc3dc4000}, {0xc3dc6000}, 
+    {0xc3dc8000}, {0xc3dca000}, {0xc3dcc000}, {0xc3dce000}, 
+    {0xc3dd0000}, {0xc3dd2000}, {0xc3dd4000}, {0xc3dd6000}, 
+    {0xc3dd8000}, {0xc3dda000}, {0xc3ddc000}, {0xc3dde000}, 
+    {0xc3de0000}, {0xc3de2000}, {0xc3de4000}, {0xc3de6000}, 
+    {0xc3de8000}, {0xc3dea000}, {0xc3dec000}, {0xc3dee000}, 
+    {0xc3df0000}, {0xc3df2000}, {0xc3df4000}, {0xc3df6000}, 
+    {0xc3df8000}, {0xc3dfa000}, {0xc3dfc000}, {0xc3dfe000}, 
+    {0xc3e00000}, {0xc3e02000}, {0xc3e04000}, {0xc3e06000}, 
+    {0xc3e08000}, {0xc3e0a000}, {0xc3e0c000}, {0xc3e0e000}, 
+    {0xc3e10000}, {0xc3e12000}, {0xc3e14000}, {0xc3e16000}, 
+    {0xc3e18000}, {0xc3e1a000}, {0xc3e1c000}, {0xc3e1e000}, 
+    {0xc3e20000}, {0xc3e22000}, {0xc3e24000}, {0xc3e26000}, 
+    {0xc3e28000}, {0xc3e2a000}, {0xc3e2c000}, {0xc3e2e000}, 
+    {0xc3e30000}, {0xc3e32000}, {0xc3e34000}, {0xc3e36000}, 
+    {0xc3e38000}, {0xc3e3a000}, {0xc3e3c000}, {0xc3e3e000}, 
+    {0xc3e40000}, {0xc3e42000}, {0xc3e44000}, {0xc3e46000}, 
+    {0xc3e48000}, {0xc3e4a000}, {0xc3e4c000}, {0xc3e4e000}, 
+    {0xc3e50000}, {0xc3e52000}, {0xc3e54000}, {0xc3e56000}, 
+    {0xc3e58000}, {0xc3e5a000}, {0xc3e5c000}, {0xc3e5e000}, 
+    {0xc3e60000}, {0xc3e62000}, {0xc3e64000}, {0xc3e66000}, 
+    {0xc3e68000}, {0xc3e6a000}, {0xc3e6c000}, {0xc3e6e000}, 
+    {0xc3e70000}, {0xc3e72000}, {0xc3e74000}, {0xc3e76000}, 
+    {0xc3e78000}, {0xc3e7a000}, {0xc3e7c000}, {0xc3e7e000}, 
+    {0xc3e80000}, {0xc3e82000}, {0xc3e84000}, {0xc3e86000}, 
+    {0xc3e88000}, {0xc3e8a000}, {0xc3e8c000}, {0xc3e8e000}, 
+    {0xc3e90000}, {0xc3e92000}, {0xc3e94000}, {0xc3e96000}, 
+    {0xc3e98000}, {0xc3e9a000}, {0xc3e9c000}, {0xc3e9e000}, 
+    {0xc3ea0000}, {0xc3ea2000}, {0xc3ea4000}, {0xc3ea6000}, 
+    {0xc3ea8000}, {0xc3eaa000}, {0xc3eac000}, {0xc3eae000}, 
+    {0xc3eb0000}, {0xc3eb2000}, {0xc3eb4000}, {0xc3eb6000}, 
+    {0xc3eb8000}, {0xc3eba000}, {0xc3ebc000}, {0xc3ebe000}, 
+    {0xc3ec0000}, {0xc3ec2000}, {0xc3ec4000}, {0xc3ec6000}, 
+    {0xc3ec8000}, {0xc3eca000}, {0xc3ecc000}, {0xc3ece000}, 
+    {0xc3ed0000}, {0xc3ed2000}, {0xc3ed4000}, {0xc3ed6000}, 
+    {0xc3ed8000}, {0xc3eda000}, {0xc3edc000}, {0xc3ede000}, 
+    {0xc3ee0000}, {0xc3ee2000}, {0xc3ee4000}, {0xc3ee6000}, 
+    {0xc3ee8000}, {0xc3eea000}, {0xc3eec000}, {0xc3eee000}, 
+    {0xc3ef0000}, {0xc3ef2000}, {0xc3ef4000}, {0xc3ef6000}, 
+    {0xc3ef8000}, {0xc3efa000}, {0xc3efc000}, {0xc3efe000}, 
+    {0xc3f00000}, {0xc3f02000}, {0xc3f04000}, {0xc3f06000}, 
+    {0xc3f08000}, {0xc3f0a000}, {0xc3f0c000}, {0xc3f0e000}, 
+    {0xc3f10000}, {0xc3f12000}, {0xc3f14000}, {0xc3f16000}, 
+    {0xc3f18000}, {0xc3f1a000}, {0xc3f1c000}, {0xc3f1e000}, 
+    {0xc3f20000}, {0xc3f22000}, {0xc3f24000}, {0xc3f26000}, 
+    {0xc3f28000}, {0xc3f2a000}, {0xc3f2c000}, {0xc3f2e000}, 
+    {0xc3f30000}, {0xc3f32000}, {0xc3f34000}, {0xc3f36000}, 
+    {0xc3f38000}, {0xc3f3a000}, {0xc3f3c000}, {0xc3f3e000}, 
+    {0xc3f40000}, {0xc3f42000}, {0xc3f44000}, {0xc3f46000}, 
+    {0xc3f48000}, {0xc3f4a000}, {0xc3f4c000}, {0xc3f4e000}, 
+    {0xc3f50000}, {0xc3f52000}, {0xc3f54000}, {0xc3f56000}, 
+    {0xc3f58000}, {0xc3f5a000}, {0xc3f5c000}, {0xc3f5e000}, 
+    {0xc3f60000}, {0xc3f62000}, {0xc3f64000}, {0xc3f66000}, 
+    {0xc3f68000}, {0xc3f6a000}, {0xc3f6c000}, {0xc3f6e000}, 
+    {0xc3f70000}, {0xc3f72000}, {0xc3f74000}, {0xc3f76000}, 
+    {0xc3f78000}, {0xc3f7a000}, {0xc3f7c000}, {0xc3f7e000}, 
+    {0xc3f80000}, {0xc3f82000}, {0xc3f84000}, {0xc3f86000}, 
+    {0xc3f88000}, {0xc3f8a000}, {0xc3f8c000}, {0xc3f8e000}, 
+    {0xc3f90000}, {0xc3f92000}, {0xc3f94000}, {0xc3f96000}, 
+    {0xc3f98000}, {0xc3f9a000}, {0xc3f9c000}, {0xc3f9e000}, 
+    {0xc3fa0000}, {0xc3fa2000}, {0xc3fa4000}, {0xc3fa6000}, 
+    {0xc3fa8000}, {0xc3faa000}, {0xc3fac000}, {0xc3fae000}, 
+    {0xc3fb0000}, {0xc3fb2000}, {0xc3fb4000}, {0xc3fb6000}, 
+    {0xc3fb8000}, {0xc3fba000}, {0xc3fbc000}, {0xc3fbe000}, 
+    {0xc3fc0000}, {0xc3fc2000}, {0xc3fc4000}, {0xc3fc6000}, 
+    {0xc3fc8000}, {0xc3fca000}, {0xc3fcc000}, {0xc3fce000}, 
+    {0xc3fd0000}, {0xc3fd2000}, {0xc3fd4000}, {0xc3fd6000}, 
+    {0xc3fd8000}, {0xc3fda000}, {0xc3fdc000}, {0xc3fde000}, 
+    {0xc3fe0000}, {0xc3fe2000}, {0xc3fe4000}, {0xc3fe6000}, 
+    {0xc3fe8000}, {0xc3fea000}, {0xc3fec000}, {0xc3fee000}, 
+    {0xc3ff0000}, {0xc3ff2000}, {0xc3ff4000}, {0xc3ff6000}, 
+    {0xc3ff8000}, {0xc3ffa000}, {0xc3ffc000}, {0xc3ffe000}, 
+    {0xc4000000}, {0xc4002000}, {0xc4004000}, {0xc4006000}, 
+    {0xc4008000}, {0xc400a000}, {0xc400c000}, {0xc400e000}, 
+    {0xc4010000}, {0xc4012000}, {0xc4014000}, {0xc4016000}, 
+    {0xc4018000}, {0xc401a000}, {0xc401c000}, {0xc401e000}, 
+    {0xc4020000}, {0xc4022000}, {0xc4024000}, {0xc4026000}, 
+    {0xc4028000}, {0xc402a000}, {0xc402c000}, {0xc402e000}, 
+    {0xc4030000}, {0xc4032000}, {0xc4034000}, {0xc4036000}, 
+    {0xc4038000}, {0xc403a000}, {0xc403c000}, {0xc403e000}, 
+    {0xc4040000}, {0xc4042000}, {0xc4044000}, {0xc4046000}, 
+    {0xc4048000}, {0xc404a000}, {0xc404c000}, {0xc404e000}, 
+    {0xc4050000}, {0xc4052000}, {0xc4054000}, {0xc4056000}, 
+    {0xc4058000}, {0xc405a000}, {0xc405c000}, {0xc405e000}, 
+    {0xc4060000}, {0xc4062000}, {0xc4064000}, {0xc4066000}, 
+    {0xc4068000}, {0xc406a000}, {0xc406c000}, {0xc406e000}, 
+    {0xc4070000}, {0xc4072000}, {0xc4074000}, {0xc4076000}, 
+    {0xc4078000}, {0xc407a000}, {0xc407c000}, {0xc407e000}, 
+    {0xc4080000}, {0xc4082000}, {0xc4084000}, {0xc4086000}, 
+    {0xc4088000}, {0xc408a000}, {0xc408c000}, {0xc408e000}, 
+    {0xc4090000}, {0xc4092000}, {0xc4094000}, {0xc4096000}, 
+    {0xc4098000}, {0xc409a000}, {0xc409c000}, {0xc409e000}, 
+    {0xc40a0000}, {0xc40a2000}, {0xc40a4000}, {0xc40a6000}, 
+    {0xc40a8000}, {0xc40aa000}, {0xc40ac000}, {0xc40ae000}, 
+    {0xc40b0000}, {0xc40b2000}, {0xc40b4000}, {0xc40b6000}, 
+    {0xc40b8000}, {0xc40ba000}, {0xc40bc000}, {0xc40be000}, 
+    {0xc40c0000}, {0xc40c2000}, {0xc40c4000}, {0xc40c6000}, 
+    {0xc40c8000}, {0xc40ca000}, {0xc40cc000}, {0xc40ce000}, 
+    {0xc40d0000}, {0xc40d2000}, {0xc40d4000}, {0xc40d6000}, 
+    {0xc40d8000}, {0xc40da000}, {0xc40dc000}, {0xc40de000}, 
+    {0xc40e0000}, {0xc40e2000}, {0xc40e4000}, {0xc40e6000}, 
+    {0xc40e8000}, {0xc40ea000}, {0xc40ec000}, {0xc40ee000}, 
+    {0xc40f0000}, {0xc40f2000}, {0xc40f4000}, {0xc40f6000}, 
+    {0xc40f8000}, {0xc40fa000}, {0xc40fc000}, {0xc40fe000}, 
+    {0xc4100000}, {0xc4102000}, {0xc4104000}, {0xc4106000}, 
+    {0xc4108000}, {0xc410a000}, {0xc410c000}, {0xc410e000}, 
+    {0xc4110000}, {0xc4112000}, {0xc4114000}, {0xc4116000}, 
+    {0xc4118000}, {0xc411a000}, {0xc411c000}, {0xc411e000}, 
+    {0xc4120000}, {0xc4122000}, {0xc4124000}, {0xc4126000}, 
+    {0xc4128000}, {0xc412a000}, {0xc412c000}, {0xc412e000}, 
+    {0xc4130000}, {0xc4132000}, {0xc4134000}, {0xc4136000}, 
+    {0xc4138000}, {0xc413a000}, {0xc413c000}, {0xc413e000}, 
+    {0xc4140000}, {0xc4142000}, {0xc4144000}, {0xc4146000}, 
+    {0xc4148000}, {0xc414a000}, {0xc414c000}, {0xc414e000}, 
+    {0xc4150000}, {0xc4152000}, {0xc4154000}, {0xc4156000}, 
+    {0xc4158000}, {0xc415a000}, {0xc415c000}, {0xc415e000}, 
+    {0xc4160000}, {0xc4162000}, {0xc4164000}, {0xc4166000}, 
+    {0xc4168000}, {0xc416a000}, {0xc416c000}, {0xc416e000}, 
+    {0xc4170000}, {0xc4172000}, {0xc4174000}, {0xc4176000}, 
+    {0xc4178000}, {0xc417a000}, {0xc417c000}, {0xc417e000}, 
+    {0xc4180000}, {0xc4182000}, {0xc4184000}, {0xc4186000}, 
+    {0xc4188000}, {0xc418a000}, {0xc418c000}, {0xc418e000}, 
+    {0xc4190000}, {0xc4192000}, {0xc4194000}, {0xc4196000}, 
+    {0xc4198000}, {0xc419a000}, {0xc419c000}, {0xc419e000}, 
+    {0xc41a0000}, {0xc41a2000}, {0xc41a4000}, {0xc41a6000}, 
+    {0xc41a8000}, {0xc41aa000}, {0xc41ac000}, {0xc41ae000}, 
+    {0xc41b0000}, {0xc41b2000}, {0xc41b4000}, {0xc41b6000}, 
+    {0xc41b8000}, {0xc41ba000}, {0xc41bc000}, {0xc41be000}, 
+    {0xc41c0000}, {0xc41c2000}, {0xc41c4000}, {0xc41c6000}, 
+    {0xc41c8000}, {0xc41ca000}, {0xc41cc000}, {0xc41ce000}, 
+    {0xc41d0000}, {0xc41d2000}, {0xc41d4000}, {0xc41d6000}, 
+    {0xc41d8000}, {0xc41da000}, {0xc41dc000}, {0xc41de000}, 
+    {0xc41e0000}, {0xc41e2000}, {0xc41e4000}, {0xc41e6000}, 
+    {0xc41e8000}, {0xc41ea000}, {0xc41ec000}, {0xc41ee000}, 
+    {0xc41f0000}, {0xc41f2000}, {0xc41f4000}, {0xc41f6000}, 
+    {0xc41f8000}, {0xc41fa000}, {0xc41fc000}, {0xc41fe000}, 
+    {0xc4200000}, {0xc4202000}, {0xc4204000}, {0xc4206000}, 
+    {0xc4208000}, {0xc420a000}, {0xc420c000}, {0xc420e000}, 
+    {0xc4210000}, {0xc4212000}, {0xc4214000}, {0xc4216000}, 
+    {0xc4218000}, {0xc421a000}, {0xc421c000}, {0xc421e000}, 
+    {0xc4220000}, {0xc4222000}, {0xc4224000}, {0xc4226000}, 
+    {0xc4228000}, {0xc422a000}, {0xc422c000}, {0xc422e000}, 
+    {0xc4230000}, {0xc4232000}, {0xc4234000}, {0xc4236000}, 
+    {0xc4238000}, {0xc423a000}, {0xc423c000}, {0xc423e000}, 
+    {0xc4240000}, {0xc4242000}, {0xc4244000}, {0xc4246000}, 
+    {0xc4248000}, {0xc424a000}, {0xc424c000}, {0xc424e000}, 
+    {0xc4250000}, {0xc4252000}, {0xc4254000}, {0xc4256000}, 
+    {0xc4258000}, {0xc425a000}, {0xc425c000}, {0xc425e000}, 
+    {0xc4260000}, {0xc4262000}, {0xc4264000}, {0xc4266000}, 
+    {0xc4268000}, {0xc426a000}, {0xc426c000}, {0xc426e000}, 
+    {0xc4270000}, {0xc4272000}, {0xc4274000}, {0xc4276000}, 
+    {0xc4278000}, {0xc427a000}, {0xc427c000}, {0xc427e000}, 
+    {0xc4280000}, {0xc4282000}, {0xc4284000}, {0xc4286000}, 
+    {0xc4288000}, {0xc428a000}, {0xc428c000}, {0xc428e000}, 
+    {0xc4290000}, {0xc4292000}, {0xc4294000}, {0xc4296000}, 
+    {0xc4298000}, {0xc429a000}, {0xc429c000}, {0xc429e000}, 
+    {0xc42a0000}, {0xc42a2000}, {0xc42a4000}, {0xc42a6000}, 
+    {0xc42a8000}, {0xc42aa000}, {0xc42ac000}, {0xc42ae000}, 
+    {0xc42b0000}, {0xc42b2000}, {0xc42b4000}, {0xc42b6000}, 
+    {0xc42b8000}, {0xc42ba000}, {0xc42bc000}, {0xc42be000}, 
+    {0xc42c0000}, {0xc42c2000}, {0xc42c4000}, {0xc42c6000}, 
+    {0xc42c8000}, {0xc42ca000}, {0xc42cc000}, {0xc42ce000}, 
+    {0xc42d0000}, {0xc42d2000}, {0xc42d4000}, {0xc42d6000}, 
+    {0xc42d8000}, {0xc42da000}, {0xc42dc000}, {0xc42de000}, 
+    {0xc42e0000}, {0xc42e2000}, {0xc42e4000}, {0xc42e6000}, 
+    {0xc42e8000}, {0xc42ea000}, {0xc42ec000}, {0xc42ee000}, 
+    {0xc42f0000}, {0xc42f2000}, {0xc42f4000}, {0xc42f6000}, 
+    {0xc42f8000}, {0xc42fa000}, {0xc42fc000}, {0xc42fe000}, 
+    {0xc4300000}, {0xc4302000}, {0xc4304000}, {0xc4306000}, 
+    {0xc4308000}, {0xc430a000}, {0xc430c000}, {0xc430e000}, 
+    {0xc4310000}, {0xc4312000}, {0xc4314000}, {0xc4316000}, 
+    {0xc4318000}, {0xc431a000}, {0xc431c000}, {0xc431e000}, 
+    {0xc4320000}, {0xc4322000}, {0xc4324000}, {0xc4326000}, 
+    {0xc4328000}, {0xc432a000}, {0xc432c000}, {0xc432e000}, 
+    {0xc4330000}, {0xc4332000}, {0xc4334000}, {0xc4336000}, 
+    {0xc4338000}, {0xc433a000}, {0xc433c000}, {0xc433e000}, 
+    {0xc4340000}, {0xc4342000}, {0xc4344000}, {0xc4346000}, 
+    {0xc4348000}, {0xc434a000}, {0xc434c000}, {0xc434e000}, 
+    {0xc4350000}, {0xc4352000}, {0xc4354000}, {0xc4356000}, 
+    {0xc4358000}, {0xc435a000}, {0xc435c000}, {0xc435e000}, 
+    {0xc4360000}, {0xc4362000}, {0xc4364000}, {0xc4366000}, 
+    {0xc4368000}, {0xc436a000}, {0xc436c000}, {0xc436e000}, 
+    {0xc4370000}, {0xc4372000}, {0xc4374000}, {0xc4376000}, 
+    {0xc4378000}, {0xc437a000}, {0xc437c000}, {0xc437e000}, 
+    {0xc4380000}, {0xc4382000}, {0xc4384000}, {0xc4386000}, 
+    {0xc4388000}, {0xc438a000}, {0xc438c000}, {0xc438e000}, 
+    {0xc4390000}, {0xc4392000}, {0xc4394000}, {0xc4396000}, 
+    {0xc4398000}, {0xc439a000}, {0xc439c000}, {0xc439e000}, 
+    {0xc43a0000}, {0xc43a2000}, {0xc43a4000}, {0xc43a6000}, 
+    {0xc43a8000}, {0xc43aa000}, {0xc43ac000}, {0xc43ae000}, 
+    {0xc43b0000}, {0xc43b2000}, {0xc43b4000}, {0xc43b6000}, 
+    {0xc43b8000}, {0xc43ba000}, {0xc43bc000}, {0xc43be000}, 
+    {0xc43c0000}, {0xc43c2000}, {0xc43c4000}, {0xc43c6000}, 
+    {0xc43c8000}, {0xc43ca000}, {0xc43cc000}, {0xc43ce000}, 
+    {0xc43d0000}, {0xc43d2000}, {0xc43d4000}, {0xc43d6000}, 
+    {0xc43d8000}, {0xc43da000}, {0xc43dc000}, {0xc43de000}, 
+    {0xc43e0000}, {0xc43e2000}, {0xc43e4000}, {0xc43e6000}, 
+    {0xc43e8000}, {0xc43ea000}, {0xc43ec000}, {0xc43ee000}, 
+    {0xc43f0000}, {0xc43f2000}, {0xc43f4000}, {0xc43f6000}, 
+    {0xc43f8000}, {0xc43fa000}, {0xc43fc000}, {0xc43fe000}, 
+    {0xc4400000}, {0xc4402000}, {0xc4404000}, {0xc4406000}, 
+    {0xc4408000}, {0xc440a000}, {0xc440c000}, {0xc440e000}, 
+    {0xc4410000}, {0xc4412000}, {0xc4414000}, {0xc4416000}, 
+    {0xc4418000}, {0xc441a000}, {0xc441c000}, {0xc441e000}, 
+    {0xc4420000}, {0xc4422000}, {0xc4424000}, {0xc4426000}, 
+    {0xc4428000}, {0xc442a000}, {0xc442c000}, {0xc442e000}, 
+    {0xc4430000}, {0xc4432000}, {0xc4434000}, {0xc4436000}, 
+    {0xc4438000}, {0xc443a000}, {0xc443c000}, {0xc443e000}, 
+    {0xc4440000}, {0xc4442000}, {0xc4444000}, {0xc4446000}, 
+    {0xc4448000}, {0xc444a000}, {0xc444c000}, {0xc444e000}, 
+    {0xc4450000}, {0xc4452000}, {0xc4454000}, {0xc4456000}, 
+    {0xc4458000}, {0xc445a000}, {0xc445c000}, {0xc445e000}, 
+    {0xc4460000}, {0xc4462000}, {0xc4464000}, {0xc4466000}, 
+    {0xc4468000}, {0xc446a000}, {0xc446c000}, {0xc446e000}, 
+    {0xc4470000}, {0xc4472000}, {0xc4474000}, {0xc4476000}, 
+    {0xc4478000}, {0xc447a000}, {0xc447c000}, {0xc447e000}, 
+    {0xc4480000}, {0xc4482000}, {0xc4484000}, {0xc4486000}, 
+    {0xc4488000}, {0xc448a000}, {0xc448c000}, {0xc448e000}, 
+    {0xc4490000}, {0xc4492000}, {0xc4494000}, {0xc4496000}, 
+    {0xc4498000}, {0xc449a000}, {0xc449c000}, {0xc449e000}, 
+    {0xc44a0000}, {0xc44a2000}, {0xc44a4000}, {0xc44a6000}, 
+    {0xc44a8000}, {0xc44aa000}, {0xc44ac000}, {0xc44ae000}, 
+    {0xc44b0000}, {0xc44b2000}, {0xc44b4000}, {0xc44b6000}, 
+    {0xc44b8000}, {0xc44ba000}, {0xc44bc000}, {0xc44be000}, 
+    {0xc44c0000}, {0xc44c2000}, {0xc44c4000}, {0xc44c6000}, 
+    {0xc44c8000}, {0xc44ca000}, {0xc44cc000}, {0xc44ce000}, 
+    {0xc44d0000}, {0xc44d2000}, {0xc44d4000}, {0xc44d6000}, 
+    {0xc44d8000}, {0xc44da000}, {0xc44dc000}, {0xc44de000}, 
+    {0xc44e0000}, {0xc44e2000}, {0xc44e4000}, {0xc44e6000}, 
+    {0xc44e8000}, {0xc44ea000}, {0xc44ec000}, {0xc44ee000}, 
+    {0xc44f0000}, {0xc44f2000}, {0xc44f4000}, {0xc44f6000}, 
+    {0xc44f8000}, {0xc44fa000}, {0xc44fc000}, {0xc44fe000}, 
+    {0xc4500000}, {0xc4502000}, {0xc4504000}, {0xc4506000}, 
+    {0xc4508000}, {0xc450a000}, {0xc450c000}, {0xc450e000}, 
+    {0xc4510000}, {0xc4512000}, {0xc4514000}, {0xc4516000}, 
+    {0xc4518000}, {0xc451a000}, {0xc451c000}, {0xc451e000}, 
+    {0xc4520000}, {0xc4522000}, {0xc4524000}, {0xc4526000}, 
+    {0xc4528000}, {0xc452a000}, {0xc452c000}, {0xc452e000}, 
+    {0xc4530000}, {0xc4532000}, {0xc4534000}, {0xc4536000}, 
+    {0xc4538000}, {0xc453a000}, {0xc453c000}, {0xc453e000}, 
+    {0xc4540000}, {0xc4542000}, {0xc4544000}, {0xc4546000}, 
+    {0xc4548000}, {0xc454a000}, {0xc454c000}, {0xc454e000}, 
+    {0xc4550000}, {0xc4552000}, {0xc4554000}, {0xc4556000}, 
+    {0xc4558000}, {0xc455a000}, {0xc455c000}, {0xc455e000}, 
+    {0xc4560000}, {0xc4562000}, {0xc4564000}, {0xc4566000}, 
+    {0xc4568000}, {0xc456a000}, {0xc456c000}, {0xc456e000}, 
+    {0xc4570000}, {0xc4572000}, {0xc4574000}, {0xc4576000}, 
+    {0xc4578000}, {0xc457a000}, {0xc457c000}, {0xc457e000}, 
+    {0xc4580000}, {0xc4582000}, {0xc4584000}, {0xc4586000}, 
+    {0xc4588000}, {0xc458a000}, {0xc458c000}, {0xc458e000}, 
+    {0xc4590000}, {0xc4592000}, {0xc4594000}, {0xc4596000}, 
+    {0xc4598000}, {0xc459a000}, {0xc459c000}, {0xc459e000}, 
+    {0xc45a0000}, {0xc45a2000}, {0xc45a4000}, {0xc45a6000}, 
+    {0xc45a8000}, {0xc45aa000}, {0xc45ac000}, {0xc45ae000}, 
+    {0xc45b0000}, {0xc45b2000}, {0xc45b4000}, {0xc45b6000}, 
+    {0xc45b8000}, {0xc45ba000}, {0xc45bc000}, {0xc45be000}, 
+    {0xc45c0000}, {0xc45c2000}, {0xc45c4000}, {0xc45c6000}, 
+    {0xc45c8000}, {0xc45ca000}, {0xc45cc000}, {0xc45ce000}, 
+    {0xc45d0000}, {0xc45d2000}, {0xc45d4000}, {0xc45d6000}, 
+    {0xc45d8000}, {0xc45da000}, {0xc45dc000}, {0xc45de000}, 
+    {0xc45e0000}, {0xc45e2000}, {0xc45e4000}, {0xc45e6000}, 
+    {0xc45e8000}, {0xc45ea000}, {0xc45ec000}, {0xc45ee000}, 
+    {0xc45f0000}, {0xc45f2000}, {0xc45f4000}, {0xc45f6000}, 
+    {0xc45f8000}, {0xc45fa000}, {0xc45fc000}, {0xc45fe000}, 
+    {0xc4600000}, {0xc4602000}, {0xc4604000}, {0xc4606000}, 
+    {0xc4608000}, {0xc460a000}, {0xc460c000}, {0xc460e000}, 
+    {0xc4610000}, {0xc4612000}, {0xc4614000}, {0xc4616000}, 
+    {0xc4618000}, {0xc461a000}, {0xc461c000}, {0xc461e000}, 
+    {0xc4620000}, {0xc4622000}, {0xc4624000}, {0xc4626000}, 
+    {0xc4628000}, {0xc462a000}, {0xc462c000}, {0xc462e000}, 
+    {0xc4630000}, {0xc4632000}, {0xc4634000}, {0xc4636000}, 
+    {0xc4638000}, {0xc463a000}, {0xc463c000}, {0xc463e000}, 
+    {0xc4640000}, {0xc4642000}, {0xc4644000}, {0xc4646000}, 
+    {0xc4648000}, {0xc464a000}, {0xc464c000}, {0xc464e000}, 
+    {0xc4650000}, {0xc4652000}, {0xc4654000}, {0xc4656000}, 
+    {0xc4658000}, {0xc465a000}, {0xc465c000}, {0xc465e000}, 
+    {0xc4660000}, {0xc4662000}, {0xc4664000}, {0xc4666000}, 
+    {0xc4668000}, {0xc466a000}, {0xc466c000}, {0xc466e000}, 
+    {0xc4670000}, {0xc4672000}, {0xc4674000}, {0xc4676000}, 
+    {0xc4678000}, {0xc467a000}, {0xc467c000}, {0xc467e000}, 
+    {0xc4680000}, {0xc4682000}, {0xc4684000}, {0xc4686000}, 
+    {0xc4688000}, {0xc468a000}, {0xc468c000}, {0xc468e000}, 
+    {0xc4690000}, {0xc4692000}, {0xc4694000}, {0xc4696000}, 
+    {0xc4698000}, {0xc469a000}, {0xc469c000}, {0xc469e000}, 
+    {0xc46a0000}, {0xc46a2000}, {0xc46a4000}, {0xc46a6000}, 
+    {0xc46a8000}, {0xc46aa000}, {0xc46ac000}, {0xc46ae000}, 
+    {0xc46b0000}, {0xc46b2000}, {0xc46b4000}, {0xc46b6000}, 
+    {0xc46b8000}, {0xc46ba000}, {0xc46bc000}, {0xc46be000}, 
+    {0xc46c0000}, {0xc46c2000}, {0xc46c4000}, {0xc46c6000}, 
+    {0xc46c8000}, {0xc46ca000}, {0xc46cc000}, {0xc46ce000}, 
+    {0xc46d0000}, {0xc46d2000}, {0xc46d4000}, {0xc46d6000}, 
+    {0xc46d8000}, {0xc46da000}, {0xc46dc000}, {0xc46de000}, 
+    {0xc46e0000}, {0xc46e2000}, {0xc46e4000}, {0xc46e6000}, 
+    {0xc46e8000}, {0xc46ea000}, {0xc46ec000}, {0xc46ee000}, 
+    {0xc46f0000}, {0xc46f2000}, {0xc46f4000}, {0xc46f6000}, 
+    {0xc46f8000}, {0xc46fa000}, {0xc46fc000}, {0xc46fe000}, 
+    {0xc4700000}, {0xc4702000}, {0xc4704000}, {0xc4706000}, 
+    {0xc4708000}, {0xc470a000}, {0xc470c000}, {0xc470e000}, 
+    {0xc4710000}, {0xc4712000}, {0xc4714000}, {0xc4716000}, 
+    {0xc4718000}, {0xc471a000}, {0xc471c000}, {0xc471e000}, 
+    {0xc4720000}, {0xc4722000}, {0xc4724000}, {0xc4726000}, 
+    {0xc4728000}, {0xc472a000}, {0xc472c000}, {0xc472e000}, 
+    {0xc4730000}, {0xc4732000}, {0xc4734000}, {0xc4736000}, 
+    {0xc4738000}, {0xc473a000}, {0xc473c000}, {0xc473e000}, 
+    {0xc4740000}, {0xc4742000}, {0xc4744000}, {0xc4746000}, 
+    {0xc4748000}, {0xc474a000}, {0xc474c000}, {0xc474e000}, 
+    {0xc4750000}, {0xc4752000}, {0xc4754000}, {0xc4756000}, 
+    {0xc4758000}, {0xc475a000}, {0xc475c000}, {0xc475e000}, 
+    {0xc4760000}, {0xc4762000}, {0xc4764000}, {0xc4766000}, 
+    {0xc4768000}, {0xc476a000}, {0xc476c000}, {0xc476e000}, 
+    {0xc4770000}, {0xc4772000}, {0xc4774000}, {0xc4776000}, 
+    {0xc4778000}, {0xc477a000}, {0xc477c000}, {0xc477e000}, 
+    {0xc4780000}, {0xc4782000}, {0xc4784000}, {0xc4786000}, 
+    {0xc4788000}, {0xc478a000}, {0xc478c000}, {0xc478e000}, 
+    {0xc4790000}, {0xc4792000}, {0xc4794000}, {0xc4796000}, 
+    {0xc4798000}, {0xc479a000}, {0xc479c000}, {0xc479e000}, 
+    {0xc47a0000}, {0xc47a2000}, {0xc47a4000}, {0xc47a6000}, 
+    {0xc47a8000}, {0xc47aa000}, {0xc47ac000}, {0xc47ae000}, 
+    {0xc47b0000}, {0xc47b2000}, {0xc47b4000}, {0xc47b6000}, 
+    {0xc47b8000}, {0xc47ba000}, {0xc47bc000}, {0xc47be000}, 
+    {0xc47c0000}, {0xc47c2000}, {0xc47c4000}, {0xc47c6000}, 
+    {0xc47c8000}, {0xc47ca000}, {0xc47cc000}, {0xc47ce000}, 
+    {0xc47d0000}, {0xc47d2000}, {0xc47d4000}, {0xc47d6000}, 
+    {0xc47d8000}, {0xc47da000}, {0xc47dc000}, {0xc47de000}, 
+    {0xc47e0000}, {0xc47e2000}, {0xc47e4000}, {0xc47e6000}, 
+    {0xc47e8000}, {0xc47ea000}, {0xc47ec000}, {0xc47ee000}, 
+    {0xc47f0000}, {0xc47f2000}, {0xc47f4000}, {0xc47f6000}, 
+    {0xc47f8000}, {0xc47fa000}, {0xc47fc000}, {0xc47fe000}, 
+    {0xc4800000}, {0xc4802000}, {0xc4804000}, {0xc4806000}, 
+    {0xc4808000}, {0xc480a000}, {0xc480c000}, {0xc480e000}, 
+    {0xc4810000}, {0xc4812000}, {0xc4814000}, {0xc4816000}, 
+    {0xc4818000}, {0xc481a000}, {0xc481c000}, {0xc481e000}, 
+    {0xc4820000}, {0xc4822000}, {0xc4824000}, {0xc4826000}, 
+    {0xc4828000}, {0xc482a000}, {0xc482c000}, {0xc482e000}, 
+    {0xc4830000}, {0xc4832000}, {0xc4834000}, {0xc4836000}, 
+    {0xc4838000}, {0xc483a000}, {0xc483c000}, {0xc483e000}, 
+    {0xc4840000}, {0xc4842000}, {0xc4844000}, {0xc4846000}, 
+    {0xc4848000}, {0xc484a000}, {0xc484c000}, {0xc484e000}, 
+    {0xc4850000}, {0xc4852000}, {0xc4854000}, {0xc4856000}, 
+    {0xc4858000}, {0xc485a000}, {0xc485c000}, {0xc485e000}, 
+    {0xc4860000}, {0xc4862000}, {0xc4864000}, {0xc4866000}, 
+    {0xc4868000}, {0xc486a000}, {0xc486c000}, {0xc486e000}, 
+    {0xc4870000}, {0xc4872000}, {0xc4874000}, {0xc4876000}, 
+    {0xc4878000}, {0xc487a000}, {0xc487c000}, {0xc487e000}, 
+    {0xc4880000}, {0xc4882000}, {0xc4884000}, {0xc4886000}, 
+    {0xc4888000}, {0xc488a000}, {0xc488c000}, {0xc488e000}, 
+    {0xc4890000}, {0xc4892000}, {0xc4894000}, {0xc4896000}, 
+    {0xc4898000}, {0xc489a000}, {0xc489c000}, {0xc489e000}, 
+    {0xc48a0000}, {0xc48a2000}, {0xc48a4000}, {0xc48a6000}, 
+    {0xc48a8000}, {0xc48aa000}, {0xc48ac000}, {0xc48ae000}, 
+    {0xc48b0000}, {0xc48b2000}, {0xc48b4000}, {0xc48b6000}, 
+    {0xc48b8000}, {0xc48ba000}, {0xc48bc000}, {0xc48be000}, 
+    {0xc48c0000}, {0xc48c2000}, {0xc48c4000}, {0xc48c6000}, 
+    {0xc48c8000}, {0xc48ca000}, {0xc48cc000}, {0xc48ce000}, 
+    {0xc48d0000}, {0xc48d2000}, {0xc48d4000}, {0xc48d6000}, 
+    {0xc48d8000}, {0xc48da000}, {0xc48dc000}, {0xc48de000}, 
+    {0xc48e0000}, {0xc48e2000}, {0xc48e4000}, {0xc48e6000}, 
+    {0xc48e8000}, {0xc48ea000}, {0xc48ec000}, {0xc48ee000}, 
+    {0xc48f0000}, {0xc48f2000}, {0xc48f4000}, {0xc48f6000}, 
+    {0xc48f8000}, {0xc48fa000}, {0xc48fc000}, {0xc48fe000}, 
+    {0xc4900000}, {0xc4902000}, {0xc4904000}, {0xc4906000}, 
+    {0xc4908000}, {0xc490a000}, {0xc490c000}, {0xc490e000}, 
+    {0xc4910000}, {0xc4912000}, {0xc4914000}, {0xc4916000}, 
+    {0xc4918000}, {0xc491a000}, {0xc491c000}, {0xc491e000}, 
+    {0xc4920000}, {0xc4922000}, {0xc4924000}, {0xc4926000}, 
+    {0xc4928000}, {0xc492a000}, {0xc492c000}, {0xc492e000}, 
+    {0xc4930000}, {0xc4932000}, {0xc4934000}, {0xc4936000}, 
+    {0xc4938000}, {0xc493a000}, {0xc493c000}, {0xc493e000}, 
+    {0xc4940000}, {0xc4942000}, {0xc4944000}, {0xc4946000}, 
+    {0xc4948000}, {0xc494a000}, {0xc494c000}, {0xc494e000}, 
+    {0xc4950000}, {0xc4952000}, {0xc4954000}, {0xc4956000}, 
+    {0xc4958000}, {0xc495a000}, {0xc495c000}, {0xc495e000}, 
+    {0xc4960000}, {0xc4962000}, {0xc4964000}, {0xc4966000}, 
+    {0xc4968000}, {0xc496a000}, {0xc496c000}, {0xc496e000}, 
+    {0xc4970000}, {0xc4972000}, {0xc4974000}, {0xc4976000}, 
+    {0xc4978000}, {0xc497a000}, {0xc497c000}, {0xc497e000}, 
+    {0xc4980000}, {0xc4982000}, {0xc4984000}, {0xc4986000}, 
+    {0xc4988000}, {0xc498a000}, {0xc498c000}, {0xc498e000}, 
+    {0xc4990000}, {0xc4992000}, {0xc4994000}, {0xc4996000}, 
+    {0xc4998000}, {0xc499a000}, {0xc499c000}, {0xc499e000}, 
+    {0xc49a0000}, {0xc49a2000}, {0xc49a4000}, {0xc49a6000}, 
+    {0xc49a8000}, {0xc49aa000}, {0xc49ac000}, {0xc49ae000}, 
+    {0xc49b0000}, {0xc49b2000}, {0xc49b4000}, {0xc49b6000}, 
+    {0xc49b8000}, {0xc49ba000}, {0xc49bc000}, {0xc49be000}, 
+    {0xc49c0000}, {0xc49c2000}, {0xc49c4000}, {0xc49c6000}, 
+    {0xc49c8000}, {0xc49ca000}, {0xc49cc000}, {0xc49ce000}, 
+    {0xc49d0000}, {0xc49d2000}, {0xc49d4000}, {0xc49d6000}, 
+    {0xc49d8000}, {0xc49da000}, {0xc49dc000}, {0xc49de000}, 
+    {0xc49e0000}, {0xc49e2000}, {0xc49e4000}, {0xc49e6000}, 
+    {0xc49e8000}, {0xc49ea000}, {0xc49ec000}, {0xc49ee000}, 
+    {0xc49f0000}, {0xc49f2000}, {0xc49f4000}, {0xc49f6000}, 
+    {0xc49f8000}, {0xc49fa000}, {0xc49fc000}, {0xc49fe000}, 
+    {0xc4a00000}, {0xc4a02000}, {0xc4a04000}, {0xc4a06000}, 
+    {0xc4a08000}, {0xc4a0a000}, {0xc4a0c000}, {0xc4a0e000}, 
+    {0xc4a10000}, {0xc4a12000}, {0xc4a14000}, {0xc4a16000}, 
+    {0xc4a18000}, {0xc4a1a000}, {0xc4a1c000}, {0xc4a1e000}, 
+    {0xc4a20000}, {0xc4a22000}, {0xc4a24000}, {0xc4a26000}, 
+    {0xc4a28000}, {0xc4a2a000}, {0xc4a2c000}, {0xc4a2e000}, 
+    {0xc4a30000}, {0xc4a32000}, {0xc4a34000}, {0xc4a36000}, 
+    {0xc4a38000}, {0xc4a3a000}, {0xc4a3c000}, {0xc4a3e000}, 
+    {0xc4a40000}, {0xc4a42000}, {0xc4a44000}, {0xc4a46000}, 
+    {0xc4a48000}, {0xc4a4a000}, {0xc4a4c000}, {0xc4a4e000}, 
+    {0xc4a50000}, {0xc4a52000}, {0xc4a54000}, {0xc4a56000}, 
+    {0xc4a58000}, {0xc4a5a000}, {0xc4a5c000}, {0xc4a5e000}, 
+    {0xc4a60000}, {0xc4a62000}, {0xc4a64000}, {0xc4a66000}, 
+    {0xc4a68000}, {0xc4a6a000}, {0xc4a6c000}, {0xc4a6e000}, 
+    {0xc4a70000}, {0xc4a72000}, {0xc4a74000}, {0xc4a76000}, 
+    {0xc4a78000}, {0xc4a7a000}, {0xc4a7c000}, {0xc4a7e000}, 
+    {0xc4a80000}, {0xc4a82000}, {0xc4a84000}, {0xc4a86000}, 
+    {0xc4a88000}, {0xc4a8a000}, {0xc4a8c000}, {0xc4a8e000}, 
+    {0xc4a90000}, {0xc4a92000}, {0xc4a94000}, {0xc4a96000}, 
+    {0xc4a98000}, {0xc4a9a000}, {0xc4a9c000}, {0xc4a9e000}, 
+    {0xc4aa0000}, {0xc4aa2000}, {0xc4aa4000}, {0xc4aa6000}, 
+    {0xc4aa8000}, {0xc4aaa000}, {0xc4aac000}, {0xc4aae000}, 
+    {0xc4ab0000}, {0xc4ab2000}, {0xc4ab4000}, {0xc4ab6000}, 
+    {0xc4ab8000}, {0xc4aba000}, {0xc4abc000}, {0xc4abe000}, 
+    {0xc4ac0000}, {0xc4ac2000}, {0xc4ac4000}, {0xc4ac6000}, 
+    {0xc4ac8000}, {0xc4aca000}, {0xc4acc000}, {0xc4ace000}, 
+    {0xc4ad0000}, {0xc4ad2000}, {0xc4ad4000}, {0xc4ad6000}, 
+    {0xc4ad8000}, {0xc4ada000}, {0xc4adc000}, {0xc4ade000}, 
+    {0xc4ae0000}, {0xc4ae2000}, {0xc4ae4000}, {0xc4ae6000}, 
+    {0xc4ae8000}, {0xc4aea000}, {0xc4aec000}, {0xc4aee000}, 
+    {0xc4af0000}, {0xc4af2000}, {0xc4af4000}, {0xc4af6000}, 
+    {0xc4af8000}, {0xc4afa000}, {0xc4afc000}, {0xc4afe000}, 
+    {0xc4b00000}, {0xc4b02000}, {0xc4b04000}, {0xc4b06000}, 
+    {0xc4b08000}, {0xc4b0a000}, {0xc4b0c000}, {0xc4b0e000}, 
+    {0xc4b10000}, {0xc4b12000}, {0xc4b14000}, {0xc4b16000}, 
+    {0xc4b18000}, {0xc4b1a000}, {0xc4b1c000}, {0xc4b1e000}, 
+    {0xc4b20000}, {0xc4b22000}, {0xc4b24000}, {0xc4b26000}, 
+    {0xc4b28000}, {0xc4b2a000}, {0xc4b2c000}, {0xc4b2e000}, 
+    {0xc4b30000}, {0xc4b32000}, {0xc4b34000}, {0xc4b36000}, 
+    {0xc4b38000}, {0xc4b3a000}, {0xc4b3c000}, {0xc4b3e000}, 
+    {0xc4b40000}, {0xc4b42000}, {0xc4b44000}, {0xc4b46000}, 
+    {0xc4b48000}, {0xc4b4a000}, {0xc4b4c000}, {0xc4b4e000}, 
+    {0xc4b50000}, {0xc4b52000}, {0xc4b54000}, {0xc4b56000}, 
+    {0xc4b58000}, {0xc4b5a000}, {0xc4b5c000}, {0xc4b5e000}, 
+    {0xc4b60000}, {0xc4b62000}, {0xc4b64000}, {0xc4b66000}, 
+    {0xc4b68000}, {0xc4b6a000}, {0xc4b6c000}, {0xc4b6e000}, 
+    {0xc4b70000}, {0xc4b72000}, {0xc4b74000}, {0xc4b76000}, 
+    {0xc4b78000}, {0xc4b7a000}, {0xc4b7c000}, {0xc4b7e000}, 
+    {0xc4b80000}, {0xc4b82000}, {0xc4b84000}, {0xc4b86000}, 
+    {0xc4b88000}, {0xc4b8a000}, {0xc4b8c000}, {0xc4b8e000}, 
+    {0xc4b90000}, {0xc4b92000}, {0xc4b94000}, {0xc4b96000}, 
+    {0xc4b98000}, {0xc4b9a000}, {0xc4b9c000}, {0xc4b9e000}, 
+    {0xc4ba0000}, {0xc4ba2000}, {0xc4ba4000}, {0xc4ba6000}, 
+    {0xc4ba8000}, {0xc4baa000}, {0xc4bac000}, {0xc4bae000}, 
+    {0xc4bb0000}, {0xc4bb2000}, {0xc4bb4000}, {0xc4bb6000}, 
+    {0xc4bb8000}, {0xc4bba000}, {0xc4bbc000}, {0xc4bbe000}, 
+    {0xc4bc0000}, {0xc4bc2000}, {0xc4bc4000}, {0xc4bc6000}, 
+    {0xc4bc8000}, {0xc4bca000}, {0xc4bcc000}, {0xc4bce000}, 
+    {0xc4bd0000}, {0xc4bd2000}, {0xc4bd4000}, {0xc4bd6000}, 
+    {0xc4bd8000}, {0xc4bda000}, {0xc4bdc000}, {0xc4bde000}, 
+    {0xc4be0000}, {0xc4be2000}, {0xc4be4000}, {0xc4be6000}, 
+    {0xc4be8000}, {0xc4bea000}, {0xc4bec000}, {0xc4bee000}, 
+    {0xc4bf0000}, {0xc4bf2000}, {0xc4bf4000}, {0xc4bf6000}, 
+    {0xc4bf8000}, {0xc4bfa000}, {0xc4bfc000}, {0xc4bfe000}, 
+    {0xc4c00000}, {0xc4c02000}, {0xc4c04000}, {0xc4c06000}, 
+    {0xc4c08000}, {0xc4c0a000}, {0xc4c0c000}, {0xc4c0e000}, 
+    {0xc4c10000}, {0xc4c12000}, {0xc4c14000}, {0xc4c16000}, 
+    {0xc4c18000}, {0xc4c1a000}, {0xc4c1c000}, {0xc4c1e000}, 
+    {0xc4c20000}, {0xc4c22000}, {0xc4c24000}, {0xc4c26000}, 
+    {0xc4c28000}, {0xc4c2a000}, {0xc4c2c000}, {0xc4c2e000}, 
+    {0xc4c30000}, {0xc4c32000}, {0xc4c34000}, {0xc4c36000}, 
+    {0xc4c38000}, {0xc4c3a000}, {0xc4c3c000}, {0xc4c3e000}, 
+    {0xc4c40000}, {0xc4c42000}, {0xc4c44000}, {0xc4c46000}, 
+    {0xc4c48000}, {0xc4c4a000}, {0xc4c4c000}, {0xc4c4e000}, 
+    {0xc4c50000}, {0xc4c52000}, {0xc4c54000}, {0xc4c56000}, 
+    {0xc4c58000}, {0xc4c5a000}, {0xc4c5c000}, {0xc4c5e000}, 
+    {0xc4c60000}, {0xc4c62000}, {0xc4c64000}, {0xc4c66000}, 
+    {0xc4c68000}, {0xc4c6a000}, {0xc4c6c000}, {0xc4c6e000}, 
+    {0xc4c70000}, {0xc4c72000}, {0xc4c74000}, {0xc4c76000}, 
+    {0xc4c78000}, {0xc4c7a000}, {0xc4c7c000}, {0xc4c7e000}, 
+    {0xc4c80000}, {0xc4c82000}, {0xc4c84000}, {0xc4c86000}, 
+    {0xc4c88000}, {0xc4c8a000}, {0xc4c8c000}, {0xc4c8e000}, 
+    {0xc4c90000}, {0xc4c92000}, {0xc4c94000}, {0xc4c96000}, 
+    {0xc4c98000}, {0xc4c9a000}, {0xc4c9c000}, {0xc4c9e000}, 
+    {0xc4ca0000}, {0xc4ca2000}, {0xc4ca4000}, {0xc4ca6000}, 
+    {0xc4ca8000}, {0xc4caa000}, {0xc4cac000}, {0xc4cae000}, 
+    {0xc4cb0000}, {0xc4cb2000}, {0xc4cb4000}, {0xc4cb6000}, 
+    {0xc4cb8000}, {0xc4cba000}, {0xc4cbc000}, {0xc4cbe000}, 
+    {0xc4cc0000}, {0xc4cc2000}, {0xc4cc4000}, {0xc4cc6000}, 
+    {0xc4cc8000}, {0xc4cca000}, {0xc4ccc000}, {0xc4cce000}, 
+    {0xc4cd0000}, {0xc4cd2000}, {0xc4cd4000}, {0xc4cd6000}, 
+    {0xc4cd8000}, {0xc4cda000}, {0xc4cdc000}, {0xc4cde000}, 
+    {0xc4ce0000}, {0xc4ce2000}, {0xc4ce4000}, {0xc4ce6000}, 
+    {0xc4ce8000}, {0xc4cea000}, {0xc4cec000}, {0xc4cee000}, 
+    {0xc4cf0000}, {0xc4cf2000}, {0xc4cf4000}, {0xc4cf6000}, 
+    {0xc4cf8000}, {0xc4cfa000}, {0xc4cfc000}, {0xc4cfe000}, 
+    {0xc4d00000}, {0xc4d02000}, {0xc4d04000}, {0xc4d06000}, 
+    {0xc4d08000}, {0xc4d0a000}, {0xc4d0c000}, {0xc4d0e000}, 
+    {0xc4d10000}, {0xc4d12000}, {0xc4d14000}, {0xc4d16000}, 
+    {0xc4d18000}, {0xc4d1a000}, {0xc4d1c000}, {0xc4d1e000}, 
+    {0xc4d20000}, {0xc4d22000}, {0xc4d24000}, {0xc4d26000}, 
+    {0xc4d28000}, {0xc4d2a000}, {0xc4d2c000}, {0xc4d2e000}, 
+    {0xc4d30000}, {0xc4d32000}, {0xc4d34000}, {0xc4d36000}, 
+    {0xc4d38000}, {0xc4d3a000}, {0xc4d3c000}, {0xc4d3e000}, 
+    {0xc4d40000}, {0xc4d42000}, {0xc4d44000}, {0xc4d46000}, 
+    {0xc4d48000}, {0xc4d4a000}, {0xc4d4c000}, {0xc4d4e000}, 
+    {0xc4d50000}, {0xc4d52000}, {0xc4d54000}, {0xc4d56000}, 
+    {0xc4d58000}, {0xc4d5a000}, {0xc4d5c000}, {0xc4d5e000}, 
+    {0xc4d60000}, {0xc4d62000}, {0xc4d64000}, {0xc4d66000}, 
+    {0xc4d68000}, {0xc4d6a000}, {0xc4d6c000}, {0xc4d6e000}, 
+    {0xc4d70000}, {0xc4d72000}, {0xc4d74000}, {0xc4d76000}, 
+    {0xc4d78000}, {0xc4d7a000}, {0xc4d7c000}, {0xc4d7e000}, 
+    {0xc4d80000}, {0xc4d82000}, {0xc4d84000}, {0xc4d86000}, 
+    {0xc4d88000}, {0xc4d8a000}, {0xc4d8c000}, {0xc4d8e000}, 
+    {0xc4d90000}, {0xc4d92000}, {0xc4d94000}, {0xc4d96000}, 
+    {0xc4d98000}, {0xc4d9a000}, {0xc4d9c000}, {0xc4d9e000}, 
+    {0xc4da0000}, {0xc4da2000}, {0xc4da4000}, {0xc4da6000}, 
+    {0xc4da8000}, {0xc4daa000}, {0xc4dac000}, {0xc4dae000}, 
+    {0xc4db0000}, {0xc4db2000}, {0xc4db4000}, {0xc4db6000}, 
+    {0xc4db8000}, {0xc4dba000}, {0xc4dbc000}, {0xc4dbe000}, 
+    {0xc4dc0000}, {0xc4dc2000}, {0xc4dc4000}, {0xc4dc6000}, 
+    {0xc4dc8000}, {0xc4dca000}, {0xc4dcc000}, {0xc4dce000}, 
+    {0xc4dd0000}, {0xc4dd2000}, {0xc4dd4000}, {0xc4dd6000}, 
+    {0xc4dd8000}, {0xc4dda000}, {0xc4ddc000}, {0xc4dde000}, 
+    {0xc4de0000}, {0xc4de2000}, {0xc4de4000}, {0xc4de6000}, 
+    {0xc4de8000}, {0xc4dea000}, {0xc4dec000}, {0xc4dee000}, 
+    {0xc4df0000}, {0xc4df2000}, {0xc4df4000}, {0xc4df6000}, 
+    {0xc4df8000}, {0xc4dfa000}, {0xc4dfc000}, {0xc4dfe000}, 
+    {0xc4e00000}, {0xc4e02000}, {0xc4e04000}, {0xc4e06000}, 
+    {0xc4e08000}, {0xc4e0a000}, {0xc4e0c000}, {0xc4e0e000}, 
+    {0xc4e10000}, {0xc4e12000}, {0xc4e14000}, {0xc4e16000}, 
+    {0xc4e18000}, {0xc4e1a000}, {0xc4e1c000}, {0xc4e1e000}, 
+    {0xc4e20000}, {0xc4e22000}, {0xc4e24000}, {0xc4e26000}, 
+    {0xc4e28000}, {0xc4e2a000}, {0xc4e2c000}, {0xc4e2e000}, 
+    {0xc4e30000}, {0xc4e32000}, {0xc4e34000}, {0xc4e36000}, 
+    {0xc4e38000}, {0xc4e3a000}, {0xc4e3c000}, {0xc4e3e000}, 
+    {0xc4e40000}, {0xc4e42000}, {0xc4e44000}, {0xc4e46000}, 
+    {0xc4e48000}, {0xc4e4a000}, {0xc4e4c000}, {0xc4e4e000}, 
+    {0xc4e50000}, {0xc4e52000}, {0xc4e54000}, {0xc4e56000}, 
+    {0xc4e58000}, {0xc4e5a000}, {0xc4e5c000}, {0xc4e5e000}, 
+    {0xc4e60000}, {0xc4e62000}, {0xc4e64000}, {0xc4e66000}, 
+    {0xc4e68000}, {0xc4e6a000}, {0xc4e6c000}, {0xc4e6e000}, 
+    {0xc4e70000}, {0xc4e72000}, {0xc4e74000}, {0xc4e76000}, 
+    {0xc4e78000}, {0xc4e7a000}, {0xc4e7c000}, {0xc4e7e000}, 
+    {0xc4e80000}, {0xc4e82000}, {0xc4e84000}, {0xc4e86000}, 
+    {0xc4e88000}, {0xc4e8a000}, {0xc4e8c000}, {0xc4e8e000}, 
+    {0xc4e90000}, {0xc4e92000}, {0xc4e94000}, {0xc4e96000}, 
+    {0xc4e98000}, {0xc4e9a000}, {0xc4e9c000}, {0xc4e9e000}, 
+    {0xc4ea0000}, {0xc4ea2000}, {0xc4ea4000}, {0xc4ea6000}, 
+    {0xc4ea8000}, {0xc4eaa000}, {0xc4eac000}, {0xc4eae000}, 
+    {0xc4eb0000}, {0xc4eb2000}, {0xc4eb4000}, {0xc4eb6000}, 
+    {0xc4eb8000}, {0xc4eba000}, {0xc4ebc000}, {0xc4ebe000}, 
+    {0xc4ec0000}, {0xc4ec2000}, {0xc4ec4000}, {0xc4ec6000}, 
+    {0xc4ec8000}, {0xc4eca000}, {0xc4ecc000}, {0xc4ece000}, 
+    {0xc4ed0000}, {0xc4ed2000}, {0xc4ed4000}, {0xc4ed6000}, 
+    {0xc4ed8000}, {0xc4eda000}, {0xc4edc000}, {0xc4ede000}, 
+    {0xc4ee0000}, {0xc4ee2000}, {0xc4ee4000}, {0xc4ee6000}, 
+    {0xc4ee8000}, {0xc4eea000}, {0xc4eec000}, {0xc4eee000}, 
+    {0xc4ef0000}, {0xc4ef2000}, {0xc4ef4000}, {0xc4ef6000}, 
+    {0xc4ef8000}, {0xc4efa000}, {0xc4efc000}, {0xc4efe000}, 
+    {0xc4f00000}, {0xc4f02000}, {0xc4f04000}, {0xc4f06000}, 
+    {0xc4f08000}, {0xc4f0a000}, {0xc4f0c000}, {0xc4f0e000}, 
+    {0xc4f10000}, {0xc4f12000}, {0xc4f14000}, {0xc4f16000}, 
+    {0xc4f18000}, {0xc4f1a000}, {0xc4f1c000}, {0xc4f1e000}, 
+    {0xc4f20000}, {0xc4f22000}, {0xc4f24000}, {0xc4f26000}, 
+    {0xc4f28000}, {0xc4f2a000}, {0xc4f2c000}, {0xc4f2e000}, 
+    {0xc4f30000}, {0xc4f32000}, {0xc4f34000}, {0xc4f36000}, 
+    {0xc4f38000}, {0xc4f3a000}, {0xc4f3c000}, {0xc4f3e000}, 
+    {0xc4f40000}, {0xc4f42000}, {0xc4f44000}, {0xc4f46000}, 
+    {0xc4f48000}, {0xc4f4a000}, {0xc4f4c000}, {0xc4f4e000}, 
+    {0xc4f50000}, {0xc4f52000}, {0xc4f54000}, {0xc4f56000}, 
+    {0xc4f58000}, {0xc4f5a000}, {0xc4f5c000}, {0xc4f5e000}, 
+    {0xc4f60000}, {0xc4f62000}, {0xc4f64000}, {0xc4f66000}, 
+    {0xc4f68000}, {0xc4f6a000}, {0xc4f6c000}, {0xc4f6e000}, 
+    {0xc4f70000}, {0xc4f72000}, {0xc4f74000}, {0xc4f76000}, 
+    {0xc4f78000}, {0xc4f7a000}, {0xc4f7c000}, {0xc4f7e000}, 
+    {0xc4f80000}, {0xc4f82000}, {0xc4f84000}, {0xc4f86000}, 
+    {0xc4f88000}, {0xc4f8a000}, {0xc4f8c000}, {0xc4f8e000}, 
+    {0xc4f90000}, {0xc4f92000}, {0xc4f94000}, {0xc4f96000}, 
+    {0xc4f98000}, {0xc4f9a000}, {0xc4f9c000}, {0xc4f9e000}, 
+    {0xc4fa0000}, {0xc4fa2000}, {0xc4fa4000}, {0xc4fa6000}, 
+    {0xc4fa8000}, {0xc4faa000}, {0xc4fac000}, {0xc4fae000}, 
+    {0xc4fb0000}, {0xc4fb2000}, {0xc4fb4000}, {0xc4fb6000}, 
+    {0xc4fb8000}, {0xc4fba000}, {0xc4fbc000}, {0xc4fbe000}, 
+    {0xc4fc0000}, {0xc4fc2000}, {0xc4fc4000}, {0xc4fc6000}, 
+    {0xc4fc8000}, {0xc4fca000}, {0xc4fcc000}, {0xc4fce000}, 
+    {0xc4fd0000}, {0xc4fd2000}, {0xc4fd4000}, {0xc4fd6000}, 
+    {0xc4fd8000}, {0xc4fda000}, {0xc4fdc000}, {0xc4fde000}, 
+    {0xc4fe0000}, {0xc4fe2000}, {0xc4fe4000}, {0xc4fe6000}, 
+    {0xc4fe8000}, {0xc4fea000}, {0xc4fec000}, {0xc4fee000}, 
+    {0xc4ff0000}, {0xc4ff2000}, {0xc4ff4000}, {0xc4ff6000}, 
+    {0xc4ff8000}, {0xc4ffa000}, {0xc4ffc000}, {0xc4ffe000}, 
+    {0xc5000000}, {0xc5002000}, {0xc5004000}, {0xc5006000}, 
+    {0xc5008000}, {0xc500a000}, {0xc500c000}, {0xc500e000}, 
+    {0xc5010000}, {0xc5012000}, {0xc5014000}, {0xc5016000}, 
+    {0xc5018000}, {0xc501a000}, {0xc501c000}, {0xc501e000}, 
+    {0xc5020000}, {0xc5022000}, {0xc5024000}, {0xc5026000}, 
+    {0xc5028000}, {0xc502a000}, {0xc502c000}, {0xc502e000}, 
+    {0xc5030000}, {0xc5032000}, {0xc5034000}, {0xc5036000}, 
+    {0xc5038000}, {0xc503a000}, {0xc503c000}, {0xc503e000}, 
+    {0xc5040000}, {0xc5042000}, {0xc5044000}, {0xc5046000}, 
+    {0xc5048000}, {0xc504a000}, {0xc504c000}, {0xc504e000}, 
+    {0xc5050000}, {0xc5052000}, {0xc5054000}, {0xc5056000}, 
+    {0xc5058000}, {0xc505a000}, {0xc505c000}, {0xc505e000}, 
+    {0xc5060000}, {0xc5062000}, {0xc5064000}, {0xc5066000}, 
+    {0xc5068000}, {0xc506a000}, {0xc506c000}, {0xc506e000}, 
+    {0xc5070000}, {0xc5072000}, {0xc5074000}, {0xc5076000}, 
+    {0xc5078000}, {0xc507a000}, {0xc507c000}, {0xc507e000}, 
+    {0xc5080000}, {0xc5082000}, {0xc5084000}, {0xc5086000}, 
+    {0xc5088000}, {0xc508a000}, {0xc508c000}, {0xc508e000}, 
+    {0xc5090000}, {0xc5092000}, {0xc5094000}, {0xc5096000}, 
+    {0xc5098000}, {0xc509a000}, {0xc509c000}, {0xc509e000}, 
+    {0xc50a0000}, {0xc50a2000}, {0xc50a4000}, {0xc50a6000}, 
+    {0xc50a8000}, {0xc50aa000}, {0xc50ac000}, {0xc50ae000}, 
+    {0xc50b0000}, {0xc50b2000}, {0xc50b4000}, {0xc50b6000}, 
+    {0xc50b8000}, {0xc50ba000}, {0xc50bc000}, {0xc50be000}, 
+    {0xc50c0000}, {0xc50c2000}, {0xc50c4000}, {0xc50c6000}, 
+    {0xc50c8000}, {0xc50ca000}, {0xc50cc000}, {0xc50ce000}, 
+    {0xc50d0000}, {0xc50d2000}, {0xc50d4000}, {0xc50d6000}, 
+    {0xc50d8000}, {0xc50da000}, {0xc50dc000}, {0xc50de000}, 
+    {0xc50e0000}, {0xc50e2000}, {0xc50e4000}, {0xc50e6000}, 
+    {0xc50e8000}, {0xc50ea000}, {0xc50ec000}, {0xc50ee000}, 
+    {0xc50f0000}, {0xc50f2000}, {0xc50f4000}, {0xc50f6000}, 
+    {0xc50f8000}, {0xc50fa000}, {0xc50fc000}, {0xc50fe000}, 
+    {0xc5100000}, {0xc5102000}, {0xc5104000}, {0xc5106000}, 
+    {0xc5108000}, {0xc510a000}, {0xc510c000}, {0xc510e000}, 
+    {0xc5110000}, {0xc5112000}, {0xc5114000}, {0xc5116000}, 
+    {0xc5118000}, {0xc511a000}, {0xc511c000}, {0xc511e000}, 
+    {0xc5120000}, {0xc5122000}, {0xc5124000}, {0xc5126000}, 
+    {0xc5128000}, {0xc512a000}, {0xc512c000}, {0xc512e000}, 
+    {0xc5130000}, {0xc5132000}, {0xc5134000}, {0xc5136000}, 
+    {0xc5138000}, {0xc513a000}, {0xc513c000}, {0xc513e000}, 
+    {0xc5140000}, {0xc5142000}, {0xc5144000}, {0xc5146000}, 
+    {0xc5148000}, {0xc514a000}, {0xc514c000}, {0xc514e000}, 
+    {0xc5150000}, {0xc5152000}, {0xc5154000}, {0xc5156000}, 
+    {0xc5158000}, {0xc515a000}, {0xc515c000}, {0xc515e000}, 
+    {0xc5160000}, {0xc5162000}, {0xc5164000}, {0xc5166000}, 
+    {0xc5168000}, {0xc516a000}, {0xc516c000}, {0xc516e000}, 
+    {0xc5170000}, {0xc5172000}, {0xc5174000}, {0xc5176000}, 
+    {0xc5178000}, {0xc517a000}, {0xc517c000}, {0xc517e000}, 
+    {0xc5180000}, {0xc5182000}, {0xc5184000}, {0xc5186000}, 
+    {0xc5188000}, {0xc518a000}, {0xc518c000}, {0xc518e000}, 
+    {0xc5190000}, {0xc5192000}, {0xc5194000}, {0xc5196000}, 
+    {0xc5198000}, {0xc519a000}, {0xc519c000}, {0xc519e000}, 
+    {0xc51a0000}, {0xc51a2000}, {0xc51a4000}, {0xc51a6000}, 
+    {0xc51a8000}, {0xc51aa000}, {0xc51ac000}, {0xc51ae000}, 
+    {0xc51b0000}, {0xc51b2000}, {0xc51b4000}, {0xc51b6000}, 
+    {0xc51b8000}, {0xc51ba000}, {0xc51bc000}, {0xc51be000}, 
+    {0xc51c0000}, {0xc51c2000}, {0xc51c4000}, {0xc51c6000}, 
+    {0xc51c8000}, {0xc51ca000}, {0xc51cc000}, {0xc51ce000}, 
+    {0xc51d0000}, {0xc51d2000}, {0xc51d4000}, {0xc51d6000}, 
+    {0xc51d8000}, {0xc51da000}, {0xc51dc000}, {0xc51de000}, 
+    {0xc51e0000}, {0xc51e2000}, {0xc51e4000}, {0xc51e6000}, 
+    {0xc51e8000}, {0xc51ea000}, {0xc51ec000}, {0xc51ee000}, 
+    {0xc51f0000}, {0xc51f2000}, {0xc51f4000}, {0xc51f6000}, 
+    {0xc51f8000}, {0xc51fa000}, {0xc51fc000}, {0xc51fe000}, 
+    {0xc5200000}, {0xc5202000}, {0xc5204000}, {0xc5206000}, 
+    {0xc5208000}, {0xc520a000}, {0xc520c000}, {0xc520e000}, 
+    {0xc5210000}, {0xc5212000}, {0xc5214000}, {0xc5216000}, 
+    {0xc5218000}, {0xc521a000}, {0xc521c000}, {0xc521e000}, 
+    {0xc5220000}, {0xc5222000}, {0xc5224000}, {0xc5226000}, 
+    {0xc5228000}, {0xc522a000}, {0xc522c000}, {0xc522e000}, 
+    {0xc5230000}, {0xc5232000}, {0xc5234000}, {0xc5236000}, 
+    {0xc5238000}, {0xc523a000}, {0xc523c000}, {0xc523e000}, 
+    {0xc5240000}, {0xc5242000}, {0xc5244000}, {0xc5246000}, 
+    {0xc5248000}, {0xc524a000}, {0xc524c000}, {0xc524e000}, 
+    {0xc5250000}, {0xc5252000}, {0xc5254000}, {0xc5256000}, 
+    {0xc5258000}, {0xc525a000}, {0xc525c000}, {0xc525e000}, 
+    {0xc5260000}, {0xc5262000}, {0xc5264000}, {0xc5266000}, 
+    {0xc5268000}, {0xc526a000}, {0xc526c000}, {0xc526e000}, 
+    {0xc5270000}, {0xc5272000}, {0xc5274000}, {0xc5276000}, 
+    {0xc5278000}, {0xc527a000}, {0xc527c000}, {0xc527e000}, 
+    {0xc5280000}, {0xc5282000}, {0xc5284000}, {0xc5286000}, 
+    {0xc5288000}, {0xc528a000}, {0xc528c000}, {0xc528e000}, 
+    {0xc5290000}, {0xc5292000}, {0xc5294000}, {0xc5296000}, 
+    {0xc5298000}, {0xc529a000}, {0xc529c000}, {0xc529e000}, 
+    {0xc52a0000}, {0xc52a2000}, {0xc52a4000}, {0xc52a6000}, 
+    {0xc52a8000}, {0xc52aa000}, {0xc52ac000}, {0xc52ae000}, 
+    {0xc52b0000}, {0xc52b2000}, {0xc52b4000}, {0xc52b6000}, 
+    {0xc52b8000}, {0xc52ba000}, {0xc52bc000}, {0xc52be000}, 
+    {0xc52c0000}, {0xc52c2000}, {0xc52c4000}, {0xc52c6000}, 
+    {0xc52c8000}, {0xc52ca000}, {0xc52cc000}, {0xc52ce000}, 
+    {0xc52d0000}, {0xc52d2000}, {0xc52d4000}, {0xc52d6000}, 
+    {0xc52d8000}, {0xc52da000}, {0xc52dc000}, {0xc52de000}, 
+    {0xc52e0000}, {0xc52e2000}, {0xc52e4000}, {0xc52e6000}, 
+    {0xc52e8000}, {0xc52ea000}, {0xc52ec000}, {0xc52ee000}, 
+    {0xc52f0000}, {0xc52f2000}, {0xc52f4000}, {0xc52f6000}, 
+    {0xc52f8000}, {0xc52fa000}, {0xc52fc000}, {0xc52fe000}, 
+    {0xc5300000}, {0xc5302000}, {0xc5304000}, {0xc5306000}, 
+    {0xc5308000}, {0xc530a000}, {0xc530c000}, {0xc530e000}, 
+    {0xc5310000}, {0xc5312000}, {0xc5314000}, {0xc5316000}, 
+    {0xc5318000}, {0xc531a000}, {0xc531c000}, {0xc531e000}, 
+    {0xc5320000}, {0xc5322000}, {0xc5324000}, {0xc5326000}, 
+    {0xc5328000}, {0xc532a000}, {0xc532c000}, {0xc532e000}, 
+    {0xc5330000}, {0xc5332000}, {0xc5334000}, {0xc5336000}, 
+    {0xc5338000}, {0xc533a000}, {0xc533c000}, {0xc533e000}, 
+    {0xc5340000}, {0xc5342000}, {0xc5344000}, {0xc5346000}, 
+    {0xc5348000}, {0xc534a000}, {0xc534c000}, {0xc534e000}, 
+    {0xc5350000}, {0xc5352000}, {0xc5354000}, {0xc5356000}, 
+    {0xc5358000}, {0xc535a000}, {0xc535c000}, {0xc535e000}, 
+    {0xc5360000}, {0xc5362000}, {0xc5364000}, {0xc5366000}, 
+    {0xc5368000}, {0xc536a000}, {0xc536c000}, {0xc536e000}, 
+    {0xc5370000}, {0xc5372000}, {0xc5374000}, {0xc5376000}, 
+    {0xc5378000}, {0xc537a000}, {0xc537c000}, {0xc537e000}, 
+    {0xc5380000}, {0xc5382000}, {0xc5384000}, {0xc5386000}, 
+    {0xc5388000}, {0xc538a000}, {0xc538c000}, {0xc538e000}, 
+    {0xc5390000}, {0xc5392000}, {0xc5394000}, {0xc5396000}, 
+    {0xc5398000}, {0xc539a000}, {0xc539c000}, {0xc539e000}, 
+    {0xc53a0000}, {0xc53a2000}, {0xc53a4000}, {0xc53a6000}, 
+    {0xc53a8000}, {0xc53aa000}, {0xc53ac000}, {0xc53ae000}, 
+    {0xc53b0000}, {0xc53b2000}, {0xc53b4000}, {0xc53b6000}, 
+    {0xc53b8000}, {0xc53ba000}, {0xc53bc000}, {0xc53be000}, 
+    {0xc53c0000}, {0xc53c2000}, {0xc53c4000}, {0xc53c6000}, 
+    {0xc53c8000}, {0xc53ca000}, {0xc53cc000}, {0xc53ce000}, 
+    {0xc53d0000}, {0xc53d2000}, {0xc53d4000}, {0xc53d6000}, 
+    {0xc53d8000}, {0xc53da000}, {0xc53dc000}, {0xc53de000}, 
+    {0xc53e0000}, {0xc53e2000}, {0xc53e4000}, {0xc53e6000}, 
+    {0xc53e8000}, {0xc53ea000}, {0xc53ec000}, {0xc53ee000}, 
+    {0xc53f0000}, {0xc53f2000}, {0xc53f4000}, {0xc53f6000}, 
+    {0xc53f8000}, {0xc53fa000}, {0xc53fc000}, {0xc53fe000}, 
+    {0xc5400000}, {0xc5402000}, {0xc5404000}, {0xc5406000}, 
+    {0xc5408000}, {0xc540a000}, {0xc540c000}, {0xc540e000}, 
+    {0xc5410000}, {0xc5412000}, {0xc5414000}, {0xc5416000}, 
+    {0xc5418000}, {0xc541a000}, {0xc541c000}, {0xc541e000}, 
+    {0xc5420000}, {0xc5422000}, {0xc5424000}, {0xc5426000}, 
+    {0xc5428000}, {0xc542a000}, {0xc542c000}, {0xc542e000}, 
+    {0xc5430000}, {0xc5432000}, {0xc5434000}, {0xc5436000}, 
+    {0xc5438000}, {0xc543a000}, {0xc543c000}, {0xc543e000}, 
+    {0xc5440000}, {0xc5442000}, {0xc5444000}, {0xc5446000}, 
+    {0xc5448000}, {0xc544a000}, {0xc544c000}, {0xc544e000}, 
+    {0xc5450000}, {0xc5452000}, {0xc5454000}, {0xc5456000}, 
+    {0xc5458000}, {0xc545a000}, {0xc545c000}, {0xc545e000}, 
+    {0xc5460000}, {0xc5462000}, {0xc5464000}, {0xc5466000}, 
+    {0xc5468000}, {0xc546a000}, {0xc546c000}, {0xc546e000}, 
+    {0xc5470000}, {0xc5472000}, {0xc5474000}, {0xc5476000}, 
+    {0xc5478000}, {0xc547a000}, {0xc547c000}, {0xc547e000}, 
+    {0xc5480000}, {0xc5482000}, {0xc5484000}, {0xc5486000}, 
+    {0xc5488000}, {0xc548a000}, {0xc548c000}, {0xc548e000}, 
+    {0xc5490000}, {0xc5492000}, {0xc5494000}, {0xc5496000}, 
+    {0xc5498000}, {0xc549a000}, {0xc549c000}, {0xc549e000}, 
+    {0xc54a0000}, {0xc54a2000}, {0xc54a4000}, {0xc54a6000}, 
+    {0xc54a8000}, {0xc54aa000}, {0xc54ac000}, {0xc54ae000}, 
+    {0xc54b0000}, {0xc54b2000}, {0xc54b4000}, {0xc54b6000}, 
+    {0xc54b8000}, {0xc54ba000}, {0xc54bc000}, {0xc54be000}, 
+    {0xc54c0000}, {0xc54c2000}, {0xc54c4000}, {0xc54c6000}, 
+    {0xc54c8000}, {0xc54ca000}, {0xc54cc000}, {0xc54ce000}, 
+    {0xc54d0000}, {0xc54d2000}, {0xc54d4000}, {0xc54d6000}, 
+    {0xc54d8000}, {0xc54da000}, {0xc54dc000}, {0xc54de000}, 
+    {0xc54e0000}, {0xc54e2000}, {0xc54e4000}, {0xc54e6000}, 
+    {0xc54e8000}, {0xc54ea000}, {0xc54ec000}, {0xc54ee000}, 
+    {0xc54f0000}, {0xc54f2000}, {0xc54f4000}, {0xc54f6000}, 
+    {0xc54f8000}, {0xc54fa000}, {0xc54fc000}, {0xc54fe000}, 
+    {0xc5500000}, {0xc5502000}, {0xc5504000}, {0xc5506000}, 
+    {0xc5508000}, {0xc550a000}, {0xc550c000}, {0xc550e000}, 
+    {0xc5510000}, {0xc5512000}, {0xc5514000}, {0xc5516000}, 
+    {0xc5518000}, {0xc551a000}, {0xc551c000}, {0xc551e000}, 
+    {0xc5520000}, {0xc5522000}, {0xc5524000}, {0xc5526000}, 
+    {0xc5528000}, {0xc552a000}, {0xc552c000}, {0xc552e000}, 
+    {0xc5530000}, {0xc5532000}, {0xc5534000}, {0xc5536000}, 
+    {0xc5538000}, {0xc553a000}, {0xc553c000}, {0xc553e000}, 
+    {0xc5540000}, {0xc5542000}, {0xc5544000}, {0xc5546000}, 
+    {0xc5548000}, {0xc554a000}, {0xc554c000}, {0xc554e000}, 
+    {0xc5550000}, {0xc5552000}, {0xc5554000}, {0xc5556000}, 
+    {0xc5558000}, {0xc555a000}, {0xc555c000}, {0xc555e000}, 
+    {0xc5560000}, {0xc5562000}, {0xc5564000}, {0xc5566000}, 
+    {0xc5568000}, {0xc556a000}, {0xc556c000}, {0xc556e000}, 
+    {0xc5570000}, {0xc5572000}, {0xc5574000}, {0xc5576000}, 
+    {0xc5578000}, {0xc557a000}, {0xc557c000}, {0xc557e000}, 
+    {0xc5580000}, {0xc5582000}, {0xc5584000}, {0xc5586000}, 
+    {0xc5588000}, {0xc558a000}, {0xc558c000}, {0xc558e000}, 
+    {0xc5590000}, {0xc5592000}, {0xc5594000}, {0xc5596000}, 
+    {0xc5598000}, {0xc559a000}, {0xc559c000}, {0xc559e000}, 
+    {0xc55a0000}, {0xc55a2000}, {0xc55a4000}, {0xc55a6000}, 
+    {0xc55a8000}, {0xc55aa000}, {0xc55ac000}, {0xc55ae000}, 
+    {0xc55b0000}, {0xc55b2000}, {0xc55b4000}, {0xc55b6000}, 
+    {0xc55b8000}, {0xc55ba000}, {0xc55bc000}, {0xc55be000}, 
+    {0xc55c0000}, {0xc55c2000}, {0xc55c4000}, {0xc55c6000}, 
+    {0xc55c8000}, {0xc55ca000}, {0xc55cc000}, {0xc55ce000}, 
+    {0xc55d0000}, {0xc55d2000}, {0xc55d4000}, {0xc55d6000}, 
+    {0xc55d8000}, {0xc55da000}, {0xc55dc000}, {0xc55de000}, 
+    {0xc55e0000}, {0xc55e2000}, {0xc55e4000}, {0xc55e6000}, 
+    {0xc55e8000}, {0xc55ea000}, {0xc55ec000}, {0xc55ee000}, 
+    {0xc55f0000}, {0xc55f2000}, {0xc55f4000}, {0xc55f6000}, 
+    {0xc55f8000}, {0xc55fa000}, {0xc55fc000}, {0xc55fe000}, 
+    {0xc5600000}, {0xc5602000}, {0xc5604000}, {0xc5606000}, 
+    {0xc5608000}, {0xc560a000}, {0xc560c000}, {0xc560e000}, 
+    {0xc5610000}, {0xc5612000}, {0xc5614000}, {0xc5616000}, 
+    {0xc5618000}, {0xc561a000}, {0xc561c000}, {0xc561e000}, 
+    {0xc5620000}, {0xc5622000}, {0xc5624000}, {0xc5626000}, 
+    {0xc5628000}, {0xc562a000}, {0xc562c000}, {0xc562e000}, 
+    {0xc5630000}, {0xc5632000}, {0xc5634000}, {0xc5636000}, 
+    {0xc5638000}, {0xc563a000}, {0xc563c000}, {0xc563e000}, 
+    {0xc5640000}, {0xc5642000}, {0xc5644000}, {0xc5646000}, 
+    {0xc5648000}, {0xc564a000}, {0xc564c000}, {0xc564e000}, 
+    {0xc5650000}, {0xc5652000}, {0xc5654000}, {0xc5656000}, 
+    {0xc5658000}, {0xc565a000}, {0xc565c000}, {0xc565e000}, 
+    {0xc5660000}, {0xc5662000}, {0xc5664000}, {0xc5666000}, 
+    {0xc5668000}, {0xc566a000}, {0xc566c000}, {0xc566e000}, 
+    {0xc5670000}, {0xc5672000}, {0xc5674000}, {0xc5676000}, 
+    {0xc5678000}, {0xc567a000}, {0xc567c000}, {0xc567e000}, 
+    {0xc5680000}, {0xc5682000}, {0xc5684000}, {0xc5686000}, 
+    {0xc5688000}, {0xc568a000}, {0xc568c000}, {0xc568e000}, 
+    {0xc5690000}, {0xc5692000}, {0xc5694000}, {0xc5696000}, 
+    {0xc5698000}, {0xc569a000}, {0xc569c000}, {0xc569e000}, 
+    {0xc56a0000}, {0xc56a2000}, {0xc56a4000}, {0xc56a6000}, 
+    {0xc56a8000}, {0xc56aa000}, {0xc56ac000}, {0xc56ae000}, 
+    {0xc56b0000}, {0xc56b2000}, {0xc56b4000}, {0xc56b6000}, 
+    {0xc56b8000}, {0xc56ba000}, {0xc56bc000}, {0xc56be000}, 
+    {0xc56c0000}, {0xc56c2000}, {0xc56c4000}, {0xc56c6000}, 
+    {0xc56c8000}, {0xc56ca000}, {0xc56cc000}, {0xc56ce000}, 
+    {0xc56d0000}, {0xc56d2000}, {0xc56d4000}, {0xc56d6000}, 
+    {0xc56d8000}, {0xc56da000}, {0xc56dc000}, {0xc56de000}, 
+    {0xc56e0000}, {0xc56e2000}, {0xc56e4000}, {0xc56e6000}, 
+    {0xc56e8000}, {0xc56ea000}, {0xc56ec000}, {0xc56ee000}, 
+    {0xc56f0000}, {0xc56f2000}, {0xc56f4000}, {0xc56f6000}, 
+    {0xc56f8000}, {0xc56fa000}, {0xc56fc000}, {0xc56fe000}, 
+    {0xc5700000}, {0xc5702000}, {0xc5704000}, {0xc5706000}, 
+    {0xc5708000}, {0xc570a000}, {0xc570c000}, {0xc570e000}, 
+    {0xc5710000}, {0xc5712000}, {0xc5714000}, {0xc5716000}, 
+    {0xc5718000}, {0xc571a000}, {0xc571c000}, {0xc571e000}, 
+    {0xc5720000}, {0xc5722000}, {0xc5724000}, {0xc5726000}, 
+    {0xc5728000}, {0xc572a000}, {0xc572c000}, {0xc572e000}, 
+    {0xc5730000}, {0xc5732000}, {0xc5734000}, {0xc5736000}, 
+    {0xc5738000}, {0xc573a000}, {0xc573c000}, {0xc573e000}, 
+    {0xc5740000}, {0xc5742000}, {0xc5744000}, {0xc5746000}, 
+    {0xc5748000}, {0xc574a000}, {0xc574c000}, {0xc574e000}, 
+    {0xc5750000}, {0xc5752000}, {0xc5754000}, {0xc5756000}, 
+    {0xc5758000}, {0xc575a000}, {0xc575c000}, {0xc575e000}, 
+    {0xc5760000}, {0xc5762000}, {0xc5764000}, {0xc5766000}, 
+    {0xc5768000}, {0xc576a000}, {0xc576c000}, {0xc576e000}, 
+    {0xc5770000}, {0xc5772000}, {0xc5774000}, {0xc5776000}, 
+    {0xc5778000}, {0xc577a000}, {0xc577c000}, {0xc577e000}, 
+    {0xc5780000}, {0xc5782000}, {0xc5784000}, {0xc5786000}, 
+    {0xc5788000}, {0xc578a000}, {0xc578c000}, {0xc578e000}, 
+    {0xc5790000}, {0xc5792000}, {0xc5794000}, {0xc5796000}, 
+    {0xc5798000}, {0xc579a000}, {0xc579c000}, {0xc579e000}, 
+    {0xc57a0000}, {0xc57a2000}, {0xc57a4000}, {0xc57a6000}, 
+    {0xc57a8000}, {0xc57aa000}, {0xc57ac000}, {0xc57ae000}, 
+    {0xc57b0000}, {0xc57b2000}, {0xc57b4000}, {0xc57b6000}, 
+    {0xc57b8000}, {0xc57ba000}, {0xc57bc000}, {0xc57be000}, 
+    {0xc57c0000}, {0xc57c2000}, {0xc57c4000}, {0xc57c6000}, 
+    {0xc57c8000}, {0xc57ca000}, {0xc57cc000}, {0xc57ce000}, 
+    {0xc57d0000}, {0xc57d2000}, {0xc57d4000}, {0xc57d6000}, 
+    {0xc57d8000}, {0xc57da000}, {0xc57dc000}, {0xc57de000}, 
+    {0xc57e0000}, {0xc57e2000}, {0xc57e4000}, {0xc57e6000}, 
+    {0xc57e8000}, {0xc57ea000}, {0xc57ec000}, {0xc57ee000}, 
+    {0xc57f0000}, {0xc57f2000}, {0xc57f4000}, {0xc57f6000}, 
+    {0xc57f8000}, {0xc57fa000}, {0xc57fc000}, {0xc57fe000}, 
+    {0xc5800000}, {0xc5802000}, {0xc5804000}, {0xc5806000}, 
+    {0xc5808000}, {0xc580a000}, {0xc580c000}, {0xc580e000}, 
+    {0xc5810000}, {0xc5812000}, {0xc5814000}, {0xc5816000}, 
+    {0xc5818000}, {0xc581a000}, {0xc581c000}, {0xc581e000}, 
+    {0xc5820000}, {0xc5822000}, {0xc5824000}, {0xc5826000}, 
+    {0xc5828000}, {0xc582a000}, {0xc582c000}, {0xc582e000}, 
+    {0xc5830000}, {0xc5832000}, {0xc5834000}, {0xc5836000}, 
+    {0xc5838000}, {0xc583a000}, {0xc583c000}, {0xc583e000}, 
+    {0xc5840000}, {0xc5842000}, {0xc5844000}, {0xc5846000}, 
+    {0xc5848000}, {0xc584a000}, {0xc584c000}, {0xc584e000}, 
+    {0xc5850000}, {0xc5852000}, {0xc5854000}, {0xc5856000}, 
+    {0xc5858000}, {0xc585a000}, {0xc585c000}, {0xc585e000}, 
+    {0xc5860000}, {0xc5862000}, {0xc5864000}, {0xc5866000}, 
+    {0xc5868000}, {0xc586a000}, {0xc586c000}, {0xc586e000}, 
+    {0xc5870000}, {0xc5872000}, {0xc5874000}, {0xc5876000}, 
+    {0xc5878000}, {0xc587a000}, {0xc587c000}, {0xc587e000}, 
+    {0xc5880000}, {0xc5882000}, {0xc5884000}, {0xc5886000}, 
+    {0xc5888000}, {0xc588a000}, {0xc588c000}, {0xc588e000}, 
+    {0xc5890000}, {0xc5892000}, {0xc5894000}, {0xc5896000}, 
+    {0xc5898000}, {0xc589a000}, {0xc589c000}, {0xc589e000}, 
+    {0xc58a0000}, {0xc58a2000}, {0xc58a4000}, {0xc58a6000}, 
+    {0xc58a8000}, {0xc58aa000}, {0xc58ac000}, {0xc58ae000}, 
+    {0xc58b0000}, {0xc58b2000}, {0xc58b4000}, {0xc58b6000}, 
+    {0xc58b8000}, {0xc58ba000}, {0xc58bc000}, {0xc58be000}, 
+    {0xc58c0000}, {0xc58c2000}, {0xc58c4000}, {0xc58c6000}, 
+    {0xc58c8000}, {0xc58ca000}, {0xc58cc000}, {0xc58ce000}, 
+    {0xc58d0000}, {0xc58d2000}, {0xc58d4000}, {0xc58d6000}, 
+    {0xc58d8000}, {0xc58da000}, {0xc58dc000}, {0xc58de000}, 
+    {0xc58e0000}, {0xc58e2000}, {0xc58e4000}, {0xc58e6000}, 
+    {0xc58e8000}, {0xc58ea000}, {0xc58ec000}, {0xc58ee000}, 
+    {0xc58f0000}, {0xc58f2000}, {0xc58f4000}, {0xc58f6000}, 
+    {0xc58f8000}, {0xc58fa000}, {0xc58fc000}, {0xc58fe000}, 
+    {0xc5900000}, {0xc5902000}, {0xc5904000}, {0xc5906000}, 
+    {0xc5908000}, {0xc590a000}, {0xc590c000}, {0xc590e000}, 
+    {0xc5910000}, {0xc5912000}, {0xc5914000}, {0xc5916000}, 
+    {0xc5918000}, {0xc591a000}, {0xc591c000}, {0xc591e000}, 
+    {0xc5920000}, {0xc5922000}, {0xc5924000}, {0xc5926000}, 
+    {0xc5928000}, {0xc592a000}, {0xc592c000}, {0xc592e000}, 
+    {0xc5930000}, {0xc5932000}, {0xc5934000}, {0xc5936000}, 
+    {0xc5938000}, {0xc593a000}, {0xc593c000}, {0xc593e000}, 
+    {0xc5940000}, {0xc5942000}, {0xc5944000}, {0xc5946000}, 
+    {0xc5948000}, {0xc594a000}, {0xc594c000}, {0xc594e000}, 
+    {0xc5950000}, {0xc5952000}, {0xc5954000}, {0xc5956000}, 
+    {0xc5958000}, {0xc595a000}, {0xc595c000}, {0xc595e000}, 
+    {0xc5960000}, {0xc5962000}, {0xc5964000}, {0xc5966000}, 
+    {0xc5968000}, {0xc596a000}, {0xc596c000}, {0xc596e000}, 
+    {0xc5970000}, {0xc5972000}, {0xc5974000}, {0xc5976000}, 
+    {0xc5978000}, {0xc597a000}, {0xc597c000}, {0xc597e000}, 
+    {0xc5980000}, {0xc5982000}, {0xc5984000}, {0xc5986000}, 
+    {0xc5988000}, {0xc598a000}, {0xc598c000}, {0xc598e000}, 
+    {0xc5990000}, {0xc5992000}, {0xc5994000}, {0xc5996000}, 
+    {0xc5998000}, {0xc599a000}, {0xc599c000}, {0xc599e000}, 
+    {0xc59a0000}, {0xc59a2000}, {0xc59a4000}, {0xc59a6000}, 
+    {0xc59a8000}, {0xc59aa000}, {0xc59ac000}, {0xc59ae000}, 
+    {0xc59b0000}, {0xc59b2000}, {0xc59b4000}, {0xc59b6000}, 
+    {0xc59b8000}, {0xc59ba000}, {0xc59bc000}, {0xc59be000}, 
+    {0xc59c0000}, {0xc59c2000}, {0xc59c4000}, {0xc59c6000}, 
+    {0xc59c8000}, {0xc59ca000}, {0xc59cc000}, {0xc59ce000}, 
+    {0xc59d0000}, {0xc59d2000}, {0xc59d4000}, {0xc59d6000}, 
+    {0xc59d8000}, {0xc59da000}, {0xc59dc000}, {0xc59de000}, 
+    {0xc59e0000}, {0xc59e2000}, {0xc59e4000}, {0xc59e6000}, 
+    {0xc59e8000}, {0xc59ea000}, {0xc59ec000}, {0xc59ee000}, 
+    {0xc59f0000}, {0xc59f2000}, {0xc59f4000}, {0xc59f6000}, 
+    {0xc59f8000}, {0xc59fa000}, {0xc59fc000}, {0xc59fe000}, 
+    {0xc5a00000}, {0xc5a02000}, {0xc5a04000}, {0xc5a06000}, 
+    {0xc5a08000}, {0xc5a0a000}, {0xc5a0c000}, {0xc5a0e000}, 
+    {0xc5a10000}, {0xc5a12000}, {0xc5a14000}, {0xc5a16000}, 
+    {0xc5a18000}, {0xc5a1a000}, {0xc5a1c000}, {0xc5a1e000}, 
+    {0xc5a20000}, {0xc5a22000}, {0xc5a24000}, {0xc5a26000}, 
+    {0xc5a28000}, {0xc5a2a000}, {0xc5a2c000}, {0xc5a2e000}, 
+    {0xc5a30000}, {0xc5a32000}, {0xc5a34000}, {0xc5a36000}, 
+    {0xc5a38000}, {0xc5a3a000}, {0xc5a3c000}, {0xc5a3e000}, 
+    {0xc5a40000}, {0xc5a42000}, {0xc5a44000}, {0xc5a46000}, 
+    {0xc5a48000}, {0xc5a4a000}, {0xc5a4c000}, {0xc5a4e000}, 
+    {0xc5a50000}, {0xc5a52000}, {0xc5a54000}, {0xc5a56000}, 
+    {0xc5a58000}, {0xc5a5a000}, {0xc5a5c000}, {0xc5a5e000}, 
+    {0xc5a60000}, {0xc5a62000}, {0xc5a64000}, {0xc5a66000}, 
+    {0xc5a68000}, {0xc5a6a000}, {0xc5a6c000}, {0xc5a6e000}, 
+    {0xc5a70000}, {0xc5a72000}, {0xc5a74000}, {0xc5a76000}, 
+    {0xc5a78000}, {0xc5a7a000}, {0xc5a7c000}, {0xc5a7e000}, 
+    {0xc5a80000}, {0xc5a82000}, {0xc5a84000}, {0xc5a86000}, 
+    {0xc5a88000}, {0xc5a8a000}, {0xc5a8c000}, {0xc5a8e000}, 
+    {0xc5a90000}, {0xc5a92000}, {0xc5a94000}, {0xc5a96000}, 
+    {0xc5a98000}, {0xc5a9a000}, {0xc5a9c000}, {0xc5a9e000}, 
+    {0xc5aa0000}, {0xc5aa2000}, {0xc5aa4000}, {0xc5aa6000}, 
+    {0xc5aa8000}, {0xc5aaa000}, {0xc5aac000}, {0xc5aae000}, 
+    {0xc5ab0000}, {0xc5ab2000}, {0xc5ab4000}, {0xc5ab6000}, 
+    {0xc5ab8000}, {0xc5aba000}, {0xc5abc000}, {0xc5abe000}, 
+    {0xc5ac0000}, {0xc5ac2000}, {0xc5ac4000}, {0xc5ac6000}, 
+    {0xc5ac8000}, {0xc5aca000}, {0xc5acc000}, {0xc5ace000}, 
+    {0xc5ad0000}, {0xc5ad2000}, {0xc5ad4000}, {0xc5ad6000}, 
+    {0xc5ad8000}, {0xc5ada000}, {0xc5adc000}, {0xc5ade000}, 
+    {0xc5ae0000}, {0xc5ae2000}, {0xc5ae4000}, {0xc5ae6000}, 
+    {0xc5ae8000}, {0xc5aea000}, {0xc5aec000}, {0xc5aee000}, 
+    {0xc5af0000}, {0xc5af2000}, {0xc5af4000}, {0xc5af6000}, 
+    {0xc5af8000}, {0xc5afa000}, {0xc5afc000}, {0xc5afe000}, 
+    {0xc5b00000}, {0xc5b02000}, {0xc5b04000}, {0xc5b06000}, 
+    {0xc5b08000}, {0xc5b0a000}, {0xc5b0c000}, {0xc5b0e000}, 
+    {0xc5b10000}, {0xc5b12000}, {0xc5b14000}, {0xc5b16000}, 
+    {0xc5b18000}, {0xc5b1a000}, {0xc5b1c000}, {0xc5b1e000}, 
+    {0xc5b20000}, {0xc5b22000}, {0xc5b24000}, {0xc5b26000}, 
+    {0xc5b28000}, {0xc5b2a000}, {0xc5b2c000}, {0xc5b2e000}, 
+    {0xc5b30000}, {0xc5b32000}, {0xc5b34000}, {0xc5b36000}, 
+    {0xc5b38000}, {0xc5b3a000}, {0xc5b3c000}, {0xc5b3e000}, 
+    {0xc5b40000}, {0xc5b42000}, {0xc5b44000}, {0xc5b46000}, 
+    {0xc5b48000}, {0xc5b4a000}, {0xc5b4c000}, {0xc5b4e000}, 
+    {0xc5b50000}, {0xc5b52000}, {0xc5b54000}, {0xc5b56000}, 
+    {0xc5b58000}, {0xc5b5a000}, {0xc5b5c000}, {0xc5b5e000}, 
+    {0xc5b60000}, {0xc5b62000}, {0xc5b64000}, {0xc5b66000}, 
+    {0xc5b68000}, {0xc5b6a000}, {0xc5b6c000}, {0xc5b6e000}, 
+    {0xc5b70000}, {0xc5b72000}, {0xc5b74000}, {0xc5b76000}, 
+    {0xc5b78000}, {0xc5b7a000}, {0xc5b7c000}, {0xc5b7e000}, 
+    {0xc5b80000}, {0xc5b82000}, {0xc5b84000}, {0xc5b86000}, 
+    {0xc5b88000}, {0xc5b8a000}, {0xc5b8c000}, {0xc5b8e000}, 
+    {0xc5b90000}, {0xc5b92000}, {0xc5b94000}, {0xc5b96000}, 
+    {0xc5b98000}, {0xc5b9a000}, {0xc5b9c000}, {0xc5b9e000}, 
+    {0xc5ba0000}, {0xc5ba2000}, {0xc5ba4000}, {0xc5ba6000}, 
+    {0xc5ba8000}, {0xc5baa000}, {0xc5bac000}, {0xc5bae000}, 
+    {0xc5bb0000}, {0xc5bb2000}, {0xc5bb4000}, {0xc5bb6000}, 
+    {0xc5bb8000}, {0xc5bba000}, {0xc5bbc000}, {0xc5bbe000}, 
+    {0xc5bc0000}, {0xc5bc2000}, {0xc5bc4000}, {0xc5bc6000}, 
+    {0xc5bc8000}, {0xc5bca000}, {0xc5bcc000}, {0xc5bce000}, 
+    {0xc5bd0000}, {0xc5bd2000}, {0xc5bd4000}, {0xc5bd6000}, 
+    {0xc5bd8000}, {0xc5bda000}, {0xc5bdc000}, {0xc5bde000}, 
+    {0xc5be0000}, {0xc5be2000}, {0xc5be4000}, {0xc5be6000}, 
+    {0xc5be8000}, {0xc5bea000}, {0xc5bec000}, {0xc5bee000}, 
+    {0xc5bf0000}, {0xc5bf2000}, {0xc5bf4000}, {0xc5bf6000}, 
+    {0xc5bf8000}, {0xc5bfa000}, {0xc5bfc000}, {0xc5bfe000}, 
+    {0xc5c00000}, {0xc5c02000}, {0xc5c04000}, {0xc5c06000}, 
+    {0xc5c08000}, {0xc5c0a000}, {0xc5c0c000}, {0xc5c0e000}, 
+    {0xc5c10000}, {0xc5c12000}, {0xc5c14000}, {0xc5c16000}, 
+    {0xc5c18000}, {0xc5c1a000}, {0xc5c1c000}, {0xc5c1e000}, 
+    {0xc5c20000}, {0xc5c22000}, {0xc5c24000}, {0xc5c26000}, 
+    {0xc5c28000}, {0xc5c2a000}, {0xc5c2c000}, {0xc5c2e000}, 
+    {0xc5c30000}, {0xc5c32000}, {0xc5c34000}, {0xc5c36000}, 
+    {0xc5c38000}, {0xc5c3a000}, {0xc5c3c000}, {0xc5c3e000}, 
+    {0xc5c40000}, {0xc5c42000}, {0xc5c44000}, {0xc5c46000}, 
+    {0xc5c48000}, {0xc5c4a000}, {0xc5c4c000}, {0xc5c4e000}, 
+    {0xc5c50000}, {0xc5c52000}, {0xc5c54000}, {0xc5c56000}, 
+    {0xc5c58000}, {0xc5c5a000}, {0xc5c5c000}, {0xc5c5e000}, 
+    {0xc5c60000}, {0xc5c62000}, {0xc5c64000}, {0xc5c66000}, 
+    {0xc5c68000}, {0xc5c6a000}, {0xc5c6c000}, {0xc5c6e000}, 
+    {0xc5c70000}, {0xc5c72000}, {0xc5c74000}, {0xc5c76000}, 
+    {0xc5c78000}, {0xc5c7a000}, {0xc5c7c000}, {0xc5c7e000}, 
+    {0xc5c80000}, {0xc5c82000}, {0xc5c84000}, {0xc5c86000}, 
+    {0xc5c88000}, {0xc5c8a000}, {0xc5c8c000}, {0xc5c8e000}, 
+    {0xc5c90000}, {0xc5c92000}, {0xc5c94000}, {0xc5c96000}, 
+    {0xc5c98000}, {0xc5c9a000}, {0xc5c9c000}, {0xc5c9e000}, 
+    {0xc5ca0000}, {0xc5ca2000}, {0xc5ca4000}, {0xc5ca6000}, 
+    {0xc5ca8000}, {0xc5caa000}, {0xc5cac000}, {0xc5cae000}, 
+    {0xc5cb0000}, {0xc5cb2000}, {0xc5cb4000}, {0xc5cb6000}, 
+    {0xc5cb8000}, {0xc5cba000}, {0xc5cbc000}, {0xc5cbe000}, 
+    {0xc5cc0000}, {0xc5cc2000}, {0xc5cc4000}, {0xc5cc6000}, 
+    {0xc5cc8000}, {0xc5cca000}, {0xc5ccc000}, {0xc5cce000}, 
+    {0xc5cd0000}, {0xc5cd2000}, {0xc5cd4000}, {0xc5cd6000}, 
+    {0xc5cd8000}, {0xc5cda000}, {0xc5cdc000}, {0xc5cde000}, 
+    {0xc5ce0000}, {0xc5ce2000}, {0xc5ce4000}, {0xc5ce6000}, 
+    {0xc5ce8000}, {0xc5cea000}, {0xc5cec000}, {0xc5cee000}, 
+    {0xc5cf0000}, {0xc5cf2000}, {0xc5cf4000}, {0xc5cf6000}, 
+    {0xc5cf8000}, {0xc5cfa000}, {0xc5cfc000}, {0xc5cfe000}, 
+    {0xc5d00000}, {0xc5d02000}, {0xc5d04000}, {0xc5d06000}, 
+    {0xc5d08000}, {0xc5d0a000}, {0xc5d0c000}, {0xc5d0e000}, 
+    {0xc5d10000}, {0xc5d12000}, {0xc5d14000}, {0xc5d16000}, 
+    {0xc5d18000}, {0xc5d1a000}, {0xc5d1c000}, {0xc5d1e000}, 
+    {0xc5d20000}, {0xc5d22000}, {0xc5d24000}, {0xc5d26000}, 
+    {0xc5d28000}, {0xc5d2a000}, {0xc5d2c000}, {0xc5d2e000}, 
+    {0xc5d30000}, {0xc5d32000}, {0xc5d34000}, {0xc5d36000}, 
+    {0xc5d38000}, {0xc5d3a000}, {0xc5d3c000}, {0xc5d3e000}, 
+    {0xc5d40000}, {0xc5d42000}, {0xc5d44000}, {0xc5d46000}, 
+    {0xc5d48000}, {0xc5d4a000}, {0xc5d4c000}, {0xc5d4e000}, 
+    {0xc5d50000}, {0xc5d52000}, {0xc5d54000}, {0xc5d56000}, 
+    {0xc5d58000}, {0xc5d5a000}, {0xc5d5c000}, {0xc5d5e000}, 
+    {0xc5d60000}, {0xc5d62000}, {0xc5d64000}, {0xc5d66000}, 
+    {0xc5d68000}, {0xc5d6a000}, {0xc5d6c000}, {0xc5d6e000}, 
+    {0xc5d70000}, {0xc5d72000}, {0xc5d74000}, {0xc5d76000}, 
+    {0xc5d78000}, {0xc5d7a000}, {0xc5d7c000}, {0xc5d7e000}, 
+    {0xc5d80000}, {0xc5d82000}, {0xc5d84000}, {0xc5d86000}, 
+    {0xc5d88000}, {0xc5d8a000}, {0xc5d8c000}, {0xc5d8e000}, 
+    {0xc5d90000}, {0xc5d92000}, {0xc5d94000}, {0xc5d96000}, 
+    {0xc5d98000}, {0xc5d9a000}, {0xc5d9c000}, {0xc5d9e000}, 
+    {0xc5da0000}, {0xc5da2000}, {0xc5da4000}, {0xc5da6000}, 
+    {0xc5da8000}, {0xc5daa000}, {0xc5dac000}, {0xc5dae000}, 
+    {0xc5db0000}, {0xc5db2000}, {0xc5db4000}, {0xc5db6000}, 
+    {0xc5db8000}, {0xc5dba000}, {0xc5dbc000}, {0xc5dbe000}, 
+    {0xc5dc0000}, {0xc5dc2000}, {0xc5dc4000}, {0xc5dc6000}, 
+    {0xc5dc8000}, {0xc5dca000}, {0xc5dcc000}, {0xc5dce000}, 
+    {0xc5dd0000}, {0xc5dd2000}, {0xc5dd4000}, {0xc5dd6000}, 
+    {0xc5dd8000}, {0xc5dda000}, {0xc5ddc000}, {0xc5dde000}, 
+    {0xc5de0000}, {0xc5de2000}, {0xc5de4000}, {0xc5de6000}, 
+    {0xc5de8000}, {0xc5dea000}, {0xc5dec000}, {0xc5dee000}, 
+    {0xc5df0000}, {0xc5df2000}, {0xc5df4000}, {0xc5df6000}, 
+    {0xc5df8000}, {0xc5dfa000}, {0xc5dfc000}, {0xc5dfe000}, 
+    {0xc5e00000}, {0xc5e02000}, {0xc5e04000}, {0xc5e06000}, 
+    {0xc5e08000}, {0xc5e0a000}, {0xc5e0c000}, {0xc5e0e000}, 
+    {0xc5e10000}, {0xc5e12000}, {0xc5e14000}, {0xc5e16000}, 
+    {0xc5e18000}, {0xc5e1a000}, {0xc5e1c000}, {0xc5e1e000}, 
+    {0xc5e20000}, {0xc5e22000}, {0xc5e24000}, {0xc5e26000}, 
+    {0xc5e28000}, {0xc5e2a000}, {0xc5e2c000}, {0xc5e2e000}, 
+    {0xc5e30000}, {0xc5e32000}, {0xc5e34000}, {0xc5e36000}, 
+    {0xc5e38000}, {0xc5e3a000}, {0xc5e3c000}, {0xc5e3e000}, 
+    {0xc5e40000}, {0xc5e42000}, {0xc5e44000}, {0xc5e46000}, 
+    {0xc5e48000}, {0xc5e4a000}, {0xc5e4c000}, {0xc5e4e000}, 
+    {0xc5e50000}, {0xc5e52000}, {0xc5e54000}, {0xc5e56000}, 
+    {0xc5e58000}, {0xc5e5a000}, {0xc5e5c000}, {0xc5e5e000}, 
+    {0xc5e60000}, {0xc5e62000}, {0xc5e64000}, {0xc5e66000}, 
+    {0xc5e68000}, {0xc5e6a000}, {0xc5e6c000}, {0xc5e6e000}, 
+    {0xc5e70000}, {0xc5e72000}, {0xc5e74000}, {0xc5e76000}, 
+    {0xc5e78000}, {0xc5e7a000}, {0xc5e7c000}, {0xc5e7e000}, 
+    {0xc5e80000}, {0xc5e82000}, {0xc5e84000}, {0xc5e86000}, 
+    {0xc5e88000}, {0xc5e8a000}, {0xc5e8c000}, {0xc5e8e000}, 
+    {0xc5e90000}, {0xc5e92000}, {0xc5e94000}, {0xc5e96000}, 
+    {0xc5e98000}, {0xc5e9a000}, {0xc5e9c000}, {0xc5e9e000}, 
+    {0xc5ea0000}, {0xc5ea2000}, {0xc5ea4000}, {0xc5ea6000}, 
+    {0xc5ea8000}, {0xc5eaa000}, {0xc5eac000}, {0xc5eae000}, 
+    {0xc5eb0000}, {0xc5eb2000}, {0xc5eb4000}, {0xc5eb6000}, 
+    {0xc5eb8000}, {0xc5eba000}, {0xc5ebc000}, {0xc5ebe000}, 
+    {0xc5ec0000}, {0xc5ec2000}, {0xc5ec4000}, {0xc5ec6000}, 
+    {0xc5ec8000}, {0xc5eca000}, {0xc5ecc000}, {0xc5ece000}, 
+    {0xc5ed0000}, {0xc5ed2000}, {0xc5ed4000}, {0xc5ed6000}, 
+    {0xc5ed8000}, {0xc5eda000}, {0xc5edc000}, {0xc5ede000}, 
+    {0xc5ee0000}, {0xc5ee2000}, {0xc5ee4000}, {0xc5ee6000}, 
+    {0xc5ee8000}, {0xc5eea000}, {0xc5eec000}, {0xc5eee000}, 
+    {0xc5ef0000}, {0xc5ef2000}, {0xc5ef4000}, {0xc5ef6000}, 
+    {0xc5ef8000}, {0xc5efa000}, {0xc5efc000}, {0xc5efe000}, 
+    {0xc5f00000}, {0xc5f02000}, {0xc5f04000}, {0xc5f06000}, 
+    {0xc5f08000}, {0xc5f0a000}, {0xc5f0c000}, {0xc5f0e000}, 
+    {0xc5f10000}, {0xc5f12000}, {0xc5f14000}, {0xc5f16000}, 
+    {0xc5f18000}, {0xc5f1a000}, {0xc5f1c000}, {0xc5f1e000}, 
+    {0xc5f20000}, {0xc5f22000}, {0xc5f24000}, {0xc5f26000}, 
+    {0xc5f28000}, {0xc5f2a000}, {0xc5f2c000}, {0xc5f2e000}, 
+    {0xc5f30000}, {0xc5f32000}, {0xc5f34000}, {0xc5f36000}, 
+    {0xc5f38000}, {0xc5f3a000}, {0xc5f3c000}, {0xc5f3e000}, 
+    {0xc5f40000}, {0xc5f42000}, {0xc5f44000}, {0xc5f46000}, 
+    {0xc5f48000}, {0xc5f4a000}, {0xc5f4c000}, {0xc5f4e000}, 
+    {0xc5f50000}, {0xc5f52000}, {0xc5f54000}, {0xc5f56000}, 
+    {0xc5f58000}, {0xc5f5a000}, {0xc5f5c000}, {0xc5f5e000}, 
+    {0xc5f60000}, {0xc5f62000}, {0xc5f64000}, {0xc5f66000}, 
+    {0xc5f68000}, {0xc5f6a000}, {0xc5f6c000}, {0xc5f6e000}, 
+    {0xc5f70000}, {0xc5f72000}, {0xc5f74000}, {0xc5f76000}, 
+    {0xc5f78000}, {0xc5f7a000}, {0xc5f7c000}, {0xc5f7e000}, 
+    {0xc5f80000}, {0xc5f82000}, {0xc5f84000}, {0xc5f86000}, 
+    {0xc5f88000}, {0xc5f8a000}, {0xc5f8c000}, {0xc5f8e000}, 
+    {0xc5f90000}, {0xc5f92000}, {0xc5f94000}, {0xc5f96000}, 
+    {0xc5f98000}, {0xc5f9a000}, {0xc5f9c000}, {0xc5f9e000}, 
+    {0xc5fa0000}, {0xc5fa2000}, {0xc5fa4000}, {0xc5fa6000}, 
+    {0xc5fa8000}, {0xc5faa000}, {0xc5fac000}, {0xc5fae000}, 
+    {0xc5fb0000}, {0xc5fb2000}, {0xc5fb4000}, {0xc5fb6000}, 
+    {0xc5fb8000}, {0xc5fba000}, {0xc5fbc000}, {0xc5fbe000}, 
+    {0xc5fc0000}, {0xc5fc2000}, {0xc5fc4000}, {0xc5fc6000}, 
+    {0xc5fc8000}, {0xc5fca000}, {0xc5fcc000}, {0xc5fce000}, 
+    {0xc5fd0000}, {0xc5fd2000}, {0xc5fd4000}, {0xc5fd6000}, 
+    {0xc5fd8000}, {0xc5fda000}, {0xc5fdc000}, {0xc5fde000}, 
+    {0xc5fe0000}, {0xc5fe2000}, {0xc5fe4000}, {0xc5fe6000}, 
+    {0xc5fe8000}, {0xc5fea000}, {0xc5fec000}, {0xc5fee000}, 
+    {0xc5ff0000}, {0xc5ff2000}, {0xc5ff4000}, {0xc5ff6000}, 
+    {0xc5ff8000}, {0xc5ffa000}, {0xc5ffc000}, {0xc5ffe000}, 
+    {0xc6000000}, {0xc6002000}, {0xc6004000}, {0xc6006000}, 
+    {0xc6008000}, {0xc600a000}, {0xc600c000}, {0xc600e000}, 
+    {0xc6010000}, {0xc6012000}, {0xc6014000}, {0xc6016000}, 
+    {0xc6018000}, {0xc601a000}, {0xc601c000}, {0xc601e000}, 
+    {0xc6020000}, {0xc6022000}, {0xc6024000}, {0xc6026000}, 
+    {0xc6028000}, {0xc602a000}, {0xc602c000}, {0xc602e000}, 
+    {0xc6030000}, {0xc6032000}, {0xc6034000}, {0xc6036000}, 
+    {0xc6038000}, {0xc603a000}, {0xc603c000}, {0xc603e000}, 
+    {0xc6040000}, {0xc6042000}, {0xc6044000}, {0xc6046000}, 
+    {0xc6048000}, {0xc604a000}, {0xc604c000}, {0xc604e000}, 
+    {0xc6050000}, {0xc6052000}, {0xc6054000}, {0xc6056000}, 
+    {0xc6058000}, {0xc605a000}, {0xc605c000}, {0xc605e000}, 
+    {0xc6060000}, {0xc6062000}, {0xc6064000}, {0xc6066000}, 
+    {0xc6068000}, {0xc606a000}, {0xc606c000}, {0xc606e000}, 
+    {0xc6070000}, {0xc6072000}, {0xc6074000}, {0xc6076000}, 
+    {0xc6078000}, {0xc607a000}, {0xc607c000}, {0xc607e000}, 
+    {0xc6080000}, {0xc6082000}, {0xc6084000}, {0xc6086000}, 
+    {0xc6088000}, {0xc608a000}, {0xc608c000}, {0xc608e000}, 
+    {0xc6090000}, {0xc6092000}, {0xc6094000}, {0xc6096000}, 
+    {0xc6098000}, {0xc609a000}, {0xc609c000}, {0xc609e000}, 
+    {0xc60a0000}, {0xc60a2000}, {0xc60a4000}, {0xc60a6000}, 
+    {0xc60a8000}, {0xc60aa000}, {0xc60ac000}, {0xc60ae000}, 
+    {0xc60b0000}, {0xc60b2000}, {0xc60b4000}, {0xc60b6000}, 
+    {0xc60b8000}, {0xc60ba000}, {0xc60bc000}, {0xc60be000}, 
+    {0xc60c0000}, {0xc60c2000}, {0xc60c4000}, {0xc60c6000}, 
+    {0xc60c8000}, {0xc60ca000}, {0xc60cc000}, {0xc60ce000}, 
+    {0xc60d0000}, {0xc60d2000}, {0xc60d4000}, {0xc60d6000}, 
+    {0xc60d8000}, {0xc60da000}, {0xc60dc000}, {0xc60de000}, 
+    {0xc60e0000}, {0xc60e2000}, {0xc60e4000}, {0xc60e6000}, 
+    {0xc60e8000}, {0xc60ea000}, {0xc60ec000}, {0xc60ee000}, 
+    {0xc60f0000}, {0xc60f2000}, {0xc60f4000}, {0xc60f6000}, 
+    {0xc60f8000}, {0xc60fa000}, {0xc60fc000}, {0xc60fe000}, 
+    {0xc6100000}, {0xc6102000}, {0xc6104000}, {0xc6106000}, 
+    {0xc6108000}, {0xc610a000}, {0xc610c000}, {0xc610e000}, 
+    {0xc6110000}, {0xc6112000}, {0xc6114000}, {0xc6116000}, 
+    {0xc6118000}, {0xc611a000}, {0xc611c000}, {0xc611e000}, 
+    {0xc6120000}, {0xc6122000}, {0xc6124000}, {0xc6126000}, 
+    {0xc6128000}, {0xc612a000}, {0xc612c000}, {0xc612e000}, 
+    {0xc6130000}, {0xc6132000}, {0xc6134000}, {0xc6136000}, 
+    {0xc6138000}, {0xc613a000}, {0xc613c000}, {0xc613e000}, 
+    {0xc6140000}, {0xc6142000}, {0xc6144000}, {0xc6146000}, 
+    {0xc6148000}, {0xc614a000}, {0xc614c000}, {0xc614e000}, 
+    {0xc6150000}, {0xc6152000}, {0xc6154000}, {0xc6156000}, 
+    {0xc6158000}, {0xc615a000}, {0xc615c000}, {0xc615e000}, 
+    {0xc6160000}, {0xc6162000}, {0xc6164000}, {0xc6166000}, 
+    {0xc6168000}, {0xc616a000}, {0xc616c000}, {0xc616e000}, 
+    {0xc6170000}, {0xc6172000}, {0xc6174000}, {0xc6176000}, 
+    {0xc6178000}, {0xc617a000}, {0xc617c000}, {0xc617e000}, 
+    {0xc6180000}, {0xc6182000}, {0xc6184000}, {0xc6186000}, 
+    {0xc6188000}, {0xc618a000}, {0xc618c000}, {0xc618e000}, 
+    {0xc6190000}, {0xc6192000}, {0xc6194000}, {0xc6196000}, 
+    {0xc6198000}, {0xc619a000}, {0xc619c000}, {0xc619e000}, 
+    {0xc61a0000}, {0xc61a2000}, {0xc61a4000}, {0xc61a6000}, 
+    {0xc61a8000}, {0xc61aa000}, {0xc61ac000}, {0xc61ae000}, 
+    {0xc61b0000}, {0xc61b2000}, {0xc61b4000}, {0xc61b6000}, 
+    {0xc61b8000}, {0xc61ba000}, {0xc61bc000}, {0xc61be000}, 
+    {0xc61c0000}, {0xc61c2000}, {0xc61c4000}, {0xc61c6000}, 
+    {0xc61c8000}, {0xc61ca000}, {0xc61cc000}, {0xc61ce000}, 
+    {0xc61d0000}, {0xc61d2000}, {0xc61d4000}, {0xc61d6000}, 
+    {0xc61d8000}, {0xc61da000}, {0xc61dc000}, {0xc61de000}, 
+    {0xc61e0000}, {0xc61e2000}, {0xc61e4000}, {0xc61e6000}, 
+    {0xc61e8000}, {0xc61ea000}, {0xc61ec000}, {0xc61ee000}, 
+    {0xc61f0000}, {0xc61f2000}, {0xc61f4000}, {0xc61f6000}, 
+    {0xc61f8000}, {0xc61fa000}, {0xc61fc000}, {0xc61fe000}, 
+    {0xc6200000}, {0xc6202000}, {0xc6204000}, {0xc6206000}, 
+    {0xc6208000}, {0xc620a000}, {0xc620c000}, {0xc620e000}, 
+    {0xc6210000}, {0xc6212000}, {0xc6214000}, {0xc6216000}, 
+    {0xc6218000}, {0xc621a000}, {0xc621c000}, {0xc621e000}, 
+    {0xc6220000}, {0xc6222000}, {0xc6224000}, {0xc6226000}, 
+    {0xc6228000}, {0xc622a000}, {0xc622c000}, {0xc622e000}, 
+    {0xc6230000}, {0xc6232000}, {0xc6234000}, {0xc6236000}, 
+    {0xc6238000}, {0xc623a000}, {0xc623c000}, {0xc623e000}, 
+    {0xc6240000}, {0xc6242000}, {0xc6244000}, {0xc6246000}, 
+    {0xc6248000}, {0xc624a000}, {0xc624c000}, {0xc624e000}, 
+    {0xc6250000}, {0xc6252000}, {0xc6254000}, {0xc6256000}, 
+    {0xc6258000}, {0xc625a000}, {0xc625c000}, {0xc625e000}, 
+    {0xc6260000}, {0xc6262000}, {0xc6264000}, {0xc6266000}, 
+    {0xc6268000}, {0xc626a000}, {0xc626c000}, {0xc626e000}, 
+    {0xc6270000}, {0xc6272000}, {0xc6274000}, {0xc6276000}, 
+    {0xc6278000}, {0xc627a000}, {0xc627c000}, {0xc627e000}, 
+    {0xc6280000}, {0xc6282000}, {0xc6284000}, {0xc6286000}, 
+    {0xc6288000}, {0xc628a000}, {0xc628c000}, {0xc628e000}, 
+    {0xc6290000}, {0xc6292000}, {0xc6294000}, {0xc6296000}, 
+    {0xc6298000}, {0xc629a000}, {0xc629c000}, {0xc629e000}, 
+    {0xc62a0000}, {0xc62a2000}, {0xc62a4000}, {0xc62a6000}, 
+    {0xc62a8000}, {0xc62aa000}, {0xc62ac000}, {0xc62ae000}, 
+    {0xc62b0000}, {0xc62b2000}, {0xc62b4000}, {0xc62b6000}, 
+    {0xc62b8000}, {0xc62ba000}, {0xc62bc000}, {0xc62be000}, 
+    {0xc62c0000}, {0xc62c2000}, {0xc62c4000}, {0xc62c6000}, 
+    {0xc62c8000}, {0xc62ca000}, {0xc62cc000}, {0xc62ce000}, 
+    {0xc62d0000}, {0xc62d2000}, {0xc62d4000}, {0xc62d6000}, 
+    {0xc62d8000}, {0xc62da000}, {0xc62dc000}, {0xc62de000}, 
+    {0xc62e0000}, {0xc62e2000}, {0xc62e4000}, {0xc62e6000}, 
+    {0xc62e8000}, {0xc62ea000}, {0xc62ec000}, {0xc62ee000}, 
+    {0xc62f0000}, {0xc62f2000}, {0xc62f4000}, {0xc62f6000}, 
+    {0xc62f8000}, {0xc62fa000}, {0xc62fc000}, {0xc62fe000}, 
+    {0xc6300000}, {0xc6302000}, {0xc6304000}, {0xc6306000}, 
+    {0xc6308000}, {0xc630a000}, {0xc630c000}, {0xc630e000}, 
+    {0xc6310000}, {0xc6312000}, {0xc6314000}, {0xc6316000}, 
+    {0xc6318000}, {0xc631a000}, {0xc631c000}, {0xc631e000}, 
+    {0xc6320000}, {0xc6322000}, {0xc6324000}, {0xc6326000}, 
+    {0xc6328000}, {0xc632a000}, {0xc632c000}, {0xc632e000}, 
+    {0xc6330000}, {0xc6332000}, {0xc6334000}, {0xc6336000}, 
+    {0xc6338000}, {0xc633a000}, {0xc633c000}, {0xc633e000}, 
+    {0xc6340000}, {0xc6342000}, {0xc6344000}, {0xc6346000}, 
+    {0xc6348000}, {0xc634a000}, {0xc634c000}, {0xc634e000}, 
+    {0xc6350000}, {0xc6352000}, {0xc6354000}, {0xc6356000}, 
+    {0xc6358000}, {0xc635a000}, {0xc635c000}, {0xc635e000}, 
+    {0xc6360000}, {0xc6362000}, {0xc6364000}, {0xc6366000}, 
+    {0xc6368000}, {0xc636a000}, {0xc636c000}, {0xc636e000}, 
+    {0xc6370000}, {0xc6372000}, {0xc6374000}, {0xc6376000}, 
+    {0xc6378000}, {0xc637a000}, {0xc637c000}, {0xc637e000}, 
+    {0xc6380000}, {0xc6382000}, {0xc6384000}, {0xc6386000}, 
+    {0xc6388000}, {0xc638a000}, {0xc638c000}, {0xc638e000}, 
+    {0xc6390000}, {0xc6392000}, {0xc6394000}, {0xc6396000}, 
+    {0xc6398000}, {0xc639a000}, {0xc639c000}, {0xc639e000}, 
+    {0xc63a0000}, {0xc63a2000}, {0xc63a4000}, {0xc63a6000}, 
+    {0xc63a8000}, {0xc63aa000}, {0xc63ac000}, {0xc63ae000}, 
+    {0xc63b0000}, {0xc63b2000}, {0xc63b4000}, {0xc63b6000}, 
+    {0xc63b8000}, {0xc63ba000}, {0xc63bc000}, {0xc63be000}, 
+    {0xc63c0000}, {0xc63c2000}, {0xc63c4000}, {0xc63c6000}, 
+    {0xc63c8000}, {0xc63ca000}, {0xc63cc000}, {0xc63ce000}, 
+    {0xc63d0000}, {0xc63d2000}, {0xc63d4000}, {0xc63d6000}, 
+    {0xc63d8000}, {0xc63da000}, {0xc63dc000}, {0xc63de000}, 
+    {0xc63e0000}, {0xc63e2000}, {0xc63e4000}, {0xc63e6000}, 
+    {0xc63e8000}, {0xc63ea000}, {0xc63ec000}, {0xc63ee000}, 
+    {0xc63f0000}, {0xc63f2000}, {0xc63f4000}, {0xc63f6000}, 
+    {0xc63f8000}, {0xc63fa000}, {0xc63fc000}, {0xc63fe000}, 
+    {0xc6400000}, {0xc6402000}, {0xc6404000}, {0xc6406000}, 
+    {0xc6408000}, {0xc640a000}, {0xc640c000}, {0xc640e000}, 
+    {0xc6410000}, {0xc6412000}, {0xc6414000}, {0xc6416000}, 
+    {0xc6418000}, {0xc641a000}, {0xc641c000}, {0xc641e000}, 
+    {0xc6420000}, {0xc6422000}, {0xc6424000}, {0xc6426000}, 
+    {0xc6428000}, {0xc642a000}, {0xc642c000}, {0xc642e000}, 
+    {0xc6430000}, {0xc6432000}, {0xc6434000}, {0xc6436000}, 
+    {0xc6438000}, {0xc643a000}, {0xc643c000}, {0xc643e000}, 
+    {0xc6440000}, {0xc6442000}, {0xc6444000}, {0xc6446000}, 
+    {0xc6448000}, {0xc644a000}, {0xc644c000}, {0xc644e000}, 
+    {0xc6450000}, {0xc6452000}, {0xc6454000}, {0xc6456000}, 
+    {0xc6458000}, {0xc645a000}, {0xc645c000}, {0xc645e000}, 
+    {0xc6460000}, {0xc6462000}, {0xc6464000}, {0xc6466000}, 
+    {0xc6468000}, {0xc646a000}, {0xc646c000}, {0xc646e000}, 
+    {0xc6470000}, {0xc6472000}, {0xc6474000}, {0xc6476000}, 
+    {0xc6478000}, {0xc647a000}, {0xc647c000}, {0xc647e000}, 
+    {0xc6480000}, {0xc6482000}, {0xc6484000}, {0xc6486000}, 
+    {0xc6488000}, {0xc648a000}, {0xc648c000}, {0xc648e000}, 
+    {0xc6490000}, {0xc6492000}, {0xc6494000}, {0xc6496000}, 
+    {0xc6498000}, {0xc649a000}, {0xc649c000}, {0xc649e000}, 
+    {0xc64a0000}, {0xc64a2000}, {0xc64a4000}, {0xc64a6000}, 
+    {0xc64a8000}, {0xc64aa000}, {0xc64ac000}, {0xc64ae000}, 
+    {0xc64b0000}, {0xc64b2000}, {0xc64b4000}, {0xc64b6000}, 
+    {0xc64b8000}, {0xc64ba000}, {0xc64bc000}, {0xc64be000}, 
+    {0xc64c0000}, {0xc64c2000}, {0xc64c4000}, {0xc64c6000}, 
+    {0xc64c8000}, {0xc64ca000}, {0xc64cc000}, {0xc64ce000}, 
+    {0xc64d0000}, {0xc64d2000}, {0xc64d4000}, {0xc64d6000}, 
+    {0xc64d8000}, {0xc64da000}, {0xc64dc000}, {0xc64de000}, 
+    {0xc64e0000}, {0xc64e2000}, {0xc64e4000}, {0xc64e6000}, 
+    {0xc64e8000}, {0xc64ea000}, {0xc64ec000}, {0xc64ee000}, 
+    {0xc64f0000}, {0xc64f2000}, {0xc64f4000}, {0xc64f6000}, 
+    {0xc64f8000}, {0xc64fa000}, {0xc64fc000}, {0xc64fe000}, 
+    {0xc6500000}, {0xc6502000}, {0xc6504000}, {0xc6506000}, 
+    {0xc6508000}, {0xc650a000}, {0xc650c000}, {0xc650e000}, 
+    {0xc6510000}, {0xc6512000}, {0xc6514000}, {0xc6516000}, 
+    {0xc6518000}, {0xc651a000}, {0xc651c000}, {0xc651e000}, 
+    {0xc6520000}, {0xc6522000}, {0xc6524000}, {0xc6526000}, 
+    {0xc6528000}, {0xc652a000}, {0xc652c000}, {0xc652e000}, 
+    {0xc6530000}, {0xc6532000}, {0xc6534000}, {0xc6536000}, 
+    {0xc6538000}, {0xc653a000}, {0xc653c000}, {0xc653e000}, 
+    {0xc6540000}, {0xc6542000}, {0xc6544000}, {0xc6546000}, 
+    {0xc6548000}, {0xc654a000}, {0xc654c000}, {0xc654e000}, 
+    {0xc6550000}, {0xc6552000}, {0xc6554000}, {0xc6556000}, 
+    {0xc6558000}, {0xc655a000}, {0xc655c000}, {0xc655e000}, 
+    {0xc6560000}, {0xc6562000}, {0xc6564000}, {0xc6566000}, 
+    {0xc6568000}, {0xc656a000}, {0xc656c000}, {0xc656e000}, 
+    {0xc6570000}, {0xc6572000}, {0xc6574000}, {0xc6576000}, 
+    {0xc6578000}, {0xc657a000}, {0xc657c000}, {0xc657e000}, 
+    {0xc6580000}, {0xc6582000}, {0xc6584000}, {0xc6586000}, 
+    {0xc6588000}, {0xc658a000}, {0xc658c000}, {0xc658e000}, 
+    {0xc6590000}, {0xc6592000}, {0xc6594000}, {0xc6596000}, 
+    {0xc6598000}, {0xc659a000}, {0xc659c000}, {0xc659e000}, 
+    {0xc65a0000}, {0xc65a2000}, {0xc65a4000}, {0xc65a6000}, 
+    {0xc65a8000}, {0xc65aa000}, {0xc65ac000}, {0xc65ae000}, 
+    {0xc65b0000}, {0xc65b2000}, {0xc65b4000}, {0xc65b6000}, 
+    {0xc65b8000}, {0xc65ba000}, {0xc65bc000}, {0xc65be000}, 
+    {0xc65c0000}, {0xc65c2000}, {0xc65c4000}, {0xc65c6000}, 
+    {0xc65c8000}, {0xc65ca000}, {0xc65cc000}, {0xc65ce000}, 
+    {0xc65d0000}, {0xc65d2000}, {0xc65d4000}, {0xc65d6000}, 
+    {0xc65d8000}, {0xc65da000}, {0xc65dc000}, {0xc65de000}, 
+    {0xc65e0000}, {0xc65e2000}, {0xc65e4000}, {0xc65e6000}, 
+    {0xc65e8000}, {0xc65ea000}, {0xc65ec000}, {0xc65ee000}, 
+    {0xc65f0000}, {0xc65f2000}, {0xc65f4000}, {0xc65f6000}, 
+    {0xc65f8000}, {0xc65fa000}, {0xc65fc000}, {0xc65fe000}, 
+    {0xc6600000}, {0xc6602000}, {0xc6604000}, {0xc6606000}, 
+    {0xc6608000}, {0xc660a000}, {0xc660c000}, {0xc660e000}, 
+    {0xc6610000}, {0xc6612000}, {0xc6614000}, {0xc6616000}, 
+    {0xc6618000}, {0xc661a000}, {0xc661c000}, {0xc661e000}, 
+    {0xc6620000}, {0xc6622000}, {0xc6624000}, {0xc6626000}, 
+    {0xc6628000}, {0xc662a000}, {0xc662c000}, {0xc662e000}, 
+    {0xc6630000}, {0xc6632000}, {0xc6634000}, {0xc6636000}, 
+    {0xc6638000}, {0xc663a000}, {0xc663c000}, {0xc663e000}, 
+    {0xc6640000}, {0xc6642000}, {0xc6644000}, {0xc6646000}, 
+    {0xc6648000}, {0xc664a000}, {0xc664c000}, {0xc664e000}, 
+    {0xc6650000}, {0xc6652000}, {0xc6654000}, {0xc6656000}, 
+    {0xc6658000}, {0xc665a000}, {0xc665c000}, {0xc665e000}, 
+    {0xc6660000}, {0xc6662000}, {0xc6664000}, {0xc6666000}, 
+    {0xc6668000}, {0xc666a000}, {0xc666c000}, {0xc666e000}, 
+    {0xc6670000}, {0xc6672000}, {0xc6674000}, {0xc6676000}, 
+    {0xc6678000}, {0xc667a000}, {0xc667c000}, {0xc667e000}, 
+    {0xc6680000}, {0xc6682000}, {0xc6684000}, {0xc6686000}, 
+    {0xc6688000}, {0xc668a000}, {0xc668c000}, {0xc668e000}, 
+    {0xc6690000}, {0xc6692000}, {0xc6694000}, {0xc6696000}, 
+    {0xc6698000}, {0xc669a000}, {0xc669c000}, {0xc669e000}, 
+    {0xc66a0000}, {0xc66a2000}, {0xc66a4000}, {0xc66a6000}, 
+    {0xc66a8000}, {0xc66aa000}, {0xc66ac000}, {0xc66ae000}, 
+    {0xc66b0000}, {0xc66b2000}, {0xc66b4000}, {0xc66b6000}, 
+    {0xc66b8000}, {0xc66ba000}, {0xc66bc000}, {0xc66be000}, 
+    {0xc66c0000}, {0xc66c2000}, {0xc66c4000}, {0xc66c6000}, 
+    {0xc66c8000}, {0xc66ca000}, {0xc66cc000}, {0xc66ce000}, 
+    {0xc66d0000}, {0xc66d2000}, {0xc66d4000}, {0xc66d6000}, 
+    {0xc66d8000}, {0xc66da000}, {0xc66dc000}, {0xc66de000}, 
+    {0xc66e0000}, {0xc66e2000}, {0xc66e4000}, {0xc66e6000}, 
+    {0xc66e8000}, {0xc66ea000}, {0xc66ec000}, {0xc66ee000}, 
+    {0xc66f0000}, {0xc66f2000}, {0xc66f4000}, {0xc66f6000}, 
+    {0xc66f8000}, {0xc66fa000}, {0xc66fc000}, {0xc66fe000}, 
+    {0xc6700000}, {0xc6702000}, {0xc6704000}, {0xc6706000}, 
+    {0xc6708000}, {0xc670a000}, {0xc670c000}, {0xc670e000}, 
+    {0xc6710000}, {0xc6712000}, {0xc6714000}, {0xc6716000}, 
+    {0xc6718000}, {0xc671a000}, {0xc671c000}, {0xc671e000}, 
+    {0xc6720000}, {0xc6722000}, {0xc6724000}, {0xc6726000}, 
+    {0xc6728000}, {0xc672a000}, {0xc672c000}, {0xc672e000}, 
+    {0xc6730000}, {0xc6732000}, {0xc6734000}, {0xc6736000}, 
+    {0xc6738000}, {0xc673a000}, {0xc673c000}, {0xc673e000}, 
+    {0xc6740000}, {0xc6742000}, {0xc6744000}, {0xc6746000}, 
+    {0xc6748000}, {0xc674a000}, {0xc674c000}, {0xc674e000}, 
+    {0xc6750000}, {0xc6752000}, {0xc6754000}, {0xc6756000}, 
+    {0xc6758000}, {0xc675a000}, {0xc675c000}, {0xc675e000}, 
+    {0xc6760000}, {0xc6762000}, {0xc6764000}, {0xc6766000}, 
+    {0xc6768000}, {0xc676a000}, {0xc676c000}, {0xc676e000}, 
+    {0xc6770000}, {0xc6772000}, {0xc6774000}, {0xc6776000}, 
+    {0xc6778000}, {0xc677a000}, {0xc677c000}, {0xc677e000}, 
+    {0xc6780000}, {0xc6782000}, {0xc6784000}, {0xc6786000}, 
+    {0xc6788000}, {0xc678a000}, {0xc678c000}, {0xc678e000}, 
+    {0xc6790000}, {0xc6792000}, {0xc6794000}, {0xc6796000}, 
+    {0xc6798000}, {0xc679a000}, {0xc679c000}, {0xc679e000}, 
+    {0xc67a0000}, {0xc67a2000}, {0xc67a4000}, {0xc67a6000}, 
+    {0xc67a8000}, {0xc67aa000}, {0xc67ac000}, {0xc67ae000}, 
+    {0xc67b0000}, {0xc67b2000}, {0xc67b4000}, {0xc67b6000}, 
+    {0xc67b8000}, {0xc67ba000}, {0xc67bc000}, {0xc67be000}, 
+    {0xc67c0000}, {0xc67c2000}, {0xc67c4000}, {0xc67c6000}, 
+    {0xc67c8000}, {0xc67ca000}, {0xc67cc000}, {0xc67ce000}, 
+    {0xc67d0000}, {0xc67d2000}, {0xc67d4000}, {0xc67d6000}, 
+    {0xc67d8000}, {0xc67da000}, {0xc67dc000}, {0xc67de000}, 
+    {0xc67e0000}, {0xc67e2000}, {0xc67e4000}, {0xc67e6000}, 
+    {0xc67e8000}, {0xc67ea000}, {0xc67ec000}, {0xc67ee000}, 
+    {0xc67f0000}, {0xc67f2000}, {0xc67f4000}, {0xc67f6000}, 
+    {0xc67f8000}, {0xc67fa000}, {0xc67fc000}, {0xc67fe000}, 
+    {0xc6800000}, {0xc6802000}, {0xc6804000}, {0xc6806000}, 
+    {0xc6808000}, {0xc680a000}, {0xc680c000}, {0xc680e000}, 
+    {0xc6810000}, {0xc6812000}, {0xc6814000}, {0xc6816000}, 
+    {0xc6818000}, {0xc681a000}, {0xc681c000}, {0xc681e000}, 
+    {0xc6820000}, {0xc6822000}, {0xc6824000}, {0xc6826000}, 
+    {0xc6828000}, {0xc682a000}, {0xc682c000}, {0xc682e000}, 
+    {0xc6830000}, {0xc6832000}, {0xc6834000}, {0xc6836000}, 
+    {0xc6838000}, {0xc683a000}, {0xc683c000}, {0xc683e000}, 
+    {0xc6840000}, {0xc6842000}, {0xc6844000}, {0xc6846000}, 
+    {0xc6848000}, {0xc684a000}, {0xc684c000}, {0xc684e000}, 
+    {0xc6850000}, {0xc6852000}, {0xc6854000}, {0xc6856000}, 
+    {0xc6858000}, {0xc685a000}, {0xc685c000}, {0xc685e000}, 
+    {0xc6860000}, {0xc6862000}, {0xc6864000}, {0xc6866000}, 
+    {0xc6868000}, {0xc686a000}, {0xc686c000}, {0xc686e000}, 
+    {0xc6870000}, {0xc6872000}, {0xc6874000}, {0xc6876000}, 
+    {0xc6878000}, {0xc687a000}, {0xc687c000}, {0xc687e000}, 
+    {0xc6880000}, {0xc6882000}, {0xc6884000}, {0xc6886000}, 
+    {0xc6888000}, {0xc688a000}, {0xc688c000}, {0xc688e000}, 
+    {0xc6890000}, {0xc6892000}, {0xc6894000}, {0xc6896000}, 
+    {0xc6898000}, {0xc689a000}, {0xc689c000}, {0xc689e000}, 
+    {0xc68a0000}, {0xc68a2000}, {0xc68a4000}, {0xc68a6000}, 
+    {0xc68a8000}, {0xc68aa000}, {0xc68ac000}, {0xc68ae000}, 
+    {0xc68b0000}, {0xc68b2000}, {0xc68b4000}, {0xc68b6000}, 
+    {0xc68b8000}, {0xc68ba000}, {0xc68bc000}, {0xc68be000}, 
+    {0xc68c0000}, {0xc68c2000}, {0xc68c4000}, {0xc68c6000}, 
+    {0xc68c8000}, {0xc68ca000}, {0xc68cc000}, {0xc68ce000}, 
+    {0xc68d0000}, {0xc68d2000}, {0xc68d4000}, {0xc68d6000}, 
+    {0xc68d8000}, {0xc68da000}, {0xc68dc000}, {0xc68de000}, 
+    {0xc68e0000}, {0xc68e2000}, {0xc68e4000}, {0xc68e6000}, 
+    {0xc68e8000}, {0xc68ea000}, {0xc68ec000}, {0xc68ee000}, 
+    {0xc68f0000}, {0xc68f2000}, {0xc68f4000}, {0xc68f6000}, 
+    {0xc68f8000}, {0xc68fa000}, {0xc68fc000}, {0xc68fe000}, 
+    {0xc6900000}, {0xc6902000}, {0xc6904000}, {0xc6906000}, 
+    {0xc6908000}, {0xc690a000}, {0xc690c000}, {0xc690e000}, 
+    {0xc6910000}, {0xc6912000}, {0xc6914000}, {0xc6916000}, 
+    {0xc6918000}, {0xc691a000}, {0xc691c000}, {0xc691e000}, 
+    {0xc6920000}, {0xc6922000}, {0xc6924000}, {0xc6926000}, 
+    {0xc6928000}, {0xc692a000}, {0xc692c000}, {0xc692e000}, 
+    {0xc6930000}, {0xc6932000}, {0xc6934000}, {0xc6936000}, 
+    {0xc6938000}, {0xc693a000}, {0xc693c000}, {0xc693e000}, 
+    {0xc6940000}, {0xc6942000}, {0xc6944000}, {0xc6946000}, 
+    {0xc6948000}, {0xc694a000}, {0xc694c000}, {0xc694e000}, 
+    {0xc6950000}, {0xc6952000}, {0xc6954000}, {0xc6956000}, 
+    {0xc6958000}, {0xc695a000}, {0xc695c000}, {0xc695e000}, 
+    {0xc6960000}, {0xc6962000}, {0xc6964000}, {0xc6966000}, 
+    {0xc6968000}, {0xc696a000}, {0xc696c000}, {0xc696e000}, 
+    {0xc6970000}, {0xc6972000}, {0xc6974000}, {0xc6976000}, 
+    {0xc6978000}, {0xc697a000}, {0xc697c000}, {0xc697e000}, 
+    {0xc6980000}, {0xc6982000}, {0xc6984000}, {0xc6986000}, 
+    {0xc6988000}, {0xc698a000}, {0xc698c000}, {0xc698e000}, 
+    {0xc6990000}, {0xc6992000}, {0xc6994000}, {0xc6996000}, 
+    {0xc6998000}, {0xc699a000}, {0xc699c000}, {0xc699e000}, 
+    {0xc69a0000}, {0xc69a2000}, {0xc69a4000}, {0xc69a6000}, 
+    {0xc69a8000}, {0xc69aa000}, {0xc69ac000}, {0xc69ae000}, 
+    {0xc69b0000}, {0xc69b2000}, {0xc69b4000}, {0xc69b6000}, 
+    {0xc69b8000}, {0xc69ba000}, {0xc69bc000}, {0xc69be000}, 
+    {0xc69c0000}, {0xc69c2000}, {0xc69c4000}, {0xc69c6000}, 
+    {0xc69c8000}, {0xc69ca000}, {0xc69cc000}, {0xc69ce000}, 
+    {0xc69d0000}, {0xc69d2000}, {0xc69d4000}, {0xc69d6000}, 
+    {0xc69d8000}, {0xc69da000}, {0xc69dc000}, {0xc69de000}, 
+    {0xc69e0000}, {0xc69e2000}, {0xc69e4000}, {0xc69e6000}, 
+    {0xc69e8000}, {0xc69ea000}, {0xc69ec000}, {0xc69ee000}, 
+    {0xc69f0000}, {0xc69f2000}, {0xc69f4000}, {0xc69f6000}, 
+    {0xc69f8000}, {0xc69fa000}, {0xc69fc000}, {0xc69fe000}, 
+    {0xc6a00000}, {0xc6a02000}, {0xc6a04000}, {0xc6a06000}, 
+    {0xc6a08000}, {0xc6a0a000}, {0xc6a0c000}, {0xc6a0e000}, 
+    {0xc6a10000}, {0xc6a12000}, {0xc6a14000}, {0xc6a16000}, 
+    {0xc6a18000}, {0xc6a1a000}, {0xc6a1c000}, {0xc6a1e000}, 
+    {0xc6a20000}, {0xc6a22000}, {0xc6a24000}, {0xc6a26000}, 
+    {0xc6a28000}, {0xc6a2a000}, {0xc6a2c000}, {0xc6a2e000}, 
+    {0xc6a30000}, {0xc6a32000}, {0xc6a34000}, {0xc6a36000}, 
+    {0xc6a38000}, {0xc6a3a000}, {0xc6a3c000}, {0xc6a3e000}, 
+    {0xc6a40000}, {0xc6a42000}, {0xc6a44000}, {0xc6a46000}, 
+    {0xc6a48000}, {0xc6a4a000}, {0xc6a4c000}, {0xc6a4e000}, 
+    {0xc6a50000}, {0xc6a52000}, {0xc6a54000}, {0xc6a56000}, 
+    {0xc6a58000}, {0xc6a5a000}, {0xc6a5c000}, {0xc6a5e000}, 
+    {0xc6a60000}, {0xc6a62000}, {0xc6a64000}, {0xc6a66000}, 
+    {0xc6a68000}, {0xc6a6a000}, {0xc6a6c000}, {0xc6a6e000}, 
+    {0xc6a70000}, {0xc6a72000}, {0xc6a74000}, {0xc6a76000}, 
+    {0xc6a78000}, {0xc6a7a000}, {0xc6a7c000}, {0xc6a7e000}, 
+    {0xc6a80000}, {0xc6a82000}, {0xc6a84000}, {0xc6a86000}, 
+    {0xc6a88000}, {0xc6a8a000}, {0xc6a8c000}, {0xc6a8e000}, 
+    {0xc6a90000}, {0xc6a92000}, {0xc6a94000}, {0xc6a96000}, 
+    {0xc6a98000}, {0xc6a9a000}, {0xc6a9c000}, {0xc6a9e000}, 
+    {0xc6aa0000}, {0xc6aa2000}, {0xc6aa4000}, {0xc6aa6000}, 
+    {0xc6aa8000}, {0xc6aaa000}, {0xc6aac000}, {0xc6aae000}, 
+    {0xc6ab0000}, {0xc6ab2000}, {0xc6ab4000}, {0xc6ab6000}, 
+    {0xc6ab8000}, {0xc6aba000}, {0xc6abc000}, {0xc6abe000}, 
+    {0xc6ac0000}, {0xc6ac2000}, {0xc6ac4000}, {0xc6ac6000}, 
+    {0xc6ac8000}, {0xc6aca000}, {0xc6acc000}, {0xc6ace000}, 
+    {0xc6ad0000}, {0xc6ad2000}, {0xc6ad4000}, {0xc6ad6000}, 
+    {0xc6ad8000}, {0xc6ada000}, {0xc6adc000}, {0xc6ade000}, 
+    {0xc6ae0000}, {0xc6ae2000}, {0xc6ae4000}, {0xc6ae6000}, 
+    {0xc6ae8000}, {0xc6aea000}, {0xc6aec000}, {0xc6aee000}, 
+    {0xc6af0000}, {0xc6af2000}, {0xc6af4000}, {0xc6af6000}, 
+    {0xc6af8000}, {0xc6afa000}, {0xc6afc000}, {0xc6afe000}, 
+    {0xc6b00000}, {0xc6b02000}, {0xc6b04000}, {0xc6b06000}, 
+    {0xc6b08000}, {0xc6b0a000}, {0xc6b0c000}, {0xc6b0e000}, 
+    {0xc6b10000}, {0xc6b12000}, {0xc6b14000}, {0xc6b16000}, 
+    {0xc6b18000}, {0xc6b1a000}, {0xc6b1c000}, {0xc6b1e000}, 
+    {0xc6b20000}, {0xc6b22000}, {0xc6b24000}, {0xc6b26000}, 
+    {0xc6b28000}, {0xc6b2a000}, {0xc6b2c000}, {0xc6b2e000}, 
+    {0xc6b30000}, {0xc6b32000}, {0xc6b34000}, {0xc6b36000}, 
+    {0xc6b38000}, {0xc6b3a000}, {0xc6b3c000}, {0xc6b3e000}, 
+    {0xc6b40000}, {0xc6b42000}, {0xc6b44000}, {0xc6b46000}, 
+    {0xc6b48000}, {0xc6b4a000}, {0xc6b4c000}, {0xc6b4e000}, 
+    {0xc6b50000}, {0xc6b52000}, {0xc6b54000}, {0xc6b56000}, 
+    {0xc6b58000}, {0xc6b5a000}, {0xc6b5c000}, {0xc6b5e000}, 
+    {0xc6b60000}, {0xc6b62000}, {0xc6b64000}, {0xc6b66000}, 
+    {0xc6b68000}, {0xc6b6a000}, {0xc6b6c000}, {0xc6b6e000}, 
+    {0xc6b70000}, {0xc6b72000}, {0xc6b74000}, {0xc6b76000}, 
+    {0xc6b78000}, {0xc6b7a000}, {0xc6b7c000}, {0xc6b7e000}, 
+    {0xc6b80000}, {0xc6b82000}, {0xc6b84000}, {0xc6b86000}, 
+    {0xc6b88000}, {0xc6b8a000}, {0xc6b8c000}, {0xc6b8e000}, 
+    {0xc6b90000}, {0xc6b92000}, {0xc6b94000}, {0xc6b96000}, 
+    {0xc6b98000}, {0xc6b9a000}, {0xc6b9c000}, {0xc6b9e000}, 
+    {0xc6ba0000}, {0xc6ba2000}, {0xc6ba4000}, {0xc6ba6000}, 
+    {0xc6ba8000}, {0xc6baa000}, {0xc6bac000}, {0xc6bae000}, 
+    {0xc6bb0000}, {0xc6bb2000}, {0xc6bb4000}, {0xc6bb6000}, 
+    {0xc6bb8000}, {0xc6bba000}, {0xc6bbc000}, {0xc6bbe000}, 
+    {0xc6bc0000}, {0xc6bc2000}, {0xc6bc4000}, {0xc6bc6000}, 
+    {0xc6bc8000}, {0xc6bca000}, {0xc6bcc000}, {0xc6bce000}, 
+    {0xc6bd0000}, {0xc6bd2000}, {0xc6bd4000}, {0xc6bd6000}, 
+    {0xc6bd8000}, {0xc6bda000}, {0xc6bdc000}, {0xc6bde000}, 
+    {0xc6be0000}, {0xc6be2000}, {0xc6be4000}, {0xc6be6000}, 
+    {0xc6be8000}, {0xc6bea000}, {0xc6bec000}, {0xc6bee000}, 
+    {0xc6bf0000}, {0xc6bf2000}, {0xc6bf4000}, {0xc6bf6000}, 
+    {0xc6bf8000}, {0xc6bfa000}, {0xc6bfc000}, {0xc6bfe000}, 
+    {0xc6c00000}, {0xc6c02000}, {0xc6c04000}, {0xc6c06000}, 
+    {0xc6c08000}, {0xc6c0a000}, {0xc6c0c000}, {0xc6c0e000}, 
+    {0xc6c10000}, {0xc6c12000}, {0xc6c14000}, {0xc6c16000}, 
+    {0xc6c18000}, {0xc6c1a000}, {0xc6c1c000}, {0xc6c1e000}, 
+    {0xc6c20000}, {0xc6c22000}, {0xc6c24000}, {0xc6c26000}, 
+    {0xc6c28000}, {0xc6c2a000}, {0xc6c2c000}, {0xc6c2e000}, 
+    {0xc6c30000}, {0xc6c32000}, {0xc6c34000}, {0xc6c36000}, 
+    {0xc6c38000}, {0xc6c3a000}, {0xc6c3c000}, {0xc6c3e000}, 
+    {0xc6c40000}, {0xc6c42000}, {0xc6c44000}, {0xc6c46000}, 
+    {0xc6c48000}, {0xc6c4a000}, {0xc6c4c000}, {0xc6c4e000}, 
+    {0xc6c50000}, {0xc6c52000}, {0xc6c54000}, {0xc6c56000}, 
+    {0xc6c58000}, {0xc6c5a000}, {0xc6c5c000}, {0xc6c5e000}, 
+    {0xc6c60000}, {0xc6c62000}, {0xc6c64000}, {0xc6c66000}, 
+    {0xc6c68000}, {0xc6c6a000}, {0xc6c6c000}, {0xc6c6e000}, 
+    {0xc6c70000}, {0xc6c72000}, {0xc6c74000}, {0xc6c76000}, 
+    {0xc6c78000}, {0xc6c7a000}, {0xc6c7c000}, {0xc6c7e000}, 
+    {0xc6c80000}, {0xc6c82000}, {0xc6c84000}, {0xc6c86000}, 
+    {0xc6c88000}, {0xc6c8a000}, {0xc6c8c000}, {0xc6c8e000}, 
+    {0xc6c90000}, {0xc6c92000}, {0xc6c94000}, {0xc6c96000}, 
+    {0xc6c98000}, {0xc6c9a000}, {0xc6c9c000}, {0xc6c9e000}, 
+    {0xc6ca0000}, {0xc6ca2000}, {0xc6ca4000}, {0xc6ca6000}, 
+    {0xc6ca8000}, {0xc6caa000}, {0xc6cac000}, {0xc6cae000}, 
+    {0xc6cb0000}, {0xc6cb2000}, {0xc6cb4000}, {0xc6cb6000}, 
+    {0xc6cb8000}, {0xc6cba000}, {0xc6cbc000}, {0xc6cbe000}, 
+    {0xc6cc0000}, {0xc6cc2000}, {0xc6cc4000}, {0xc6cc6000}, 
+    {0xc6cc8000}, {0xc6cca000}, {0xc6ccc000}, {0xc6cce000}, 
+    {0xc6cd0000}, {0xc6cd2000}, {0xc6cd4000}, {0xc6cd6000}, 
+    {0xc6cd8000}, {0xc6cda000}, {0xc6cdc000}, {0xc6cde000}, 
+    {0xc6ce0000}, {0xc6ce2000}, {0xc6ce4000}, {0xc6ce6000}, 
+    {0xc6ce8000}, {0xc6cea000}, {0xc6cec000}, {0xc6cee000}, 
+    {0xc6cf0000}, {0xc6cf2000}, {0xc6cf4000}, {0xc6cf6000}, 
+    {0xc6cf8000}, {0xc6cfa000}, {0xc6cfc000}, {0xc6cfe000}, 
+    {0xc6d00000}, {0xc6d02000}, {0xc6d04000}, {0xc6d06000}, 
+    {0xc6d08000}, {0xc6d0a000}, {0xc6d0c000}, {0xc6d0e000}, 
+    {0xc6d10000}, {0xc6d12000}, {0xc6d14000}, {0xc6d16000}, 
+    {0xc6d18000}, {0xc6d1a000}, {0xc6d1c000}, {0xc6d1e000}, 
+    {0xc6d20000}, {0xc6d22000}, {0xc6d24000}, {0xc6d26000}, 
+    {0xc6d28000}, {0xc6d2a000}, {0xc6d2c000}, {0xc6d2e000}, 
+    {0xc6d30000}, {0xc6d32000}, {0xc6d34000}, {0xc6d36000}, 
+    {0xc6d38000}, {0xc6d3a000}, {0xc6d3c000}, {0xc6d3e000}, 
+    {0xc6d40000}, {0xc6d42000}, {0xc6d44000}, {0xc6d46000}, 
+    {0xc6d48000}, {0xc6d4a000}, {0xc6d4c000}, {0xc6d4e000}, 
+    {0xc6d50000}, {0xc6d52000}, {0xc6d54000}, {0xc6d56000}, 
+    {0xc6d58000}, {0xc6d5a000}, {0xc6d5c000}, {0xc6d5e000}, 
+    {0xc6d60000}, {0xc6d62000}, {0xc6d64000}, {0xc6d66000}, 
+    {0xc6d68000}, {0xc6d6a000}, {0xc6d6c000}, {0xc6d6e000}, 
+    {0xc6d70000}, {0xc6d72000}, {0xc6d74000}, {0xc6d76000}, 
+    {0xc6d78000}, {0xc6d7a000}, {0xc6d7c000}, {0xc6d7e000}, 
+    {0xc6d80000}, {0xc6d82000}, {0xc6d84000}, {0xc6d86000}, 
+    {0xc6d88000}, {0xc6d8a000}, {0xc6d8c000}, {0xc6d8e000}, 
+    {0xc6d90000}, {0xc6d92000}, {0xc6d94000}, {0xc6d96000}, 
+    {0xc6d98000}, {0xc6d9a000}, {0xc6d9c000}, {0xc6d9e000}, 
+    {0xc6da0000}, {0xc6da2000}, {0xc6da4000}, {0xc6da6000}, 
+    {0xc6da8000}, {0xc6daa000}, {0xc6dac000}, {0xc6dae000}, 
+    {0xc6db0000}, {0xc6db2000}, {0xc6db4000}, {0xc6db6000}, 
+    {0xc6db8000}, {0xc6dba000}, {0xc6dbc000}, {0xc6dbe000}, 
+    {0xc6dc0000}, {0xc6dc2000}, {0xc6dc4000}, {0xc6dc6000}, 
+    {0xc6dc8000}, {0xc6dca000}, {0xc6dcc000}, {0xc6dce000}, 
+    {0xc6dd0000}, {0xc6dd2000}, {0xc6dd4000}, {0xc6dd6000}, 
+    {0xc6dd8000}, {0xc6dda000}, {0xc6ddc000}, {0xc6dde000}, 
+    {0xc6de0000}, {0xc6de2000}, {0xc6de4000}, {0xc6de6000}, 
+    {0xc6de8000}, {0xc6dea000}, {0xc6dec000}, {0xc6dee000}, 
+    {0xc6df0000}, {0xc6df2000}, {0xc6df4000}, {0xc6df6000}, 
+    {0xc6df8000}, {0xc6dfa000}, {0xc6dfc000}, {0xc6dfe000}, 
+    {0xc6e00000}, {0xc6e02000}, {0xc6e04000}, {0xc6e06000}, 
+    {0xc6e08000}, {0xc6e0a000}, {0xc6e0c000}, {0xc6e0e000}, 
+    {0xc6e10000}, {0xc6e12000}, {0xc6e14000}, {0xc6e16000}, 
+    {0xc6e18000}, {0xc6e1a000}, {0xc6e1c000}, {0xc6e1e000}, 
+    {0xc6e20000}, {0xc6e22000}, {0xc6e24000}, {0xc6e26000}, 
+    {0xc6e28000}, {0xc6e2a000}, {0xc6e2c000}, {0xc6e2e000}, 
+    {0xc6e30000}, {0xc6e32000}, {0xc6e34000}, {0xc6e36000}, 
+    {0xc6e38000}, {0xc6e3a000}, {0xc6e3c000}, {0xc6e3e000}, 
+    {0xc6e40000}, {0xc6e42000}, {0xc6e44000}, {0xc6e46000}, 
+    {0xc6e48000}, {0xc6e4a000}, {0xc6e4c000}, {0xc6e4e000}, 
+    {0xc6e50000}, {0xc6e52000}, {0xc6e54000}, {0xc6e56000}, 
+    {0xc6e58000}, {0xc6e5a000}, {0xc6e5c000}, {0xc6e5e000}, 
+    {0xc6e60000}, {0xc6e62000}, {0xc6e64000}, {0xc6e66000}, 
+    {0xc6e68000}, {0xc6e6a000}, {0xc6e6c000}, {0xc6e6e000}, 
+    {0xc6e70000}, {0xc6e72000}, {0xc6e74000}, {0xc6e76000}, 
+    {0xc6e78000}, {0xc6e7a000}, {0xc6e7c000}, {0xc6e7e000}, 
+    {0xc6e80000}, {0xc6e82000}, {0xc6e84000}, {0xc6e86000}, 
+    {0xc6e88000}, {0xc6e8a000}, {0xc6e8c000}, {0xc6e8e000}, 
+    {0xc6e90000}, {0xc6e92000}, {0xc6e94000}, {0xc6e96000}, 
+    {0xc6e98000}, {0xc6e9a000}, {0xc6e9c000}, {0xc6e9e000}, 
+    {0xc6ea0000}, {0xc6ea2000}, {0xc6ea4000}, {0xc6ea6000}, 
+    {0xc6ea8000}, {0xc6eaa000}, {0xc6eac000}, {0xc6eae000}, 
+    {0xc6eb0000}, {0xc6eb2000}, {0xc6eb4000}, {0xc6eb6000}, 
+    {0xc6eb8000}, {0xc6eba000}, {0xc6ebc000}, {0xc6ebe000}, 
+    {0xc6ec0000}, {0xc6ec2000}, {0xc6ec4000}, {0xc6ec6000}, 
+    {0xc6ec8000}, {0xc6eca000}, {0xc6ecc000}, {0xc6ece000}, 
+    {0xc6ed0000}, {0xc6ed2000}, {0xc6ed4000}, {0xc6ed6000}, 
+    {0xc6ed8000}, {0xc6eda000}, {0xc6edc000}, {0xc6ede000}, 
+    {0xc6ee0000}, {0xc6ee2000}, {0xc6ee4000}, {0xc6ee6000}, 
+    {0xc6ee8000}, {0xc6eea000}, {0xc6eec000}, {0xc6eee000}, 
+    {0xc6ef0000}, {0xc6ef2000}, {0xc6ef4000}, {0xc6ef6000}, 
+    {0xc6ef8000}, {0xc6efa000}, {0xc6efc000}, {0xc6efe000}, 
+    {0xc6f00000}, {0xc6f02000}, {0xc6f04000}, {0xc6f06000}, 
+    {0xc6f08000}, {0xc6f0a000}, {0xc6f0c000}, {0xc6f0e000}, 
+    {0xc6f10000}, {0xc6f12000}, {0xc6f14000}, {0xc6f16000}, 
+    {0xc6f18000}, {0xc6f1a000}, {0xc6f1c000}, {0xc6f1e000}, 
+    {0xc6f20000}, {0xc6f22000}, {0xc6f24000}, {0xc6f26000}, 
+    {0xc6f28000}, {0xc6f2a000}, {0xc6f2c000}, {0xc6f2e000}, 
+    {0xc6f30000}, {0xc6f32000}, {0xc6f34000}, {0xc6f36000}, 
+    {0xc6f38000}, {0xc6f3a000}, {0xc6f3c000}, {0xc6f3e000}, 
+    {0xc6f40000}, {0xc6f42000}, {0xc6f44000}, {0xc6f46000}, 
+    {0xc6f48000}, {0xc6f4a000}, {0xc6f4c000}, {0xc6f4e000}, 
+    {0xc6f50000}, {0xc6f52000}, {0xc6f54000}, {0xc6f56000}, 
+    {0xc6f58000}, {0xc6f5a000}, {0xc6f5c000}, {0xc6f5e000}, 
+    {0xc6f60000}, {0xc6f62000}, {0xc6f64000}, {0xc6f66000}, 
+    {0xc6f68000}, {0xc6f6a000}, {0xc6f6c000}, {0xc6f6e000}, 
+    {0xc6f70000}, {0xc6f72000}, {0xc6f74000}, {0xc6f76000}, 
+    {0xc6f78000}, {0xc6f7a000}, {0xc6f7c000}, {0xc6f7e000}, 
+    {0xc6f80000}, {0xc6f82000}, {0xc6f84000}, {0xc6f86000}, 
+    {0xc6f88000}, {0xc6f8a000}, {0xc6f8c000}, {0xc6f8e000}, 
+    {0xc6f90000}, {0xc6f92000}, {0xc6f94000}, {0xc6f96000}, 
+    {0xc6f98000}, {0xc6f9a000}, {0xc6f9c000}, {0xc6f9e000}, 
+    {0xc6fa0000}, {0xc6fa2000}, {0xc6fa4000}, {0xc6fa6000}, 
+    {0xc6fa8000}, {0xc6faa000}, {0xc6fac000}, {0xc6fae000}, 
+    {0xc6fb0000}, {0xc6fb2000}, {0xc6fb4000}, {0xc6fb6000}, 
+    {0xc6fb8000}, {0xc6fba000}, {0xc6fbc000}, {0xc6fbe000}, 
+    {0xc6fc0000}, {0xc6fc2000}, {0xc6fc4000}, {0xc6fc6000}, 
+    {0xc6fc8000}, {0xc6fca000}, {0xc6fcc000}, {0xc6fce000}, 
+    {0xc6fd0000}, {0xc6fd2000}, {0xc6fd4000}, {0xc6fd6000}, 
+    {0xc6fd8000}, {0xc6fda000}, {0xc6fdc000}, {0xc6fde000}, 
+    {0xc6fe0000}, {0xc6fe2000}, {0xc6fe4000}, {0xc6fe6000}, 
+    {0xc6fe8000}, {0xc6fea000}, {0xc6fec000}, {0xc6fee000}, 
+    {0xc6ff0000}, {0xc6ff2000}, {0xc6ff4000}, {0xc6ff6000}, 
+    {0xc6ff8000}, {0xc6ffa000}, {0xc6ffc000}, {0xc6ffe000}, 
+    {0xc7000000}, {0xc7002000}, {0xc7004000}, {0xc7006000}, 
+    {0xc7008000}, {0xc700a000}, {0xc700c000}, {0xc700e000}, 
+    {0xc7010000}, {0xc7012000}, {0xc7014000}, {0xc7016000}, 
+    {0xc7018000}, {0xc701a000}, {0xc701c000}, {0xc701e000}, 
+    {0xc7020000}, {0xc7022000}, {0xc7024000}, {0xc7026000}, 
+    {0xc7028000}, {0xc702a000}, {0xc702c000}, {0xc702e000}, 
+    {0xc7030000}, {0xc7032000}, {0xc7034000}, {0xc7036000}, 
+    {0xc7038000}, {0xc703a000}, {0xc703c000}, {0xc703e000}, 
+    {0xc7040000}, {0xc7042000}, {0xc7044000}, {0xc7046000}, 
+    {0xc7048000}, {0xc704a000}, {0xc704c000}, {0xc704e000}, 
+    {0xc7050000}, {0xc7052000}, {0xc7054000}, {0xc7056000}, 
+    {0xc7058000}, {0xc705a000}, {0xc705c000}, {0xc705e000}, 
+    {0xc7060000}, {0xc7062000}, {0xc7064000}, {0xc7066000}, 
+    {0xc7068000}, {0xc706a000}, {0xc706c000}, {0xc706e000}, 
+    {0xc7070000}, {0xc7072000}, {0xc7074000}, {0xc7076000}, 
+    {0xc7078000}, {0xc707a000}, {0xc707c000}, {0xc707e000}, 
+    {0xc7080000}, {0xc7082000}, {0xc7084000}, {0xc7086000}, 
+    {0xc7088000}, {0xc708a000}, {0xc708c000}, {0xc708e000}, 
+    {0xc7090000}, {0xc7092000}, {0xc7094000}, {0xc7096000}, 
+    {0xc7098000}, {0xc709a000}, {0xc709c000}, {0xc709e000}, 
+    {0xc70a0000}, {0xc70a2000}, {0xc70a4000}, {0xc70a6000}, 
+    {0xc70a8000}, {0xc70aa000}, {0xc70ac000}, {0xc70ae000}, 
+    {0xc70b0000}, {0xc70b2000}, {0xc70b4000}, {0xc70b6000}, 
+    {0xc70b8000}, {0xc70ba000}, {0xc70bc000}, {0xc70be000}, 
+    {0xc70c0000}, {0xc70c2000}, {0xc70c4000}, {0xc70c6000}, 
+    {0xc70c8000}, {0xc70ca000}, {0xc70cc000}, {0xc70ce000}, 
+    {0xc70d0000}, {0xc70d2000}, {0xc70d4000}, {0xc70d6000}, 
+    {0xc70d8000}, {0xc70da000}, {0xc70dc000}, {0xc70de000}, 
+    {0xc70e0000}, {0xc70e2000}, {0xc70e4000}, {0xc70e6000}, 
+    {0xc70e8000}, {0xc70ea000}, {0xc70ec000}, {0xc70ee000}, 
+    {0xc70f0000}, {0xc70f2000}, {0xc70f4000}, {0xc70f6000}, 
+    {0xc70f8000}, {0xc70fa000}, {0xc70fc000}, {0xc70fe000}, 
+    {0xc7100000}, {0xc7102000}, {0xc7104000}, {0xc7106000}, 
+    {0xc7108000}, {0xc710a000}, {0xc710c000}, {0xc710e000}, 
+    {0xc7110000}, {0xc7112000}, {0xc7114000}, {0xc7116000}, 
+    {0xc7118000}, {0xc711a000}, {0xc711c000}, {0xc711e000}, 
+    {0xc7120000}, {0xc7122000}, {0xc7124000}, {0xc7126000}, 
+    {0xc7128000}, {0xc712a000}, {0xc712c000}, {0xc712e000}, 
+    {0xc7130000}, {0xc7132000}, {0xc7134000}, {0xc7136000}, 
+    {0xc7138000}, {0xc713a000}, {0xc713c000}, {0xc713e000}, 
+    {0xc7140000}, {0xc7142000}, {0xc7144000}, {0xc7146000}, 
+    {0xc7148000}, {0xc714a000}, {0xc714c000}, {0xc714e000}, 
+    {0xc7150000}, {0xc7152000}, {0xc7154000}, {0xc7156000}, 
+    {0xc7158000}, {0xc715a000}, {0xc715c000}, {0xc715e000}, 
+    {0xc7160000}, {0xc7162000}, {0xc7164000}, {0xc7166000}, 
+    {0xc7168000}, {0xc716a000}, {0xc716c000}, {0xc716e000}, 
+    {0xc7170000}, {0xc7172000}, {0xc7174000}, {0xc7176000}, 
+    {0xc7178000}, {0xc717a000}, {0xc717c000}, {0xc717e000}, 
+    {0xc7180000}, {0xc7182000}, {0xc7184000}, {0xc7186000}, 
+    {0xc7188000}, {0xc718a000}, {0xc718c000}, {0xc718e000}, 
+    {0xc7190000}, {0xc7192000}, {0xc7194000}, {0xc7196000}, 
+    {0xc7198000}, {0xc719a000}, {0xc719c000}, {0xc719e000}, 
+    {0xc71a0000}, {0xc71a2000}, {0xc71a4000}, {0xc71a6000}, 
+    {0xc71a8000}, {0xc71aa000}, {0xc71ac000}, {0xc71ae000}, 
+    {0xc71b0000}, {0xc71b2000}, {0xc71b4000}, {0xc71b6000}, 
+    {0xc71b8000}, {0xc71ba000}, {0xc71bc000}, {0xc71be000}, 
+    {0xc71c0000}, {0xc71c2000}, {0xc71c4000}, {0xc71c6000}, 
+    {0xc71c8000}, {0xc71ca000}, {0xc71cc000}, {0xc71ce000}, 
+    {0xc71d0000}, {0xc71d2000}, {0xc71d4000}, {0xc71d6000}, 
+    {0xc71d8000}, {0xc71da000}, {0xc71dc000}, {0xc71de000}, 
+    {0xc71e0000}, {0xc71e2000}, {0xc71e4000}, {0xc71e6000}, 
+    {0xc71e8000}, {0xc71ea000}, {0xc71ec000}, {0xc71ee000}, 
+    {0xc71f0000}, {0xc71f2000}, {0xc71f4000}, {0xc71f6000}, 
+    {0xc71f8000}, {0xc71fa000}, {0xc71fc000}, {0xc71fe000}, 
+    {0xc7200000}, {0xc7202000}, {0xc7204000}, {0xc7206000}, 
+    {0xc7208000}, {0xc720a000}, {0xc720c000}, {0xc720e000}, 
+    {0xc7210000}, {0xc7212000}, {0xc7214000}, {0xc7216000}, 
+    {0xc7218000}, {0xc721a000}, {0xc721c000}, {0xc721e000}, 
+    {0xc7220000}, {0xc7222000}, {0xc7224000}, {0xc7226000}, 
+    {0xc7228000}, {0xc722a000}, {0xc722c000}, {0xc722e000}, 
+    {0xc7230000}, {0xc7232000}, {0xc7234000}, {0xc7236000}, 
+    {0xc7238000}, {0xc723a000}, {0xc723c000}, {0xc723e000}, 
+    {0xc7240000}, {0xc7242000}, {0xc7244000}, {0xc7246000}, 
+    {0xc7248000}, {0xc724a000}, {0xc724c000}, {0xc724e000}, 
+    {0xc7250000}, {0xc7252000}, {0xc7254000}, {0xc7256000}, 
+    {0xc7258000}, {0xc725a000}, {0xc725c000}, {0xc725e000}, 
+    {0xc7260000}, {0xc7262000}, {0xc7264000}, {0xc7266000}, 
+    {0xc7268000}, {0xc726a000}, {0xc726c000}, {0xc726e000}, 
+    {0xc7270000}, {0xc7272000}, {0xc7274000}, {0xc7276000}, 
+    {0xc7278000}, {0xc727a000}, {0xc727c000}, {0xc727e000}, 
+    {0xc7280000}, {0xc7282000}, {0xc7284000}, {0xc7286000}, 
+    {0xc7288000}, {0xc728a000}, {0xc728c000}, {0xc728e000}, 
+    {0xc7290000}, {0xc7292000}, {0xc7294000}, {0xc7296000}, 
+    {0xc7298000}, {0xc729a000}, {0xc729c000}, {0xc729e000}, 
+    {0xc72a0000}, {0xc72a2000}, {0xc72a4000}, {0xc72a6000}, 
+    {0xc72a8000}, {0xc72aa000}, {0xc72ac000}, {0xc72ae000}, 
+    {0xc72b0000}, {0xc72b2000}, {0xc72b4000}, {0xc72b6000}, 
+    {0xc72b8000}, {0xc72ba000}, {0xc72bc000}, {0xc72be000}, 
+    {0xc72c0000}, {0xc72c2000}, {0xc72c4000}, {0xc72c6000}, 
+    {0xc72c8000}, {0xc72ca000}, {0xc72cc000}, {0xc72ce000}, 
+    {0xc72d0000}, {0xc72d2000}, {0xc72d4000}, {0xc72d6000}, 
+    {0xc72d8000}, {0xc72da000}, {0xc72dc000}, {0xc72de000}, 
+    {0xc72e0000}, {0xc72e2000}, {0xc72e4000}, {0xc72e6000}, 
+    {0xc72e8000}, {0xc72ea000}, {0xc72ec000}, {0xc72ee000}, 
+    {0xc72f0000}, {0xc72f2000}, {0xc72f4000}, {0xc72f6000}, 
+    {0xc72f8000}, {0xc72fa000}, {0xc72fc000}, {0xc72fe000}, 
+    {0xc7300000}, {0xc7302000}, {0xc7304000}, {0xc7306000}, 
+    {0xc7308000}, {0xc730a000}, {0xc730c000}, {0xc730e000}, 
+    {0xc7310000}, {0xc7312000}, {0xc7314000}, {0xc7316000}, 
+    {0xc7318000}, {0xc731a000}, {0xc731c000}, {0xc731e000}, 
+    {0xc7320000}, {0xc7322000}, {0xc7324000}, {0xc7326000}, 
+    {0xc7328000}, {0xc732a000}, {0xc732c000}, {0xc732e000}, 
+    {0xc7330000}, {0xc7332000}, {0xc7334000}, {0xc7336000}, 
+    {0xc7338000}, {0xc733a000}, {0xc733c000}, {0xc733e000}, 
+    {0xc7340000}, {0xc7342000}, {0xc7344000}, {0xc7346000}, 
+    {0xc7348000}, {0xc734a000}, {0xc734c000}, {0xc734e000}, 
+    {0xc7350000}, {0xc7352000}, {0xc7354000}, {0xc7356000}, 
+    {0xc7358000}, {0xc735a000}, {0xc735c000}, {0xc735e000}, 
+    {0xc7360000}, {0xc7362000}, {0xc7364000}, {0xc7366000}, 
+    {0xc7368000}, {0xc736a000}, {0xc736c000}, {0xc736e000}, 
+    {0xc7370000}, {0xc7372000}, {0xc7374000}, {0xc7376000}, 
+    {0xc7378000}, {0xc737a000}, {0xc737c000}, {0xc737e000}, 
+    {0xc7380000}, {0xc7382000}, {0xc7384000}, {0xc7386000}, 
+    {0xc7388000}, {0xc738a000}, {0xc738c000}, {0xc738e000}, 
+    {0xc7390000}, {0xc7392000}, {0xc7394000}, {0xc7396000}, 
+    {0xc7398000}, {0xc739a000}, {0xc739c000}, {0xc739e000}, 
+    {0xc73a0000}, {0xc73a2000}, {0xc73a4000}, {0xc73a6000}, 
+    {0xc73a8000}, {0xc73aa000}, {0xc73ac000}, {0xc73ae000}, 
+    {0xc73b0000}, {0xc73b2000}, {0xc73b4000}, {0xc73b6000}, 
+    {0xc73b8000}, {0xc73ba000}, {0xc73bc000}, {0xc73be000}, 
+    {0xc73c0000}, {0xc73c2000}, {0xc73c4000}, {0xc73c6000}, 
+    {0xc73c8000}, {0xc73ca000}, {0xc73cc000}, {0xc73ce000}, 
+    {0xc73d0000}, {0xc73d2000}, {0xc73d4000}, {0xc73d6000}, 
+    {0xc73d8000}, {0xc73da000}, {0xc73dc000}, {0xc73de000}, 
+    {0xc73e0000}, {0xc73e2000}, {0xc73e4000}, {0xc73e6000}, 
+    {0xc73e8000}, {0xc73ea000}, {0xc73ec000}, {0xc73ee000}, 
+    {0xc73f0000}, {0xc73f2000}, {0xc73f4000}, {0xc73f6000}, 
+    {0xc73f8000}, {0xc73fa000}, {0xc73fc000}, {0xc73fe000}, 
+    {0xc7400000}, {0xc7402000}, {0xc7404000}, {0xc7406000}, 
+    {0xc7408000}, {0xc740a000}, {0xc740c000}, {0xc740e000}, 
+    {0xc7410000}, {0xc7412000}, {0xc7414000}, {0xc7416000}, 
+    {0xc7418000}, {0xc741a000}, {0xc741c000}, {0xc741e000}, 
+    {0xc7420000}, {0xc7422000}, {0xc7424000}, {0xc7426000}, 
+    {0xc7428000}, {0xc742a000}, {0xc742c000}, {0xc742e000}, 
+    {0xc7430000}, {0xc7432000}, {0xc7434000}, {0xc7436000}, 
+    {0xc7438000}, {0xc743a000}, {0xc743c000}, {0xc743e000}, 
+    {0xc7440000}, {0xc7442000}, {0xc7444000}, {0xc7446000}, 
+    {0xc7448000}, {0xc744a000}, {0xc744c000}, {0xc744e000}, 
+    {0xc7450000}, {0xc7452000}, {0xc7454000}, {0xc7456000}, 
+    {0xc7458000}, {0xc745a000}, {0xc745c000}, {0xc745e000}, 
+    {0xc7460000}, {0xc7462000}, {0xc7464000}, {0xc7466000}, 
+    {0xc7468000}, {0xc746a000}, {0xc746c000}, {0xc746e000}, 
+    {0xc7470000}, {0xc7472000}, {0xc7474000}, {0xc7476000}, 
+    {0xc7478000}, {0xc747a000}, {0xc747c000}, {0xc747e000}, 
+    {0xc7480000}, {0xc7482000}, {0xc7484000}, {0xc7486000}, 
+    {0xc7488000}, {0xc748a000}, {0xc748c000}, {0xc748e000}, 
+    {0xc7490000}, {0xc7492000}, {0xc7494000}, {0xc7496000}, 
+    {0xc7498000}, {0xc749a000}, {0xc749c000}, {0xc749e000}, 
+    {0xc74a0000}, {0xc74a2000}, {0xc74a4000}, {0xc74a6000}, 
+    {0xc74a8000}, {0xc74aa000}, {0xc74ac000}, {0xc74ae000}, 
+    {0xc74b0000}, {0xc74b2000}, {0xc74b4000}, {0xc74b6000}, 
+    {0xc74b8000}, {0xc74ba000}, {0xc74bc000}, {0xc74be000}, 
+    {0xc74c0000}, {0xc74c2000}, {0xc74c4000}, {0xc74c6000}, 
+    {0xc74c8000}, {0xc74ca000}, {0xc74cc000}, {0xc74ce000}, 
+    {0xc74d0000}, {0xc74d2000}, {0xc74d4000}, {0xc74d6000}, 
+    {0xc74d8000}, {0xc74da000}, {0xc74dc000}, {0xc74de000}, 
+    {0xc74e0000}, {0xc74e2000}, {0xc74e4000}, {0xc74e6000}, 
+    {0xc74e8000}, {0xc74ea000}, {0xc74ec000}, {0xc74ee000}, 
+    {0xc74f0000}, {0xc74f2000}, {0xc74f4000}, {0xc74f6000}, 
+    {0xc74f8000}, {0xc74fa000}, {0xc74fc000}, {0xc74fe000}, 
+    {0xc7500000}, {0xc7502000}, {0xc7504000}, {0xc7506000}, 
+    {0xc7508000}, {0xc750a000}, {0xc750c000}, {0xc750e000}, 
+    {0xc7510000}, {0xc7512000}, {0xc7514000}, {0xc7516000}, 
+    {0xc7518000}, {0xc751a000}, {0xc751c000}, {0xc751e000}, 
+    {0xc7520000}, {0xc7522000}, {0xc7524000}, {0xc7526000}, 
+    {0xc7528000}, {0xc752a000}, {0xc752c000}, {0xc752e000}, 
+    {0xc7530000}, {0xc7532000}, {0xc7534000}, {0xc7536000}, 
+    {0xc7538000}, {0xc753a000}, {0xc753c000}, {0xc753e000}, 
+    {0xc7540000}, {0xc7542000}, {0xc7544000}, {0xc7546000}, 
+    {0xc7548000}, {0xc754a000}, {0xc754c000}, {0xc754e000}, 
+    {0xc7550000}, {0xc7552000}, {0xc7554000}, {0xc7556000}, 
+    {0xc7558000}, {0xc755a000}, {0xc755c000}, {0xc755e000}, 
+    {0xc7560000}, {0xc7562000}, {0xc7564000}, {0xc7566000}, 
+    {0xc7568000}, {0xc756a000}, {0xc756c000}, {0xc756e000}, 
+    {0xc7570000}, {0xc7572000}, {0xc7574000}, {0xc7576000}, 
+    {0xc7578000}, {0xc757a000}, {0xc757c000}, {0xc757e000}, 
+    {0xc7580000}, {0xc7582000}, {0xc7584000}, {0xc7586000}, 
+    {0xc7588000}, {0xc758a000}, {0xc758c000}, {0xc758e000}, 
+    {0xc7590000}, {0xc7592000}, {0xc7594000}, {0xc7596000}, 
+    {0xc7598000}, {0xc759a000}, {0xc759c000}, {0xc759e000}, 
+    {0xc75a0000}, {0xc75a2000}, {0xc75a4000}, {0xc75a6000}, 
+    {0xc75a8000}, {0xc75aa000}, {0xc75ac000}, {0xc75ae000}, 
+    {0xc75b0000}, {0xc75b2000}, {0xc75b4000}, {0xc75b6000}, 
+    {0xc75b8000}, {0xc75ba000}, {0xc75bc000}, {0xc75be000}, 
+    {0xc75c0000}, {0xc75c2000}, {0xc75c4000}, {0xc75c6000}, 
+    {0xc75c8000}, {0xc75ca000}, {0xc75cc000}, {0xc75ce000}, 
+    {0xc75d0000}, {0xc75d2000}, {0xc75d4000}, {0xc75d6000}, 
+    {0xc75d8000}, {0xc75da000}, {0xc75dc000}, {0xc75de000}, 
+    {0xc75e0000}, {0xc75e2000}, {0xc75e4000}, {0xc75e6000}, 
+    {0xc75e8000}, {0xc75ea000}, {0xc75ec000}, {0xc75ee000}, 
+    {0xc75f0000}, {0xc75f2000}, {0xc75f4000}, {0xc75f6000}, 
+    {0xc75f8000}, {0xc75fa000}, {0xc75fc000}, {0xc75fe000}, 
+    {0xc7600000}, {0xc7602000}, {0xc7604000}, {0xc7606000}, 
+    {0xc7608000}, {0xc760a000}, {0xc760c000}, {0xc760e000}, 
+    {0xc7610000}, {0xc7612000}, {0xc7614000}, {0xc7616000}, 
+    {0xc7618000}, {0xc761a000}, {0xc761c000}, {0xc761e000}, 
+    {0xc7620000}, {0xc7622000}, {0xc7624000}, {0xc7626000}, 
+    {0xc7628000}, {0xc762a000}, {0xc762c000}, {0xc762e000}, 
+    {0xc7630000}, {0xc7632000}, {0xc7634000}, {0xc7636000}, 
+    {0xc7638000}, {0xc763a000}, {0xc763c000}, {0xc763e000}, 
+    {0xc7640000}, {0xc7642000}, {0xc7644000}, {0xc7646000}, 
+    {0xc7648000}, {0xc764a000}, {0xc764c000}, {0xc764e000}, 
+    {0xc7650000}, {0xc7652000}, {0xc7654000}, {0xc7656000}, 
+    {0xc7658000}, {0xc765a000}, {0xc765c000}, {0xc765e000}, 
+    {0xc7660000}, {0xc7662000}, {0xc7664000}, {0xc7666000}, 
+    {0xc7668000}, {0xc766a000}, {0xc766c000}, {0xc766e000}, 
+    {0xc7670000}, {0xc7672000}, {0xc7674000}, {0xc7676000}, 
+    {0xc7678000}, {0xc767a000}, {0xc767c000}, {0xc767e000}, 
+    {0xc7680000}, {0xc7682000}, {0xc7684000}, {0xc7686000}, 
+    {0xc7688000}, {0xc768a000}, {0xc768c000}, {0xc768e000}, 
+    {0xc7690000}, {0xc7692000}, {0xc7694000}, {0xc7696000}, 
+    {0xc7698000}, {0xc769a000}, {0xc769c000}, {0xc769e000}, 
+    {0xc76a0000}, {0xc76a2000}, {0xc76a4000}, {0xc76a6000}, 
+    {0xc76a8000}, {0xc76aa000}, {0xc76ac000}, {0xc76ae000}, 
+    {0xc76b0000}, {0xc76b2000}, {0xc76b4000}, {0xc76b6000}, 
+    {0xc76b8000}, {0xc76ba000}, {0xc76bc000}, {0xc76be000}, 
+    {0xc76c0000}, {0xc76c2000}, {0xc76c4000}, {0xc76c6000}, 
+    {0xc76c8000}, {0xc76ca000}, {0xc76cc000}, {0xc76ce000}, 
+    {0xc76d0000}, {0xc76d2000}, {0xc76d4000}, {0xc76d6000}, 
+    {0xc76d8000}, {0xc76da000}, {0xc76dc000}, {0xc76de000}, 
+    {0xc76e0000}, {0xc76e2000}, {0xc76e4000}, {0xc76e6000}, 
+    {0xc76e8000}, {0xc76ea000}, {0xc76ec000}, {0xc76ee000}, 
+    {0xc76f0000}, {0xc76f2000}, {0xc76f4000}, {0xc76f6000}, 
+    {0xc76f8000}, {0xc76fa000}, {0xc76fc000}, {0xc76fe000}, 
+    {0xc7700000}, {0xc7702000}, {0xc7704000}, {0xc7706000}, 
+    {0xc7708000}, {0xc770a000}, {0xc770c000}, {0xc770e000}, 
+    {0xc7710000}, {0xc7712000}, {0xc7714000}, {0xc7716000}, 
+    {0xc7718000}, {0xc771a000}, {0xc771c000}, {0xc771e000}, 
+    {0xc7720000}, {0xc7722000}, {0xc7724000}, {0xc7726000}, 
+    {0xc7728000}, {0xc772a000}, {0xc772c000}, {0xc772e000}, 
+    {0xc7730000}, {0xc7732000}, {0xc7734000}, {0xc7736000}, 
+    {0xc7738000}, {0xc773a000}, {0xc773c000}, {0xc773e000}, 
+    {0xc7740000}, {0xc7742000}, {0xc7744000}, {0xc7746000}, 
+    {0xc7748000}, {0xc774a000}, {0xc774c000}, {0xc774e000}, 
+    {0xc7750000}, {0xc7752000}, {0xc7754000}, {0xc7756000}, 
+    {0xc7758000}, {0xc775a000}, {0xc775c000}, {0xc775e000}, 
+    {0xc7760000}, {0xc7762000}, {0xc7764000}, {0xc7766000}, 
+    {0xc7768000}, {0xc776a000}, {0xc776c000}, {0xc776e000}, 
+    {0xc7770000}, {0xc7772000}, {0xc7774000}, {0xc7776000}, 
+    {0xc7778000}, {0xc777a000}, {0xc777c000}, {0xc777e000}, 
+    {0xc7780000}, {0xc7782000}, {0xc7784000}, {0xc7786000}, 
+    {0xc7788000}, {0xc778a000}, {0xc778c000}, {0xc778e000}, 
+    {0xc7790000}, {0xc7792000}, {0xc7794000}, {0xc7796000}, 
+    {0xc7798000}, {0xc779a000}, {0xc779c000}, {0xc779e000}, 
+    {0xc77a0000}, {0xc77a2000}, {0xc77a4000}, {0xc77a6000}, 
+    {0xc77a8000}, {0xc77aa000}, {0xc77ac000}, {0xc77ae000}, 
+    {0xc77b0000}, {0xc77b2000}, {0xc77b4000}, {0xc77b6000}, 
+    {0xc77b8000}, {0xc77ba000}, {0xc77bc000}, {0xc77be000}, 
+    {0xc77c0000}, {0xc77c2000}, {0xc77c4000}, {0xc77c6000}, 
+    {0xc77c8000}, {0xc77ca000}, {0xc77cc000}, {0xc77ce000}, 
+    {0xc77d0000}, {0xc77d2000}, {0xc77d4000}, {0xc77d6000}, 
+    {0xc77d8000}, {0xc77da000}, {0xc77dc000}, {0xc77de000}, 
+    {0xc77e0000}, {0xc77e2000}, {0xc77e4000}, {0xc77e6000}, 
+    {0xc77e8000}, {0xc77ea000}, {0xc77ec000}, {0xc77ee000}, 
+    {0xc77f0000}, {0xc77f2000}, {0xc77f4000}, {0xc77f6000}, 
+    {0xc77f8000}, {0xc77fa000}, {0xc77fc000}, {0xc77fe000}, 
+    {0xff800000}, {0xff802000}, {0xff804000}, {0xff806000}, 
+    {0xff808000}, {0xff80a000}, {0xff80c000}, {0xff80e000}, 
+    {0xff810000}, {0xff812000}, {0xff814000}, {0xff816000}, 
+    {0xff818000}, {0xff81a000}, {0xff81c000}, {0xff81e000}, 
+    {0xff820000}, {0xff822000}, {0xff824000}, {0xff826000}, 
+    {0xff828000}, {0xff82a000}, {0xff82c000}, {0xff82e000}, 
+    {0xff830000}, {0xff832000}, {0xff834000}, {0xff836000}, 
+    {0xff838000}, {0xff83a000}, {0xff83c000}, {0xff83e000}, 
+    {0xff840000}, {0xff842000}, {0xff844000}, {0xff846000}, 
+    {0xff848000}, {0xff84a000}, {0xff84c000}, {0xff84e000}, 
+    {0xff850000}, {0xff852000}, {0xff854000}, {0xff856000}, 
+    {0xff858000}, {0xff85a000}, {0xff85c000}, {0xff85e000}, 
+    {0xff860000}, {0xff862000}, {0xff864000}, {0xff866000}, 
+    {0xff868000}, {0xff86a000}, {0xff86c000}, {0xff86e000}, 
+    {0xff870000}, {0xff872000}, {0xff874000}, {0xff876000}, 
+    {0xff878000}, {0xff87a000}, {0xff87c000}, {0xff87e000}, 
+    {0xff880000}, {0xff882000}, {0xff884000}, {0xff886000}, 
+    {0xff888000}, {0xff88a000}, {0xff88c000}, {0xff88e000}, 
+    {0xff890000}, {0xff892000}, {0xff894000}, {0xff896000}, 
+    {0xff898000}, {0xff89a000}, {0xff89c000}, {0xff89e000}, 
+    {0xff8a0000}, {0xff8a2000}, {0xff8a4000}, {0xff8a6000}, 
+    {0xff8a8000}, {0xff8aa000}, {0xff8ac000}, {0xff8ae000}, 
+    {0xff8b0000}, {0xff8b2000}, {0xff8b4000}, {0xff8b6000}, 
+    {0xff8b8000}, {0xff8ba000}, {0xff8bc000}, {0xff8be000}, 
+    {0xff8c0000}, {0xff8c2000}, {0xff8c4000}, {0xff8c6000}, 
+    {0xff8c8000}, {0xff8ca000}, {0xff8cc000}, {0xff8ce000}, 
+    {0xff8d0000}, {0xff8d2000}, {0xff8d4000}, {0xff8d6000}, 
+    {0xff8d8000}, {0xff8da000}, {0xff8dc000}, {0xff8de000}, 
+    {0xff8e0000}, {0xff8e2000}, {0xff8e4000}, {0xff8e6000}, 
+    {0xff8e8000}, {0xff8ea000}, {0xff8ec000}, {0xff8ee000}, 
+    {0xff8f0000}, {0xff8f2000}, {0xff8f4000}, {0xff8f6000}, 
+    {0xff8f8000}, {0xff8fa000}, {0xff8fc000}, {0xff8fe000}, 
+    {0xff900000}, {0xff902000}, {0xff904000}, {0xff906000}, 
+    {0xff908000}, {0xff90a000}, {0xff90c000}, {0xff90e000}, 
+    {0xff910000}, {0xff912000}, {0xff914000}, {0xff916000}, 
+    {0xff918000}, {0xff91a000}, {0xff91c000}, {0xff91e000}, 
+    {0xff920000}, {0xff922000}, {0xff924000}, {0xff926000}, 
+    {0xff928000}, {0xff92a000}, {0xff92c000}, {0xff92e000}, 
+    {0xff930000}, {0xff932000}, {0xff934000}, {0xff936000}, 
+    {0xff938000}, {0xff93a000}, {0xff93c000}, {0xff93e000}, 
+    {0xff940000}, {0xff942000}, {0xff944000}, {0xff946000}, 
+    {0xff948000}, {0xff94a000}, {0xff94c000}, {0xff94e000}, 
+    {0xff950000}, {0xff952000}, {0xff954000}, {0xff956000}, 
+    {0xff958000}, {0xff95a000}, {0xff95c000}, {0xff95e000}, 
+    {0xff960000}, {0xff962000}, {0xff964000}, {0xff966000}, 
+    {0xff968000}, {0xff96a000}, {0xff96c000}, {0xff96e000}, 
+    {0xff970000}, {0xff972000}, {0xff974000}, {0xff976000}, 
+    {0xff978000}, {0xff97a000}, {0xff97c000}, {0xff97e000}, 
+    {0xff980000}, {0xff982000}, {0xff984000}, {0xff986000}, 
+    {0xff988000}, {0xff98a000}, {0xff98c000}, {0xff98e000}, 
+    {0xff990000}, {0xff992000}, {0xff994000}, {0xff996000}, 
+    {0xff998000}, {0xff99a000}, {0xff99c000}, {0xff99e000}, 
+    {0xff9a0000}, {0xff9a2000}, {0xff9a4000}, {0xff9a6000}, 
+    {0xff9a8000}, {0xff9aa000}, {0xff9ac000}, {0xff9ae000}, 
+    {0xff9b0000}, {0xff9b2000}, {0xff9b4000}, {0xff9b6000}, 
+    {0xff9b8000}, {0xff9ba000}, {0xff9bc000}, {0xff9be000}, 
+    {0xff9c0000}, {0xff9c2000}, {0xff9c4000}, {0xff9c6000}, 
+    {0xff9c8000}, {0xff9ca000}, {0xff9cc000}, {0xff9ce000}, 
+    {0xff9d0000}, {0xff9d2000}, {0xff9d4000}, {0xff9d6000}, 
+    {0xff9d8000}, {0xff9da000}, {0xff9dc000}, {0xff9de000}, 
+    {0xff9e0000}, {0xff9e2000}, {0xff9e4000}, {0xff9e6000}, 
+    {0xff9e8000}, {0xff9ea000}, {0xff9ec000}, {0xff9ee000}, 
+    {0xff9f0000}, {0xff9f2000}, {0xff9f4000}, {0xff9f6000}, 
+    {0xff9f8000}, {0xff9fa000}, {0xff9fc000}, {0xff9fe000}, 
+    {0xffa00000}, {0xffa02000}, {0xffa04000}, {0xffa06000}, 
+    {0xffa08000}, {0xffa0a000}, {0xffa0c000}, {0xffa0e000}, 
+    {0xffa10000}, {0xffa12000}, {0xffa14000}, {0xffa16000}, 
+    {0xffa18000}, {0xffa1a000}, {0xffa1c000}, {0xffa1e000}, 
+    {0xffa20000}, {0xffa22000}, {0xffa24000}, {0xffa26000}, 
+    {0xffa28000}, {0xffa2a000}, {0xffa2c000}, {0xffa2e000}, 
+    {0xffa30000}, {0xffa32000}, {0xffa34000}, {0xffa36000}, 
+    {0xffa38000}, {0xffa3a000}, {0xffa3c000}, {0xffa3e000}, 
+    {0xffa40000}, {0xffa42000}, {0xffa44000}, {0xffa46000}, 
+    {0xffa48000}, {0xffa4a000}, {0xffa4c000}, {0xffa4e000}, 
+    {0xffa50000}, {0xffa52000}, {0xffa54000}, {0xffa56000}, 
+    {0xffa58000}, {0xffa5a000}, {0xffa5c000}, {0xffa5e000}, 
+    {0xffa60000}, {0xffa62000}, {0xffa64000}, {0xffa66000}, 
+    {0xffa68000}, {0xffa6a000}, {0xffa6c000}, {0xffa6e000}, 
+    {0xffa70000}, {0xffa72000}, {0xffa74000}, {0xffa76000}, 
+    {0xffa78000}, {0xffa7a000}, {0xffa7c000}, {0xffa7e000}, 
+    {0xffa80000}, {0xffa82000}, {0xffa84000}, {0xffa86000}, 
+    {0xffa88000}, {0xffa8a000}, {0xffa8c000}, {0xffa8e000}, 
+    {0xffa90000}, {0xffa92000}, {0xffa94000}, {0xffa96000}, 
+    {0xffa98000}, {0xffa9a000}, {0xffa9c000}, {0xffa9e000}, 
+    {0xffaa0000}, {0xffaa2000}, {0xffaa4000}, {0xffaa6000}, 
+    {0xffaa8000}, {0xffaaa000}, {0xffaac000}, {0xffaae000}, 
+    {0xffab0000}, {0xffab2000}, {0xffab4000}, {0xffab6000}, 
+    {0xffab8000}, {0xffaba000}, {0xffabc000}, {0xffabe000}, 
+    {0xffac0000}, {0xffac2000}, {0xffac4000}, {0xffac6000}, 
+    {0xffac8000}, {0xffaca000}, {0xffacc000}, {0xfface000}, 
+    {0xffad0000}, {0xffad2000}, {0xffad4000}, {0xffad6000}, 
+    {0xffad8000}, {0xffada000}, {0xffadc000}, {0xffade000}, 
+    {0xffae0000}, {0xffae2000}, {0xffae4000}, {0xffae6000}, 
+    {0xffae8000}, {0xffaea000}, {0xffaec000}, {0xffaee000}, 
+    {0xffaf0000}, {0xffaf2000}, {0xffaf4000}, {0xffaf6000}, 
+    {0xffaf8000}, {0xffafa000}, {0xffafc000}, {0xffafe000}, 
+    {0xffb00000}, {0xffb02000}, {0xffb04000}, {0xffb06000}, 
+    {0xffb08000}, {0xffb0a000}, {0xffb0c000}, {0xffb0e000}, 
+    {0xffb10000}, {0xffb12000}, {0xffb14000}, {0xffb16000}, 
+    {0xffb18000}, {0xffb1a000}, {0xffb1c000}, {0xffb1e000}, 
+    {0xffb20000}, {0xffb22000}, {0xffb24000}, {0xffb26000}, 
+    {0xffb28000}, {0xffb2a000}, {0xffb2c000}, {0xffb2e000}, 
+    {0xffb30000}, {0xffb32000}, {0xffb34000}, {0xffb36000}, 
+    {0xffb38000}, {0xffb3a000}, {0xffb3c000}, {0xffb3e000}, 
+    {0xffb40000}, {0xffb42000}, {0xffb44000}, {0xffb46000}, 
+    {0xffb48000}, {0xffb4a000}, {0xffb4c000}, {0xffb4e000}, 
+    {0xffb50000}, {0xffb52000}, {0xffb54000}, {0xffb56000}, 
+    {0xffb58000}, {0xffb5a000}, {0xffb5c000}, {0xffb5e000}, 
+    {0xffb60000}, {0xffb62000}, {0xffb64000}, {0xffb66000}, 
+    {0xffb68000}, {0xffb6a000}, {0xffb6c000}, {0xffb6e000}, 
+    {0xffb70000}, {0xffb72000}, {0xffb74000}, {0xffb76000}, 
+    {0xffb78000}, {0xffb7a000}, {0xffb7c000}, {0xffb7e000}, 
+    {0xffb80000}, {0xffb82000}, {0xffb84000}, {0xffb86000}, 
+    {0xffb88000}, {0xffb8a000}, {0xffb8c000}, {0xffb8e000}, 
+    {0xffb90000}, {0xffb92000}, {0xffb94000}, {0xffb96000}, 
+    {0xffb98000}, {0xffb9a000}, {0xffb9c000}, {0xffb9e000}, 
+    {0xffba0000}, {0xffba2000}, {0xffba4000}, {0xffba6000}, 
+    {0xffba8000}, {0xffbaa000}, {0xffbac000}, {0xffbae000}, 
+    {0xffbb0000}, {0xffbb2000}, {0xffbb4000}, {0xffbb6000}, 
+    {0xffbb8000}, {0xffbba000}, {0xffbbc000}, {0xffbbe000}, 
+    {0xffbc0000}, {0xffbc2000}, {0xffbc4000}, {0xffbc6000}, 
+    {0xffbc8000}, {0xffbca000}, {0xffbcc000}, {0xffbce000}, 
+    {0xffbd0000}, {0xffbd2000}, {0xffbd4000}, {0xffbd6000}, 
+    {0xffbd8000}, {0xffbda000}, {0xffbdc000}, {0xffbde000}, 
+    {0xffbe0000}, {0xffbe2000}, {0xffbe4000}, {0xffbe6000}, 
+    {0xffbe8000}, {0xffbea000}, {0xffbec000}, {0xffbee000}, 
+    {0xffbf0000}, {0xffbf2000}, {0xffbf4000}, {0xffbf6000}, 
+    {0xffbf8000}, {0xffbfa000}, {0xffbfc000}, {0xffbfe000}, 
+    {0xffc00000}, {0xffc02000}, {0xffc04000}, {0xffc06000}, 
+    {0xffc08000}, {0xffc0a000}, {0xffc0c000}, {0xffc0e000}, 
+    {0xffc10000}, {0xffc12000}, {0xffc14000}, {0xffc16000}, 
+    {0xffc18000}, {0xffc1a000}, {0xffc1c000}, {0xffc1e000}, 
+    {0xffc20000}, {0xffc22000}, {0xffc24000}, {0xffc26000}, 
+    {0xffc28000}, {0xffc2a000}, {0xffc2c000}, {0xffc2e000}, 
+    {0xffc30000}, {0xffc32000}, {0xffc34000}, {0xffc36000}, 
+    {0xffc38000}, {0xffc3a000}, {0xffc3c000}, {0xffc3e000}, 
+    {0xffc40000}, {0xffc42000}, {0xffc44000}, {0xffc46000}, 
+    {0xffc48000}, {0xffc4a000}, {0xffc4c000}, {0xffc4e000}, 
+    {0xffc50000}, {0xffc52000}, {0xffc54000}, {0xffc56000}, 
+    {0xffc58000}, {0xffc5a000}, {0xffc5c000}, {0xffc5e000}, 
+    {0xffc60000}, {0xffc62000}, {0xffc64000}, {0xffc66000}, 
+    {0xffc68000}, {0xffc6a000}, {0xffc6c000}, {0xffc6e000}, 
+    {0xffc70000}, {0xffc72000}, {0xffc74000}, {0xffc76000}, 
+    {0xffc78000}, {0xffc7a000}, {0xffc7c000}, {0xffc7e000}, 
+    {0xffc80000}, {0xffc82000}, {0xffc84000}, {0xffc86000}, 
+    {0xffc88000}, {0xffc8a000}, {0xffc8c000}, {0xffc8e000}, 
+    {0xffc90000}, {0xffc92000}, {0xffc94000}, {0xffc96000}, 
+    {0xffc98000}, {0xffc9a000}, {0xffc9c000}, {0xffc9e000}, 
+    {0xffca0000}, {0xffca2000}, {0xffca4000}, {0xffca6000}, 
+    {0xffca8000}, {0xffcaa000}, {0xffcac000}, {0xffcae000}, 
+    {0xffcb0000}, {0xffcb2000}, {0xffcb4000}, {0xffcb6000}, 
+    {0xffcb8000}, {0xffcba000}, {0xffcbc000}, {0xffcbe000}, 
+    {0xffcc0000}, {0xffcc2000}, {0xffcc4000}, {0xffcc6000}, 
+    {0xffcc8000}, {0xffcca000}, {0xffccc000}, {0xffcce000}, 
+    {0xffcd0000}, {0xffcd2000}, {0xffcd4000}, {0xffcd6000}, 
+    {0xffcd8000}, {0xffcda000}, {0xffcdc000}, {0xffcde000}, 
+    {0xffce0000}, {0xffce2000}, {0xffce4000}, {0xffce6000}, 
+    {0xffce8000}, {0xffcea000}, {0xffcec000}, {0xffcee000}, 
+    {0xffcf0000}, {0xffcf2000}, {0xffcf4000}, {0xffcf6000}, 
+    {0xffcf8000}, {0xffcfa000}, {0xffcfc000}, {0xffcfe000}, 
+    {0xffd00000}, {0xffd02000}, {0xffd04000}, {0xffd06000}, 
+    {0xffd08000}, {0xffd0a000}, {0xffd0c000}, {0xffd0e000}, 
+    {0xffd10000}, {0xffd12000}, {0xffd14000}, {0xffd16000}, 
+    {0xffd18000}, {0xffd1a000}, {0xffd1c000}, {0xffd1e000}, 
+    {0xffd20000}, {0xffd22000}, {0xffd24000}, {0xffd26000}, 
+    {0xffd28000}, {0xffd2a000}, {0xffd2c000}, {0xffd2e000}, 
+    {0xffd30000}, {0xffd32000}, {0xffd34000}, {0xffd36000}, 
+    {0xffd38000}, {0xffd3a000}, {0xffd3c000}, {0xffd3e000}, 
+    {0xffd40000}, {0xffd42000}, {0xffd44000}, {0xffd46000}, 
+    {0xffd48000}, {0xffd4a000}, {0xffd4c000}, {0xffd4e000}, 
+    {0xffd50000}, {0xffd52000}, {0xffd54000}, {0xffd56000}, 
+    {0xffd58000}, {0xffd5a000}, {0xffd5c000}, {0xffd5e000}, 
+    {0xffd60000}, {0xffd62000}, {0xffd64000}, {0xffd66000}, 
+    {0xffd68000}, {0xffd6a000}, {0xffd6c000}, {0xffd6e000}, 
+    {0xffd70000}, {0xffd72000}, {0xffd74000}, {0xffd76000}, 
+    {0xffd78000}, {0xffd7a000}, {0xffd7c000}, {0xffd7e000}, 
+    {0xffd80000}, {0xffd82000}, {0xffd84000}, {0xffd86000}, 
+    {0xffd88000}, {0xffd8a000}, {0xffd8c000}, {0xffd8e000}, 
+    {0xffd90000}, {0xffd92000}, {0xffd94000}, {0xffd96000}, 
+    {0xffd98000}, {0xffd9a000}, {0xffd9c000}, {0xffd9e000}, 
+    {0xffda0000}, {0xffda2000}, {0xffda4000}, {0xffda6000}, 
+    {0xffda8000}, {0xffdaa000}, {0xffdac000}, {0xffdae000}, 
+    {0xffdb0000}, {0xffdb2000}, {0xffdb4000}, {0xffdb6000}, 
+    {0xffdb8000}, {0xffdba000}, {0xffdbc000}, {0xffdbe000}, 
+    {0xffdc0000}, {0xffdc2000}, {0xffdc4000}, {0xffdc6000}, 
+    {0xffdc8000}, {0xffdca000}, {0xffdcc000}, {0xffdce000}, 
+    {0xffdd0000}, {0xffdd2000}, {0xffdd4000}, {0xffdd6000}, 
+    {0xffdd8000}, {0xffdda000}, {0xffddc000}, {0xffdde000}, 
+    {0xffde0000}, {0xffde2000}, {0xffde4000}, {0xffde6000}, 
+    {0xffde8000}, {0xffdea000}, {0xffdec000}, {0xffdee000}, 
+    {0xffdf0000}, {0xffdf2000}, {0xffdf4000}, {0xffdf6000}, 
+    {0xffdf8000}, {0xffdfa000}, {0xffdfc000}, {0xffdfe000}, 
+    {0xffe00000}, {0xffe02000}, {0xffe04000}, {0xffe06000}, 
+    {0xffe08000}, {0xffe0a000}, {0xffe0c000}, {0xffe0e000}, 
+    {0xffe10000}, {0xffe12000}, {0xffe14000}, {0xffe16000}, 
+    {0xffe18000}, {0xffe1a000}, {0xffe1c000}, {0xffe1e000}, 
+    {0xffe20000}, {0xffe22000}, {0xffe24000}, {0xffe26000}, 
+    {0xffe28000}, {0xffe2a000}, {0xffe2c000}, {0xffe2e000}, 
+    {0xffe30000}, {0xffe32000}, {0xffe34000}, {0xffe36000}, 
+    {0xffe38000}, {0xffe3a000}, {0xffe3c000}, {0xffe3e000}, 
+    {0xffe40000}, {0xffe42000}, {0xffe44000}, {0xffe46000}, 
+    {0xffe48000}, {0xffe4a000}, {0xffe4c000}, {0xffe4e000}, 
+    {0xffe50000}, {0xffe52000}, {0xffe54000}, {0xffe56000}, 
+    {0xffe58000}, {0xffe5a000}, {0xffe5c000}, {0xffe5e000}, 
+    {0xffe60000}, {0xffe62000}, {0xffe64000}, {0xffe66000}, 
+    {0xffe68000}, {0xffe6a000}, {0xffe6c000}, {0xffe6e000}, 
+    {0xffe70000}, {0xffe72000}, {0xffe74000}, {0xffe76000}, 
+    {0xffe78000}, {0xffe7a000}, {0xffe7c000}, {0xffe7e000}, 
+    {0xffe80000}, {0xffe82000}, {0xffe84000}, {0xffe86000}, 
+    {0xffe88000}, {0xffe8a000}, {0xffe8c000}, {0xffe8e000}, 
+    {0xffe90000}, {0xffe92000}, {0xffe94000}, {0xffe96000}, 
+    {0xffe98000}, {0xffe9a000}, {0xffe9c000}, {0xffe9e000}, 
+    {0xffea0000}, {0xffea2000}, {0xffea4000}, {0xffea6000}, 
+    {0xffea8000}, {0xffeaa000}, {0xffeac000}, {0xffeae000}, 
+    {0xffeb0000}, {0xffeb2000}, {0xffeb4000}, {0xffeb6000}, 
+    {0xffeb8000}, {0xffeba000}, {0xffebc000}, {0xffebe000}, 
+    {0xffec0000}, {0xffec2000}, {0xffec4000}, {0xffec6000}, 
+    {0xffec8000}, {0xffeca000}, {0xffecc000}, {0xffece000}, 
+    {0xffed0000}, {0xffed2000}, {0xffed4000}, {0xffed6000}, 
+    {0xffed8000}, {0xffeda000}, {0xffedc000}, {0xffede000}, 
+    {0xffee0000}, {0xffee2000}, {0xffee4000}, {0xffee6000}, 
+    {0xffee8000}, {0xffeea000}, {0xffeec000}, {0xffeee000}, 
+    {0xffef0000}, {0xffef2000}, {0xffef4000}, {0xffef6000}, 
+    {0xffef8000}, {0xffefa000}, {0xffefc000}, {0xffefe000}, 
+    {0xfff00000}, {0xfff02000}, {0xfff04000}, {0xfff06000}, 
+    {0xfff08000}, {0xfff0a000}, {0xfff0c000}, {0xfff0e000}, 
+    {0xfff10000}, {0xfff12000}, {0xfff14000}, {0xfff16000}, 
+    {0xfff18000}, {0xfff1a000}, {0xfff1c000}, {0xfff1e000}, 
+    {0xfff20000}, {0xfff22000}, {0xfff24000}, {0xfff26000}, 
+    {0xfff28000}, {0xfff2a000}, {0xfff2c000}, {0xfff2e000}, 
+    {0xfff30000}, {0xfff32000}, {0xfff34000}, {0xfff36000}, 
+    {0xfff38000}, {0xfff3a000}, {0xfff3c000}, {0xfff3e000}, 
+    {0xfff40000}, {0xfff42000}, {0xfff44000}, {0xfff46000}, 
+    {0xfff48000}, {0xfff4a000}, {0xfff4c000}, {0xfff4e000}, 
+    {0xfff50000}, {0xfff52000}, {0xfff54000}, {0xfff56000}, 
+    {0xfff58000}, {0xfff5a000}, {0xfff5c000}, {0xfff5e000}, 
+    {0xfff60000}, {0xfff62000}, {0xfff64000}, {0xfff66000}, 
+    {0xfff68000}, {0xfff6a000}, {0xfff6c000}, {0xfff6e000}, 
+    {0xfff70000}, {0xfff72000}, {0xfff74000}, {0xfff76000}, 
+    {0xfff78000}, {0xfff7a000}, {0xfff7c000}, {0xfff7e000}, 
+    {0xfff80000}, {0xfff82000}, {0xfff84000}, {0xfff86000}, 
+    {0xfff88000}, {0xfff8a000}, {0xfff8c000}, {0xfff8e000}, 
+    {0xfff90000}, {0xfff92000}, {0xfff94000}, {0xfff96000}, 
+    {0xfff98000}, {0xfff9a000}, {0xfff9c000}, {0xfff9e000}, 
+    {0xfffa0000}, {0xfffa2000}, {0xfffa4000}, {0xfffa6000}, 
+    {0xfffa8000}, {0xfffaa000}, {0xfffac000}, {0xfffae000}, 
+    {0xfffb0000}, {0xfffb2000}, {0xfffb4000}, {0xfffb6000}, 
+    {0xfffb8000}, {0xfffba000}, {0xfffbc000}, {0xfffbe000}, 
+    {0xfffc0000}, {0xfffc2000}, {0xfffc4000}, {0xfffc6000}, 
+    {0xfffc8000}, {0xfffca000}, {0xfffcc000}, {0xfffce000}, 
+    {0xfffd0000}, {0xfffd2000}, {0xfffd4000}, {0xfffd6000}, 
+    {0xfffd8000}, {0xfffda000}, {0xfffdc000}, {0xfffde000}, 
+    {0xfffe0000}, {0xfffe2000}, {0xfffe4000}, {0xfffe6000}, 
+    {0xfffe8000}, {0xfffea000}, {0xfffec000}, {0xfffee000}, 
+    {0xffff0000}, {0xffff2000}, {0xffff4000}, {0xffff6000}, 
+    {0xffff8000}, {0xffffa000}, {0xffffc000}, {0xffffe000}, 
+};
diff --git a/3rdparty/openexr/Iex/Iex.h b/3rdparty/openexr/Iex/Iex.h
new file mode 100644 (file)
index 0000000..a0fd31d
--- /dev/null
@@ -0,0 +1,60 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IEX_H
+#define INCLUDED_IEX_H
+
+
+//--------------------------------
+//
+//     Exception handling
+//
+//--------------------------------
+
+
+#include "IexMacros.h"
+#include "IexBaseExc.h"
+#include "IexMathExc.h"
+#include "IexThrowErrnoExc.h"
+
+// Note that we do not include file IexErrnoExc.h here.  That file
+// defines over 150 classes and significantly slows down compilation.
+// If you throw ErrnoExc exceptions using the throwErrnoExc() function,
+// you don't need IexErrnoExc.h.  You have to include IexErrnoExc.h
+// only if you want to catch specific subclasses of ErrnoExc.
+
+
+#endif
diff --git a/3rdparty/openexr/Iex/IexBaseExc.cpp b/3rdparty/openexr/Iex/IexBaseExc.cpp
new file mode 100644 (file)
index 0000000..c85b0c2
--- /dev/null
@@ -0,0 +1,129 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//---------------------------------------------------------------------
+//
+//     Constructors and destructors for our exception base class.
+//
+//---------------------------------------------------------------------
+
+#include "IexBaseExc.h"
+
+namespace Iex {
+namespace {
+
+
+StackTracer currentStackTracer = 0;
+
+
+} // namespace
+
+
+void   
+setStackTracer (StackTracer stackTracer)
+{
+    currentStackTracer = stackTracer;
+}
+
+
+StackTracer
+stackTracer ()
+{
+    return currentStackTracer;
+}
+
+
+BaseExc::BaseExc (const char* s) throw () :
+    std::string (s? s: ""),
+    _stackTrace (currentStackTracer? currentStackTracer(): "")
+{
+    // empty
+}
+
+
+BaseExc::BaseExc (const std::string &s) throw () :
+    std::string (s),
+    _stackTrace (currentStackTracer? currentStackTracer(): "")
+{
+    // empty
+}
+
+
+BaseExc::BaseExc (std::stringstream &s) throw () :
+    std::string (s.str()),
+    _stackTrace (currentStackTracer? currentStackTracer(): "")
+{
+    // empty
+}
+
+
+BaseExc::BaseExc (const BaseExc &be) throw () :
+    std::string (be),
+    _stackTrace (be._stackTrace)
+{
+    // empty
+}
+
+
+BaseExc::~BaseExc () throw ()
+{
+    // empty
+}
+
+
+const char *
+BaseExc::what () const throw ()
+{
+    return c_str();
+}
+
+
+BaseExc &
+BaseExc::assign (std::stringstream &s)
+{
+    std::string::assign (s.str());
+    return *this;
+}
+
+BaseExc &
+BaseExc::append (std::stringstream &s)
+{
+    std::string::append (s.str());
+    return *this;
+}
+
+
+} // namespace Iex
diff --git a/3rdparty/openexr/Iex/IexBaseExc.h b/3rdparty/openexr/Iex/IexBaseExc.h
new file mode 100644 (file)
index 0000000..9d8ab24
--- /dev/null
@@ -0,0 +1,266 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IEXBASEEXC_H
+#define INCLUDED_IEXBASEEXC_H
+
+
+//----------------------------------------------------------
+//
+//     A general exception base class, and a few
+//     useful exceptions derived from the base class.
+//
+//----------------------------------------------------------
+
+#include <string>
+#include <exception>
+#include <sstream>
+
+namespace Iex {
+
+#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
+// Tell MS VC++ to suppress exception specification warnings
+#pragma warning(disable:4290)
+#endif
+
+//-------------------------------
+// Our most basic exception class
+//-------------------------------
+
+class BaseExc: public std::string, public std::exception
+{
+  public:
+
+    //----------------------------
+    // Constructors and destructor
+    //----------------------------
+
+    BaseExc (const char *s = 0) throw();       // std::string (s)
+    BaseExc (const std::string &s) throw();    // std::string (s)
+    BaseExc (std::stringstream &s) throw();    // std::string (s.str())
+
+    BaseExc (const BaseExc &be) throw();
+    virtual ~BaseExc () throw ();
+
+    //--------------------------------------------
+    // what() method -- e.what() returns e.c_str()
+    //--------------------------------------------
+
+    virtual const char * what () const throw ();
+
+
+    //--------------------------------------------------
+    // Convenient methods to change the exception's text
+    //--------------------------------------------------
+
+    BaseExc &          assign (std::stringstream &s);  // assign (s.str())
+    BaseExc &          operator = (std::stringstream &s);
+
+    BaseExc &          append (std::stringstream &s);  // append (s.str())
+    BaseExc &          operator += (std::stringstream &s);
+
+
+    //--------------------------------------------------
+    // These methods from the base class get obscured by
+    // the definitions above.
+    //--------------------------------------------------
+
+    BaseExc &          assign (const char *s);
+    BaseExc &          operator = (const char *s);
+
+    BaseExc &          append (const char *s);
+    BaseExc &          operator += (const char *s);
+
+
+    //--------------------------------------------------
+    // Stack trace for the point at which the exception
+    // was thrown.  The stack trace will be an empty
+    // string unless a working stack-tracing routine
+    // has been installed (see below, setStackTracer()).
+    //--------------------------------------------------
+
+    const std::string &        stackTrace () const;
+
+  private:
+
+    std::string                _stackTrace;
+};
+
+
+//-----------------------------------------------------
+// A macro to save typing when declararing an exception
+// class derived directly or indirectly from BaseExc:
+//-----------------------------------------------------
+
+#define DEFINE_EXC(name, base)                                 \
+    class name: public base                                    \
+    {                                                          \
+      public:                                                   \
+       name (const char* text=0)      throw(): base (text) {}  \
+       name (const std::string &text) throw(): base (text) {}  \
+       name (std::stringstream &text) throw(): base (text) {}  \
+    };
+
+
+//--------------------------------------------------------
+// Some exceptions which should be useful in most programs
+//--------------------------------------------------------
+
+DEFINE_EXC (ArgExc,   BaseExc)          // Invalid arguments to a function call
+
+DEFINE_EXC (LogicExc, BaseExc)          // General error in a program's logic,
+                                // for example, a function was called
+                                // in a context where the call does
+                                // not make sense.
+
+DEFINE_EXC (InputExc, BaseExc)          // Invalid input data, e.g. from a file
+
+DEFINE_EXC (IoExc, BaseExc)     // Input or output operation failed
+
+DEFINE_EXC (MathExc,  BaseExc)          // Arithmetic exception; more specific
+                                // exceptions derived from this class
+                                // are defined in ExcMath.h
+
+DEFINE_EXC (ErrnoExc, BaseExc)          // Base class for exceptions corresponding
+                                // to errno values (see errno.h); more
+                                // specific exceptions derived from this
+                                // class are defined in ExcErrno.h
+
+DEFINE_EXC (NoImplExc, BaseExc)  // Missing method exception e.g. from a
+                                // call to a method that is only partially
+                                // or not at all implemented. A reminder
+                                // to lazy software people to get back
+                                // to work.
+
+DEFINE_EXC (NullExc, BaseExc)   // A pointer is inappropriately null.
+
+DEFINE_EXC (TypeExc, BaseExc)   // An object is an inappropriate type,
+                                // i.e. a dynamnic_cast failed.
+
+
+//----------------------------------------------------------------------
+// Stack-tracing support:
+// 
+// setStackTracer(st)
+//
+//     installs a stack-tracing routine, st, which will be called from
+//     class BaseExc's constructor every time an exception derived from
+//     BaseExc is thrown.  The stack-tracing routine should return a
+//     string that contains a printable representation of the program's
+//     current call stack.  This string will be stored in the BaseExc
+//     object; the string is accesible via the BaseExc::stackTrace()
+//     method.
+//
+// setStackTracer(0)
+//
+//     removes the current stack tracing routine.  When an exception
+//     derived from BaseExc is thrown, the stack trace string stored
+//     in the BaseExc object will be empty.
+//
+// stackTracer()
+//
+//     returns a pointer to the current stack-tracing routine, or 0
+//     if there is no current stack stack-tracing routine.
+// 
+//----------------------------------------------------------------------
+
+typedef std::string (* StackTracer) ();
+
+void           setStackTracer (StackTracer stackTracer);
+StackTracer    stackTracer ();
+
+
+//-----------------
+// Inline functions
+//-----------------
+
+inline BaseExc &
+BaseExc::operator = (std::stringstream &s)
+{
+    return assign (s);
+}
+
+
+inline BaseExc &
+BaseExc::operator += (std::stringstream &s)
+{
+    return append (s);
+}
+
+
+inline BaseExc &
+BaseExc::assign (const char *s)
+{
+    std::string::assign(s);
+    return *this;
+}
+
+
+inline BaseExc &
+BaseExc::operator = (const char *s)
+{
+    return assign(s);
+}
+
+
+inline BaseExc &
+BaseExc::append (const char *s)
+{
+    std::string::append(s);
+    return *this;
+}
+
+
+inline BaseExc &
+BaseExc::operator += (const char *s)
+{
+    return append(s);
+}
+
+
+inline const std::string &
+BaseExc::stackTrace () const
+{
+    return _stackTrace;
+}
+
+#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
+#pragma warning(default:4290)
+#endif
+
+} // namespace Iex
+
+#endif
diff --git a/3rdparty/openexr/Iex/IexErrnoExc.h b/3rdparty/openexr/Iex/IexErrnoExc.h
new file mode 100644 (file)
index 0000000..53cc28f
--- /dev/null
@@ -0,0 +1,210 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IEXERRNOEXC_H
+#define INCLUDED_IEXERRNOEXC_H
+
+//----------------------------------------------------------------
+//
+//     Exceptions which correspond to "errno" error codes.
+//
+//----------------------------------------------------------------
+
+#include "IexBaseExc.h"
+
+namespace Iex {
+
+
+DEFINE_EXC (EpermExc, ErrnoExc)
+DEFINE_EXC (EnoentExc, ErrnoExc)
+DEFINE_EXC (EsrchExc, ErrnoExc)
+DEFINE_EXC (EintrExc, ErrnoExc)
+DEFINE_EXC (EioExc, ErrnoExc)
+DEFINE_EXC (EnxioExc, ErrnoExc)
+DEFINE_EXC (E2bigExc, ErrnoExc)
+DEFINE_EXC (EnoexecExc, ErrnoExc)
+DEFINE_EXC (EbadfExc, ErrnoExc)
+DEFINE_EXC (EchildExc, ErrnoExc)
+DEFINE_EXC (EagainExc, ErrnoExc)
+DEFINE_EXC (EnomemExc, ErrnoExc)
+DEFINE_EXC (EaccesExc, ErrnoExc)
+DEFINE_EXC (EfaultExc, ErrnoExc)
+DEFINE_EXC (EnotblkExc, ErrnoExc)
+DEFINE_EXC (EbusyExc, ErrnoExc)
+DEFINE_EXC (EexistExc, ErrnoExc)
+DEFINE_EXC (ExdevExc, ErrnoExc)
+DEFINE_EXC (EnodevExc, ErrnoExc)
+DEFINE_EXC (EnotdirExc, ErrnoExc)
+DEFINE_EXC (EisdirExc, ErrnoExc)
+DEFINE_EXC (EinvalExc, ErrnoExc)
+DEFINE_EXC (EnfileExc, ErrnoExc)
+DEFINE_EXC (EmfileExc, ErrnoExc)
+DEFINE_EXC (EnottyExc, ErrnoExc)
+DEFINE_EXC (EtxtbsyExc, ErrnoExc)
+DEFINE_EXC (EfbigExc, ErrnoExc)
+DEFINE_EXC (EnospcExc, ErrnoExc)
+DEFINE_EXC (EspipeExc, ErrnoExc)
+DEFINE_EXC (ErofsExc, ErrnoExc)
+DEFINE_EXC (EmlinkExc, ErrnoExc)
+DEFINE_EXC (EpipeExc, ErrnoExc)
+DEFINE_EXC (EdomExc, ErrnoExc)
+DEFINE_EXC (ErangeExc, ErrnoExc)
+DEFINE_EXC (EnomsgExc, ErrnoExc)
+DEFINE_EXC (EidrmExc, ErrnoExc)
+DEFINE_EXC (EchrngExc, ErrnoExc)
+DEFINE_EXC (El2nsyncExc, ErrnoExc)
+DEFINE_EXC (El3hltExc, ErrnoExc)
+DEFINE_EXC (El3rstExc, ErrnoExc)
+DEFINE_EXC (ElnrngExc, ErrnoExc)
+DEFINE_EXC (EunatchExc, ErrnoExc)
+DEFINE_EXC (EnocsiExc, ErrnoExc)
+DEFINE_EXC (El2hltExc, ErrnoExc)
+DEFINE_EXC (EdeadlkExc, ErrnoExc)
+DEFINE_EXC (EnolckExc, ErrnoExc)
+DEFINE_EXC (EbadeExc, ErrnoExc)
+DEFINE_EXC (EbadrExc, ErrnoExc)
+DEFINE_EXC (ExfullExc, ErrnoExc)
+DEFINE_EXC (EnoanoExc, ErrnoExc)
+DEFINE_EXC (EbadrqcExc, ErrnoExc)
+DEFINE_EXC (EbadsltExc, ErrnoExc)
+DEFINE_EXC (EdeadlockExc, ErrnoExc)
+DEFINE_EXC (EbfontExc, ErrnoExc)
+DEFINE_EXC (EnostrExc, ErrnoExc)
+DEFINE_EXC (EnodataExc, ErrnoExc)
+DEFINE_EXC (EtimeExc, ErrnoExc)
+DEFINE_EXC (EnosrExc, ErrnoExc)
+DEFINE_EXC (EnonetExc, ErrnoExc)
+DEFINE_EXC (EnopkgExc, ErrnoExc)
+DEFINE_EXC (EremoteExc, ErrnoExc)
+DEFINE_EXC (EnolinkExc, ErrnoExc)
+DEFINE_EXC (EadvExc, ErrnoExc)
+DEFINE_EXC (EsrmntExc, ErrnoExc)
+DEFINE_EXC (EcommExc, ErrnoExc)
+DEFINE_EXC (EprotoExc, ErrnoExc)
+DEFINE_EXC (EmultihopExc, ErrnoExc)
+DEFINE_EXC (EbadmsgExc, ErrnoExc)
+DEFINE_EXC (EnametoolongExc, ErrnoExc)
+DEFINE_EXC (EoverflowExc, ErrnoExc)
+DEFINE_EXC (EnotuniqExc, ErrnoExc)
+DEFINE_EXC (EbadfdExc, ErrnoExc)
+DEFINE_EXC (EremchgExc, ErrnoExc)
+DEFINE_EXC (ElibaccExc, ErrnoExc)
+DEFINE_EXC (ElibbadExc, ErrnoExc)
+DEFINE_EXC (ElibscnExc, ErrnoExc)
+DEFINE_EXC (ElibmaxExc, ErrnoExc)
+DEFINE_EXC (ElibexecExc, ErrnoExc)
+DEFINE_EXC (EilseqExc, ErrnoExc)
+DEFINE_EXC (EnosysExc, ErrnoExc)
+DEFINE_EXC (EloopExc, ErrnoExc)
+DEFINE_EXC (ErestartExc, ErrnoExc)
+DEFINE_EXC (EstrpipeExc, ErrnoExc)
+DEFINE_EXC (EnotemptyExc, ErrnoExc)
+DEFINE_EXC (EusersExc, ErrnoExc)
+DEFINE_EXC (EnotsockExc, ErrnoExc)
+DEFINE_EXC (EdestaddrreqExc, ErrnoExc)
+DEFINE_EXC (EmsgsizeExc, ErrnoExc)
+DEFINE_EXC (EprototypeExc, ErrnoExc)
+DEFINE_EXC (EnoprotooptExc, ErrnoExc)
+DEFINE_EXC (EprotonosupportExc, ErrnoExc)
+DEFINE_EXC (EsocktnosupportExc, ErrnoExc)
+DEFINE_EXC (EopnotsuppExc, ErrnoExc)
+DEFINE_EXC (EpfnosupportExc, ErrnoExc)
+DEFINE_EXC (EafnosupportExc, ErrnoExc)
+DEFINE_EXC (EaddrinuseExc, ErrnoExc)
+DEFINE_EXC (EaddrnotavailExc, ErrnoExc)
+DEFINE_EXC (EnetdownExc, ErrnoExc)
+DEFINE_EXC (EnetunreachExc, ErrnoExc)
+DEFINE_EXC (EnetresetExc, ErrnoExc)
+DEFINE_EXC (EconnabortedExc, ErrnoExc)
+DEFINE_EXC (EconnresetExc, ErrnoExc)
+DEFINE_EXC (EnobufsExc, ErrnoExc)
+DEFINE_EXC (EisconnExc, ErrnoExc)
+DEFINE_EXC (EnotconnExc, ErrnoExc)
+DEFINE_EXC (EshutdownExc, ErrnoExc)
+DEFINE_EXC (EtoomanyrefsExc, ErrnoExc)
+DEFINE_EXC (EtimedoutExc, ErrnoExc)
+DEFINE_EXC (EconnrefusedExc, ErrnoExc)
+DEFINE_EXC (EhostdownExc, ErrnoExc)
+DEFINE_EXC (EhostunreachExc, ErrnoExc)
+DEFINE_EXC (EalreadyExc, ErrnoExc)
+DEFINE_EXC (EinprogressExc, ErrnoExc)
+DEFINE_EXC (EstaleExc, ErrnoExc)
+DEFINE_EXC (EioresidExc, ErrnoExc)
+DEFINE_EXC (EucleanExc, ErrnoExc)
+DEFINE_EXC (EnotnamExc, ErrnoExc)
+DEFINE_EXC (EnavailExc, ErrnoExc)
+DEFINE_EXC (EisnamExc, ErrnoExc)
+DEFINE_EXC (EremoteioExc, ErrnoExc)
+DEFINE_EXC (EinitExc, ErrnoExc)
+DEFINE_EXC (EremdevExc, ErrnoExc)
+DEFINE_EXC (EcanceledExc, ErrnoExc)
+DEFINE_EXC (EnolimfileExc, ErrnoExc)
+DEFINE_EXC (EproclimExc, ErrnoExc)
+DEFINE_EXC (EdisjointExc, ErrnoExc)
+DEFINE_EXC (EnologinExc, ErrnoExc)
+DEFINE_EXC (EloginlimExc, ErrnoExc)
+DEFINE_EXC (EgrouploopExc, ErrnoExc)
+DEFINE_EXC (EnoattachExc, ErrnoExc)
+DEFINE_EXC (EnotsupExc, ErrnoExc)
+DEFINE_EXC (EnoattrExc, ErrnoExc)
+DEFINE_EXC (EdircorruptedExc, ErrnoExc)
+DEFINE_EXC (EdquotExc, ErrnoExc)
+DEFINE_EXC (EnfsremoteExc, ErrnoExc)
+DEFINE_EXC (EcontrollerExc, ErrnoExc)
+DEFINE_EXC (EnotcontrollerExc, ErrnoExc)
+DEFINE_EXC (EenqueuedExc, ErrnoExc)
+DEFINE_EXC (EnotenqueuedExc, ErrnoExc)
+DEFINE_EXC (EjoinedExc, ErrnoExc)
+DEFINE_EXC (EnotjoinedExc, ErrnoExc)
+DEFINE_EXC (EnoprocExc, ErrnoExc)
+DEFINE_EXC (EmustrunExc, ErrnoExc)
+DEFINE_EXC (EnotstoppedExc, ErrnoExc)
+DEFINE_EXC (EclockcpuExc, ErrnoExc)
+DEFINE_EXC (EinvalstateExc, ErrnoExc)
+DEFINE_EXC (EnoexistExc, ErrnoExc)
+DEFINE_EXC (EendofminorExc, ErrnoExc)
+DEFINE_EXC (EbufsizeExc, ErrnoExc)
+DEFINE_EXC (EemptyExc, ErrnoExc)
+DEFINE_EXC (EnointrgroupExc, ErrnoExc)
+DEFINE_EXC (EinvalmodeExc, ErrnoExc)
+DEFINE_EXC (EcantextentExc, ErrnoExc)
+DEFINE_EXC (EinvaltimeExc, ErrnoExc)
+DEFINE_EXC (EdestroyedExc, ErrnoExc)
+
+
+} // namespace Iex
+
+#endif
diff --git a/3rdparty/openexr/Iex/IexMacros.h b/3rdparty/openexr/Iex/IexMacros.h
new file mode 100644 (file)
index 0000000..e3988a2
--- /dev/null
@@ -0,0 +1,148 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IEXMACROS_H
+#define INCLUDED_IEXMACROS_H
+
+//--------------------------------------------------------------------
+//
+//     Macros which make throwing exceptions more convenient
+//
+//--------------------------------------------------------------------
+
+#include <sstream>
+
+
+//----------------------------------------------------------------------------
+// A macro to throw exceptions whose text is assembled using stringstreams.
+//
+// Example:
+//
+//     THROW (InputExc, "Syntax error in line " << line ", " << file << ".");
+//     
+//----------------------------------------------------------------------------
+
+#define THROW(type, text)      \
+    do                         \
+    {                          \
+       std::stringstream s;    \
+       s << text;              \
+       throw type (s);         \
+    }                          \
+    while (0)
+
+
+//----------------------------------------------------------------------------
+// Macros to add to or to replace the text of an exception.
+// The new text is assembled using stringstreams.
+//
+// Examples:
+//
+// Append to end of an exception's text:
+//
+//     catch (BaseExc &e)
+//     {
+//         APPEND_EXC (e, " Directory " << name << " does not exist.");
+//         throw;
+//     }
+//
+// Replace an exception's text:
+//
+//     catch (BaseExc &e)
+//     {
+//         REPLACE_EXC (e, "Directory " << name << " does not exist. " << e);
+//         throw;
+//     }
+//----------------------------------------------------------------------------
+
+#define APPEND_EXC(exc, text)  \
+    do                         \
+    {                          \
+       std::stringstream s;    \
+       s << text;              \
+       exc.append (s);         \
+    }                          \
+    while (0)
+
+#define REPLACE_EXC(exc, text) \
+    do                         \
+    {                          \
+       std::stringstream s;    \
+       s << text;              \
+       exc.assign (s);         \
+    }                          \
+    while (0)
+
+
+//-------------------------------------------------------------
+// A macro to throw ErrnoExc exceptions whose text is assembled
+// using stringstreams:
+//
+// Example:
+//
+//     THROW_ERRNO ("Cannot open file " << name << " (%T).");
+//
+//-------------------------------------------------------------
+
+#define THROW_ERRNO(text)              \
+    do                                 \
+    {                                  \
+       std::stringstream s;            \
+       s << text;                      \
+       ::Iex::throwErrnoExc (s.str()); \
+    }                                  \
+    while (0)
+
+
+//-------------------------------------------------------------
+// A macro to throw exceptions if an assertion is false.
+//
+// Example:
+//
+//     ASSERT (ptr != NULL, NullExc, "Null pointer" );
+//
+//-------------------------------------------------------------
+
+#define ASSERT(assertion, type, text)   \
+    do                                  \
+    {                                   \
+       if ((assertion) == false)       \
+           THROW (type, text);         \
+    }                                   \
+    while (0)
+
+
+#endif
diff --git a/3rdparty/openexr/Iex/IexMathExc.h b/3rdparty/openexr/Iex/IexMathExc.h
new file mode 100644 (file)
index 0000000..4ef90d3
--- /dev/null
@@ -0,0 +1,58 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IEXMATHEXC_H
+#define INCLUDED_IEXMATHEXC_H
+
+#include "IexBaseExc.h"
+
+namespace Iex {
+
+//---------------------------------------------------------
+// Exception classess which correspond to specific floating
+// point exceptions.
+//---------------------------------------------------------
+
+DEFINE_EXC (OverflowExc,    MathExc)   // Overflow
+DEFINE_EXC (UnderflowExc,   MathExc)   // Underflow
+DEFINE_EXC (DivzeroExc,     MathExc)   // Division by zero
+DEFINE_EXC (InexactExc,     MathExc)   // Inexact result
+DEFINE_EXC (InvalidFpOpExc, MathExc)   // Invalid operation
+
+
+} // namespace Iex
+
+#endif
diff --git a/3rdparty/openexr/Iex/IexThrowErrnoExc.cpp b/3rdparty/openexr/Iex/IexThrowErrnoExc.cpp
new file mode 100644 (file)
index 0000000..410a45c
--- /dev/null
@@ -0,0 +1,859 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//----------------------------------------------------------------
+//
+//     Exceptions that correspond to "errno" error codes,
+//     and a function to make throwing those exceptions easy.
+//
+//----------------------------------------------------------------
+
+#include "IexThrowErrnoExc.h"
+#include "IexErrnoExc.h"
+#include <string.h>
+#include <errno.h>
+
+namespace Iex {
+
+
+void throwErrnoExc (const std::string &text, int errnum)
+{
+    const char *entext = strerror (errnum);
+    std::string tmp (text);
+    std::string::size_type pos;
+
+    while (std::string::npos != (pos = tmp.find ("%T")))
+       tmp.replace (pos, 2, entext, strlen (entext));
+
+    switch (errnum)
+    {
+      #if defined (EPERM)
+         case EPERM:
+           throw EpermExc (tmp);
+      #endif
+
+      #if defined (ENOENT)
+         case ENOENT:
+           throw EnoentExc (tmp);
+      #endif
+
+      #if defined (ESRCH)
+         case ESRCH:
+           throw EsrchExc (tmp);
+      #endif
+
+      #if defined (EINTR)
+         case EINTR:
+           throw EintrExc (tmp);
+      #endif
+
+      #if defined (EIO)
+         case EIO:
+           throw EioExc (tmp);
+      #endif
+
+      #if defined (ENXIO)
+         case ENXIO:
+           throw EnxioExc (tmp);
+      #endif
+
+      #if defined (E2BIG)
+         case E2BIG:
+           throw E2bigExc (tmp);
+      #endif
+
+      #if defined (ENOEXEC)
+         case ENOEXEC:
+           throw EnoexecExc (tmp);
+      #endif
+
+      #if defined (EBADF)
+         case EBADF:
+           throw EbadfExc (tmp);
+      #endif
+
+      #if defined (ECHILD)
+         case ECHILD:
+           throw EchildExc (tmp);
+      #endif
+
+      #if defined (EAGAIN)
+         case EAGAIN:
+           throw EagainExc (tmp);
+      #endif
+
+      #if defined (ENOMEM)
+         case ENOMEM:
+           throw EnomemExc (tmp);
+      #endif
+
+      #if defined (EACCES)
+         case EACCES:
+           throw EaccesExc (tmp);
+      #endif
+
+      #if defined (EFAULT)
+         case EFAULT:
+           throw EfaultExc (tmp);
+      #endif
+
+      #if defined (ENOTBLK)
+         case ENOTBLK:
+           throw EnotblkExc (tmp);
+      #endif
+
+      #if defined (EBUSY)
+         case EBUSY:
+           throw EbusyExc (tmp);
+      #endif
+
+      #if defined (EEXIST)
+         case EEXIST:
+           throw EexistExc (tmp);
+      #endif
+
+      #if defined (EXDEV)
+         case EXDEV:
+           throw ExdevExc (tmp);
+      #endif
+
+      #if defined (ENODEV)
+         case ENODEV:
+           throw EnodevExc (tmp);
+      #endif
+
+      #if defined (ENOTDIR)
+         case ENOTDIR:
+           throw EnotdirExc (tmp);
+      #endif
+
+      #if defined (EISDIR)
+         case EISDIR:
+           throw EisdirExc (tmp);
+      #endif
+
+      #if defined (EINVAL)
+         case EINVAL:
+           throw EinvalExc (tmp);
+      #endif
+
+      #if defined (ENFILE)
+         case ENFILE:
+           throw EnfileExc (tmp);
+      #endif
+
+      #if defined (EMFILE)
+         case EMFILE:
+           throw EmfileExc (tmp);
+      #endif
+
+      #if defined (ENOTTY)
+         case ENOTTY:
+           throw EnottyExc (tmp);
+      #endif
+
+      #if defined (ETXTBSY)
+         case ETXTBSY:
+           throw EtxtbsyExc (tmp);
+      #endif
+
+      #if defined (EFBIG)
+         case EFBIG:
+           throw EfbigExc (tmp);
+      #endif
+
+      #if defined (ENOSPC)
+         case ENOSPC:
+           throw EnospcExc (tmp);
+      #endif
+
+      #if defined (ESPIPE)
+         case ESPIPE:
+           throw EspipeExc (tmp);
+      #endif
+
+      #if defined (EROFS)
+         case EROFS:
+           throw ErofsExc (tmp);
+      #endif
+
+      #if defined (EMLINK)
+         case EMLINK:
+           throw EmlinkExc (tmp);
+      #endif
+
+      #if defined (EPIPE)
+         case EPIPE:
+           throw EpipeExc (tmp);
+      #endif
+
+      #if defined (EDOM)
+         case EDOM:
+           throw EdomExc (tmp);
+      #endif
+
+      #if defined (ERANGE)
+         case ERANGE:
+           throw ErangeExc (tmp);
+      #endif
+
+      #if defined (ENOMSG)
+         case ENOMSG:
+           throw EnomsgExc (tmp);
+      #endif
+
+      #if defined (EIDRM)
+         case EIDRM:
+           throw EidrmExc (tmp);
+      #endif
+
+      #if defined (ECHRNG)
+         case ECHRNG:
+           throw EchrngExc (tmp);
+      #endif
+
+      #if defined (EL2NSYNC)
+         case EL2NSYNC:
+           throw El2nsyncExc (tmp);
+      #endif
+
+      #if defined (EL3HLT)
+         case EL3HLT:
+           throw El3hltExc (tmp);
+      #endif
+
+      #if defined (EL3RST)
+         case EL3RST:
+           throw El3rstExc (tmp);
+      #endif
+
+      #if defined (ELNRNG)
+         case ELNRNG:
+           throw ElnrngExc (tmp);
+      #endif
+
+      #if defined (EUNATCH)
+         case EUNATCH:
+           throw EunatchExc (tmp);
+      #endif
+
+      #if defined (ENOSCI)
+         case ENOCSI:
+           throw EnocsiExc (tmp);
+      #endif
+
+      #if defined (EL2HLT)
+         case EL2HLT:
+           throw El2hltExc (tmp);
+      #endif
+
+      #if defined (EDEADLK)
+         case EDEADLK:
+           throw EdeadlkExc (tmp);
+      #endif
+
+      #if defined (ENOLCK)
+         case ENOLCK:
+           throw EnolckExc (tmp);
+      #endif
+
+      #if defined (EBADE)
+         case EBADE:
+           throw EbadeExc (tmp);
+      #endif
+
+      #if defined (EBADR)
+         case EBADR:
+           throw EbadrExc (tmp);
+      #endif
+
+      #if defined (EXFULL)
+         case EXFULL:
+           throw ExfullExc (tmp);
+      #endif
+
+      #if defined (ENOANO)
+         case ENOANO:
+           throw EnoanoExc (tmp);
+      #endif
+
+      #if defined (EBADRQC)
+         case EBADRQC:
+           throw EbadrqcExc (tmp);
+      #endif
+
+      #if defined (EBADSLT)
+         case EBADSLT:
+           throw EbadsltExc (tmp);
+      #endif
+
+      #if defined (EDEADLOCK) && defined (EDEADLK)
+         #if EDEADLOCK != EDEADLK
+             case EDEADLOCK:
+               throw EdeadlockExc (tmp);
+         #endif
+      #elif defined (EDEADLOCK)
+         case EDEADLOCK:
+           throw EdeadlockExc (tmp);
+      #endif
+
+      #if defined (EBFONT)
+         case EBFONT:
+           throw EbfontExc (tmp);
+      #endif
+
+      #if defined (ENOSTR)
+         case ENOSTR:
+           throw EnostrExc (tmp);
+      #endif
+
+      #if defined (ENODATA)
+         case ENODATA:
+           throw EnodataExc (tmp);
+      #endif
+
+      #if defined (ETIME)
+         case ETIME:
+           throw EtimeExc (tmp);
+      #endif
+
+      #if defined (ENOSR)
+         case ENOSR:
+           throw EnosrExc (tmp);
+      #endif
+
+      #if defined (ENONET)
+         case ENONET:
+           throw EnonetExc (tmp);
+      #endif
+
+      #if defined (ENOPKG)
+         case ENOPKG:
+           throw EnopkgExc (tmp);
+      #endif
+
+      #if defined (EREMOTE)
+         case EREMOTE:
+           throw EremoteExc (tmp);
+      #endif
+
+      #if defined (ENOLINK)
+         case ENOLINK:
+           throw EnolinkExc (tmp);
+      #endif
+
+      #if defined (EADV)
+         case EADV:
+           throw EadvExc (tmp);
+      #endif
+
+      #if defined (ESRMNT)
+         case ESRMNT:
+           throw EsrmntExc (tmp);
+      #endif
+
+      #if defined (ECOMM)
+         case ECOMM:
+           throw EcommExc (tmp);
+      #endif
+
+      #if defined (EPROTO)
+         case EPROTO:
+           throw EprotoExc (tmp);
+      #endif
+
+      #if defined (EMULTIHOP)
+         case EMULTIHOP:
+           throw EmultihopExc (tmp);
+      #endif
+
+      #if defined (EBADMSG)
+         case EBADMSG:
+           throw EbadmsgExc (tmp);
+      #endif
+
+      #if defined (ENAMETOOLONG)
+         case ENAMETOOLONG:
+           throw EnametoolongExc (tmp);
+      #endif
+
+      #if defined (EOVERFLOW)
+         case EOVERFLOW:
+           throw EoverflowExc (tmp);
+      #endif
+
+      #if defined (ENOTUNIQ)
+         case ENOTUNIQ:
+           throw EnotuniqExc (tmp);
+      #endif
+
+      #if defined (EBADFD)
+         case EBADFD:
+           throw EbadfdExc (tmp);
+      #endif
+
+      #if defined (EREMCHG)
+         case EREMCHG:
+           throw EremchgExc (tmp);
+      #endif
+
+      #if defined (ELIBACC)
+         case ELIBACC:
+           throw ElibaccExc (tmp);
+      #endif
+
+      #if defined (ELIBBAD)
+         case ELIBBAD:
+           throw ElibbadExc (tmp);
+      #endif
+
+      #if defined (ELIBSCN)
+         case ELIBSCN:
+           throw ElibscnExc (tmp);
+      #endif
+
+      #if defined (ELIBMAX)
+         case ELIBMAX:
+           throw ElibmaxExc (tmp);
+      #endif
+
+      #if defined (ELIBEXEC)
+         case ELIBEXEC:
+           throw ElibexecExc (tmp);
+      #endif
+
+      #if defined (EILSEQ)
+         case EILSEQ:
+           throw EilseqExc (tmp);
+      #endif
+
+      #if defined (ENOSYS)
+         case ENOSYS:
+           throw EnosysExc (tmp);
+      #endif
+
+      #if defined (ELOOP)
+         case ELOOP:
+           throw EloopExc (tmp);
+      #endif
+
+      #if defined (ERESTART)
+         case ERESTART:
+           throw ErestartExc (tmp);
+      #endif
+
+      #if defined (ESTRPIPE)
+         case ESTRPIPE:
+           throw EstrpipeExc (tmp);
+      #endif
+
+      #if defined (ENOTEMPTY)
+         case ENOTEMPTY:
+           throw EnotemptyExc (tmp);
+      #endif
+
+      #if defined (EUSERS)
+         case EUSERS:
+           throw EusersExc (tmp);
+      #endif
+
+      #if defined (ENOTSOCK)
+         case ENOTSOCK:
+           throw EnotsockExc (tmp);
+      #endif
+
+      #if defined (EDESTADDRREQ)
+         case EDESTADDRREQ:
+           throw EdestaddrreqExc (tmp);
+      #endif
+
+      #if defined (EMSGSIZE)
+         case EMSGSIZE:
+           throw EmsgsizeExc (tmp);
+      #endif
+
+      #if defined (EPROTOTYPE)
+         case EPROTOTYPE:
+           throw EprototypeExc (tmp);
+      #endif
+
+      #if defined (ENOPROTOOPT)
+         case ENOPROTOOPT:
+           throw EnoprotooptExc (tmp);
+      #endif
+
+      #if defined (EPROTONOSUPPORT)
+         case EPROTONOSUPPORT:
+           throw EprotonosupportExc (tmp);
+      #endif
+
+      #if defined (ESOCKTNOSUPPORT)
+         case ESOCKTNOSUPPORT:
+           throw EsocktnosupportExc (tmp);
+      #endif
+
+      #if defined (EOPNOTSUPP)
+         case EOPNOTSUPP:
+           throw EopnotsuppExc (tmp);
+      #endif
+
+      #if defined (EPFNOSUPPORT)
+         case EPFNOSUPPORT:
+           throw EpfnosupportExc (tmp);
+      #endif
+
+      #if defined (EAFNOSUPPORT)
+         case EAFNOSUPPORT:
+           throw EafnosupportExc (tmp);
+      #endif
+
+      #if defined (EADDRINUSE)
+         case EADDRINUSE:
+           throw EaddrinuseExc (tmp);
+      #endif
+
+      #if defined (EADDRNOTAVAIL)
+         case EADDRNOTAVAIL:
+           throw EaddrnotavailExc (tmp);
+      #endif
+
+      #if defined (ENETDOWN)
+         case ENETDOWN:
+           throw EnetdownExc (tmp);
+      #endif
+
+      #if defined (ENETUNREACH)
+         case ENETUNREACH:
+           throw EnetunreachExc (tmp);
+      #endif
+
+      #if defined (ENETRESET)
+         case ENETRESET:
+           throw EnetresetExc (tmp);
+      #endif
+
+      #if defined (ECONNABORTED)
+         case ECONNABORTED:
+           throw EconnabortedExc (tmp);
+      #endif
+
+      #if defined (ECONNRESET)
+         case ECONNRESET:
+           throw EconnresetExc (tmp);
+      #endif
+
+      #if defined (ENOBUFS)
+         case ENOBUFS:
+           throw EnobufsExc (tmp);
+      #endif
+
+      #if defined (EISCONN)
+         case EISCONN:
+           throw EisconnExc (tmp);
+      #endif
+
+      #if defined (ENOTCONN)
+         case ENOTCONN:
+           throw EnotconnExc (tmp);
+      #endif
+
+      #if defined (ESHUTDOWN)
+         case ESHUTDOWN:
+           throw EshutdownExc (tmp);
+      #endif
+
+      #if defined (ETOOMANYREFS)
+         case ETOOMANYREFS:
+           throw EtoomanyrefsExc (tmp);
+      #endif
+
+      #if defined (ETIMEDOUT)
+         case ETIMEDOUT:
+           throw EtimedoutExc (tmp);
+      #endif
+
+      #if defined (ECONNREFUSED)
+         case ECONNREFUSED:
+           throw EconnrefusedExc (tmp);
+      #endif
+
+      #if defined (EHOSTDOWN)
+         case EHOSTDOWN:
+           throw EhostdownExc (tmp);
+      #endif
+
+      #if defined (EHOSTUNREACH)
+         case EHOSTUNREACH:
+           throw EhostunreachExc (tmp);
+      #endif
+
+      #if defined (EALREADY)
+         case EALREADY:
+           throw EalreadyExc (tmp);
+      #endif
+
+      #if defined (EINPROGRESS)
+         case EINPROGRESS:
+           throw EinprogressExc (tmp);
+      #endif
+
+      #if defined (ESTALE)
+         case ESTALE:
+           throw EstaleExc (tmp);
+      #endif
+
+      #if defined (EIORESID)
+         case EIORESID:
+           throw EioresidExc (tmp);
+      #endif
+
+      #if defined (EUCLEAN)
+         case EUCLEAN:
+           throw EucleanExc (tmp);
+      #endif
+
+      #if defined (ENOTNAM)
+         case ENOTNAM:
+           throw EnotnamExc (tmp);
+      #endif
+
+      #if defined (ENAVAIL)
+         case ENAVAIL:
+           throw EnavailExc (tmp);
+      #endif
+
+      #if defined (EISNAM)
+         case EISNAM:
+           throw EisnamExc (tmp);
+      #endif
+
+      #if defined (EREMOTEIO)
+         case EREMOTEIO:
+           throw EremoteioExc (tmp);
+      #endif
+
+      #if defined (EINIT)
+         case EINIT:
+           throw EinitExc (tmp);
+      #endif
+
+      #if defined (EREMDEV)
+         case EREMDEV:
+           throw EremdevExc (tmp);
+      #endif
+
+      #if defined (ECANCELED)
+         case ECANCELED:
+           throw EcanceledExc (tmp);
+      #endif
+
+      #if defined (ENOLIMFILE)
+         case ENOLIMFILE:
+           throw EnolimfileExc (tmp);
+      #endif
+
+      #if defined (EPROCLIM)
+         case EPROCLIM:
+           throw EproclimExc (tmp);
+      #endif
+
+      #if defined (EDISJOINT)
+         case EDISJOINT:
+           throw EdisjointExc (tmp);
+      #endif
+
+      #if defined (ENOLOGIN)
+         case ENOLOGIN:
+           throw EnologinExc (tmp);
+      #endif
+
+      #if defined (ELOGINLIM)
+         case ELOGINLIM:
+           throw EloginlimExc (tmp);
+      #endif
+
+      #if defined (EGROUPLOOP)
+         case EGROUPLOOP:
+           throw EgrouploopExc (tmp);
+      #endif
+
+      #if defined (ENOATTACH)
+         case ENOATTACH:
+           throw EnoattachExc (tmp);
+      #endif
+
+      #if defined (ENOTSUP) && defined (EOPNOTSUPP)
+         #if ENOTSUP != EOPNOTSUPP
+             case ENOTSUP:
+               throw EnotsupExc (tmp);
+         #endif
+      #elif defined (ENOTSUP)
+         case ENOTSUP:
+           throw EnotsupExc (tmp);
+      #endif
+
+      #if defined (ENOATTR)
+         case ENOATTR:
+           throw EnoattrExc (tmp);
+      #endif
+
+      #if defined (EDIRCORRUPTED)
+         case EDIRCORRUPTED:
+           throw EdircorruptedExc (tmp);
+      #endif
+
+      #if defined (EDQUOT)
+         case EDQUOT:
+           throw EdquotExc (tmp);
+      #endif
+
+      #if defined (ENFSREMOTE)
+         case ENFSREMOTE:
+           throw EnfsremoteExc (tmp);
+      #endif
+
+      #if defined (ECONTROLLER)
+         case ECONTROLLER:
+           throw EcontrollerExc (tmp);
+      #endif
+
+      #if defined (ENOTCONTROLLER)
+         case ENOTCONTROLLER:
+           throw EnotcontrollerExc (tmp);
+      #endif
+
+      #if defined (EENQUEUED)
+         case EENQUEUED:
+           throw EenqueuedExc (tmp);
+      #endif
+
+      #if defined (ENOTENQUEUED)
+         case ENOTENQUEUED:
+           throw EnotenqueuedExc (tmp);
+      #endif
+
+      #if defined (EJOINED)
+         case EJOINED:
+           throw EjoinedExc (tmp);
+      #endif
+
+      #if defined (ENOTJOINED)
+         case ENOTJOINED:
+           throw EnotjoinedExc (tmp);
+      #endif
+
+      #if defined (ENOPROC)
+         case ENOPROC:
+           throw EnoprocExc (tmp);
+      #endif
+
+      #if defined (EMUSTRUN)
+         case EMUSTRUN:
+           throw EmustrunExc (tmp);
+      #endif
+
+      #if defined (ENOTSTOPPED)
+         case ENOTSTOPPED:
+           throw EnotstoppedExc (tmp);
+      #endif
+
+      #if defined (ECLOCKCPU)
+         case ECLOCKCPU:
+           throw EclockcpuExc (tmp);
+      #endif
+
+      #if defined (EINVALSTATE)
+         case EINVALSTATE:
+           throw EinvalstateExc (tmp);
+      #endif
+
+      #if defined (ENOEXIST)
+         case ENOEXIST:
+           throw EnoexistExc (tmp);
+      #endif
+
+      #if defined (EENDOFMINOR)
+         case EENDOFMINOR:
+           throw EendofminorExc (tmp);
+      #endif
+
+      #if defined (EBUFSIZE)
+         case EBUFSIZE:
+           throw EbufsizeExc (tmp);
+      #endif
+
+      #if defined (EEMPTY)
+         case EEMPTY:
+           throw EemptyExc (tmp);
+      #endif
+
+      #if defined (ENOINTRGROUP)
+         case ENOINTRGROUP:
+           throw EnointrgroupExc (tmp);
+      #endif
+
+      #if defined (EINVALMODE)
+         case EINVALMODE:
+           throw EinvalmodeExc (tmp);
+      #endif
+
+      #if defined (ECANTEXTENT)
+         case ECANTEXTENT:
+           throw EcantextentExc (tmp);
+      #endif
+
+      #if defined (EINVALTIME)
+         case EINVALTIME:
+           throw EinvaltimeExc (tmp);
+      #endif
+
+      #if defined (EDESTROYED)
+         case EDESTROYED:
+           throw EdestroyedExc (tmp);
+      #endif
+    }
+
+    throw ErrnoExc (tmp);
+}
+
+
+void throwErrnoExc (const std::string &text)
+{
+    throwErrnoExc (text, errno);
+}
+
+
+} // namespace Iex
diff --git a/3rdparty/openexr/Iex/IexThrowErrnoExc.h b/3rdparty/openexr/Iex/IexThrowErrnoExc.h
new file mode 100644 (file)
index 0000000..5b41dcc
--- /dev/null
@@ -0,0 +1,96 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IEXTHROWERRNOEXC_H
+#define INCLUDED_IEXTHROWERRNOEXC_H
+
+//----------------------------------------------------------
+//
+//     A function which throws ExcErrno exceptions
+//
+//----------------------------------------------------------
+
+#include "IexBaseExc.h"
+
+namespace Iex {
+
+
+//--------------------------------------------------------------------------
+//
+// Function throwErrnoExc() throws an exception which corresponds to
+// error code errnum.  The exception text is initialized with a copy
+// of the string passed to throwErrnoExc(), where all occurrences of
+// "%T" have been replaced with the output of strerror(oserror()).
+//
+// Example:
+//   
+// If opening file /tmp/output failed with an ENOENT error code,
+// calling
+//
+//     throwErrnoExc ();
+//
+// or
+//
+//     throwErrnoExc ("%T.");
+//
+// will throw an EnoentExc whose text reads
+//
+//     No such file or directory.
+//
+// More detailed messages can be assembled using stringstreams:
+//
+//     std::stringstream s;
+//     s << "Cannot open file " << name << " (%T).";
+//     throwErrnoExc (s);
+//
+// The resulting exception contains the following text:
+//
+//     Cannot open file /tmp/output (No such file or directory).
+//
+// Alternatively, you may want to use the THROW_ERRNO macro defined
+// in IexMacros.h:
+//
+//     THROW_ERRNO ("Cannot open file " << name << " (%T).")
+//
+//--------------------------------------------------------------------------
+
+void throwErrnoExc (const std::string &txt, int errnum);
+void throwErrnoExc (const std::string &txt = "%T." /*, int errnum = oserror() */);
+
+
+} // namespace Iex
+
+#endif
diff --git a/3rdparty/openexr/IlmBaseConfig.h.cmakein b/3rdparty/openexr/IlmBaseConfig.h.cmakein
new file mode 100644 (file)
index 0000000..ebbd539
--- /dev/null
@@ -0,0 +1,30 @@
+//
+// Define and set to 1 if the target system has POSIX thread support
+// and you want IlmBase to use it for multithreaded file I/O.
+//
+
+#cmakedefine01 HAVE_PTHREAD
+
+//
+// Define and set to 1 if the target system supports POSIX semaphores
+// and you want OpenEXR to use them; otherwise, OpenEXR will use its
+// own semaphore implementation.
+//
+
+#cmakedefine01 HAVE_POSIX_SEMAPHORES
+
+#undef HAVE_UCONTEXT_H
+
+//
+// Define and set to 1 if the target system has support for large
+// stack sizes.
+//
+
+#undef ILMBASE_HAVE_LARGE_STACK
+
+
+//
+// Version string for runtime access
+//
+#define ILMBASE_VERSION_STRING "1.0.3"
+#define ILMBASE_PACKAGE_STRING "IlmBase 1.0.3"
diff --git a/3rdparty/openexr/IlmImf/ImfAcesFile.cpp b/3rdparty/openexr/IlmImf/ImfAcesFile.cpp
new file mode 100644 (file)
index 0000000..e84f9fe
--- /dev/null
@@ -0,0 +1,631 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2007, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     ACES image file I/O.
+//     
+//-----------------------------------------------------------------------------
+
+#include <ImfAcesFile.h>
+#include <ImfRgbaFile.h>
+#include <ImfStandardAttributes.h>
+#include <Iex.h>
+
+using namespace std;
+using namespace Imath;
+using namespace Iex;
+
+namespace Imf {
+
+
+const Chromaticities &
+acesChromaticities ()
+{
+    static const Chromaticities acesChr 
+           (V2f (0.73470,  0.26530),   // red
+            V2f (0.00000,  1.00000),   // green
+            V2f (0.00010, -0.07700),   // blue
+            V2f (0.32168,  0.33767));  // white
+
+    return acesChr;
+}
+
+
+class AcesOutputFile::Data
+{
+  public:
+
+     Data();
+    ~Data();
+
+    RgbaOutputFile *   rgbaFile;
+};
+
+
+AcesOutputFile::Data::Data ():
+    rgbaFile (0)
+{
+    // empty
+}
+
+
+AcesOutputFile::Data::~Data ()
+{
+    delete rgbaFile;
+}
+
+
+namespace {
+
+void
+checkCompression (Compression compression)
+{
+    //
+    // Not all compression methods are allowed in ACES files.
+    //
+
+    switch (compression)
+    {
+      case NO_COMPRESSION:
+      case PIZ_COMPRESSION:
+      case B44A_COMPRESSION:
+       break;
+
+      default:
+       throw ArgExc ("Invalid compression type for ACES file.");
+    }
+}
+
+} // namespace
+
+
+AcesOutputFile::AcesOutputFile
+    (const std::string &name,
+     const Header &header,
+     RgbaChannels rgbaChannels,
+     int numThreads)
+:
+    _data (new Data)
+{
+    checkCompression (header.compression());
+
+    Header newHeader = header;
+    addChromaticities (newHeader, acesChromaticities());
+    addAdoptedNeutral (newHeader, acesChromaticities().white);
+
+    _data->rgbaFile = new RgbaOutputFile (name.c_str(),
+                                         newHeader,
+                                         rgbaChannels,
+                                         numThreads);
+
+    _data->rgbaFile->setYCRounding (7, 6);
+}
+
+
+AcesOutputFile::AcesOutputFile
+    (OStream &os,
+     const Header &header,
+     RgbaChannels rgbaChannels,
+     int numThreads)
+:
+    _data (new Data)
+{
+    checkCompression (header.compression());
+
+    Header newHeader = header;
+    addChromaticities (newHeader, acesChromaticities());
+    addAdoptedNeutral (newHeader, acesChromaticities().white);
+
+    _data->rgbaFile = new RgbaOutputFile (os,
+                                         header,
+                                         rgbaChannels,
+                                         numThreads);
+
+    _data->rgbaFile->setYCRounding (7, 6);
+}
+
+
+AcesOutputFile::AcesOutputFile
+    (const std::string &name,
+     const Imath::Box2i &displayWindow,
+     const Imath::Box2i &dataWindow,
+     RgbaChannels rgbaChannels,
+     float pixelAspectRatio,
+     const Imath::V2f screenWindowCenter,
+     float screenWindowWidth,
+     LineOrder lineOrder,
+     Compression compression,
+     int numThreads)
+:
+    _data (new Data)
+{
+    checkCompression (compression);
+
+    Header newHeader (displayWindow,
+                     dataWindow.isEmpty()? displayWindow: dataWindow,
+                     pixelAspectRatio,
+                     screenWindowCenter,
+                     screenWindowWidth,
+                     lineOrder,
+                     compression);
+
+    addChromaticities (newHeader, acesChromaticities());
+    addAdoptedNeutral (newHeader, acesChromaticities().white);
+
+    _data->rgbaFile = new RgbaOutputFile (name.c_str(),
+                                         newHeader,
+                                         rgbaChannels,
+                                         numThreads);
+
+    _data->rgbaFile->setYCRounding (7, 6);
+}
+
+
+AcesOutputFile::AcesOutputFile
+    (const std::string &name,
+     int width,
+     int height,
+     RgbaChannels rgbaChannels,
+     float pixelAspectRatio,
+     const Imath::V2f screenWindowCenter,
+     float screenWindowWidth,
+     LineOrder lineOrder,
+     Compression compression,
+     int numThreads)
+:
+    _data (new Data)
+{
+    checkCompression (compression);
+
+    Header newHeader (width,
+                     height,
+                     pixelAspectRatio,
+                     screenWindowCenter,
+                     screenWindowWidth,
+                     lineOrder,
+                     compression);
+
+    addChromaticities (newHeader, acesChromaticities());
+    addAdoptedNeutral (newHeader, acesChromaticities().white);
+
+    _data->rgbaFile = new RgbaOutputFile (name.c_str(),
+                                         newHeader,
+                                         rgbaChannels,
+                                         numThreads);
+
+    _data->rgbaFile->setYCRounding (7, 6);
+}
+
+
+AcesOutputFile::~AcesOutputFile ()
+{
+    delete _data;
+}
+
+
+void           
+AcesOutputFile::setFrameBuffer
+    (const Rgba *base,
+     size_t xStride,
+     size_t yStride)
+{
+    _data->rgbaFile->setFrameBuffer (base, xStride, yStride);
+}
+
+
+void           
+AcesOutputFile::writePixels (int numScanLines)
+{
+    _data->rgbaFile->writePixels (numScanLines);
+}
+
+
+int                    
+AcesOutputFile::currentScanLine () const
+{
+    return _data->rgbaFile->currentScanLine();
+}
+
+
+const Header &
+AcesOutputFile::header () const
+{
+    return _data->rgbaFile->header();
+}
+
+
+const Imath::Box2i &
+AcesOutputFile::displayWindow () const
+{
+    return _data->rgbaFile->displayWindow();
+}
+
+
+const Imath::Box2i &
+AcesOutputFile::dataWindow () const
+{
+    return _data->rgbaFile->dataWindow();
+}
+
+
+float          
+AcesOutputFile::pixelAspectRatio () const
+{
+    return _data->rgbaFile->pixelAspectRatio();
+}
+
+
+const Imath::V2f
+AcesOutputFile::screenWindowCenter () const
+{
+    return _data->rgbaFile->screenWindowCenter();
+}
+
+
+float          
+AcesOutputFile::screenWindowWidth () const
+{
+    return _data->rgbaFile->screenWindowWidth();
+}
+
+
+LineOrder              
+AcesOutputFile::lineOrder () const
+{
+    return _data->rgbaFile->lineOrder();
+}
+
+
+Compression            
+AcesOutputFile::compression () const
+{
+    return _data->rgbaFile->compression();
+}
+
+
+RgbaChannels
+AcesOutputFile::channels () const
+{
+    return _data->rgbaFile->channels();
+}
+
+
+void           
+AcesOutputFile::updatePreviewImage (const PreviewRgba pixels[])
+{
+    _data->rgbaFile->updatePreviewImage (pixels);
+}
+
+
+class AcesInputFile::Data
+{
+  public:
+
+     Data();
+    ~Data();
+
+    void               initColorConversion ();
+
+    RgbaInputFile *    rgbaFile;
+
+    Rgba *             fbBase;
+    size_t             fbXStride;
+    size_t             fbYStride;
+    int                        minX;
+    int                        maxX;
+
+    bool               mustConvertColor;
+    M44f               fileToAces;
+};
+
+
+AcesInputFile::Data::Data ():
+    rgbaFile (0),
+    fbBase (0),
+    fbXStride (0),
+    fbYStride (0),
+    minX (0),
+    maxX (0),
+    mustConvertColor (false)
+{
+    // empty
+}
+
+
+AcesInputFile::Data::~Data ()
+{
+    delete rgbaFile;
+}
+
+
+void
+AcesInputFile::Data::initColorConversion ()
+{
+    const Header &header = rgbaFile->header();
+
+    Chromaticities fileChr;
+
+    if (hasChromaticities (header))
+       fileChr = chromaticities (header);
+
+    V2f fileNeutral = fileChr.white;
+
+    if (hasAdoptedNeutral (header))
+       fileNeutral = adoptedNeutral (header);
+
+    const Chromaticities acesChr = acesChromaticities();
+
+    V2f acesNeutral = acesChr.white;
+
+    if (fileChr.red == acesChr.red &&
+       fileChr.green == acesChr.green &&
+       fileChr.blue == acesChr.blue &&
+       fileChr.white == acesChr.white &&
+       fileNeutral == acesNeutral)
+    {
+       //
+       // The file already contains ACES data,
+       // color conversion is not necessary.
+
+       return;
+    }
+
+    mustConvertColor = true;
+    minX = header.dataWindow().min.x;
+    maxX = header.dataWindow().max.x;
+
+    //
+    // Create a matrix that transforms colors from the
+    // RGB space of the input file into the ACES space
+    // using a color adaptation transform to move the
+    // white point.
+    //
+
+    //
+    // We'll need the Bradford cone primary matrix and its inverse
+    //
+
+    static const M44f bradfordCPM
+           (0.895100, -0.750200,  0.038900,  0.000000,
+            0.266400,  1.713500, -0.068500,  0.000000,
+           -0.161400,  0.036700,  1.029600,  0.000000,
+            0.000000,  0.000000,  0.000000,  1.000000);
+
+    const static M44f inverseBradfordCPM
+           (0.986993,  0.432305, -0.008529,  0.000000,
+           -0.147054,  0.518360,  0.040043,  0.000000,
+            0.159963,  0.049291,  0.968487,  0.000000,
+            0.000000,  0.000000,  0.000000,  1.000000);
+
+    //
+    // Convert the white points of the two RGB spaces to XYZ
+    //
+
+    float fx = fileNeutral.x;
+    float fy = fileNeutral.y;
+    V3f fileNeutralXYZ (fx / fy, 1, (1 - fx - fy) / fy);
+
+    float ax = acesNeutral.x;
+    float ay = acesNeutral.y;
+    V3f acesNeutralXYZ (ax / ay, 1, (1 - ax - ay) / ay);
+
+    //
+    // Compute the Bradford transformation matrix
+    //
+
+    V3f ratio ((acesNeutralXYZ * bradfordCPM) /
+              (fileNeutralXYZ * bradfordCPM));
+
+    M44f ratioMat (ratio[0], 0,        0,        0,
+                  0,        ratio[1], 0,        0,
+                  0,        0,        ratio[2], 0,
+                  0,        0,        0,        1);
+
+    M44f bradfordTrans = bradfordCPM *
+                         ratioMat *
+                        inverseBradfordCPM;
+
+    //
+    // Build a combined file-RGB-to-ACES-RGB conversion matrix
+    //
+
+    fileToAces = RGBtoXYZ (fileChr, 1) * bradfordTrans * XYZtoRGB (acesChr, 1);
+}
+
+
+AcesInputFile::AcesInputFile (const std::string &name, int numThreads):
+    _data (new Data)
+{
+    _data->rgbaFile = new RgbaInputFile (name.c_str(), numThreads);
+    _data->initColorConversion();
+}
+
+
+AcesInputFile::AcesInputFile (IStream &is, int numThreads):
+    _data (new Data)
+{
+    _data->rgbaFile = new RgbaInputFile (is, numThreads);
+    _data->initColorConversion();
+}
+
+
+AcesInputFile::~AcesInputFile ()
+{
+    delete _data;
+}
+
+
+void           
+AcesInputFile::setFrameBuffer (Rgba *base, size_t xStride, size_t yStride)
+{
+    _data->rgbaFile->setFrameBuffer (base, xStride, yStride);
+    _data->fbBase = base;
+    _data->fbXStride = xStride;
+    _data->fbYStride = yStride;
+}
+
+
+void           
+AcesInputFile::readPixels (int scanLine1, int scanLine2)
+{
+    //
+    // Copy the pixels from the RgbaInputFile into the frame buffer.
+    //
+
+    _data->rgbaFile->readPixels (scanLine1, scanLine2);
+
+    //
+    // If the RGB space of the input file is not the same as the ACES
+    // RGB space, then the pixels in the frame buffer must be transformed
+    // into the ACES RGB space.
+    //
+
+    if (!_data->mustConvertColor)
+       return;
+
+    int minY = min (scanLine1, scanLine2);
+    int maxY = max (scanLine1, scanLine2);
+
+    for (int y = minY; y <= maxY; ++y)
+    {
+       Rgba *base = _data->fbBase +
+                    _data->fbXStride * _data->minX +
+                    _data->fbYStride * y;
+
+       for (int x = _data->minX; x <= _data->maxX; ++x)
+       {
+           V3f aces = V3f (base->r, base->g, base->b) * _data->fileToAces;
+
+           base->r = aces[0];
+           base->g = aces[1];
+           base->b = aces[2];
+
+           base += _data->fbXStride;
+       }
+    }
+}
+
+
+void           
+AcesInputFile::readPixels (int scanLine)
+{
+    readPixels (scanLine, scanLine);
+}
+
+
+const Header &
+AcesInputFile::header () const
+{
+    return _data->rgbaFile->header();
+}
+
+
+const Imath::Box2i &
+AcesInputFile::displayWindow () const
+{
+    return _data->rgbaFile->displayWindow();
+}
+
+
+const Imath::Box2i &
+AcesInputFile::dataWindow () const
+{
+    return _data->rgbaFile->dataWindow();
+}
+
+
+float
+AcesInputFile::pixelAspectRatio () const
+{
+    return _data->rgbaFile->pixelAspectRatio();
+}
+
+
+const Imath::V2f
+AcesInputFile::screenWindowCenter () const
+{
+    return _data->rgbaFile->screenWindowCenter();
+}
+
+
+float
+AcesInputFile::screenWindowWidth () const
+{
+    return _data->rgbaFile->screenWindowWidth();
+}
+
+
+LineOrder
+AcesInputFile::lineOrder () const
+{
+    return _data->rgbaFile->lineOrder();
+}
+
+
+Compression
+AcesInputFile::compression () const
+{
+    return _data->rgbaFile->compression();
+}
+
+
+RgbaChannels
+AcesInputFile::channels () const
+{
+    return _data->rgbaFile->channels();
+}
+
+
+const char *  
+AcesInputFile::fileName () const
+{
+    return _data->rgbaFile->fileName();
+}
+
+
+bool
+AcesInputFile::isComplete () const
+{
+    return _data->rgbaFile->isComplete();
+}
+
+
+int
+AcesInputFile::version () const
+{
+    return _data->rgbaFile->version();
+}
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfAcesFile.h b/3rdparty/openexr/IlmImf/ImfAcesFile.h
new file mode 100644 (file)
index 0000000..2ab7314
--- /dev/null
@@ -0,0 +1,322 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2007, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_ACES_FILE_H
+#define INCLUDED_IMF_ACES_FILE_H
+
+
+//-----------------------------------------------------------------------------
+//
+//     ACES image file I/O.
+//     
+//     This header file declares two classes that directly support
+//     image file input and output according to the Academy Image
+//     Interchange Framework.
+//     
+//     The Academy Image Interchange file format is a subset of OpenEXR:
+//     
+//         - Images are stored as scanlines.  Tiles are not allowed.
+//     
+//         - Images contain three color channels, either
+//                 R, G, B (red, green, blue) or
+//                 Y, RY, BY (luminance, sub-sampled chroma)
+//     
+//         - Images may optionally contain an alpha channel.
+//     
+//         - Only three compression types are allowed:
+//                 - NO_COMPRESSION (file is not compressed)
+//                 - PIZ_COMPRESSION (lossless)
+//                 - B44A_COMPRESSION (lossy)
+//     
+//         - The "chromaticities" header attribute must specify
+//           the ACES RGB primaries and white point.
+//     
+//     class AcesOutputFile writes an OpenEXR file, enforcing the
+//     restrictions listed above.  Pixel data supplied by application
+//     software must already be in the ACES RGB space.
+//     
+//     class AcesInputFile reads an OpenEXR file.  Pixel data delivered
+//     to application software is guaranteed to be in the ACES RGB space.
+//     If the RGB space of the file is not the same as the ACES space,
+//     then the pixels are automatically converted: the pixels are
+//     converted to CIE XYZ, a color adaptation transform shifts the
+//     white point, and the result is converted to ACES RGB.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfHeader.h>
+#include <ImfRgba.h>
+#include "ImathVec.h"
+#include "ImathBox.h"
+#include <ImfThreading.h>
+#include <string>
+
+namespace Imf {
+
+
+class RgbaOutputFile;
+class RgbaInputFile;
+struct PreviewRgba;
+class Chromaticities;
+
+//
+// ACES red, green, blue and white-point chromaticities.
+//
+
+const Chromaticities & acesChromaticities ();
+
+
+//
+// ACES output file.
+//
+
+class AcesOutputFile
+{
+  public:
+
+    //---------------------------------------------------
+    // Constructor -- header is constructed by the caller
+    //---------------------------------------------------
+
+    AcesOutputFile (const std::string &name,
+                   const Header &header,
+                   RgbaChannels rgbaChannels = WRITE_RGBA,
+                    int numThreads = globalThreadCount());
+
+
+    //----------------------------------------------------
+    // Constructor -- header is constructed by the caller,
+    // file is opened by the caller, destructor will not
+    // automatically close the file.
+    //----------------------------------------------------
+
+    AcesOutputFile (OStream &os,
+                   const Header &header,
+                   RgbaChannels rgbaChannels = WRITE_RGBA,
+                    int numThreads = globalThreadCount());
+
+
+    //----------------------------------------------------------------
+    // Constructor -- header data are explicitly specified as function
+    // call arguments (empty dataWindow means "same as displayWindow")
+    //----------------------------------------------------------------
+
+    AcesOutputFile (const std::string &name,
+                   const Imath::Box2i &displayWindow,
+                   const Imath::Box2i &dataWindow = Imath::Box2i(),
+                   RgbaChannels rgbaChannels = WRITE_RGBA,
+                   float pixelAspectRatio = 1,
+                   const Imath::V2f screenWindowCenter = Imath::V2f (0, 0),
+                   float screenWindowWidth = 1,
+                   LineOrder lineOrder = INCREASING_Y,
+                   Compression compression = PIZ_COMPRESSION,
+                    int numThreads = globalThreadCount());
+
+
+    //-----------------------------------------------
+    // Constructor -- like the previous one, but both
+    // the display window and the data window are
+    // Box2i (V2i (0, 0), V2i (width - 1, height -1))
+    //-----------------------------------------------
+
+    AcesOutputFile (const std::string &name,
+                   int width,
+                   int height,
+                   RgbaChannels rgbaChannels = WRITE_RGBA,
+                   float pixelAspectRatio = 1,
+                   const Imath::V2f screenWindowCenter = Imath::V2f (0, 0),
+                   float screenWindowWidth = 1,
+                   LineOrder lineOrder = INCREASING_Y,
+                   Compression compression = PIZ_COMPRESSION,
+                    int numThreads = globalThreadCount());
+
+
+    //-----------
+    // Destructor
+    //-----------
+
+    virtual ~AcesOutputFile ();
+
+
+    //------------------------------------------------
+    // Define a frame buffer as the pixel data source:
+    // Pixel (x, y) is at address
+    //
+    //  base + x * xStride + y * yStride
+    //
+    //------------------------------------------------
+
+    void                       setFrameBuffer (const Rgba *base,
+                                               size_t xStride,
+                                               size_t yStride);
+
+
+    //-------------------------------------------------
+    // Write pixel data (see class Imf::OutputFile)
+    // The pixels are assumed to contain ACES RGB data.
+    //-------------------------------------------------
+
+    void                       writePixels (int numScanLines = 1);
+    int                                currentScanLine () const;
+
+
+    //--------------------------
+    // Access to the file header
+    //--------------------------
+
+    const Header &             header () const;
+    const Imath::Box2i &       displayWindow () const;
+    const Imath::Box2i &       dataWindow () const;
+    float                      pixelAspectRatio () const;
+    const Imath::V2f           screenWindowCenter () const;
+    float                      screenWindowWidth () const;
+    LineOrder                  lineOrder () const;
+    Compression                        compression () const;
+    RgbaChannels               channels () const;
+
+
+    // --------------------------------------------------------------------
+    // Update the preview image (see Imf::OutputFile::updatePreviewImage())
+    // --------------------------------------------------------------------
+
+    void                       updatePreviewImage (const PreviewRgba[]);
+
+
+  private:
+
+    AcesOutputFile (const AcesOutputFile &);             // not implemented
+    AcesOutputFile & operator = (const AcesOutputFile &); // not implemented
+
+    class Data;
+
+    Data *                     _data;
+};
+
+
+//
+// ACES input file
+//
+
+class AcesInputFile
+{
+  public:
+
+    //-------------------------------------------------------
+    // Constructor -- opens the file with the specified name,
+    // destructor will automatically close the file.
+    //-------------------------------------------------------
+
+    AcesInputFile (const std::string &name,
+                  int numThreads = globalThreadCount());
+
+
+    //-----------------------------------------------------------
+    // Constructor -- attaches the new AcesInputFile object to a
+    // file that has already been opened by the caller.
+    // Destroying the AcesInputFile object will not automatically
+    // close the file.
+    //-----------------------------------------------------------
+
+    AcesInputFile (IStream &is,
+                  int numThreads = globalThreadCount());
+
+
+    //-----------
+    // Destructor
+    //-----------
+
+    virtual ~AcesInputFile ();
+
+
+    //-----------------------------------------------------
+    // Define a frame buffer as the pixel data destination:
+    // Pixel (x, y) is at address
+    //
+    //  base + x * xStride + y * yStride
+    //
+    //-----------------------------------------------------
+
+    void                       setFrameBuffer (Rgba *base,
+                                               size_t xStride,
+                                               size_t yStride);
+
+
+    //--------------------------------------------
+    // Read pixel data (see class Imf::InputFile)
+    // Pixels returned will contain ACES RGB data.
+    //--------------------------------------------
+
+    void                       readPixels (int scanLine1, int scanLine2);
+    void                       readPixels (int scanLine);
+
+
+    //--------------------------
+    // Access to the file header
+    //--------------------------
+
+    const Header &             header () const;
+    const Imath::Box2i &       displayWindow () const;
+    const Imath::Box2i &       dataWindow () const;
+    float                      pixelAspectRatio () const;
+    const Imath::V2f           screenWindowCenter () const;
+    float                      screenWindowWidth () const;
+    LineOrder                  lineOrder () const;
+    Compression                        compression () const;
+    RgbaChannels               channels () const;
+    const char *                fileName () const;
+    bool                       isComplete () const;
+
+
+    //----------------------------------
+    // Access to the file format version
+    //----------------------------------
+
+    int                                version () const;
+
+  private:
+
+    AcesInputFile (const AcesInputFile &);               // not implemented
+    AcesInputFile & operator = (const AcesInputFile &);   // not implemented
+
+    class Data;
+
+    Data *                     _data;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfArray.h b/3rdparty/openexr/IlmImf/ImfArray.h
new file mode 100644 (file)
index 0000000..18eb66f
--- /dev/null
@@ -0,0 +1,261 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_ARRAY_H
+#define INCLUDED_IMF_ARRAY_H
+
+//-------------------------------------------------------------------------
+//
+// class Array
+// class Array2D
+//
+// "Arrays of T" whose sizes are not known at compile time.
+// When an array goes out of scope, its elements are automatically
+// deleted.
+//
+// Usage example:
+//
+//     struct C
+//     {
+//         C ()                {std::cout << "C::C  (" << this << ")\n";};
+//         virtual ~C ()       {std::cout << "C::~C (" << this << ")\n";};
+//     };
+// 
+//     int
+//     main ()
+//     {
+//         Array <C> a(3);
+// 
+//         C &b = a[1];
+//         const C &c = a[1];
+//         C *d = a + 2;
+//         const C *e = a;
+// 
+//         return 0;
+//     }
+//
+//-------------------------------------------------------------------------
+
+namespace Imf {
+
+
+template <class T>
+class Array
+{
+  public:
+
+    //-----------------------------
+    // Constructors and destructors
+    //-----------------------------
+
+     Array ()                          {_data = 0;}
+     Array (long size)                 {_data = new T[size];}
+    ~Array ()                          {delete [] _data;}
+
+
+    //-----------------------------
+    // Access to the array elements
+    //-----------------------------
+
+    operator T * ()                    {return _data;}
+    operator const T * () const                {return _data;}
+
+
+    //------------------------------------------------------
+    // Resize and clear the array (the contents of the array
+    // are not preserved across the resize operation).
+    //
+    // resizeEraseUnsafe() is more memory efficient than
+    // resizeErase() because it deletes the old memory block
+    // before allocating a new one, but if allocating the
+    // new block throws an exception, resizeEraseUnsafe()
+    // leaves the array in an unusable state.
+    //
+    //------------------------------------------------------
+
+    void resizeErase (long size);
+    void resizeEraseUnsafe (long size);
+
+
+  private:
+
+    Array (const Array &);             // Copying and assignment
+    Array & operator = (const Array &);        // are not implemented
+
+    T * _data;
+};
+
+
+template <class T>
+class Array2D
+{
+  public:
+
+    //-----------------------------
+    // Constructors and destructors
+    //-----------------------------
+
+     Array2D ();                       // empty array, 0 by 0 elements
+     Array2D (long sizeX, long sizeY); // sizeX by sizeY elements
+    ~Array2D ();
+
+
+    //-----------------------------
+    // Access to the array elements
+    //-----------------------------
+
+    T *                operator [] (long x);
+    const T *  operator [] (long x) const;
+
+
+    //------------------------------------------------------
+    // Resize and clear the array (the contents of the array
+    // are not preserved across the resize operation).
+    //
+    // resizeEraseUnsafe() is more memory efficient than
+    // resizeErase() because it deletes the old memory block
+    // before allocating a new one, but if allocating the
+    // new block throws an exception, resizeEraseUnsafe()
+    // leaves the array in an unusable state.
+    //
+    //------------------------------------------------------
+
+    void resizeErase (long sizeX, long sizeY);
+    void resizeEraseUnsafe (long sizeX, long sizeY);
+
+
+  private:
+
+    Array2D (const Array2D &);                 // Copying and assignment
+    Array2D & operator = (const Array2D &);    // are not implemented
+
+    long       _sizeY;
+    T *                _data;
+};
+
+
+//---------------
+// Implementation
+//---------------
+
+template <class T>
+inline void
+Array<T>::resizeErase (long size)
+{
+    T *tmp = new T[size];
+    delete [] _data;
+    _data = tmp;
+}
+
+
+template <class T>
+inline void
+Array<T>::resizeEraseUnsafe (long size)
+{
+    delete [] _data;
+    _data = 0;
+    _data = new T[size];
+}
+
+
+template <class T>
+inline
+Array2D<T>::Array2D ():
+    _sizeY (0), _data (0)
+{
+    // emtpy
+}
+
+
+template <class T>
+inline
+Array2D<T>::Array2D (long sizeX, long sizeY):
+    _sizeY (sizeY), _data (new T[sizeX * sizeY])
+{
+    // emtpy
+}
+
+
+template <class T>
+inline
+Array2D<T>::~Array2D ()
+{
+    delete [] _data;
+}
+
+
+template <class T>
+inline T *     
+Array2D<T>::operator [] (long x)
+{
+    return _data + x * _sizeY;
+}
+
+
+template <class T>
+inline const T *
+Array2D<T>::operator [] (long x) const
+{
+    return _data + x * _sizeY;
+}
+
+
+template <class T>
+inline void
+Array2D<T>::resizeErase (long sizeX, long sizeY)
+{
+    T *tmp = new T[sizeX * sizeY];
+    delete [] _data;
+    _sizeY = sizeY;
+    _data = tmp;
+}
+
+
+template <class T>
+inline void
+Array2D<T>::resizeEraseUnsafe (long sizeX, long sizeY)
+{
+    delete [] _data;
+    _data = 0;
+    _sizeY = 0;
+    _data = new T[sizeX * sizeY];
+    _sizeY = sizeY;
+}
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfAttribute.cpp b/3rdparty/openexr/IlmImf/ImfAttribute.cpp
new file mode 100644 (file)
index 0000000..feb5f83
--- /dev/null
@@ -0,0 +1,156 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class Attribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include "IlmThreadMutex.h"
+#include "Iex.h"
+#include <string.h>
+#include <map>
+
+
+namespace Imf {
+
+using IlmThread::Mutex;
+using IlmThread::Lock;
+
+
+Attribute::Attribute () {}
+
+
+Attribute::~Attribute () {}
+
+
+namespace {
+
+struct NameCompare: std::binary_function <const char *, const char *, bool>
+{
+    bool
+    operator () (const char *x, const char *y) const
+    {
+       return strcmp (x, y) < 0;
+    }
+};
+
+
+typedef Attribute* (*Constructor)();
+typedef std::map <const char *, Constructor, NameCompare> TypeMap;
+
+
+class LockedTypeMap: public TypeMap
+{
+  public:
+
+    Mutex mutex;
+};
+
+
+LockedTypeMap &
+typeMap ()
+{
+    static Mutex criticalSection;
+    Lock lock (criticalSection);
+
+    static LockedTypeMap* typeMap = 0;
+
+    if (typeMap == 0)
+       typeMap = new LockedTypeMap ();
+
+    return *typeMap;
+}
+
+
+} // namespace
+
+
+bool           
+Attribute::knownType (const char typeName[])
+{
+    LockedTypeMap& tMap = typeMap();
+    Lock lock (tMap.mutex);
+
+    return tMap.find (typeName) != tMap.end();
+}
+
+
+void   
+Attribute::registerAttributeType (const char typeName[],
+                                 Attribute *(*newAttribute)())
+{
+    LockedTypeMap& tMap = typeMap();
+    Lock lock (tMap.mutex);
+
+    if (tMap.find (typeName) != tMap.end())
+       THROW (Iex::ArgExc, "Cannot register image file attribute "
+                           "type \"" << typeName << "\". "
+                           "The type has already been registered.");
+
+    tMap.insert (TypeMap::value_type (typeName, newAttribute));
+}
+
+
+void
+Attribute::unRegisterAttributeType (const char typeName[])
+{
+    LockedTypeMap& tMap = typeMap();
+    Lock lock (tMap.mutex);
+
+    tMap.erase (typeName);
+}
+
+
+Attribute *
+Attribute::newAttribute (const char typeName[])
+{
+    LockedTypeMap& tMap = typeMap();
+    Lock lock (tMap.mutex);
+
+    TypeMap::const_iterator i = tMap.find (typeName);
+
+    if (i == tMap.end())
+       THROW (Iex::ArgExc, "Cannot create image file attribute of "
+                           "unknown type \"" << typeName << "\".");
+
+    return (i->second)();
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfAttribute.h b/3rdparty/openexr/IlmImf/ImfAttribute.h
new file mode 100644 (file)
index 0000000..520c20c
--- /dev/null
@@ -0,0 +1,427 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_ATTRIBUTE_H
+#define INCLUDED_IMF_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class Attribute
+//
+//-----------------------------------------------------------------------------
+
+#include "IexBaseExc.h"
+#include <ImfIO.h>
+#include <ImfXdr.h>
+
+
+namespace Imf {
+
+
+class Attribute
+{
+  public:
+
+    //---------------------------
+    // Constructor and destructor
+    //---------------------------
+
+    Attribute ();
+    virtual ~Attribute ();
+
+
+    //-------------------------------
+    // Get this attribute's type name
+    //-------------------------------
+
+    virtual const char *       typeName () const = 0;
+
+
+    //------------------------------
+    // Make a copy of this attribute
+    //------------------------------
+
+    virtual Attribute *                copy () const = 0;
+
+
+    //----------------------------------------
+    // Type-specific attribute I/O and copying
+    //----------------------------------------
+
+    virtual void               writeValueTo (OStream &os,
+                                             int version) const = 0;
+
+    virtual void               readValueFrom (IStream &is,
+                                              int size,
+                                              int version) = 0;
+
+    virtual void               copyValueFrom (const Attribute &other) = 0;
+
+
+    //------------------
+    // Attribute factory
+    //------------------
+
+    static Attribute *         newAttribute (const char typeName[]);
+
+
+    //-----------------------------------------------------------
+    // Test if a given attribute type has already been registered
+    //-----------------------------------------------------------
+
+    static bool                        knownType (const char typeName[]);
+
+
+  protected:
+
+    //--------------------------------------------------
+    // Register an attribute type so that newAttribute()
+    // knows how to make objects of this type.
+    //--------------------------------------------------
+
+    static void                registerAttributeType (const char typeName[],
+                                              Attribute *(*newAttribute)());
+
+    //------------------------------------------------------
+    // Un-register an attribute type so that newAttribute()
+    // no longer knows how to make objects of this type (for
+    // debugging only).
+    //------------------------------------------------------
+
+    static void                unRegisterAttributeType (const char typeName[]);
+};
+
+
+//-------------------------------------------------
+// Class template for attributes of a specific type
+//-------------------------------------------------
+
+template <class T>
+class TypedAttribute: public Attribute
+{
+  public:
+
+    //----------------------------
+    // Constructors and destructor
+    //------------_---------------
+
+    TypedAttribute ();
+    TypedAttribute (const T &value);
+    TypedAttribute (const TypedAttribute<T> &other);
+    virtual ~TypedAttribute ();
+
+
+    //--------------------------------
+    // Access to the attribute's value
+    //--------------------------------
+
+    T &                                        value ();
+    const T &                          value () const;
+
+
+    //--------------------------------
+    // Get this attribute's type name.
+    //--------------------------------
+
+    virtual const char *               typeName () const;
+    
+
+    //---------------------------------------------------------
+    // Static version of typeName()
+    // This function must be specialized for each value type T.
+    //---------------------------------------------------------
+
+    static const char *                        staticTypeName ();
+    
+
+    //---------------------
+    // Make a new attribute
+    //---------------------
+
+    static Attribute *                 makeNewAttribute ();
+
+
+    //------------------------------
+    // Make a copy of this attribute
+    //------------------------------
+
+    virtual Attribute *                        copy () const;
+
+
+    //-----------------------------------------------------------------
+    // Type-specific attribute I/O and copying.
+    // Depending on type T, these functions may have to be specialized.
+    //-----------------------------------------------------------------
+
+    virtual void               writeValueTo (OStream &os,
+                                             int version) const;
+
+    virtual void               readValueFrom (IStream &is,
+                                              int size,
+                                              int version);
+
+    virtual void               copyValueFrom (const Attribute &other);
+
+
+    //------------------------------------------------------------
+    // Dynamic casts that throw exceptions instead of returning 0.
+    //------------------------------------------------------------
+
+    static TypedAttribute *            cast (Attribute *attribute);
+    static const TypedAttribute *      cast (const Attribute *attribute);
+    static TypedAttribute &            cast (Attribute &attribute);
+    static const TypedAttribute &      cast (const Attribute &attribute);
+
+
+    //---------------------------------------------------------------
+    // Register this attribute type so that Attribute::newAttribute()
+    // knows how to make objects of this type.
+    //
+    // Note that this function is not thread-safe because it modifies
+    // a global variable in the IlmIlm library.  A thread in a multi-
+    // threaded program may call registerAttributeType() only when no
+    // other thread is accessing any functions or classes in the
+    // IlmImf library.
+    //
+    //---------------------------------------------------------------
+
+    static void                                registerAttributeType ();
+
+
+    //-----------------------------------------------------
+    // Un-register this attribute type (for debugging only)
+    //-----------------------------------------------------
+
+    static void                                 unRegisterAttributeType ();
+
+
+  private:
+
+    T                                  _value;
+};
+
+
+//------------------------------------
+// Implementation of TypedAttribute<T>
+//------------------------------------
+
+template <class T>
+TypedAttribute<T>::TypedAttribute ():
+    Attribute (),
+    _value (T())
+{
+    // empty
+}
+
+
+template <class T>
+TypedAttribute<T>::TypedAttribute (const T &value):
+    Attribute (),
+    _value (value)
+{
+    // empty
+}
+
+
+template <class T>
+TypedAttribute<T>::TypedAttribute (const TypedAttribute<T> &other):
+    Attribute (other),
+    _value ()
+{
+    copyValueFrom (other);
+}
+
+
+template <class T>
+TypedAttribute<T>::~TypedAttribute ()
+{
+    // empty
+}
+
+
+template <class T>
+inline T &
+TypedAttribute<T>::value ()
+{
+    return _value;
+}
+
+
+template <class T>
+inline const T &
+TypedAttribute<T>::value () const
+{
+    return _value;
+}
+
+
+template <class T>
+const char *   
+TypedAttribute<T>::typeName () const
+{
+    return staticTypeName();
+}
+
+
+template <class T>
+Attribute *
+TypedAttribute<T>::makeNewAttribute ()
+{
+    return new TypedAttribute<T>();
+}
+
+
+template <class T>
+Attribute *
+TypedAttribute<T>::copy () const
+{
+    Attribute * attribute = new TypedAttribute<T>();
+    attribute->copyValueFrom (*this);
+    return attribute;
+}
+
+
+template <class T>
+void           
+TypedAttribute<T>::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value);
+}
+
+
+template <class T>
+void           
+TypedAttribute<T>::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value);
+}
+
+
+template <class T>
+void           
+TypedAttribute<T>::copyValueFrom (const Attribute &other)
+{
+    _value = cast(other)._value;
+}
+
+
+template <class T>
+TypedAttribute<T> *
+TypedAttribute<T>::cast (Attribute *attribute)
+{
+    TypedAttribute<T> *t =
+       dynamic_cast <TypedAttribute<T> *> (attribute);
+
+    if (t == 0)
+       throw Iex::TypeExc ("Unexpected attribute type.");
+
+    return t;
+}
+
+
+template <class T>
+const TypedAttribute<T> *
+TypedAttribute<T>::cast (const Attribute *attribute)
+{
+    const TypedAttribute<T> *t =
+       dynamic_cast <const TypedAttribute<T> *> (attribute);
+
+    if (t == 0)
+       throw Iex::TypeExc ("Unexpected attribute type.");
+
+    return t;
+}
+
+
+template <class T>
+inline TypedAttribute<T> &     
+TypedAttribute<T>::cast (Attribute &attribute)
+{
+    return *cast (&attribute);
+}
+
+
+template <class T>
+inline const TypedAttribute<T> &
+TypedAttribute<T>::cast (const Attribute &attribute)
+{
+    return *cast (&attribute);
+}
+
+
+template <class T>
+inline void
+TypedAttribute<T>::registerAttributeType ()
+{
+    Attribute::registerAttributeType (staticTypeName(), makeNewAttribute);
+}
+
+
+template <class T>
+inline void
+TypedAttribute<T>::unRegisterAttributeType ()
+{
+    Attribute::unRegisterAttributeType (staticTypeName());
+}
+
+
+} // namespace Imf
+
+#if defined(OPENEXR_DLL) && defined(_MSC_VER)
+    // Tell MS VC++ to disable "non dll-interface class used as base
+    // for dll-interface class" and "no suitable definition provided
+    // for explicit template"
+    #pragma warning (disable : 4275 4661)
+
+    #if defined (ILMIMF_EXPORTS)
+       #define IMF_EXPIMP_TEMPLATE
+    #else
+       #define IMF_EXPIMP_TEMPLATE extern
+    #endif
+
+    IMF_EXPIMP_TEMPLATE template class Imf::TypedAttribute<float>;
+    IMF_EXPIMP_TEMPLATE template class Imf::TypedAttribute<double>;
+
+    #pragma warning(default : 4251)
+    #undef EXTERN_TEMPLATE
+#endif
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfAutoArray.h b/3rdparty/openexr/IlmImf/ImfAutoArray.h
new file mode 100644 (file)
index 0000000..edb8b10
--- /dev/null
@@ -0,0 +1,93 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_AUTO_ARRAY_H
+#define INCLUDED_IMF_AUTO_ARRAY_H
+
+//-----------------------------------------------------------------------------
+//
+//     class AutoArray -- a workaround for systems with
+//     insufficient stack space for large auto arrays.
+//
+//-----------------------------------------------------------------------------
+
+#include "OpenEXRConfig.h"
+
+namespace Imf {
+
+
+#if !defined (HAVE_LARGE_STACK)
+
+
+    template <class T, int size>
+    class AutoArray
+    {
+      public:
+
+        AutoArray (): _data (new T [size]) { memset(_data, 0, size*sizeof(T)); }
+       ~AutoArray () {delete [] _data;}
+
+       operator T * ()                 {return _data;}
+       operator const T * () const     {return _data;}
+      
+      private:
+
+       T *_data;
+    };
+
+
+#else
+
+
+    template <class T, int size>
+    class AutoArray
+    {
+      public:
+
+       operator T * ()                 {return _data;}
+       operator const T * () const     {return _data;}
+      
+      private:
+
+       T _data[size];
+    };
+
+
+#endif
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfB44Compressor.cpp b/3rdparty/openexr/IlmImf/ImfB44Compressor.cpp
new file mode 100644 (file)
index 0000000..231c18c
--- /dev/null
@@ -0,0 +1,1069 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class B44Compressor
+//
+//     This compressor is lossy for HALF channels; the compression rate
+//     is fixed at 32/14 (approximately 2.28).  FLOAT and UINT channels
+//     are not compressed; their data are preserved exactly.
+//
+//     Each HALF channel is split into blocks of 4 by 4 pixels.  An
+//     uncompressed block occupies 32 bytes, which are re-interpreted
+//     as sixteen 16-bit unsigned integers, t[0] ... t[15].  Compression
+//     shrinks the block to 14 bytes.  The compressed 14-byte block
+//     contains
+//
+//      - t[0]
+//
+//      - a 6-bit shift value
+//
+//      - 15 densely packed 6-bit values, r[0] ... r[14], which are
+//         computed by subtracting adjacent pixel values and right-
+//        shifting the differences according to the stored shift value.
+//
+//        Differences between adjacent pixels are computed according
+//        to the following diagram:
+//
+//              0 -------->  1 -------->  2 -------->  3
+//               |     3            7           11
+//               |
+//               | 0
+//               |
+//               v 
+//              4 -------->  5 -------->  6 -------->  7
+//               |     4            8           12
+//               |
+//               | 1
+//               |
+//               v
+//              8 -------->  9 --------> 10 --------> 11
+//               |     5            9           13
+//               |
+//               | 2
+//               |
+//               v
+//             12 --------> 13 --------> 14 --------> 15
+//                     6           10           14
+//
+//         Here
+//
+//               5 ---------> 6
+//                     8
+//
+//         means that r[8] is the difference between t[5] and t[6].
+//
+//      - optionally, a 4-by-4 pixel block where all pixels have the
+//        same value can be treated as a special case, where the
+//        compressed block contains only 3 instead of 14 bytes:
+//        t[0], followed by an "impossible" 6-bit shift value and
+//        two padding bits.
+//
+//     This compressor can handle positive and negative pixel values.
+//     NaNs and infinities are replaced with zeroes before compression.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfB44Compressor.h>
+#include <ImfHeader.h>
+#include <ImfChannelList.h>
+#include <ImfMisc.h>
+#include <ImfCheckedArithmetic.h>
+#include <ImathFun.h>
+#include <ImathBox.h>
+#include <Iex.h>
+#include <ImfIO.h>
+#include <ImfXdr.h>
+#include <string.h>
+#include <assert.h>
+#include <algorithm>
+
+namespace Imf {
+
+using Imath::divp;
+using Imath::modp;
+using Imath::Box2i;
+using Imath::V2i;
+using std::min;
+
+namespace {
+
+//
+// Lookup tables for
+//     y = exp (x / 8)
+// and 
+//     x = 8 * log (y)
+//
+
+#include "b44ExpLogTable.h"
+
+
+inline void
+convertFromLinear (unsigned short s[16])
+{
+    for (int i = 0; i < 16; ++i)
+       s[i] = expTable[s[i]];
+}
+
+
+inline void
+convertToLinear (unsigned short s[16])
+{
+    for (int i = 0; i < 16; ++i)
+       s[i] = logTable[s[i]];
+}
+
+
+inline int
+shiftAndRound (int x, int shift)
+{
+    //
+    // Compute
+    //
+    //     y = x * pow (2, -shift),
+    //
+    // then round y to the nearest integer.
+    // In case of a tie, where y is exactly
+    // halfway between two integers, round
+    // to the even one.
+    //
+
+    x <<= 1;
+    int a = (1 << shift) - 1;
+    shift += 1;
+    int b = (x >> shift) & 1;
+    return (x + a + b) >> shift;
+}
+
+
+int
+pack (const unsigned short s[16],
+      unsigned char b[14],
+      bool optFlatFields,
+      bool exactMax)
+{
+    //
+    // Pack a block of 4 by 4 16-bit pixels (32 bytes) into
+    // either 14 or 3 bytes.
+    //
+
+    //
+    // Integers s[0] ... s[15] represent floating-point numbers
+    // in what is essentially a sign-magnitude format.  Convert
+    // s[0] .. s[15] into a new set of integers, t[0] ... t[15],
+    // such that if t[i] is greater than t[j], the floating-point
+    // number that corresponds to s[i] is always greater than
+    // the floating-point number that corresponds to s[j].
+    //
+    // Also, replace any bit patterns that represent NaNs or
+    // infinities with bit patterns that represent floating-point
+    // zeroes.
+    //
+    // bit pattern     floating-point          bit pattern
+    // in s[i]         value                   in t[i]
+    //
+    //  0x7fff         NAN                     0x8000
+    //  0x7ffe         NAN                     0x8000
+    //   ...                                     ...
+    //  0x7c01         NAN                     0x8000
+    //  0x7c00         +infinity               0x8000
+    //  0x7bff         +HALF_MAX               0xfbff
+    //  0x7bfe                                 0xfbfe
+    //  0x7bfd                                 0xfbfd
+    //   ...                                     ...
+    //  0x0002         +2 * HALF_MIN           0x8002
+    //  0x0001         +HALF_MIN               0x8001
+    //  0x0000         +0.0                    0x8000
+    //  0x8000         -0.0                    0x7fff
+    //  0x8001         -HALF_MIN               0x7ffe
+    //  0x8002         -2 * HALF_MIN           0x7ffd
+    //   ...                                     ...
+    //  0xfbfd                                 0x0f02
+    //  0xfbfe                                 0x0401
+    //  0xfbff         -HALF_MAX               0x0400
+    //  0xfc00         -infinity               0x8000
+    //  0xfc01         NAN                     0x8000
+    //   ...                                     ...
+    //  0xfffe         NAN                     0x8000
+    //  0xffff         NAN                     0x8000
+    //
+
+    unsigned short t[16];
+
+    for (int i = 0; i < 16; ++i)
+    {
+       if ((s[i] & 0x7c00) == 0x7c00)
+           t[i] = 0x8000;
+       else if (s[i] & 0x8000)
+           t[i] = ~s[i];
+       else
+           t[i] = s[i] | 0x8000;
+    }
+    
+    //
+    // Find the maximum, tMax, of t[0] ... t[15].
+    //
+
+    unsigned short tMax = 0;
+
+    for (int i = 0; i < 16; ++i)
+       if (tMax < t[i])
+           tMax = t[i];
+
+    //
+    // Compute a set of running differences, r[0] ... r[14]:
+    // Find a shift value such that after rounding off the
+    // rightmost bits and shifting all differenes are between
+    // -32 and +31.  Then bias the differences so that they
+    // end up between 0 and 63.
+    //
+
+    int shift = -1;
+    int d[16];
+    int r[15];
+    int rMin;
+    int rMax;
+
+    const int bias = 0x20;
+
+    do
+    {
+       shift += 1;
+
+       //
+       // Compute absolute differences, d[0] ... d[15],
+       // between tMax and t[0] ... t[15].
+       //
+       // Shift and round the absolute differences.
+       //
+
+       for (int i = 0; i < 16; ++i)
+           d[i] = shiftAndRound (tMax - t[i], shift);
+
+       //
+       // Convert d[0] .. d[15] into running differences
+       //
+
+       r[ 0] = d[ 0] - d[ 4] + bias;
+       r[ 1] = d[ 4] - d[ 8] + bias;
+       r[ 2] = d[ 8] - d[12] + bias;
+
+       r[ 3] = d[ 0] - d[ 1] + bias;
+       r[ 4] = d[ 4] - d[ 5] + bias;
+       r[ 5] = d[ 8] - d[ 9] + bias;
+       r[ 6] = d[12] - d[13] + bias;
+
+       r[ 7] = d[ 1] - d[ 2] + bias;
+       r[ 8] = d[ 5] - d[ 6] + bias;
+       r[ 9] = d[ 9] - d[10] + bias;
+       r[10] = d[13] - d[14] + bias;
+
+       r[11] = d[ 2] - d[ 3] + bias;
+       r[12] = d[ 6] - d[ 7] + bias;
+       r[13] = d[10] - d[11] + bias;
+       r[14] = d[14] - d[15] + bias;
+
+       rMin = r[0];
+       rMax = r[0];
+
+       for (int i = 1; i < 15; ++i)
+       {
+           if (rMin > r[i])
+               rMin = r[i];
+
+           if (rMax < r[i])
+               rMax = r[i];
+       }
+    }
+    while (rMin < 0 || rMax > 0x3f);
+
+    if (rMin == bias && rMax == bias && optFlatFields)
+    {
+       //
+       // Special case - all pixels have the same value.
+       // We encode this in 3 instead of 14 bytes by
+       // storing the value 0xfc in the third output byte,
+       // which cannot occur in the 14-byte encoding.
+       //
+
+       b[0] = (t[0] >> 8);
+       b[1] =  t[0];
+       b[2] = 0xfc;
+
+       return 3;
+    }
+
+    if (exactMax)
+    {
+       //
+       // Adjust t[0] so that the pixel whose value is equal
+       // to tMax gets represented as accurately as possible.
+       //
+
+       t[0] = tMax - (d[0] << shift);
+    }
+
+    //
+    // Pack t[0], shift and r[0] ... r[14] into 14 bytes:
+    //
+
+    b[ 0] = (t[0] >> 8);
+    b[ 1] =  t[0];
+
+    b[ 2] = (unsigned char) ((shift << 2) | (r[ 0] >> 4));
+    b[ 3] = (unsigned char) ((r[ 0] << 4) | (r[ 1] >> 2));
+    b[ 4] = (unsigned char) ((r[ 1] << 6) |  r[ 2]      );
+
+    b[ 5] = (unsigned char) ((r[ 3] << 2) | (r[ 4] >> 4));
+    b[ 6] = (unsigned char) ((r[ 4] << 4) | (r[ 5] >> 2));
+    b[ 7] = (unsigned char) ((r[ 5] << 6) |  r[ 6]      );
+
+    b[ 8] = (unsigned char) ((r[ 7] << 2) | (r[ 8] >> 4));
+    b[ 9] = (unsigned char) ((r[ 8] << 4) | (r[ 9] >> 2));
+    b[10] = (unsigned char) ((r[ 9] << 6) |  r[10]      );
+
+    b[11] = (unsigned char) ((r[11] << 2) | (r[12] >> 4));
+    b[12] = (unsigned char) ((r[12] << 4) | (r[13] >> 2));
+    b[13] = (unsigned char) ((r[13] << 6) |  r[14]      );
+
+    return 14;
+}
+
+
+inline
+void
+unpack14 (const unsigned char b[14], unsigned short s[16])
+{
+    //
+    // Unpack a 14-byte block into 4 by 4 16-bit pixels.
+    //
+
+    #if defined (DEBUG)
+       assert (b[2] != 0xfc);
+    #endif
+
+    s[ 0] = (b[0] << 8) | b[1];
+
+    unsigned short shift = (b[ 2] >> 2);
+    unsigned short bias = (0x20 << shift);
+
+    s[ 4] = s[ 0] + ((((b[ 2] << 4) | (b[ 3] >> 4)) & 0x3f) << shift) - bias;
+    s[ 8] = s[ 4] + ((((b[ 3] << 2) | (b[ 4] >> 6)) & 0x3f) << shift) - bias;
+    s[12] = s[ 8] +   ((b[ 4]                       & 0x3f) << shift) - bias;
+    
+    s[ 1] = s[ 0] +   ((b[ 5] >> 2)                         << shift) - bias;
+    s[ 5] = s[ 4] + ((((b[ 5] << 4) | (b[ 6] >> 4)) & 0x3f) << shift) - bias;
+    s[ 9] = s[ 8] + ((((b[ 6] << 2) | (b[ 7] >> 6)) & 0x3f) << shift) - bias;
+    s[13] = s[12] +   ((b[ 7]                       & 0x3f) << shift) - bias;
+    
+    s[ 2] = s[ 1] +   ((b[ 8] >> 2)                         << shift) - bias;
+    s[ 6] = s[ 5] + ((((b[ 8] << 4) | (b[ 9] >> 4)) & 0x3f) << shift) - bias;
+    s[10] = s[ 9] + ((((b[ 9] << 2) | (b[10] >> 6)) & 0x3f) << shift) - bias;
+    s[14] = s[13] +   ((b[10]                       & 0x3f) << shift) - bias;
+    
+    s[ 3] = s[ 2] +   ((b[11] >> 2)                         << shift) - bias;
+    s[ 7] = s[ 6] + ((((b[11] << 4) | (b[12] >> 4)) & 0x3f) << shift) - bias;
+    s[11] = s[10] + ((((b[12] << 2) | (b[13] >> 6)) & 0x3f) << shift) - bias;
+    s[15] = s[14] +   ((b[13]                       & 0x3f) << shift) - bias;
+
+    for (int i = 0; i < 16; ++i)
+    {
+       if (s[i] & 0x8000)
+           s[i] &= 0x7fff;
+       else
+           s[i] = ~s[i];
+    }
+}
+
+
+inline
+void
+unpack3 (const unsigned char b[3], unsigned short s[16])
+{
+    //
+    // Unpack a 3-byte block into 4 by 4 identical 16-bit pixels.
+    //
+
+    #if defined (DEBUG)
+       assert (b[2] == 0xfc);
+    #endif
+
+    s[0] = (b[0] << 8) | b[1];
+
+    if (s[0] & 0x8000)
+       s[0] &= 0x7fff;
+    else
+       s[0] = ~s[0];
+
+    for (int i = 1; i < 16; ++i)
+       s[i] = s[0];
+}
+
+
+void
+notEnoughData ()
+{
+    throw Iex::InputExc ("Error decompressing data "
+                        "(input data are shorter than expected).");
+}
+
+
+void
+tooMuchData ()
+{
+    throw Iex::InputExc ("Error decompressing data "
+                        "(input data are longer than expected).");
+}
+
+} // namespace
+
+
+struct B44Compressor::ChannelData
+{
+    unsigned short *   start;
+    unsigned short *   end;
+    int                        nx;
+    int                        ny;
+    int                        ys;
+    PixelType          type;
+    bool               pLinear;
+    int                        size;
+};
+
+
+B44Compressor::B44Compressor
+    (const Header &hdr,
+     size_t maxScanLineSize,
+     size_t numScanLines,
+     bool optFlatFields)
+:
+    Compressor (hdr),
+    _maxScanLineSize (maxScanLineSize),
+    _optFlatFields (optFlatFields),
+    _format (XDR),
+    _numScanLines (numScanLines),
+    _tmpBuffer (0),
+    _outBuffer (0),
+    _numChans (0),
+    _channels (hdr.channels()),
+    _channelData (0)
+{
+    //
+    // Allocate buffers for compressed an uncompressed pixel data,
+    // allocate a set of ChannelData structs to help speed up the
+    // compress() and uncompress() functions, below, and determine
+    // if uncompressed pixel data should be in native or Xdr format.
+    //
+
+    _tmpBuffer = new unsigned short
+        [checkArraySize (uiMult (maxScanLineSize, numScanLines),
+                         sizeof (unsigned short))];
+
+    const ChannelList &channels = header().channels();
+    int numHalfChans = 0;
+
+    for (ChannelList::ConstIterator c = channels.begin();
+        c != channels.end();
+        ++c)
+    {
+       assert (pixelTypeSize (c.channel().type) % pixelTypeSize (HALF) == 0);
+       ++_numChans;
+
+       if (c.channel().type == HALF)
+           ++numHalfChans;
+    }
+
+    //
+    // Compressed data may be larger than the input data
+    //
+
+    size_t padding = 12 * numHalfChans * (numScanLines + 3) / 4;
+
+    _outBuffer = new char
+        [uiAdd (uiMult (maxScanLineSize, numScanLines), padding)];
+
+    _channelData = new ChannelData[_numChans];
+
+    int i = 0;
+
+    for (ChannelList::ConstIterator c = channels.begin();
+        c != channels.end();
+        ++c, ++i)
+    {
+       _channelData[i].ys = c.channel().ySampling;
+       _channelData[i].type = c.channel().type;
+       _channelData[i].pLinear = c.channel().pLinear;
+       _channelData[i].size =
+           pixelTypeSize (c.channel().type) / pixelTypeSize (HALF);
+    }
+
+    const Box2i &dataWindow = hdr.dataWindow();
+
+    _minX = dataWindow.min.x;
+    _maxX = dataWindow.max.x;
+    _maxY = dataWindow.max.y;
+
+    //
+    // We can support uncompressed data in the machine's native
+    // format only if all image channels are of type HALF.
+    //
+
+    assert (sizeof (unsigned short) == pixelTypeSize (HALF));
+
+    if (_numChans == numHalfChans)
+       _format = NATIVE;
+}
+
+
+B44Compressor::~B44Compressor ()
+{
+    delete [] _tmpBuffer;
+    delete [] _outBuffer;
+    delete [] _channelData;
+}
+
+
+int
+B44Compressor::numScanLines () const
+{
+    return _numScanLines;
+}
+
+
+Compressor::Format
+B44Compressor::format () const
+{
+    return _format;
+}
+
+
+int
+B44Compressor::compress (const char *inPtr,
+                        int inSize,
+                        int minY,
+                        const char *&outPtr)
+{
+    return compress (inPtr,
+                    inSize,
+                    Box2i (V2i (_minX, minY),
+                           V2i (_maxX, minY + numScanLines() - 1)),
+                    outPtr);
+}
+
+
+int
+B44Compressor::compressTile (const char *inPtr,
+                            int inSize,
+                            Imath::Box2i range,
+                            const char *&outPtr)
+{
+    return compress (inPtr, inSize, range, outPtr);
+}
+
+
+int
+B44Compressor::uncompress (const char *inPtr,
+                          int inSize,
+                          int minY,
+                          const char *&outPtr)
+{
+    return uncompress (inPtr,
+                      inSize,
+                      Box2i (V2i (_minX, minY),
+                             V2i (_maxX, minY + numScanLines() - 1)),
+                      outPtr);
+}
+
+
+int
+B44Compressor::uncompressTile (const char *inPtr,
+                              int inSize,
+                              Imath::Box2i range,
+                              const char *&outPtr)
+{
+    return uncompress (inPtr, inSize, range, outPtr);
+}
+
+
+int
+B44Compressor::compress (const char *inPtr,
+                        int inSize,
+                        Imath::Box2i range,
+                        const char *&outPtr)
+{
+    //
+    // Compress a block of pixel data:  First copy the input pixels
+    // from the input buffer into _tmpBuffer, rearranging them such
+    // that blocks of 4x4 pixels of a single channel can be accessed
+    // conveniently.  Then compress each 4x4 block of HALF pixel data
+    // and append the result to the output buffer.  Copy UINT and
+    // FLOAT data to the output buffer without compressing them.
+    //
+
+    outPtr = _outBuffer;
+
+    if (inSize == 0)
+    {
+       //
+       // Special case - empty input buffer.
+       //
+
+       return 0;
+    }
+
+    //
+    // For each channel, detemine how many pixels are stored
+    // in the input buffer, and where those pixels will be
+    // placed in _tmpBuffer.
+    //
+
+    int minX = range.min.x;
+    int maxX = min (range.max.x, _maxX);
+    int minY = range.min.y;
+    int maxY = min (range.max.y, _maxY);
+    
+    unsigned short *tmpBufferEnd = _tmpBuffer;
+    int i = 0;
+
+    for (ChannelList::ConstIterator c = _channels.begin();
+        c != _channels.end();
+        ++c, ++i)
+    {
+       ChannelData &cd = _channelData[i];
+
+       cd.start = tmpBufferEnd;
+       cd.end = cd.start;
+
+       cd.nx = numSamples (c.channel().xSampling, minX, maxX);
+       cd.ny = numSamples (c.channel().ySampling, minY, maxY);
+
+       tmpBufferEnd += cd.nx * cd.ny * cd.size;
+    }
+
+    if (_format == XDR)
+    {
+       //
+       // The data in the input buffer are in the machine-independent
+       // Xdr format.  Copy the HALF channels into _tmpBuffer and
+       // convert them back into native format for compression.
+       // Copy UINT and FLOAT channels verbatim into _tmpBuffer.
+       //
+
+       for (int y = minY; y <= maxY; ++y)
+       {
+           for (int i = 0; i < _numChans; ++i)
+           {
+               ChannelData &cd = _channelData[i];
+
+               if (modp (y, cd.ys) != 0)
+                   continue;
+
+               if (cd.type == HALF)
+               {
+                   for (int x = cd.nx; x > 0; --x)
+                   {
+                       Xdr::read <CharPtrIO> (inPtr, *cd.end);
+                       ++cd.end;
+                   }
+               }
+               else
+               {
+                   int n = cd.nx * cd.size;
+                   memcpy (cd.end, inPtr, n * sizeof (unsigned short));
+                   inPtr += n * sizeof (unsigned short);
+                   cd.end += n;
+               }
+           }
+       }
+    }
+    else
+    {
+       //
+       // The input buffer contains only HALF channels, and they
+       // are in native, machine-dependent format.  Copy the pixels
+       // into _tmpBuffer.
+       //
+
+       for (int y = minY; y <= maxY; ++y)
+       {
+           for (int i = 0; i < _numChans; ++i)
+           {
+               ChannelData &cd = _channelData[i];
+
+               #if defined (DEBUG)
+                   assert (cd.type == HALF);
+               #endif
+
+               if (modp (y, cd.ys) != 0)
+                   continue;
+
+               int n = cd.nx * cd.size;
+               memcpy (cd.end, inPtr, n * sizeof (unsigned short));
+               inPtr  += n * sizeof (unsigned short);
+               cd.end += n;
+           }
+       }
+    }
+
+    //
+    // The pixels for each channel have been packed into a contiguous
+    // block in _tmpBuffer.  HALF channels are in native format; UINT
+    // and FLOAT channels are in Xdr format.
+    //
+
+    #if defined (DEBUG)
+
+       for (int i = 1; i < _numChans; ++i)
+           assert (_channelData[i-1].end == _channelData[i].start);
+
+       assert (_channelData[_numChans-1].end == tmpBufferEnd);
+
+    #endif
+
+    //
+    // For each HALF channel, split the data in _tmpBuffer into 4x4
+    // pixel blocks.  Compress each block and append the compressed
+    // data to the output buffer.
+    //
+    // UINT and FLOAT channels are copied from _tmpBuffer into the
+    // output buffer without further processing.
+    //
+
+    char *outEnd = _outBuffer;
+
+    for (int i = 0; i < _numChans; ++i)
+    {
+       ChannelData &cd = _channelData[i];
+       
+       if (cd.type != HALF)
+       {
+           //
+           // UINT or FLOAT channel.
+           //
+
+           int n = cd.nx * cd.ny * cd.size * sizeof (unsigned short);
+           memcpy (outEnd, cd.start, n);
+           outEnd += n;
+
+           continue;
+       }
+       
+       //
+       // HALF channel
+       //
+
+       for (int y = 0; y < cd.ny; y += 4)
+       {
+           //
+           // Copy the next 4x4 pixel block into array s.
+           // If the width, cd.nx, or the height, cd.ny, of
+           // the pixel data in _tmpBuffer is not divisible
+           // by 4, then pad the data by repeating the
+           // rightmost column and the bottom row.
+           // 
+
+           unsigned short *row0 = cd.start + y * cd.nx;
+           unsigned short *row1 = row0 + cd.nx;
+           unsigned short *row2 = row1 + cd.nx;
+           unsigned short *row3 = row2 + cd.nx;
+
+           if (y + 3 >= cd.ny)
+           {
+               if (y + 1 >= cd.ny)
+                   row1 = row0;
+
+               if (y + 2 >= cd.ny)
+                   row2 = row1;
+
+               row3 = row2;
+           }
+
+           for (int x = 0; x < cd.nx; x += 4)
+           {
+               unsigned short s[16];
+
+               if (x + 3 >= cd.nx)
+               {
+                   int n = cd.nx - x;
+
+                   for (int i = 0; i < 4; ++i)
+                   {
+                       int j = min (i, n - 1);
+
+                       s[i +  0] = row0[j];
+                       s[i +  4] = row1[j];
+                       s[i +  8] = row2[j];
+                       s[i + 12] = row3[j];
+                   }
+               }
+               else
+               {
+                   memcpy (&s[ 0], row0, 4 * sizeof (unsigned short));
+                   memcpy (&s[ 4], row1, 4 * sizeof (unsigned short));
+                   memcpy (&s[ 8], row2, 4 * sizeof (unsigned short));
+                   memcpy (&s[12], row3, 4 * sizeof (unsigned short));
+               }
+
+               row0 += 4;
+               row1 += 4;
+               row2 += 4;
+               row3 += 4;
+
+               //
+               // Compress the contents of array s and append the
+               // results to the output buffer.
+               //
+
+               if (cd.pLinear)
+                   convertFromLinear (s);
+
+               outEnd += pack (s, (unsigned char *) outEnd,
+                               _optFlatFields, !cd.pLinear);
+           }
+       }
+    }
+
+    return outEnd - _outBuffer;
+}
+
+
+int
+B44Compressor::uncompress (const char *inPtr,
+                          int inSize,
+                          Imath::Box2i range,
+                          const char *&outPtr)
+{
+    //
+    // This function is the reverse of the compress() function,
+    // above.  First all pixels are moved from the input buffer
+    // into _tmpBuffer.  UINT and FLOAT channels are copied
+    // verbatim; HALF channels are uncompressed in blocks of
+    // 4x4 pixels.  Then the pixels in _tmpBuffer are copied
+    // into the output buffer and rearranged such that the data
+    // for for each scan line form a contiguous block.
+    //
+
+    outPtr = _outBuffer;
+
+    if (inSize == 0)
+    {
+       return 0;
+    }
+
+    int minX = range.min.x;
+    int maxX = min (range.max.x, _maxX);
+    int minY = range.min.y;
+    int maxY = min (range.max.y, _maxY);
+    
+    unsigned short *tmpBufferEnd = _tmpBuffer;
+    int i = 0;
+
+    for (ChannelList::ConstIterator c = _channels.begin();
+        c != _channels.end();
+        ++c, ++i)
+    {
+       ChannelData &cd = _channelData[i];
+
+       cd.start = tmpBufferEnd;
+       cd.end = cd.start;
+
+       cd.nx = numSamples (c.channel().xSampling, minX, maxX);
+       cd.ny = numSamples (c.channel().ySampling, minY, maxY);
+
+       tmpBufferEnd += cd.nx * cd.ny * cd.size;
+    }
+
+    for (int i = 0; i < _numChans; ++i)
+    {
+       ChannelData &cd = _channelData[i];
+
+       if (cd.type != HALF)
+       {
+           //
+           // UINT or FLOAT channel.
+           //
+
+           int n = cd.nx * cd.ny * cd.size * sizeof (unsigned short);
+
+           if (inSize < n)
+               notEnoughData();
+
+           memcpy (cd.start, inPtr, n);
+           inPtr += n;
+           inSize -= n;
+
+           continue;
+       }
+
+       //
+       // HALF channel
+       //
+
+       for (int y = 0; y < cd.ny; y += 4)
+       {
+           unsigned short *row0 = cd.start + y * cd.nx;
+           unsigned short *row1 = row0 + cd.nx;
+           unsigned short *row2 = row1 + cd.nx;
+           unsigned short *row3 = row2 + cd.nx;
+
+           for (int x = 0; x < cd.nx; x += 4)
+           {
+               unsigned short s[16]; 
+
+               if (inSize < 3)
+                   notEnoughData();
+
+               if (((const unsigned char *)inPtr)[2] == 0xfc)
+               {
+                   unpack3 ((const unsigned char *)inPtr, s);
+                   inPtr += 3;
+                   inSize -= 3;
+               }
+               else
+               {
+                   if (inSize < 14)
+                       notEnoughData();
+
+                   unpack14 ((const unsigned char *)inPtr, s);
+                   inPtr += 14;
+                   inSize -= 14;
+               }
+
+               if (cd.pLinear)
+                   convertToLinear (s);
+
+               int n = (x + 3 < cd.nx)?
+                           4 * sizeof (unsigned short) :
+                           (cd.nx - x) * sizeof (unsigned short);
+
+               if (y + 3 < cd.ny)
+               {
+                   memcpy (row0, &s[ 0], n);
+                   memcpy (row1, &s[ 4], n);
+                   memcpy (row2, &s[ 8], n);
+                   memcpy (row3, &s[12], n);
+               }
+               else
+               {
+                   memcpy (row0, &s[ 0], n);
+
+                   if (y + 1 < cd.ny)
+                       memcpy (row1, &s[ 4], n);
+
+                   if (y + 2 < cd.ny)
+                       memcpy (row2, &s[ 8], n);
+               }
+
+               row0 += 4;
+               row1 += 4;
+               row2 += 4;
+               row3 += 4;
+           }
+       }
+    }
+
+    char *outEnd = _outBuffer;
+
+    if (_format == XDR)
+    {
+       for (int y = minY; y <= maxY; ++y)
+       {
+           for (int i = 0; i < _numChans; ++i)
+           {
+               ChannelData &cd = _channelData[i];
+
+               if (modp (y, cd.ys) != 0)
+                   continue;
+
+               if (cd.type == HALF)
+               {
+                   for (int x = cd.nx; x > 0; --x)
+                   {
+                       Xdr::write <CharPtrIO> (outEnd, *cd.end);
+                       ++cd.end;
+                   }
+               }
+               else
+               {
+                   int n = cd.nx * cd.size;
+                   memcpy (outEnd, cd.end, n * sizeof (unsigned short));
+                   outEnd += n * sizeof (unsigned short);
+                   cd.end += n;
+               }
+           }
+       }
+    }
+    else
+    {
+       for (int y = minY; y <= maxY; ++y)
+       {
+           for (int i = 0; i < _numChans; ++i)
+           {
+               ChannelData &cd = _channelData[i];
+
+               #if defined (DEBUG)
+                   assert (cd.type == HALF);
+               #endif
+
+               if (modp (y, cd.ys) != 0)
+                   continue;
+
+               int n = cd.nx * cd.size;
+               memcpy (outEnd, cd.end, n * sizeof (unsigned short));
+               outEnd += n * sizeof (unsigned short);
+               cd.end += n;
+           }
+       }
+    }
+
+    #if defined (DEBUG)
+
+       for (int i = 1; i < _numChans; ++i)
+           assert (_channelData[i-1].end == _channelData[i].start);
+
+       assert (_channelData[_numChans-1].end == tmpBufferEnd);
+
+    #endif
+
+    if (inSize > 0)
+       tooMuchData();
+
+    outPtr = _outBuffer;
+    return outEnd - _outBuffer;
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfB44Compressor.h b/3rdparty/openexr/IlmImf/ImfB44Compressor.h
new file mode 100644 (file)
index 0000000..32b3713
--- /dev/null
@@ -0,0 +1,117 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_B44_COMPRESSOR_H
+#define INCLUDED_IMF_B44_COMPRESSOR_H
+
+//-----------------------------------------------------------------------------
+//
+//     class B44Compressor -- lossy compression of 4x4 pixel blocks
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfCompressor.h>
+
+namespace Imf {
+
+class ChannelList;
+
+
+class B44Compressor: public Compressor
+{
+  public:
+
+    B44Compressor (const Header &hdr,
+                   size_t maxScanLineSize,
+                  size_t numScanLines,
+                  bool optFlatFields);
+
+    virtual ~B44Compressor ();
+
+    virtual int                numScanLines () const;
+
+    virtual Format     format () const;
+
+    virtual int                compress (const char *inPtr,
+                                 int inSize,
+                                 int minY,
+                                 const char *&outPtr);                  
+                  
+    virtual int                compressTile (const char *inPtr,
+                                     int inSize,
+                                     Imath::Box2i range,
+                                     const char *&outPtr);
+
+    virtual int                uncompress (const char *inPtr,
+                                   int inSize,
+                                   int minY,
+                                   const char *&outPtr);
+                    
+    virtual int                uncompressTile (const char *inPtr,
+                                       int inSize,
+                                       Imath::Box2i range,
+                                       const char *&outPtr);
+  private:
+
+    struct ChannelData;
+    
+    int                        compress (const char *inPtr,
+                                 int inSize,
+                                 Imath::Box2i range,
+                                 const char *&outPtr);
+    int                        uncompress (const char *inPtr,
+                                   int inSize,
+                                   Imath::Box2i range,
+                                   const char *&outPtr);
+
+    int                        _maxScanLineSize;
+    bool               _optFlatFields;
+    Format             _format;
+    int                        _numScanLines;
+    unsigned short *   _tmpBuffer;
+    char *             _outBuffer;
+    int                        _numChans;
+    const ChannelList &        _channels;
+    ChannelData *      _channelData;
+    int                        _minX;
+    int                        _maxX;
+    int                        _maxY;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfBoxAttribute.cpp b/3rdparty/openexr/IlmImf/ImfBoxAttribute.cpp
new file mode 100644 (file)
index 0000000..d275d11
--- /dev/null
@@ -0,0 +1,110 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class Box2iAttribute
+//     class Box2fAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfBoxAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+Box2iAttribute::staticTypeName ()
+{
+    return "box2i";
+}
+
+
+template <>
+void
+Box2iAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.min.x);
+    Xdr::write <StreamIO> (os, _value.min.y);
+    Xdr::write <StreamIO> (os, _value.max.x);
+    Xdr::write <StreamIO> (os, _value.max.y);
+}
+
+
+template <>
+void
+Box2iAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value.min.x);
+    Xdr::read <StreamIO> (is, _value.min.y);
+    Xdr::read <StreamIO> (is, _value.max.x);
+    Xdr::read <StreamIO> (is, _value.max.y);
+}
+
+
+template <>
+const char *
+Box2fAttribute::staticTypeName ()
+{
+    return "box2f";
+}
+
+
+template <>
+void
+Box2fAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.min.x);
+    Xdr::write <StreamIO> (os, _value.min.y);
+    Xdr::write <StreamIO> (os, _value.max.x);
+    Xdr::write <StreamIO> (os, _value.max.y);
+}
+
+
+template <>
+void
+Box2fAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value.min.x);
+    Xdr::read <StreamIO> (is, _value.min.y);
+    Xdr::read <StreamIO> (is, _value.max.x);
+    Xdr::read <StreamIO> (is, _value.max.y);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfBoxAttribute.h b/3rdparty/openexr/IlmImf/ImfBoxAttribute.h
new file mode 100644 (file)
index 0000000..fe35391
--- /dev/null
@@ -0,0 +1,73 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_BOX_ATTRIBUTE_H
+#define INCLUDED_IMF_BOX_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class Box2iAttribute
+//     class Box2fAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include "ImathBox.h"
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<Imath::Box2i> Box2iAttribute;
+template <> const char *Box2iAttribute::staticTypeName ();
+template <> void Box2iAttribute::writeValueTo (OStream &, int) const;
+template <> void Box2iAttribute::readValueFrom (IStream &, int, int);
+
+
+typedef TypedAttribute<Imath::Box2f> Box2fAttribute;
+template <> const char *Box2fAttribute::staticTypeName ();
+template <> void Box2fAttribute::writeValueTo (OStream &, int) const;
+template <> void Box2fAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfBoxAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfCRgbaFile.cpp b/3rdparty/openexr/IlmImf/ImfCRgbaFile.cpp
new file mode 100644 (file)
index 0000000..1fcf8c6
--- /dev/null
@@ -0,0 +1,1434 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     C interface to C++ classes Imf::RgbaOutputFile and Imf::RgbaInputFile
+//
+//-----------------------------------------------------------------------------
+
+
+#include <ImfCRgbaFile.h>
+#include <ImfRgbaFile.h>
+#include <ImfTiledRgbaFile.h>
+#include <ImfIntAttribute.h>
+#include <ImfFloatAttribute.h>
+#include <ImfDoubleAttribute.h>
+#include <ImfStringAttribute.h>
+#include <ImfBoxAttribute.h>
+#include <ImfVecAttribute.h>
+#include <ImfMatrixAttribute.h>
+#include <ImfChannelList.h>
+#include <ImfLut.h>
+#include "half.h"
+#include <string.h>
+
+using Imath::Box2i;
+using Imath::Box2f;
+using Imath::V2i;
+using Imath::V2f;
+using Imath::V3i;
+using Imath::V3f;
+using Imath::M33f;
+using Imath::M44f;
+
+
+namespace {
+
+
+const int MAX_ERR_LENGTH = 1024;
+char errorMessage[MAX_ERR_LENGTH];
+
+
+void
+setErrorMessage (const std::exception &e)
+{
+    strncpy (errorMessage, e.what(), MAX_ERR_LENGTH - 1);
+    errorMessage[MAX_ERR_LENGTH - 1] = 0;
+}
+
+
+inline Imf::Header *
+header (ImfHeader *hdr)
+{
+    return (Imf::Header *)(hdr);
+}
+
+
+inline const Imf::Header *
+header (const ImfHeader *hdr)
+{
+    return (const Imf::Header *)(hdr);
+}
+
+
+inline Imf::RgbaOutputFile *
+outfile (ImfOutputFile *out)
+{
+    return (Imf::RgbaOutputFile *) out;
+}
+
+
+inline const Imf::RgbaOutputFile *
+outfile (const ImfOutputFile *out)
+{
+    return (const Imf::RgbaOutputFile *) out;
+}
+
+
+inline Imf::TiledRgbaOutputFile *
+outfile (ImfTiledOutputFile *out)
+{
+    return (Imf::TiledRgbaOutputFile *) out;
+}
+
+
+inline const Imf::TiledRgbaOutputFile *
+outfile (const ImfTiledOutputFile *out)
+{
+    return (const Imf::TiledRgbaOutputFile *) out;
+}
+
+
+inline Imf::RgbaInputFile *
+infile (ImfInputFile *in)
+{
+    return (Imf::RgbaInputFile *) in;
+}
+
+
+inline const Imf::RgbaInputFile *
+infile (const ImfInputFile *in)
+{
+    return (const Imf::RgbaInputFile *) in;
+}
+
+
+inline Imf::TiledRgbaInputFile *
+infile (ImfTiledInputFile *in)
+{
+    return (Imf::TiledRgbaInputFile *) in;
+}
+
+
+inline const Imf::TiledRgbaInputFile *
+infile (const ImfTiledInputFile *in)
+{
+    return (const Imf::TiledRgbaInputFile *) in;
+}
+
+
+} // namespace
+
+
+void   
+ImfFloatToHalf (float f, ImfHalf *h)
+{
+    *h = half(f).bits();
+}
+
+
+void   
+ImfFloatToHalfArray (int n, const float f[/*n*/], ImfHalf h[/*n*/])
+{
+    for (int i = 0; i < n; ++i)
+       h[i] = half(f[i]).bits();
+}
+
+
+float  
+ImfHalfToFloat (ImfHalf h)
+{
+    return float (*((half *)&h));
+}
+
+
+void
+ImfHalfToFloatArray (int n, const ImfHalf h[/*n*/], float f[/*n*/])
+{
+    for (int i = 0; i < n; ++i)
+       f[i] = float (*((half *)(h + i)));
+}
+
+
+ImfHeader *
+ImfNewHeader (void)
+{
+    try
+    {
+       return (ImfHeader *) new Imf::Header;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+void   
+ImfDeleteHeader (ImfHeader *hdr)
+{
+    delete header (hdr);
+}
+
+
+ImfHeader *
+ImfCopyHeader (const ImfHeader *hdr)
+{
+    try
+    {
+       return (ImfHeader *) new Imf::Header (*header (hdr));
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+void   
+ImfHeaderSetDisplayWindow (ImfHeader *hdr,
+                          int xMin, int yMin,
+                          int xMax, int yMax)
+{
+    header(hdr)->displayWindow() = Box2i (V2i (xMin, yMin), V2i (xMax, yMax));
+}
+
+
+void   
+ImfHeaderDisplayWindow (const ImfHeader *hdr,
+                       int *xMin, int *yMin,
+                       int *xMax, int *yMax)
+{
+    const Box2i dw = header(hdr)->displayWindow();
+    *xMin = dw.min.x;
+    *yMin = dw.min.y;
+    *xMax = dw.max.x;
+    *yMax = dw.max.y;
+}
+
+
+void
+ImfHeaderSetDataWindow (ImfHeader *hdr,
+                       int xMin, int yMin,
+                       int xMax, int yMax)
+{
+    header(hdr)->dataWindow() = Box2i (V2i (xMin, yMin), V2i (xMax, yMax));
+}
+
+
+void   
+ImfHeaderDataWindow (const ImfHeader *hdr,
+                    int *xMin, int *yMin,
+                    int *xMax, int *yMax)
+{
+    const Box2i dw = header(hdr)->dataWindow();
+    *xMin = dw.min.x;
+    *yMin = dw.min.y;
+    *xMax = dw.max.x;
+    *yMax = dw.max.y;
+}
+
+
+void   
+ImfHeaderSetPixelAspectRatio (ImfHeader *hdr, float pixelAspectRatio)
+{
+    header(hdr)->pixelAspectRatio() = pixelAspectRatio;
+}
+
+
+float  
+ImfHeaderPixelAspectRatio (const ImfHeader *hdr)
+{
+    return header(hdr)->pixelAspectRatio();
+}
+
+
+void   
+ImfHeaderSetScreenWindowCenter (ImfHeader *hdr, float x, float y)
+{
+    header(hdr)->screenWindowCenter() = V2f (x, y);
+}
+
+
+void   
+ImfHeaderScreenWindowCenter (const ImfHeader *hdr, float *x, float *y)
+{
+    const V2i &swc = header(hdr)->screenWindowCenter();
+    *x = swc.x;
+    *y = swc.y;
+}
+
+
+void   
+ImfHeaderSetScreenWindowWidth (ImfHeader *hdr, float width)
+{
+    header(hdr)->screenWindowWidth() = width;
+}
+
+
+float  
+ImfHeaderScreenWindowWidth (const ImfHeader *hdr)
+{
+    return header(hdr)->screenWindowWidth();
+}
+
+
+void   
+ImfHeaderSetLineOrder (ImfHeader *hdr, int lineOrder)
+{
+    header(hdr)->lineOrder() = Imf::LineOrder (lineOrder);
+}
+
+
+int    
+ImfHeaderLineOrder (const ImfHeader *hdr)
+{
+    return header(hdr)->lineOrder();
+}
+
+                           
+void   
+ImfHeaderSetCompression (ImfHeader *hdr, int compression)
+{
+    header(hdr)->compression() = Imf::Compression (compression);
+}
+
+
+int    
+ImfHeaderCompression (const ImfHeader *hdr)
+{
+    return header(hdr)->compression();
+}
+
+
+int    
+ImfHeaderSetIntAttribute (ImfHeader *hdr, const char name[], int value)
+{
+    try
+    {
+       if (header(hdr)->find(name) == header(hdr)->end())
+       {
+           header(hdr)->insert (name, Imf::IntAttribute (value));
+       }
+       else
+       {
+           header(hdr)->typedAttribute<Imf::IntAttribute>(name).value() =
+               value;
+       }
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int    
+ImfHeaderIntAttribute (const ImfHeader *hdr, const char name[], int *value)
+{
+    try
+    {
+       *value = header(hdr)->typedAttribute<Imf::IntAttribute>(name).value();
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int    
+ImfHeaderSetFloatAttribute (ImfHeader *hdr, const char name[], float value)
+{
+    try
+    {
+       if (header(hdr)->find(name) == header(hdr)->end())
+       {
+           header(hdr)->insert (name, Imf::FloatAttribute (value));
+       }
+       else
+       {
+           header(hdr)->typedAttribute<Imf::FloatAttribute>(name).value() =
+               value;
+       }
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int    
+ImfHeaderSetDoubleAttribute (ImfHeader *hdr, const char name[], double value)
+{
+    try
+    {
+       if (header(hdr)->find(name) == header(hdr)->end())
+       {
+           header(hdr)->insert (name, Imf::DoubleAttribute (value));
+       }
+       else
+       {
+           header(hdr)->typedAttribute<Imf::DoubleAttribute>(name).value() =
+               value;
+       }
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderFloatAttribute (const ImfHeader *hdr, const char name[], float *value)
+{
+    try
+    {
+       *value = header(hdr)->typedAttribute<Imf::FloatAttribute>(name).value();
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderDoubleAttribute (const ImfHeader *hdr,
+                         const char name[],
+                         double *value)
+{
+    try
+    {
+       *value = header(hdr)->
+           typedAttribute<Imf::DoubleAttribute>(name).value();
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderSetStringAttribute (ImfHeader *hdr,
+                            const char name[],
+                            const char value[])
+{
+    try
+    {
+       if (header(hdr)->find(name) == header(hdr)->end())
+       {
+           header(hdr)->insert (name, Imf::StringAttribute (value));
+       }
+       else
+       {
+           header(hdr)->typedAttribute<Imf::StringAttribute>(name).value() =
+               value;
+       }
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderStringAttribute (const ImfHeader *hdr,
+                         const char name[],
+                         const char **value)
+{
+    try
+    {
+       *value = header(hdr)->
+           typedAttribute<Imf::StringAttribute>(name).value().c_str();
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderSetBox2iAttribute (ImfHeader *hdr,
+                           const char name[],
+                           int xMin, int yMin,
+                           int xMax, int yMax)
+{
+    try
+    {
+       Box2i box (V2i (xMin, yMin), V2i (xMax, yMax));
+
+       if (header(hdr)->find(name) == header(hdr)->end())
+       {
+           header(hdr)->insert (name, Imf::Box2iAttribute (box));
+       }
+       else
+       {
+           header(hdr)->typedAttribute<Imf::Box2iAttribute>(name).value() =
+               box;
+       }
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderBox2iAttribute (const ImfHeader *hdr,
+                        const char name[],
+                        int *xMin, int *yMin,
+                        int *xMax, int *yMax)
+{
+    try
+    {
+       const Box2i &box =
+           header(hdr)->typedAttribute<Imf::Box2iAttribute>(name).value();
+
+       *xMin = box.min.x;
+       *yMin = box.min.y;
+       *xMax = box.max.x;
+       *yMax = box.max.y;
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderSetBox2fAttribute (ImfHeader *hdr,
+                           const char name[],
+                           float xMin, float yMin,
+                           float xMax, float yMax)
+{
+    try
+    {
+       Box2f box (V2f (xMin, yMin), V2f (xMax, yMax));
+
+       if (header(hdr)->find(name) == header(hdr)->end())
+       {
+           header(hdr)->insert (name, Imf::Box2fAttribute (box));
+       }
+       else
+       {
+           header(hdr)->typedAttribute<Imf::Box2fAttribute>(name).value() =
+               box;
+       }
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderBox2fAttribute (const ImfHeader *hdr,
+                        const char name[],
+                        float *xMin, float *yMin,
+                        float *xMax, float *yMax)
+{
+    try
+    {
+       const Box2f &box =
+           header(hdr)->typedAttribute<Imf::Box2fAttribute>(name).value();
+
+       *xMin = box.min.x;
+       *yMin = box.min.y;
+       *xMax = box.max.x;
+       *yMax = box.max.y;
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderSetV2iAttribute (ImfHeader *hdr,
+                         const char name[],
+                         int x, int y)
+{
+    try
+    {
+       V2i v (x, y);
+
+       if (header(hdr)->find(name) == header(hdr)->end())
+           header(hdr)->insert (name, Imf::V2iAttribute (v));
+       else
+           header(hdr)->typedAttribute<Imf::V2iAttribute>(name).value() = v;
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderV2iAttribute (const ImfHeader *hdr,
+                      const char name[],
+                      int *x, int *y)
+{
+    try
+    {
+       const V2i &v =
+           header(hdr)->typedAttribute<Imf::V2iAttribute>(name).value();
+
+       *x = v.x;
+       *y = v.y;
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int    
+ImfHeaderSetV2fAttribute (ImfHeader *hdr,
+                         const char name[],
+                         float x, float y)
+{
+    try
+    {
+       V2f v (x, y);
+
+       if (header(hdr)->find(name) == header(hdr)->end())
+           header(hdr)->insert (name, Imf::V2fAttribute (v));
+       else
+           header(hdr)->typedAttribute<Imf::V2fAttribute>(name).value() = v;
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderV2fAttribute (const ImfHeader *hdr,
+                      const char name[],
+                      float *x, float *y)
+{
+    try
+    {
+       const V2f &v =
+           header(hdr)->typedAttribute<Imf::V2fAttribute>(name).value();
+
+       *x = v.x;
+       *y = v.y;
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderSetV3iAttribute (ImfHeader *hdr,
+                         const char name[],
+                         int x, int y, int z)
+{
+    try
+    {
+       V3i v (x, y, z);
+
+       if (header(hdr)->find(name) == header(hdr)->end())
+           header(hdr)->insert (name, Imf::V3iAttribute (v));
+       else
+           header(hdr)->typedAttribute<Imf::V3iAttribute>(name).value() = v;
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderV3iAttribute (const ImfHeader *hdr,
+                      const char name[],
+                      int *x, int *y, int *z)
+{
+    try
+    {
+       const V3i &v =
+           header(hdr)->typedAttribute<Imf::V3iAttribute>(name).value();
+
+       *x = v.x;
+       *y = v.y;
+       *z = v.z;
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderSetV3fAttribute (ImfHeader *hdr,
+                         const char name[],
+                         float x, float y, float z)
+{
+    try
+    {
+       V3f v (x, y, z);
+
+       if (header(hdr)->find(name) == header(hdr)->end())
+           header(hdr)->insert (name, Imf::V3fAttribute (v));
+       else
+           header(hdr)->typedAttribute<Imf::V3fAttribute>(name).value() = v;
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderV3fAttribute (const ImfHeader *hdr,
+                      const char name[],
+                      float *x, float *y, float *z)
+{
+    try
+    {
+       const V3f &v =
+           header(hdr)->typedAttribute<Imf::V3fAttribute>(name).value();
+
+       *x = v.x;
+       *y = v.y;
+       *z = v.z;
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderSetM33fAttribute (ImfHeader *hdr,
+                          const char name[],
+                          const float m[3][3])
+{
+    try
+    {
+       M33f m3 (m);
+
+       if (header(hdr)->find(name) == header(hdr)->end())
+           header(hdr)->insert (name, Imf::M33fAttribute (m3));
+       else
+           header(hdr)->typedAttribute<Imf::M33fAttribute>(name).value() = m3;
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderM33fAttribute (const ImfHeader *hdr,
+                       const char name[],
+                       float m[3][3])
+{
+    try
+    {
+       const M33f &m3 =
+           header(hdr)->typedAttribute<Imf::M33fAttribute>(name).value();
+
+       m[0][0] = m3[0][0];
+       m[0][1] = m3[0][1];
+       m[0][2] = m3[0][2];
+
+       m[1][0] = m3[1][0];
+       m[1][1] = m3[1][1];
+       m[1][2] = m3[1][2];
+
+       m[2][0] = m3[2][0];
+       m[2][1] = m3[2][1];
+       m[2][2] = m3[2][2];
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderSetM44fAttribute (ImfHeader *hdr,
+                          const char name[],
+                          const float m[4][4])
+{
+    try
+    {
+       M44f m4 (m);
+
+       if (header(hdr)->find(name) == header(hdr)->end())
+           header(hdr)->insert (name, Imf::M44fAttribute (m4));
+       else
+           header(hdr)->typedAttribute<Imf::M44fAttribute>(name).value() = m4;
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfHeaderM44fAttribute (const ImfHeader *hdr,
+                       const char name[],
+                       float m[4][4])
+{
+    try
+    {
+       const M44f &m4 =
+           header(hdr)->typedAttribute<Imf::M44fAttribute>(name).value();
+
+       m[0][0] = m4[0][0];
+       m[0][1] = m4[0][1];
+       m[0][2] = m4[0][2];
+       m[0][3] = m4[0][3];
+
+       m[1][0] = m4[1][0];
+       m[1][1] = m4[1][1];
+       m[1][2] = m4[1][2];
+       m[1][3] = m4[1][3];
+
+       m[2][0] = m4[2][0];
+       m[2][1] = m4[2][1];
+       m[2][2] = m4[2][2];
+       m[2][3] = m4[2][3];
+
+       m[3][0] = m4[3][0];
+       m[3][1] = m4[3][1];
+       m[3][2] = m4[3][2];
+       m[3][3] = m4[3][3];
+
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+ImfOutputFile *        
+ImfOpenOutputFile (const char name[], const ImfHeader *hdr, int channels)
+{
+    try
+    {
+       return (ImfOutputFile *) new Imf::RgbaOutputFile
+           (name, *header(hdr), Imf::RgbaChannels (channels));
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int            
+ImfCloseOutputFile (ImfOutputFile *out)
+{
+    try
+    {
+       delete outfile (out);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int            
+ImfOutputSetFrameBuffer (ImfOutputFile *out,
+                        const ImfRgba *base,
+                        size_t xStride,
+                        size_t yStride)
+{
+    try
+    {
+       outfile(out)->setFrameBuffer ((Imf::Rgba *)base, xStride, yStride);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int            
+ImfOutputWritePixels (ImfOutputFile *out, int numScanLines)
+{
+    try
+    {
+       outfile(out)->writePixels (numScanLines);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfOutputCurrentScanLine (const ImfOutputFile *out)
+{
+    return outfile(out)->currentScanLine();
+}
+
+
+const ImfHeader *
+ImfOutputHeader (const ImfOutputFile *out)
+{
+    return (const ImfHeader *) &outfile(out)->header();
+}
+
+
+int
+ImfOutputChannels (const ImfOutputFile *out)
+{
+    return outfile(out)->channels();
+}
+
+
+ImfTiledOutputFile *   
+ImfOpenTiledOutputFile (const char name[],
+                       const ImfHeader *hdr,
+                       int channels,
+                       int xSize, int ySize,
+                       int mode, int rmode)
+{
+    try
+    {
+       return (ImfTiledOutputFile *) new Imf::TiledRgbaOutputFile
+                   (name, *header(hdr),
+                    Imf::RgbaChannels (channels),
+                    xSize, ySize,
+                    Imf::LevelMode (mode),
+                    Imf::LevelRoundingMode (rmode));
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int            
+ImfCloseTiledOutputFile (ImfTiledOutputFile *out)
+{
+    try
+    {
+       delete outfile (out);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int            
+ImfTiledOutputSetFrameBuffer (ImfTiledOutputFile *out,
+                             const ImfRgba *base,
+                             size_t xStride,
+                             size_t yStride)
+{
+    try
+    {
+       outfile(out)->setFrameBuffer ((Imf::Rgba *)base, xStride, yStride);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int            
+ImfTiledOutputWriteTile (ImfTiledOutputFile *out,
+                        int dx, int dy,
+                        int lx, int ly)
+{
+    try
+    {
+       outfile(out)->writeTile (dx, dy, lx, ly);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int            
+ImfTiledOutputWriteTiles (ImfTiledOutputFile *out,
+                         int dxMin, int dxMax,
+                          int dyMin, int dyMax,
+                         int lx, int ly)
+{
+    try
+    {
+       outfile(out)->writeTiles (dxMin, dxMax, dyMin, dyMax, lx, ly);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+const ImfHeader *
+ImfTiledOutputHeader (const ImfTiledOutputFile *out)
+{
+    return (const ImfHeader *) &outfile(out)->header();
+}
+
+
+int
+ImfTiledOutputChannels (const ImfTiledOutputFile *out)
+{
+    return outfile(out)->channels();
+}
+
+
+int
+ImfTiledOutputTileXSize (const ImfTiledOutputFile *out)
+{
+    return outfile(out)->tileXSize();
+}
+
+
+int
+ImfTiledOutputTileYSize (const ImfTiledOutputFile *out)
+{
+    return outfile(out)->tileYSize();
+}
+
+
+int
+ImfTiledOutputLevelMode (const ImfTiledOutputFile *out)
+{
+    return outfile(out)->levelMode();
+}
+
+
+int
+ImfTiledOutputLevelRoundingMode (const ImfTiledOutputFile *out)
+{
+    return outfile(out)->levelRoundingMode();
+}
+
+
+ImfInputFile * 
+ImfOpenInputFile (const char name[])
+{
+    try
+    {
+       return (ImfInputFile *) new Imf::RgbaInputFile (name);
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfCloseInputFile (ImfInputFile *in)
+{
+    try
+    {
+       delete infile (in);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int            
+ImfInputSetFrameBuffer (ImfInputFile *in,
+                       ImfRgba *base,
+                       size_t xStride,
+                       size_t yStride)
+{
+    try
+    {
+       infile(in)->setFrameBuffer ((Imf::Rgba *) base, xStride, yStride);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfInputReadPixels (ImfInputFile *in, int scanLine1, int scanLine2)
+{
+    try
+    {
+       infile(in)->readPixels (scanLine1, scanLine2);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+const ImfHeader *
+ImfInputHeader (const ImfInputFile *in)
+{
+    return (const ImfHeader *) &infile(in)->header();
+}
+
+
+int
+ImfInputChannels (const ImfInputFile *in)
+{
+    return infile(in)->channels();
+}
+
+
+const char *
+ImfInputFileName (const ImfInputFile *in)
+{
+    return infile(in)->fileName();
+}
+
+
+ImfTiledInputFile *    
+ImfOpenTiledInputFile (const char name[])
+{
+    try
+    {
+       return (ImfTiledInputFile *) new Imf::TiledRgbaInputFile (name);
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfCloseTiledInputFile (ImfTiledInputFile *in)
+{
+    try
+    {
+       delete infile (in);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int            
+ImfTiledInputSetFrameBuffer (ImfTiledInputFile *in,
+                            ImfRgba *base,
+                            size_t xStride,
+                            size_t yStride)
+{
+    try
+    {
+       infile(in)->setFrameBuffer ((Imf::Rgba *) base, xStride, yStride);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfTiledInputReadTile (ImfTiledInputFile *in,
+                      int dx, int dy,
+                      int lx, int ly)
+{
+    try
+    {
+       infile(in)->readTile (dx, dy, lx, ly);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+int
+ImfTiledInputReadTiles (ImfTiledInputFile *in,
+                       int dxMin, int dxMax,
+                        int dyMin, int dyMax,
+                       int lx, int ly)
+{
+    try
+    {
+       infile(in)->readTiles (dxMin, dxMax, dyMin, dyMax, lx, ly);
+       return 1;
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+const ImfHeader *
+ImfTiledInputHeader (const ImfTiledInputFile *in)
+{
+    return (const ImfHeader *) &infile(in)->header();
+}
+
+
+int
+ImfTiledInputChannels (const ImfTiledInputFile *in)
+{
+    return infile(in)->channels();
+}
+
+
+const char *
+ImfTiledInputFileName (const ImfTiledInputFile *in)
+{
+    return infile(in)->fileName();
+}
+
+
+int
+ImfTiledInputTileXSize (const ImfTiledInputFile *in)
+{
+    return infile(in)->tileXSize();
+}
+
+
+int
+ImfTiledInputTileYSize (const ImfTiledInputFile *in)
+{
+    return infile(in)->tileYSize();
+}
+
+
+int
+ImfTiledInputLevelMode (const ImfTiledInputFile *in)
+{
+    return infile(in)->levelMode();
+}
+
+
+int
+ImfTiledInputLevelRoundingMode (const ImfTiledInputFile *in)
+{
+    return infile(in)->levelRoundingMode();
+}
+
+
+ImfLut *
+ImfNewRound12logLut (int channels)
+{
+    try
+    {
+       return (ImfLut *) new Imf::RgbaLut
+           (Imf::round12log, Imf::RgbaChannels (channels));
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+ImfLut *
+ImfNewRoundNBitLut (unsigned int n, int channels)
+{
+    try
+    {
+       return (ImfLut *) new Imf::RgbaLut
+           (Imf::roundNBit (n), Imf::RgbaChannels (channels));
+    }
+    catch (const std::exception &e)
+    {
+       setErrorMessage (e);
+       return 0;
+    }
+}
+
+
+void
+ImfDeleteLut (ImfLut *lut)
+{
+    delete (Imf::RgbaLut *) lut;
+}
+
+
+void
+ImfApplyLut (ImfLut *lut, ImfRgba *data, int nData, int stride)
+{
+    ((Imf::RgbaLut *)lut)->apply ((Imf::Rgba *)data, nData, stride);
+}
+
+
+const char *   
+ImfErrorMessage ()
+{
+    return errorMessage;
+}
diff --git a/3rdparty/openexr/IlmImf/ImfCRgbaFile.h b/3rdparty/openexr/IlmImf/ImfCRgbaFile.h
new file mode 100644 (file)
index 0000000..e3dc1ce
--- /dev/null
@@ -0,0 +1,467 @@
+/*
+
+Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+Digital Ltd. LLC
+
+All rights reserved.
+
+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 Industrial Light & Magic 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 COPYRIGHT
+OWNER 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 INCLUDED_IMF_C_RGBA_FILE_H
+#define INCLUDED_IMF_C_RGBA_FILE_H
+
+
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Interpreting unsigned shorts as 16-bit floating point numbers
+*/
+
+typedef unsigned short ImfHalf;
+
+void   ImfFloatToHalf (float f,
+                       ImfHalf *h);
+
+void   ImfFloatToHalfArray (int n,
+                           const float f[/*n*/],
+                           ImfHalf h[/*n*/]);
+
+float  ImfHalfToFloat (ImfHalf h);
+
+void   ImfHalfToFloatArray (int n,
+                           const ImfHalf h[/*n*/],
+                           float f[/*n*/]);
+
+/*
+** RGBA pixel; memory layout must be the same as struct Imf::Rgba.
+*/
+
+struct ImfRgba
+{
+    ImfHalf    r;
+    ImfHalf    g;
+    ImfHalf    b;
+    ImfHalf    a;
+};
+
+typedef struct ImfRgba ImfRgba;
+
+/*
+** Magic number; this must be the same as Imf::MAGIC
+*/
+
+#define IMF_MAGIC               20000630
+
+/*
+** Version number; this must be the same as Imf::EXR_VERSION
+*/
+
+#define IMF_VERSION_NUMBER      2
+
+/*
+** Line order; values must the the same as in Imf::LineOrder.
+*/
+
+#define IMF_INCREASING_Y       0
+#define IMF_DECREASING_Y       1
+#define IMF_RAMDOM_Y           2
+
+
+/*
+** Compression types; values must be the same as in Imf::Compression.
+*/
+
+#define IMF_NO_COMPRESSION     0
+#define IMF_RLE_COMPRESSION    1
+#define IMF_ZIPS_COMPRESSION   2
+#define IMF_ZIP_COMPRESSION    3
+#define IMF_PIZ_COMPRESSION    4
+#define IMF_PXR24_COMPRESSION  5
+#define IMF_B44_COMPRESSION    6
+#define IMF_B44A_COMPRESSION   7
+
+
+/*
+** Channels; values must be the same as in Imf::RgbaChannels.
+*/
+
+#define IMF_WRITE_R            0x01
+#define IMF_WRITE_G            0x02
+#define IMF_WRITE_B            0x04
+#define IMF_WRITE_A            0x08
+#define IMF_WRITE_Y            0x10
+#define IMF_WRITE_C            0x20
+#define IMF_WRITE_RGB          0x07
+#define IMF_WRITE_RGBA         0x0f
+#define IMF_WRITE_YC           0x30
+#define IMF_WRITE_YA           0x18
+#define IMF_WRITE_YCA          0x38
+
+
+/*
+** Level modes; values must be the same as in Imf::LevelMode
+*/
+
+#define IMF_ONE_LEVEL          0
+#define IMF_MIPMAP_LEVELS      1
+#define IMF_RIPMAP_LEVELS      2
+
+
+/*
+** Level rounding modes; values must be the same as in Imf::LevelRoundingMode
+*/
+
+#define IMF_ROUND_DOWN         0
+#define IMF_ROUND_UP           1
+
+
+/*
+** RGBA file header
+*/
+
+struct ImfHeader;
+typedef struct ImfHeader ImfHeader;
+
+ImfHeader *    ImfNewHeader (void);
+
+void           ImfDeleteHeader (ImfHeader *hdr);
+
+ImfHeader *    ImfCopyHeader (const ImfHeader *hdr);
+
+void           ImfHeaderSetDisplayWindow (ImfHeader *hdr,
+                                          int xMin, int yMin,
+                                          int xMax, int yMax);
+
+void           ImfHeaderDisplayWindow (const ImfHeader *hdr,
+                                       int *xMin, int *yMin,
+                                       int *xMax, int *yMax);
+
+void           ImfHeaderSetDataWindow (ImfHeader *hdr,
+                                       int xMin, int yMin,
+                                       int xMax, int yMax);
+
+void           ImfHeaderDataWindow (const ImfHeader *hdr,
+                                    int *xMin, int *yMin,
+                                    int *xMax, int *yMax);
+
+void           ImfHeaderSetPixelAspectRatio (ImfHeader *hdr,
+                                             float pixelAspectRatio);
+
+float          ImfHeaderPixelAspectRatio (const ImfHeader *hdr);
+
+void           ImfHeaderSetScreenWindowCenter (ImfHeader *hdr,
+                                               float x, float y);
+
+void           ImfHeaderScreenWindowCenter (const ImfHeader *hdr,
+                                            float *x, float *y);
+
+void           ImfHeaderSetScreenWindowWidth (ImfHeader *hdr,
+                                              float width);
+
+float          ImfHeaderScreenWindowWidth (const ImfHeader *hdr);
+
+void           ImfHeaderSetLineOrder (ImfHeader *hdr,
+                                      int lineOrder);
+
+int            ImfHeaderLineOrder (const ImfHeader *hdr);
+                           
+void           ImfHeaderSetCompression (ImfHeader *hdr,
+                                        int compression);
+
+int            ImfHeaderCompression (const ImfHeader *hdr);
+
+int            ImfHeaderSetIntAttribute (ImfHeader *hdr,
+                                         const char name[],
+                                         int value);
+
+int            ImfHeaderIntAttribute (const ImfHeader *hdr,
+                                      const char name[],
+                                      int *value);
+
+int            ImfHeaderSetFloatAttribute (ImfHeader *hdr,
+                                           const char name[],
+                                           float value);
+
+int            ImfHeaderSetDoubleAttribute (ImfHeader *hdr,
+                                            const char name[],
+                                            double value);
+
+int            ImfHeaderFloatAttribute (const ImfHeader *hdr,
+                                        const char name[],
+                                        float *value);
+
+int            ImfHeaderDoubleAttribute (const ImfHeader *hdr,
+                                         const char name[],
+                                         double *value);
+
+int            ImfHeaderSetStringAttribute (ImfHeader *hdr,
+                                            const char name[],
+                                            const char value[]);
+
+int            ImfHeaderStringAttribute (const ImfHeader *hdr,
+                                        const char name[],
+                                         const char **value);
+
+int            ImfHeaderSetBox2iAttribute (ImfHeader *hdr,
+                                           const char name[],
+                                           int xMin, int yMin,
+                                           int xMax, int yMax);
+
+int            ImfHeaderBox2iAttribute (const ImfHeader *hdr,
+                                        const char name[],
+                                        int *xMin, int *yMin,
+                                        int *xMax, int *yMax);
+
+int            ImfHeaderSetBox2fAttribute (ImfHeader *hdr,
+                                           const char name[],
+                                           float xMin, float yMin,
+                                           float xMax, float yMax);
+
+int            ImfHeaderBox2fAttribute (const ImfHeader *hdr,
+                                        const char name[],
+                                        float *xMin, float *yMin,
+                                        float *xMax, float *yMax);
+
+int            ImfHeaderSetV2iAttribute (ImfHeader *hdr,
+                                        const char name[],
+                                        int x, int y);
+
+int            ImfHeaderV2iAttribute (const ImfHeader *hdr,
+                                      const char name[],
+                                      int *x, int *y);
+
+int            ImfHeaderSetV2fAttribute (ImfHeader *hdr,
+                                         const char name[],
+                                         float x, float y);
+
+int            ImfHeaderV2fAttribute (const ImfHeader *hdr,
+                                      const char name[],
+                                      float *x, float *y);
+
+int            ImfHeaderSetV3iAttribute (ImfHeader *hdr,
+                                         const char name[],
+                                         int x, int y, int z);
+
+int            ImfHeaderV3iAttribute (const ImfHeader *hdr,
+                                      const char name[],
+                                      int *x, int *y, int *z);
+
+int            ImfHeaderSetV3fAttribute (ImfHeader *hdr,
+                                         const char name[],
+                                         float x, float y, float z);
+
+int            ImfHeaderV3fAttribute (const ImfHeader *hdr,
+                                      const char name[],
+                                      float *x, float *y, float *z);
+
+int            ImfHeaderSetM33fAttribute (ImfHeader *hdr,
+                                          const char name[],
+                                          const float m[3][3]);
+
+int            ImfHeaderM33fAttribute (const ImfHeader *hdr,
+                                       const char name[],
+                                       float m[3][3]);
+
+int            ImfHeaderSetM44fAttribute (ImfHeader *hdr,
+                                          const char name[],
+                                          const float m[4][4]);
+
+int            ImfHeaderM44fAttribute (const ImfHeader *hdr,
+                                       const char name[],
+                                       float m[4][4]);
+
+/*
+** RGBA output file
+*/
+
+struct ImfOutputFile;
+typedef struct ImfOutputFile ImfOutputFile;
+
+ImfOutputFile *        ImfOpenOutputFile (const char name[],
+                                  const ImfHeader *hdr,
+                                  int channels);
+
+int                    ImfCloseOutputFile (ImfOutputFile *out);
+
+int                    ImfOutputSetFrameBuffer (ImfOutputFile *out,
+                                                const ImfRgba *base,
+                                                size_t xStride,
+                                                size_t yStride);
+
+int                    ImfOutputWritePixels (ImfOutputFile *out,
+                                             int numScanLines);
+
+int                    ImfOutputCurrentScanLine (const ImfOutputFile *out);
+
+const ImfHeader *      ImfOutputHeader (const ImfOutputFile *out);
+
+int                    ImfOutputChannels (const ImfOutputFile *out);
+
+
+/*
+** Tiled RGBA output file
+*/
+
+struct ImfTiledOutputFile;
+typedef struct ImfTiledOutputFile ImfTiledOutputFile;
+
+ImfTiledOutputFile *   ImfOpenTiledOutputFile (const char name[],
+                                               const ImfHeader *hdr,
+                                               int channels,
+                                               int xSize, int ySize,
+                                               int mode, int rmode);
+
+int            ImfCloseTiledOutputFile (ImfTiledOutputFile *out);
+
+int            ImfTiledOutputSetFrameBuffer (ImfTiledOutputFile *out,
+                                             const ImfRgba *base,
+                                             size_t xStride,
+                                             size_t yStride);
+
+int            ImfTiledOutputWriteTile (ImfTiledOutputFile *out,
+                                        int dx, int dy,
+                                        int lx, int ly);
+
+int             ImfTiledOutputWriteTiles (ImfTiledOutputFile *out,
+                                          int dxMin, int dxMax,
+                                          int dyMin, int dyMax,
+                                          int lx, int ly);
+
+const ImfHeader *      ImfTiledOutputHeader (const ImfTiledOutputFile *out);
+
+int            ImfTiledOutputChannels (const ImfTiledOutputFile *out);
+
+int            ImfTiledOutputTileXSize (const ImfTiledOutputFile *out);
+
+int            ImfTiledOutputTileYSize (const ImfTiledOutputFile *out);
+
+int            ImfTiledOutputLevelMode (const ImfTiledOutputFile *out);
+int            ImfTiledOutputLevelRoundingMode
+                                               (const ImfTiledOutputFile *out);
+
+
+/*
+** RGBA input file
+*/
+
+struct ImfInputFile;
+typedef struct ImfInputFile ImfInputFile;
+
+ImfInputFile *         ImfOpenInputFile (const char name[]);
+
+int                    ImfCloseInputFile (ImfInputFile *in);
+
+int                    ImfInputSetFrameBuffer (ImfInputFile *in,
+                                               ImfRgba *base,
+                                               size_t xStride,
+                                               size_t yStride);
+
+int                    ImfInputReadPixels (ImfInputFile *in,
+                                           int scanLine1,
+                                           int scanLine2);
+
+const ImfHeader *      ImfInputHeader (const ImfInputFile *in);
+
+int                    ImfInputChannels (const ImfInputFile *in);
+
+const char *            ImfInputFileName (const ImfInputFile *in);
+
+
+/*
+** Tiled RGBA input file
+*/
+
+struct ImfTiledInputFile;
+typedef struct ImfTiledInputFile ImfTiledInputFile;
+
+ImfTiledInputFile *    ImfOpenTiledInputFile (const char name[]);
+
+int            ImfCloseTiledInputFile (ImfTiledInputFile *in);
+
+int            ImfTiledInputSetFrameBuffer (ImfTiledInputFile *in,
+                                            ImfRgba *base,
+                                            size_t xStride,
+                                            size_t yStride);
+
+int            ImfTiledInputReadTile (ImfTiledInputFile *in,
+                                      int dx, int dy,
+                                      int lx, int ly);
+
+int            ImfTiledInputReadTiles (ImfTiledInputFile *in,
+                                        int dxMin, int dxMax,
+                                        int dyMin, int dyMax,
+                                        int lx, int ly);
+
+const ImfHeader *      ImfTiledInputHeader (const ImfTiledInputFile *in);
+
+int            ImfTiledInputChannels (const ImfTiledInputFile *in);
+
+const char *           ImfTiledInputFileName (const ImfTiledInputFile *in);
+
+int            ImfTiledInputTileXSize (const ImfTiledInputFile *in);
+
+int            ImfTiledInputTileYSize (const ImfTiledInputFile *in);
+
+int            ImfTiledInputLevelMode (const ImfTiledInputFile *in);
+
+int            ImfTiledInputLevelRoundingMode
+                                              (const ImfTiledInputFile *in);
+
+/*
+** Lookup tables
+*/
+
+struct ImfLut;
+typedef struct ImfLut ImfLut;
+
+ImfLut *               ImfNewRound12logLut (int channels);
+
+ImfLut *               ImfNewRoundNBitLut (unsigned int n, int channels);
+
+void                   ImfDeleteLut (ImfLut *lut);
+
+void                   ImfApplyLut (ImfLut *lut,
+                                    ImfRgba *data,
+                                    int nData,
+                                    int stride);
+/*
+** Most recent error message
+*/
+
+const char *           ImfErrorMessage (void);
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfChannelList.cpp b/3rdparty/openexr/IlmImf/ImfChannelList.cpp
new file mode 100644 (file)
index 0000000..9b1f904
--- /dev/null
@@ -0,0 +1,321 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class Channel
+//     class ChannelList
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfChannelList.h>
+#include <Iex.h>
+
+
+using std::string;
+using std::set;
+
+namespace Imf {
+
+
+Channel::Channel (PixelType t, int xs, int ys, bool pl):
+    type (t),
+    xSampling (xs),
+    ySampling (ys),
+    pLinear (pl)
+{
+    // empty
+}
+
+
+bool   
+Channel::operator == (const Channel &other) const
+{
+    return type == other.type &&
+          xSampling == other.xSampling &&
+          ySampling == other.ySampling &&
+          pLinear == other.pLinear;
+}
+
+
+void   
+ChannelList::insert (const char name[], const Channel &channel)
+{
+    if (name[0] == 0)
+       THROW (Iex::ArgExc, "Image channel name cannot be an empty string.");
+
+    _map[name] = channel;
+}
+
+
+void   
+ChannelList::insert (const string &name, const Channel &channel)
+{
+    insert (name.c_str(), channel);
+}
+
+
+Channel &
+ChannelList::operator [] (const char name[])
+{
+    ChannelMap::iterator i = _map.find (name);
+
+    if (i == _map.end())
+       THROW (Iex::ArgExc, "Cannot find image channel \"" << name << "\".");
+
+    return i->second;
+}
+
+
+const Channel &
+ChannelList::operator [] (const char name[]) const
+{
+    ChannelMap::const_iterator i = _map.find (name);
+
+    if (i == _map.end())
+       THROW (Iex::ArgExc, "Cannot find image channel \"" << name << "\".");
+
+    return i->second;
+}
+
+
+Channel &
+ChannelList::operator [] (const string &name)
+{
+    return this->operator[] (name.c_str());
+}
+
+
+const Channel &
+ChannelList::operator [] (const string &name) const
+{
+    return this->operator[] (name.c_str());
+}
+
+
+Channel *
+ChannelList::findChannel (const char name[])
+{
+    ChannelMap::iterator i = _map.find (name);
+    return (i == _map.end())? 0: &i->second;
+}
+
+
+const Channel *
+ChannelList::findChannel (const char name[]) const
+{
+    ChannelMap::const_iterator i = _map.find (name);
+    return (i == _map.end())? 0: &i->second;
+}
+
+
+Channel *
+ChannelList::findChannel (const string &name)
+{
+    return findChannel (name.c_str());
+}
+
+
+const Channel *
+ChannelList::findChannel (const string &name) const
+{
+    return findChannel (name.c_str());
+}
+
+
+ChannelList::Iterator          
+ChannelList::begin ()
+{
+    return _map.begin();
+}
+
+
+ChannelList::ConstIterator     
+ChannelList::begin () const
+{
+    return _map.begin();
+}
+
+
+ChannelList::Iterator
+ChannelList::end ()
+{
+    return _map.end();
+}
+
+
+ChannelList::ConstIterator     
+ChannelList::end () const
+{
+    return _map.end();
+}
+
+
+ChannelList::Iterator
+ChannelList::find (const char name[])
+{
+    return _map.find (name);
+}
+
+
+ChannelList::ConstIterator
+ChannelList::find (const char name[]) const
+{
+    return _map.find (name);
+}
+
+
+ChannelList::Iterator
+ChannelList::find (const string &name)
+{
+    return find (name.c_str());
+}
+
+
+ChannelList::ConstIterator
+ChannelList::find (const string &name) const
+{
+    return find (name.c_str());
+}
+
+
+void
+ChannelList::layers (set <string> &layerNames) const
+{
+    layerNames.clear();
+
+    for (ConstIterator i = begin(); i != end(); ++i)
+    {
+       string layerName = i.name();
+       size_t pos = layerName.rfind ('.');
+
+       if (pos != string::npos && pos != 0 && pos + 1 < layerName.size())
+       {
+           layerName.erase (pos);
+           layerNames.insert (layerName);
+       }
+    }
+}
+
+
+void
+ChannelList::channelsInLayer (const string &layerName,
+                             Iterator &first,
+                             Iterator &last)
+{
+    channelsWithPrefix (layerName + '.', first, last);
+}
+
+
+void
+ChannelList::channelsInLayer (const string &layerName,
+                             ConstIterator &first,
+                             ConstIterator &last) const
+{
+    channelsWithPrefix (layerName + '.', first, last);
+}
+
+
+void           
+ChannelList::channelsWithPrefix (const char prefix[],
+                                Iterator &first,
+                                Iterator &last)
+{
+    first = last = _map.lower_bound (prefix);
+    int n = strlen (prefix);
+
+    while (last != Iterator (_map.end()) &&
+          strncmp (last.name(), prefix, n) <= 0)
+    {
+       ++last;
+    }
+}
+
+
+void
+ChannelList::channelsWithPrefix (const char prefix[],
+                                ConstIterator &first,
+                                ConstIterator &last) const
+{
+    first = last = _map.lower_bound (prefix);
+    int n = strlen (prefix);
+
+    while (last != ConstIterator (_map.end()) &&
+          strncmp (last.name(), prefix, n) <= 0)
+    {
+       ++last;
+    }
+}
+
+
+void           
+ChannelList::channelsWithPrefix (const string &prefix,
+                                Iterator &first,
+                                Iterator &last)
+{
+    return channelsWithPrefix (prefix.c_str(), first, last);
+}
+
+
+void
+ChannelList::channelsWithPrefix (const string &prefix,
+                                ConstIterator &first,
+                                ConstIterator &last) const
+{
+    return channelsWithPrefix (prefix.c_str(), first, last);
+}
+
+
+bool           
+ChannelList::operator == (const ChannelList &other) const
+{
+    ConstIterator i = begin();
+    ConstIterator j = other.begin();
+
+    while (i != end() && j != other.end())
+    {
+       if (!(i.channel() == j.channel()))
+           return false;
+
+       ++i;
+       ++j;
+    }
+
+    return i == end() && j == other.end();
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfChannelList.h b/3rdparty/openexr/IlmImf/ImfChannelList.h
new file mode 100644 (file)
index 0000000..f3e513a
--- /dev/null
@@ -0,0 +1,433 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_CHANNEL_LIST_H
+#define INCLUDED_IMF_CHANNEL_LIST_H
+
+//-----------------------------------------------------------------------------
+//
+//     class Channel
+//     class ChannelList
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfName.h>
+#include <ImfPixelType.h>
+#include <map>
+#include <set>
+#include <string>
+
+
+namespace Imf {
+
+
+struct Channel
+{
+    //------------------------------
+    // Data type; see ImfPixelType.h
+    //------------------------------
+
+    PixelType          type;
+
+
+    //--------------------------------------------
+    // Subsampling: pixel (x, y) is present in the
+    // channel only if 
+    //
+    //  x % xSampling == 0 && y % ySampling == 0
+    //
+    //--------------------------------------------
+
+    int                        xSampling;
+    int                        ySampling;
+
+
+    //--------------------------------------------------------------
+    // Hint to lossy compression methods that indicates whether
+    // human perception of the quantity represented by this channel
+    // is closer to linear or closer to logarithmic.  Compression
+    // methods may optimize image quality by adjusting pixel data
+    // quantization acording to this hint.
+    // For example, perception of red, green, blue and luminance is
+    // approximately logarithmic; the difference between 0.1 and 0.2
+    // is perceived to be roughly the same as the difference between
+    // 1.0 and 2.0.  Perception of chroma coordinates tends to be
+    // closer to linear than logarithmic; the difference between 0.1
+    // and 0.2 is perceived to be roughly the same as the difference
+    // between 1.0 and 1.1.
+    //--------------------------------------------------------------
+
+    bool               pLinear;
+
+
+    //------------
+    // Constructor
+    //------------
+    
+    Channel (PixelType type = HALF,
+            int xSampling = 1,
+            int ySampling = 1,
+            bool pLinear = false);
+
+
+    //------------
+    // Operator ==
+    //------------
+
+    bool               operator == (const Channel &other) const;
+};
+
+
+class ChannelList
+{
+  public:
+
+    //--------------
+    // Add a channel
+    //--------------
+
+    void                       insert (const char name[],
+                                       const Channel &channel);
+
+    void                       insert (const std::string &name,
+                                       const Channel &channel);
+
+    //------------------------------------------------------------------
+    // Access to existing channels:
+    //
+    // [n]             Returns a reference to the channel with name n.
+    //                 If no channel with name n exists, an Iex::ArgExc
+    //                 is thrown.
+    //
+    // findChannel(n)  Returns a pointer to the channel with name n,
+    //                 or 0 if no channel with name n exists.
+    //
+    //------------------------------------------------------------------
+
+    Channel &                  operator [] (const char name[]);
+    const Channel &            operator [] (const char name[]) const;
+
+    Channel &                  operator [] (const std::string &name);
+    const Channel &            operator [] (const std::string &name) const;
+
+    Channel *                  findChannel (const char name[]);
+    const Channel *            findChannel (const char name[]) const;
+
+    Channel *                  findChannel (const std::string &name);
+    const Channel *            findChannel (const std::string &name) const;
+
+
+    //-------------------------------------------
+    // Iterator-style access to existing channels
+    //-------------------------------------------
+
+    typedef std::map <Name, Channel> ChannelMap;
+
+    class Iterator;
+    class ConstIterator;
+
+    Iterator                   begin ();
+    ConstIterator              begin () const;
+
+    Iterator                   end ();
+    ConstIterator              end () const;
+
+    Iterator                   find (const char name[]);
+    ConstIterator              find (const char name[]) const;
+
+    Iterator                   find (const std::string &name);
+    ConstIterator              find (const std::string &name) const;
+
+    
+    //-----------------------------------------------------------------
+    // Support for image layers:
+    //
+    // In an image file with many channels it is sometimes useful to
+    // group the channels into "layers", that is, into sets of channels
+    // that logically belong together.  Grouping channels into layers
+    // is done using a naming convention:  channel C in layer L is
+    // called "L.C".
+    //
+    // For example, a computer graphic image may contain separate
+    // R, G and B channels for light that originated at each of
+    // several different virtual light sources.  The channels in
+    // this image might be called "light1.R", "light1.G", "light1.B",
+    // "light2.R", "light2.G", "light2.B", etc.
+    // 
+    // Note that this naming convention allows layers to be nested;
+    // for example, "light1.specular.R" identifies the "R" channel
+    // in the "specular" sub-layer of layer "light1".
+    //
+    // Channel names that don't contain a "." or that contain a
+    // "." only at the beginning or at the end are not considered
+    // to be part of any layer.
+    //
+    // layers(lns)             sorts the channels in this ChannelList
+    //                         into layers and stores the names of
+    //                         all layers, sorted alphabetically,
+    //                         into string set lns.
+    //
+    // channelsInLayer(ln,f,l) stores a pair of iterators in f and l
+    //                                 such that the loop
+    //
+    //                                 for (ConstIterator i = f; i != l; ++i)
+    //                                    ...
+    //
+    //                         iterates over all channels in layer ln.
+    //                         channelsInLayer (ln, l, p) calls
+    //                         channelsWithPrefix (ln + ".", l, p).
+    //
+    //-----------------------------------------------------------------
+
+    void               layers (std::set <std::string> &layerNames) const;
+
+    void               channelsInLayer (const std::string &layerName,
+                                        Iterator &first,
+                                        Iterator &last);
+
+    void               channelsInLayer (const std::string &layerName,
+                                        ConstIterator &first,
+                                        ConstIterator &last) const;
+
+
+    //-------------------------------------------------------------------
+    // Find all channels whose name begins with a given prefix:
+    //
+    // channelsWithPrefix(p,f,l) stores a pair of iterators in f and l
+    // such that the following loop iterates over all channels whose name
+    // begins with string p:
+    //
+    //         for (ConstIterator i = f; i != l; ++i)
+    //             ...
+    //
+    //-------------------------------------------------------------------
+
+    void                       channelsWithPrefix (const char prefix[],
+                                                   Iterator &first,
+                                                   Iterator &last);
+
+    void                       channelsWithPrefix (const char prefix[],
+                                                   ConstIterator &first,
+                                                   ConstIterator &last) const;
+
+    void                       channelsWithPrefix (const std::string &prefix,
+                                                   Iterator &first,
+                                                   Iterator &last);
+
+    void                       channelsWithPrefix (const std::string &prefix,
+                                                   ConstIterator &first,
+                                                   ConstIterator &last) const;
+
+    //------------
+    // Operator ==
+    //------------
+
+    bool                       operator == (const ChannelList &other) const;
+
+  private:
+
+    ChannelMap                 _map;
+};
+
+
+//----------
+// Iterators
+//----------
+
+class ChannelList::Iterator
+{
+  public:
+
+    Iterator ();
+    Iterator (const ChannelList::ChannelMap::iterator &i);
+
+    Iterator &                 operator ++ ();
+    Iterator                   operator ++ (int);
+
+    const char *               name () const;
+    Channel &                  channel () const;
+
+  private:
+
+    friend class ChannelList::ConstIterator;
+
+    ChannelList::ChannelMap::iterator _i;
+};
+
+
+class ChannelList::ConstIterator
+{
+  public:
+
+    ConstIterator ();
+    ConstIterator (const ChannelList::ChannelMap::const_iterator &i);
+    ConstIterator (const ChannelList::Iterator &other);
+
+    ConstIterator &            operator ++ ();
+    ConstIterator              operator ++ (int);
+
+    const char *               name () const;
+    const Channel &            channel () const;
+
+  private:
+
+    friend bool operator == (const ConstIterator &, const ConstIterator &);
+    friend bool operator != (const ConstIterator &, const ConstIterator &);
+
+    ChannelList::ChannelMap::const_iterator _i;
+};
+
+
+//-----------------
+// Inline Functions
+//-----------------
+
+inline
+ChannelList::Iterator::Iterator (): _i()
+{
+    // empty
+}
+
+
+inline
+ChannelList::Iterator::Iterator (const ChannelList::ChannelMap::iterator &i):
+    _i (i)
+{
+    // empty
+}
+
+
+inline ChannelList::Iterator &         
+ChannelList::Iterator::operator ++ ()
+{
+    ++_i;
+    return *this;
+}
+
+
+inline ChannelList::Iterator   
+ChannelList::Iterator::operator ++ (int)
+{
+    Iterator tmp = *this;
+    ++_i;
+    return tmp;
+}
+
+
+inline const char *
+ChannelList::Iterator::name () const
+{
+    return *_i->first;
+}
+
+
+inline Channel &       
+ChannelList::Iterator::channel () const
+{
+    return _i->second;
+}
+
+
+inline
+ChannelList::ConstIterator::ConstIterator (): _i()
+{
+    // empty
+}
+
+inline
+ChannelList::ConstIterator::ConstIterator
+    (const ChannelList::ChannelMap::const_iterator &i): _i (i)
+{
+    // empty
+}
+
+
+inline
+ChannelList::ConstIterator::ConstIterator (const ChannelList::Iterator &other):
+    _i (other._i)
+{
+    // empty
+}
+
+inline ChannelList::ConstIterator &
+ChannelList::ConstIterator::operator ++ ()
+{
+    ++_i;
+    return *this;
+}
+
+
+inline ChannelList::ConstIterator              
+ChannelList::ConstIterator::operator ++ (int)
+{
+    ConstIterator tmp = *this;
+    ++_i;
+    return tmp;
+}
+
+
+inline const char *
+ChannelList::ConstIterator::name () const
+{
+    return *_i->first;
+}
+
+inline const Channel & 
+ChannelList::ConstIterator::channel () const
+{
+    return _i->second;
+}
+
+
+inline bool
+operator == (const ChannelList::ConstIterator &x,
+            const ChannelList::ConstIterator &y)
+{
+    return x._i == y._i;
+}
+
+
+inline bool
+operator != (const ChannelList::ConstIterator &x,
+            const ChannelList::ConstIterator &y)
+{
+    return !(x == y);
+}
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfChannelListAttribute.cpp b/3rdparty/openexr/IlmImf/ImfChannelListAttribute.cpp
new file mode 100644 (file)
index 0000000..df2790b
--- /dev/null
@@ -0,0 +1,145 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class ChannelListAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfChannelListAttribute.h>
+
+
+namespace Imf {
+
+namespace {
+
+template <size_t N>
+void checkIsNullTerminated (const char (&str)[N], const char *what)
+{
+    for (int i = 0; i < N; ++i) {
+        if (str[i] == '\0')
+            return;
+   }
+    std::stringstream s;
+    s << "Invalid " << what << ": it is more than " << (N - 1) 
+      << " characters long.";
+    throw Iex::InputExc(s);
+}
+
+} // namespace
+
+template <>
+const char *
+ChannelListAttribute::staticTypeName ()
+{
+    return "chlist";
+}
+
+
+template <>
+void
+ChannelListAttribute::writeValueTo (OStream &os, int version) const
+{
+    for (ChannelList::ConstIterator i = _value.begin();
+        i != _value.end();
+        ++i)
+    {
+       //
+       // Write name
+       //
+
+       Xdr::write <StreamIO> (os, i.name());
+
+       //
+       // Write Channel struct
+       //
+
+       Xdr::write <StreamIO> (os, int (i.channel().type));
+       Xdr::write <StreamIO> (os, i.channel().pLinear);
+       Xdr::pad   <StreamIO> (os, 3);
+       Xdr::write <StreamIO> (os, i.channel().xSampling);
+       Xdr::write <StreamIO> (os, i.channel().ySampling);
+    }
+
+    //
+    // Write end of list marker
+    //
+
+    Xdr::write <StreamIO> (os, "");
+}
+
+
+template <>
+void
+ChannelListAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    while (true)
+    {
+       //
+       // Read name; zero length name means end of channel list
+       //
+
+       char name[Name::SIZE];
+       Xdr::read <StreamIO> (is, Name::MAX_LENGTH, name);
+
+       if (name[0] == 0)
+           break;
+
+       checkIsNullTerminated (name, "channel name");
+
+       //
+       // Read Channel struct
+       //
+
+       int type;
+       bool pLinear;
+       int xSampling;
+       int ySampling;
+
+       Xdr::read <StreamIO> (is, type);
+       Xdr::read <StreamIO> (is, pLinear);
+       Xdr::skip <StreamIO> (is, 3);
+       Xdr::read <StreamIO> (is, xSampling);
+       Xdr::read <StreamIO> (is, ySampling);
+
+       _value.insert
+           (name, Channel (PixelType (type), xSampling, ySampling, pLinear));
+    }
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfChannelListAttribute.h b/3rdparty/openexr/IlmImf/ImfChannelListAttribute.h
new file mode 100644 (file)
index 0000000..050ecf9
--- /dev/null
@@ -0,0 +1,67 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_CHANNEL_LIST_ATTRIBUTE_H
+#define INCLUDED_IMF_CHANNEL_LIST_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class ChannelListAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include <ImfChannelList.h>
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<ChannelList> ChannelListAttribute;
+template <> const char *ChannelListAttribute::staticTypeName ();
+template <> void ChannelListAttribute::writeValueTo (OStream &, int) const;
+template <> void ChannelListAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfChannelListAttribute.cpp>
+#endif
+
+#endif
+
diff --git a/3rdparty/openexr/IlmImf/ImfCheckedArithmetic.h b/3rdparty/openexr/IlmImf/ImfCheckedArithmetic.h
new file mode 100644 (file)
index 0000000..00eb93d
--- /dev/null
@@ -0,0 +1,161 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2009, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_CHECKED_ARITHMETIC_H
+#define INCLUDED_IMF_CHECKED_ARITHMETIC_H
+
+//-----------------------------------------------------------------------------
+//
+//     Integer arithmetic operations that throw exceptions
+//      on overflow, underflow or division by zero.
+//
+//-----------------------------------------------------------------------------
+
+#include <limits>
+#include <IexMathExc.h>
+
+namespace Imf {
+
+template <bool b> struct StaticAssertionFailed;
+template <> struct StaticAssertionFailed <true> {};
+
+#define IMF_STATIC_ASSERT(x) \
+    do {StaticAssertionFailed <x> staticAssertionFailed;} while (false)
+
+
+template <class T>
+T
+uiMult (T a, T b)
+{
+    //
+    // Unsigned integer multiplication
+    //
+
+    IMF_STATIC_ASSERT (!std::numeric_limits<T>::is_signed &&
+                        std::numeric_limits<T>::is_integer);
+
+    if (a > 0 && b > std::numeric_limits<T>::max() / a)
+        throw Iex::OverflowExc ("Integer multiplication overflow.");
+
+    return a * b;
+}
+
+
+template <class T>
+T
+uiDiv (T a, T b)
+{
+    //
+    // Unsigned integer division
+    //
+
+    IMF_STATIC_ASSERT (!std::numeric_limits<T>::is_signed &&
+                        std::numeric_limits<T>::is_integer);
+
+    if (b == 0)
+        throw Iex::DivzeroExc ("Integer division by zero.");
+
+    return a / b;
+}
+
+
+template <class T>
+T
+uiAdd (T a, T b)
+{
+    //
+    // Unsigned integer addition
+    //
+
+    IMF_STATIC_ASSERT (!std::numeric_limits<T>::is_signed &&
+                        std::numeric_limits<T>::is_integer);
+
+    if (a > std::numeric_limits<T>::max() - b)
+        throw Iex::OverflowExc ("Integer addition overflow.");
+
+    return a + b;
+}
+
+
+template <class T>
+T
+uiSub (T a, T b)
+{
+    //
+    // Unsigned integer subtraction
+    //
+
+    IMF_STATIC_ASSERT (!std::numeric_limits<T>::is_signed &&
+                        std::numeric_limits<T>::is_integer);
+
+    if (a < b)
+        throw Iex::UnderflowExc ("Integer subtraction underflow.");
+
+    return a - b;
+}
+
+
+template <class T>
+size_t
+checkArraySize (T n, size_t s)
+{
+    //
+    // Verify that the size, in bytes, of an array with n elements
+    // of size s can be computed without overflowing:
+    //
+    // If computing
+    //
+    //      size_t (n) * s
+    //
+    // would overflow, then throw an Iex::OverflowExc exception.
+    // Otherwise return
+    //
+    //      size_t (n).
+    //
+
+    IMF_STATIC_ASSERT (!std::numeric_limits<T>::is_signed &&
+                        std::numeric_limits<T>::is_integer);
+
+    IMF_STATIC_ASSERT (sizeof (T) <= sizeof (size_t));
+
+    if (size_t (n) > std::numeric_limits<size_t>::max() / s)
+        throw Iex::OverflowExc ("Integer multiplication overflow.");
+
+    return size_t (n);
+}
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfChromaticities.cpp b/3rdparty/openexr/IlmImf/ImfChromaticities.cpp
new file mode 100644 (file)
index 0000000..2db9d0e
--- /dev/null
@@ -0,0 +1,135 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     CIE (x,y) chromaticities, and conversions between
+//     RGB tiples and CIE XYZ tristimulus values.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfChromaticities.h>
+
+namespace Imf {
+
+   
+Chromaticities::Chromaticities (const Imath::V2f &red,
+                               const Imath::V2f &green,
+                               const Imath::V2f &blue,
+                               const Imath::V2f &white)
+:
+    red (red),
+    green (green),
+    blue (blue),
+    white (white)
+{
+    // empty
+}
+
+
+Imath::M44f
+RGBtoXYZ (const Chromaticities chroma, float Y)
+{
+    //
+    // For an explanation of how the color conversion matrix is derived,
+    // see Roy Hall, "Illumination and Color in Computer Generated Imagery",
+    // Springer-Verlag, 1989, chapter 3, "Perceptual Response"; and 
+    // Charles A. Poynton, "A Technical Introduction to Digital Video",
+    // John Wiley & Sons, 1996, chapter 7, "Color science for video".
+    //
+
+    //
+    // X and Z values of RGB value (1, 1, 1), or "white"
+    //
+
+    float X = chroma.white.x * Y / chroma.white.y;
+    float Z = (1 - chroma.white.x - chroma.white.y) * Y / chroma.white.y;
+
+    //
+    // Scale factors for matrix rows
+    //
+
+    float d = chroma.red.x   * (chroma.blue.y  - chroma.green.y) +
+             chroma.blue.x  * (chroma.green.y - chroma.red.y) +
+             chroma.green.x * (chroma.red.y   - chroma.blue.y);
+
+    float Sr = (X * (chroma.blue.y - chroma.green.y) -
+               chroma.green.x * (Y * (chroma.blue.y - 1) +
+               chroma.blue.y  * (X + Z)) +
+               chroma.blue.x  * (Y * (chroma.green.y - 1) +
+               chroma.green.y * (X + Z))) / d;
+
+    float Sg = (X * (chroma.red.y - chroma.blue.y) +
+               chroma.red.x   * (Y * (chroma.blue.y - 1) +
+               chroma.blue.y  * (X + Z)) -
+               chroma.blue.x  * (Y * (chroma.red.y - 1) +
+               chroma.red.y   * (X + Z))) / d;
+
+    float Sb = (X * (chroma.green.y - chroma.red.y) -
+               chroma.red.x   * (Y * (chroma.green.y - 1) +
+               chroma.green.y * (X + Z)) +
+               chroma.green.x * (Y * (chroma.red.y - 1) +
+               chroma.red.y   * (X + Z))) / d;
+
+    //
+    // Assemble the matrix
+    //
+
+    Imath::M44f M;
+
+    M[0][0] = Sr * chroma.red.x;
+    M[0][1] = Sr * chroma.red.y;
+    M[0][2] = Sr * (1 - chroma.red.x - chroma.red.y);
+
+    M[1][0] = Sg * chroma.green.x;
+    M[1][1] = Sg * chroma.green.y;
+    M[1][2] = Sg * (1 - chroma.green.x - chroma.green.y);
+
+    M[2][0] = Sb * chroma.blue.x;
+    M[2][1] = Sb * chroma.blue.y;
+    M[2][2] = Sb * (1 - chroma.blue.x - chroma.blue.y);
+
+    return M;
+}
+
+
+Imath::M44f
+XYZtoRGB (const Chromaticities chroma, float Y)
+{
+    return RGBtoXYZ (chroma, Y).inverse();
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfChromaticities.h b/3rdparty/openexr/IlmImf/ImfChromaticities.h
new file mode 100644 (file)
index 0000000..28e8c51
--- /dev/null
@@ -0,0 +1,120 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_CHROMATICITIES_H
+#define INCLUDED_IMF_CHROMATICITIES_H
+
+//-----------------------------------------------------------------------------
+//
+//     CIE (x,y) chromaticities, and conversions between
+//     RGB tiples and CIE XYZ tristimulus values.
+//
+//-----------------------------------------------------------------------------
+
+#include "ImathVec.h"
+#include "ImathMatrix.h"
+
+namespace Imf {
+
+   
+struct Chromaticities
+{
+    //-----------------------------------------------
+    // The CIE x and y coordinates of the RGB triples
+    // (1,0,0), (0,1,0), (0,0,1) and (1,1,1).
+    //-----------------------------------------------
+
+    Imath::V2f red;
+    Imath::V2f green;
+    Imath::V2f blue;
+    Imath::V2f white;
+
+    //--------------------------------------------
+    // Default constructor produces chromaticities
+    // according to Rec. ITU-R BT.709-3
+    //--------------------------------------------
+
+    Chromaticities (const Imath::V2f &red   = Imath::V2f (0.6400f, 0.3300f),
+                   const Imath::V2f &green = Imath::V2f (0.3000f, 0.6000f),
+                   const Imath::V2f &blue  = Imath::V2f (0.1500f, 0.0600f),
+                   const Imath::V2f &white = Imath::V2f (0.3127f, 0.3290f));
+};
+
+
+//
+// Conversions between RGB and CIE XYZ
+//
+// RGB to XYZ:
+//
+//     Given a set of chromaticities, c, and the luminance, Y, of the RGB
+//     triple (1,1,1), or "white", RGBtoXYZ(c,Y) computes a matrix, M, so
+//     that multiplying an RGB value, v, with M produces an equivalent
+//     XYZ value, w.  (w == v * M)
+// 
+//     If we define that
+// 
+//        (Xr, Yr, Zr) == (1, 0, 0) * M
+//        (Xg, Yg, Zg) == (0, 1, 0) * M
+//        (Xb, Yb, Zb) == (0, 0, 1) * M
+//        (Xw, Yw, Zw) == (1, 1, 1) * M,
+// 
+//     then the following statements are true:
+// 
+//        Xr / (Xr + Yr + Zr) == c.red.x
+//        Yr / (Xr + Yr + Zr) == c.red.y
+// 
+//        Xg / (Xg + Yg + Zg) == c.red.x
+//        Yg / (Xg + Yg + Zg) == c.red.y
+// 
+//        Xb / (Xb + Yb + Zb) == c.red.x
+//        Yb / (Xb + Yb + Zb) == c.red.y
+// 
+//        Xw / (Xw + Yw + Zw) == c.red.x
+//        Yw / (Xw + Yw + Zw) == c.red.y
+// 
+//        Yw == Y.
+// 
+// XYZ to RGB:
+// 
+//     YYZtoRGB(c,Y) returns RGBtoXYZ(c,Y).inverse().
+// 
+
+Imath::M44f    RGBtoXYZ (const Chromaticities chroma, float Y);
+Imath::M44f    XYZtoRGB (const Chromaticities chroma, float Y);
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfChromaticitiesAttribute.cpp b/3rdparty/openexr/IlmImf/ImfChromaticitiesAttribute.cpp
new file mode 100644 (file)
index 0000000..03f3a8d
--- /dev/null
@@ -0,0 +1,86 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class ChromaticitiesAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfChromaticitiesAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+ChromaticitiesAttribute::staticTypeName ()
+{
+    return "chromaticities";
+}
+
+
+template <>
+void
+ChromaticitiesAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.red.x);
+    Xdr::write <StreamIO> (os, _value.red.y);
+    Xdr::write <StreamIO> (os, _value.green.x);
+    Xdr::write <StreamIO> (os, _value.green.y);
+    Xdr::write <StreamIO> (os, _value.blue.x);
+    Xdr::write <StreamIO> (os, _value.blue.y);
+    Xdr::write <StreamIO> (os, _value.white.x);
+    Xdr::write <StreamIO> (os, _value.white.y);
+}
+
+
+template <>
+void
+ChromaticitiesAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value.red.x);
+    Xdr::read <StreamIO> (is, _value.red.y);
+    Xdr::read <StreamIO> (is, _value.green.x);
+    Xdr::read <StreamIO> (is, _value.green.y);
+    Xdr::read <StreamIO> (is, _value.blue.x);
+    Xdr::read <StreamIO> (is, _value.blue.y);
+    Xdr::read <StreamIO> (is, _value.white.x);
+    Xdr::read <StreamIO> (is, _value.white.y);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfChromaticitiesAttribute.h b/3rdparty/openexr/IlmImf/ImfChromaticitiesAttribute.h
new file mode 100644 (file)
index 0000000..08357fa
--- /dev/null
@@ -0,0 +1,72 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_CHROMATICITIES_ATTRIBUTE_H
+#define INCLUDED_IMF_CHROMATICITIES_ATTRIBUTE_H
+
+
+//-----------------------------------------------------------------------------
+//
+//     class ChromaticitiesAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include <ImfChromaticities.h>
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<Chromaticities> ChromaticitiesAttribute;
+
+template <>
+const char *ChromaticitiesAttribute::staticTypeName ();
+
+template <>
+void ChromaticitiesAttribute::writeValueTo (OStream &, int) const;
+
+template <>
+void ChromaticitiesAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfChromaticitiesAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfCompression.h b/3rdparty/openexr/IlmImf/ImfCompression.h
new file mode 100644 (file)
index 0000000..2115943
--- /dev/null
@@ -0,0 +1,75 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_COMPRESSION_H
+#define INCLUDED_IMF_COMPRESSION_H
+
+//-----------------------------------------------------------------------------
+//
+//     enum Compression
+//
+//-----------------------------------------------------------------------------
+
+namespace Imf {
+
+
+enum Compression
+{
+    NO_COMPRESSION  = 0,       // no compression
+
+    RLE_COMPRESSION = 1,       // run length encoding
+
+    ZIPS_COMPRESSION = 2,      // zlib compression, one scan line at a time
+
+    ZIP_COMPRESSION = 3,       // zlib compression, in blocks of 16 scan lines
+
+    PIZ_COMPRESSION = 4,       // piz-based wavelet compression
+
+    PXR24_COMPRESSION = 5,     // lossy 24-bit float compression
+
+    B44_COMPRESSION = 6,       // lossy 4-by-4 pixel block compression,
+                               // fixed compression rate
+
+    B44A_COMPRESSION = 7,      // lossy 4-by-4 pixel block compression,
+                               // flat fields are compressed more
+
+    NUM_COMPRESSION_METHODS    // number of different compression methods
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfCompressionAttribute.cpp b/3rdparty/openexr/IlmImf/ImfCompressionAttribute.cpp
new file mode 100644 (file)
index 0000000..0c28d16
--- /dev/null
@@ -0,0 +1,76 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class CompressionAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfCompressionAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+CompressionAttribute::staticTypeName ()
+{
+    return "compression";
+}
+
+
+template <>
+void
+CompressionAttribute::writeValueTo (OStream &os, int version) const
+{
+    unsigned char tmp = _value;
+    Xdr::write <StreamIO> (os, tmp);
+}
+
+
+template <>
+void
+CompressionAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    unsigned char tmp;
+    Xdr::read <StreamIO> (is, tmp);
+    _value = Compression (tmp);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfCompressionAttribute.h b/3rdparty/openexr/IlmImf/ImfCompressionAttribute.h
new file mode 100644 (file)
index 0000000..268c26b
--- /dev/null
@@ -0,0 +1,66 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_COMPRESSION_ATTRIBUTE_H
+#define INCLUDED_IMF_COMPRESSION_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class CompressionAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include <ImfCompression.h>
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<Compression> CompressionAttribute;
+template <> const char *CompressionAttribute::staticTypeName ();
+template <> void CompressionAttribute::writeValueTo (OStream &, int) const;
+template <> void CompressionAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfCompressionAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfCompressor.cpp b/3rdparty/openexr/IlmImf/ImfCompressor.cpp
new file mode 100644 (file)
index 0000000..96bde8f
--- /dev/null
@@ -0,0 +1,192 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class Compressor
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfCompressor.h>
+#include <ImfRleCompressor.h>
+#include <ImfZipCompressor.h>
+#include <ImfPizCompressor.h>
+#include <ImfPxr24Compressor.h>
+#include <ImfB44Compressor.h>
+#include <ImfCheckedArithmetic.h>
+
+namespace Imf {
+
+using Imath::Box2i;
+
+
+Compressor::Compressor (const Header &hdr): _header (hdr) {}
+
+
+Compressor::~Compressor () {}
+
+
+Compressor::Format
+Compressor::format () const
+{
+    return XDR;
+}
+
+
+int
+Compressor::compressTile (const char *inPtr,
+                         int inSize,
+                         Box2i range,
+                         const char *&outPtr)
+{
+    return compress (inPtr, inSize, range.min.y, outPtr);
+}
+
+             
+int
+Compressor::uncompressTile (const char *inPtr,
+                           int inSize,
+                           Box2i range,
+                           const char *&outPtr)
+{
+    return uncompress (inPtr, inSize, range.min.y, outPtr);
+}
+
+
+bool   
+isValidCompression (Compression c)
+{
+    switch (c)
+    {
+      case NO_COMPRESSION:
+      case RLE_COMPRESSION:
+      case ZIPS_COMPRESSION:
+      case ZIP_COMPRESSION:
+      case PIZ_COMPRESSION:
+      case PXR24_COMPRESSION:
+      case B44_COMPRESSION:
+      case B44A_COMPRESSION:
+
+       return true;
+
+      default:
+
+       return false;
+    }
+}
+
+
+Compressor *
+newCompressor (Compression c, size_t maxScanLineSize, const Header &hdr)
+{
+    switch (c)
+    {
+      case RLE_COMPRESSION:
+
+       return new RleCompressor (hdr, maxScanLineSize);
+
+      case ZIPS_COMPRESSION:
+
+       return new ZipCompressor (hdr, maxScanLineSize, 1);
+
+      case ZIP_COMPRESSION:
+
+       return new ZipCompressor (hdr, maxScanLineSize, 16);
+
+      case PIZ_COMPRESSION:
+
+       return new PizCompressor (hdr, maxScanLineSize, 32);
+
+      case PXR24_COMPRESSION:
+
+       return new Pxr24Compressor (hdr, maxScanLineSize, 16);
+
+      case B44_COMPRESSION:
+
+       return new B44Compressor (hdr, maxScanLineSize, 32, false);
+
+      case B44A_COMPRESSION:
+
+       return new B44Compressor (hdr, maxScanLineSize, 32, true);
+
+      default:
+
+       return 0;
+    }
+}
+
+
+Compressor *
+newTileCompressor (Compression c,
+                  size_t tileLineSize,
+                  size_t numTileLines,
+                  const Header &hdr)
+{
+    switch (c)
+    {
+      case RLE_COMPRESSION:
+
+       return new RleCompressor (hdr, uiMult (tileLineSize, numTileLines));
+
+      case ZIPS_COMPRESSION:
+      case ZIP_COMPRESSION:
+
+       return new ZipCompressor (hdr, tileLineSize, numTileLines);
+
+      case PIZ_COMPRESSION:
+
+       return new PizCompressor (hdr, tileLineSize, numTileLines);
+
+      case PXR24_COMPRESSION:
+
+       return new Pxr24Compressor (hdr, tileLineSize, numTileLines);
+
+      case B44_COMPRESSION:
+
+       return new B44Compressor (hdr, tileLineSize, numTileLines, false);
+
+      case B44A_COMPRESSION:
+
+       return new B44Compressor (hdr, tileLineSize, numTileLines, true);
+
+      default:
+
+       return 0;
+    }
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfCompressor.h b/3rdparty/openexr/IlmImf/ImfCompressor.h
new file mode 100644 (file)
index 0000000..6039396
--- /dev/null
@@ -0,0 +1,252 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_COMPRESSOR_H
+#define INCLUDED_IMF_COMPRESSOR_H
+
+//-----------------------------------------------------------------------------
+//
+//     class Compressor
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfCompression.h>
+#include "ImathBox.h"
+#include <stdlib.h>
+
+namespace Imf {
+
+class Header;
+
+
+class Compressor
+{
+  public:
+
+    //---------------------------------------------
+    // Constructor -- hdr is the header of the file
+    // that will be compressed or uncompressed
+    //---------------------------------------------
+
+    Compressor (const Header &hdr);
+
+
+    //-----------
+    // Destructor
+    //-----------
+
+    virtual ~Compressor ();
+
+
+    //----------------------------------------------
+    // Maximum number of scan lines processed by
+    // a single call to compress() and uncompress().
+    //----------------------------------------------
+
+    virtual int                numScanLines () const = 0;
+
+
+    //--------------------------------------------
+    // Format of the pixel data read and written
+    // by the compress() and uncompress() methods.
+    // The default implementation of format()
+    // returns XDR.
+    //--------------------------------------------
+
+    enum Format
+    {
+       NATIVE,         // the machine's native format
+       XDR             // Xdr format
+    };
+
+    virtual Format     format () const;
+
+
+    //----------------------------
+    // Access to the file's header
+    //----------------------------
+
+    const Header &     header () const         {return _header;}
+
+
+    //-------------------------------------------------------------------------
+    // Compress an array of bytes that represents the contents of up to
+    // numScanLines() scan lines:
+    //
+    //     inPtr               Input buffer (uncompressed data).
+    //
+    //     inSize              Number of bytes in the input buffer
+    //
+    //     minY                Minimum y coordinate of the scan lines to
+    //                         be compressed
+    //
+    //     outPtr              Pointer to output buffer
+    //
+    //     return value        Size of compressed data in output buffer
+    //
+    // Arrangement of uncompressed pixel data in the input buffer:
+    //
+    // Before calling
+    //
+    //         compress (buf, size, minY, ...);
+    //
+    // the InputFile::writePixels() method gathers pixel data from the
+    //         frame buffer, fb, and places them in buffer buf, like this:
+    //
+    //  char *endOfBuf = buf;
+    //
+    // for (int y = minY;
+    //      y <= min (minY + numScanLines() - 1, header().dataWindow().max.y);
+    //      ++y)
+    // {
+    //     for (ChannelList::ConstIterator c = header().channels().begin();
+    //          c != header().channels().end();
+    //          ++c)
+    //     {
+    //         if (modp (y, c.channel().ySampling) != 0)
+    //             continue;
+    //
+    //         for (int x = header().dataWindow().min.x;
+    //              x <= header().dataWindow().max.x;
+    //              ++x)
+    //         {
+    //             if (modp (x, c.channel().xSampling) != 0)
+    //                 continue;
+    //
+    //             Xdr::write<CharPtrIO> (endOfBuf, fb.pixel (c, x, y));
+    //         }
+    //     }
+    // }
+    //
+    // int size = endOfBuf - buf;
+    //
+    //-------------------------------------------------------------------------
+
+    virtual int                compress (const char *inPtr,
+                                 int inSize,
+                                 int minY,
+                                 const char *&outPtr) = 0;
+
+    virtual int                compressTile (const char *inPtr,
+                                     int inSize,
+                                     Imath::Box2i range,
+                                     const char *&outPtr);
+
+    //-------------------------------------------------------------------------
+    // Uncompress an array of bytes that has been compressed by compress():
+    //
+    //     inPtr               Input buffer (compressed data).
+    //
+    //     inSize              Number of bytes in the input buffer
+    //
+    //     minY                Minimum y coordinate of the scan lines to
+    //                         be uncompressed
+    //
+    //     outPtr              Pointer to output buffer
+    //
+    //     return value        Size of uncompressed data in output buffer
+    //
+    //-------------------------------------------------------------------------
+
+    virtual int                uncompress (const char *inPtr,
+                                   int inSize,
+                                   int minY,
+                                   const char *&outPtr) = 0;
+
+    virtual int                uncompressTile (const char *inPtr,
+                                       int inSize,
+                                       Imath::Box2i range,
+                                       const char *&outPtr);
+
+  private:
+
+    const Header &     _header;
+};
+
+
+//--------------------------------------
+// Test if c is a valid compression type
+//--------------------------------------
+
+bool           isValidCompression (Compression c);
+
+
+//-----------------------------------------------------------------
+// Construct a Compressor for compression type c:
+//
+//  maxScanLineSize    Maximum number of bytes per uncompressed
+//                     scan line.
+//
+//  header             Header of the input or output file whose
+//                     pixels will be compressed or uncompressed.
+//                     
+//  return value       A pointer to a new Compressor object (it
+//                     is the caller's responsibility to delete
+//                     the object), or 0 (if c is NO_COMPRESSION).
+//
+//-----------------------------------------------------------------
+
+Compressor *   newCompressor (Compression c,
+                              size_t maxScanLineSize,
+                              const Header &hdr);
+
+
+//-----------------------------------------------------------------
+// Construct a Compressor for compression type c for a tiled image:
+//
+//  tileLineSize       Maximum number of bytes per uncompressed
+//                     line in a tile.
+//
+//  numTileLines       Maximum number of lines in a tile.
+//
+//  header             Header of the input or output file whose
+//                     pixels will be compressed or uncompressed.
+//
+//  return value       A pointer to a new Compressor object (it
+//                     is the caller's responsibility to delete
+//                     the object), or 0 (if c is NO_COMPRESSION).
+//
+//-----------------------------------------------------------------
+
+Compressor *    newTileCompressor (Compression c,
+                                  size_t tileLineSize,
+                                  size_t numTileLines,
+                                  const Header &hdr);
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfConvert.cpp b/3rdparty/openexr/IlmImf/ImfConvert.cpp
new file mode 100644 (file)
index 0000000..0d6a4a1
--- /dev/null
@@ -0,0 +1,139 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     Routines for converting between pixel data types,
+//     with well-defined behavior for exceptional cases.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfConvert.h>
+#include <limits.h>
+
+namespace Imf {
+namespace {
+
+inline bool
+isNegative (float f)
+{
+    union {float f; int i;} u;
+    u.f = f;
+    return (u.i & 0x80000000) != 0;
+}
+
+
+inline bool
+isNan (float f)
+{
+    union {float f; int i;} u;
+    u.f = f;
+    return (u.i & 0x7fffffff) > 0x7f800000;
+}
+
+
+inline bool
+isInfinity (float f)
+{
+    union {float f; int i;} u;
+    u.f = f;
+    return (u.i & 0x7fffffff) == 0x7f800000;
+}
+
+
+inline bool
+isFinite (float f)
+{
+    union {float f; int i;} u;
+    u.f = f;
+    return (u.i & 0x7f800000) != 0x7f800000;
+}
+
+} // namespace
+
+
+unsigned int
+halfToUint (half h)
+{
+    if (h.isNegative() || h.isNan())
+       return 0;
+
+    if (h.isInfinity())
+       return UINT_MAX;
+
+    return (unsigned int) h;
+}
+
+
+unsigned int
+floatToUint (float f)
+{
+    if (isNegative (f) || isNan (f))
+       return 0;
+
+    if (isInfinity (f) || f > UINT_MAX)
+       return UINT_MAX;
+
+    return (unsigned int) f;
+}
+
+
+half   
+uintToHalf (unsigned int ui)
+{
+    if (ui >  HALF_MAX)
+       return half::posInf();
+
+    return half (ui);
+}
+
+
+half   
+floatToHalf (float f)
+{
+    if (isFinite (f))
+    {
+       if (f >  HALF_MAX)
+           return half::posInf();
+
+       if (f < -HALF_MAX)
+           return half::negInf();
+    }
+
+    return half (f);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfConvert.h b/3rdparty/openexr/IlmImf/ImfConvert.h
new file mode 100644 (file)
index 0000000..fc2c037
--- /dev/null
@@ -0,0 +1,104 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_CONVERT_H
+#define INCLUDED_IMF_CONVERT_H
+
+//-----------------------------------------------------------------------------
+//
+//     Routines for converting between pixel data types,
+//     with well-defined behavior for exceptional cases,
+//     without depending on how hardware and operating
+//     system handle integer overflows and floating-point
+//     exceptions.
+//
+//-----------------------------------------------------------------------------
+
+#include "half.h"
+
+
+namespace Imf {
+
+//---------------------------------------------------------
+// Conversion from half or float to unsigned int:
+//
+//     input                   result
+//     ---------------------------------------------------
+//
+//     finite, >= 0            input, cast to unsigned int
+//                             (rounds towards zero)
+//
+//     finite, < 0             0
+//
+//     NaN                     0
+//
+//     +infinity               UINT_MAX
+//
+//     -infinity               0
+//
+//---------------------------------------------------------
+
+unsigned int   halfToUint (half h);
+unsigned int   floatToUint (float f);
+
+
+//---------------------------------------------------------
+// Conversion from unsigned int or float to half:
+//
+//     input                   result
+//     ---------------------------------------------------
+//
+//     finite,                 closest possible half
+//     magnitude <= HALF_MAX
+//
+//     finite, > HALF_MAX      +infinity
+//
+//     finite, < -HALF_MAX     -infinity
+//
+//     NaN                     NaN
+//
+//     +infinity               +infinity
+//
+//     -infinity               -infinity
+//
+//---------------------------------------------------------
+
+half           uintToHalf (unsigned int ui);
+half           floatToHalf (float f);
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfDoubleAttribute.cpp b/3rdparty/openexr/IlmImf/ImfDoubleAttribute.cpp
new file mode 100644 (file)
index 0000000..1ed40c0
--- /dev/null
@@ -0,0 +1,57 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class DoubleAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfDoubleAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+DoubleAttribute::staticTypeName ()
+{
+    return "double";
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfDoubleAttribute.h b/3rdparty/openexr/IlmImf/ImfDoubleAttribute.h
new file mode 100644 (file)
index 0000000..bafd1ef
--- /dev/null
@@ -0,0 +1,63 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_DOUBLE_ATTRIBUTE_H
+#define INCLUDED_IMF_DOUBLE_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class DoubleAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<double> DoubleAttribute;
+template <> const char *DoubleAttribute::staticTypeName ();
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfDoubleAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfEnvmap.cpp b/3rdparty/openexr/IlmImf/ImfEnvmap.cpp
new file mode 100644 (file)
index 0000000..fdb04ac
--- /dev/null
@@ -0,0 +1,328 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     Environment maps
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfEnvmap.h>
+#include "ImathFun.h"
+#include <algorithm>
+#include <math.h>
+
+using namespace std;
+using namespace Imath;
+
+namespace Imf {
+namespace LatLongMap {
+
+V2f    
+latLong (const V3f &dir)
+{
+    float r = sqrt (dir.z * dir.z + dir.x * dir.x);
+
+    float latitude = (r < abs (dir.y))?
+                        acos (r / dir.length()) * sign (dir.y):
+                        asin (dir.y / dir.length());
+
+    float longitude = (dir.z == 0 && dir.x == 0)? 0: atan2 (dir.x, dir.z);
+
+    return V2f (latitude, longitude);
+}
+
+
+V2f
+latLong (const Box2i &dataWindow, const V2f &pixelPosition)
+{
+    float latitude, longitude;
+
+    if (dataWindow.max.y > dataWindow.min.y)
+    {
+       latitude = -M_PI *
+                 ((pixelPosition.y  - dataWindow.min.y) /
+                  (dataWindow.max.y - dataWindow.min.y) - 0.5f);
+    }
+    else
+    {
+       latitude = 0;
+    }
+
+    if (dataWindow.max.x > dataWindow.min.x)
+    {
+       longitude = -2 * M_PI *
+                  ((pixelPosition.x  - dataWindow.min.x) /
+                   (dataWindow.max.x - dataWindow.min.x) - 0.5f);
+    }
+    else
+    {
+       longitude = 0;
+    }
+
+    return V2f (latitude, longitude);
+}
+
+
+V2f
+pixelPosition (const Box2i &dataWindow, const V2f &latLong)
+{
+    float x = latLong.y / (-2 * M_PI) + 0.5f;
+    float y = latLong.x / -M_PI + 0.5f;
+
+    return V2f (x * (dataWindow.max.x - dataWindow.min.x) + dataWindow.min.x,
+               y * (dataWindow.max.y - dataWindow.min.y) + dataWindow.min.y);
+}
+
+
+V2f
+pixelPosition (const Box2i &dataWindow, const V3f &direction)
+{
+    return pixelPosition (dataWindow, latLong (direction));
+}
+
+
+V3f
+direction (const Box2i &dataWindow, const V2f &pixelPosition)
+{
+    V2f ll = latLong (dataWindow, pixelPosition);
+
+    return V3f (sin (ll.y) * cos (ll.x),
+               sin (ll.x),
+               cos (ll.y) * cos (ll.x));
+}
+
+} // namespace LatLongMap
+
+
+namespace CubeMap {
+
+int
+sizeOfFace (const Box2i &dataWindow)
+{
+    return min ((dataWindow.max.x - dataWindow.min.x + 1),
+               (dataWindow.max.y - dataWindow.min.y + 1) / 6);
+}
+
+
+Box2i
+dataWindowForFace (CubeMapFace face, const Box2i &dataWindow)
+{
+    int sof = sizeOfFace (dataWindow);
+    Box2i dwf;
+
+    dwf.min.x = 0;
+    dwf.min.y = int (face) * sof;
+
+    dwf.max.x = dwf.min.x + sof - 1;
+    dwf.max.y = dwf.min.y + sof - 1;
+
+    return dwf;
+}
+
+
+V2f
+pixelPosition (CubeMapFace face, const Box2i &dataWindow, V2f positionInFace)
+{
+    Box2i dwf = dataWindowForFace (face, dataWindow);
+    V2f pos (0, 0);
+
+    switch (face)
+    {
+      case CUBEFACE_POS_X:
+
+       pos.x = dwf.min.x + positionInFace.y;
+       pos.y = dwf.max.y - positionInFace.x;
+       break;
+
+      case CUBEFACE_NEG_X:
+
+       pos.x = dwf.max.x - positionInFace.y;
+       pos.y = dwf.max.y - positionInFace.x;
+       break;
+
+      case CUBEFACE_POS_Y:
+
+       pos.x = dwf.min.x + positionInFace.x;
+       pos.y = dwf.max.y - positionInFace.y;
+       break;
+
+      case CUBEFACE_NEG_Y:
+
+       pos.x = dwf.min.x + positionInFace.x;
+       pos.y = dwf.min.y + positionInFace.y;
+       break;
+
+      case CUBEFACE_POS_Z:
+
+       pos.x = dwf.max.x - positionInFace.x;
+       pos.y = dwf.max.y - positionInFace.y;
+       break;
+
+      case CUBEFACE_NEG_Z:
+
+       pos.x = dwf.min.x + positionInFace.x;
+       pos.y = dwf.max.y - positionInFace.y;
+       break;
+    }
+
+    return pos;
+}
+
+
+void
+faceAndPixelPosition (const V3f &direction,
+                     const Box2i &dataWindow,
+                     CubeMapFace &face,
+                     V2f &pif)
+{
+    int sof = sizeOfFace (dataWindow);
+    float absx = abs (direction.x);
+    float absy = abs (direction.y);
+    float absz = abs (direction.z);
+
+    if (absx >= absy && absx >= absz)
+    {
+       if (absx == 0)
+       {
+           //
+           // Special case - direction is (0, 0, 0)
+           //
+
+           face = CUBEFACE_POS_X;
+           pif = V2f (0, 0);
+           return;
+       }
+
+       pif.x = (direction.y / absx + 1) / 2 * (sof - 1);
+       pif.y = (direction.z / absx + 1) / 2 * (sof - 1);
+
+       if (direction.x > 0)
+           face = CUBEFACE_POS_X;
+       else
+           face = CUBEFACE_NEG_X;
+    }
+    else if (absy >= absz)
+    {
+       pif.x = (direction.x / absy + 1) / 2 * (sof - 1);
+       pif.y = (direction.z / absy + 1) / 2 * (sof - 1);
+
+       if (direction.y > 0)
+           face = CUBEFACE_POS_Y;
+       else
+           face = CUBEFACE_NEG_Y;
+    }
+    else
+    {
+       pif.x = (direction.x / absz + 1) / 2 * (sof - 1);
+       pif.y = (direction.y / absz + 1) / 2 * (sof - 1);
+
+       if (direction.z > 0)
+           face = CUBEFACE_POS_Z;
+       else
+           face = CUBEFACE_NEG_Z;
+    }
+}
+
+
+V3f
+direction (CubeMapFace face, const Box2i &dataWindow, const V2f &positionInFace)
+{
+    int sof = sizeOfFace (dataWindow);
+
+    V2f pos;
+    
+    if (sof > 1)
+    {
+       pos = V2f (positionInFace.x / (sof - 1) * 2 - 1,
+                  positionInFace.y / (sof - 1) * 2 - 1);
+    }
+    else
+    {
+       pos = V2f (0, 0);
+    }
+
+    V3f dir (1, 0, 0);
+
+    switch (face)
+    {
+      case CUBEFACE_POS_X:
+
+       dir.x = 1;
+       dir.y = pos.x;
+       dir.z = pos.y;
+       break;
+
+      case CUBEFACE_NEG_X:
+
+       dir.x = -1;
+       dir.y = pos.x;
+       dir.z = pos.y;
+       break;
+
+      case CUBEFACE_POS_Y:
+
+       dir.x = pos.x;
+       dir.y = 1;
+       dir.z = pos.y;
+       break;
+
+      case CUBEFACE_NEG_Y:
+
+       dir.x = pos.x;
+       dir.y = -1;
+       dir.z = pos.y;
+       break;
+
+      case CUBEFACE_POS_Z:
+
+       dir.x = pos.x;
+       dir.y = pos.y;
+       dir.z = 1;
+       break;
+
+      case CUBEFACE_NEG_Z:
+
+       dir.x = pos.x;
+       dir.y = pos.y;
+       dir.z = -1;
+       break;
+    }
+
+    return dir;
+}
+
+} // namespace CubeMap
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfEnvmap.h b/3rdparty/openexr/IlmImf/ImfEnvmap.h
new file mode 100644 (file)
index 0000000..30c61e7
--- /dev/null
@@ -0,0 +1,322 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_ENVMAP_H
+#define INCLUDED_IMF_ENVMAP_H
+
+//-----------------------------------------------------------------------------
+//
+//     Environment maps
+//
+//     Environment maps define a mapping from 3D directions to 2D
+//     pixel space locations.  Environment maps are typically used
+//     in 3D rendering, for effects such as quickly approximating
+//     how shiny surfaces reflect their environment.
+//
+//     Environment maps can be stored in scanline-based or in tiled
+//     OpenEXR files.  The fact that an image is an environment map
+//     is indicated by the presence of an EnvmapAttribute whose name
+//     is "envmap". (Convenience functions to access this attribute
+//     are defined in header file ImfStandardAttributes.h.)
+//     The attribute's value defines the mapping from 3D directions
+//     to 2D pixel space locations.
+//
+//     This header file defines the set of possible EnvmapAttribute
+//     values.
+//
+//     For each possible EnvmapAttribute value, this header file also
+//     defines a set of convienience functions to convert between 3D
+//     directions and 2D pixel locations.
+//
+//     Most of the convenience functions defined below require a
+//     dataWindow parameter.  For scanline-based images, and for
+//     tiled images with level mode ONE_LEVEL, the dataWindow
+//     parameter should be set to the image's data window, as
+//     defined in the image header.  For tiled images with level
+//     mode MIPMAP_LEVELS or RIPMAP_LEVELS, the data window of the
+//     image level that is being accessed should be used instead.
+//     (See the dataWindowForLevel() methods in ImfTiledInputFile.h
+//     and ImfTiledOutputFile.h.)
+//
+//-----------------------------------------------------------------------------
+
+#include "ImathBox.h"
+
+namespace Imf {
+
+//--------------------------------
+// Supported environment map types
+//--------------------------------
+
+enum Envmap
+{
+    ENVMAP_LATLONG = 0,                // Latitude-longitude environment map
+    ENVMAP_CUBE = 1,           // Cube map
+
+    NUM_ENVMAPTYPES            // Number of different environment map types
+};
+
+
+//-------------------------------------------------------------------------
+// Latitude-Longitude Map:
+//
+// The environment is projected onto the image using polar coordinates
+// (latitude and longitude).  A pixel's x coordinate corresponds to
+// its longitude, and the y coordinate corresponds to its latitude.
+// Pixel (dataWindow.min.x, dataWindow.min.y) has latitude +pi/2 and
+// longitude +pi; pixel (dataWindow.max.x, dataWindow.max.y) has
+// latitude -pi/2 and longitude -pi.
+//
+// In 3D space, latitudes -pi/2 and +pi/2 correspond to the negative and
+// positive y direction.  Latitude 0, longitude 0 points into positive
+// z direction; and latitude 0, longitude pi/2 points into positive x
+// direction.
+//
+// The size of the data window should be 2*N by N pixels (width by height),
+// where N can be any integer greater than 0.
+//-------------------------------------------------------------------------
+
+namespace LatLongMap
+{
+    //----------------------------------------------------
+    // Convert a 3D direction to a 2D vector whose x and y
+    // components represent the corresponding latitude
+    // and longitude.
+    //----------------------------------------------------
+
+    Imath::V2f         latLong (const Imath::V3f &direction);
+
+
+    //--------------------------------------------------------
+    // Convert the position of a pixel to a 2D vector whose
+    // x and y components represent the corresponding latitude
+    // and longitude.
+    //--------------------------------------------------------
+
+    Imath::V2f         latLong (const Imath::Box2i &dataWindow,
+                                const Imath::V2f &pixelPosition);
+
+
+    //-------------------------------------------------------------
+    // Convert a 2D vector, whose x and y components represent
+    // longitude and latitude, into a corresponding pixel position.
+    //-------------------------------------------------------------
+
+    Imath::V2f         pixelPosition (const Imath::Box2i &dataWindow,
+                                      const Imath::V2f &latLong);
+
+
+    //-----------------------------------------------------
+    // Convert a 3D direction vector into a corresponding
+    // pixel position.  pixelPosition(dw,dir) is equivalent
+    // to pixelPosition(dw,latLong(dw,dir)).
+    //-----------------------------------------------------
+
+    Imath::V2f         pixelPosition (const Imath::Box2i &dataWindow,
+                                      const Imath::V3f &direction);
+
+
+    //--------------------------------------------------------
+    // Convert the position of a pixel in a latitude-longitude
+    // map into a corresponding 3D direction.
+    //--------------------------------------------------------
+
+    Imath::V3f         direction (const Imath::Box2i &dataWindow,
+                                  const Imath::V2f &pixelPosition);
+}
+
+
+//--------------------------------------------------------------
+// Cube Map:
+//
+// The environment is projected onto the six faces of an
+// axis-aligned cube.  The cube's faces are then arranged
+// in a 2D image as shown below.
+//
+//          2-----------3
+//         /           /|
+//        /           / |       Y
+//       /           /  |       |
+//      6-----------7   |       |
+//      |           |   |       |
+//      |           |   |       |
+//      |   0       |   1       *------- X
+//      |           |  /       /
+//      |           | /       /
+//      |           |/       /
+//      4-----------5       Z
+// 
+//   dataWindow.min
+//        /
+//       / 
+//      +-----------+
+//      |3    Y    7|
+//      |     |     |
+//      |     |     |
+//      |  ---+---Z |  +X face
+//      |     |     |
+//      |     |     |
+//      |1         5|
+//      +-----------+
+//      |6    Y    2|
+//      |     |     |
+//      |     |     |
+//      | Z---+---  |  -X face
+//      |     |     |
+//      |     |     |
+//      |4         0|
+//      +-----------+
+//      |6    Z    7|
+//      |     |     |
+//      |     |     |
+//      |  ---+---X |  +Y face
+//      |     |     |
+//      |     |     |
+//      |2         3|
+//      +-----------+
+//      |0         1|
+//      |     |     |
+//      |     |     |
+//      |  ---+---X |  -Y face
+//      |     |     |
+//      |     |     |
+//      |4    Z    5|
+//      +-----------+
+//      |7    Y    6|
+//      |     |     |
+//      |     |     |
+//      | X---+---  |  +Z face
+//      |     |     |
+//      |     |     |
+//      |5         4|
+//      +-----------+
+//      |2    Y    3|
+//      |     |     |
+//      |     |     |
+//      |  ---+---X |  -Z face
+//      |     |     |
+//      |     |     |
+//      |0         1|
+//      +-----------+
+//                 /
+//                /
+//          dataWindow.max
+//
+// The size of the data window should be N by 6*N pixels
+// (width by height), where N can be any integer greater
+// than 0.
+// 
+//--------------------------------------------------------------
+
+//------------------------------------
+// Names for the six faces of the cube
+//------------------------------------
+
+enum CubeMapFace
+{
+    CUBEFACE_POS_X,    // +X face
+    CUBEFACE_NEG_X,    // -X face
+    CUBEFACE_POS_Y,    // +Y face
+    CUBEFACE_NEG_Y,    // -Y face
+    CUBEFACE_POS_Z,    // +Z face
+    CUBEFACE_NEG_Z     // -Z face
+};
+
+namespace CubeMap
+{
+    //---------------------------------------------
+    // Width and height of a cube's face, in pixels
+    //---------------------------------------------
+
+    int                        sizeOfFace (const Imath::Box2i &dataWindow);
+
+
+    //------------------------------------------
+    // Compute the region in the environment map
+    // that is covered by the specified face.
+    //------------------------------------------
+
+    Imath::Box2i       dataWindowForFace (CubeMapFace face,
+                                          const Imath::Box2i &dataWindow);
+
+
+    //----------------------------------------------------
+    // Convert the coordinates of a pixel within a face
+    // [in the range from (0,0) to (s-1,s-1), where
+    // s == sizeOfFace(dataWindow)] to pixel coordinates
+    // in the environment map.
+    //----------------------------------------------------
+
+    Imath::V2f         pixelPosition (CubeMapFace face,
+                                      const Imath::Box2i &dataWindow,
+                                      Imath::V2f positionInFace);
+
+
+    //--------------------------------------------------------------
+    // Convert a 3D direction into a cube face, and a pixel position
+    // within that face.
+    //
+    // If you have a 3D direction, dir, the following code fragment
+    // finds the position, pos, of the corresponding pixel in an
+    // environment map with data window dw:
+    //
+    // CubeMapFace f;
+    // V2f pif, pos;
+    //
+    // faceAndPixelPosition (dir, dw, f, pif);
+    // pos = pixelPosition (f, dw, pif);
+    //
+    //--------------------------------------------------------------
+
+    void               faceAndPixelPosition (const Imath::V3f &direction,
+                                             const Imath::Box2i &dataWindow,
+                                             CubeMapFace &face,
+                                             Imath::V2f &positionInFace);
+
+   
+    // --------------------------------------------------------
+    // Given a cube face and a pixel position within that face,
+    // compute the corresponding 3D direction.
+    // --------------------------------------------------------
+
+    Imath::V3f         direction (CubeMapFace face,
+                                  const Imath::Box2i &dataWindow,
+                                  const Imath::V2f &positionInFace);
+}
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfEnvmapAttribute.cpp b/3rdparty/openexr/IlmImf/ImfEnvmapAttribute.cpp
new file mode 100644 (file)
index 0000000..03a7928
--- /dev/null
@@ -0,0 +1,75 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class EnvmapAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfEnvmapAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+EnvmapAttribute::staticTypeName ()
+{
+    return "envmap";
+}
+
+
+template <>
+void
+EnvmapAttribute::writeValueTo (OStream &os, int version) const
+{
+    unsigned char tmp = _value;
+    Xdr::write <StreamIO> (os, tmp);
+}
+
+
+template <>
+void
+EnvmapAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    unsigned char tmp;
+    Xdr::read <StreamIO> (is, tmp);
+    _value = Envmap (tmp);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfEnvmapAttribute.h b/3rdparty/openexr/IlmImf/ImfEnvmapAttribute.h
new file mode 100644 (file)
index 0000000..716883f
--- /dev/null
@@ -0,0 +1,65 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_ENVMAP_ATTRIBUTE_H
+#define INCLUDED_IMF_ENVMAP_ATTRIBUTE_H
+
+
+//-----------------------------------------------------------------------------
+//
+//     class EnvmapAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include <ImfEnvmap.h>
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<Envmap> EnvmapAttribute;
+template <> const char *EnvmapAttribute::staticTypeName ();
+template <> void EnvmapAttribute::writeValueTo (OStream &, int) const;
+template <> void EnvmapAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfEnvmapAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfFloatAttribute.cpp b/3rdparty/openexr/IlmImf/ImfFloatAttribute.cpp
new file mode 100644 (file)
index 0000000..22366c3
--- /dev/null
@@ -0,0 +1,57 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class FloatAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfFloatAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+FloatAttribute::staticTypeName ()
+{
+    return "float";
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfFloatAttribute.h b/3rdparty/openexr/IlmImf/ImfFloatAttribute.h
new file mode 100644 (file)
index 0000000..60d6f23
--- /dev/null
@@ -0,0 +1,63 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_FLOAT_ATTRIBUTE_H
+#define INCLUDED_IMF_FLOAT_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class FloatAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<float> FloatAttribute;
+template <> const char *FloatAttribute::staticTypeName ();
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfFloatAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfFrameBuffer.cpp b/3rdparty/openexr/IlmImf/ImfFrameBuffer.cpp
new file mode 100644 (file)
index 0000000..f4c8fd0
--- /dev/null
@@ -0,0 +1,226 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class Slice
+//     class FrameBuffer
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfFrameBuffer.h>
+#include "Iex.h"
+
+
+using namespace std;
+
+namespace Imf {
+
+Slice::Slice (PixelType t,
+             char *b,
+             size_t xst,
+             size_t yst,
+             int xsm,
+             int ysm,
+             double fv,
+              bool xtc,
+              bool ytc)
+:
+    type (t),
+    base (b),
+    xStride (xst),
+    yStride (yst),
+    xSampling (xsm),
+    ySampling (ysm),
+    fillValue (fv),
+    xTileCoords (xtc),
+    yTileCoords (ytc)
+{
+    // empty
+}
+
+
+void   
+FrameBuffer::insert (const char name[], const Slice &slice)
+{
+    if (name[0] == 0)
+    {
+       THROW (Iex::ArgExc,
+              "Frame buffer slice name cannot be an empty string.");
+    }
+
+    _map[name] = slice;
+}
+
+
+void   
+FrameBuffer::insert (const string &name, const Slice &slice)
+{
+    insert (name.c_str(), slice);
+}
+
+
+Slice &
+FrameBuffer::operator [] (const char name[])
+{
+    SliceMap::iterator i = _map.find (name);
+
+    if (i == _map.end())
+    {
+       THROW (Iex::ArgExc,
+              "Cannot find frame buffer slice \"" << name << "\".");
+    }
+
+    return i->second;
+}
+
+
+const Slice &
+FrameBuffer::operator [] (const char name[]) const
+{
+    SliceMap::const_iterator i = _map.find (name);
+
+    if (i == _map.end())
+    {
+       THROW (Iex::ArgExc,
+              "Cannot find frame buffer slice \"" << name << "\".");
+    }
+
+    return i->second;
+}
+
+
+Slice &
+FrameBuffer::operator [] (const string &name)
+{
+    return this->operator[] (name.c_str());
+}
+
+
+const Slice &
+FrameBuffer::operator [] (const string &name) const
+{
+    return this->operator[] (name.c_str());
+}
+
+
+Slice *
+FrameBuffer::findSlice (const char name[])
+{
+    SliceMap::iterator i = _map.find (name);
+    return (i == _map.end())? 0: &i->second;
+}
+
+
+const Slice *
+FrameBuffer::findSlice (const char name[]) const
+{
+    SliceMap::const_iterator i = _map.find (name);
+    return (i == _map.end())? 0: &i->second;
+}
+
+
+Slice *
+FrameBuffer::findSlice (const string &name)
+{
+    return findSlice (name.c_str());
+}
+
+
+const Slice *
+FrameBuffer::findSlice (const string &name) const
+{
+    return findSlice (name.c_str());
+}
+
+
+FrameBuffer::Iterator          
+FrameBuffer::begin ()
+{
+    return _map.begin();
+}
+
+
+FrameBuffer::ConstIterator     
+FrameBuffer::begin () const
+{
+    return _map.begin();
+}
+
+
+FrameBuffer::Iterator
+FrameBuffer::end ()
+{
+    return _map.end();
+}
+
+
+FrameBuffer::ConstIterator     
+FrameBuffer::end () const
+{
+    return _map.end();
+}
+
+
+FrameBuffer::Iterator
+FrameBuffer::find (const char name[])
+{
+    return _map.find (name);
+}
+
+
+FrameBuffer::ConstIterator
+FrameBuffer::find (const char name[]) const
+{
+    return _map.find (name);
+}
+
+
+FrameBuffer::Iterator
+FrameBuffer::find (const string &name)
+{
+    return find (name.c_str());
+}
+
+
+FrameBuffer::ConstIterator
+FrameBuffer::find (const string &name) const
+{
+    return find (name.c_str());
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfFrameBuffer.h b/3rdparty/openexr/IlmImf/ImfFrameBuffer.h
new file mode 100644 (file)
index 0000000..3b6cc92
--- /dev/null
@@ -0,0 +1,383 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_FRAME_BUFFER_H
+#define INCLUDED_IMF_FRAME_BUFFER_H
+
+//-----------------------------------------------------------------------------
+//
+//     class Slice
+//     class FrameBuffer
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfName.h>
+#include <ImfPixelType.h>
+#include <map>
+#include <string>
+
+
+namespace Imf {
+
+
+//-------------------------------------------------------
+// Description of a single slice of the frame buffer:
+//
+// Note -- terminology: as part of a file, a component of
+// an image (e.g. red, green, blue, depth etc.) is called
+// a "channel".  As part of a frame buffer, an image
+// component is called a "slice".
+//-------------------------------------------------------
+
+struct Slice
+{
+    //------------------------------
+    // Data type; see ImfPixelType.h
+    //------------------------------
+
+    PixelType          type;
+
+
+    //---------------------------------------------------------------------
+    // Memory layout:  The address of pixel (x, y) is
+    //
+    // base + (xp / xSampling) * xStride + (yp / ySampling) * yStride
+    //
+    // where xp and yp are computed as follows:
+    //
+    // * If we are reading or writing a scanline-based file:
+    //
+    //     xp = x
+    //     yp = y
+    //
+    //  * If we are reading a tile whose upper left coorner is at (xt, yt):
+    //
+    //     if xTileCoords is true then xp = x - xt, else xp = x
+    //     if yTileCoords is true then yp = y - yt, else yp = y
+    //
+    //---------------------------------------------------------------------
+
+    char *             base;
+    size_t             xStride;
+    size_t             yStride;
+
+
+    //--------------------------------------------
+    // Subsampling: pixel (x, y) is present in the
+    // slice only if 
+    //
+    //  x % xSampling == 0 && y % ySampling == 0
+    //
+    //--------------------------------------------
+
+    int                        xSampling;
+    int                        ySampling;
+
+
+    //----------------------------------------------------------
+    // Default value, used to fill the slice when a file without
+    // a channel that corresponds to this slice is read.
+    //----------------------------------------------------------
+
+    double             fillValue;
+    
+
+    //-------------------------------------------------------
+    // For tiled files, the xTileCoords and yTileCoords flags
+    // determine whether pixel addressing is performed using
+    // absolute coordinates or coordinates relative to a
+    // tile's upper left corner.  (See the comment on base,
+    // xStride and yStride, above.)
+    //
+    // For scanline-based files these flags have no effect;
+    // pixel addressing is always done using absolute
+    // coordinates.
+    //-------------------------------------------------------
+
+    bool                xTileCoords;
+    bool                yTileCoords;
+
+
+    //------------
+    // Constructor
+    //------------
+
+    Slice (PixelType type = HALF,
+          char * base = 0,
+          size_t xStride = 0,
+          size_t yStride = 0,
+          int xSampling = 1,
+          int ySampling = 1,
+          double fillValue = 0.0,
+           bool xTileCoords = false,
+           bool yTileCoords = false);
+};
+
+
+class FrameBuffer
+{
+  public:
+
+    //------------
+    // Add a slice
+    //------------
+
+    void                       insert (const char name[],
+                                       const Slice &slice);
+
+    void                       insert (const std::string &name,
+                                       const Slice &slice);
+
+    //----------------------------------------------------------------
+    // Access to existing slices:
+    //
+    // [n]             Returns a reference to the slice with name n.
+    //                 If no slice with name n exists, an Iex::ArgExc
+    //                 is thrown.
+    //
+    // findSlice(n)    Returns a pointer to the slice with name n,
+    //                 or 0 if no slice with name n exists.
+    //
+    //----------------------------------------------------------------
+
+    Slice &                    operator [] (const char name[]);
+    const Slice &              operator [] (const char name[]) const;
+
+    Slice &                    operator [] (const std::string &name);
+    const Slice &              operator [] (const std::string &name) const;
+
+    Slice *                    findSlice (const char name[]);
+    const Slice *              findSlice (const char name[]) const;
+
+    Slice *                    findSlice (const std::string &name);
+    const Slice *              findSlice (const std::string &name) const;
+
+
+    //-----------------------------------------
+    // Iterator-style access to existing slices
+    //-----------------------------------------
+
+    typedef std::map <Name, Slice> SliceMap;
+
+    class Iterator;
+    class ConstIterator;
+
+    Iterator                   begin ();
+    ConstIterator              begin () const;
+
+    Iterator                   end ();
+    ConstIterator              end () const;
+
+    Iterator                   find (const char name[]);
+    ConstIterator              find (const char name[]) const;
+
+    Iterator                   find (const std::string &name);
+    ConstIterator              find (const std::string &name) const;
+
+  private:
+
+    SliceMap                   _map;
+};
+
+
+//----------
+// Iterators
+//----------
+
+class FrameBuffer::Iterator
+{
+  public:
+
+    Iterator ();
+    Iterator (const FrameBuffer::SliceMap::iterator &i);
+
+    Iterator &                 operator ++ ();
+    Iterator                   operator ++ (int);
+
+    const char *               name () const;
+    Slice &                    slice () const;
+
+  private:
+
+    friend class FrameBuffer::ConstIterator;
+
+    FrameBuffer::SliceMap::iterator _i;
+};
+
+
+class FrameBuffer::ConstIterator
+{
+  public:
+
+    ConstIterator ();
+    ConstIterator (const FrameBuffer::SliceMap::const_iterator &i);
+    ConstIterator (const FrameBuffer::Iterator &other);
+
+    ConstIterator &            operator ++ ();
+    ConstIterator              operator ++ (int);
+
+    const char *               name () const;
+    const Slice &              slice () const;
+
+  private:
+
+    friend bool operator == (const ConstIterator &, const ConstIterator &);
+    friend bool operator != (const ConstIterator &, const ConstIterator &);
+
+    FrameBuffer::SliceMap::const_iterator _i;
+};
+
+
+//-----------------
+// Inline Functions
+//-----------------
+
+inline
+FrameBuffer::Iterator::Iterator (): _i()
+{
+    // empty
+}
+
+
+inline
+FrameBuffer::Iterator::Iterator (const FrameBuffer::SliceMap::iterator &i):
+    _i (i)
+{
+    // empty
+}
+
+
+inline FrameBuffer::Iterator &         
+FrameBuffer::Iterator::operator ++ ()
+{
+    ++_i;
+    return *this;
+}
+
+
+inline FrameBuffer::Iterator   
+FrameBuffer::Iterator::operator ++ (int)
+{
+    Iterator tmp = *this;
+    ++_i;
+    return tmp;
+}
+
+
+inline const char *
+FrameBuffer::Iterator::name () const
+{
+    return *_i->first;
+}
+
+
+inline Slice & 
+FrameBuffer::Iterator::slice () const
+{
+    return _i->second;
+}
+
+
+inline
+FrameBuffer::ConstIterator::ConstIterator (): _i()
+{
+    // empty
+}
+
+inline
+FrameBuffer::ConstIterator::ConstIterator
+    (const FrameBuffer::SliceMap::const_iterator &i): _i (i)
+{
+    // empty
+}
+
+
+inline
+FrameBuffer::ConstIterator::ConstIterator (const FrameBuffer::Iterator &other):
+    _i (other._i)
+{
+    // empty
+}
+
+inline FrameBuffer::ConstIterator &
+FrameBuffer::ConstIterator::operator ++ ()
+{
+    ++_i;
+    return *this;
+}
+
+
+inline FrameBuffer::ConstIterator              
+FrameBuffer::ConstIterator::operator ++ (int)
+{
+    ConstIterator tmp = *this;
+    ++_i;
+    return tmp;
+}
+
+
+inline const char *
+FrameBuffer::ConstIterator::name () const
+{
+    return *_i->first;
+}
+
+inline const Slice &   
+FrameBuffer::ConstIterator::slice () const
+{
+    return _i->second;
+}
+
+
+inline bool
+operator == (const FrameBuffer::ConstIterator &x,
+            const FrameBuffer::ConstIterator &y)
+{
+    return x._i == y._i;
+}
+
+
+inline bool
+operator != (const FrameBuffer::ConstIterator &x,
+            const FrameBuffer::ConstIterator &y)
+{
+    return !(x == y);
+}
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfFramesPerSecond.cpp b/3rdparty/openexr/IlmImf/ImfFramesPerSecond.cpp
new file mode 100644 (file)
index 0000000..cc533a0
--- /dev/null
@@ -0,0 +1,75 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     Convenience functions related to the framesPerSecond attribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfFramesPerSecond.h>
+#include "ImathFun.h"
+
+using namespace Imath;
+
+namespace Imf {
+
+Rational
+guessExactFps (double fps)
+{
+    return guessExactFps (Rational (fps));
+}
+
+
+Rational
+guessExactFps (const Rational &fps)
+{
+    const double e = 0.002;
+
+    if (abs (double (fps) - double (fps_23_976())) < e)
+       return fps_23_976();
+
+    if (abs (double (fps) - double (fps_29_97())) < e)
+       return fps_29_97();
+
+    if (abs (double (fps) - double (fps_47_952())) < e)
+       return fps_47_952();
+
+    if (abs (double (fps) - double (fps_59_94())) < e)
+       return fps_59_94();
+
+    return fps;
+}
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfFramesPerSecond.h b/3rdparty/openexr/IlmImf/ImfFramesPerSecond.h
new file mode 100644 (file)
index 0000000..cbef984
--- /dev/null
@@ -0,0 +1,88 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_FRAMES_PER_SECOND_H
+#define INCLUDED_IMF_FRAMES_PER_SECOND_H
+
+//-----------------------------------------------------------------------------
+//
+//     Convenience functions related to the framesPerSecond attribute
+//
+//     Functions that return the exact values for commonly used frame rates:
+//
+//         name                frames per second
+//
+//         fps_23_976()        23.976023...
+//         fps_24()            24.0            35mm film frames
+//         fps_25()            25.0            PAL video frames
+//         fps_29_97()         29.970029...    NTSC video frames
+//         fps_30()            30.0            60Hz HDTV frames
+//         fps_47_952()        47.952047...
+//         fps_48()            48.0
+//         fps_50()            50.0            PAL video fields
+//         fps_59_94()         59.940059...    NTSC video fields
+//         fps_60()            60.0            60Hz HDTV fields
+//
+//     Functions that try to convert inexact frame rates into exact ones:
+//
+//         Given a frame rate, fps, that is close to one of the pre-defined
+//         frame rates fps_23_976(), fps_29_97(), fps_47_952() or fps_59_94(),
+//         guessExactFps(fps) returns the corresponding pre-defined frame
+//         rate.  If fps is not close to one of the pre-defined frame rates,
+//         then guessExactFps(fps) returns Rational(fps).
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfRational.h>
+
+namespace Imf {
+
+inline Rational        fps_23_976 ()   {return Rational (24000, 1001);}
+inline Rational        fps_24 ()       {return Rational (24, 1);}
+inline Rational        fps_25 ()       {return Rational (25, 1);}
+inline Rational        fps_29_97 ()    {return Rational (30000, 1001);}
+inline Rational        fps_30 ()       {return Rational (30, 1);}
+inline Rational        fps_47_952 ()   {return Rational (48000, 1001);}
+inline Rational        fps_48 ()       {return Rational (48, 1);}
+inline Rational        fps_50 ()       {return Rational (50, 1);}
+inline Rational        fps_59_94 ()    {return Rational (60000, 1001);}
+inline Rational        fps_60 ()       {return Rational (60, 1);}
+
+Rational       guessExactFps (double fps);
+Rational       guessExactFps (const Rational &fps);
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfHeader.cpp b/3rdparty/openexr/IlmImf/ImfHeader.cpp
new file mode 100644 (file)
index 0000000..e64300a
--- /dev/null
@@ -0,0 +1,1106 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class Header
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfHeader.h>
+#include <ImfStdIO.h>
+#include <ImfVersion.h>
+#include <ImfCompressor.h>
+#include <ImfMisc.h>
+#include <ImfBoxAttribute.h>
+#include <ImfChannelListAttribute.h>
+#include <ImfChromaticitiesAttribute.h>
+#include <ImfCompressionAttribute.h>
+#include <ImfDoubleAttribute.h>
+#include <ImfEnvmapAttribute.h>
+#include <ImfFloatAttribute.h>
+#include <ImfIntAttribute.h>
+#include <ImfKeyCodeAttribute.h>
+#include <ImfLineOrderAttribute.h>
+#include <ImfMatrixAttribute.h>
+#include <ImfOpaqueAttribute.h>
+#include <ImfPreviewImageAttribute.h>
+#include <ImfRationalAttribute.h>
+#include <ImfStringAttribute.h>
+#include <ImfStringVectorAttribute.h>
+#include <ImfTileDescriptionAttribute.h>
+#include <ImfTimeCodeAttribute.h>
+#include <ImfVecAttribute.h>
+#include "IlmThreadMutex.h"
+#include "Iex.h"
+#include <sstream>
+#include <stdlib.h>
+#include <time.h>
+
+
+namespace Imf {
+
+using namespace std;
+using Imath::Box2i;
+using Imath::V2i;
+using Imath::V2f;
+using IlmThread::Mutex;
+using IlmThread::Lock;
+
+
+namespace {
+
+int maxImageWidth = 0;
+int maxImageHeight = 0;
+int maxTileWidth = 0;
+int maxTileHeight = 0;
+
+
+void
+initialize (Header &header,
+           const Box2i &displayWindow,
+           const Box2i &dataWindow,
+           float pixelAspectRatio,
+           const V2f &screenWindowCenter,
+           float screenWindowWidth,
+           LineOrder lineOrder,
+           Compression compression)
+{
+    header.insert ("displayWindow", Box2iAttribute (displayWindow));
+    header.insert ("dataWindow", Box2iAttribute (dataWindow));
+    header.insert ("pixelAspectRatio", FloatAttribute (pixelAspectRatio));
+    header.insert ("screenWindowCenter", V2fAttribute (screenWindowCenter));
+    header.insert ("screenWindowWidth", FloatAttribute (screenWindowWidth));
+    header.insert ("lineOrder", LineOrderAttribute (lineOrder));
+    header.insert ("compression", CompressionAttribute (compression));
+    header.insert ("channels", ChannelListAttribute ());
+}
+
+
+bool
+usesLongNames (const Header &header)
+{
+    //
+    // If an OpenEXR file contains any attribute names, attribute type names
+    // or channel names longer than 31 characters, then the file cannot be
+    // read by older versions of the IlmImf library (up to OpenEXR 1.6.1).
+    // Before writing the file header, we check if the header contains
+    // any names longer than 31 characters; if it does, then we set the
+    // LONG_NAMES_FLAG in the file version number.  Older versions of the
+    // IlmImf library will refuse to read files that have the LONG_NAMES_FLAG
+    // set.  Without the flag, older versions of the library would mis-
+    // interpret the file as broken.
+    //
+
+    for (Header::ConstIterator i = header.begin();
+         i != header.end();
+         ++i)
+    {
+        if (strlen (i.name()) >= 32 || strlen (i.attribute().typeName()) >= 32)
+            return true;
+    }
+
+    const ChannelList &channels = header.channels();
+
+    for (ChannelList::ConstIterator i = channels.begin();
+         i != channels.end();
+         ++i)
+    {
+        if (strlen (i.name()) >= 32)
+            return true;
+    }
+
+    return false;
+}
+
+template <size_t N>
+void checkIsNullTerminated (const char (&str)[N], const char *what)
+{
+       for (int i = 0; i < N; ++i) {
+               if (str[i] == '\0')
+                       return;
+       }
+       std::stringstream s;
+       s << "Invalid " << what << ": it is more than " << (N - 1) 
+               << " characters long.";
+       throw Iex::InputExc(s);
+}
+
+} // namespace
+
+
+Header::Header (int width,
+               int height,
+               float pixelAspectRatio,
+               const V2f &screenWindowCenter,
+               float screenWindowWidth,
+               LineOrder lineOrder,
+               Compression compression)
+:
+    _map()
+{
+    staticInitialize();
+
+    Box2i displayWindow (V2i (0, 0), V2i (width - 1, height - 1));
+
+    initialize (*this,
+               displayWindow,
+               displayWindow,
+               pixelAspectRatio,
+               screenWindowCenter,
+               screenWindowWidth,
+               lineOrder,
+               compression);
+}
+
+
+Header::Header (int width,
+               int height,
+               const Box2i &dataWindow,
+               float pixelAspectRatio,
+               const V2f &screenWindowCenter,
+               float screenWindowWidth,
+               LineOrder lineOrder,
+               Compression compression)
+:
+    _map()
+{
+    staticInitialize();
+
+    Box2i displayWindow (V2i (0, 0), V2i (width - 1, height - 1));
+
+    initialize (*this,
+               displayWindow,
+               dataWindow,
+               pixelAspectRatio,
+               screenWindowCenter,
+               screenWindowWidth,
+               lineOrder,
+               compression);
+}
+
+
+Header::Header (const Box2i &displayWindow,
+               const Box2i &dataWindow,
+               float pixelAspectRatio,
+               const V2f &screenWindowCenter,
+               float screenWindowWidth,
+               LineOrder lineOrder,
+               Compression compression)
+:
+    _map()
+{
+    staticInitialize();
+
+    initialize (*this,
+               displayWindow,
+               dataWindow,
+               pixelAspectRatio,
+               screenWindowCenter,
+               screenWindowWidth,
+               lineOrder,
+               compression);
+}
+
+
+Header::Header (const Header &other): _map()
+{
+    for (AttributeMap::const_iterator i = other._map.begin();
+        i != other._map.end();
+        ++i)
+    {
+       insert (*i->first, *i->second);
+    }
+}
+
+
+Header::~Header ()
+{
+    for (AttributeMap::iterator i = _map.begin();
+        i != _map.end();
+        ++i)
+    {
+        delete i->second;
+    }
+}
+
+
+Header &               
+Header::operator = (const Header &other)
+{
+    if (this != &other)
+    {
+       for (AttributeMap::iterator i = _map.begin();
+            i != _map.end();
+            ++i)
+       {
+            delete i->second;
+       }
+
+       _map.erase (_map.begin(), _map.end());
+
+       for (AttributeMap::const_iterator i = other._map.begin();
+            i != other._map.end();
+            ++i)
+       {
+           insert (*i->first, *i->second);
+       }
+    }
+
+    return *this;
+}
+
+
+void
+Header::insert (const char name[], const Attribute &attribute)
+{
+    if (name[0] == 0)
+       THROW (Iex::ArgExc, "Image attribute name cannot be an empty string.");
+
+    AttributeMap::iterator i = _map.find (name);
+
+    if (i == _map.end())
+    {
+       Attribute *tmp = attribute.copy();
+
+       try
+       {
+           _map[name] = tmp;
+       }
+       catch (...)
+       {
+           delete tmp;
+           throw;
+       }
+    }
+    else
+    {
+       if (strcmp (i->second->typeName(), attribute.typeName()))
+           THROW (Iex::TypeExc, "Cannot assign a value of "
+                                "type \"" << attribute.typeName() << "\" "
+                                "to image attribute \"" << name << "\" of "
+                                "type \"" << i->second->typeName() << "\".");
+
+       Attribute *tmp = attribute.copy();
+       delete i->second;
+       i->second = tmp;
+    }
+}
+
+
+void
+Header::insert (const string &name, const Attribute &attribute)
+{
+    insert (name.c_str(), attribute);
+}
+
+
+Attribute &            
+Header::operator [] (const char name[])
+{
+    AttributeMap::iterator i = _map.find (name);
+
+    if (i == _map.end())
+       THROW (Iex::ArgExc, "Cannot find image attribute \"" << name << "\".");
+
+    return *i->second;
+}
+
+
+const Attribute &      
+Header::operator [] (const char name[]) const
+{
+    AttributeMap::const_iterator i = _map.find (name);
+
+    if (i == _map.end())
+       THROW (Iex::ArgExc, "Cannot find image attribute \"" << name << "\".");
+
+    return *i->second;
+}
+
+
+Attribute &            
+Header::operator [] (const string &name)
+{
+    return this->operator[] (name.c_str());
+}
+
+
+const Attribute &      
+Header::operator [] (const string &name) const
+{
+    return this->operator[] (name.c_str());
+}
+
+
+Header::Iterator
+Header::begin ()
+{
+    return _map.begin();
+}
+
+
+Header::ConstIterator
+Header::begin () const
+{
+    return _map.begin();
+}
+
+
+Header::Iterator
+Header::end ()
+{
+    return _map.end();
+}
+
+
+Header::ConstIterator
+Header::end () const
+{
+    return _map.end();
+}
+
+
+Header::Iterator
+Header::find (const char name[])
+{
+    return _map.find (name);
+}
+
+
+Header::ConstIterator
+Header::find (const char name[]) const
+{
+    return _map.find (name);
+}
+
+
+Header::Iterator
+Header::find (const string &name)
+{
+    return find (name.c_str());
+}
+
+
+Header::ConstIterator
+Header::find (const string &name) const
+{
+    return find (name.c_str());
+}
+
+
+Imath::Box2i & 
+Header::displayWindow ()
+{
+    return static_cast <Box2iAttribute &>
+       ((*this)["displayWindow"]).value();
+}
+
+
+const Imath::Box2i &
+Header::displayWindow () const
+{
+    return static_cast <const Box2iAttribute &>
+       ((*this)["displayWindow"]).value();
+}
+
+
+Imath::Box2i & 
+Header::dataWindow ()
+{
+    return static_cast <Box2iAttribute &>
+       ((*this)["dataWindow"]).value();
+}
+
+
+const Imath::Box2i &
+Header::dataWindow () const
+{
+    return static_cast <const Box2iAttribute &>
+       ((*this)["dataWindow"]).value();
+}
+
+
+float &                
+Header::pixelAspectRatio ()
+{
+    return static_cast <FloatAttribute &>
+       ((*this)["pixelAspectRatio"]).value();
+}
+
+
+const float &  
+Header::pixelAspectRatio () const
+{
+    return static_cast <const FloatAttribute &>
+       ((*this)["pixelAspectRatio"]).value();
+}
+
+
+Imath::V2f &   
+Header::screenWindowCenter ()
+{
+    return static_cast <V2fAttribute &>
+       ((*this)["screenWindowCenter"]).value();
+}
+
+
+const Imath::V2f &     
+Header::screenWindowCenter () const
+{
+    return static_cast <const V2fAttribute &>
+       ((*this)["screenWindowCenter"]).value();
+}
+
+
+float &                
+Header::screenWindowWidth ()
+{
+    return static_cast <FloatAttribute &>
+       ((*this)["screenWindowWidth"]).value();
+}
+
+
+const float &  
+Header::screenWindowWidth () const
+{
+    return static_cast <const FloatAttribute &>
+       ((*this)["screenWindowWidth"]).value();
+}
+
+
+ChannelList &  
+Header::channels ()
+{
+    return static_cast <ChannelListAttribute &>
+       ((*this)["channels"]).value();
+}
+
+
+const ChannelList &    
+Header::channels () const
+{
+    return static_cast <const ChannelListAttribute &>
+       ((*this)["channels"]).value();
+}
+
+
+LineOrder &
+Header::lineOrder ()
+{
+    return static_cast <LineOrderAttribute &>
+       ((*this)["lineOrder"]).value();
+}
+
+
+const LineOrder &
+Header::lineOrder () const
+{
+    return static_cast <const LineOrderAttribute &>
+       ((*this)["lineOrder"]).value();
+}
+
+
+Compression &
+Header::compression ()
+{
+    return static_cast <CompressionAttribute &>
+       ((*this)["compression"]).value();
+}
+
+
+const Compression &
+Header::compression () const
+{
+    return static_cast <const CompressionAttribute &>
+       ((*this)["compression"]).value();
+}
+
+
+void
+Header::setTileDescription(const TileDescription& td)
+{
+    insert ("tiles", TileDescriptionAttribute (td));
+}
+
+
+bool
+Header::hasTileDescription() const
+{
+    return findTypedAttribute <TileDescriptionAttribute> ("tiles") != 0;
+}
+
+
+TileDescription &
+Header::tileDescription ()
+{
+    return typedAttribute <TileDescriptionAttribute> ("tiles").value();
+}
+
+
+const TileDescription &
+Header::tileDescription () const
+{
+    return typedAttribute <TileDescriptionAttribute> ("tiles").value();
+}
+
+void           
+Header::setPreviewImage (const PreviewImage &pi)
+{
+    insert ("preview", PreviewImageAttribute (pi));
+}
+
+
+PreviewImage &
+Header::previewImage ()
+{
+    return typedAttribute <PreviewImageAttribute> ("preview").value();
+}
+
+
+const PreviewImage &
+Header::previewImage () const
+{
+    return typedAttribute <PreviewImageAttribute> ("preview").value();
+}
+
+
+bool           
+Header::hasPreviewImage () const
+{
+    return findTypedAttribute <PreviewImageAttribute> ("preview") != 0;
+}
+
+
+void           
+Header::sanityCheck (bool isTiled) const
+{
+    //
+    // The display window and the data window must each
+    // contain at least one pixel.  In addition, the
+    // coordinates of the window corners must be small
+    // enough to keep expressions like max-min+1 or
+    // max+min from overflowing.
+    //
+
+    const Box2i &displayWindow = this->displayWindow();
+
+    if (displayWindow.min.x > displayWindow.max.x ||
+       displayWindow.min.y > displayWindow.max.y ||
+       displayWindow.min.x <= -(INT_MAX / 2) ||
+       displayWindow.min.y <= -(INT_MAX / 2) ||
+       displayWindow.max.x >=  (INT_MAX / 2) ||
+       displayWindow.max.y >=  (INT_MAX / 2))
+    {
+       throw Iex::ArgExc ("Invalid display window in image header.");
+    }
+
+    const Box2i &dataWindow = this->dataWindow();
+
+    if (dataWindow.min.x > dataWindow.max.x ||
+       dataWindow.min.y > dataWindow.max.y ||
+       dataWindow.min.x <= -(INT_MAX / 2) ||
+       dataWindow.min.y <= -(INT_MAX / 2) ||
+       dataWindow.max.x >=  (INT_MAX / 2) ||
+       dataWindow.max.y >=  (INT_MAX / 2))
+    {
+       throw Iex::ArgExc ("Invalid data window in image header.");
+    }
+
+    if (maxImageWidth > 0 &&
+       maxImageWidth < dataWindow.max.x - dataWindow.min.x + 1)
+    {
+       THROW (Iex::ArgExc, "The width of the data window exceeds the "
+                           "maximum width of " << maxImageWidth << "pixels.");
+    }
+
+    if (maxImageHeight > 0 &&
+       maxImageHeight < dataWindow.max.y - dataWindow.min.y + 1)
+    {
+       THROW (Iex::ArgExc, "The width of the data window exceeds the "
+                           "maximum width of " << maxImageHeight << "pixels.");
+    }
+
+    //
+    // The pixel aspect ratio must be greater than 0.
+    // In applications, numbers like the the display or
+    // data window dimensions are likely to be multiplied
+    // or divided by the pixel aspect ratio; to avoid
+    // arithmetic exceptions, we limit the pixel aspect
+    // ratio to a range that is smaller than theoretically
+    // possible (real aspect ratios are likely to be close
+    // to 1.0 anyway).
+    //
+
+    float pixelAspectRatio = this->pixelAspectRatio();
+
+    const float MIN_PIXEL_ASPECT_RATIO = 1e-6f;
+    const float MAX_PIXEL_ASPECT_RATIO = 1e+6f;
+
+    if (pixelAspectRatio < MIN_PIXEL_ASPECT_RATIO ||
+       pixelAspectRatio > MAX_PIXEL_ASPECT_RATIO)
+    {
+       throw Iex::ArgExc ("Invalid pixel aspect ratio in image header.");
+    }
+
+    //
+    // The screen window width must not be less than 0.
+    // The size of the screen window can vary over a wide
+    // range (fish-eye lens to astronomical telescope),
+    // so we can't limit the screen window width to a
+    // small range.
+    //
+
+    float screenWindowWidth = this->screenWindowWidth();
+
+    if (screenWindowWidth < 0)
+       throw Iex::ArgExc ("Invalid screen window width in image header.");
+
+    //
+    // If the file is tiled, verify that the tile description has resonable
+    // values and check to see if the lineOrder is one of the predefined 3.
+    // If the file is not tiled, then the lineOrder can only be INCREASING_Y
+    // or DECREASING_Y.
+    //
+
+    LineOrder lineOrder = this->lineOrder();
+
+    if (isTiled)
+    {
+       if (!hasTileDescription())
+       {
+           throw Iex::ArgExc ("Tiled image has no tile "
+                              "description attribute.");
+       }
+
+       const TileDescription &tileDesc = tileDescription();
+
+       if (tileDesc.xSize <= 0 || tileDesc.ySize <= 0)
+           throw Iex::ArgExc ("Invalid tile size in image header.");
+
+       if (maxTileWidth > 0 &&
+           maxTileWidth < tileDesc.xSize)
+       {
+           THROW (Iex::ArgExc, "The width of the tiles exceeds the maximum "
+                               "width of " << maxTileWidth << "pixels.");
+       }
+
+       if (maxTileHeight > 0 &&
+           maxTileHeight < tileDesc.ySize)
+       {
+           THROW (Iex::ArgExc, "The width of the tiles exceeds the maximum "
+                               "width of " << maxTileHeight << "pixels.");
+       }
+
+       if (tileDesc.mode != ONE_LEVEL &&
+           tileDesc.mode != MIPMAP_LEVELS &&
+           tileDesc.mode != RIPMAP_LEVELS)
+           throw Iex::ArgExc ("Invalid level mode in image header.");
+
+       if (tileDesc.roundingMode != ROUND_UP &&
+           tileDesc.roundingMode != ROUND_DOWN)
+           throw Iex::ArgExc ("Invalid level rounding mode in image header.");
+
+       if (lineOrder != INCREASING_Y &&
+           lineOrder != DECREASING_Y &&
+           lineOrder != RANDOM_Y)
+           throw Iex::ArgExc ("Invalid line order in image header.");
+    }
+    else
+    {
+       if (lineOrder != INCREASING_Y &&
+           lineOrder != DECREASING_Y)
+           throw Iex::ArgExc ("Invalid line order in image header.");
+    }
+
+    //
+    // The compression method must be one of the predefined values.
+    //
+
+    if (!isValidCompression (this->compression()))
+       throw Iex::ArgExc ("Unknown compression type in image header.");
+
+    //
+    // Check the channel list:
+    //
+    // If the file is tiled then for each channel, the type must be one of the
+    // predefined values, and the x and y sampling must both be 1.
+    //
+    // If the file is not tiled then for each channel, the type must be one
+    // of the predefined values, the x and y coordinates of the data window's
+    // upper left corner must be divisible by the x and y subsampling factors,
+    // and the width and height of the data window must be divisible by the
+    // x and y subsampling factors.
+    //
+
+    const ChannelList &channels = this->channels();
+    
+    if (isTiled)
+    {
+       for (ChannelList::ConstIterator i = channels.begin();
+            i != channels.end();
+            ++i)
+       {
+           if (i.channel().type != UINT &&
+               i.channel().type != HALF &&
+               i.channel().type != FLOAT)
+           {
+               THROW (Iex::ArgExc, "Pixel type of \"" << i.name() << "\" "
+                                   "image channel is invalid.");
+           }
+
+           if (i.channel().xSampling != 1)
+           {
+               THROW (Iex::ArgExc, "The x subsampling factor for the "
+                                   "\"" << i.name() << "\" channel "
+                                   "is not 1.");
+           }   
+
+           if (i.channel().ySampling != 1)
+           {
+               THROW (Iex::ArgExc, "The y subsampling factor for the "
+                                   "\"" << i.name() << "\" channel "
+                                   "is not 1.");
+           }   
+       }
+    }
+    else
+    {
+       for (ChannelList::ConstIterator i = channels.begin();
+            i != channels.end();
+            ++i)
+       {
+           if (i.channel().type != UINT &&
+               i.channel().type != HALF &&
+               i.channel().type != FLOAT)
+           {
+               THROW (Iex::ArgExc, "Pixel type of \"" << i.name() << "\" "
+                                   "image channel is invalid.");
+           }
+
+           if (i.channel().xSampling < 1)
+           {
+               THROW (Iex::ArgExc, "The x subsampling factor for the "
+                                   "\"" << i.name() << "\" channel "
+                                   "is invalid.");
+           }
+
+           if (i.channel().ySampling < 1)
+           {
+               THROW (Iex::ArgExc, "The y subsampling factor for the "
+                                   "\"" << i.name() << "\" channel "
+                                   "is invalid.");
+           }
+
+           if (dataWindow.min.x % i.channel().xSampling)
+           {
+               THROW (Iex::ArgExc, "The minimum x coordinate of the "
+                                   "image's data window is not a multiple "
+                                   "of the x subsampling factor of "
+                                   "the \"" << i.name() << "\" channel.");
+           }
+
+           if (dataWindow.min.y % i.channel().ySampling)
+           {
+               THROW (Iex::ArgExc, "The minimum y coordinate of the "
+                                   "image's data window is not a multiple "
+                                   "of the y subsampling factor of "
+                                   "the \"" << i.name() << "\" channel.");
+           }
+
+           if ((dataWindow.max.x - dataWindow.min.x + 1) %
+                   i.channel().xSampling)
+           {
+               THROW (Iex::ArgExc, "Number of pixels per row in the "
+                                   "image's data window is not a multiple "
+                                   "of the x subsampling factor of "
+                                   "the \"" << i.name() << "\" channel.");
+           }
+
+           if ((dataWindow.max.y - dataWindow.min.y + 1) %
+                   i.channel().ySampling)
+           {
+               THROW (Iex::ArgExc, "Number of pixels per column in the "
+                                   "image's data window is not a multiple "
+                                   "of the y subsampling factor of "
+                                   "the \"" << i.name() << "\" channel.");
+           }
+       }
+    }
+}
+
+
+void           
+Header::setMaxImageSize (int maxWidth, int maxHeight)
+{
+    maxImageWidth = maxWidth;
+    maxImageHeight = maxHeight;
+}
+
+
+void           
+Header::setMaxTileSize (int maxWidth, int maxHeight)
+{
+    maxTileWidth = maxWidth;
+    maxTileHeight = maxHeight;
+}
+
+
+Int64
+Header::writeTo (OStream &os, bool isTiled) const
+{
+    //
+    // Write a "magic number" to identify the file as an image file.
+    // Write the current file format version number.
+    //
+
+    Xdr::write <StreamIO> (os, MAGIC);
+
+    int version = EXR_VERSION;
+
+    if (isTiled)
+        version |= TILED_FLAG;
+
+    if (usesLongNames (*this))
+        version |= LONG_NAMES_FLAG;
+
+    Xdr::write <StreamIO> (os, version);
+
+    //
+    // Write all attributes.  If we have a preview image attribute,
+    // keep track of its position in the file.
+    //
+
+    Int64 previewPosition = 0;
+
+    const Attribute *preview =
+           findTypedAttribute <PreviewImageAttribute> ("preview");
+
+    for (ConstIterator i = begin(); i != end(); ++i)
+    {
+       //
+       // Write the attribute's name and type.
+       //
+
+       Xdr::write <StreamIO> (os, i.name());
+       Xdr::write <StreamIO> (os, i.attribute().typeName());
+
+       //
+       // Write the size of the attribute value,
+       // and the value itself.
+       //
+
+       StdOSStream oss;
+       i.attribute().writeValueTo (oss, version);
+
+       std::string s = oss.str();
+       Xdr::write <StreamIO> (os, (int) s.length());
+
+       if (&i.attribute() == preview)
+           previewPosition = os.tellp();
+
+       os.write (s.data(), s.length());
+    }
+
+    //
+    // Write zero-length attribute name to mark the end of the header.
+    //
+
+    Xdr::write <StreamIO> (os, "");
+
+    return previewPosition;
+}
+
+
+void
+Header::readFrom (IStream &is, int &version)
+{
+    //
+    // Read the magic number and the file format version number.
+    // Then check if we can read the rest of this file.
+    //
+
+    int magic;
+
+    Xdr::read <StreamIO> (is, magic);
+    Xdr::read <StreamIO> (is, version);
+
+    if (magic != MAGIC)
+    {
+       throw Iex::InputExc ("File is not an image file.");
+    }
+
+    if (getVersion (version) != EXR_VERSION)
+    {
+       THROW (Iex::InputExc, "Cannot read "
+                             "version " << getVersion (version) << " "
+                             "image files.  Current file format version "
+                             "is " << EXR_VERSION << ".");
+    }
+    
+    if (!supportsFlags (getFlags (version)))
+    {
+       THROW (Iex::InputExc, "The file format version number's flag field "
+                             "contains unrecognized flags.");
+    }
+
+    //
+    // Read all attributes.
+    //
+
+    while (true)
+    {
+       //
+       // Read the name of the attribute.
+       // A zero-length attribute name indicates the end of the header.
+       //
+
+       char name[Name::SIZE];
+       Xdr::read <StreamIO> (is, Name::MAX_LENGTH, name);
+
+       if (name[0] == 0)
+           break;
+
+       checkIsNullTerminated (name, "attribute name");
+
+       //
+       // Read the attribute type and the size of the attribute value.
+       //
+
+       char typeName[Name::SIZE];
+       int size;
+
+       Xdr::read <StreamIO> (is, Name::MAX_LENGTH, typeName);
+       checkIsNullTerminated (typeName, "attribute type name");
+       Xdr::read <StreamIO> (is, size);
+
+       AttributeMap::iterator i = _map.find (name);
+
+       if (i != _map.end())
+       {
+           //
+           // The attribute already exists (for example,
+           // because it is a predefined attribute).
+           // Read the attribute's new value from the file.
+           //
+
+           if (strncmp (i->second->typeName(), typeName, sizeof (typeName)))
+               THROW (Iex::InputExc, "Unexpected type for image attribute "
+                                     "\"" << name << "\".");
+
+           i->second->readValueFrom (is, size, version);
+       }
+       else
+       {
+           //
+           // The new attribute does not exist yet.
+           // If the attribute type is of a known type,
+           // read the attribute value.  If the attribute
+           // is of an unknown type, read its value and
+           // store it as an OpaqueAttribute.
+           //
+
+           Attribute *attr;
+
+           if (Attribute::knownType (typeName))
+               attr = Attribute::newAttribute (typeName);
+           else
+               attr = new OpaqueAttribute (typeName);
+
+           try
+           {
+               attr->readValueFrom (is, size, version);
+               _map[name] = attr;
+           }
+           catch (...)
+           {
+               delete attr;
+               throw;
+           }
+       }
+    }
+}
+
+
+void
+staticInitialize ()
+{
+    static Mutex criticalSection;
+    Lock lock (criticalSection);
+
+    static bool initialized = false;
+
+    if (!initialized)
+    {
+       //
+       // One-time initialization -- register
+       // some predefined attribute types.
+       //
+       
+       Box2fAttribute::registerAttributeType();
+       Box2iAttribute::registerAttributeType();
+       ChannelListAttribute::registerAttributeType();
+       CompressionAttribute::registerAttributeType();
+       ChromaticitiesAttribute::registerAttributeType();
+       DoubleAttribute::registerAttributeType();
+       EnvmapAttribute::registerAttributeType();
+       FloatAttribute::registerAttributeType();
+       IntAttribute::registerAttributeType();
+       KeyCodeAttribute::registerAttributeType();
+       LineOrderAttribute::registerAttributeType();
+       M33dAttribute::registerAttributeType();
+       M33fAttribute::registerAttributeType();
+       M44dAttribute::registerAttributeType();
+       M44fAttribute::registerAttributeType();
+       PreviewImageAttribute::registerAttributeType();
+       RationalAttribute::registerAttributeType();
+       StringAttribute::registerAttributeType();
+        StringVectorAttribute::registerAttributeType();
+       TileDescriptionAttribute::registerAttributeType();
+       TimeCodeAttribute::registerAttributeType();
+       V2dAttribute::registerAttributeType();
+       V2fAttribute::registerAttributeType();
+       V2iAttribute::registerAttributeType();
+       V3dAttribute::registerAttributeType();
+       V3fAttribute::registerAttributeType();
+       V3iAttribute::registerAttributeType();
+
+       initialized = true;
+    }
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfHeader.h b/3rdparty/openexr/IlmImf/ImfHeader.h
new file mode 100644 (file)
index 0000000..bec6bc1
--- /dev/null
@@ -0,0 +1,627 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_HEADER_H
+#define INCLUDED_IMF_HEADER_H
+
+//-----------------------------------------------------------------------------
+//
+//     class Header
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfLineOrder.h>
+#include <ImfCompression.h>
+#include <ImfName.h>
+#include <ImfTileDescription.h>
+#include <ImfInt64.h>
+#include "ImathVec.h"
+#include "ImathBox.h"
+#include "IexBaseExc.h"
+#include <map>
+#include <iosfwd>
+#include <string>
+
+namespace Imf {
+
+
+class Attribute;
+class ChannelList;
+class IStream;
+class OStream;
+class PreviewImage;
+
+
+class Header
+{
+  public:
+    
+    //----------------------------------------------------------------
+    // Default constructor -- the display window and the data window
+    // are both set to Box2i (V2i (0, 0), V2i (width-1, height-1).
+    //----------------------------------------------------------------
+
+    Header (int width = 64,
+           int height = 64,
+           float pixelAspectRatio = 1,
+           const Imath::V2f &screenWindowCenter = Imath::V2f (0, 0),
+           float screenWindowWidth = 1,
+           LineOrder lineOrder = INCREASING_Y,
+           Compression = ZIP_COMPRESSION);
+
+
+    //--------------------------------------------------------------------
+    // Constructor -- the data window is specified explicitly; the display
+    // window is set to Box2i (V2i (0, 0), V2i (width-1, height-1).
+    //--------------------------------------------------------------------
+
+    Header (int width,
+           int height,
+           const Imath::Box2i &dataWindow,
+           float pixelAspectRatio = 1,
+           const Imath::V2f &screenWindowCenter = Imath::V2f (0, 0),
+           float screenWindowWidth = 1,
+           LineOrder lineOrder = INCREASING_Y,
+           Compression = ZIP_COMPRESSION);
+
+
+    //----------------------------------------------------------
+    // Constructor -- the display window and the data window are
+    // both specified explicitly.
+    //----------------------------------------------------------
+
+    Header (const Imath::Box2i &displayWindow,
+           const Imath::Box2i &dataWindow,
+           float pixelAspectRatio = 1,
+           const Imath::V2f &screenWindowCenter = Imath::V2f (0, 0),
+           float screenWindowWidth = 1,
+           LineOrder lineOrder = INCREASING_Y,
+           Compression = ZIP_COMPRESSION);
+
+
+    //-----------------
+    // Copy constructor
+    //-----------------
+
+    Header (const Header &other);
+
+
+    //-----------
+    // Destructor
+    //-----------
+
+    ~Header ();
+
+
+    //-----------
+    // Assignment
+    //-----------
+
+    Header &                   operator = (const Header &other);
+
+
+    //---------------------------------------------------------------
+    // Add an attribute:
+    //
+    // insert(n,attr)  If no attribute with name n exists, a new
+    //                 attribute with name n, and the same type as
+    //                 attr, is added, and the value of attr is
+    //                 copied into the new attribute.
+    //
+    //                 If an attribute with name n exists, and its
+    //                 type is the same as attr, the value of attr
+    //                 is copied into this attribute.
+    //
+    //                 If an attribute with name n exists, and its
+    //                 type is different from attr, an Iex::TypeExc
+    //                 is thrown.
+    //
+    //---------------------------------------------------------------
+
+    void                       insert (const char name[],
+                                       const Attribute &attribute);
+
+    void                       insert (const std::string &name,
+                                       const Attribute &attribute);
+
+    //------------------------------------------------------------------
+    // Access to existing attributes:
+    //
+    // [n]                     Returns a reference to the attribute
+    //                         with name n.  If no attribute with
+    //                         name n exists, an Iex::ArgExc is thrown.
+    //
+    // typedAttribute<T>(n)    Returns a reference to the attribute
+    //                         with name n and type T.  If no attribute
+    //                         with name n exists, an Iex::ArgExc is
+    //                         thrown.  If an attribute with name n
+    //                         exists, but its type is not T, an
+    //                         Iex::TypeExc is thrown.
+    //
+    // findTypedAttribute<T>(n)        Returns a pointer to the attribute with
+    //                         name n and type T, or 0 if no attribute
+    //                         with name n and type T exists.
+    //
+    //------------------------------------------------------------------
+
+    Attribute &                        operator [] (const char name[]);
+    const Attribute &          operator [] (const char name[]) const;
+
+    Attribute &                        operator [] (const std::string &name);
+    const Attribute &          operator [] (const std::string &name) const;
+
+    template <class T> T&      typedAttribute (const char name[]);
+    template <class T> const T&        typedAttribute (const char name[]) const;
+
+    template <class T> T&      typedAttribute (const std::string &name);
+    template <class T> const T&        typedAttribute (const std::string &name) const;
+
+    template <class T> T*      findTypedAttribute (const char name[]);
+    template <class T> const T*        findTypedAttribute (const char name[]) const;
+
+    template <class T> T*      findTypedAttribute (const std::string &name);
+    template <class T> const T*        findTypedAttribute (const std::string &name)
+                                                                      const;
+
+    //---------------------------------------------
+    // Iterator-style access to existing attributes
+    //---------------------------------------------
+
+    typedef std::map <Name, Attribute *> AttributeMap;
+
+    class Iterator;
+    class ConstIterator;
+
+    Iterator                   begin ();
+    ConstIterator              begin () const;
+
+    Iterator                   end ();
+    ConstIterator              end () const;
+
+    Iterator                   find (const char name[]);
+    ConstIterator              find (const char name[]) const;
+
+    Iterator                   find (const std::string &name);
+    ConstIterator              find (const std::string &name) const;
+
+
+    //--------------------------------
+    // Access to predefined attributes
+    //--------------------------------
+
+    Imath::Box2i &             displayWindow ();
+    const Imath::Box2i &       displayWindow () const;
+
+    Imath::Box2i &             dataWindow ();
+    const Imath::Box2i &       dataWindow () const;
+
+    float &                    pixelAspectRatio ();
+    const float &              pixelAspectRatio () const;
+
+    Imath::V2f &               screenWindowCenter ();
+    const Imath::V2f &         screenWindowCenter () const;
+
+    float &                    screenWindowWidth ();
+    const float &              screenWindowWidth () const;
+
+    ChannelList &              channels ();
+    const ChannelList &                channels () const;
+
+    LineOrder &                        lineOrder ();
+    const LineOrder &          lineOrder () const;
+
+    Compression &              compression ();
+    const Compression &                compression () const;
+
+
+    //----------------------------------------------------------------------
+    // Tile Description:
+    //
+    // The tile description is a TileDescriptionAttribute whose name
+    // is "tiles".  The "tiles" attribute must be present in any tiled
+    // image file. When present, it describes various properties of the
+    // tiles that make up the file.
+    //
+    // Convenience functions:
+    //
+    // setTileDescription(td)
+    //     calls insert ("tiles", TileDescriptionAttribute (td))
+    //
+    // tileDescription()
+    //     returns typedAttribute<TileDescriptionAttribute>("tiles").value()
+    //
+    // hasTileDescription()
+    //     return findTypedAttribute<TileDescriptionAttribute>("tiles") != 0
+    //
+    //----------------------------------------------------------------------
+
+    void                       setTileDescription (const TileDescription & td);
+
+    TileDescription &          tileDescription ();
+    const TileDescription &    tileDescription () const;
+
+    bool                       hasTileDescription() const;
+
+
+    //----------------------------------------------------------------------
+    // Preview image:
+    //
+    // The preview image is a PreviewImageAttribute whose name is "preview".
+    // This attribute is special -- while an image file is being written,
+    // the pixels of the preview image can be changed repeatedly by calling
+    // OutputFile::updatePreviewImage().
+    //
+    // Convenience functions:
+    //
+    // setPreviewImage(p)
+    //     calls insert ("preview", PreviewImageAttribute (p))
+    //
+    // previewImage()
+    //     returns typedAttribute<PreviewImageAttribute>("preview").value()
+    //
+    // hasPreviewImage()
+    //     return findTypedAttribute<PreviewImageAttribute>("preview") != 0
+    //
+    //----------------------------------------------------------------------
+
+    void                       setPreviewImage (const PreviewImage &p);
+
+    PreviewImage &             previewImage ();
+    const PreviewImage &       previewImage () const;
+
+    bool                       hasPreviewImage () const;
+
+
+    //-------------------------------------------------------------
+    // Sanity check -- examines the header, and throws an exception
+    // if it finds something wrong (empty display window, negative
+    // pixel aspect ratio, unknown compression sceme etc.)
+    //
+    // set isTiled to true if you are checking a tiled/multi-res
+    // header
+    //-------------------------------------------------------------
+
+    void                       sanityCheck (bool isTiled = false) const;
+
+
+    //----------------------------------------------------------------
+    // Maximum image size and maximim tile size:
+    //
+    // sanityCheck() will throw an exception if the width or height of
+    // the data window exceeds the maximum image width or height, or
+    // if the size of a tile exceeds the maximum tile width or height.
+    // 
+    // At program startup the maximum image and tile width and height
+    // are set to zero, meaning that width and height are unlimited.
+    //
+    // Limiting image and tile width and height limits how much memory
+    // will be allocated when a file is opened.  This can help protect
+    // applications from running out of memory while trying to read
+    // a damaged image file.
+    //----------------------------------------------------------------
+
+    static void                        setMaxImageSize (int maxWidth, int maxHeight);
+    static void                        setMaxTileSize (int maxWidth, int maxHeight);
+
+
+    //------------------------------------------------------------------
+    // Input and output:
+    //
+    // If the header contains a preview image attribute, then writeTo()
+    // returns the position of that attribute in the output stream; this
+    // information is used by OutputFile::updatePreviewImage().
+    // If the header contains no preview image attribute, then writeTo()
+    // returns 0.
+    //------------------------------------------------------------------
+
+
+    Int64                      writeTo (OStream &os,
+                                        bool isTiled = false) const;
+
+    void                       readFrom (IStream &is, int &version);
+
+  private:
+
+    AttributeMap               _map;
+};
+
+
+//----------
+// Iterators
+//----------
+
+class Header::Iterator
+{
+  public:
+
+    Iterator ();
+    Iterator (const Header::AttributeMap::iterator &i);
+
+    Iterator &                 operator ++ ();
+    Iterator                   operator ++ (int);
+
+    const char *               name () const;
+    Attribute &                        attribute () const;
+
+  private:
+
+    friend class Header::ConstIterator;
+
+    Header::AttributeMap::iterator _i;
+};
+
+
+class Header::ConstIterator
+{
+  public:
+
+    ConstIterator ();
+    ConstIterator (const Header::AttributeMap::const_iterator &i);
+    ConstIterator (const Header::Iterator &other);
+
+    ConstIterator &            operator ++ ();
+    ConstIterator              operator ++ (int);
+
+    const char *               name () const;
+    const Attribute &          attribute () const;
+
+  private:
+
+    friend bool operator == (const ConstIterator &, const ConstIterator &);
+    friend bool operator != (const ConstIterator &, const ConstIterator &);
+
+    Header::AttributeMap::const_iterator _i;
+};
+
+
+//------------------------------------------------------------------------
+// Library initialization:
+//
+// In a multithreaded program, staticInitialize() must be called once
+// during startup, before the program accesses any other functions or
+// classes in the IlmImf library.  Calling staticInitialize() in this
+// way avoids races during initialization of the library's global
+// variables.
+//
+// Single-threaded programs are not required to call staticInitialize();
+// initialization of the library's global variables happens automatically.
+//
+//------------------------------------------------------------------------
+
+void staticInitialize ();
+
+
+//-----------------
+// Inline Functions
+//-----------------
+
+
+inline
+Header::Iterator::Iterator (): _i()
+{
+    // empty
+}
+
+
+inline
+Header::Iterator::Iterator (const Header::AttributeMap::iterator &i): _i (i)
+{
+    // empty
+}
+
+
+inline Header::Iterator &              
+Header::Iterator::operator ++ ()
+{
+    ++_i;
+    return *this;
+}
+
+
+inline Header::Iterator        
+Header::Iterator::operator ++ (int)
+{
+    Iterator tmp = *this;
+    ++_i;
+    return tmp;
+}
+
+
+inline const char *
+Header::Iterator::name () const
+{
+    return *_i->first;
+}
+
+
+inline Attribute &     
+Header::Iterator::attribute () const
+{
+    return *_i->second;
+}
+
+
+inline
+Header::ConstIterator::ConstIterator (): _i()
+{
+    // empty
+}
+
+inline
+Header::ConstIterator::ConstIterator
+    (const Header::AttributeMap::const_iterator &i): _i (i)
+{
+    // empty
+}
+
+
+inline
+Header::ConstIterator::ConstIterator (const Header::Iterator &other):
+    _i (other._i)
+{
+    // empty
+}
+
+inline Header::ConstIterator &
+Header::ConstIterator::operator ++ ()
+{
+    ++_i;
+    return *this;
+}
+
+
+inline Header::ConstIterator           
+Header::ConstIterator::operator ++ (int)
+{
+    ConstIterator tmp = *this;
+    ++_i;
+    return tmp;
+}
+
+
+inline const char *
+Header::ConstIterator::name () const
+{
+    return *_i->first;
+}
+
+
+inline const Attribute &       
+Header::ConstIterator::attribute () const
+{
+    return *_i->second;
+}
+
+
+inline bool
+operator == (const Header::ConstIterator &x, const Header::ConstIterator &y)
+{
+    return x._i == y._i;
+}
+
+
+inline bool
+operator != (const Header::ConstIterator &x, const Header::ConstIterator &y)
+{
+    return !(x == y);
+}
+
+
+//---------------------
+// Template definitions
+//---------------------
+
+template <class T>
+T &
+Header::typedAttribute (const char name[])
+{
+    Attribute *attr = &(*this)[name];
+    T *tattr = dynamic_cast <T*> (attr);
+
+    if (tattr == 0)
+       throw Iex::TypeExc ("Unexpected attribute type.");
+
+    return *tattr;
+}
+
+
+template <class T>
+const T &
+Header::typedAttribute (const char name[]) const
+{
+    const Attribute *attr = &(*this)[name];
+    const T *tattr = dynamic_cast <const T*> (attr);
+
+    if (tattr == 0)
+       throw Iex::TypeExc ("Unexpected attribute type.");
+
+    return *tattr;
+}
+
+
+template <class T>
+T &
+Header::typedAttribute (const std::string &name)
+{
+    return typedAttribute<T> (name.c_str());
+}
+
+
+template <class T>
+const T &
+Header::typedAttribute (const std::string &name) const
+{
+    return typedAttribute<T> (name.c_str());
+}
+
+
+template <class T>
+T *
+Header::findTypedAttribute (const char name[])
+{
+    AttributeMap::iterator i = _map.find (name);
+    return (i == _map.end())? 0: dynamic_cast <T*> (i->second);
+}
+
+
+template <class T>
+const T *
+Header::findTypedAttribute (const char name[]) const
+{
+    AttributeMap::const_iterator i = _map.find (name);
+    return (i == _map.end())? 0: dynamic_cast <const T*> (i->second);
+}
+
+
+template <class T>
+T *
+Header::findTypedAttribute (const std::string &name)
+{
+    return findTypedAttribute<T> (name.c_str());
+}
+
+
+template <class T>
+const T *
+Header::findTypedAttribute (const std::string &name) const
+{
+    return findTypedAttribute<T> (name.c_str());
+}
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfHuf.cpp b/3rdparty/openexr/IlmImf/ImfHuf.cpp
new file mode 100644 (file)
index 0000000..0de7d34
--- /dev/null
@@ -0,0 +1,1086 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     16-bit Huffman compression and decompression.
+//
+//     The source code in this file is derived from the 8-bit
+//     Huffman compression and decompression routines written
+//     by Christian Rouet for his PIZ image file format.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfHuf.h>
+#include <ImfInt64.h>
+#include <ImfAutoArray.h>
+#include "Iex.h"
+#include <string.h>
+#include <assert.h>
+#include <algorithm>
+
+
+using namespace std;
+using namespace Iex;
+
+namespace Imf {
+namespace {
+
+
+const int HUF_ENCBITS = 16;                    // literal (value) bit length
+const int HUF_DECBITS = 14;                    // decoding bit size (>= 8)
+
+const int HUF_ENCSIZE = (1 << HUF_ENCBITS) + 1;        // encoding table size
+const int HUF_DECSIZE =  1 << HUF_DECBITS;     // decoding table size
+const int HUF_DECMASK = HUF_DECSIZE - 1;
+
+
+struct HufDec
+{                              // short code           long code
+                               //-------------------------------
+    int                len:8;          // code length          0        
+    int                lit:24;         // lit                  p size   
+    int        *       p;              // 0                    lits     
+};
+
+
+void
+invalidNBits ()
+{
+    throw InputExc ("Error in header for Huffman-encoded data "
+                   "(invalid number of bits).");
+}
+
+
+void
+tooMuchData ()
+{
+    throw InputExc ("Error in Huffman-encoded data "
+                   "(decoded data are longer than expected).");
+}
+
+
+void
+notEnoughData ()
+{
+    throw InputExc ("Error in Huffman-encoded data "
+                   "(decoded data are shorter than expected).");
+}
+
+
+void
+invalidCode ()
+{
+    throw InputExc ("Error in Huffman-encoded data "
+                   "(invalid code).");
+}
+
+
+void
+invalidTableSize ()
+{
+    throw InputExc ("Error in Huffman-encoded data "
+                   "(invalid code table size).");
+}
+
+
+void
+unexpectedEndOfTable ()
+{
+    throw InputExc ("Error in Huffman-encoded data "
+                   "(unexpected end of code table data).");
+}
+
+
+void
+tableTooLong ()
+{
+    throw InputExc ("Error in Huffman-encoded data "
+                   "(code table is longer than expected).");
+}
+
+
+void
+invalidTableEntry ()
+{
+    throw InputExc ("Error in Huffman-encoded data "
+                   "(invalid code table entry).");
+}
+
+
+inline Int64
+hufLength (Int64 code)
+{
+    return code & 63;
+}
+
+
+inline Int64
+hufCode (Int64 code)
+{
+    return code >> 6;
+}
+
+
+inline void
+outputBits (int nBits, Int64 bits, Int64 &c, int &lc, char *&out)
+{
+    c <<= nBits;
+    lc += nBits;
+
+    c |= bits;
+
+    while (lc >= 8)
+       *out++ = (c >> (lc -= 8));
+}
+
+
+inline Int64
+getBits (int nBits, Int64 &c, int &lc, const char *&in)
+{
+    while (lc < nBits)
+    {
+       c = (c << 8) | *(unsigned char *)(in++);
+       lc += 8;
+    }
+
+    lc -= nBits;
+    return (c >> lc) & ((1 << nBits) - 1);
+}
+
+
+//
+// ENCODING TABLE BUILDING & (UN)PACKING
+//
+
+//
+// Build a "canonical" Huffman code table:
+//     - for each (uncompressed) symbol, hcode contains the length
+//       of the corresponding code (in the compressed data)
+//     - canonical codes are computed and stored in hcode
+//     - the rules for constructing canonical codes are as follows:
+//       * shorter codes (if filled with zeroes to the right)
+//         have a numerically higher value than longer codes
+//       * for codes with the same length, numerical values
+//         increase with numerical symbol values
+//     - because the canonical code table can be constructed from
+//       symbol lengths alone, the code table can be transmitted
+//       without sending the actual code values
+//     - see http://www.compressconsult.com/huffman/
+//
+
+void
+hufCanonicalCodeTable (Int64 hcode[HUF_ENCSIZE])
+{
+    Int64 n[59];
+
+    //
+    // For each i from 0 through 58, count the
+    // number of different codes of length i, and
+    // store the count in n[i].
+    //
+
+    for (int i = 0; i <= 58; ++i)
+       n[i] = 0;
+
+    for (int i = 0; i < HUF_ENCSIZE; ++i)
+       n[hcode[i]] += 1;
+
+    //
+    // For each i from 58 through 1, compute the
+    // numerically lowest code with length i, and
+    // store that code in n[i].
+    //
+
+    Int64 c = 0;
+
+    for (int i = 58; i > 0; --i)
+    {
+       Int64 nc = ((c + n[i]) >> 1);
+       n[i] = c;
+       c = nc;
+    }
+
+    //
+    // hcode[i] contains the length, l, of the
+    // code for symbol i.  Assign the next available
+    // code of length l to the symbol and store both
+    // l and the code in hcode[i].
+    //
+
+    for (int i = 0; i < HUF_ENCSIZE; ++i)
+    {
+       int l = hcode[i];
+
+       if (l > 0)
+           hcode[i] = l | (n[l]++ << 6);
+    }
+}
+
+
+//
+// Compute Huffman codes (based on frq input) and store them in frq:
+//     - code structure is : [63:lsb - 6:msb] | [5-0: bit length];
+//     - max code length is 58 bits;
+//     - codes outside the range [im-iM] have a null length (unused values);
+//     - original frequencies are destroyed;
+//     - encoding tables are used by hufEncode() and hufBuildDecTable();
+//
+
+
+struct FHeapCompare
+{
+    bool operator () (Int64 *a, Int64 *b) {return *a > *b;}
+};
+
+
+void
+hufBuildEncTable
+    (Int64*    frq,    // io: input frequencies [HUF_ENCSIZE], output table
+     int*      im,     //  o: min frq index
+     int*      iM)     //  o: max frq index
+{
+    //
+    // This function assumes that when it is called, array frq
+    // indicates the frequency of all possible symbols in the data
+    // that are to be Huffman-encoded.  (frq[i] contains the number
+    // of occurrences of symbol i in the data.)
+    //
+    // The loop below does three things:
+    //
+    // 1) Finds the minimum and maximum indices that point
+    //    to non-zero entries in frq:
+    //
+    //     frq[im] != 0, and frq[i] == 0 for all i < im
+    //     frq[iM] != 0, and frq[i] == 0 for all i > iM
+    //
+    // 2) Fills array fHeap with pointers to all non-zero
+    //    entries in frq.
+    //
+    // 3) Initializes array hlink such that hlink[i] == i
+    //    for all array entries.
+    //
+
+    AutoArray <int, HUF_ENCSIZE> hlink;
+    AutoArray <Int64 *, HUF_ENCSIZE> fHeap;
+
+    *im = 0;
+
+    while (!frq[*im])
+       (*im)++;
+
+    int nf = 0;
+
+    for (int i = *im; i < HUF_ENCSIZE; i++)
+    {
+       hlink[i] = i;
+
+       if (frq[i])
+       {
+           fHeap[nf] = &frq[i];
+           nf++;
+           *iM = i;
+       }
+    }
+
+    //
+    // Add a pseudo-symbol, with a frequency count of 1, to frq;
+    // adjust the fHeap and hlink array accordingly.  Function
+    // hufEncode() uses the pseudo-symbol for run-length encoding.
+    //
+
+    (*iM)++;
+    frq[*iM] = 1;
+    fHeap[nf] = &frq[*iM];
+    nf++;
+
+    //
+    // Build an array, scode, such that scode[i] contains the number
+    // of bits assigned to symbol i.  Conceptually this is done by
+    // constructing a tree whose leaves are the symbols with non-zero
+    // frequency:
+    //
+    //     Make a heap that contains all symbols with a non-zero frequency,
+    //     with the least frequent symbol on top.
+    //
+    //     Repeat until only one symbol is left on the heap:
+    //
+    //         Take the two least frequent symbols off the top of the heap.
+    //         Create a new node that has first two nodes as children, and
+    //         whose frequency is the sum of the frequencies of the first
+    //         two nodes.  Put the new node back into the heap.
+    //
+    // The last node left on the heap is the root of the tree.  For each
+    // leaf node, the distance between the root and the leaf is the length
+    // of the code for the corresponding symbol.
+    //
+    // The loop below doesn't actually build the tree; instead we compute
+    // the distances of the leaves from the root on the fly.  When a new
+    // node is added to the heap, then that node's descendants are linked
+    // into a single linear list that starts at the new node, and the code
+    // lengths of the descendants (that is, their distance from the root
+    // of the tree) are incremented by one.
+    //
+
+    make_heap (&fHeap[0], &fHeap[nf], FHeapCompare());
+
+    AutoArray <Int64, HUF_ENCSIZE> scode;
+    memset (scode, 0, sizeof (Int64) * HUF_ENCSIZE);
+
+    while (nf > 1)
+    {
+       //
+       // Find the indices, mm and m, of the two smallest non-zero frq
+       // values in fHeap, add the smallest frq to the second-smallest
+       // frq, and remove the smallest frq value from fHeap.
+       //
+
+       int mm = fHeap[0] - frq;
+       pop_heap (&fHeap[0], &fHeap[nf], FHeapCompare());
+       --nf;
+
+       int m = fHeap[0] - frq;
+       pop_heap (&fHeap[0], &fHeap[nf], FHeapCompare());
+
+       frq[m ] += frq[mm];
+       push_heap (&fHeap[0], &fHeap[nf], FHeapCompare());
+
+       //
+       // The entries in scode are linked into lists with the
+       // entries in hlink serving as "next" pointers and with
+       // the end of a list marked by hlink[j] == j.
+       //
+       // Traverse the lists that start at scode[m] and scode[mm].
+       // For each element visited, increment the length of the
+       // corresponding code by one bit. (If we visit scode[j]
+       // during the traversal, then the code for symbol j becomes
+       // one bit longer.)
+       //
+       // Merge the lists that start at scode[m] and scode[mm]
+       // into a single list that starts at scode[m].
+       //
+       
+       //
+       // Add a bit to all codes in the first list.
+       //
+
+       for (int j = m; true; j = hlink[j])
+       {
+           scode[j]++;
+
+           assert (scode[j] <= 58);
+
+           if (hlink[j] == j)
+           {
+               //
+               // Merge the two lists.
+               //
+
+               hlink[j] = mm;
+               break;
+           }
+       }
+
+       //
+       // Add a bit to all codes in the second list
+       //
+
+       for (int j = mm; true; j = hlink[j])
+       {
+           scode[j]++;
+
+           assert (scode[j] <= 58);
+
+           if (hlink[j] == j)
+               break;
+       }
+    }
+
+    //
+    // Build a canonical Huffman code table, replacing the code
+    // lengths in scode with (code, code length) pairs.  Copy the
+    // code table from scode into frq.
+    //
+
+    hufCanonicalCodeTable (scode);
+    memcpy (frq, scode, sizeof (Int64) * HUF_ENCSIZE);
+}
+
+
+//
+// Pack an encoding table:
+//     - only code lengths, not actual codes, are stored
+//     - runs of zeroes are compressed as follows:
+//
+//       unpacked              packed
+//       --------------------------------
+//       1 zero                0       (6 bits)
+//       2 zeroes              59
+//       3 zeroes              60
+//       4 zeroes              61
+//       5 zeroes              62
+//       n zeroes (6 or more)  63 n-6  (6 + 8 bits)
+//
+
+const int SHORT_ZEROCODE_RUN = 59;
+const int LONG_ZEROCODE_RUN  = 63;
+const int SHORTEST_LONG_RUN  = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN;
+const int LONGEST_LONG_RUN   = 255 + SHORTEST_LONG_RUN;
+
+
+void
+hufPackEncTable
+    (const Int64*      hcode,          // i : encoding table [HUF_ENCSIZE]
+     int               im,             // i : min hcode index
+     int               iM,             // i : max hcode index
+     char**            pcode)          //  o: ptr to packed table (updated)
+{
+    char *p = *pcode;
+    Int64 c = 0;
+    int lc = 0;
+
+    for (; im <= iM; im++)
+    {
+       int l = hufLength (hcode[im]);
+
+       if (l == 0)
+       {
+           int zerun = 1;
+
+           while ((im < iM) && (zerun < LONGEST_LONG_RUN))
+           {
+               if (hufLength (hcode[im+1]) > 0 )        
+                   break;
+               im++;
+               zerun++;
+           }
+
+           if (zerun >= 2)
+           {
+               if (zerun >= SHORTEST_LONG_RUN)
+               {
+                   outputBits (6, LONG_ZEROCODE_RUN, c, lc, p);
+                   outputBits (8, zerun - SHORTEST_LONG_RUN, c, lc, p);
+               }
+               else
+               {
+                   outputBits (6, SHORT_ZEROCODE_RUN + zerun - 2, c, lc, p);
+               }
+               continue;
+           }
+       }
+
+       outputBits (6, l, c, lc, p);
+    }
+
+    if (lc > 0)
+       *p++ = (unsigned char) (c << (8 - lc));
+
+    *pcode = p;
+}
+
+
+//
+// Unpack an encoding table packed by hufPackEncTable():
+//
+
+void
+hufUnpackEncTable
+    (const char**      pcode,          // io: ptr to packed table (updated)
+     int               ni,             // i : input size (in bytes)
+     int               im,             // i : min hcode index
+     int               iM,             // i : max hcode index
+     Int64*            hcode)          //  o: encoding table [HUF_ENCSIZE]
+{
+    memset (hcode, 0, sizeof (Int64) * HUF_ENCSIZE);
+
+    const char *p = *pcode;
+    Int64 c = 0;
+    int lc = 0;
+
+    for (; im <= iM; im++)
+    {
+       if (p - *pcode > ni)
+           unexpectedEndOfTable();
+
+       Int64 l = hcode[im] = getBits (6, c, lc, p); // code length
+
+       if (l == (Int64) LONG_ZEROCODE_RUN)
+       {
+           if (p - *pcode > ni)
+               unexpectedEndOfTable();
+
+           int zerun = getBits (8, c, lc, p) + SHORTEST_LONG_RUN;
+
+           if (im + zerun > iM + 1)
+               tableTooLong();
+
+           while (zerun--)
+               hcode[im++] = 0;
+
+           im--;
+       }
+       else if (l >= (Int64) SHORT_ZEROCODE_RUN)
+       {
+           int zerun = l - SHORT_ZEROCODE_RUN + 2;
+
+           if (im + zerun > iM + 1)
+               tableTooLong();
+
+           while (zerun--)
+               hcode[im++] = 0;
+
+           im--;
+       }
+    }
+
+    *pcode = (char *) p;
+
+    hufCanonicalCodeTable (hcode);
+}
+
+
+//
+// DECODING TABLE BUILDING
+//
+
+//
+// Clear a newly allocated decoding table so that it contains only zeroes.
+//
+
+void
+hufClearDecTable
+    (HufDec *          hdecod)         // io: (allocated by caller)
+                                       //     decoding table [HUF_DECSIZE]
+{
+    memset (hdecod, 0, sizeof (HufDec) * HUF_DECSIZE);
+}
+
+
+//
+// Build a decoding hash table based on the encoding table hcode:
+//     - short codes (<= HUF_DECBITS) are resolved with a single table access;
+//     - long code entry allocations are not optimized, because long codes are
+//       unfrequent;
+//     - decoding tables are used by hufDecode();
+//
+
+void
+hufBuildDecTable
+    (const Int64*      hcode,          // i : encoding table
+     int               im,             // i : min index in hcode
+     int               iM,             // i : max index in hcode
+     HufDec *          hdecod)         //  o: (allocated by caller)
+                                       //     decoding table [HUF_DECSIZE]
+{
+    //
+    // Init hashtable & loop on all codes.
+    // Assumes that hufClearDecTable(hdecod) has already been called.
+    //
+
+    for (; im <= iM; im++)
+    {
+       Int64 c = hufCode (hcode[im]);
+       int l = hufLength (hcode[im]);
+
+       if (c >> l)
+       {
+           //
+           // Error: c is supposed to be an l-bit code,
+           // but c contains a value that is greater
+           // than the largest l-bit number.
+           //
+
+           invalidTableEntry();
+       }
+
+       if (l > HUF_DECBITS)
+       {
+           //
+           // Long code: add a secondary entry
+           //
+
+           HufDec *pl = hdecod + (c >> (l - HUF_DECBITS));
+
+           if (pl->len)
+           {
+               //
+               // Error: a short code has already
+               // been stored in table entry *pl.
+               //
+
+               invalidTableEntry();
+           }
+
+           pl->lit++;
+
+           if (pl->p)
+           {
+               int *p = pl->p;
+               pl->p = new int [pl->lit];
+
+               for (int i = 0; i < pl->lit - 1; ++i)
+                   pl->p[i] = p[i];
+
+               delete [] p;
+           }
+           else
+           {
+               pl->p = new int [1];
+           }
+
+           pl->p[pl->lit - 1]= im;
+       }
+       else if (l)
+       {
+           //
+           // Short code: init all primary entries
+           //
+
+           HufDec *pl = hdecod + (c << (HUF_DECBITS - l));
+
+           for (Int64 i = 1 << (HUF_DECBITS - l); i > 0; i--, pl++)
+           {
+               if (pl->len || pl->p)
+               {
+                   //
+                   // Error: a short code or a long code has
+                   // already been stored in table entry *pl.
+                   //
+
+                   invalidTableEntry();
+               }
+
+               pl->len = l;
+               pl->lit = im;
+           }
+       }
+    }
+}
+
+
+//
+// Free the long code entries of a decoding table built by hufBuildDecTable()
+//
+
+void
+hufFreeDecTable (HufDec *hdecod)       // io: Decoding table
+{
+    for (int i = 0; i < HUF_DECSIZE; i++)
+    {
+       if (hdecod[i].p)
+       {
+           delete [] hdecod[i].p;
+           hdecod[i].p = 0;
+       }
+    }
+}
+
+
+//
+// ENCODING
+//
+
+inline void
+outputCode (Int64 code, Int64 &c, int &lc, char *&out)
+{
+    outputBits (hufLength (code), hufCode (code), c, lc, out);
+}
+
+
+inline void
+sendCode (Int64 sCode, int runCount, Int64 runCode,
+         Int64 &c, int &lc, char *&out)
+{
+    static const int RLMIN = 32; // min count to activate run-length coding
+
+    if (runCount > RLMIN)
+    {
+       outputCode (sCode, c, lc, out);
+       outputCode (runCode, c, lc, out);
+       outputBits (8, runCount, c, lc, out);
+    }
+    else
+    {
+       while (runCount-- >= 0)
+           outputCode (sCode, c, lc, out);
+    }
+}
+
+
+//
+// Encode (compress) ni values based on the Huffman encoding table hcode:
+//
+
+int
+hufEncode                              // return: output size (in bits)
+    (const Int64*          hcode,      // i : encoding table
+     const unsigned short*  in,                // i : uncompressed input buffer
+     const int             ni,         // i : input buffer size (in bytes)
+     int                   rlc,        // i : rl code
+     char*                 out)        //  o: compressed output buffer
+{
+    char *outStart = out;
+    Int64 c = 0;       // bits not yet written to out
+    int lc = 0;                // number of valid bits in c (LSB)
+    int s = in[0];
+    int cs = 0;
+
+    //
+    // Loop on input values
+    //
+
+    for (int i = 1; i < ni; i++)
+    {
+       //
+       // Count same values or send code
+       //
+
+       if (s == in[i] && cs < 255)
+       {
+           cs++;
+       }
+       else
+       {
+           sendCode (hcode[s], cs, hcode[rlc], c, lc, out);
+           cs=0;
+       }
+
+       s = in[i];
+    }
+
+    //
+    // Send remaining code
+    //
+
+    sendCode (hcode[s], cs, hcode[rlc], c, lc, out);
+
+    if (lc)
+       *out = (c << (8 - lc)) & 0xff;
+
+    return (out - outStart) * 8 + lc;
+}
+
+
+//
+// DECODING
+//
+
+//
+// In order to force the compiler to inline them,
+// getChar() and getCode() are implemented as macros
+// instead of "inline" functions.
+//
+
+#define getChar(c, lc, in)                     \
+{                                              \
+    c = (c << 8) | *(unsigned char *)(in++);   \
+    lc += 8;                                   \
+}
+
+
+#define getCode(po, rlc, c, lc, in, out, oe)   \
+{                                              \
+    if (po == rlc)                             \
+    {                                          \
+       if (lc < 8)                             \
+           getChar(c, lc, in);                 \
+                                               \
+       lc -= 8;                                \
+                                               \
+       unsigned char cs = (c >> lc);           \
+                                               \
+       if (out + cs > oe)                      \
+           tooMuchData();                      \
+                                               \
+       unsigned short s = out[-1];             \
+                                               \
+       while (cs-- > 0)                        \
+           *out++ = s;                         \
+    }                                          \
+    else if (out < oe)                         \
+    {                                          \
+       *out++ = po;                            \
+    }                                          \
+    else                                       \
+    {                                          \
+       tooMuchData();                          \
+    }                                          \
+}
+
+
+//
+// Decode (uncompress) ni bits based on encoding & decoding tables:
+//
+
+void
+hufDecode
+    (const Int64 *     hcode,  // i : encoding table
+     const HufDec *    hdecod, // i : decoding table
+     const char*       in,     // i : compressed input buffer
+     int               ni,     // i : input size (in bits)
+     int               rlc,    // i : run-length code
+     int               no,     // i : expected output size (in bytes)
+     unsigned short*   out)    //  o: uncompressed output buffer
+{
+    Int64 c = 0;
+    int lc = 0;
+    unsigned short * outb = out;
+    unsigned short * oe = out + no;
+    const char * ie = in + (ni + 7) / 8; // input byte size
+
+    //
+    // Loop on input bytes
+    //
+
+    while (in < ie)
+    {
+       getChar (c, lc, in);
+
+       //
+       // Access decoding table
+       //
+
+       while (lc >= HUF_DECBITS)
+       {
+           const HufDec pl = hdecod[(c >> (lc-HUF_DECBITS)) & HUF_DECMASK];
+
+           if (pl.len)
+           {
+               //
+               // Get short code
+               //
+
+               lc -= pl.len;
+               getCode (pl.lit, rlc, c, lc, in, out, oe);
+           }
+           else
+           {
+               if (!pl.p)
+                   invalidCode(); // wrong code
+
+               //
+               // Search long code
+               //
+
+               int j;
+
+               for (j = 0; j < pl.lit; j++)
+               {
+                   int l = hufLength (hcode[pl.p[j]]);
+
+                   while (lc < l && in < ie)   // get more bits
+                       getChar (c, lc, in);
+
+                   if (lc >= l)
+                   {
+                       if (hufCode (hcode[pl.p[j]]) ==
+                               ((c >> (lc - l)) & ((Int64(1) << l) - 1)))
+                       {
+                           //
+                           // Found : get long code
+                           //
+
+                           lc -= l;
+                           getCode (pl.p[j], rlc, c, lc, in, out, oe);
+                           break;
+                       }
+                   }
+               }
+
+               if (j == pl.lit)
+                   invalidCode(); // Not found
+           }
+       }
+    }
+
+    //
+    // Get remaining (short) codes
+    //
+
+    int i = (8 - ni) & 7;
+    c >>= i;
+    lc -= i;
+
+    while (lc > 0)
+    {
+       const HufDec pl = hdecod[(c << (HUF_DECBITS - lc)) & HUF_DECMASK];
+
+       if (pl.len)
+       {
+           lc -= pl.len;
+           getCode (pl.lit, rlc, c, lc, in, out, oe);
+       }
+       else
+       {
+           invalidCode(); // wrong (long) code
+       }
+    }
+
+    if (out - outb != no)
+       notEnoughData ();
+}
+
+
+void
+countFrequencies (Int64 freq[HUF_ENCSIZE],
+                 const unsigned short data[/*n*/],
+                 int n)
+{
+    for (int i = 0; i < HUF_ENCSIZE; ++i)
+       freq[i] = 0;
+
+    for (int i = 0; i < n; ++i)
+       ++freq[data[i]];
+}
+
+
+void
+writeUInt (char buf[4], unsigned int i)
+{
+    unsigned char *b = (unsigned char *) buf;
+
+    b[0] = i;
+    b[1] = i >> 8;
+    b[2] = i >> 16;
+    b[3] = i >> 24;
+}
+
+
+unsigned int
+readUInt (const char buf[4])
+{
+    const unsigned char *b = (const unsigned char *) buf;
+
+    return ( b[0]        & 0x000000ff) |
+          ((b[1] <<  8) & 0x0000ff00) |
+          ((b[2] << 16) & 0x00ff0000) |
+          ((b[3] << 24) & 0xff000000);
+}
+
+} // namespace
+
+
+//
+// EXTERNAL INTERFACE
+//
+
+
+int
+hufCompress (const unsigned short raw[],
+            int nRaw,
+            char compressed[])
+{
+    if (nRaw == 0)
+       return 0;
+
+    AutoArray <Int64, HUF_ENCSIZE> freq;
+
+    countFrequencies (freq, raw, nRaw);
+
+    int im, iM;
+    hufBuildEncTable (freq, &im, &iM);
+
+    char *tableStart = compressed + 20;
+    char *tableEnd   = tableStart;
+    hufPackEncTable (freq, im, iM, &tableEnd);
+    int tableLength = tableEnd - tableStart;
+
+    char *dataStart = tableEnd;
+    int nBits = hufEncode (freq, raw, nRaw, iM, dataStart);
+    int dataLength = (nBits + 7) / 8;
+
+    writeUInt (compressed,      im);
+    writeUInt (compressed +  4, iM);
+    writeUInt (compressed +  8, tableLength);
+    writeUInt (compressed + 12, nBits);
+    writeUInt (compressed + 16, 0);    // room for future extensions
+
+    return dataStart + dataLength - compressed;
+}
+
+
+void
+hufUncompress (const char compressed[],
+              int nCompressed,
+              unsigned short raw[],
+              int nRaw)
+{
+    if (nCompressed == 0)
+    {
+       if (nRaw != 0)
+           notEnoughData();
+
+       return;
+    }
+
+    int im = readUInt (compressed);
+    int iM = readUInt (compressed + 4);
+    // int tableLength = readUInt (compressed + 8);
+    int nBits = readUInt (compressed + 12);
+
+    if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE)
+       invalidTableSize();
+
+    const char *ptr = compressed + 20;
+
+    AutoArray <Int64, HUF_ENCSIZE> freq;
+    AutoArray <HufDec, HUF_DECSIZE> hdec;
+
+    hufClearDecTable (hdec);
+
+    hufUnpackEncTable (&ptr, nCompressed - (ptr - compressed), im, iM, freq);
+
+    try
+    {
+       if (nBits > 8 * (nCompressed - (ptr - compressed)))
+           invalidNBits();
+
+       hufBuildDecTable (freq, im, iM, hdec);
+       hufDecode (freq, hdec, ptr, nBits, iM, nRaw, raw);
+    }
+    catch (...)
+    {
+       hufFreeDecTable (hdec);
+       throw;
+    }
+
+    hufFreeDecTable (hdec);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfHuf.h b/3rdparty/openexr/IlmImf/ImfHuf.h
new file mode 100644 (file)
index 0000000..5134dfd
--- /dev/null
@@ -0,0 +1,79 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_HUF_H
+#define INCLUDED_IMF_HUF_H
+
+
+//-----------------------------------------------------------------------------
+//
+//     16-bit Huffman compression and decompression:
+//
+//     hufCompress (r, nr, c)
+//
+//             Compresses the contents of array r (of length nr),
+//             stores the compressed data in array c, and returns
+//             the size of the compressed data (in bytes).
+//
+//             To avoid buffer overflows, the size of array c should
+//             be at least 2 * nr + 65536.
+//
+//     hufUncompress (c, nc, r, nr)
+//
+//             Uncompresses the data in array c (with length nc),
+//             and stores the results in array r (with length nr).
+//
+//-----------------------------------------------------------------------------
+
+namespace Imf {
+
+
+int
+hufCompress (const unsigned short raw[/*nRaw*/],
+            int nRaw,
+            char compressed[/*2 * nRaw + 65536*/]);
+
+
+void
+hufUncompress (const char compressed[/*nCompressed*/],
+              int nCompressed,
+              unsigned short raw[/*nRaw*/],
+              int nRaw);
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfIO.cpp b/3rdparty/openexr/IlmImf/ImfIO.cpp
new file mode 100644 (file)
index 0000000..711cdbb
--- /dev/null
@@ -0,0 +1,109 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     Low-level file input and output for OpenEXR.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfIO.h>
+#include "Iex.h"
+
+namespace Imf {
+
+
+IStream::IStream (const char fileName[]): _fileName (fileName)
+{
+    // empty
+}
+
+
+IStream::~IStream ()
+{
+    // empty
+}
+
+
+bool
+IStream::isMemoryMapped () const
+{
+    return false;
+}
+
+
+char *
+IStream::readMemoryMapped (int n)
+{
+    throw Iex::InputExc ("Attempt to perform a memory-mapped read "
+                        "on a file that is not memory mapped.");
+    return 0;
+}
+
+
+void
+IStream::clear ()
+{
+    // empty
+}
+
+
+const char *
+IStream::fileName () const
+{
+    return _fileName.c_str();
+}
+
+
+OStream::OStream (const char fileName[]): _fileName (fileName)
+{
+    // empty
+}
+
+
+OStream::~OStream ()
+{
+    // empty
+}
+
+
+const char *
+OStream::fileName () const
+{
+    return _fileName.c_str();
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfIO.h b/3rdparty/openexr/IlmImf/ImfIO.h
new file mode 100644 (file)
index 0000000..44f51a3
--- /dev/null
@@ -0,0 +1,252 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_IO_H
+#define INCLUDED_IMF_IO_H
+
+//-----------------------------------------------------------------------------
+//
+//     Low-level file input and output for OpenEXR.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfInt64.h>
+#include <string>
+
+namespace Imf {
+
+//-----------------------------------------------------------
+// class IStream -- an abstract base class for input streams.
+//-----------------------------------------------------------
+
+class IStream
+{
+  public:
+
+    //-----------
+    // Destructor
+    //-----------
+
+    virtual ~IStream ();
+    
+    
+    //-------------------------------------------------
+    // Does this input stream support memory-mapped IO?
+    //
+    // Memory-mapped streams can avoid an extra copy;
+    // memory-mapped read operations return a pointer
+    // to an internal buffer instead of copying data
+    // into a buffer supplied by the caller.
+    //-------------------------------------------------
+
+    virtual bool        isMemoryMapped () const;
+
+
+    //------------------------------------------------------
+    // Read from the stream:
+    //
+    // read(c,n) reads n bytes from the stream, and stores
+    // them in array c.  If the stream contains less than n
+    // bytes, or if an I/O error occurs, read(c,n) throws
+    // an exception.  If read(c,n) reads the last byte from
+    // the file it returns false, otherwise it returns true.
+    //------------------------------------------------------
+
+    virtual bool       read (char c[/*n*/], int n) = 0;
+    
+    
+    //---------------------------------------------------
+    // Read from a memory-mapped stream:
+    //
+    // readMemoryMapped(n) reads n bytes from the stream
+    // and returns a pointer to the first byte.  The
+    // returned pointer remains valid until the stream
+    // is closed.  If there are less than n byte left to
+    // read in the stream or if the stream is not memory-
+    // mapped, readMemoryMapped(n) throws an exception.  
+    //---------------------------------------------------
+
+    virtual char *     readMemoryMapped (int n);
+
+
+    //--------------------------------------------------------
+    // Get the current reading position, in bytes from the
+    // beginning of the file.  If the next call to read() will
+    // read the first byte in the file, tellg() returns 0.
+    //--------------------------------------------------------
+
+    virtual Int64      tellg () = 0;
+
+
+    //-------------------------------------------
+    // Set the current reading position.
+    // After calling seekg(i), tellg() returns i.
+    //-------------------------------------------
+
+    virtual void       seekg (Int64 pos) = 0;
+
+
+    //------------------------------------------------------
+    // Clear error conditions after an operation has failed.
+    //------------------------------------------------------
+
+    virtual void       clear ();
+
+
+    //------------------------------------------------------
+    // Get the name of the file associated with this stream.
+    //------------------------------------------------------
+
+    const char *       fileName () const;
+
+  protected:
+
+    IStream (const char fileName[]);
+
+  private:
+
+    IStream (const IStream &);                 // not implemented
+    IStream & operator = (const IStream &);    // not implemented
+
+    std::string                _fileName;
+};
+
+
+//-----------------------------------------------------------
+// class OStream -- an abstract base class for output streams
+//-----------------------------------------------------------
+
+class OStream
+{
+  public:
+
+    //-----------
+    // Destructor
+    //-----------
+
+    virtual ~OStream ();
+  
+
+    //----------------------------------------------------------
+    // Write to the stream:
+    //
+    // write(c,n) takes n bytes from array c, and stores them
+    // in the stream.  If an I/O error occurs, write(c,n) throws
+    // an exception.
+    //----------------------------------------------------------
+
+    virtual void       write (const char c[/*n*/], int n) = 0;
+
+
+    //---------------------------------------------------------
+    // Get the current writing position, in bytes from the
+    // beginning of the file.  If the next call to write() will
+    // start writing at the beginning of the file, tellp()
+    // returns 0.
+    //---------------------------------------------------------
+
+    virtual Int64      tellp () = 0;
+
+
+    //-------------------------------------------
+    // Set the current writing position.
+    // After calling seekp(i), tellp() returns i.
+    //-------------------------------------------
+
+    virtual void       seekp (Int64 pos) = 0;
+
+
+    //------------------------------------------------------
+    // Get the name of the file associated with this stream.
+    //------------------------------------------------------
+
+    const char *       fileName () const;
+
+  protected:
+
+    OStream (const char fileName[]);
+
+  private:
+
+    OStream (const OStream &);                 // not implemented
+    OStream & operator = (const OStream &);    // not implemented
+
+    std::string                _fileName;
+};
+
+
+//-----------------------
+// Helper classes for Xdr
+//-----------------------
+
+struct StreamIO
+{
+    static void
+    writeChars (OStream &os, const char c[/*n*/], int n)
+    {
+       os.write (c, n);
+    }
+
+    static bool
+    readChars (IStream &is, char c[/*n*/], int n)
+    {
+       return is.read (c, n);
+    }
+};
+
+
+struct CharPtrIO
+{
+    static void
+    writeChars (char *&op, const char c[/*n*/], int n)
+    {
+       while (n--)
+           *op++ = *c++;
+    }
+
+    static bool
+    readChars (const char *&ip, char c[/*n*/], int n)
+    {
+       while (n--)
+           *c++ = *ip++;
+
+       return true;
+    }
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfInputFile.cpp b/3rdparty/openexr/IlmImf/ImfInputFile.cpp
new file mode 100644 (file)
index 0000000..e8b6425
--- /dev/null
@@ -0,0 +1,648 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class InputFile
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfInputFile.h>
+#include <ImfScanLineInputFile.h>
+#include <ImfTiledInputFile.h>
+#include <ImfChannelList.h>
+#include <ImfMisc.h>
+#include <ImfStdIO.h>
+#include <ImfVersion.h>
+#include "ImathFun.h"
+#include "IlmThreadMutex.h"
+#include "Iex.h"
+#include "half.h"
+#include <fstream>
+#include <algorithm>
+
+
+namespace Imf {
+
+
+using Imath::Box2i;
+using Imath::divp;
+using Imath::modp;
+using IlmThread::Mutex;
+using IlmThread::Lock;
+
+
+//
+// Struct InputFile::Data stores things that will be
+// needed between calls to readPixels
+//
+
+struct InputFile::Data: public Mutex
+{
+    Header              header;
+    int                 version;
+    IStream *          is;
+    bool               deleteStream;
+
+    TiledInputFile *   tFile;
+    ScanLineInputFile *        sFile;
+
+    LineOrder          lineOrder;      // the file's lineorder
+    int                        minY;           // data window's min y coord
+    int                        maxY;           // data window's max x coord
+    
+    FrameBuffer                tFileBuffer;
+    FrameBuffer *      cachedBuffer;
+    
+    int                        cachedTileY;
+    int                 offset;
+    
+    int                 numThreads;
+
+     Data (bool del, int numThreads);
+    ~Data ();
+
+    void               deleteCachedBuffer();
+};
+
+
+InputFile::Data::Data (bool del, int numThreads):
+    is (0),
+    deleteStream (del),
+    tFile (0),
+    sFile (0),
+    cachedBuffer (0),
+    cachedTileY (-1),
+    numThreads (numThreads)
+{
+    // empty
+}
+
+
+InputFile::Data::~Data ()
+{
+    delete tFile;
+    delete sFile;
+
+    if (deleteStream)
+       delete is;
+
+    deleteCachedBuffer();
+}
+
+
+void   
+InputFile::Data::deleteCachedBuffer()
+{
+    //
+    // Delete the cached frame buffer, and all memory
+    // allocated for the slices in the cached frameBuffer.
+    //
+
+    if (cachedBuffer)
+    {
+       for (FrameBuffer::Iterator k = cachedBuffer->begin();
+            k != cachedBuffer->end();
+            ++k)
+       {
+           Slice &s = k.slice();
+
+           switch (s.type)
+           {
+             case UINT:
+
+               delete [] (((unsigned int *)s.base) + offset);
+               break;
+
+             case HALF:
+
+               delete [] ((half *)s.base + offset);
+               break;
+
+             case FLOAT:
+
+               delete [] (((float *)s.base) + offset);
+               break;
+           }                
+       }
+
+       //
+       // delete the cached frame buffer
+       //
+
+       delete cachedBuffer;        
+       cachedBuffer = 0;
+    }
+}
+
+
+namespace {
+
+void
+bufferedReadPixels (InputFile::Data* ifd, int scanLine1, int scanLine2)
+{
+    //
+    // bufferedReadPixels reads each row of tiles that intersect the
+    // scan-line range (scanLine1 to scanLine2). The previous row of
+    // tiles is cached in order to prevent redundent tile reads when
+    // accessing scanlines sequentially.
+    //
+
+    int minY = std::min (scanLine1, scanLine2);
+    int maxY = std::max (scanLine1, scanLine2);
+
+    if (minY < ifd->minY || maxY >  ifd->maxY)
+    {
+        throw Iex::ArgExc ("Tried to read scan line outside "
+                          "the image file's data window.");
+    }
+
+    //
+    // The minimum and maximum y tile coordinates that intersect this
+    // scanline range
+    //
+
+    int minDy = (minY - ifd->minY) / ifd->tFile->tileYSize();
+    int maxDy = (maxY - ifd->minY) / ifd->tFile->tileYSize();
+
+    //
+    // Figure out which one is first in the file so we can read without seeking
+    //
+
+    int yStart, yEnd, yStep;
+
+    if (ifd->lineOrder == DECREASING_Y)
+    {
+        yStart = maxDy;
+        yEnd = minDy - 1;
+        yStep = -1;
+    }
+    else
+    {
+        yStart = minDy;
+        yEnd = maxDy + 1;
+        yStep = 1;
+    }
+
+    //
+    // the number of pixels in a row of tiles
+    //
+
+    Box2i levelRange = ifd->tFile->dataWindowForLevel(0);
+    
+    //
+    // Read the tiles into our temporary framebuffer and copy them into
+    // the user's buffer
+    //
+
+    for (int j = yStart; j != yEnd; j += yStep)
+    {
+        Box2i tileRange = ifd->tFile->dataWindowForTile (0, j, 0);
+
+        int minYThisRow = std::max (minY, tileRange.min.y);
+        int maxYThisRow = std::min (maxY, tileRange.max.y);
+
+        if (j != ifd->cachedTileY)
+        {
+            //
+            // We don't have any valid buffered info, so we need to read in
+            // from the file.
+            //
+
+            ifd->tFile->readTiles (0, ifd->tFile->numXTiles (0) - 1, j, j);
+            ifd->cachedTileY = j;
+        }
+
+        //
+        // Copy the data from our cached framebuffer into the user's
+        // framebuffer.
+        //
+
+        for (FrameBuffer::ConstIterator k = ifd->cachedBuffer->begin();
+             k != ifd->cachedBuffer->end();
+             ++k)
+        {
+            Slice fromSlice = k.slice();               // slice to write from
+            Slice toSlice = ifd->tFileBuffer[k.name()];        // slice to write to
+
+            char *fromPtr, *toPtr;
+            int size = pixelTypeSize (toSlice.type);
+
+           int xStart = levelRange.min.x;
+           int yStart = minYThisRow;
+
+           while (modp (xStart, toSlice.xSampling) != 0)
+               ++xStart;
+
+           while (modp (yStart, toSlice.ySampling) != 0)
+               ++yStart;
+
+            for (int y = yStart;
+                y <= maxYThisRow;
+                y += toSlice.ySampling)
+            {
+               //
+                // Set the pointers to the start of the y scanline in
+                // this row of tiles
+               //
+                
+                fromPtr = fromSlice.base +
+                          (y - tileRange.min.y) * fromSlice.yStride +
+                          xStart * fromSlice.xStride;
+
+                toPtr = toSlice.base +
+                        divp (y, toSlice.ySampling) * toSlice.yStride +
+                        divp (xStart, toSlice.xSampling) * toSlice.xStride;
+
+               //
+                // Copy all pixels for the scanline in this row of tiles
+               //
+
+                for (int x = xStart;
+                    x <= levelRange.max.x;
+                    x += toSlice.xSampling)
+                {
+                   for (size_t i = 0; i < size; ++i)
+                       toPtr[i] = fromPtr[i];
+
+                   fromPtr += fromSlice.xStride * toSlice.xSampling;
+                   toPtr += toSlice.xStride;
+                }
+            }
+        }
+    }
+}
+
+} // namespace
+
+
+
+InputFile::InputFile (const char fileName[], int numThreads):
+    _data (new Data (true, numThreads))
+{
+    try
+    {
+       _data->is = new StdIFStream (fileName);
+       initialize();
+    }
+    catch (Iex::BaseExc &e)
+    {
+       delete _data;
+
+        REPLACE_EXC (e, "Cannot read image file "
+                       "\"" << fileName << "\". " << e);
+        throw;
+    }
+    catch (...)
+    {
+       delete _data;
+        throw;
+    }
+}
+
+
+InputFile::InputFile (IStream &is, int numThreads):
+    _data (new Data (false, numThreads))
+{
+    try
+    {
+       _data->is = &is;
+       initialize();
+    }
+    catch (Iex::BaseExc &e)
+    {
+       delete _data;
+
+        REPLACE_EXC (e, "Cannot read image file "
+                       "\"" << is.fileName() << "\". " << e);
+        throw;
+    }
+    catch (...)
+    {
+       delete _data;
+        throw;
+    }
+}
+
+
+void
+InputFile::initialize ()
+{
+    _data->header.readFrom (*_data->is, _data->version);
+    _data->header.sanityCheck (isTiled (_data->version));
+
+    if (isTiled (_data->version))
+    {
+       _data->lineOrder = _data->header.lineOrder();
+
+       //
+       // Save the dataWindow information
+       //
+
+       const Box2i &dataWindow = _data->header.dataWindow();
+       _data->minY = dataWindow.min.y;
+       _data->maxY = dataWindow.max.y;
+    
+       _data->tFile = new TiledInputFile (_data->header,
+                                          _data->is,
+                                          _data->version,
+                                           _data->numThreads);
+    }
+    else
+    {
+       _data->sFile = new ScanLineInputFile (_data->header,
+                                             _data->is,
+                                              _data->numThreads);
+    }
+}
+
+
+InputFile::~InputFile ()
+{
+    delete _data;
+}
+
+
+const char *
+InputFile::fileName () const
+{
+    return _data->is->fileName();
+}
+
+
+const Header &
+InputFile::header () const
+{
+    return _data->header;
+}
+
+
+int
+InputFile::version () const
+{
+    return _data->version;
+}
+
+
+void
+InputFile::setFrameBuffer (const FrameBuffer &frameBuffer)
+{
+    if (isTiled (_data->version))
+    {
+       Lock lock (*_data);
+
+       //
+        // We must invalidate the cached buffer if the new frame
+       // buffer has a different set of channels than the old
+       // frame buffer, or if the type of a channel has changed.
+       //
+
+       const FrameBuffer &oldFrameBuffer = _data->tFileBuffer;
+
+       FrameBuffer::ConstIterator i = oldFrameBuffer.begin();
+       FrameBuffer::ConstIterator j = frameBuffer.begin();
+
+       while (i != oldFrameBuffer.end() && j != frameBuffer.end())
+       {
+           if (strcmp (i.name(), j.name()) || i.slice().type != j.slice().type)
+               break;
+
+           ++i;
+           ++j;
+       }
+
+       if (i != oldFrameBuffer.end() || j != frameBuffer.end())
+        {
+           //
+           // Invalidate the cached buffer.
+           //
+
+            _data->deleteCachedBuffer ();
+           _data->cachedTileY = -1;
+
+           //
+           // Create new a cached frame buffer.  It can hold a single
+           // row of tiles.  The cached buffer can be reused for each
+           // row of tiles because we set the yTileCoords parameter of
+           // each Slice to true.
+           //
+
+           const Box2i &dataWindow = _data->header.dataWindow();
+           _data->cachedBuffer = new FrameBuffer();
+           _data->offset = dataWindow.min.x;
+           
+           int tileRowSize = (dataWindow.max.x - dataWindow.min.x + 1) *
+                             _data->tFile->tileYSize();
+
+           for (FrameBuffer::ConstIterator k = frameBuffer.begin();
+                k != frameBuffer.end();
+                ++k)
+           {
+               Slice s = k.slice();
+
+               switch (s.type)
+               {
+                 case UINT:
+
+                   _data->cachedBuffer->insert
+                       (k.name(),
+                        Slice (UINT,
+                               (char *)(new unsigned int[tileRowSize] - 
+                                       _data->offset),
+                               sizeof (unsigned int),
+                               sizeof (unsigned int) *
+                                   _data->tFile->levelWidth(0),
+                               1, 1,
+                               s.fillValue,
+                               false, true));
+                   break;
+
+                 case HALF:
+
+                   _data->cachedBuffer->insert
+                       (k.name(),
+                        Slice (HALF,
+                               (char *)(new half[tileRowSize] - 
+                                       _data->offset),
+                               sizeof (half),
+                               sizeof (half) *
+                                   _data->tFile->levelWidth(0),
+                               1, 1,
+                               s.fillValue,
+                               false, true));
+                   break;
+
+                 case FLOAT:
+
+                   _data->cachedBuffer->insert
+                       (k.name(),
+                        Slice (FLOAT,
+                               (char *)(new float[tileRowSize] - 
+                                       _data->offset),
+                               sizeof(float),
+                               sizeof(float) *
+                                   _data->tFile->levelWidth(0),
+                               1, 1,
+                               s.fillValue,
+                               false, true));
+                   break;
+
+                 default:
+
+                   throw Iex::ArgExc ("Unknown pixel data type.");
+               }
+           }
+
+           _data->tFile->setFrameBuffer (*_data->cachedBuffer);
+        }
+
+       _data->tFileBuffer = frameBuffer;
+    }
+    else
+    {
+        _data->sFile->setFrameBuffer (frameBuffer);
+    }
+}
+
+
+const FrameBuffer &
+InputFile::frameBuffer () const
+{
+    if (isTiled (_data->version))
+    {
+       Lock lock (*_data);
+       return _data->tFileBuffer;
+    }
+    else
+    {
+       return _data->sFile->frameBuffer();
+    }
+}
+
+
+bool
+InputFile::isComplete () const
+{
+    if (isTiled (_data->version))
+       return _data->tFile->isComplete();
+    else
+       return _data->sFile->isComplete();
+}
+
+
+void
+InputFile::readPixels (int scanLine1, int scanLine2)
+{
+    if (isTiled (_data->version))
+    {
+       Lock lock (*_data);
+        bufferedReadPixels (_data, scanLine1, scanLine2);
+    }
+    else
+    {
+        _data->sFile->readPixels (scanLine1, scanLine2);
+    }
+}
+
+
+void
+InputFile::readPixels (int scanLine)
+{
+    readPixels (scanLine, scanLine);
+}
+
+
+void
+InputFile::rawPixelData (int firstScanLine,
+                        const char *&pixelData,
+                        int &pixelDataSize)
+{
+    try
+    {
+       if (isTiled (_data->version))
+       {
+           throw Iex::ArgExc ("Tried to read a raw scanline "
+                              "from a tiled image.");
+       }
+        
+        _data->sFile->rawPixelData (firstScanLine, pixelData, pixelDataSize);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Error reading pixel data from image "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+void
+InputFile::rawTileData (int &dx, int &dy,
+                       int &lx, int &ly,
+                       const char *&pixelData,
+                       int &pixelDataSize)
+{
+    try
+    {
+       if (!isTiled (_data->version))
+       {
+           throw Iex::ArgExc ("Tried to read a raw tile "
+                              "from a scanline-based image.");
+       }
+        
+        _data->tFile->rawTileData (dx, dy, lx, ly, pixelData, pixelDataSize);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Error reading tile data from image "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+TiledInputFile*
+InputFile::tFile()
+{
+    if (!isTiled (_data->version))
+    {
+       throw Iex::ArgExc ("Cannot get a TiledInputFile pointer "
+                          "from an InputFile that is not tiled.");
+    }
+
+    return _data->tFile;
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfInputFile.h b/3rdparty/openexr/IlmImf/ImfInputFile.h
new file mode 100644 (file)
index 0000000..af9256b
--- /dev/null
@@ -0,0 +1,209 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_INPUT_FILE_H
+#define INCLUDED_IMF_INPUT_FILE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class InputFile -- a scanline-based interface that can be used
+//     to read both scanline-based and tiled OpenEXR image files.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfHeader.h>
+#include <ImfFrameBuffer.h>
+#include <ImfTiledOutputFile.h>
+#include <string>
+#include <fstream>
+#include <ImfThreading.h>
+
+namespace Imf {
+
+class TiledInputFile;
+class ScanLineInputFile;
+
+
+class InputFile
+{
+  public:
+
+    //-----------------------------------------------------------
+    // A constructor that opens the file with the specified name.
+    // Destroying the InputFile object will close the file.
+    //
+    // numThreads determines the number of threads that will be
+    // used to read the file (see ImfThreading.h).
+    //-----------------------------------------------------------
+
+    InputFile (const char fileName[], int numThreads = globalThreadCount());
+
+
+    //-------------------------------------------------------------
+    // A constructor that attaches the new InputFile object to a
+    // file that has already been opened.  Destroying the InputFile
+    // object will not close the file.
+    //
+    // numThreads determines the number of threads that will be
+    // used to read the file (see ImfThreading.h).
+    //-------------------------------------------------------------
+
+    InputFile (IStream &is, int numThreads = globalThreadCount());
+
+
+    //-----------
+    // Destructor
+    //-----------
+
+    virtual ~InputFile ();
+
+
+    //------------------------
+    // Access to the file name
+    //------------------------
+
+    const char *       fileName () const;
+
+
+    //--------------------------
+    // Access to the file header
+    //--------------------------
+
+    const Header &     header () const;
+
+
+    //----------------------------------
+    // Access to the file format version
+    //----------------------------------
+
+    int                        version () const;
+
+
+    //-----------------------------------------------------------
+    // Set the current frame buffer -- copies the FrameBuffer
+    // object into the InputFile object.
+    //
+    // The current frame buffer is the destination for the pixel
+    // data read from the file.  The current frame buffer must be
+    // set at least once before readPixels() is called.
+    // The current frame buffer can be changed after each call
+    // to readPixels().
+    //-----------------------------------------------------------
+
+    void               setFrameBuffer (const FrameBuffer &frameBuffer);
+
+
+    //-----------------------------------
+    // Access to the current frame buffer
+    //-----------------------------------
+
+    const FrameBuffer &        frameBuffer () const;
+
+
+    //---------------------------------------------------------------
+    // Check if the file is complete:
+    //
+    // isComplete() returns true if all pixels in the data window are
+    // present in the input file, or false if any pixels are missing.
+    // (Another program may still be busy writing the file, or file
+    // writing may have been aborted prematurely.)
+    //---------------------------------------------------------------
+
+    bool               isComplete () const;
+
+
+    //---------------------------------------------------------------
+    // Read pixel data:
+    //
+    // readPixels(s1,s2) reads all scan lines with y coordinates
+    // in the interval [min (s1, s2), max (s1, s2)] from the file,
+    // and stores them in the current frame buffer.
+    //
+    // Both s1 and s2 must be within the interval
+    // [header().dataWindow().min.y, header().dataWindow().max.y]
+    //
+    // The scan lines can be read from the file in random order, and
+    // individual scan lines may be skipped or read multiple times.
+    // For maximum efficiency, the scan lines should be read in the
+    // order in which they were written to the file.
+    //
+    // readPixels(s) calls readPixels(s,s).
+    //
+    //---------------------------------------------------------------
+
+    void               readPixels (int scanLine1, int scanLine2);
+    void               readPixels (int scanLine);
+
+
+    //----------------------------------------------
+    // Read a block of raw pixel data from the file,
+    // without uncompressing it (this function is
+    // used to implement OutputFile::copyPixels()).
+    //----------------------------------------------
+
+    void               rawPixelData (int firstScanLine,
+                                     const char *&pixelData,
+                                     int &pixelDataSize);
+                                     
+    //--------------------------------------------------
+    // Read a tile of raw pixel data from the file,
+    // without uncompressing it (this function is
+    // used to implement TiledOutputFile::copyPixels()).
+    //--------------------------------------------------
+
+    void               rawTileData (int &dx, int &dy,
+                                    int &lx, int &ly,
+                                    const char *&pixelData,
+                                    int &pixelDataSize);
+
+    struct Data;
+    
+  private:
+
+    InputFile (const InputFile &);                     // not implemented
+    InputFile & operator = (const InputFile &);                // not implemented
+
+    void               initialize ();
+    TiledInputFile *   tFile ();
+    
+    friend void TiledOutputFile::copyPixels (InputFile &);
+    
+    Data *             _data;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfInt64.h b/3rdparty/openexr/IlmImf/ImfInt64.h
new file mode 100644 (file)
index 0000000..d8fdc81
--- /dev/null
@@ -0,0 +1,52 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_INT64_H
+#define INCLUDED_IMF_INT64_H
+
+//----------------------------------------------------------------------------
+//
+//     Int64 -- unsigned 64-bit integers, imported from namespace Imath
+//
+//----------------------------------------------------------------------------
+
+#include "ImathInt64.h"
+
+namespace Imf {
+
+using Imath::Int64;
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfIntAttribute.cpp b/3rdparty/openexr/IlmImf/ImfIntAttribute.cpp
new file mode 100644 (file)
index 0000000..f233b58
--- /dev/null
@@ -0,0 +1,57 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class IntAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfIntAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+IntAttribute::staticTypeName ()
+{
+    return "int";
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfIntAttribute.h b/3rdparty/openexr/IlmImf/ImfIntAttribute.h
new file mode 100644 (file)
index 0000000..c67e5b1
--- /dev/null
@@ -0,0 +1,63 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_INT_ATTRIBUTE_H
+#define INCLUDED_IMF_INT_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class IntAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<int> IntAttribute;
+template <> const char *IntAttribute::staticTypeName ();
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfIntAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfKeyCode.cpp b/3rdparty/openexr/IlmImf/ImfKeyCode.cpp
new file mode 100644 (file)
index 0000000..b199cf5
--- /dev/null
@@ -0,0 +1,216 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class KeyCode
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfKeyCode.h>
+#include "Iex.h"
+
+namespace Imf {
+
+   
+KeyCode::KeyCode (int filmMfcCode,
+                 int filmType,
+                 int prefix,
+                 int count,
+                 int perfOffset,
+                 int perfsPerFrame,
+                 int perfsPerCount)
+{
+    setFilmMfcCode (filmMfcCode);
+    setFilmType (filmType);
+    setPrefix (prefix);
+    setCount (count);
+    setPerfOffset (perfOffset);
+    setPerfsPerFrame (perfsPerFrame);
+    setPerfsPerCount (perfsPerCount);
+}
+
+
+KeyCode::KeyCode (const KeyCode &other)
+{
+    _filmMfcCode = other._filmMfcCode;
+    _filmType = other._filmType;
+    _prefix = other._prefix;
+    _count = other._count;
+    _perfOffset = other._perfOffset;
+    _perfsPerFrame = other._perfsPerFrame;
+    _perfsPerCount = other._perfsPerCount;
+}
+
+
+KeyCode &
+KeyCode::operator = (const KeyCode &other)
+{
+    _filmMfcCode = other._filmMfcCode;
+    _filmType = other._filmType;
+    _prefix = other._prefix;
+    _count = other._count;
+    _perfOffset = other._perfOffset;
+    _perfsPerFrame = other._perfsPerFrame;
+    _perfsPerCount = other._perfsPerCount;
+
+    return *this;
+}
+
+
+int            
+KeyCode::filmMfcCode () const
+{
+    return _filmMfcCode;
+}
+
+
+void   
+KeyCode::setFilmMfcCode (int filmMfcCode)
+{
+    if (filmMfcCode < 0 || filmMfcCode > 99)
+       throw Iex::ArgExc ("Invalid key code film manufacturer code "
+                          "(must be between 0 and 99).");
+
+    _filmMfcCode = filmMfcCode;
+}
+
+int            
+KeyCode::filmType () const
+{
+    return _filmType;
+}
+
+
+void   
+KeyCode::setFilmType (int filmType)
+{
+    if (filmType < 0 || filmType > 99)
+       throw Iex::ArgExc ("Invalid key code film type "
+                          "(must be between 0 and 99).");
+
+    _filmType = filmType;
+}
+
+int            
+KeyCode::prefix () const
+{
+    return _prefix;
+}
+
+
+void   
+KeyCode::setPrefix (int prefix)
+{
+    if (prefix < 0 || prefix > 999999)
+       throw Iex::ArgExc ("Invalid key code prefix "
+                          "(must be between 0 and 999999).");
+
+    _prefix = prefix;
+}
+
+
+int            
+KeyCode::count () const
+{
+    return _count;
+}
+
+
+void   
+KeyCode::setCount (int count)
+{
+    if (count < 0 || count > 9999)
+       throw Iex::ArgExc ("Invalid key code count "
+                          "(must be between 0 and 9999).");
+
+    _count = count;
+}
+
+
+int            
+KeyCode::perfOffset () const
+{
+    return _perfOffset;
+}
+
+
+void   
+KeyCode::setPerfOffset (int perfOffset)
+{
+    if (perfOffset < 0 || perfOffset > 119)
+       throw Iex::ArgExc ("Invalid key code perforation offset "
+                          "(must be between 0 and 119).");
+
+    _perfOffset = perfOffset;
+}
+
+
+int    
+KeyCode::perfsPerFrame () const
+{
+    return _perfsPerFrame;
+}
+
+
+void
+KeyCode::setPerfsPerFrame (int perfsPerFrame)
+{
+    if (perfsPerFrame < 1 || perfsPerFrame > 15)
+       throw Iex::ArgExc ("Invalid key code number of perforations per frame "
+                          "(must be between 1 and 15).");
+
+    _perfsPerFrame = perfsPerFrame;
+}
+
+
+int    
+KeyCode::perfsPerCount () const
+{
+    return _perfsPerCount;
+}
+
+
+void
+KeyCode::setPerfsPerCount (int perfsPerCount)
+{
+    if (perfsPerCount < 20 || perfsPerCount > 120)
+       throw Iex::ArgExc ("Invalid key code number of perforations per count "
+                          "(must be between 20 and 120).");
+
+    _perfsPerCount = perfsPerCount;
+}
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfKeyCode.h b/3rdparty/openexr/IlmImf/ImfKeyCode.h
new file mode 100644 (file)
index 0000000..93dd915
--- /dev/null
@@ -0,0 +1,161 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_KEY_CODE_H
+#define INCLUDED_IMF_KEY_CODE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class KeyCode
+//     
+//     A KeyCode object uniquely identifies a motion picture film frame.
+//     The following fields specifiy film manufacturer, film type, film
+//     roll and the frame's position within the roll:
+//
+//         filmMfcCode         film manufacturer code
+//                             range: 0 - 99
+//
+//         filmType            film type code
+//                             range: 0 - 99
+//
+//         prefix              prefix to identify film roll
+//                             range: 0 - 999999
+//
+//         count               count, increments once every perfsPerCount
+//                             perforations (see below)
+//                             range: 0 - 9999
+//
+//         perfOffset          offset of frame, in perforations from
+//                             zero-frame reference mark
+//                             range: 0 - 119
+//
+//         perfsPerFrame       number of perforations per frame 
+//                             range: 1 - 15
+//
+//                             typical values:
+//
+//                                 1 for 16mm film
+//                                 3, 4, or 8 for 35mm film
+//                                 5, 8 or 15 for 65mm film
+//
+//         perfsPerCount       number of perforations per count 
+//                             range: 20 - 120
+//
+//                             typical values:
+//
+//                                 20 for 16mm film
+//                                 64 for 35mm film
+//                                 80 or 120 for 65mm film
+//
+//     For more information about the interpretation of those fields see
+//     the following standards and recommended practice publications:
+//
+//         SMPTE 254   Motion-Picture Film (35-mm) - Manufacturer-Printed
+//                     Latent Image Identification Information
+//
+//         SMPTE 268M  File Format for Digital Moving-Picture Exchange (DPX)
+//                     (section 6.1)
+//
+//         SMPTE 270   Motion-Picture Film (65-mm) - Manufacturer- Printed
+//                     Latent Image Identification Information
+//
+//         SMPTE 271   Motion-Picture Film (16-mm) - Manufacturer- Printed
+//                     Latent Image Identification Information
+//
+//-----------------------------------------------------------------------------
+
+namespace Imf {
+
+   
+class KeyCode
+{
+  public:
+
+    //-------------------------------------
+    // Constructors and assignment operator
+    //-------------------------------------
+
+    KeyCode (int filmMfcCode = 0,
+            int filmType = 0,
+            int prefix = 0,
+            int count = 0,
+            int perfOffset = 0,
+            int perfsPerFrame = 4,
+            int perfsPerCount = 64);
+
+    KeyCode (const KeyCode &other);
+    KeyCode & operator = (const KeyCode &other);
+
+
+    //----------------------------
+    // Access to individual fields
+    //----------------------------
+
+    int                filmMfcCode () const;
+    void       setFilmMfcCode (int filmMfcCode);
+
+    int                filmType () const;
+    void       setFilmType (int filmType);
+
+    int                prefix () const;
+    void       setPrefix (int prefix);
+
+    int                count () const;
+    void       setCount (int count);
+
+    int                perfOffset () const;
+    void       setPerfOffset (int perfOffset);
+
+    int                perfsPerFrame () const;
+    void       setPerfsPerFrame (int perfsPerFrame);
+
+    int                perfsPerCount () const;
+    void       setPerfsPerCount (int perfsPerCount);
+
+  private:
+
+    int                _filmMfcCode;
+    int                _filmType;
+    int                _prefix;
+    int                _count;
+    int                _perfOffset;
+    int                _perfsPerFrame;
+    int                _perfsPerCount;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfKeyCodeAttribute.cpp b/3rdparty/openexr/IlmImf/ImfKeyCodeAttribute.cpp
new file mode 100644 (file)
index 0000000..00156bd
--- /dev/null
@@ -0,0 +1,98 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class KeyCodeAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfKeyCodeAttribute.h>
+
+namespace Imf {
+
+
+template <>
+const char *
+KeyCodeAttribute::staticTypeName ()
+{
+    return "keycode";
+}
+
+
+template <>
+void
+KeyCodeAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.filmMfcCode());
+    Xdr::write <StreamIO> (os, _value.filmType());
+    Xdr::write <StreamIO> (os, _value.prefix());
+    Xdr::write <StreamIO> (os, _value.count());
+    Xdr::write <StreamIO> (os, _value.perfOffset());
+    Xdr::write <StreamIO> (os, _value.perfsPerFrame());
+    Xdr::write <StreamIO> (os, _value.perfsPerCount());
+}
+
+
+template <>
+void
+KeyCodeAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    int tmp;
+
+    Xdr::read <StreamIO> (is, tmp);
+    _value.setFilmMfcCode (tmp);
+
+    Xdr::read <StreamIO> (is, tmp);
+    _value.setFilmType (tmp);
+
+    Xdr::read <StreamIO> (is, tmp);
+    _value.setPrefix (tmp);
+
+    Xdr::read <StreamIO> (is, tmp);
+    _value.setCount (tmp);
+
+    Xdr::read <StreamIO> (is, tmp);
+    _value.setPerfOffset (tmp);
+
+    Xdr::read <StreamIO> (is, tmp);
+    _value.setPerfsPerFrame (tmp);
+
+    Xdr::read <StreamIO> (is, tmp);
+    _value.setPerfsPerCount (tmp);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfKeyCodeAttribute.h b/3rdparty/openexr/IlmImf/ImfKeyCodeAttribute.h
new file mode 100644 (file)
index 0000000..9ec8f84
--- /dev/null
@@ -0,0 +1,72 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_KEY_CODE_ATTRIBUTE_H
+#define INCLUDED_IMF_KEY_CODE_ATTRIBUTE_H
+
+
+//-----------------------------------------------------------------------------
+//
+//     class KeyCodeAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include <ImfKeyCode.h>
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<KeyCode> KeyCodeAttribute;
+
+template <>
+const char *KeyCodeAttribute::staticTypeName ();
+
+template <>
+void KeyCodeAttribute::writeValueTo (OStream &, int) const;
+
+template <>
+void KeyCodeAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfKeyCodeAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfLineOrder.h b/3rdparty/openexr/IlmImf/ImfLineOrder.h
new file mode 100644 (file)
index 0000000..2f91352
--- /dev/null
@@ -0,0 +1,64 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_LINE_ORDER_H
+#define INCLUDED_IMF_LINE_ORDER_H
+
+//-----------------------------------------------------------------------------
+//
+//     enum LineOrder
+//
+//-----------------------------------------------------------------------------
+
+namespace Imf {
+
+
+enum LineOrder
+{
+    INCREASING_Y = 0,  // first scan line has lowest y coordinate
+
+    DECREASING_Y = 1,  // first scan line has highest y coordinate
+
+    RANDOM_Y = 2,       // only for tiled files; tiles are written
+                       // in random order
+
+    NUM_LINEORDERS     // number of different line orders
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfLineOrderAttribute.cpp b/3rdparty/openexr/IlmImf/ImfLineOrderAttribute.cpp
new file mode 100644 (file)
index 0000000..6b9c0f9
--- /dev/null
@@ -0,0 +1,77 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class LineOrderAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfLineOrderAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+LineOrderAttribute::staticTypeName ()
+{
+    return "lineOrder";
+}
+
+
+template <>
+void
+LineOrderAttribute::writeValueTo (OStream &os, int version) const
+{
+    unsigned char tmp = _value;
+    Xdr::write <StreamIO> (os, tmp);
+}
+
+
+template <>
+void
+LineOrderAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    unsigned char tmp;
+    Xdr::read <StreamIO> (is, tmp);
+    _value = LineOrder (tmp);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfLineOrderAttribute.h b/3rdparty/openexr/IlmImf/ImfLineOrderAttribute.h
new file mode 100644 (file)
index 0000000..eb9301e
--- /dev/null
@@ -0,0 +1,66 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_LINE_ORDER_ATTRIBUTE_H
+#define INCLUDED_IMF_LINE_ORDER_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class LineOrderAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include <ImfLineOrder.h>
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<LineOrder> LineOrderAttribute;
+template <> const char *LineOrderAttribute::staticTypeName ();
+template <> void LineOrderAttribute::writeValueTo (OStream &, int) const;
+template <> void LineOrderAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfLineOrderAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfLut.cpp b/3rdparty/openexr/IlmImf/ImfLut.cpp
new file mode 100644 (file)
index 0000000..284bd21
--- /dev/null
@@ -0,0 +1,176 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     Lookup tables for efficient application
+//     of half --> half functions to pixel data,
+//     and some commonly applied functions.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfLut.h>
+#include <math.h>
+#include <assert.h>
+
+namespace Imf {
+
+
+void
+HalfLut::apply (half *data, int nData, int stride) const
+{
+    while (nData)
+    {
+       *data = _lut (*data);
+       data += stride;
+       nData -= 1;
+    }
+}
+
+
+void
+HalfLut::apply (const Slice &data, const Imath::Box2i &dataWindow) const
+{
+    assert (data.type == HALF);
+    assert (dataWindow.min.x % data.xSampling == 0);
+    assert (dataWindow.min.y % data.ySampling == 0);
+    assert ((dataWindow.max.x - dataWindow.min.x + 1) % data.xSampling == 0);
+    assert ((dataWindow.max.y - dataWindow.min.y + 1) % data.ySampling == 0);
+
+    char *base = data.base + data.yStride *
+                (dataWindow.min.y / data.ySampling);
+
+    for (int y = dataWindow.min.y;
+        y <= dataWindow.max.y;
+        y += data.ySampling)
+    {
+       char *pixel = base + data.xStride *
+                     (dataWindow.min.x / data.xSampling);
+
+       for (int x = dataWindow.min.x;
+            x <= dataWindow.max.x;
+            x += data.xSampling)
+       {
+           *(half *)pixel = _lut (*(half *)pixel);
+           pixel += data.xStride;
+       }
+
+       base += data.yStride;
+    }
+}
+
+
+void
+RgbaLut::apply (Rgba *data, int nData, int stride) const
+{
+    while (nData)
+    {
+       if (_chn & WRITE_R)
+           data->r = _lut (data->r);
+
+       if (_chn & WRITE_G)
+           data->g = _lut (data->g);
+
+       if (_chn & WRITE_B)
+           data->b = _lut (data->b);
+
+       if (_chn & WRITE_A)
+           data->a = _lut (data->a);
+
+       data += stride;
+       nData -= 1;
+    }
+}
+
+
+void
+RgbaLut::apply (Rgba *base,
+               int xStride, int yStride,
+               const Imath::Box2i &dataWindow) const
+{
+    base += dataWindow.min.y * yStride;
+
+    for (int y = dataWindow.min.y; y <= dataWindow.max.y; ++y)
+    {
+       Rgba *pixel = base + dataWindow.min.x * xStride;
+
+       for (int x = dataWindow.min.x; x <= dataWindow.max.x; ++x)
+       {
+           if (_chn & WRITE_R)
+               pixel->r = _lut (pixel->r);
+
+           if (_chn & WRITE_G)
+               pixel->g = _lut (pixel->g);
+
+           if (_chn & WRITE_B)
+               pixel->b = _lut (pixel->b);
+
+           if (_chn & WRITE_A)
+               pixel->a = _lut (pixel->a);
+
+           pixel += xStride;
+       }
+
+       base += yStride;
+    }
+}
+
+
+half
+round12log (half x)
+{
+    const float middleval = pow (2.0, -2.5);
+    int int12log;
+
+    if (x <= 0)
+    {
+       return 0;
+    }
+    else
+    {
+       int12log = int (2000.5 + 200.0 * log (x / middleval) / log (2.0));
+
+       if (int12log > 4095)
+           int12log = 4095;
+
+       if (int12log < 1)
+           int12log = 1;
+    }
+
+    return middleval * pow (2.0, (int12log - 2000.0) / 200.0);
+}
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfLut.h b/3rdparty/openexr/IlmImf/ImfLut.h
new file mode 100644 (file)
index 0000000..ca702d2
--- /dev/null
@@ -0,0 +1,185 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_LUT_H
+#define INCLUDED_IMF_LUT_H
+
+//-----------------------------------------------------------------------------
+//
+//     Lookup tables for efficient application
+//     of half --> half functions to pixel data,
+//     and some commonly applied functions.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfRgbaFile.h>
+#include <ImfFrameBuffer.h>
+#include "ImathBox.h"
+#include "halfFunction.h"
+
+namespace Imf {
+
+//
+// Lookup table for individual half channels.
+//
+
+class HalfLut
+{
+  public:
+
+    //------------
+    // Constructor
+    //------------
+
+    template <class Function>
+    HalfLut (Function f);
+
+
+    //----------------------------------------------------------------------
+    // Apply the table to data[0], data[stride] ... data[(nData-1) * stride]
+    //----------------------------------------------------------------------
+
+    void apply (half *data,
+               int nData,
+               int stride = 1) const;
+
+
+    //---------------------------------------------------------------
+    // Apply the table to a frame buffer slice (see ImfFrameBuffer.h)
+    //---------------------------------------------------------------
+
+    void apply (const Slice &data,
+               const Imath::Box2i &dataWindow) const;
+
+  private:
+
+    halfFunction <half>        _lut;
+};
+
+
+//
+// Lookup table for combined RGBA data.
+//
+
+class RgbaLut
+{
+  public:
+
+    //------------
+    // Constructor
+    //------------
+
+    template <class Function>
+    RgbaLut (Function f, RgbaChannels chn = WRITE_RGB);
+
+
+    //----------------------------------------------------------------------
+    // Apply the table to data[0], data[stride] ... data[(nData-1) * stride]
+    //----------------------------------------------------------------------
+
+    void apply (Rgba *data,
+               int nData,
+               int stride = 1) const;
+
+
+    //-----------------------------------------------------------------------
+    // Apply the table to a frame buffer (see RgbaOutpuFile.setFrameBuffer())
+    //-----------------------------------------------------------------------
+
+    void apply (Rgba *base,
+               int xStride,
+               int yStride,
+               const Imath::Box2i &dataWindow) const;
+
+  private:
+
+    halfFunction <half>        _lut;
+    RgbaChannels       _chn;
+};
+
+
+//
+// 12bit log rounding reduces data to 20 stops with 200 steps per stop.
+// That makes 4000 numbers.  An extra 96 just come along for the ride.
+// Zero explicitly remains zero.  The first non-zero half will map to 1
+// in the 0-4095 12log space.  A nice power of two number is placed at
+// the center [2000] and that number is near 0.18.
+//
+
+half round12log (half x);
+
+
+//
+// Round to n-bit precision (n should be between 0 and 10).
+// After rounding, the significand's 10-n least significant
+// bits will be zero.
+//
+
+struct roundNBit
+{
+    roundNBit (int n): n(n) {}
+    half operator () (half x) {return x.round(n);}
+    int n;
+};
+
+
+//
+// Template definitions
+//
+
+
+template <class Function>
+HalfLut::HalfLut (Function f):
+    _lut(f, -HALF_MAX, HALF_MAX, half (0),
+        half::posInf(), half::negInf(), half::qNan())
+{
+    // empty
+}
+
+
+template <class Function>
+RgbaLut::RgbaLut (Function f, RgbaChannels chn):
+    _lut(f, -HALF_MAX, HALF_MAX, half (0),
+        half::posInf(), half::negInf(), half::qNan()),
+    _chn(chn)
+{
+    // empty
+}
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfMatrixAttribute.cpp b/3rdparty/openexr/IlmImf/ImfMatrixAttribute.cpp
new file mode 100644 (file)
index 0000000..f4e447a
--- /dev/null
@@ -0,0 +1,260 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class M33fAttribute
+//     class M33dAttribute
+//     class M44fAttribute
+//     class M44dAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfMatrixAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+M33fAttribute::staticTypeName ()
+{
+    return "m33f";
+}
+
+
+template <>
+void
+M33fAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value[0][0]);
+    Xdr::write <StreamIO> (os, _value[0][1]);
+    Xdr::write <StreamIO> (os, _value[0][2]);
+
+    Xdr::write <StreamIO> (os, _value[1][0]);
+    Xdr::write <StreamIO> (os, _value[1][1]);
+    Xdr::write <StreamIO> (os, _value[1][2]);
+
+    Xdr::write <StreamIO> (os, _value[2][0]);
+    Xdr::write <StreamIO> (os, _value[2][1]);
+    Xdr::write <StreamIO> (os, _value[2][2]);
+}
+
+
+template <>
+void
+M33fAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value[0][0]);
+    Xdr::read <StreamIO> (is, _value[0][1]);
+    Xdr::read <StreamIO> (is, _value[0][2]);
+
+    Xdr::read <StreamIO> (is, _value[1][0]);
+    Xdr::read <StreamIO> (is, _value[1][1]);
+    Xdr::read <StreamIO> (is, _value[1][2]);
+
+    Xdr::read <StreamIO> (is, _value[2][0]);
+    Xdr::read <StreamIO> (is, _value[2][1]);
+    Xdr::read <StreamIO> (is, _value[2][2]);
+}
+
+
+template <>
+const char *
+M33dAttribute::staticTypeName ()
+{
+    return "m33d";
+}
+
+
+template <>
+void
+M33dAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value[0][0]);
+    Xdr::write <StreamIO> (os, _value[0][1]);
+    Xdr::write <StreamIO> (os, _value[0][2]);
+
+    Xdr::write <StreamIO> (os, _value[1][0]);
+    Xdr::write <StreamIO> (os, _value[1][1]);
+    Xdr::write <StreamIO> (os, _value[1][2]);
+
+    Xdr::write <StreamIO> (os, _value[2][0]);
+    Xdr::write <StreamIO> (os, _value[2][1]);
+    Xdr::write <StreamIO> (os, _value[2][2]);
+}
+
+
+template <>
+void
+M33dAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value[0][0]);
+    Xdr::read <StreamIO> (is, _value[0][1]);
+    Xdr::read <StreamIO> (is, _value[0][2]);
+
+    Xdr::read <StreamIO> (is, _value[1][0]);
+    Xdr::read <StreamIO> (is, _value[1][1]);
+    Xdr::read <StreamIO> (is, _value[1][2]);
+
+    Xdr::read <StreamIO> (is, _value[2][0]);
+    Xdr::read <StreamIO> (is, _value[2][1]);
+    Xdr::read <StreamIO> (is, _value[2][2]);
+}
+
+
+template <>
+const char *
+M44fAttribute::staticTypeName ()
+{
+    return "m44f";
+}
+
+
+template <>
+void
+M44fAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value[0][0]);
+    Xdr::write <StreamIO> (os, _value[0][1]);
+    Xdr::write <StreamIO> (os, _value[0][2]);
+    Xdr::write <StreamIO> (os, _value[0][3]);
+
+    Xdr::write <StreamIO> (os, _value[1][0]);
+    Xdr::write <StreamIO> (os, _value[1][1]);
+    Xdr::write <StreamIO> (os, _value[1][2]);
+    Xdr::write <StreamIO> (os, _value[1][3]);
+
+    Xdr::write <StreamIO> (os, _value[2][0]);
+    Xdr::write <StreamIO> (os, _value[2][1]);
+    Xdr::write <StreamIO> (os, _value[2][2]);
+    Xdr::write <StreamIO> (os, _value[2][3]);
+
+    Xdr::write <StreamIO> (os, _value[3][0]);
+    Xdr::write <StreamIO> (os, _value[3][1]);
+    Xdr::write <StreamIO> (os, _value[3][2]);
+    Xdr::write <StreamIO> (os, _value[3][3]);
+}
+
+
+template <>
+void
+M44fAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value[0][0]);
+    Xdr::read <StreamIO> (is, _value[0][1]);
+    Xdr::read <StreamIO> (is, _value[0][2]);
+    Xdr::read <StreamIO> (is, _value[0][3]);
+
+    Xdr::read <StreamIO> (is, _value[1][0]);
+    Xdr::read <StreamIO> (is, _value[1][1]);
+    Xdr::read <StreamIO> (is, _value[1][2]);
+    Xdr::read <StreamIO> (is, _value[1][3]);
+
+    Xdr::read <StreamIO> (is, _value[2][0]);
+    Xdr::read <StreamIO> (is, _value[2][1]);
+    Xdr::read <StreamIO> (is, _value[2][2]);
+    Xdr::read <StreamIO> (is, _value[2][3]);
+
+    Xdr::read <StreamIO> (is, _value[3][0]);
+    Xdr::read <StreamIO> (is, _value[3][1]);
+    Xdr::read <StreamIO> (is, _value[3][2]);
+    Xdr::read <StreamIO> (is, _value[3][3]);
+}
+
+
+template <>
+const char *
+M44dAttribute::staticTypeName ()
+{
+    return "m44d";
+}
+
+
+template <>
+void
+M44dAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value[0][0]);
+    Xdr::write <StreamIO> (os, _value[0][1]);
+    Xdr::write <StreamIO> (os, _value[0][2]);
+    Xdr::write <StreamIO> (os, _value[0][3]);
+
+    Xdr::write <StreamIO> (os, _value[1][0]);
+    Xdr::write <StreamIO> (os, _value[1][1]);
+    Xdr::write <StreamIO> (os, _value[1][2]);
+    Xdr::write <StreamIO> (os, _value[1][3]);
+
+    Xdr::write <StreamIO> (os, _value[2][0]);
+    Xdr::write <StreamIO> (os, _value[2][1]);
+    Xdr::write <StreamIO> (os, _value[2][2]);
+    Xdr::write <StreamIO> (os, _value[2][3]);
+
+    Xdr::write <StreamIO> (os, _value[3][0]);
+    Xdr::write <StreamIO> (os, _value[3][1]);
+    Xdr::write <StreamIO> (os, _value[3][2]);
+    Xdr::write <StreamIO> (os, _value[3][3]);
+}
+
+
+template <>
+void
+M44dAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value[0][0]);
+    Xdr::read <StreamIO> (is, _value[0][1]);
+    Xdr::read <StreamIO> (is, _value[0][2]);
+    Xdr::read <StreamIO> (is, _value[0][3]);
+
+    Xdr::read <StreamIO> (is, _value[1][0]);
+    Xdr::read <StreamIO> (is, _value[1][1]);
+    Xdr::read <StreamIO> (is, _value[1][2]);
+    Xdr::read <StreamIO> (is, _value[1][3]);
+
+    Xdr::read <StreamIO> (is, _value[2][0]);
+    Xdr::read <StreamIO> (is, _value[2][1]);
+    Xdr::read <StreamIO> (is, _value[2][2]);
+    Xdr::read <StreamIO> (is, _value[2][3]);
+
+    Xdr::read <StreamIO> (is, _value[3][0]);
+    Xdr::read <StreamIO> (is, _value[3][1]);
+    Xdr::read <StreamIO> (is, _value[3][2]);
+    Xdr::read <StreamIO> (is, _value[3][3]);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfMatrixAttribute.h b/3rdparty/openexr/IlmImf/ImfMatrixAttribute.h
new file mode 100644 (file)
index 0000000..2bb515b
--- /dev/null
@@ -0,0 +1,87 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_MATRIX_ATTRIBUTE_H
+#define INCLUDED_IMF_MATRIX_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class M33fAttribute
+//     class M33dAttribute
+//     class M44fAttribute
+//     class M44dAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include "ImathMatrix.h"
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<Imath::M33f> M33fAttribute;
+template <> const char *M33fAttribute::staticTypeName ();
+template <> void M33fAttribute::writeValueTo (OStream &, int) const;
+template <> void M33fAttribute::readValueFrom (IStream &, int, int);
+
+
+typedef TypedAttribute<Imath::M33d> M33dAttribute;
+template <> const char *M33dAttribute::staticTypeName ();
+template <> void M33dAttribute::writeValueTo (OStream &, int) const;
+template <> void M33dAttribute::readValueFrom (IStream &, int, int);
+
+
+typedef TypedAttribute<Imath::M44f> M44fAttribute;
+template <> const char *M44fAttribute::staticTypeName ();
+template <> void M44fAttribute::writeValueTo (OStream &, int) const;
+template <> void M44fAttribute::readValueFrom (IStream &, int, int);
+
+
+typedef TypedAttribute<Imath::M44d> M44dAttribute;
+template <> const char *M44dAttribute::staticTypeName ();
+template <> void M44dAttribute::writeValueTo (OStream &, int) const;
+template <> void M44dAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfMatrixAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfMisc.cpp b/3rdparty/openexr/IlmImf/ImfMisc.cpp
new file mode 100644 (file)
index 0000000..e13f390
--- /dev/null
@@ -0,0 +1,787 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     Miscellaneous helper functions for OpenEXR image file I/O
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfMisc.h>
+#include <ImfHeader.h>
+#include <ImfCompressor.h>
+#include <ImfChannelList.h>
+#include <ImfXdr.h>
+#include <ImathFun.h>
+#include <Iex.h>
+#include <ImfStdIO.h>
+#include <ImfConvert.h>
+
+namespace Imf {
+
+using Imath::Box2i;
+using Imath::divp;
+using Imath::modp;
+using std::vector;
+
+int
+pixelTypeSize (PixelType type)
+{
+    int size;
+
+    switch (type)
+    {
+      case UINT:
+       
+       size = Xdr::size <unsigned int> ();
+       break;
+
+      case HALF:
+
+       size = Xdr::size <half> ();
+       break;
+
+      case FLOAT:
+
+       size = Xdr::size <float> ();
+       break;
+
+      default:
+
+       throw Iex::ArgExc ("Unknown pixel type.");
+    }
+
+    return size;
+}
+
+
+int
+numSamples (int s, int a, int b)
+{
+    int a1 = divp (a, s);
+    int b1 = divp (b, s);
+    return  b1 - a1 + ((a1 * s < a)? 0: 1);
+}
+
+
+size_t
+bytesPerLineTable (const Header &header,
+                  vector<size_t> &bytesPerLine)
+{
+    const Box2i &dataWindow = header.dataWindow();
+    const ChannelList &channels = header.channels();
+
+    bytesPerLine.resize (dataWindow.max.y - dataWindow.min.y + 1);
+
+    for (ChannelList::ConstIterator c = channels.begin();
+        c != channels.end();
+        ++c)
+    {
+       int nBytes = pixelTypeSize (c.channel().type) *
+                    (dataWindow.max.x - dataWindow.min.x + 1) /
+                    c.channel().xSampling;
+
+       for (int y = dataWindow.min.y, i = 0; y <= dataWindow.max.y; ++y, ++i)
+           if (modp (y, c.channel().ySampling) == 0)
+               bytesPerLine[i] += nBytes;
+    }
+
+    size_t maxBytesPerLine = 0;
+
+    for (int y = dataWindow.min.y, i = 0; y <= dataWindow.max.y; ++y, ++i)
+       if (maxBytesPerLine < bytesPerLine[i])
+           maxBytesPerLine = bytesPerLine[i];
+
+    return maxBytesPerLine;
+}
+
+
+void
+offsetInLineBufferTable (const vector<size_t> &bytesPerLine,
+                        int linesInLineBuffer,
+                        vector<size_t> &offsetInLineBuffer)
+{
+    offsetInLineBuffer.resize (bytesPerLine.size());
+
+    size_t offset = 0;
+
+    for (int i = 0; i < bytesPerLine.size(); ++i)
+    {
+       if (i % linesInLineBuffer == 0)
+           offset = 0;
+
+       offsetInLineBuffer[i] = offset;
+       offset += bytesPerLine[i];
+    }
+}
+
+
+int
+lineBufferMinY (int y, int minY, int linesInLineBuffer)
+{
+    return ((y - minY) / linesInLineBuffer) * linesInLineBuffer + minY;
+}
+
+
+int
+lineBufferMaxY (int y, int minY, int linesInLineBuffer)
+{
+    return lineBufferMinY (y, minY, linesInLineBuffer) + linesInLineBuffer - 1;
+}
+
+
+Compressor::Format
+defaultFormat (Compressor * compressor)
+{
+    return compressor? compressor->format(): Compressor::XDR;
+}
+
+
+int
+numLinesInBuffer (Compressor * compressor)
+{
+    return compressor? compressor->numScanLines(): 1;
+}
+
+
+void
+copyIntoFrameBuffer (const char *& readPtr,
+                    char * writePtr,
+                    char * endPtr,
+                     size_t xStride,
+                    bool fill,
+                    double fillValue,
+                     Compressor::Format format,
+                     PixelType typeInFrameBuffer,
+                     PixelType typeInFile)
+{
+    //
+    // Copy a horizontal row of pixels from an input
+    // file's line or tile buffer to a frame buffer.
+    //
+
+    if (fill)
+    {
+        //
+        // The file contains no data for this channel.
+        // Store a default value in the frame buffer.
+        //
+
+        switch (typeInFrameBuffer)
+        {
+         case UINT:
+            
+            {
+                unsigned int fillVal = (unsigned int) (fillValue);
+
+                while (writePtr <= endPtr)
+                {
+                    *(unsigned int *) writePtr = fillVal;
+                    writePtr += xStride;
+                }
+            }
+            break;
+
+          case HALF:
+
+            {
+                half fillVal = half (fillValue);
+
+                while (writePtr <= endPtr)
+                {
+                    *(half *) writePtr = fillVal;
+                    writePtr += xStride;
+                }
+            }
+            break;
+
+          case FLOAT:
+
+            {
+                float fillVal = float (fillValue);
+
+                while (writePtr <= endPtr)
+                {
+                    *(float *) writePtr = fillVal;
+                    writePtr += xStride;
+                }
+            }
+            break;
+
+          default:
+
+            throw Iex::ArgExc ("Unknown pixel data type.");
+        }
+    }
+    else if (format == Compressor::XDR)
+    {
+        //
+        // The the line or tile buffer is in XDR format.
+        //
+        // Convert the pixels from the file's machine-
+        // independent representation, and store the
+        // results in the frame buffer.
+        //
+
+        switch (typeInFrameBuffer)
+        {
+          case UINT:
+    
+            switch (typeInFile)
+            {
+              case UINT:
+
+                while (writePtr <= endPtr)
+                {
+                    Xdr::read <CharPtrIO> (readPtr, *(unsigned int *) writePtr);
+                    writePtr += xStride;
+                }
+                break;
+
+              case HALF:
+
+                while (writePtr <= endPtr)
+                {
+                    half h;
+                    Xdr::read <CharPtrIO> (readPtr, h);
+                    *(unsigned int *) writePtr = halfToUint (h);
+                    writePtr += xStride;
+                }
+                break;
+
+              case FLOAT:
+
+                while (writePtr <= endPtr)
+                {
+                    float f;
+                    Xdr::read <CharPtrIO> (readPtr, f);
+                    *(unsigned int *)writePtr = floatToUint (f);
+                    writePtr += xStride;
+                }
+                break;
+            }
+            break;
+
+          case HALF:
+
+            switch (typeInFile)
+            {
+              case UINT:
+
+                while (writePtr <= endPtr)
+                {
+                    unsigned int ui;
+                    Xdr::read <CharPtrIO> (readPtr, ui);
+                    *(half *) writePtr = uintToHalf (ui);
+                    writePtr += xStride;
+                }
+                break;
+                
+              case HALF:
+
+                while (writePtr <= endPtr)
+                {
+                    Xdr::read <CharPtrIO> (readPtr, *(half *) writePtr);
+                    writePtr += xStride;
+                }
+                break;
+
+              case FLOAT:
+
+                while (writePtr <= endPtr)
+                {
+                    float f;
+                    Xdr::read <CharPtrIO> (readPtr, f);
+                    *(half *) writePtr = floatToHalf (f);
+                    writePtr += xStride;
+                }
+                break;
+            }
+            break;
+
+          case FLOAT:
+
+            switch (typeInFile)
+            {
+              case UINT:
+
+                while (writePtr <= endPtr)
+                {
+                    unsigned int ui;
+                    Xdr::read <CharPtrIO> (readPtr, ui);
+                    *(float *) writePtr = float (ui);
+                    writePtr += xStride;
+                }
+                break;
+
+              case HALF:
+
+                while (writePtr <= endPtr)
+                {
+                    half h;
+                    Xdr::read <CharPtrIO> (readPtr, h);
+                    *(float *) writePtr = float (h);
+                    writePtr += xStride;
+                }
+                break;
+
+              case FLOAT:
+
+                while (writePtr <= endPtr)
+                {
+                    Xdr::read <CharPtrIO> (readPtr, *(float *) writePtr);
+                    writePtr += xStride;
+                }
+                break;
+            }
+            break;
+
+          default:
+
+            throw Iex::ArgExc ("Unknown pixel data type.");
+        }
+    }
+    else
+    {
+        //
+        // The the line or tile buffer is in NATIVE format.
+        // Copy the results into the frame buffer.
+        //
+
+        switch (typeInFrameBuffer)
+        {
+          case UINT:
+    
+            switch (typeInFile)
+            {
+              case UINT:
+
+                while (writePtr <= endPtr)
+                {
+                    for (size_t i = 0; i < sizeof (unsigned int); ++i)
+                        writePtr[i] = readPtr[i];
+
+                    readPtr += sizeof (unsigned int);
+                    writePtr += xStride;
+                }
+                break;
+
+              case HALF:
+
+                while (writePtr <= endPtr)
+                {
+                    half h = *(half *) readPtr;
+                    *(unsigned int *) writePtr = halfToUint (h);
+                    readPtr += sizeof (half);
+                    writePtr += xStride;
+                }
+                break;
+
+              case FLOAT:
+
+                while (writePtr <= endPtr)
+                {
+                    float f;
+
+                    for (size_t i = 0; i < sizeof (float); ++i)
+                        ((char *)&f)[i] = readPtr[i];
+
+                    *(unsigned int *)writePtr = floatToUint (f);
+                    readPtr += sizeof (float);
+                    writePtr += xStride;
+                }
+                break;
+            }
+            break;
+
+          case HALF:
+
+            switch (typeInFile)
+            {
+              case UINT:
+
+                while (writePtr <= endPtr)
+                {
+                    unsigned int ui;
+
+                    for (size_t i = 0; i < sizeof (unsigned int); ++i)
+                        ((char *)&ui)[i] = readPtr[i];
+
+                    *(half *) writePtr = uintToHalf (ui);
+                    readPtr += sizeof (unsigned int);
+                    writePtr += xStride;
+                }
+                break;
+
+              case HALF:
+
+                while (writePtr <= endPtr)
+                {
+                    *(half *) writePtr = *(half *)readPtr;
+                    readPtr += sizeof (half);
+                    writePtr += xStride;
+                }
+                break;
+
+              case FLOAT:
+
+                while (writePtr <= endPtr)
+                {
+                    float f;
+
+                    for (size_t i = 0; i < sizeof (float); ++i)
+                        ((char *)&f)[i] = readPtr[i];
+
+                    *(half *) writePtr = floatToHalf (f);
+                    readPtr += sizeof (float);
+                    writePtr += xStride;
+                }
+                break;
+            }
+            break;
+
+          case FLOAT:
+
+            switch (typeInFile)
+            {
+              case UINT:
+
+                while (writePtr <= endPtr)
+                {
+                    unsigned int ui;
+
+                    for (size_t i = 0; i < sizeof (unsigned int); ++i)
+                        ((char *)&ui)[i] = readPtr[i];
+
+                    *(float *) writePtr = float (ui);
+                    readPtr += sizeof (unsigned int);
+                    writePtr += xStride;
+                }
+                break;
+
+              case HALF:
+
+                while (writePtr <= endPtr)
+                {
+                    half h = *(half *) readPtr;
+                    *(float *) writePtr = float (h);
+                    readPtr += sizeof (half);
+                    writePtr += xStride;
+                }
+                break;
+
+              case FLOAT:
+
+                while (writePtr <= endPtr)
+                {
+                    for (size_t i = 0; i < sizeof (float); ++i)
+                        writePtr[i] = readPtr[i];
+
+                    readPtr += sizeof (float);
+                    writePtr += xStride;
+                }
+                break;
+            }
+            break;
+
+          default:
+
+            throw Iex::ArgExc ("Unknown pixel data type.");
+        }
+    }
+}
+
+
+void
+skipChannel (const char *& readPtr,
+             PixelType typeInFile,
+            size_t xSize)
+{
+    switch (typeInFile)
+    {
+      case UINT:
+        
+        Xdr::skip <CharPtrIO> (readPtr, Xdr::size <unsigned int> () * xSize);
+        break;
+
+      case HALF:
+
+        Xdr::skip <CharPtrIO> (readPtr, Xdr::size <half> () * xSize);
+        break;
+
+      case FLOAT:
+
+        Xdr::skip <CharPtrIO> (readPtr, Xdr::size <float> () * xSize);
+        break;
+
+      default:
+
+        throw Iex::ArgExc ("Unknown pixel data type.");
+    }
+}
+
+
+void
+convertInPlace (char *& writePtr,
+                const char *& readPtr,
+               PixelType type,
+                size_t numPixels)
+{
+    switch (type)
+    {
+      case UINT:
+    
+        for (int j = 0; j < numPixels; ++j)
+        {
+            Xdr::write <CharPtrIO> (writePtr, *(const unsigned int *) readPtr);
+            readPtr += sizeof(unsigned int);
+        }
+        break;
+    
+      case HALF:
+    
+        for (int j = 0; j < numPixels; ++j)
+        {               
+            Xdr::write <CharPtrIO> (writePtr, *(const half *) readPtr);
+            readPtr += sizeof(half);
+        }
+        break;
+    
+      case FLOAT:
+    
+        for (int j = 0; j < numPixels; ++j)
+        {
+            Xdr::write <CharPtrIO> (writePtr, *(const float *) readPtr);
+            readPtr += sizeof(float);
+        }
+        break;
+    
+      default:
+    
+        throw Iex::ArgExc ("Unknown pixel data type.");
+    }
+}
+
+
+void
+copyFromFrameBuffer (char *& writePtr,
+                    const char *& readPtr,
+                     const char * endPtr,
+                    size_t xStride,
+                     Compressor::Format format,
+                    PixelType type)
+{
+    //
+    // Copy a horizontal row of pixels from a frame
+    // buffer to an output file's line or tile buffer.
+    //
+
+    if (format == Compressor::XDR)
+    {
+        //
+        // The the line or tile buffer is in XDR format.
+        //
+
+        switch (type)
+        {
+          case UINT:
+
+            while (readPtr <= endPtr)
+            {
+                Xdr::write <CharPtrIO> (writePtr,
+                                        *(const unsigned int *) readPtr);
+                readPtr += xStride;
+            }
+            break;
+
+          case HALF:
+
+            while (readPtr <= endPtr)
+            {
+                Xdr::write <CharPtrIO> (writePtr, *(const half *) readPtr);
+                readPtr += xStride;
+            }
+            break;
+
+          case FLOAT:
+
+            while (readPtr <= endPtr)
+            {
+                Xdr::write <CharPtrIO> (writePtr, *(const float *) readPtr);
+                readPtr += xStride;
+            }
+            break;
+
+          default:
+
+            throw Iex::ArgExc ("Unknown pixel data type.");
+        }
+    }
+    else
+    {
+        //
+        // The the line or tile buffer is in NATIVE format.
+        //
+
+        switch (type)
+        {
+          case UINT:
+
+            while (readPtr <= endPtr)
+            {
+                for (size_t i = 0; i < sizeof (unsigned int); ++i)
+                    *writePtr++ = readPtr[i];
+
+                readPtr += xStride;
+            }
+            break;
+
+          case HALF:
+
+            while (readPtr <= endPtr)
+            {
+                *(half *) writePtr = *(const half *) readPtr;
+                writePtr += sizeof (half);
+                readPtr += xStride;
+            }
+            break;
+
+          case FLOAT:
+
+            while (readPtr <= endPtr)
+            {
+                for (size_t i = 0; i < sizeof (float); ++i)
+                    *writePtr++ = readPtr[i];
+
+                readPtr += xStride;
+            }
+            break;
+            
+          default:
+
+            throw Iex::ArgExc ("Unknown pixel data type.");
+        }
+    }
+}
+
+
+void
+fillChannelWithZeroes (char *& writePtr,
+                      Compressor::Format format,
+                      PixelType type,
+                      size_t xSize)
+{
+    if (format == Compressor::XDR)
+    {
+        //
+        // Fill with data in XDR format.
+        //
+
+        switch (type)
+        {
+          case UINT:
+
+            for (int j = 0; j < xSize; ++j)
+                Xdr::write <CharPtrIO> (writePtr, (unsigned int) 0);
+
+            break;
+
+          case HALF:
+
+            for (int j = 0; j < xSize; ++j)
+                Xdr::write <CharPtrIO> (writePtr, (half) 0);
+
+            break;
+
+          case FLOAT:
+
+            for (int j = 0; j < xSize; ++j)
+                Xdr::write <CharPtrIO> (writePtr, (float) 0);
+
+            break;
+            
+          default:
+
+            throw Iex::ArgExc ("Unknown pixel data type.");
+        }
+    }
+    else
+    {
+        //
+        // Fill with data in NATIVE format.
+        //
+
+        switch (type)
+        {
+          case UINT:
+
+            for (int j = 0; j < xSize; ++j)
+            {
+                static const unsigned int ui = 0;
+
+                for (size_t i = 0; i < sizeof (ui); ++i)
+                    *writePtr++ = ((char *) &ui)[i];
+            }
+            break;
+
+          case HALF:
+
+            for (int j = 0; j < xSize; ++j)
+            {
+                *(half *) writePtr = half (0);
+                writePtr += sizeof (half);
+            }
+            break;
+
+          case FLOAT:
+
+            for (int j = 0; j < xSize; ++j)
+            {
+                static const float f = 0;
+
+                for (size_t i = 0; i < sizeof (f); ++i)
+                    *writePtr++ = ((char *) &f)[i];
+            }
+            break;
+            
+          default:
+
+            throw Iex::ArgExc ("Unknown pixel data type.");
+        }
+    }
+}
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfMisc.h b/3rdparty/openexr/IlmImf/ImfMisc.h
new file mode 100644 (file)
index 0000000..85718f4
--- /dev/null
@@ -0,0 +1,255 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_MISC_H
+#define INCLUDED_IMF_MISC_H
+
+//-----------------------------------------------------------------------------
+//
+//     Miscellaneous helper functions for OpenEXR image file I/O
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfPixelType.h>
+#include <vector>
+#include <ImfCompressor.h>
+
+namespace Imf {
+
+class Header;
+
+//
+// Return the size of a single value of the indicated type,
+// in the machine's native format.
+//
+
+int    pixelTypeSize (PixelType type);
+
+
+//
+// Return the number of samples a channel with subsampling rate
+// s has in the interval [a, b].  For example, a channel with
+// subsampling rate 2 (and samples at 0, 2, 4, 6, 8, etc.) has
+// 2 samples in the interval [1, 5] and three samples in the
+// interval [2, 6].
+//
+
+int    numSamples (int s, int a, int b);
+
+
+//
+// Build a table that lists, for each scanline in a file's
+// data window, how many bytes are required to store all
+// pixels in all channels in that scanline (assuming that
+// the pixel data are tightly packed).
+//
+
+size_t bytesPerLineTable (const Header &header,
+                          std::vector<size_t> &bytesPerLine);
+
+//
+// For scanline-based files, pixels are read or written in
+// in multi-scanline blocks.  Internally, class OutputFile
+// and class ScanLineInputFile store a block of scan lines
+// in a "line buffer".  Function offsetInLineBufferTable()
+// builds a table that lists, for each scan line in a file's
+// data window, the location of the pixel data for the scanline
+// relative to the beginning of the line buffer.
+//
+
+void   offsetInLineBufferTable (const std::vector<size_t> &bytesPerLine,
+                                int linesInLineBuffer,
+                                std::vector<size_t> &offsetInLineBuffer);
+
+//
+// For a scanline-based file, compute the range of scanlines
+// that occupy the same line buffer as a given scanline, y.
+// (minY is the minimum y coordinate of the file's data window.)
+//
+
+int    lineBufferMinY (int y, int minY, int linesInLineBuffer);
+int    lineBufferMaxY (int y, int minY, int linesInLineBuffer);
+
+
+//
+// Return a compressor's data format (Compressor::NATIVE or Compressor::XDR).
+// If compressor is 0, return Compressor::XDR.
+//
+
+Compressor::Format defaultFormat (Compressor *compressor);
+
+
+//
+// Return the number of scan lines a compressor wants to compress
+// or uncompress at once.  If compressor is 0, return 1.
+//
+
+int     numLinesInBuffer (Compressor *compressor);
+
+
+//
+// Copy a single channel of a horizontal row of pixels from an
+// input file's internal line buffer or tile buffer into a
+// frame buffer slice.  If necessary, perform on-the-fly data
+// type conversion.
+//
+//    readPtr          initially points to the beginning of the
+//                     data in the line or tile buffer. readPtr
+//                     is advanced as the pixel data are copied;
+//                     when copyIntoFrameBuffer() returns,
+//                     readPtr points just past the end of the
+//                     copied data.
+//
+//    writePtr, endPtr point to the lefmost and rightmost pixels
+//                     in the frame buffer slice
+//
+//    xStride          the xStride for the frame buffer slice
+//
+//    format           indicates if the line or tile buffer is
+//                     in NATIVE or XDR format.
+//
+//    typeInFrameBuffer the pixel data type of the frame buffer slice
+//
+//    typeInFile        the pixel data type in the input file's channel
+//
+
+void    copyIntoFrameBuffer (const char *&readPtr,
+                            char *writePtr,
+                             char *endPtr,
+                            size_t xStride,
+                            bool fill,
+                             double fillValue,
+                            Compressor::Format format,
+                             PixelType typeInFrameBuffer,
+                             PixelType typeInFile);
+
+//
+// Given a pointer into a an input file's line buffer or tile buffer,
+// skip over the data for xSize pixels of type typeInFile.
+// readPtr initially points to the beginning of the data to be skipped;
+// when skipChannel() returns, readPtr points just past the end of the
+// skipped data.
+//
+
+void    skipChannel (const char *&readPtr,
+                    PixelType typeInFile,
+                    size_t xSize);
+
+//
+// Convert an array of pixel data from the machine's native
+// representation to XDR format.
+//
+//    toPtr, fromPtr   initially point to the beginning of the input
+//                     and output pixel data arrays; when convertInPlace()
+//                     returns, toPtr and fromPtr point just past the
+//                     end of the input and output arrays.
+//                     If the native representation of the data has the
+//                     same size as the XDR data, then the conversion
+//                     can take in place, without an intermediate
+//                     temporary buffer (toPtr and fromPtr can point
+//                     to the same location).
+//
+//    type             the pixel data type
+//
+//    numPixels                number of pixels in the input and output arrays
+// 
+
+void    convertInPlace (char *&toPtr,
+                       const char *&fromPtr,
+                       PixelType type,
+                        size_t numPixels);
+
+//
+// Copy a single channel of a horizontal row of pixels from a
+// a frame buffer into an output file's internal line buffer or
+// tile buffer.
+//
+//    writePtr         initially points to the beginning of the
+//                     data in the line or tile buffer. writePtr
+//                     is advanced as the pixel data are copied;
+//                     when copyFromFrameBuffer() returns,
+//                     writePtr points just past the end of the
+//                     copied data.
+//
+//    readPtr, endPtr  point to the lefmost and rightmost pixels
+//                     in the frame buffer slice
+//
+//    xStride          the xStride for the frame buffer slice
+//
+//    format           indicates if the line or tile buffer is
+//                     in NATIVE or XDR format.
+//
+//    type              the pixel data type in the frame buffer
+//                     and in the output file's channel (function
+//                     copyFromFrameBuffer() doesn't do on-the-fly
+//                     data type conversion)
+//
+
+void    copyFromFrameBuffer (char *&writePtr,
+                            const char *&readPtr,
+                             const char *endPtr,
+                            size_t xStride,
+                             Compressor::Format format,
+                            PixelType type);
+
+//
+// Fill part of an output file's line buffer or tile buffer with
+// zeroes.  This routine is called when an output file contains
+// a channel for which the frame buffer contains no corresponding
+// slice.
+//
+//    writePtr         initially points to the beginning of the
+//                     data in the line or tile buffer.  When
+//                     fillChannelWithZeroes() returns, writePtr
+//                     points just past the end of the zeroed
+//                     data.
+//
+//    format           indicates if the line or tile buffer is
+//                     in NATIVE or XDR format.
+//
+//    type              the pixel data type in the line or frame buffer.
+//
+//    xSize             number of pixels to be filled with zeroes.
+//
+
+void    fillChannelWithZeroes (char *&writePtr,
+                              Compressor::Format format,
+                              PixelType type,
+                              size_t xSize);
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfMultiView.cpp b/3rdparty/openexr/IlmImf/ImfMultiView.cpp
new file mode 100644 (file)
index 0000000..8750c67
--- /dev/null
@@ -0,0 +1,396 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2007, Weta Digital Ltd
+// 
+// All rights reserved.
+// 
+// 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 Weta Digital 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     Functions related to accessing channels
+//     and views in multi-view OpenEXR files.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfMultiView.h>
+
+using namespace std;
+
+namespace Imf {
+namespace {
+
+StringVector
+parseString (string name, char c = '.')
+{
+    //
+    // Turn name into a list of strings, separating
+    // on char 'c' with whitespace stripped.
+    //
+
+    StringVector r;
+
+    while (name.size() > 0)
+    {  
+       size_t s = name.find (c);
+       string sec = name.substr (0, s);
+
+       //
+       // Strip spaces from beginning
+       //
+
+       while (sec.size() > 0 && sec[0] == ' ')
+           sec.erase (0, 1);
+
+       //
+       // Strip spaces from end
+       //
+
+       while (sec.size() > 0 && sec[sec.size() - 1] == ' ')
+           sec.erase (sec.size() - 1);
+
+       r.push_back (sec);
+
+       //
+       // Strip off name including ending 'c'
+       //
+
+       if (s == name.npos)
+           name = "";
+       else
+           name = name.substr (s + 1);
+    } 
+
+    return r;
+}
+
+
+int
+viewNum (const string &view, const StringVector &multiView)
+{
+    //
+    // returns which view number is called 'view'
+    // returns -1 if no member of multiView is 'view'
+    // (i.e. if viewNum() returns -1, 'view' isn't a view name
+    //       if viewNum() returns 0, 'view' is the default view
+    // otherwise, it's some other (valid) view
+    //
+
+    for (int i = 0; i < multiView.size(); ++i)
+    {
+       if (multiView[i] == view)
+           return i;
+    }
+
+    return -1;
+}
+
+} // namespace
+
+
+string
+defaultViewName (const StringVector &multiView)
+{
+    if (multiView.size() > 0)
+       return multiView[0];
+    else
+       return "";
+}
+
+
+string
+viewFromChannelName (const string &channel,
+                    const StringVector &multiView)
+{
+    //
+    // Given the name of a channel, return the name of the view to
+    // which it belongs.
+    //
+
+    //
+    // View name is penultimate section of name separated by periods ('.'s)
+    //
+
+    StringVector s = parseString (channel, '.');
+
+    if (s.size() == 0)
+       return ""; // nothing in, nothing out
+
+    if (s.size() == 1)
+    {
+       //
+       // Return default view name.
+       // The rules say ALL channels with no periods
+       // in the name belong to the default view.
+       //
+
+       return multiView[0];
+    }
+    else
+    { 
+       //
+       // size >= 2 - the last part is the channel name,
+       // the next-to-last part is the view name.
+       // Check if that part of the name really is
+       // a valid view and, if it is, return it.
+       //
+
+       const string &viewName = s[s.size() - 2];
+
+       if (viewNum (viewName, multiView) >= 0)
+           return viewName;
+       else
+           return ""; // not associated with any particular view
+    }
+}
+
+
+ChannelList
+channelsInView (const string & viewName,
+               const ChannelList & channelList,
+               const StringVector & multiView)
+{
+    //
+    // Return a list of all channels belonging to view viewName.
+    //
+
+    ChannelList q;
+
+    for (ChannelList::ConstIterator i = channelList.begin();
+        i != channelList.end();
+        ++i)
+    {
+       //
+       // Get view name for this channel
+       //
+
+       string view = viewFromChannelName (i.name(), multiView);
+
+
+       //
+       // Insert channel into q if it's a member of view viewName
+       //
+
+       if (view == viewName)
+          q.insert (i.name(), i.channel());
+    }
+
+    return q;
+}
+
+
+ChannelList
+channelsInNoView (const ChannelList &channelList,
+                 const StringVector &multiView)
+{
+    //
+    // Return a list of channels not associated with any named view.
+    //
+
+    return channelsInView ("", channelList, multiView); 
+}
+
+
+
+bool
+areCounterparts (const string &channel1, 
+                const string &channel2,
+                const StringVector &multiView)
+{
+    //
+    // Given two channels, return true if they are the same
+    // channel in two different views.
+    //
+
+    StringVector chan1 = parseString (channel1);
+    unsigned int size1 = chan1.size(); // number of SECTIONS in string
+                                       // name (not string length)
+
+    StringVector chan2 = parseString (channel2);
+    unsigned int size2 = chan2.size();
+
+    if (size1 == 0 || size2 == 0)
+       return false;
+     
+    //
+    // channel1 and channel2 can't be counterparts
+    // if either channel is in no view.
+    //
+
+    if (size1 > 1 && viewNum (chan1[size1 - 2], multiView) == -1)
+       return false;
+
+    if (size2 > 1 && viewNum (chan2[size2 - 2], multiView) == -1)
+       return false; 
+
+    if (viewFromChannelName (channel1, multiView) ==
+       viewFromChannelName (channel2, multiView))
+    {
+       //
+       // channel1 and channel2 are not counterparts
+       // if they are in the same view.
+       //
+
+       return false;
+    }
+
+    if (size1 == 1)
+    { 
+       //
+       // channel1 is a default channel - the channels will only be
+       // counterparts if channel2 is of the form <view>.<channel1>
+       //
+
+       return size2 == 2 && chan1[0] == chan2[1];
+    }
+
+    if (size2 == 1)
+    {
+       //
+       // channel2 is a default channel - the channels will only be
+       // counterparts if channel1 is of the form <view>.<channel2>
+       //
+
+       return size1 == 2 && chan2[0] == chan1[1];
+    }
+
+    //
+    // Neither channel is a default channel.  To be counterparts both
+    // channel names must have the same number of components, and
+    // all components except the penultimate one must be the same.
+    //
+
+    if (size1 != size2)
+       return false;
+
+    for(int i = 0; i < size1; ++i)
+    {
+       if (i != size1 - 2 && chan1[i] != chan2[i])
+           return false;
+    }
+
+    return true;
+}
+
+
+ChannelList
+channelInAllViews (const string &channelName,
+                  const ChannelList &channelList,
+                  const StringVector &multiView)
+{
+    //
+    // Given the name of a channel, return a
+    // list of the same channel in all views.
+    //
+
+    ChannelList q;
+
+    for (ChannelList::ConstIterator i=channelList.begin();
+        i != channelList.end();
+        ++i)
+    {
+       if (i.name() == channelName ||
+           areCounterparts (i.name(), channelName, multiView))
+       {
+           q.insert (i.name(), i.channel());
+       }
+    }
+
+    return q;
+}
+
+
+string
+channelInOtherView (const string &channelName,
+                   const ChannelList &channelList,
+                   const StringVector &multiView,
+                   const string &otherViewName)
+{
+    //
+    // Given the name of a channel in one view, return the
+    // corresponding channel name for view otherViewName.
+    //
+
+    for (ChannelList::ConstIterator i=channelList.begin();
+        i != channelList.end();
+        ++i)
+    {
+       if (viewFromChannelName (i.name(), multiView) == otherViewName &&
+           areCounterparts (i.name(), channelName, multiView))
+       {
+           return i.name(); 
+       }
+    }
+
+    return "";
+}
+
+
+string
+insertViewName (const string &channel,
+               const StringVector &multiView,
+               int i)
+{
+    //
+    // Insert multiView[i] into the channel name if appropriate.
+    //
+
+    StringVector s = parseString (channel, '.');
+
+    if (s.size() == 0)
+       return ""; // nothing in, nothing out
+
+    if (s.size() == 1 && i == 0)
+    {
+       //
+       // Channel in the default view, with no periods in its name.
+       // Do not insert view name.
+       //
+
+       return channel;
+    }
+
+    //
+    // View name becomes penultimate section of new channel name.
+    //
+
+    string newName;
+
+    for (int j = 0; j < s.size(); ++j)
+    {
+       if (j < s.size() - 1)
+           newName += s[j] + ".";
+       else
+           newName += multiView[i] + "." + s[j];
+    }
+
+    return newName;
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfMultiView.h b/3rdparty/openexr/IlmImf/ImfMultiView.h
new file mode 100644 (file)
index 0000000..6d03d5e
--- /dev/null
@@ -0,0 +1,164 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2007, Weta Digital Ltd
+// 
+// All rights reserved.
+// 
+// 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 Weta Digital 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_MULTIVIEW_H
+#define INCLUDED_IMF_MULTIVIEW_H
+
+#include <ImfChannelList.h>
+#include <ImfStringVectorAttribute.h>
+
+//-----------------------------------------------------------------------------
+//
+//     Functions related to accessing channels and views in multi-view
+//     OpenEXR files.
+//
+//     A multi-view image file contains two or more views of the same
+//     scene, as seen from different viewpoints, for example, a left-eye
+//     and a right-eye view for stereo displays.  Each view has its own
+//     set of image channels.  A naming convention identifies the channels
+//     that belong to a given view.
+//
+//     A "multiView" attribute in the file header lists the names of the
+//     views in an image (see ImfStandardAttributes.h), and channel names
+//     of the form
+//
+//             layer.view.channel
+//
+//     allow channels to be matched with views.
+//
+//     For compatibility with singe-view images, the first view listed in
+//     the multiView attribute is the "default view", and channels that
+//     have no periods in their names are considered part of the default
+//     view.
+//
+//     For example, if a file's multiView attribute lists the views
+//     "left" and "right", in that order, then "left" is the default
+//     view.  Channels
+//
+//             "R", "left.Z", "diffuse.left.R"
+//
+//     are part of the "left" view; channels
+//
+//             "right.R", "right.Z", "diffuse.right.R"
+//
+//     are part of the "right" view; and channels
+//
+//             "tmp.R", "right.diffuse.R", "diffuse.tmp.R"
+//
+//     belong to no view at all.
+//
+//-----------------------------------------------------------------------------
+
+namespace Imf {
+
+//
+// Return the name of the default view given a multi-view string vector,
+// that is, return the first element of the string vector.  If the string
+// vector is empty, return "".
+//
+
+std::string defaultViewName (const StringVector &multiView);
+
+
+//
+// Given the name of a channel, return the name of the view to
+// which it belongs.  Returns the empty string ("") if the channel
+// is not a member of any named view.
+//
+
+std::string viewFromChannelName (const std::string &channel,
+                                 const StringVector &multiView);
+
+
+//
+// Return whether channel1 and channel2 are the same channel but
+// viewed in different views.  (Return false if either channel
+// belongs to no view or if both channels belong to the same view.)
+//
+
+bool areCounterparts (const std::string &channel1,
+                      const std::string &channel2,
+                      const StringVector &multiView);
+
+//
+// Return a list of all channels belonging to view viewName.
+//
+
+ChannelList channelsInView (const std::string &viewName,
+                            const ChannelList &channelList,
+                            const StringVector &multiView);
+
+//
+// Return a list of channels not associated with any view.
+//
+
+ChannelList channelsInNoView (const ChannelList &channelList,
+                              const StringVector &multiView);
+
+//
+// Given the name of a channel, return a list of the same channel
+// in all views (for example, given X.left.Y return X.left.Y,
+// X.right.Y, X.centre.Y, etc.).
+//
+
+ChannelList channelInAllViews (const std::string &channame,
+                               const ChannelList &channelList,
+                               const StringVector &multiView);
+
+//
+// Given the name of a channel in one view, return the corresponding
+// channel name for view otherViewName.  Return "" if no corresponding
+// channel exists in view otherViewName, or if view otherViewName doesn't
+// exist.
+//
+
+std::string channelInOtherView (const std::string &channel,
+                                const ChannelList &channelList,
+                                const StringVector &multiView,
+                                const std::string &otherViewName);
+
+//
+// Given a channel name that does not include a view name, insert
+// multiView[i] into the channel name at the appropriate location.
+// If i is zero and the channel name contains no periods, then do
+// not insert the view name.
+//
+
+std::string insertViewName (const std::string &channel,
+                           const StringVector &multiView,
+                           int i);
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfName.h b/3rdparty/openexr/IlmImf/ImfName.h
new file mode 100644 (file)
index 0000000..ebb9f86
--- /dev/null
@@ -0,0 +1,146 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_NAME_H
+#define INCLUDED_IMF_NAME_H
+
+//-----------------------------------------------------------------------------
+//
+//     class ImfName -- a zero-terminated string
+//     with a fixed, small maximum length
+//
+//-----------------------------------------------------------------------------
+
+#include <string.h>
+
+namespace Imf {
+
+
+class Name
+{
+  public:
+
+    //-------------
+    // Constructors
+    //-------------
+
+    Name ();
+    Name (const char text[]);
+
+
+    //--------------------
+    // Assignment operator
+    //--------------------
+
+    Name &             operator = (const char text[]);
+
+
+    //---------------------
+    // Access to the string
+    //---------------------
+
+    const char *       text () const           {return _text;}
+    const char *       operator * () const     {return _text;}
+
+    //---------------
+    // Maximum length
+    //---------------
+
+    static const int   SIZE = 256;
+    static const int   MAX_LENGTH = SIZE - 1;
+
+  private:
+
+    char               _text[SIZE];
+};
+
+
+bool operator == (const Name &x, const Name &y);
+bool operator != (const Name &x, const Name &y);
+bool operator < (const Name &x, const Name &y);
+
+
+//-----------------
+// Inline functions
+//-----------------
+
+inline Name &
+Name::operator = (const char text[])
+{
+    strncpy (_text, text, MAX_LENGTH);
+    return *this;
+}
+
+
+inline
+Name::Name ()
+{
+    _text[0] = 0;
+}
+
+
+inline
+Name::Name (const char text[])
+{
+    *this = text;
+    _text [MAX_LENGTH] = 0;
+}
+
+
+inline bool
+operator == (const Name &x, const Name &y)
+{
+    return strcmp (*x, *y) == 0;
+}
+
+
+inline bool
+operator != (const Name &x, const Name &y)
+{
+    return !(x == y);
+}
+
+
+inline bool
+operator < (const Name &x, const Name &y)
+{
+    return strcmp (*x, *y) < 0;
+}
+
+
+} // namespace IMF
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfOpaqueAttribute.cpp b/3rdparty/openexr/IlmImf/ImfOpaqueAttribute.cpp
new file mode 100644 (file)
index 0000000..0abaa86
--- /dev/null
@@ -0,0 +1,125 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class OpaqueAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfOpaqueAttribute.h>
+#include "Iex.h"
+#include <string.h>
+
+namespace Imf {
+
+
+OpaqueAttribute::OpaqueAttribute (const char typeName[]):
+    _typeName (strlen (typeName) + 1),
+    _dataSize (0)
+{
+    strcpy (_typeName, typeName);
+}
+
+
+OpaqueAttribute::OpaqueAttribute (const OpaqueAttribute &other):
+    _typeName (strlen (other._typeName) + 1),
+    _dataSize (other._dataSize),
+    _data (other._dataSize)
+{
+    strcpy (_typeName, other._typeName);
+    _data.resizeErase (other._dataSize);
+    memcpy ((char *) _data, (const char *) other._data, other._dataSize);
+}
+
+
+OpaqueAttribute::~OpaqueAttribute ()
+{
+    // empty
+}
+
+
+const char *
+OpaqueAttribute::typeName () const
+{
+    return _typeName;
+}
+
+
+Attribute *    
+OpaqueAttribute::copy () const
+{
+    return new OpaqueAttribute (*this);
+}
+
+
+void   
+OpaqueAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _data, _dataSize);
+}
+
+
+void   
+OpaqueAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    _data.resizeErase (size);
+    _dataSize = size;
+    Xdr::read <StreamIO> (is, _data, size);
+}
+
+
+void   
+OpaqueAttribute::copyValueFrom (const Attribute &other)
+{
+    const OpaqueAttribute *oa = dynamic_cast <const OpaqueAttribute *> (&other);
+
+    if (oa == 0 || strcmp (_typeName, oa->_typeName))
+    {
+       THROW (Iex::TypeExc, "Cannot copy the value of an "
+                            "image file attribute of type "
+                            "\"" << other.typeName() << "\" "
+                            "to an attribute of type "
+                            "\"" << _typeName << "\".");
+    }
+
+    _data.resizeErase (oa->_dataSize);
+    _dataSize = oa->_dataSize;
+    memcpy ((char *) _data, (const char *) oa->_data, oa->_dataSize);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfOpaqueAttribute.h b/3rdparty/openexr/IlmImf/ImfOpaqueAttribute.h
new file mode 100644 (file)
index 0000000..864ae93
--- /dev/null
@@ -0,0 +1,114 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_OPAQUE_ATTRIBUTE_H
+#define INCLUDED_IMF_OPAQUE_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class OpaqueAttribute
+//
+//     When an image file is read, OpqaqueAttribute objects are used
+//     to hold the values of attributes whose types are not recognized
+//     by the reading program.  OpaqueAttribute objects can be read
+//     from an image file, copied, and written back to to another image
+//     file, but their values are inaccessible.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include <ImfArray.h>
+
+namespace Imf {
+
+
+class OpaqueAttribute: public Attribute
+{
+  public:
+
+    //----------------------------
+    // Constructors and destructor
+    //----------------------------
+
+    OpaqueAttribute (const char typeName[]);
+    OpaqueAttribute (const OpaqueAttribute &other);
+    virtual ~OpaqueAttribute ();
+
+
+    //-------------------------------
+    // Get this attribute's type name
+    //-------------------------------
+
+    virtual const char *       typeName () const;
+    
+
+    //------------------------------
+    // Make a copy of this attribute
+    //------------------------------
+
+    virtual Attribute *                copy () const;
+
+
+    //----------------
+    // I/O and copying
+    //----------------
+
+    virtual void               writeValueTo (OStream &os,
+                                             int version) const;
+
+    virtual void               readValueFrom (IStream &is,
+                                              int size,
+                                              int version);
+
+    virtual void               copyValueFrom (const Attribute &other);
+
+
+  private:
+
+    Array<char>                        _typeName;
+    long                       _dataSize;
+    Array<char>                        _data;
+};
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfOpaqueAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfOutputFile.cpp
new file mode 100644 (file)
index 0000000..31a339e
--- /dev/null
@@ -0,0 +1,1287 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class OutputFile
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfOutputFile.h>
+#include <ImfInputFile.h>
+#include <ImfChannelList.h>
+#include <ImfMisc.h>
+#include <ImfStdIO.h>
+#include <ImfCompressor.h>
+#include "ImathBox.h"
+#include "ImathFun.h"
+#include <ImfArray.h>
+#include <ImfXdr.h>
+#include <ImfPreviewImageAttribute.h>
+#include "IlmThreadPool.h"
+#include "IlmThreadSemaphore.h"
+#include "IlmThreadMutex.h"
+#include "Iex.h"
+#include <string>
+#include <vector>
+#include <fstream>
+#include <assert.h>
+
+
+namespace Imf {
+
+using Imath::Box2i;
+using Imath::divp;
+using Imath::modp;
+using std::string;
+using std::vector;
+using std::ofstream;
+using std::min;
+using std::max;
+using IlmThread::Mutex;
+using IlmThread::Lock;
+using IlmThread::Semaphore;
+using IlmThread::Task;
+using IlmThread::TaskGroup;
+using IlmThread::ThreadPool;
+
+namespace {
+
+
+struct OutSliceInfo
+{
+    PixelType          type;
+    const char *       base;
+    size_t             xStride;
+    size_t             yStride;
+    int                        xSampling;
+    int                        ySampling;
+    bool               zero;
+
+    OutSliceInfo (PixelType type = HALF,
+                 const char *base = 0,
+                 size_t xStride = 0,
+                 size_t yStride = 0,
+                 int xSampling = 1,
+                 int ySampling = 1,
+                 bool zero = false);
+};
+
+
+OutSliceInfo::OutSliceInfo (PixelType t,
+                           const char *b,
+                           size_t xs, size_t ys,
+                           int xsm, int ysm,
+                           bool z)
+:
+    type (t),
+    base (b),
+    xStride (xs),
+    yStride (ys),
+    xSampling (xsm),
+    ySampling (ysm),
+    zero (z)
+{
+    // empty
+}
+
+
+struct LineBuffer
+{
+    Array<char>                buffer;
+    const char *       dataPtr;
+    int                        dataSize;
+    char *             endOfLineBufferData;
+    int                        minY;
+    int                        maxY;
+    int                        scanLineMin;
+    int                        scanLineMax;
+    Compressor *       compressor;
+    bool               partiallyFull;        // has incomplete data
+    bool               hasException;
+    string             exception;
+
+    LineBuffer (Compressor *comp);
+    ~LineBuffer ();
+
+    void               wait () {_sem.wait();}
+    void               post () {_sem.post();}
+
+  private:
+
+    Semaphore          _sem;
+};
+
+
+LineBuffer::LineBuffer (Compressor *comp) :
+    dataPtr (0),
+    dataSize (0),
+    compressor (comp),
+    partiallyFull (false),
+    hasException (false),
+    exception (),
+    _sem (1)
+{
+    // empty
+}
+
+
+LineBuffer::~LineBuffer ()
+{
+    delete compressor;
+}
+
+} // namespace
+
+
+struct OutputFile::Data: public Mutex
+{
+    Header              header;                // the image header
+    int                         version;               // file format version
+    Int64               previewPosition;       // file position for preview
+    FrameBuffer                 frameBuffer;           // framebuffer to write into
+    int                         currentScanLine;       // next scanline to be written
+    int                         missingScanLines;      // number of lines to write
+    LineOrder           lineOrder;             // the file's lineorder
+    int                         minX;                  // data window's min x coord
+    int                         maxX;                  // data window's max x coord
+    int                         minY;                  // data window's min y coord
+    int                         maxY;                  // data window's max x coord
+    vector<Int64>       lineOffsets;           // stores offsets in file for
+                                               // each scanline
+    vector<size_t>      bytesPerLine;          // combined size of a line over
+                                                // all channels
+    vector<size_t>      offsetInLineBuffer;    // offset for each scanline in
+                                                // its linebuffer
+    Compressor::Format  format;                // compressor's data format
+    vector<OutSliceInfo> slices;               // info about channels in file
+    OStream *           os;                    // file stream to write to
+    bool                deleteStream;
+    Int64               lineOffsetsPosition;   // file position for line
+                                                // offset table
+    Int64               currentPosition;       // current file position
+
+    vector<LineBuffer*>  lineBuffers;           // each holds one line buffer
+    int                         linesInBuffer;         // number of scanlines each
+                                                // buffer holds
+    size_t              lineBufferSize;        // size of the line buffer
+
+     Data (bool deleteStream, int numThreads);
+    ~Data ();
+
+
+    inline LineBuffer *        getLineBuffer (int number); // hash function from line
+                                                   // buffer indices into our
+                                                   // vector of line buffers
+};
+
+
+OutputFile::Data::Data (bool deleteStream, int numThreads):
+    os (0),
+    deleteStream (deleteStream),
+    lineOffsetsPosition (0)
+{
+    //
+    // We need at least one lineBuffer, but if threading is used,
+    // to keep n threads busy we need 2*n lineBuffers.
+    //
+
+    lineBuffers.resize (max (1, 2 * numThreads));
+}
+
+
+OutputFile::Data::~Data ()
+{
+    if (deleteStream)
+       delete os;
+
+    for (size_t i = 0; i < lineBuffers.size(); i++)
+        delete lineBuffers[i];
+}
+
+
+LineBuffer*
+OutputFile::Data::getLineBuffer (int number)
+{
+    return lineBuffers[number % lineBuffers.size()];
+}
+
+
+namespace {
+
+
+Int64
+writeLineOffsets (OStream &os, const vector<Int64> &lineOffsets)
+{
+    Int64 pos = os.tellp();
+
+    if (pos == -1)
+       Iex::throwErrnoExc ("Cannot determine current file position (%T).");
+
+    for (unsigned int i = 0; i < lineOffsets.size(); i++)
+       Xdr::write <StreamIO> (os, lineOffsets[i]);
+
+    return pos;
+}
+
+
+void
+writePixelData (OutputFile::Data *ofd,
+                int lineBufferMinY,
+               const char pixelData[],
+               int pixelDataSize)
+{
+    //
+    // Store a block of pixel data in the output file, and try
+    // to keep track of the current writing position the file
+    // without calling tellp() (tellp() can be fairly expensive).
+    //
+
+    Int64 currentPosition = ofd->currentPosition;
+    ofd->currentPosition = 0;
+
+    if (currentPosition == 0)
+       currentPosition = ofd->os->tellp();
+
+    ofd->lineOffsets[(ofd->currentScanLine - ofd->minY) / ofd->linesInBuffer] =
+       currentPosition;
+
+    #ifdef DEBUG
+
+       assert (ofd->os->tellp() == currentPosition);
+
+    #endif
+
+    Xdr::write <StreamIO> (*ofd->os, lineBufferMinY);
+    Xdr::write <StreamIO> (*ofd->os, pixelDataSize);
+    ofd->os->write (pixelData, pixelDataSize);
+
+    ofd->currentPosition = currentPosition +
+                          Xdr::size<int>() +
+                          Xdr::size<int>() +
+                          pixelDataSize;
+}
+
+
+inline void
+writePixelData (OutputFile::Data *ofd, const LineBuffer *lineBuffer)
+{
+    writePixelData (ofd,
+                   lineBuffer->minY,
+                    lineBuffer->dataPtr,
+                   lineBuffer->dataSize);
+}
+
+
+void
+convertToXdr (OutputFile::Data *ofd,
+              Array<char> &lineBuffer,
+              int lineBufferMinY,
+              int lineBufferMaxY,
+              int inSize)
+{
+    //
+    // Convert the contents of a lineBuffer from the machine's native
+    // representation to Xdr format.  This function is called by
+    // CompressLineBuffer::execute(), below, if the compressor wanted
+    // its input pixel data in the machine's native format, but then
+    // failed to compress the data (most compressors will expand rather
+    // than compress random input data).
+    //
+    // Note that this routine assumes that the machine's native
+    // representation of the pixel data has the same size as the
+    // Xdr representation.  This makes it possible to convert the
+    // pixel data in place, without an intermediate temporary buffer.
+    //
+   
+    int startY, endY;          // The first and last scanlines in
+                               // the file that are in the lineBuffer.
+    int step;
+    
+    if (ofd->lineOrder == INCREASING_Y)
+    {
+       startY = max (lineBufferMinY, ofd->minY);
+       endY = min (lineBufferMaxY, ofd->maxY) + 1;
+        step = 1;
+    }
+    else
+    {
+       startY = min (lineBufferMaxY, ofd->maxY);
+       endY = max (lineBufferMinY, ofd->minY) - 1;
+        step = -1;
+    }
+
+    //
+    // Iterate over all scanlines in the lineBuffer to convert.
+    //
+
+    for (int y = startY; y != endY; y += step)
+    {
+       //
+        // Set these to point to the start of line y.
+        // We will write to writePtr from readPtr.
+       //
+       
+        char *writePtr = lineBuffer + ofd->offsetInLineBuffer[y - ofd->minY];
+        const char *readPtr = writePtr;
+        
+       //
+        // Iterate over all slices in the file.
+       //
+       
+        for (unsigned int i = 0; i < ofd->slices.size(); ++i)
+        {
+            //
+            // Test if scan line y of this channel is
+            // contains any data (the scan line contains
+            // data only if y % ySampling == 0).
+            //
+
+            const OutSliceInfo &slice = ofd->slices[i];
+
+            if (modp (y, slice.ySampling) != 0)
+                continue;
+
+            //
+            // Find the number of sampled pixels, dMaxX-dMinX+1, for
+           // slice i in scan line y (i.e. pixels within the data window
+            // for which x % xSampling == 0).
+            //
+
+            int dMinX = divp (ofd->minX, slice.xSampling);
+            int dMaxX = divp (ofd->maxX, slice.xSampling);
+            
+           //
+            // Convert the samples in place.
+           //
+            
+            convertInPlace (writePtr, readPtr, slice.type, dMaxX - dMinX + 1);
+        }
+    }
+}
+
+
+//
+// A LineBufferTask encapsulates the task of copying a set of scanlines
+// from the user's frame buffer into a LineBuffer object, compressing
+// the data if necessary.
+//
+
+class LineBufferTask: public Task
+{
+  public:
+
+    LineBufferTask (TaskGroup *group,
+                    OutputFile::Data *ofd,
+                   int number,
+                    int scanLineMin,
+                   int scanLineMax);
+
+    virtual ~LineBufferTask (); 
+
+    virtual void       execute ();
+
+  private:
+
+    OutputFile::Data * _ofd;
+    LineBuffer *       _lineBuffer;
+};
+
+
+LineBufferTask::LineBufferTask
+    (TaskGroup *group,
+     OutputFile::Data *ofd,
+     int number,
+     int scanLineMin,
+     int scanLineMax)
+:
+    Task (group),
+    _ofd (ofd),
+    _lineBuffer (_ofd->getLineBuffer(number))
+{
+    //
+    // Wait for the lineBuffer to become available
+    //
+
+    _lineBuffer->wait ();
+    
+    //
+    // Initialize the lineBuffer data if necessary
+    //
+
+    if (!_lineBuffer->partiallyFull)
+    {
+        _lineBuffer->endOfLineBufferData = _lineBuffer->buffer;
+
+        _lineBuffer->minY = _ofd->minY + number * _ofd->linesInBuffer;
+
+        _lineBuffer->maxY = min (_lineBuffer->minY + _ofd->linesInBuffer - 1,
+                                _ofd->maxY);
+
+        _lineBuffer->partiallyFull = true;
+    }
+    
+    _lineBuffer->scanLineMin = max (_lineBuffer->minY, scanLineMin);
+    _lineBuffer->scanLineMax = min (_lineBuffer->maxY, scanLineMax);
+}
+
+
+LineBufferTask::~LineBufferTask ()
+{
+    //
+    // Signal that the line buffer is now free
+    //
+
+    _lineBuffer->post ();
+}
+
+
+void
+LineBufferTask::execute ()
+{
+    try
+    {
+        //
+        // First copy the pixel data from the
+       // frame buffer into the line buffer
+        //
+        
+        int yStart, yStop, dy;
+
+        if (_ofd->lineOrder == INCREASING_Y)
+        {
+            yStart = _lineBuffer->scanLineMin;
+            yStop = _lineBuffer->scanLineMax + 1;
+            dy = 1;
+        }
+        else
+        {
+            yStart = _lineBuffer->scanLineMax;
+            yStop = _lineBuffer->scanLineMin - 1;
+            dy = -1;
+        }
+    
+       int y;
+
+        for (y = yStart; y != yStop; y += dy)
+        {
+            //
+            // Gather one scan line's worth of pixel data and store
+            // them in _ofd->lineBuffer.
+            //
+        
+            char *writePtr = _lineBuffer->buffer +
+                             _ofd->offsetInLineBuffer[y - _ofd->minY];
+            //
+            // Iterate over all image channels.
+            //
+        
+            for (unsigned int i = 0; i < _ofd->slices.size(); ++i)
+            {
+                //
+                // Test if scan line y of this channel contains any data
+               // (the scan line contains data only if y % ySampling == 0).
+                //
+        
+                const OutSliceInfo &slice = _ofd->slices[i];
+        
+                if (modp (y, slice.ySampling) != 0)
+                    continue;
+        
+                //
+                // Find the x coordinates of the leftmost and rightmost
+                // sampled pixels (i.e. pixels within the data window
+                // for which x % xSampling == 0).
+                //
+        
+                int dMinX = divp (_ofd->minX, slice.xSampling);
+                int dMaxX = divp (_ofd->maxX, slice.xSampling);
+        
+                //
+               // Fill the line buffer with with pixel data.
+                //
+        
+                if (slice.zero)
+                {
+                    //
+                    // The frame buffer contains no data for this channel.
+                    // Store zeroes in _lineBuffer->buffer.
+                    //
+                    
+                    fillChannelWithZeroes (writePtr, _ofd->format, slice.type,
+                                           dMaxX - dMinX + 1);
+                }
+                else
+                {
+                    //
+                    // If necessary, convert the pixel data to Xdr format.
+                   // Then store the pixel data in _ofd->lineBuffer.
+                    //
+        
+                    const char *linePtr = slice.base +
+                                          divp (y, slice.ySampling) *
+                                          slice.yStride;
+        
+                    const char *readPtr = linePtr + dMinX * slice.xStride;
+                    const char *endPtr  = linePtr + dMaxX * slice.xStride;
+    
+                    copyFromFrameBuffer (writePtr, readPtr, endPtr,
+                                         slice.xStride, _ofd->format,
+                                         slice.type);
+                }
+            }
+        
+            if (_lineBuffer->endOfLineBufferData < writePtr)
+                _lineBuffer->endOfLineBufferData = writePtr;
+        
+            #ifdef DEBUG
+        
+                assert (writePtr - (_lineBuffer->buffer +
+                        _ofd->offsetInLineBuffer[y - _ofd->minY]) ==
+                        (int) _ofd->bytesPerLine[y - _ofd->minY]);
+        
+            #endif
+        
+        }
+    
+        //
+        // If the next scanline isn't past the bounds of the lineBuffer
+        // then we are done, otherwise compress the linebuffer
+        //
+    
+        if (y >= _lineBuffer->minY && y <= _lineBuffer->maxY)
+            return;
+    
+        _lineBuffer->dataPtr = _lineBuffer->buffer;
+
+        _lineBuffer->dataSize = _lineBuffer->endOfLineBufferData -
+                                _lineBuffer->buffer;
+    
+       //
+        // Compress the data
+       //
+
+        Compressor *compressor = _lineBuffer->compressor;
+
+        if (compressor)
+        {
+            const char *compPtr;
+
+            int compSize = compressor->compress (_lineBuffer->dataPtr,
+                                                 _lineBuffer->dataSize,
+                                                 _lineBuffer->minY, compPtr);
+    
+            if (compSize < _lineBuffer->dataSize)
+            {
+                _lineBuffer->dataSize = compSize;
+                _lineBuffer->dataPtr = compPtr;
+            }
+            else if (_ofd->format == Compressor::NATIVE)
+            {
+                //
+                // The data did not shrink during compression, but
+                // we cannot write to the file using the machine's
+                // native format, so we need to convert the lineBuffer
+                // to Xdr.
+                //
+    
+                convertToXdr (_ofd, _lineBuffer->buffer, _lineBuffer->minY,
+                              _lineBuffer->maxY, _lineBuffer->dataSize);
+            }
+        }
+
+        _lineBuffer->partiallyFull = false;
+    }
+    catch (std::exception &e)
+    {
+        if (!_lineBuffer->hasException)
+        {
+            _lineBuffer->exception = e.what ();
+            _lineBuffer->hasException = true;
+        }
+    }
+    catch (...)
+    {
+        if (!_lineBuffer->hasException)
+        {
+            _lineBuffer->exception = "unrecognized exception";
+            _lineBuffer->hasException = true;
+        }
+    }
+}
+
+} // namespace
+
+
+OutputFile::OutputFile
+    (const char fileName[],
+     const Header &header,
+     int numThreads)
+:
+    _data (new Data (true, numThreads))
+{
+    try
+    {
+       header.sanityCheck();
+       _data->os = new StdOFStream (fileName);
+       initialize (header);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       delete _data;
+
+       REPLACE_EXC (e, "Cannot open image file "
+                       "\"" << fileName << "\". " << e);
+       throw;
+    }
+    catch (...)
+    {
+       delete _data;
+        throw;
+    }
+}
+
+
+OutputFile::OutputFile
+    (OStream &os,
+     const Header &header,
+     int numThreads)
+:
+    _data (new Data (false, numThreads))
+{
+    try
+    {
+       header.sanityCheck();
+       _data->os = &os;
+       initialize (header);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       delete _data;
+
+       REPLACE_EXC (e, "Cannot open image file "
+                       "\"" << os.fileName() << "\". " << e);
+       throw;
+    }
+    catch (...)
+    {
+       delete _data;
+        throw;
+    }
+}
+
+
+void
+OutputFile::initialize (const Header &header)
+{
+    _data->header = header;
+
+    const Box2i &dataWindow = header.dataWindow();
+
+    _data->currentScanLine = (header.lineOrder() == INCREASING_Y)?
+                                dataWindow.min.y: dataWindow.max.y;
+
+    _data->missingScanLines = dataWindow.max.y - dataWindow.min.y + 1;
+    _data->lineOrder = header.lineOrder();
+    _data->minX = dataWindow.min.x;
+    _data->maxX = dataWindow.max.x;
+    _data->minY = dataWindow.min.y;
+    _data->maxY = dataWindow.max.y;
+
+    size_t maxBytesPerLine = bytesPerLineTable (_data->header,
+                                               _data->bytesPerLine);
+
+    for (size_t i = 0; i < _data->lineBuffers.size(); ++i)
+    {
+        _data->lineBuffers[i] =
+           new LineBuffer (newCompressor (_data->header.compression(),
+                                          maxBytesPerLine,
+                                          _data->header));
+    }
+
+    LineBuffer *lineBuffer = _data->lineBuffers[0];
+    _data->format = defaultFormat (lineBuffer->compressor);
+    _data->linesInBuffer = numLinesInBuffer (lineBuffer->compressor);
+    _data->lineBufferSize = maxBytesPerLine * _data->linesInBuffer;
+
+    for (size_t i = 0; i < _data->lineBuffers.size(); i++)
+        _data->lineBuffers[i]->buffer.resizeErase(_data->lineBufferSize);
+
+    int lineOffsetSize = (dataWindow.max.y - dataWindow.min.y +
+                         _data->linesInBuffer) / _data->linesInBuffer;
+
+    _data->lineOffsets.resize (lineOffsetSize);
+
+    offsetInLineBufferTable (_data->bytesPerLine,
+                            _data->linesInBuffer,
+                            _data->offsetInLineBuffer);
+
+    _data->previewPosition =
+       _data->header.writeTo (*_data->os);
+
+    _data->lineOffsetsPosition =
+       writeLineOffsets (*_data->os, _data->lineOffsets);
+
+    _data->currentPosition = _data->os->tellp();
+}
+
+
+OutputFile::~OutputFile ()
+{
+    if (_data)
+    {
+        {
+            if (_data->lineOffsetsPosition > 0)
+            {
+                try
+                {
+                    _data->os->seekp (_data->lineOffsetsPosition);
+                    writeLineOffsets (*_data->os, _data->lineOffsets);
+                }
+                catch (...)
+                {
+                    //
+                    // We cannot safely throw any exceptions from here.
+                    // This destructor may have been called because the
+                    // stack is currently being unwound for another
+                    // exception.
+                    //
+                }
+            }
+        }
+
+       delete _data;
+    }
+}
+
+
+const char *
+OutputFile::fileName () const
+{
+    return _data->os->fileName();
+}
+
+
+const Header &
+OutputFile::header () const
+{
+    return _data->header;
+}
+
+
+void   
+OutputFile::setFrameBuffer (const FrameBuffer &frameBuffer)
+{
+    Lock lock (*_data);
+    
+    //
+    // Check if the new frame buffer descriptor
+    // is compatible with the image file header.
+    //
+
+    const ChannelList &channels = _data->header.channels();
+
+    for (ChannelList::ConstIterator i = channels.begin();
+        i != channels.end();
+        ++i)
+    {
+       FrameBuffer::ConstIterator j = frameBuffer.find (i.name());
+
+       if (j == frameBuffer.end())
+           continue;
+
+       if (i.channel().type != j.slice().type)
+       {
+           THROW (Iex::ArgExc, "Pixel type of \"" << i.name() << "\" channel "
+                               "of output file \"" << fileName() << "\" is "
+                               "not compatible with the frame buffer's "
+                               "pixel type.");
+       }
+
+       if (i.channel().xSampling != j.slice().xSampling ||
+           i.channel().ySampling != j.slice().ySampling)
+       {
+           THROW (Iex::ArgExc, "X and/or y subsampling factors "
+                               "of \"" << i.name() << "\" channel "
+                               "of output file \"" << fileName() << "\" are "
+                               "not compatible with the frame buffer's "
+                               "subsampling factors.");
+       }
+    }
+    
+    //
+    // Initialize slice table for writePixels().
+    //
+
+    vector<OutSliceInfo> slices;
+
+    for (ChannelList::ConstIterator i = channels.begin();
+        i != channels.end();
+        ++i)
+    {
+       FrameBuffer::ConstIterator j = frameBuffer.find (i.name());
+
+       if (j == frameBuffer.end())
+       {
+           //
+           // Channel i is not present in the frame buffer.
+           // In the file, channel i will contain only zeroes.
+           //
+
+           slices.push_back (OutSliceInfo (i.channel().type,
+                                           0, // base
+                                           0, // xStride,
+                                           0, // yStride,
+                                           i.channel().xSampling,
+                                           i.channel().ySampling,
+                                           true)); // zero
+       }
+       else
+       {
+           //
+           // Channel i is present in the frame buffer.
+           //
+
+           slices.push_back (OutSliceInfo (j.slice().type,
+                                           j.slice().base,
+                                           j.slice().xStride,
+                                           j.slice().yStride,
+                                           j.slice().xSampling,
+                                           j.slice().ySampling,
+                                           false)); // zero
+       }
+    }
+
+    //
+    // Store the new frame buffer.
+    //
+
+    _data->frameBuffer = frameBuffer;
+    _data->slices = slices;
+}
+
+
+const FrameBuffer &
+OutputFile::frameBuffer () const
+{
+    Lock lock (*_data);
+    return _data->frameBuffer;
+}
+
+
+void   
+OutputFile::writePixels (int numScanLines)
+{
+    try
+    {
+        Lock lock (*_data);
+
+       if (_data->slices.size() == 0)
+           throw Iex::ArgExc ("No frame buffer specified "
+                              "as pixel data source.");
+
+        //
+        // Maintain two iterators:
+        //     nextWriteBuffer: next linebuffer to be written to the file
+        //     nextCompressBuffer: next linebuffer to compress
+        //
+
+        int first = (_data->currentScanLine - _data->minY) /
+                         _data->linesInBuffer;
+
+        int nextWriteBuffer = first;
+        int nextCompressBuffer;
+        int stop;
+        int step;
+        int scanLineMin;
+        int scanLineMax;
+
+        {
+            //
+            // Create a task group for all line buffer tasks. When the
+            // taskgroup goes out of scope, the destructor waits until
+           // all tasks are complete.
+            //
+            
+            TaskGroup taskGroup;
+            
+            //
+            // Determine the range of lineBuffers that intersect the scan
+           // line range.  Then add the initial compression tasks to the
+           // thread pool.  We always add in at least one task but the
+           // individual task might not do anything if numScanLines == 0.
+            //
+    
+            if (_data->lineOrder == INCREASING_Y)
+            {
+                int last = (_data->currentScanLine + (numScanLines - 1) -
+                            _data->minY) / _data->linesInBuffer;
+    
+                scanLineMin = _data->currentScanLine;
+                scanLineMax = _data->currentScanLine + numScanLines - 1;
+    
+                int numTasks = max (min ((int)_data->lineBuffers.size(),
+                                         last - first + 1),
+                                   1);
+
+                for (int i = 0; i < numTasks; i++)
+               {
+                    ThreadPool::addGlobalTask
+                        (new LineBufferTask (&taskGroup, _data, first + i,
+                                             scanLineMin, scanLineMax));
+               }
+    
+                nextCompressBuffer = first + numTasks;
+                stop = last + 1;
+                step = 1;
+            }
+            else
+            {
+                int last = (_data->currentScanLine - (numScanLines - 1) -
+                            _data->minY) / _data->linesInBuffer;
+    
+                scanLineMax = _data->currentScanLine;
+                scanLineMin = _data->currentScanLine - numScanLines + 1;
+    
+                int numTasks = max (min ((int)_data->lineBuffers.size(),
+                                         first - last + 1),
+                                   1);
+
+                for (int i = 0; i < numTasks; i++)
+               {
+                    ThreadPool::addGlobalTask
+                        (new LineBufferTask (&taskGroup, _data, first - i,
+                                             scanLineMin, scanLineMax));
+               }
+    
+                nextCompressBuffer = first - numTasks;
+                stop = last - 1;
+                step = -1;
+            }
+            
+            while (true)
+            {
+                if (_data->missingScanLines <= 0)
+                {
+                    throw Iex::ArgExc ("Tried to write more scan lines "
+                                       "than specified by the data window.");
+                }
+    
+               //
+                // Wait until the next line buffer is ready to be written
+               //
+
+                LineBuffer *writeBuffer =
+                   _data->getLineBuffer (nextWriteBuffer);
+
+                writeBuffer->wait();
+                
+                int numLines = writeBuffer->scanLineMax - 
+                               writeBuffer->scanLineMin + 1;
+
+                _data->missingScanLines -= numLines;
+    
+               //
+                // If the line buffer is only partially full, then it is
+               // not complete and we cannot write it to disk yet.
+               //
+
+                if (writeBuffer->partiallyFull)
+                {
+                    _data->currentScanLine = _data->currentScanLine +
+                                             step * numLines;
+                    writeBuffer->post();
+    
+                    return;
+                }
+    
+               //
+                // Write the line buffer
+               //
+
+                writePixelData (_data, writeBuffer);
+                nextWriteBuffer += step;
+
+                _data->currentScanLine = _data->currentScanLine +
+                                         step * numLines;
+    
+                #ifdef DEBUG
+    
+                    assert (_data->currentScanLine ==
+                            ((_data->lineOrder == INCREASING_Y) ?
+                             writeBuffer->scanLineMax + 1:
+                             writeBuffer->scanLineMin - 1));
+    
+                #endif
+                
+               //
+                // Release the lock on the line buffer
+               //
+
+                writeBuffer->post();
+                
+               //
+                // If this was the last line buffer in the scanline range
+               //
+
+                if (nextWriteBuffer == stop)
+                    break;
+    
+               //
+                // If there are no more line buffers to compress,
+                // then only continue to write out remaining lineBuffers
+               //
+
+                if (nextCompressBuffer == stop)
+                    continue;
+    
+               //
+                // Add nextCompressBuffer as a compression task
+               //
+
+                ThreadPool::addGlobalTask
+                    (new LineBufferTask (&taskGroup, _data, nextCompressBuffer,
+                                         scanLineMin, scanLineMax));
+                
+               //
+                // Update the next line buffer we need to compress
+               //
+
+                nextCompressBuffer += step;
+            }
+        
+           //
+            // Finish all tasks
+           //
+        }
+        
+       //
+       // Exeption handling:
+       //
+       // LineBufferTask::execute() may have encountered exceptions, but
+       // those exceptions occurred in another thread, not in the thread
+       // that is executing this call to OutputFile::writePixels().
+       // LineBufferTask::execute() has caught all exceptions and stored
+       // the exceptions' what() strings in the line buffers.
+       // Now we check if any line buffer contains a stored exception; if
+       // this is the case then we re-throw the exception in this thread.
+       // (It is possible that multiple line buffers contain stored
+       // exceptions.  We re-throw the first exception we find and
+       // ignore all others.)
+       //
+
+       const string *exception = 0;
+
+        for (int i = 0; i < _data->lineBuffers.size(); ++i)
+       {
+            LineBuffer *lineBuffer = _data->lineBuffers[i];
+
+           if (lineBuffer->hasException && !exception)
+               exception = &lineBuffer->exception;
+
+           lineBuffer->hasException = false;
+       }
+
+       if (exception)
+           throw Iex::IoExc (*exception);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Failed to write pixel data to image "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+int    
+OutputFile::currentScanLine () const
+{
+    Lock lock (*_data);
+    return _data->currentScanLine;
+}
+
+
+void   
+OutputFile::copyPixels (InputFile &in)
+{
+    Lock lock (*_data);
+
+    //
+    // Check if this file's and and the InputFile's
+    // headers are compatible.
+    //
+
+    const Header &hdr = _data->header;
+    const Header &inHdr = in.header();
+
+    if (inHdr.find("tiles") != inHdr.end())
+       THROW (Iex::ArgExc, "Cannot copy pixels from image "
+                           "file \"" << in.fileName() << "\" to image "
+                           "file \"" << fileName() << "\". "
+                            "The input file is tiled, but the output file is "
+                            "not. Try using TiledOutputFile::copyPixels "
+                            "instead.");
+
+    if (!(hdr.dataWindow() == inHdr.dataWindow()))
+       THROW (Iex::ArgExc, "Cannot copy pixels from image "
+                           "file \"" << in.fileName() << "\" to image "
+                           "file \"" << fileName() << "\". "
+                            "The files have different data windows.");
+
+    if (!(hdr.lineOrder() == inHdr.lineOrder()))
+       THROW (Iex::ArgExc, "Quick pixel copy from image "
+                           "file \"" << in.fileName() << "\" to image "
+                           "file \"" << fileName() << "\" failed. "
+                           "The files have different line orders.");
+
+    if (!(hdr.compression() == inHdr.compression()))
+       THROW (Iex::ArgExc, "Quick pixel copy from image "
+                           "file \"" << in.fileName() << "\" to image "
+                           "file \"" << fileName() << "\" failed. "
+                           "The files use different compression methods.");
+
+    if (!(hdr.channels() == inHdr.channels()))
+       THROW (Iex::ArgExc, "Quick pixel copy from image "
+                           "file \"" << in.fileName() << "\" to image "
+                           "file \"" << fileName() << "\" failed.  "
+                           "The files have different channel lists.");
+
+    //
+    // Verify that no pixel data have been written to this file yet.
+    //
+
+    const Box2i &dataWindow = hdr.dataWindow();
+
+    if (_data->missingScanLines != dataWindow.max.y - dataWindow.min.y + 1)
+       THROW (Iex::LogicExc, "Quick pixel copy from image "
+                             "file \"" << in.fileName() << "\" to image "
+                             "file \"" << fileName() << "\" failed. "
+                             "\"" << fileName() << "\" already contains "
+                             "pixel data.");
+
+    //
+    // Copy the pixel data.
+    //
+
+    while (_data->missingScanLines > 0)
+    {
+       const char *pixelData;
+       int pixelDataSize;
+
+       in.rawPixelData (_data->currentScanLine, pixelData, pixelDataSize);
+
+       writePixelData (_data, lineBufferMinY (_data->currentScanLine,
+                                              _data->minY,
+                                              _data->linesInBuffer),
+                        pixelData, pixelDataSize);
+
+       _data->currentScanLine += (_data->lineOrder == INCREASING_Y)?
+                                  _data->linesInBuffer: -_data->linesInBuffer;
+
+       _data->missingScanLines -= _data->linesInBuffer;
+    }
+}
+
+
+void
+OutputFile::updatePreviewImage (const PreviewRgba newPixels[])
+{
+    Lock lock (*_data);
+
+    if (_data->previewPosition <= 0)
+       THROW (Iex::LogicExc, "Cannot update preview image pixels. "
+                             "File \"" << fileName() << "\" does not "
+                             "contain a preview image.");
+
+    //
+    // Store the new pixels in the header's preview image attribute.
+    //
+
+    PreviewImageAttribute &pia =
+       _data->header.typedAttribute <PreviewImageAttribute> ("preview");
+
+    PreviewImage &pi = pia.value();
+    PreviewRgba *pixels = pi.pixels();
+    int numPixels = pi.width() * pi.height();
+
+    for (int i = 0; i < numPixels; ++i)
+       pixels[i] = newPixels[i];
+
+    //
+    // Save the current file position, jump to the position in
+    // the file where the preview image starts, store the new
+    // preview image, and jump back to the saved file position.
+    //
+
+    Int64 savedPosition = _data->os->tellp();
+
+    try
+    {
+       _data->os->seekp (_data->previewPosition);
+       pia.writeValueTo (*_data->os, _data->version);
+       _data->os->seekp (savedPosition);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Cannot update preview image pixels for "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+void   
+OutputFile::breakScanLine  (int y, int offset, int length, char c)
+{
+    Lock lock (*_data);
+
+    Int64 position = 
+       _data->lineOffsets[(y - _data->minY) / _data->linesInBuffer];
+
+    if (!position)
+       THROW (Iex::ArgExc, "Cannot overwrite scan line " << y << ". "
+                           "The scan line has not yet been stored in "
+                           "file \"" << fileName() << "\".");
+
+    _data->currentPosition = 0;
+    _data->os->seekp (position + offset);
+
+    for (int i = 0; i < length; ++i)
+       _data->os->write (&c, 1);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfOutputFile.h b/3rdparty/openexr/IlmImf/ImfOutputFile.h
new file mode 100644 (file)
index 0000000..bdc317a
--- /dev/null
@@ -0,0 +1,241 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_OUTPUT_FILE_H
+#define INCLUDED_IMF_OUTPUT_FILE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class OutputFile
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfHeader.h>
+#include <ImfFrameBuffer.h>
+#include <ImfThreading.h>
+
+namespace Imf {
+
+class InputFile;
+struct PreviewRgba;
+
+
+class OutputFile
+{
+  public:
+
+    //-----------------------------------------------------------
+    // Constructor -- opens the file and writes the file header.
+    // The file header is also copied into the OutputFile object,
+    // and can later be accessed via the header() method.
+    // Destroying this OutputFile object automatically closes
+    // the file.
+    //
+    // numThreads determines the number of threads that will be
+    // used to write the file (see ImfThreading.h).
+    //-----------------------------------------------------------
+
+    OutputFile (const char fileName[], const Header &header,
+                int numThreads = globalThreadCount());
+
+
+    //------------------------------------------------------------
+    // Constructor -- attaches the new OutputFile object to a file
+    // that has already been opened, and writes the file header.
+    // The file header is also copied into the OutputFile object,
+    // and can later be accessed via the header() method.
+    // Destroying this OutputFile object does not automatically
+    // close the file.
+    //
+    // numThreads determines the number of threads that will be
+    // used to write the file (see ImfThreading.h).
+    //------------------------------------------------------------
+
+    OutputFile (OStream &os, const Header &header,
+                int numThreads = globalThreadCount());
+
+
+    //-------------------------------------------------
+    // Destructor
+    //
+    // Destroying the OutputFile object before writing
+    // all scan lines within the data window results in
+    // an incomplete file.
+    //-------------------------------------------------
+
+    virtual ~OutputFile ();
+
+
+    //------------------------
+    // Access to the file name
+    //------------------------
+
+    const char *       fileName () const;
+
+
+    //--------------------------
+    // Access to the file header
+    //--------------------------
+
+    const Header &     header () const;
+
+
+    //-------------------------------------------------------
+    // Set the current frame buffer -- copies the FrameBuffer
+    // object into the OutputFile object.
+    //
+    // The current frame buffer is the source of the pixel
+    // data written to the file.  The current frame buffer
+    // must be set at least once before writePixels() is
+    // called.  The current frame buffer can be changed
+    // after each call to writePixels.
+    //-------------------------------------------------------
+
+    void               setFrameBuffer (const FrameBuffer &frameBuffer);
+
+
+    //-----------------------------------
+    // Access to the current frame buffer
+    //-----------------------------------
+
+    const FrameBuffer &        frameBuffer () const;
+
+
+    //-------------------------------------------------------------------
+    // Write pixel data:
+    //
+    // writePixels(n) retrieves the next n scan lines worth of data from
+    // the current frame buffer, starting with the scan line indicated by
+    // currentScanLine(), and stores the data in the output file, and
+    // progressing in the direction indicated by header.lineOrder().
+    //
+    // To produce a complete and correct file, exactly m scan lines must
+    // be written, where m is equal to
+    // header().dataWindow().max.y - header().dataWindow().min.y + 1.
+    //-------------------------------------------------------------------
+
+    void               writePixels (int numScanLines = 1);
+
+
+    //------------------------------------------------------------------
+    // Access to the current scan line:
+    //
+    // currentScanLine() returns the y coordinate of the first scan line
+    // that will be read from the current frame buffer during the next
+    // call to writePixels().
+    //
+    // If header.lineOrder() == INCREASING_Y:
+    //
+    // The current scan line before the first call to writePixels()
+    //  is header().dataWindow().min.y.  After writing each scan line,
+    //  the current scan line is incremented by 1.
+    //
+    // If header.lineOrder() == DECREASING_Y:
+    //
+    // The current scan line before the first call to writePixels()
+    //  is header().dataWindow().max.y.  After writing each scan line,
+    //  the current scan line is decremented by 1.
+    //
+    //------------------------------------------------------------------
+
+    int                        currentScanLine () const;
+
+
+    //--------------------------------------------------------------
+    // Shortcut to copy all pixels from an InputFile into this file,
+    // without uncompressing and then recompressing the pixel data.
+    // This file's header must be compatible with the InputFile's
+    // header:  The two header's "dataWindow", "compression",
+    // "lineOrder" and "channels" attributes must be the same.
+    //--------------------------------------------------------------
+
+    void               copyPixels (InputFile &in);
+
+
+    //--------------------------------------------------------------
+    // Updating the preview image:
+    //
+    // updatePreviewImage() supplies a new set of pixels for the
+    // preview image attribute in the file's header.  If the header
+    // does not contain a preview image, updatePreviewImage() throws
+    // an Iex::LogicExc.
+    //
+    // Note: updatePreviewImage() is necessary because images are
+    // often stored in a file incrementally, a few scan lines at a
+    // time, while the image is being generated.  Since the preview
+    // image is an attribute in the file's header, it gets stored in
+    // the file as soon as the file is opened, but we may not know
+    // what the preview image should look like until we have written
+    // the last scan line of the main image.
+    //
+    //--------------------------------------------------------------
+
+    void               updatePreviewImage (const PreviewRgba newPixels[]);
+
+
+    //---------------------------------------------------------
+    // Break a scan line -- for testing and debugging only:
+    // 
+    // breakScanLine(y,p,n,c) introduces an error into the
+    // output file by writing n copies of character c, starting
+    // p bytes from the beginning of the pixel data block that
+    // contains scan line y.
+    //
+    // Warning: Calling this function usually results in a
+    // broken image file.  The file or parts of it may not
+    // be readable, or the file may contain bad data.
+    //
+    //---------------------------------------------------------
+
+    void               breakScanLine  (int y, int offset, int length, char c);
+
+
+    struct Data;
+
+  private:
+
+    OutputFile (const OutputFile &);                   // not implemented
+    OutputFile & operator = (const OutputFile &);      // not implemented
+
+    void               initialize (const Header &header);
+
+    Data *             _data;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfPixelType.h b/3rdparty/openexr/IlmImf/ImfPixelType.h
new file mode 100644 (file)
index 0000000..8f504ef
--- /dev/null
@@ -0,0 +1,61 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_PIXEL_TYPE_H
+#define INCLUDED_IMF_PIXEL_TYPE_H
+
+//-----------------------------------------------------------------------------
+//
+//     enum PixelType
+//
+//-----------------------------------------------------------------------------
+
+namespace Imf {
+
+
+enum PixelType
+{
+    UINT  = 0,         // unsigned int (32 bit)
+    HALF  = 1,         // half (16 bit floating point)
+    FLOAT = 2,         // float (32 bit floating point)
+
+    NUM_PIXELTYPES     // number of different pixel types
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfPizCompressor.cpp b/3rdparty/openexr/IlmImf/ImfPizCompressor.cpp
new file mode 100644 (file)
index 0000000..9ceb8c6
--- /dev/null
@@ -0,0 +1,666 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class PizCompressor
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfPizCompressor.h>
+#include <ImfHeader.h>
+#include <ImfChannelList.h>
+#include <ImfHuf.h>
+#include <ImfWav.h>
+#include <ImfMisc.h>
+#include <ImfCheckedArithmetic.h>
+#include <ImathFun.h>
+#include <ImathBox.h>
+#include <Iex.h>
+#include <ImfIO.h>
+#include <ImfXdr.h>
+#include <ImfAutoArray.h>
+#include <string.h>
+#include <assert.h>
+
+namespace Imf {
+
+using Imath::divp;
+using Imath::modp;
+using Imath::Box2i;
+using Imath::V2i;
+using Iex::InputExc;
+
+namespace {
+
+//
+// Functions to compress the range of values in the pixel data
+//
+
+const int USHORT_RANGE = (1 << 16);
+const int BITMAP_SIZE  = (USHORT_RANGE >> 3);
+
+void
+bitmapFromData (const unsigned short data[/*nData*/],
+               int nData,
+               unsigned char bitmap[BITMAP_SIZE],
+               unsigned short &minNonZero,
+               unsigned short &maxNonZero)
+{
+    for (int i = 0; i < BITMAP_SIZE; ++i)
+       bitmap[i] = 0;
+
+    for (int i = 0; i < nData; ++i)
+       bitmap[data[i] >> 3] |= (1 << (data[i] & 7));
+
+    bitmap[0] &= ~1;                   // zero is not explicitly stored in
+                                       // the bitmap; we assume that the
+                                       // data always contain zeroes
+    minNonZero = BITMAP_SIZE - 1;
+    maxNonZero = 0;
+
+    for (int i = 0; i < BITMAP_SIZE; ++i)
+    {
+       if (bitmap[i])
+       {
+           if (minNonZero > i)
+               minNonZero = i;
+           if (maxNonZero < i)
+               maxNonZero = i;
+       }
+    }
+}
+
+
+unsigned short
+forwardLutFromBitmap (const unsigned char bitmap[BITMAP_SIZE],
+                     unsigned short lut[USHORT_RANGE])
+{
+    int k = 0;
+
+    for (int i = 0; i < USHORT_RANGE; ++i)
+    {
+       if ((i == 0) || (bitmap[i >> 3] & (1 << (i & 7))))
+           lut[i] = k++;
+       else
+           lut[i] = 0;
+    }
+
+    return k - 1;      // maximum value stored in lut[],
+}                      // i.e. number of ones in bitmap minus 1
+
+
+unsigned short
+reverseLutFromBitmap (const unsigned char bitmap[BITMAP_SIZE],
+                     unsigned short lut[USHORT_RANGE])
+{
+    int k = 0;
+
+    for (int i = 0; i < USHORT_RANGE; ++i)
+    {
+       if ((i == 0) || (bitmap[i >> 3] & (1 << (i & 7))))
+           lut[k++] = i;
+    }
+
+    int n = k - 1;
+
+    while (k < USHORT_RANGE)
+       lut[k++] = 0;
+
+    return n;          // maximum k where lut[k] is non-zero,
+}                      // i.e. number of ones in bitmap minus 1
+
+
+void
+applyLut (const unsigned short lut[USHORT_RANGE],
+         unsigned short data[/*nData*/],
+         int nData)
+{
+    for (int i = 0; i < nData; ++i)
+       data[i] = lut[data[i]];
+}
+
+
+} // namespace
+
+
+struct PizCompressor::ChannelData
+{
+    unsigned short *   start;
+    unsigned short *   end;
+    int                        nx;
+    int                        ny;
+    int                        ys;
+    int                        size;
+};
+
+
+PizCompressor::PizCompressor
+    (const Header &hdr,
+     size_t maxScanLineSize,
+     size_t numScanLines)
+:
+    Compressor (hdr),
+    _maxScanLineSize (maxScanLineSize),
+    _format (XDR),
+    _numScanLines (numScanLines),
+    _tmpBuffer (0),
+    _outBuffer (0),
+    _numChans (0),
+    _channels (hdr.channels()),
+    _channelData (0)
+{
+    size_t tmpBufferSize =
+                uiMult (maxScanLineSize, numScanLines) / 2;
+
+    size_t outBufferSize =
+                uiAdd (uiMult (maxScanLineSize, numScanLines),
+                       size_t (65536 + 8192));
+
+    _tmpBuffer = new unsigned short
+            [checkArraySize (tmpBufferSize, sizeof (unsigned short))];
+
+    _outBuffer = new char [outBufferSize];
+
+    const ChannelList &channels = header().channels();
+    bool onlyHalfChannels = true;
+
+    for (ChannelList::ConstIterator c = channels.begin();
+        c != channels.end();
+        ++c)
+    {
+       _numChans++;
+
+       assert (pixelTypeSize (c.channel().type) % pixelTypeSize (HALF) == 0);
+
+       if (c.channel().type != HALF)
+           onlyHalfChannels = false;
+    }
+
+    _channelData = new ChannelData[_numChans];
+
+    const Box2i &dataWindow = hdr.dataWindow();
+
+    _minX = dataWindow.min.x;
+    _maxX = dataWindow.max.x;
+    _maxY = dataWindow.max.y;
+
+    //
+    // We can support uncompressed data in the machine's native format
+    // if all image channels are of type HALF, and if the Xdr and the
+    // native represenations of a half have the same size.
+    //
+
+    if (onlyHalfChannels && (sizeof (half) == pixelTypeSize (HALF)))
+       _format = NATIVE;
+}
+
+
+PizCompressor::~PizCompressor ()
+{
+    delete [] _tmpBuffer;
+    delete [] _outBuffer;
+    delete [] _channelData;
+}
+
+
+int
+PizCompressor::numScanLines () const
+{
+    return _numScanLines;
+}
+
+
+Compressor::Format
+PizCompressor::format () const
+{
+    return _format;
+}
+
+
+int
+PizCompressor::compress (const char *inPtr,
+                        int inSize,
+                        int minY,
+                        const char *&outPtr)
+{
+    return compress (inPtr,
+                    inSize,
+                    Box2i (V2i (_minX, minY),
+                           V2i (_maxX, minY + numScanLines() - 1)),
+                    outPtr);
+}
+
+
+int
+PizCompressor::compressTile (const char *inPtr,
+                            int inSize,
+                            Imath::Box2i range,
+                            const char *&outPtr)
+{
+    return compress (inPtr, inSize, range, outPtr);
+}
+
+
+int
+PizCompressor::uncompress (const char *inPtr,
+                          int inSize,
+                          int minY,
+                          const char *&outPtr)
+{
+    return uncompress (inPtr,
+                      inSize,
+                      Box2i (V2i (_minX, minY),
+                             V2i (_maxX, minY + numScanLines() - 1)),
+                      outPtr);
+}
+
+
+int
+PizCompressor::uncompressTile (const char *inPtr,
+                              int inSize,
+                              Imath::Box2i range,
+                              const char *&outPtr)
+{
+    return uncompress (inPtr, inSize, range, outPtr);
+}
+
+
+int
+PizCompressor::compress (const char *inPtr,
+                        int inSize,
+                        Imath::Box2i range,
+                        const char *&outPtr)
+{
+    //
+    // This is the compress function which is used by both the tiled and
+    // scanline compression routines.
+    //
+
+    //
+    // Special case Â­- empty input buffer
+    //
+
+    if (inSize == 0)
+    {
+       outPtr = _outBuffer;
+       return 0;
+    }
+
+    //
+    // Rearrange the pixel data so that the wavelet
+    // and Huffman encoders can process them easily.
+    //
+    // The wavelet and Huffman encoders both handle only
+    // 16-bit data, so 32-bit data must be split into smaller
+    // pieces.  We treat each 32-bit channel (UINT, FLOAT) as
+    // two interleaved 16-bit channels.
+    //
+
+    int minX = range.min.x;
+    int maxX = range.max.x;
+    int minY = range.min.y;
+    int maxY = range.max.y;
+    
+    if (maxY > _maxY)
+        maxY = _maxY;
+    
+    if (maxX > _maxX)
+        maxX = _maxX;
+
+    unsigned short *tmpBufferEnd = _tmpBuffer;
+    int i = 0;
+
+    for (ChannelList::ConstIterator c = _channels.begin();
+        c != _channels.end();
+        ++c, ++i)
+    {
+       ChannelData &cd = _channelData[i];
+
+       cd.start = tmpBufferEnd;
+       cd.end = cd.start;
+
+       cd.nx = numSamples (c.channel().xSampling, minX, maxX);
+       cd.ny = numSamples (c.channel().ySampling, minY, maxY);
+       cd.ys = c.channel().ySampling;
+
+       cd.size = pixelTypeSize (c.channel().type) / pixelTypeSize (HALF);
+
+       tmpBufferEnd += cd.nx * cd.ny * cd.size;
+    }
+
+    if (_format == XDR)
+    {
+       //
+       // Machine-independent (Xdr) data format
+       //
+
+       for (int y = minY; y <= maxY; ++y)
+       {
+           for (int i = 0; i < _numChans; ++i)
+           {
+               ChannelData &cd = _channelData[i];
+
+               if (modp (y, cd.ys) != 0)
+                   continue;
+
+               for (int x = cd.nx * cd.size; x > 0; --x)
+               {
+                   Xdr::read <CharPtrIO> (inPtr, *cd.end);
+                   ++cd.end;
+               }
+           }
+       }
+    }
+    else
+    {
+       //
+       // Native, machine-dependent data format
+       //
+
+       for (int y = minY; y <= maxY; ++y)
+       {
+           for (int i = 0; i < _numChans; ++i)
+           {
+               ChannelData &cd = _channelData[i];
+
+               if (modp (y, cd.ys) != 0)
+                   continue;
+
+               int n = cd.nx * cd.size;
+               memcpy (cd.end, inPtr, n * sizeof (unsigned short));
+               inPtr  += n * sizeof (unsigned short);
+               cd.end += n;
+           }
+       }
+    }
+
+    #if defined (DEBUG)
+
+       for (int i = 1; i < _numChans; ++i)
+           assert (_channelData[i-1].end == _channelData[i].start);
+
+       assert (_channelData[_numChans-1].end == tmpBufferEnd);
+
+    #endif
+
+    //
+    // Compress the range of the pixel data
+    //
+
+    AutoArray <unsigned char, BITMAP_SIZE> bitmap;
+    unsigned short minNonZero;
+    unsigned short maxNonZero;
+
+    bitmapFromData (_tmpBuffer,
+                   tmpBufferEnd - _tmpBuffer,
+                   bitmap,
+                   minNonZero, maxNonZero);
+
+    AutoArray <unsigned short, USHORT_RANGE> lut;
+    unsigned short maxValue = forwardLutFromBitmap (bitmap, lut);
+    applyLut (lut, _tmpBuffer, tmpBufferEnd - _tmpBuffer);
+
+    //
+    // Store range compression info in _outBuffer
+    //
+
+    char *buf = _outBuffer;
+
+    Xdr::write <CharPtrIO> (buf, minNonZero);
+    Xdr::write <CharPtrIO> (buf, maxNonZero);
+
+    if (minNonZero <= maxNonZero)
+    {
+       Xdr::write <CharPtrIO> (buf, (char *) &bitmap[0] + minNonZero,
+                               maxNonZero - minNonZero + 1);
+    }
+
+    //
+    // Apply wavelet encoding
+    //
+
+    for (int i = 0; i < _numChans; ++i)
+    {
+       ChannelData &cd = _channelData[i];
+
+       for (int j = 0; j < cd.size; ++j)
+       {
+           wav2Encode (cd.start + j,
+                       cd.nx, cd.size,
+                       cd.ny, cd.nx * cd.size,
+                       maxValue);
+       }
+    }
+
+    //
+    // Apply Huffman encoding; append the result to _outBuffer
+    //
+
+    char *lengthPtr = buf;
+    Xdr::write <CharPtrIO> (buf, int(0));
+
+    int length = hufCompress (_tmpBuffer, tmpBufferEnd - _tmpBuffer, buf);
+    Xdr::write <CharPtrIO> (lengthPtr, length);
+
+    outPtr = _outBuffer;
+    return buf - _outBuffer + length;
+}
+
+
+int
+PizCompressor::uncompress (const char *inPtr,
+                          int inSize,
+                          Imath::Box2i range,
+                          const char *&outPtr)
+{
+    //
+    // This is the cunompress function which is used by both the tiled and
+    // scanline decompression routines.
+    //
+    
+    //
+    // Special case - empty input buffer
+    //
+
+    if (inSize == 0)
+    {
+       outPtr = _outBuffer;
+       return 0;
+    }
+
+    //
+    // Determine the layout of the compressed pixel data
+    //
+
+    int minX = range.min.x;
+    int maxX = range.max.x;
+    int minY = range.min.y;
+    int maxY = range.max.y;
+    
+    if (maxY > _maxY)
+        maxY = _maxY;
+    
+    if (maxX > _maxX)
+        maxX = _maxX;
+
+    unsigned short *tmpBufferEnd = _tmpBuffer;
+    int i = 0;
+
+    for (ChannelList::ConstIterator c = _channels.begin();
+        c != _channels.end();
+        ++c, ++i)
+    {
+       ChannelData &cd = _channelData[i];
+
+       cd.start = tmpBufferEnd;
+       cd.end = cd.start;
+
+       cd.nx = numSamples (c.channel().xSampling, minX, maxX);
+       cd.ny = numSamples (c.channel().ySampling, minY, maxY);
+       cd.ys = c.channel().ySampling;
+
+       cd.size = pixelTypeSize (c.channel().type) / pixelTypeSize (HALF);
+
+       tmpBufferEnd += cd.nx * cd.ny * cd.size;
+    }
+
+    //
+    // Read range compression data
+    //
+
+    unsigned short minNonZero;
+    unsigned short maxNonZero;
+
+    AutoArray <unsigned char, BITMAP_SIZE> bitmap;
+    memset (bitmap, 0, sizeof (unsigned char) * BITMAP_SIZE);
+
+    Xdr::read <CharPtrIO> (inPtr, minNonZero);
+    Xdr::read <CharPtrIO> (inPtr, maxNonZero);
+
+    if (maxNonZero >= BITMAP_SIZE)
+    {
+       throw InputExc ("Error in header for PIZ-compressed data "
+                       "(invalid bitmap size).");
+    }
+
+    if (minNonZero <= maxNonZero)
+    {
+       Xdr::read <CharPtrIO> (inPtr, (char *) &bitmap[0] + minNonZero,
+                              maxNonZero - minNonZero + 1);
+    }
+
+    AutoArray <unsigned short, USHORT_RANGE> lut;
+    unsigned short maxValue = reverseLutFromBitmap (bitmap, lut);
+
+    //
+    // Huffman decoding
+    //
+
+    int length;
+    Xdr::read <CharPtrIO> (inPtr, length);
+
+    hufUncompress (inPtr, length, _tmpBuffer, tmpBufferEnd - _tmpBuffer);
+
+    //
+    // Wavelet decoding
+    //
+
+    for (int i = 0; i < _numChans; ++i)
+    {
+       ChannelData &cd = _channelData[i];
+
+       for (int j = 0; j < cd.size; ++j)
+       {
+           wav2Decode (cd.start + j,
+                       cd.nx, cd.size,
+                       cd.ny, cd.nx * cd.size,
+                       maxValue);
+       }
+    }
+
+    //
+    // Expand the pixel data to their original range
+    //
+
+    applyLut (lut, _tmpBuffer, tmpBufferEnd - _tmpBuffer);
+    
+    //
+    // Rearrange the pixel data into the format expected by the caller.
+    //
+
+    char *outEnd = _outBuffer;
+
+    if (_format == XDR)
+    {
+       //
+       // Machine-independent (Xdr) data format
+       //
+
+       for (int y = minY; y <= maxY; ++y)
+       {
+           for (int i = 0; i < _numChans; ++i)
+           {
+               ChannelData &cd = _channelData[i];
+
+               if (modp (y, cd.ys) != 0)
+                   continue;
+
+               for (int x = cd.nx * cd.size; x > 0; --x)
+               {
+                   Xdr::write <CharPtrIO> (outEnd, *cd.end);
+                   ++cd.end;
+               }
+           }
+       }
+    }
+    else
+    {
+       //
+       // Native, machine-dependent data format
+       //
+
+       for (int y = minY; y <= maxY; ++y)
+       {
+           for (int i = 0; i < _numChans; ++i)
+           {
+               ChannelData &cd = _channelData[i];
+
+               if (modp (y, cd.ys) != 0)
+                   continue;
+
+               int n = cd.nx * cd.size;
+               memcpy (outEnd, cd.end, n * sizeof (unsigned short));
+               outEnd += n * sizeof (unsigned short);
+               cd.end += n;
+           }
+       }
+    }
+
+    #if defined (DEBUG)
+
+       for (int i = 1; i < _numChans; ++i)
+           assert (_channelData[i-1].end == _channelData[i].start);
+
+       assert (_channelData[_numChans-1].end == tmpBufferEnd);
+
+    #endif
+
+    outPtr = _outBuffer;
+    return outEnd - _outBuffer;
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfPizCompressor.h b/3rdparty/openexr/IlmImf/ImfPizCompressor.h
new file mode 100644 (file)
index 0000000..0945a8c
--- /dev/null
@@ -0,0 +1,115 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_PIZ_COMPRESSOR_H
+#define INCLUDED_IMF_PIZ_COMPRESSOR_H
+
+//-----------------------------------------------------------------------------
+//
+//     class PizCompressor -- uses Wavelet and Huffman encoding.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfCompressor.h>
+
+namespace Imf {
+
+class ChannelList;
+
+
+class PizCompressor: public Compressor
+{
+  public:
+
+    PizCompressor (const Header &hdr,
+                   size_t maxScanLineSize,
+                   size_t numScanLines);
+
+    virtual ~PizCompressor ();
+
+    virtual int                numScanLines () const;
+
+    virtual Format     format () const;
+
+    virtual int                compress (const char *inPtr,
+                                 int inSize,
+                                 int minY,
+                                 const char *&outPtr);                  
+                  
+    virtual int                compressTile (const char *inPtr,
+                                     int inSize,
+                                     Imath::Box2i range,
+                                     const char *&outPtr);
+
+    virtual int                uncompress (const char *inPtr,
+                                   int inSize,
+                                   int minY,
+                                   const char *&outPtr);
+                    
+    virtual int                uncompressTile (const char *inPtr,
+                                       int inSize,
+                                       Imath::Box2i range,
+                                       const char *&outPtr);
+  private:
+
+    struct ChannelData;
+    
+    int                        compress (const char *inPtr,
+                                 int inSize,
+                                 Imath::Box2i range,
+                                 const char *&outPtr);
+    int                        uncompress (const char *inPtr,
+                                   int inSize,
+                                   Imath::Box2i range,
+                                   const char *&outPtr);
+
+    int                        _maxScanLineSize;
+    Format             _format;
+    int                        _numScanLines;
+    unsigned short *   _tmpBuffer;
+    char *             _outBuffer;
+    int                        _numChans;
+    const ChannelList &        _channels;
+    ChannelData *      _channelData;
+    int                        _minX;
+    int                        _maxX;
+    int                        _maxY;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfPreviewImage.cpp b/3rdparty/openexr/IlmImf/ImfPreviewImage.cpp
new file mode 100644 (file)
index 0000000..d47d931
--- /dev/null
@@ -0,0 +1,103 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class PreviewImage
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfPreviewImage.h>
+#include <ImfCheckedArithmetic.h>
+#include "Iex.h"
+
+namespace Imf {
+
+
+PreviewImage::PreviewImage (unsigned int width,
+                           unsigned int height,
+                           const PreviewRgba pixels[])
+{
+    _width = width;
+    _height = height;
+    _pixels = new PreviewRgba
+        [checkArraySize (uiMult (_width, _height), sizeof (PreviewRgba))];
+
+    if (pixels)
+    {
+       for (unsigned int i = 0; i < _width * _height; ++i)
+           _pixels[i] = pixels[i];
+    }
+    else
+    {
+       for (unsigned int i = 0; i < _width * _height; ++i)
+           _pixels[i] = PreviewRgba();
+    }
+}
+
+
+PreviewImage::PreviewImage (const PreviewImage &other):
+    _width (other._width),
+    _height (other._height),
+    _pixels (new PreviewRgba [other._width * other._height])
+{
+    for (unsigned int i = 0; i < _width * _height; ++i)
+       _pixels[i] = other._pixels[i];
+}
+
+
+PreviewImage::~PreviewImage ()
+{
+    delete [] _pixels;
+}
+
+
+PreviewImage &
+PreviewImage::operator = (const PreviewImage &other)
+{
+    delete [] _pixels;
+
+    _width = other._width;
+    _height = other._height;
+    _pixels = new PreviewRgba [other._width * other._height];
+
+    for (unsigned int i = 0; i < _width * _height; ++i)
+       _pixels[i] = other._pixels[i];
+
+    return *this;
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfPreviewImage.h b/3rdparty/openexr/IlmImf/ImfPreviewImage.h
new file mode 100644 (file)
index 0000000..d016620
--- /dev/null
@@ -0,0 +1,131 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_PREVIEW_IMAGE_H
+#define INCLUDED_IMF_PREVIEW_IMAGE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class PreviewImage -- a usually small, low-dynamic range image,
+//     that is intended to be stored in an image file's header.
+//
+//     struct PreviewRgba -- holds the value of a PreviewImage pixel.
+//
+//-----------------------------------------------------------------------------
+
+namespace Imf {
+
+
+struct PreviewRgba
+{
+    unsigned char      r;      // Red, green and blue components of
+    unsigned char      g;      // the pixel's color; intensity is
+    unsigned char      b;      // proportional to pow (x/255, 2.2),
+                               // where x is r, g, or b.
+
+    unsigned char      a;      // The pixel's alpha; 0 == transparent,
+                               // 255 == opaque.
+
+    PreviewRgba (unsigned char r = 0,
+                unsigned char g = 0,
+                unsigned char b = 0,
+                unsigned char a = 255)
+       : r(r), g(g), b(b), a(a) {}
+};
+
+
+class PreviewImage
+{
+  public:
+
+    //--------------------------------------------------------------------
+    // Constructor:
+    //
+    // PreviewImage(w,h,p) constructs a preview image with w by h pixels
+    // whose initial values are specified in pixel array p.  The x and y
+    // coordinates of the pixels in p go from 0 to w-1, and from 0 to h-1.
+    // The pixel with coordinates (x, y) is at address p + y*w + x.
+    // Pixel (0, 0) is in the upper left corner of the preview image.
+    // If p is zero, the pixels in the preview image are initialized with
+    // (r = 0, b = 0, g = 0, a = 255).
+    //
+    //--------------------------------------------------------------------
+   
+     PreviewImage (unsigned int width = 0,
+                  unsigned int height = 0,
+                  const PreviewRgba pixels[] = 0);
+
+    //-----------------------------------------------------
+    // Copy constructor, destructor and assignment operator
+    //-----------------------------------------------------
+
+     PreviewImage (const PreviewImage &other);
+    ~PreviewImage ();
+
+    PreviewImage &     operator = (const PreviewImage &other);
+
+
+    //-----------------------------------------------
+    // Access to width, height and to the pixel array
+    //-----------------------------------------------
+
+    unsigned int       width () const  {return _width;}
+    unsigned int       height () const {return _height;}
+
+    PreviewRgba *      pixels ()       {return _pixels;}
+    const PreviewRgba *        pixels () const {return _pixels;}
+
+
+    //----------------------------
+    // Access to individual pixels
+    //----------------------------
+
+    PreviewRgba &      pixel (unsigned int x, unsigned int y)
+                                       {return _pixels[y * _width + x];}
+
+    const PreviewRgba &        pixel (unsigned int x, unsigned int y) const
+                                       {return _pixels[y * _width + x];}
+
+  private:
+
+    unsigned int       _width;
+    unsigned int       _height;
+    PreviewRgba *      _pixels;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfPreviewImageAttribute.cpp b/3rdparty/openexr/IlmImf/ImfPreviewImageAttribute.cpp
new file mode 100644 (file)
index 0000000..476c756
--- /dev/null
@@ -0,0 +1,102 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class PreviewImageAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfPreviewImageAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+PreviewImageAttribute::staticTypeName ()
+{
+    return "preview";
+}
+
+
+template <>
+void
+PreviewImageAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.width());
+    Xdr::write <StreamIO> (os, _value.height());
+
+    int numPixels = _value.width() * _value.height();
+    const PreviewRgba *pixels = _value.pixels();
+
+    for (int i = 0; i < numPixels; ++i)
+    {
+       Xdr::write <StreamIO> (os, pixels[i].r);
+       Xdr::write <StreamIO> (os, pixels[i].g);
+       Xdr::write <StreamIO> (os, pixels[i].b);
+       Xdr::write <StreamIO> (os, pixels[i].a);
+    }
+}
+
+
+template <>
+void
+PreviewImageAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    int width, height;
+
+    Xdr::read <StreamIO> (is, width);
+    Xdr::read <StreamIO> (is, height);
+
+    PreviewImage p (width, height);
+
+    int numPixels = p.width() * p.height();
+    PreviewRgba *pixels = p.pixels();
+
+    for (int i = 0; i < numPixels; ++i)
+    {
+       Xdr::read <StreamIO> (is, pixels[i].r);
+       Xdr::read <StreamIO> (is, pixels[i].g);
+       Xdr::read <StreamIO> (is, pixels[i].b);
+       Xdr::read <StreamIO> (is, pixels[i].a);
+    }
+
+    _value = p;
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfPreviewImageAttribute.h b/3rdparty/openexr/IlmImf/ImfPreviewImageAttribute.h
new file mode 100644 (file)
index 0000000..f08b9b7
--- /dev/null
@@ -0,0 +1,71 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_PREVIEW_IMAGE_ATTRIBUTE_H
+#define INCLUDED_IMF_PREVIEW_IMAGE_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class PreviewImageAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include <ImfPreviewImage.h>
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<PreviewImage> PreviewImageAttribute;
+
+template <>
+const char *PreviewImageAttribute::staticTypeName ();
+
+template <>
+void PreviewImageAttribute::writeValueTo (OStream &, int) const;
+
+template <>
+void PreviewImageAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfPreviewImageAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfPxr24Compressor.cpp b/3rdparty/openexr/IlmImf/ImfPxr24Compressor.cpp
new file mode 100644 (file)
index 0000000..270facf
--- /dev/null
@@ -0,0 +1,550 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Pixar Animation Studios
+//
+// All rights reserved.
+//
+// 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 Pixar Animation Studios 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 COPYRIGHT
+// OWNER 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.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class Pxr24Compressor
+//
+//     This compressor is based on source code that was contributed to
+//     OpenEXR by Pixar Animation Studios.  The compression method was
+//     developed by Loren Carpenter.
+//
+//     The compressor preprocesses the pixel data to reduce entropy,
+//     and then calls zlib.
+//
+//     Compression of HALF and UINT channels is lossless, but compressing
+//     FLOAT channels is lossy: 32-bit floating-point numbers are converted
+//     to 24 bits by rounding the significand to 15 bits.
+//
+//     When the compressor is invoked, the caller has already arranged
+//     the pixel data so that the values for each channel appear in a
+//     contiguous block of memory.  The compressor converts the pixel
+//     values to unsigned integers: For UINT, this is a no-op.  HALF
+//     values are simply re-interpreted as 16-bit integers.  FLOAT
+//     values are converted to 24 bits, and the resulting bit patterns
+//     are interpreted as integers.  The compressor then replaces each
+//     value with the difference between the value and its left neighbor.
+//     This turns flat fields in the image into zeroes, and ramps into
+//     strings of similar values.  Next, each difference is split into
+//     2, 3 or 4 bytes, and the bytes are transposed so that all the
+//     most significant bytes end up in a contiguous block, followed
+//     by the second most significant bytes, and so on.  The resulting
+//     string of bytes is compressed with zlib.
+//
+//-----------------------------------------------------------------------------
+#define ZLIB_WINAPI 
+
+#include <ImfPxr24Compressor.h>
+#include <ImfHeader.h>
+#include <ImfChannelList.h>
+#include <ImfMisc.h>
+#include <ImfCheckedArithmetic.h>
+#include <ImathFun.h>
+#include <Iex.h>
+#include <half.h>
+#include <zlib.h>
+#include <assert.h>
+#include <algorithm>
+
+using namespace std;
+using namespace Imath;
+
+namespace Imf {
+namespace {
+
+//
+// Conversion from 32-bit to 24-bit floating-point numbers.
+// Conversion back to 32 bits is simply an 8-bit shift to the left.
+//
+
+inline unsigned int
+floatToFloat24 (float f)
+{
+    union
+    {
+       float           f;
+       unsigned int    i;
+    } u;
+
+    u.f = f;
+
+    //
+    // Disassemble the 32-bit floating point number, f,
+    // into sign, s, exponent, e, and significand, m.
+    //
+
+    unsigned int s = u.i & 0x80000000;
+    unsigned int e = u.i & 0x7f800000;
+    unsigned int m = u.i & 0x007fffff;
+    unsigned int i;
+
+    if (e == 0x7f800000)
+    {
+       if (m)
+       {
+           //
+           // F is a NAN; we preserve the sign bit and
+           // the 15 leftmost bits of the significand,
+           // with one exception: If the 15 leftmost
+           // bits are all zero, the NAN would turn
+           // into an infinity, so we have to set at
+           // least one bit in the significand.
+           //
+
+           m >>= 8;
+           i = (e >> 8) | m | (m == 0);
+       }
+       else
+       {
+           //
+           // F is an infinity.
+           //
+
+           i = e >> 8;
+       }
+    }
+    else
+    {
+       //
+       // F is finite, round the significand to 15 bits.
+       //
+
+       i = ((e | m) + (m & 0x00000080)) >> 8;
+
+       if (i >= 0x7f8000)
+       {
+           //
+           // F was close to FLT_MAX, and the significand was
+           // rounded up, resulting in an exponent overflow.
+           // Avoid the overflow by truncating the significand
+           // instead of rounding it.
+           //
+
+           i = (e | m) >> 8;
+       }
+    }
+
+    return (s >> 8) | i;
+}
+
+
+void
+notEnoughData ()
+{
+    throw Iex::InputExc ("Error decompressing data "
+                        "(input data are shorter than expected).");
+}
+
+
+void
+tooMuchData ()
+{
+    throw Iex::InputExc ("Error decompressing data "
+                        "(input data are longer than expected).");
+}
+
+} // namespace
+
+
+Pxr24Compressor::Pxr24Compressor (const Header &hdr,
+                                 size_t maxScanLineSize,
+                                 size_t numScanLines)
+:
+    Compressor (hdr),
+    _maxScanLineSize (maxScanLineSize),
+    _numScanLines (numScanLines),
+    _tmpBuffer (0),
+    _outBuffer (0),
+    _channels (hdr.channels())
+{
+    size_t maxInBytes =
+        uiMult (maxScanLineSize, numScanLines);
+
+    size_t maxOutBytes =
+        uiAdd (uiAdd (maxInBytes,
+                      size_t (ceil (maxInBytes * 0.01))),
+               size_t (100));
+
+    _tmpBuffer = new unsigned char [maxInBytes];
+    _outBuffer = new char [maxOutBytes];
+
+    const Box2i &dataWindow = hdr.dataWindow();
+
+    _minX = dataWindow.min.x;
+    _maxX = dataWindow.max.x;
+    _maxY = dataWindow.max.y;
+}
+
+
+Pxr24Compressor::~Pxr24Compressor ()
+{
+    delete [] _tmpBuffer;
+    delete [] _outBuffer;
+}
+
+
+int
+Pxr24Compressor::numScanLines () const
+{
+    return _numScanLines;
+}
+
+
+Compressor::Format
+Pxr24Compressor::format () const
+{
+    return NATIVE;
+}
+
+
+int
+Pxr24Compressor::compress (const char *inPtr,
+                          int inSize,
+                          int minY,
+                          const char *&outPtr)
+{
+    return compress (inPtr,
+                    inSize,
+                    Box2i (V2i (_minX, minY),
+                           V2i (_maxX, minY + _numScanLines - 1)),
+                    outPtr);
+}
+
+             
+int
+Pxr24Compressor::compressTile (const char *inPtr,
+                              int inSize,
+                              Box2i range,
+                              const char *&outPtr)
+{
+    return compress (inPtr, inSize, range, outPtr);
+}
+
+
+int
+Pxr24Compressor::uncompress (const char *inPtr,
+                            int inSize,
+                            int minY,
+                            const char *&outPtr)
+{
+    return uncompress (inPtr,
+                      inSize,
+                      Box2i (V2i (_minX, minY),
+                             V2i (_maxX, minY + _numScanLines - 1)),
+                      outPtr);
+}
+
+               
+int
+Pxr24Compressor::uncompressTile (const char *inPtr,
+                                int inSize,
+                                Box2i range,
+                                const char *&outPtr)
+{
+    return uncompress (inPtr, inSize, range, outPtr);
+}
+
+
+int
+Pxr24Compressor::compress (const char *inPtr,
+                          int inSize,
+                          Box2i range,
+                          const char *&outPtr)
+{
+    if (inSize == 0)
+    {
+       outPtr = _outBuffer;
+       return 0;
+    }
+
+    int minX = range.min.x;
+    int maxX = min (range.max.x, _maxX);
+    int minY = range.min.y;
+    int maxY = min (range.max.y, _maxY);
+
+    unsigned char *tmpBufferEnd = _tmpBuffer;
+
+    for (int y = minY; y <= maxY; ++y)
+    {
+       for (ChannelList::ConstIterator i = _channels.begin();
+            i != _channels.end();
+            ++i)
+       {
+           const Channel &c = i.channel();
+
+           if (modp (y, c.ySampling) != 0)
+               continue;
+
+           int n = numSamples (c.xSampling, minX, maxX);
+
+           unsigned char *ptr[4];
+           unsigned int previousPixel = 0;
+
+           switch (c.type)
+           {
+             case UINT:
+
+               ptr[0] = tmpBufferEnd;
+               ptr[1] = ptr[0] + n;
+               ptr[2] = ptr[1] + n;
+               ptr[3] = ptr[2] + n;
+               tmpBufferEnd = ptr[3] + n;
+
+               for (int j = 0; j < n; ++j)
+               {
+                   unsigned int pixel;
+                   char *pPtr = (char *) &pixel;
+
+                   for (int k = 0; k < sizeof (pixel); ++k)
+                       *pPtr++ = *inPtr++;
+
+                   unsigned int diff = pixel - previousPixel;
+                   previousPixel = pixel;
+
+                   *(ptr[0]++) = diff >> 24;
+                   *(ptr[1]++) = diff >> 16;
+                   *(ptr[2]++) = diff >> 8;
+                   *(ptr[3]++) = diff;
+               }
+
+               break;
+
+             case HALF:
+
+               ptr[0] = tmpBufferEnd;
+               ptr[1] = ptr[0] + n;
+               tmpBufferEnd = ptr[1] + n;
+
+               for (int j = 0; j < n; ++j)
+               {
+                   half pixel;
+
+                   pixel = *(const half *) inPtr;
+                   inPtr += sizeof (half);
+
+                   unsigned int diff = pixel.bits() - previousPixel;
+                   previousPixel = pixel.bits();
+
+                   *(ptr[0]++) = diff >> 8;
+                   *(ptr[1]++) = diff;
+               }
+
+               break;
+
+             case FLOAT:
+
+               ptr[0] = tmpBufferEnd;
+               ptr[1] = ptr[0] + n;
+               ptr[2] = ptr[1] + n;
+               tmpBufferEnd = ptr[2] + n;
+
+               for (int j = 0; j < n; ++j)
+               {
+                   float pixel;
+                   char *pPtr = (char *) &pixel;
+
+                   for (int k = 0; k < sizeof (pixel); ++k)
+                       *pPtr++ = *inPtr++;
+
+                   unsigned int pixel24 = floatToFloat24 (pixel);
+                   unsigned int diff = pixel24 - previousPixel;
+                   previousPixel = pixel24;
+
+                   *(ptr[0]++) = diff >> 16;
+                   *(ptr[1]++) = diff >> 8;
+                   *(ptr[2]++) = diff;
+               }
+
+               break;
+
+             default:
+
+               assert (false);
+           }
+       }
+    }
+
+    uLongf outSize = int (ceil ((tmpBufferEnd - _tmpBuffer) * 1.01)) + 100;
+
+    if (Z_OK != ::compress ((Bytef *) _outBuffer,
+                           &outSize,
+                           (const Bytef *) _tmpBuffer,
+                           tmpBufferEnd - _tmpBuffer))
+    {
+       throw Iex::BaseExc ("Data compression (zlib) failed.");
+    }
+
+    outPtr = _outBuffer;
+    return outSize;
+}
+
+int            
+Pxr24Compressor::uncompress (const char *inPtr,
+                            int inSize,
+                            Box2i range,
+                            const char *&outPtr)
+{
+    if (inSize == 0)
+    {
+       outPtr = _outBuffer;
+       return 0;
+    }
+
+    uLongf tmpSize = _maxScanLineSize * _numScanLines;
+
+    if (Z_OK != ::uncompress ((Bytef *)_tmpBuffer,
+                             &tmpSize,
+                             (const Bytef *) inPtr,
+                             inSize))
+    {
+       throw Iex::InputExc ("Data decompression (zlib) failed.");
+    }
+
+    int minX = range.min.x;
+    int maxX = min (range.max.x, _maxX);
+    int minY = range.min.y;
+    int maxY = min (range.max.y, _maxY);
+
+    const unsigned char *tmpBufferEnd = _tmpBuffer;
+    char *writePtr = _outBuffer;
+
+    for (int y = minY; y <= maxY; ++y)
+    {
+       for (ChannelList::ConstIterator i = _channels.begin();
+            i != _channels.end();
+            ++i)
+       {
+           const Channel &c = i.channel();
+
+           if (modp (y, c.ySampling) != 0)
+               continue;
+
+           int n = numSamples (c.xSampling, minX, maxX);
+
+           const unsigned char *ptr[4];
+           unsigned int pixel = 0;
+
+           switch (c.type)
+           {
+             case UINT:
+
+               ptr[0] = tmpBufferEnd;
+               ptr[1] = ptr[0] + n;
+               ptr[2] = ptr[1] + n;
+               ptr[3] = ptr[2] + n;
+               tmpBufferEnd = ptr[3] + n;
+
+               if (tmpBufferEnd - _tmpBuffer > tmpSize)
+                   notEnoughData();
+
+               for (int j = 0; j < n; ++j)
+               {
+                   unsigned int diff = (*(ptr[0]++) << 24) |
+                                       (*(ptr[1]++) << 16) |
+                                       (*(ptr[2]++) <<  8) |
+                                        *(ptr[3]++);
+
+                   pixel += diff;
+
+                   char *pPtr = (char *) &pixel;
+
+                   for (int k = 0; k < sizeof (pixel); ++k)
+                       *writePtr++ = *pPtr++;
+               }
+
+               break;
+
+             case HALF:
+
+               ptr[0] = tmpBufferEnd;
+               ptr[1] = ptr[0] + n;
+               tmpBufferEnd = ptr[1] + n;
+
+               if (tmpBufferEnd - _tmpBuffer > tmpSize)
+                   notEnoughData();
+
+               for (int j = 0; j < n; ++j)
+               {
+                   unsigned int diff = (*(ptr[0]++) << 8) |
+                                        *(ptr[1]++);
+
+                   pixel += diff;
+
+                   half * hPtr = (half *) writePtr;
+                   hPtr->setBits ((unsigned short) pixel);
+                   writePtr += sizeof (half);
+               }
+
+               break;
+
+             case FLOAT:
+
+               ptr[0] = tmpBufferEnd;
+               ptr[1] = ptr[0] + n;
+               ptr[2] = ptr[1] + n;
+               tmpBufferEnd = ptr[2] + n;
+
+               if (tmpBufferEnd - _tmpBuffer > tmpSize)
+                   notEnoughData();
+
+               for (int j = 0; j < n; ++j)
+               {
+                   unsigned int diff = (*(ptr[0]++) << 24) |
+                                       (*(ptr[1]++) << 16) |
+                                       (*(ptr[2]++) <<  8);
+                   pixel += diff;
+
+                   char *pPtr = (char *) &pixel;
+
+                   for (int k = 0; k < sizeof (pixel); ++k)
+                       *writePtr++ = *pPtr++;
+               }
+
+               break;
+
+             default:
+
+               assert (false);
+           }
+       }
+    }
+
+    if (tmpBufferEnd - _tmpBuffer < tmpSize)
+       tooMuchData();
+
+    outPtr = _outBuffer;
+    return writePtr - _outBuffer;
+}
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfPxr24Compressor.h b/3rdparty/openexr/IlmImf/ImfPxr24Compressor.h
new file mode 100644 (file)
index 0000000..71e6109
--- /dev/null
@@ -0,0 +1,108 @@
+#ifndef INCLUDED_IMF_PXR24_COMPRESSOR_H
+#define INCLUDED_IMF_PXR24_COMPRESSOR_H
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Pixar Animation Studios
+//
+// All rights reserved.
+//
+// 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 Pixar Animation Studios 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 COPYRIGHT
+// OWNER 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.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class Pxr24Compressor -- Loren Carpenter's 24-bit float compressor
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfCompressor.h>
+
+namespace Imf {
+
+class ChannelList;
+
+
+class Pxr24Compressor: public Compressor
+{
+  public:
+
+    Pxr24Compressor (const Header &hdr, 
+                     size_t maxScanLineSize,
+                     size_t numScanLines);
+
+    virtual ~Pxr24Compressor ();
+
+    virtual int                numScanLines () const;
+
+    virtual Format     format () const;
+
+    virtual int                compress (const char *inPtr,
+                                 int inSize,
+                                 int minY,
+                                 const char *&outPtr);                  
+                  
+    virtual int                compressTile (const char *inPtr,
+                                     int inSize,
+                                     Imath::Box2i range,
+                                     const char *&outPtr);
+
+    virtual int                uncompress (const char *inPtr,
+                                   int inSize,
+                                   int minY,
+                                   const char *&outPtr);
+                    
+    virtual int                uncompressTile (const char *inPtr,
+                                       int inSize,
+                                       Imath::Box2i range,
+                                       const char *&outPtr);
+  private:
+
+    int                        compress (const char *inPtr,
+                                 int inSize,
+                                 Imath::Box2i range,
+                                 const char *&outPtr);
+    int                        uncompress (const char *inPtr,
+                                   int inSize,
+                                   Imath::Box2i range,
+                                   const char *&outPtr);
+
+    int                        _maxScanLineSize;
+    int                        _numScanLines;
+    unsigned char *    _tmpBuffer;
+    char *             _outBuffer;
+    const ChannelList &        _channels;
+    int                        _minX;
+    int                        _maxX;
+    int                        _maxY;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfRational.cpp b/3rdparty/openexr/IlmImf/ImfRational.cpp
new file mode 100644 (file)
index 0000000..ae6bc0a
--- /dev/null
@@ -0,0 +1,125 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     Rational numbers
+//
+//     The double-to-Rational conversion code below
+//     was contributed to OpenEXR by Greg Ward.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfRational.h>
+#include <cmath>
+
+using namespace std;
+
+namespace Imf {
+namespace {
+
+double
+frac (double x, double e)
+{
+    return x - floor (x + e);
+}
+
+
+double
+square (double x)
+{
+    return x * x;
+}
+
+
+double
+denom (double x, double e)
+{
+    if (e > frac (x, e))
+    {
+        return 1;
+    }
+    else
+    {
+       double r = frac (1 / x, e);
+       
+        if (e > r)
+        {
+            return floor (1 / x + e);
+        }
+        else
+        {
+            return denom (frac (1 / r, e), e / square (x * r)) +
+                   floor (1 / x + e) * denom (frac (1 / x, e), e / square (x));
+        }
+    }
+}
+
+} // namespace
+
+
+Rational::Rational (double x)
+{
+    int sign;
+
+    if (x >= 0)
+    {
+       sign = 1;       // positive
+    }
+    else if (x < 0)
+    {
+       sign = -1;      // negative
+       x = -x;
+    }
+    else
+    {
+       n = 0;          // NaN
+       d = 0;
+       return;
+    }
+
+    if (x >= (1U << 31) - 0.5)
+    {
+       n = sign;       // infinity
+       d = 0;
+       return;
+    }
+
+    double e = (x < 1? 1: x) / (1U << 30);
+    d = (unsigned int) denom (x, e);
+    n = sign * (int) floor (x * d + 0.5);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfRational.h b/3rdparty/openexr/IlmImf/ImfRational.h
new file mode 100644 (file)
index 0000000..4bad7b8
--- /dev/null
@@ -0,0 +1,93 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_RATIONAL_H
+#define INCLUDED_IMF_RATIONAL_H
+
+//-----------------------------------------------------------------------------
+//
+//     Rational numbers
+//
+//     A rational number is represented as pair of integers, n and d.
+//     The value of of the rational number is
+// 
+//             n/d                     for d > 0
+//             positive infinity       for n > 0, d == 0
+//             negative infinity       for n < 0, d == 0
+//             not a number (NaN)      for n == 0, d == 0
+//
+//-----------------------------------------------------------------------------
+
+namespace Imf {
+
+class Rational
+{
+  public:
+
+    int                        n;              // numerator
+    unsigned int       d;              // denominator
+
+
+    //----------------------------------------
+    // Default constructor, sets value to zero
+    //----------------------------------------
+
+    Rational (): n (0), d (1) {}
+
+
+    //-------------------------------------
+    // Constructor, explicitly sets n and d
+    //-------------------------------------
+
+    Rational (int n, int d): n (n), d (d) {}
+
+
+    //----------------------------
+    // Constructor, approximates x
+    //----------------------------
+
+    explicit Rational (double x);
+
+
+    //---------------------------------
+    // Approximate conversion to double
+    //---------------------------------
+
+    operator double () const {return double (n) / double (d);}
+};
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfRationalAttribute.cpp b/3rdparty/openexr/IlmImf/ImfRationalAttribute.cpp
new file mode 100644 (file)
index 0000000..757ca27
--- /dev/null
@@ -0,0 +1,73 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class RationalAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfRationalAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+RationalAttribute::staticTypeName ()
+{
+    return "rational";
+}
+
+
+template <>
+void
+RationalAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.n);
+    Xdr::write <StreamIO> (os, _value.d);
+}
+
+
+template <>
+void
+RationalAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value.n);
+    Xdr::read <StreamIO> (is, _value.d);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfRationalAttribute.h b/3rdparty/openexr/IlmImf/ImfRationalAttribute.h
new file mode 100644 (file)
index 0000000..862bbf4
--- /dev/null
@@ -0,0 +1,70 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_RATIONAL_ATTRIBUTE_H
+#define INCLUDED_IMF_RATIONAL_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class RationalAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include <ImfRational.h>
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<Rational> RationalAttribute;
+
+template <>
+const char *RationalAttribute::staticTypeName ();
+
+template <>
+void RationalAttribute::writeValueTo (OStream &, int) const;
+
+template <>
+void RationalAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfRationalAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfRgba.h b/3rdparty/openexr/IlmImf/ImfRgba.h
new file mode 100644 (file)
index 0000000..e68cb4b
--- /dev/null
@@ -0,0 +1,104 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_RGBA_H
+#define INCLUDED_IMF_RGBA_H
+
+//-----------------------------------------------------------------------------
+//
+//     class Rgba
+//
+//-----------------------------------------------------------------------------
+
+#include "half.h"
+
+namespace Imf {
+
+
+//
+// RGBA pixel
+//
+
+struct Rgba
+{
+    half       r;
+    half       g;
+    half       b;
+    half       a;
+    
+    Rgba () {}
+    Rgba (half r, half g, half b, half a = 1.f): r (r), g (g), b (b), a (a) {}
+
+    Rgba & operator = (const Rgba &other)
+    {
+       r = other.r;
+       g = other.g;
+       b = other.b;
+       a = other.a;
+
+       return *this;
+    }
+};
+
+
+//
+// Channels in an RGBA file
+//
+
+enum RgbaChannels
+{
+    WRITE_R    = 0x01,         // Red
+    WRITE_G    = 0x02,         // Green
+    WRITE_B    = 0x04,         // Blue
+    WRITE_A    = 0x08,         // Alpha
+
+    WRITE_Y    = 0x10,         // Luminance, for black-and-white images,
+                               // or in combination with chroma
+
+    WRITE_C    = 0x20,         // Chroma (two subsampled channels, RY and BY,
+                               // supported only for scanline-based files)
+
+    WRITE_RGB  = 0x07,         // Red, green, blue
+    WRITE_RGBA = 0x0f,         // Red, green, blue, alpha
+
+    WRITE_YC   = 0x30,         // Luminance, chroma
+    WRITE_YA   = 0x18,         // Luminance, alpha
+    WRITE_YCA  = 0x38          // Luminance, chroma, alpha
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfRgbaFile.cpp b/3rdparty/openexr/IlmImf/ImfRgbaFile.cpp
new file mode 100644 (file)
index 0000000..540d128
--- /dev/null
@@ -0,0 +1,1404 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class RgbaOutputFile
+//     class RgbaInputFile
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfRgbaFile.h>
+#include <ImfOutputFile.h>
+#include <ImfInputFile.h>
+#include <ImfChannelList.h>
+#include <ImfRgbaYca.h>
+#include <ImfStandardAttributes.h>
+#include <ImathFun.h>
+#include <IlmThreadMutex.h>
+#include <Iex.h>
+#include <string.h>
+#include <algorithm>
+
+
+namespace Imf {
+
+using namespace std;
+using namespace Imath;
+using namespace RgbaYca;
+using namespace IlmThread;
+
+namespace {
+
+void
+insertChannels (Header &header, RgbaChannels rgbaChannels)
+{
+    ChannelList ch;
+
+    if (rgbaChannels & (WRITE_Y | WRITE_C))
+    {
+       if (rgbaChannels & WRITE_Y)
+       {
+           ch.insert ("Y", Channel (HALF, 1, 1));
+       }
+
+       if (rgbaChannels & WRITE_C)
+       {
+           ch.insert ("RY", Channel (HALF, 2, 2, true));
+           ch.insert ("BY", Channel (HALF, 2, 2, true));
+       }
+    }
+    else
+    {
+       if (rgbaChannels & WRITE_R)
+           ch.insert ("R", Channel (HALF, 1, 1));
+
+       if (rgbaChannels & WRITE_G)
+           ch.insert ("G", Channel (HALF, 1, 1));
+
+       if (rgbaChannels & WRITE_B)
+           ch.insert ("B", Channel (HALF, 1, 1));
+    }
+
+    if (rgbaChannels & WRITE_A)
+       ch.insert ("A", Channel (HALF, 1, 1));
+
+    header.channels() = ch;
+}
+
+
+RgbaChannels
+rgbaChannels (const ChannelList &ch, const string &channelNamePrefix = "")
+{
+    int i = 0;
+
+    if (ch.findChannel (channelNamePrefix + "R"))
+       i |= WRITE_R;
+
+    if (ch.findChannel (channelNamePrefix + "G"))
+       i |= WRITE_G;
+    
+    if (ch.findChannel (channelNamePrefix + "B"))
+       i |= WRITE_B;
+
+    if (ch.findChannel (channelNamePrefix + "A"))
+       i |= WRITE_A;
+
+    if (ch.findChannel (channelNamePrefix + "Y"))
+       i |= WRITE_Y;
+
+    if (ch.findChannel (channelNamePrefix + "RY") ||
+       ch.findChannel (channelNamePrefix + "BY"))
+       i |= WRITE_C;
+
+    return RgbaChannels (i);
+}
+
+
+string
+prefixFromLayerName (const string &layerName, const Header &header)
+{
+    if (layerName.empty())
+       return "";
+
+    if (hasMultiView (header) && multiView(header)[0] == layerName)
+       return "";
+
+    return layerName + ".";
+}
+
+
+V3f
+ywFromHeader (const Header &header)
+{
+    Chromaticities cr;
+
+    if (hasChromaticities (header))
+       cr = chromaticities (header);
+
+    return computeYw (cr);
+}
+
+
+ptrdiff_t
+cachePadding (ptrdiff_t size)
+{
+    //
+    // Some of the buffers that are allocated by classes ToYca and
+    // FromYca, below, may need to be padded to avoid cache thrashing.
+    // If the difference between the buffer size and the nearest power
+    // of two is less than CACHE_LINE_SIZE, then we add an appropriate
+    // amount of padding.
+    //
+    // CACHE_LINE_SIZE must be a power of two, and it must be at
+    // least as big as the true size of a cache line on the machine
+    // we are running on.  (It is ok if CACHE_LINE_SIZE is larger
+    // than a real cache line.)
+    //
+
+    static int LOG2_CACHE_LINE_SIZE = 8;
+    static const ptrdiff_t CACHE_LINE_SIZE = (1 << LOG2_CACHE_LINE_SIZE);
+
+    int i = LOG2_CACHE_LINE_SIZE + 2;
+
+    while ((size >> i) > 1)
+       ++i;
+
+    if (size > (1 << (i + 1)) - 64)
+       return 64 + ((1 << (i + 1)) - size);
+
+    if (size < (1 << i) + 64)
+       return 64 + ((1 << i) - size);
+
+    return 0;
+}
+
+} // namespace
+
+
+class RgbaOutputFile::ToYca: public Mutex
+{
+  public:
+
+     ToYca (OutputFile &outputFile, RgbaChannels rgbaChannels);
+    ~ToYca ();
+
+    void               setYCRounding (unsigned int roundY,
+                                      unsigned int roundC);
+
+    void               setFrameBuffer (const Rgba *base,
+                                       size_t xStride,
+                                       size_t yStride);
+
+    void               writePixels (int numScanLines);
+    int                        currentScanLine () const;
+
+  private:
+
+    void               padTmpBuf ();
+    void               rotateBuffers ();
+    void               duplicateLastBuffer ();
+    void               duplicateSecondToLastBuffer ();
+    void               decimateChromaVertAndWriteScanLine ();
+
+    OutputFile &       _outputFile;
+    bool               _writeY;
+    bool               _writeC;
+    bool               _writeA;
+    int                        _xMin;
+    int                        _width;
+    int                        _height;
+    int                        _linesConverted;
+    LineOrder          _lineOrder;
+    int                        _currentScanLine;
+    V3f                        _yw;
+    Rgba *             _bufBase;
+    Rgba *             _buf[N];
+    Rgba *             _tmpBuf;
+    const Rgba *       _fbBase;
+    size_t             _fbXStride;
+    size_t             _fbYStride;
+    int                        _roundY;
+    int                        _roundC;
+};
+
+
+RgbaOutputFile::ToYca::ToYca (OutputFile &outputFile,
+                             RgbaChannels rgbaChannels)
+:
+    _outputFile (outputFile)
+{
+    _writeY = (rgbaChannels & WRITE_Y)? true: false;
+    _writeC = (rgbaChannels & WRITE_C)? true: false;
+    _writeA = (rgbaChannels & WRITE_A)? true: false;
+
+    const Box2i dw = _outputFile.header().dataWindow();
+
+    _xMin = dw.min.x;
+    _width  = dw.max.x - dw.min.x + 1;
+    _height = dw.max.y - dw.min.y + 1;
+
+    _linesConverted = 0;
+    _lineOrder = _outputFile.header().lineOrder();
+    
+    if (_lineOrder == INCREASING_Y)
+       _currentScanLine = dw.min.y;
+    else
+       _currentScanLine = dw.max.y;
+
+    _yw = ywFromHeader (_outputFile.header());
+
+    ptrdiff_t pad = cachePadding (_width * sizeof (Rgba)) / sizeof (Rgba);
+
+    _bufBase = new Rgba[(_width + pad) * N];
+
+    for (int i = 0; i < N; ++i)
+       _buf[i] = _bufBase + (i * (_width + pad));
+
+    _tmpBuf = new Rgba[_width + N - 1];
+
+    _fbBase = 0;
+    _fbXStride = 0;
+    _fbYStride = 0;
+
+    _roundY = 7;
+    _roundC = 5;
+}
+
+
+RgbaOutputFile::ToYca::~ToYca ()
+{
+    delete [] _bufBase;
+    delete [] _tmpBuf;
+}
+
+
+void
+RgbaOutputFile::ToYca::setYCRounding (unsigned int roundY,
+                                     unsigned int roundC)
+{
+    _roundY = roundY;
+    _roundC = roundC;
+}
+
+
+void
+RgbaOutputFile::ToYca::setFrameBuffer (const Rgba *base,
+                                      size_t xStride,
+                                      size_t yStride)
+{
+    if (_fbBase == 0)
+    {
+       FrameBuffer fb;
+
+       if (_writeY)
+       {
+           fb.insert ("Y",
+                      Slice (HALF,                             // type
+                             (char *) &_tmpBuf[-_xMin].g,      // base
+                             sizeof (Rgba),                    // xStride
+                             0,                                // yStride
+                             1,                                // xSampling
+                             1));                              // ySampling
+       }
+
+       if (_writeC)
+       {
+           fb.insert ("RY",
+                      Slice (HALF,                             // type
+                             (char *) &_tmpBuf[-_xMin].r,      // base
+                             sizeof (Rgba) * 2,                // xStride
+                             0,                                // yStride
+                             2,                                // xSampling
+                             2));                              // ySampling
+
+           fb.insert ("BY",
+                      Slice (HALF,                             // type
+                             (char *) &_tmpBuf[-_xMin].b,      // base
+                             sizeof (Rgba) * 2,                // xStride
+                             0,                                // yStride
+                             2,                                // xSampling
+                             2));                              // ySampling
+       }
+
+       if (_writeA)
+       {
+           fb.insert ("A",
+                      Slice (HALF,                             // type
+                             (char *) &_tmpBuf[-_xMin].a,      // base
+                             sizeof (Rgba),                    // xStride
+                             0,                                // yStride
+                             1,                                // xSampling
+                             1));                              // ySampling
+       }
+
+       _outputFile.setFrameBuffer (fb);
+    }
+
+    _fbBase = base;
+    _fbXStride = xStride;
+    _fbYStride = yStride;
+}
+
+
+void
+RgbaOutputFile::ToYca::writePixels (int numScanLines)
+{
+    if (_fbBase == 0)
+    {
+       THROW (Iex::ArgExc, "No frame buffer was specified as the "
+                           "pixel data source for image file "
+                           "\"" << _outputFile.fileName() << "\".");
+    }
+
+    if (_writeY && !_writeC)
+    {
+       //
+       // We are writing only luminance; filtering
+       // and subsampling are not necessary.
+       //
+
+       for (int i = 0; i < numScanLines; ++i)
+       {
+           //
+           // Copy the next scan line from the caller's
+           // frame buffer into _tmpBuf.
+           //
+
+           for (int j = 0; j < _width; ++j)
+           {
+               _tmpBuf[j] = _fbBase[_fbYStride * _currentScanLine +
+                                    _fbXStride * (j + _xMin)];
+           }
+
+           //
+           // Convert the scan line from RGB to luminance/chroma,
+           // and store the result in the output file.
+           //
+
+           RGBAtoYCA (_yw, _width, _writeA, _tmpBuf, _tmpBuf);
+           _outputFile.writePixels (1);
+
+           ++_linesConverted;
+
+           if (_lineOrder == INCREASING_Y)
+               ++_currentScanLine;
+           else
+               --_currentScanLine;
+       }
+    }
+    else
+    {
+       //
+       // We are writing chroma; the pixels must be filtered and subsampled.
+       //
+
+       for (int i = 0; i < numScanLines; ++i)
+       {
+           //
+           // Copy the next scan line from the caller's
+           // frame buffer into _tmpBuf.
+           //
+
+           for (int j = 0; j < _width; ++j)
+           {
+               _tmpBuf[j + N2] = _fbBase[_fbYStride * _currentScanLine +
+                                         _fbXStride * (j + _xMin)];
+           }
+
+           //
+           // Convert the scan line from RGB to luminance/chroma.
+           //
+
+           RGBAtoYCA (_yw, _width, _writeA, _tmpBuf + N2, _tmpBuf + N2);
+
+           //
+           // Append N2 copies of the first and last pixel to the
+           // beginning and end of the scan line.
+           //
+
+           padTmpBuf ();
+
+           //
+           // Filter and subsample the scan line's chroma channels
+           // horizontally; store the result in _buf.
+           //
+
+           rotateBuffers();
+           decimateChromaHoriz (_width, _tmpBuf, _buf[N - 1]);
+
+           //
+           // If this is the first scan line in the image,
+           // store N2 more copies of the scan line in _buf.
+           //
+
+           if (_linesConverted == 0)
+           {
+               for (int j = 0; j < N2; ++j)
+                   duplicateLastBuffer();
+           }
+
+           ++_linesConverted;
+
+           //
+           // If we have have converted at least N2 scan lines from
+           // RGBA to luminance/chroma, then we can start to filter
+           // and subsample vertically, and store pixels in the
+           // output file.
+           //
+
+           if (_linesConverted > N2)
+               decimateChromaVertAndWriteScanLine();
+
+           //
+           // If we have already converted the last scan line in
+           // the image to luminance/chroma, filter, subsample and
+           // store the remaining scan lines in _buf.
+           //
+
+           if (_linesConverted >= _height)
+           {
+               for (int j = 0; j < N2 - _height; ++j)
+                   duplicateLastBuffer();
+
+               duplicateSecondToLastBuffer();
+               ++_linesConverted;
+               decimateChromaVertAndWriteScanLine();
+
+               for (int j = 1; j < min (_height, N2); ++j)
+               {
+                   duplicateLastBuffer();
+                   ++_linesConverted;
+                   decimateChromaVertAndWriteScanLine();
+               }
+           }
+
+           if (_lineOrder == INCREASING_Y)
+               ++_currentScanLine;
+           else
+               --_currentScanLine;
+       }
+    }
+}
+
+
+int
+RgbaOutputFile::ToYca::currentScanLine () const
+{
+    return _currentScanLine;
+}
+
+
+void
+RgbaOutputFile::ToYca::padTmpBuf ()
+{
+    for (int i = 0; i < N2; ++i)
+    {
+       _tmpBuf[i] = _tmpBuf[N2];
+       _tmpBuf[_width + N2 + i] = _tmpBuf[_width + N2 - 2];
+    }
+}
+
+
+void
+RgbaOutputFile::ToYca::rotateBuffers ()
+{
+    Rgba *tmp = _buf[0];
+
+    for (int i = 0; i < N - 1; ++i)
+       _buf[i] = _buf[i + 1];
+
+    _buf[N - 1] = tmp;
+}
+
+
+void
+RgbaOutputFile::ToYca::duplicateLastBuffer ()
+{
+    rotateBuffers();
+    memcpy (_buf[N - 1], _buf[N - 2], _width * sizeof (Rgba));
+}
+
+
+void
+RgbaOutputFile::ToYca::duplicateSecondToLastBuffer ()
+{
+    rotateBuffers();
+    memcpy (_buf[N - 1], _buf[N - 3], _width * sizeof (Rgba));
+}
+
+
+void
+RgbaOutputFile::ToYca::decimateChromaVertAndWriteScanLine ()
+{
+    if (_linesConverted & 1)
+       memcpy (_tmpBuf, _buf[N2], _width * sizeof (Rgba));
+    else
+       decimateChromaVert (_width, _buf, _tmpBuf);
+
+    if (_writeY && _writeC)
+       roundYCA (_width, _roundY, _roundC, _tmpBuf, _tmpBuf);
+
+    _outputFile.writePixels (1);
+}
+
+
+RgbaOutputFile::RgbaOutputFile (const char name[],
+                               const Header &header,
+                               RgbaChannels rgbaChannels,
+                                int numThreads):
+    _outputFile (0),
+    _toYca (0)
+{
+    Header hd (header);
+    insertChannels (hd, rgbaChannels);
+    _outputFile = new OutputFile (name, hd, numThreads);
+
+    if (rgbaChannels & (WRITE_Y | WRITE_C))
+       _toYca = new ToYca (*_outputFile, rgbaChannels);
+}
+
+
+RgbaOutputFile::RgbaOutputFile (OStream &os,
+                               const Header &header,
+                               RgbaChannels rgbaChannels,
+                                int numThreads):
+    _outputFile (0),
+    _toYca (0)
+{
+    Header hd (header);
+    insertChannels (hd, rgbaChannels);
+    _outputFile = new OutputFile (os, hd, numThreads);
+
+    if (rgbaChannels & (WRITE_Y | WRITE_C))
+       _toYca = new ToYca (*_outputFile, rgbaChannels);
+}
+
+
+RgbaOutputFile::RgbaOutputFile (const char name[],
+                               const Imath::Box2i &displayWindow,
+                               const Imath::Box2i &dataWindow,
+                               RgbaChannels rgbaChannels,
+                               float pixelAspectRatio,
+                               const Imath::V2f screenWindowCenter,
+                               float screenWindowWidth,
+                               LineOrder lineOrder,
+                               Compression compression,
+                                int numThreads):
+    _outputFile (0),
+    _toYca (0)
+{
+    Header hd (displayWindow,
+              dataWindow.isEmpty()? displayWindow: dataWindow,
+              pixelAspectRatio,
+              screenWindowCenter,
+              screenWindowWidth,
+              lineOrder,
+              compression);
+
+    insertChannels (hd, rgbaChannels);
+    _outputFile = new OutputFile (name, hd, numThreads);
+
+    if (rgbaChannels & (WRITE_Y | WRITE_C))
+       _toYca = new ToYca (*_outputFile, rgbaChannels);
+}
+
+
+RgbaOutputFile::RgbaOutputFile (const char name[],
+                               int width,
+                               int height,
+                               RgbaChannels rgbaChannels,
+                               float pixelAspectRatio,
+                               const Imath::V2f screenWindowCenter,
+                               float screenWindowWidth,
+                               LineOrder lineOrder,
+                               Compression compression,
+                                int numThreads):
+    _outputFile (0),
+    _toYca (0)
+{
+    Header hd (width,
+              height,
+              pixelAspectRatio,
+              screenWindowCenter,
+              screenWindowWidth,
+              lineOrder,
+              compression);
+
+    insertChannels (hd, rgbaChannels);
+    _outputFile = new OutputFile (name, hd, numThreads);
+
+    if (rgbaChannels & (WRITE_Y | WRITE_C))
+       _toYca = new ToYca (*_outputFile, rgbaChannels);
+}
+
+
+RgbaOutputFile::~RgbaOutputFile ()
+{
+    delete _toYca;
+    delete _outputFile;
+}
+
+
+void
+RgbaOutputFile::setFrameBuffer (const Rgba *base,
+                               size_t xStride,
+                               size_t yStride)
+{
+    if (_toYca)
+    {
+       Lock lock (*_toYca);
+       _toYca->setFrameBuffer (base, xStride, yStride);
+    }
+    else
+    {
+       size_t xs = xStride * sizeof (Rgba);
+       size_t ys = yStride * sizeof (Rgba);
+
+       FrameBuffer fb;
+
+       fb.insert ("R", Slice (HALF, (char *) &base[0].r, xs, ys));
+       fb.insert ("G", Slice (HALF, (char *) &base[0].g, xs, ys));
+       fb.insert ("B", Slice (HALF, (char *) &base[0].b, xs, ys));
+       fb.insert ("A", Slice (HALF, (char *) &base[0].a, xs, ys));
+
+       _outputFile->setFrameBuffer (fb);
+    }
+}
+
+
+void   
+RgbaOutputFile::writePixels (int numScanLines)
+{
+    if (_toYca)
+    {
+       Lock lock (*_toYca);
+       _toYca->writePixels (numScanLines);
+    }
+    else
+    {
+       _outputFile->writePixels (numScanLines);
+    }
+}
+
+
+int    
+RgbaOutputFile::currentScanLine () const
+{
+    if (_toYca)
+    {
+       Lock lock (*_toYca);
+       return _toYca->currentScanLine();
+    }
+    else
+    {
+       return _outputFile->currentScanLine();
+    }
+}
+
+
+const Header &
+RgbaOutputFile::header () const
+{
+    return _outputFile->header();
+}
+
+
+const FrameBuffer &
+RgbaOutputFile::frameBuffer () const
+{
+    return _outputFile->frameBuffer();
+}
+
+
+const Imath::Box2i &
+RgbaOutputFile::displayWindow () const
+{
+    return _outputFile->header().displayWindow();
+}
+
+
+const Imath::Box2i &
+RgbaOutputFile::dataWindow () const
+{
+    return _outputFile->header().dataWindow();
+}
+
+
+float  
+RgbaOutputFile::pixelAspectRatio () const
+{
+    return _outputFile->header().pixelAspectRatio();
+}
+
+
+const Imath::V2f
+RgbaOutputFile::screenWindowCenter () const
+{
+    return _outputFile->header().screenWindowCenter();
+}
+
+
+float  
+RgbaOutputFile::screenWindowWidth () const
+{
+    return _outputFile->header().screenWindowWidth();
+}
+
+
+LineOrder
+RgbaOutputFile::lineOrder () const
+{
+    return _outputFile->header().lineOrder();
+}
+
+
+Compression
+RgbaOutputFile::compression () const
+{
+    return _outputFile->header().compression();
+}
+
+
+RgbaChannels
+RgbaOutputFile::channels () const
+{
+    return rgbaChannels (_outputFile->header().channels());
+}
+
+
+void           
+RgbaOutputFile::updatePreviewImage (const PreviewRgba newPixels[])
+{
+    _outputFile->updatePreviewImage (newPixels);
+}
+
+
+void           
+RgbaOutputFile::setYCRounding (unsigned int roundY, unsigned int roundC)
+{
+    if (_toYca)
+    {
+       Lock lock (*_toYca);
+       _toYca->setYCRounding (roundY, roundC);
+    }
+}
+
+
+void   
+RgbaOutputFile::breakScanLine  (int y, int offset, int length, char c)
+{
+    _outputFile->breakScanLine (y, offset, length, c);
+}
+
+
+class RgbaInputFile::FromYca: public Mutex
+{
+  public:
+
+     FromYca (InputFile &inputFile, RgbaChannels rgbaChannels);
+    ~FromYca ();
+
+    void               setFrameBuffer (Rgba *base,
+                                       size_t xStride,
+                                       size_t yStride,
+                                       const string &channelNamePrefix);
+
+    void               readPixels (int scanLine1, int scanLine2);
+
+  private:
+
+    void               readPixels (int scanLine);
+    void               rotateBuf1 (int d);
+    void               rotateBuf2 (int d);
+    void               readYCAScanLine (int y, Rgba buf[]);
+    void               padTmpBuf ();
+
+    InputFile &                _inputFile;
+    bool               _readC;
+    int                        _xMin;
+    int                        _yMin;
+    int                _yMax;
+    int                        _width;
+    int                        _height;
+    int                        _currentScanLine;
+    LineOrder          _lineOrder;
+    V3f                        _yw;
+    Rgba *             _bufBase;
+    Rgba *             _buf1[N + 2];
+    Rgba *             _buf2[3];
+    Rgba *             _tmpBuf;
+    Rgba *             _fbBase;
+    size_t             _fbXStride;
+    size_t             _fbYStride;
+};
+
+
+RgbaInputFile::FromYca::FromYca (InputFile &inputFile,
+                                RgbaChannels rgbaChannels)
+:
+    _inputFile (inputFile)
+{
+    _readC = (rgbaChannels & WRITE_C)? true: false;
+
+    const Box2i dw = _inputFile.header().dataWindow();
+
+    _xMin = dw.min.x;
+    _yMin = dw.min.y;
+    _yMax = dw.max.y;
+    _width  = dw.max.x - dw.min.x + 1;
+    _height = dw.max.y - dw.min.y + 1;
+    _currentScanLine = dw.min.y - N - 2;
+    _lineOrder = _inputFile.header().lineOrder();
+    _yw = ywFromHeader (_inputFile.header());
+
+    ptrdiff_t pad = cachePadding (_width * sizeof (Rgba)) / sizeof (Rgba);
+
+    _bufBase = new Rgba[(_width + pad) * (N + 2 + 3)];
+
+    for (int i = 0; i < N + 2; ++i)
+       _buf1[i] = _bufBase + (i * (_width + pad));
+    
+    for (int i = 0; i < 3; ++i)
+       _buf2[i] = _bufBase + ((i + N + 2) * (_width + pad));
+
+    _tmpBuf = new Rgba[_width + N - 1];
+
+    _fbBase = 0;
+    _fbXStride = 0;
+    _fbYStride = 0;
+}
+
+
+RgbaInputFile::FromYca::~FromYca ()
+{
+    delete [] _bufBase;
+    delete [] _tmpBuf;
+}
+
+
+void
+RgbaInputFile::FromYca::setFrameBuffer (Rgba *base,
+                                       size_t xStride,
+                                       size_t yStride,
+                                       const string &channelNamePrefix)
+{
+    if (_fbBase == 0)
+    {
+       FrameBuffer fb;
+
+       fb.insert (channelNamePrefix + "Y",
+                  Slice (HALF,                                 // type
+                         (char *) &_tmpBuf[N2 - _xMin].g,      // base
+                         sizeof (Rgba),                        // xStride
+                         0,                                    // yStride
+                         1,                                    // xSampling
+                         1,                                    // ySampling
+                         0.5));                                // fillValue
+
+       if (_readC)
+       {
+           fb.insert (channelNamePrefix + "RY",
+                      Slice (HALF,                             // type
+                             (char *) &_tmpBuf[N2 - _xMin].r,  // base
+                             sizeof (Rgba) * 2,                // xStride
+                             0,                                // yStride
+                             2,                                // xSampling
+                             2,                                // ySampling
+                             0.0));                            // fillValue
+
+           fb.insert (channelNamePrefix + "BY",
+                      Slice (HALF,                             // type
+                             (char *) &_tmpBuf[N2 - _xMin].b,  // base
+                             sizeof (Rgba) * 2,                // xStride
+                             0,                                // yStride
+                             2,                                // xSampling
+                             2,                                // ySampling
+                             0.0));                            // fillValue
+       }
+
+       fb.insert (channelNamePrefix + "A",
+                  Slice (HALF,                                 // type
+                         (char *) &_tmpBuf[N2 - _xMin].a,      // base
+                         sizeof (Rgba),                        // xStride
+                         0,                                    // yStride
+                         1,                                    // xSampling
+                         1,                                    // ySampling
+                         1.0));                                // fillValue
+
+       _inputFile.setFrameBuffer (fb);
+    }
+
+    _fbBase = base;
+    _fbXStride = xStride;
+    _fbYStride = yStride;
+}
+
+
+void   
+RgbaInputFile::FromYca::readPixels (int scanLine1, int scanLine2)
+{
+    int minY = min (scanLine1, scanLine2);
+    int maxY = max (scanLine1, scanLine2);
+
+    if (_lineOrder == INCREASING_Y)
+    {
+       for (int y = minY; y <= maxY; ++y)
+           readPixels (y);
+    }
+    else
+    {
+       for (int y = maxY; y >= minY; --y)
+           readPixels (y);
+    }
+}
+
+
+void   
+RgbaInputFile::FromYca::readPixels (int scanLine)
+{
+    if (_fbBase == 0)
+    {
+       THROW (Iex::ArgExc, "No frame buffer was specified as the "
+                           "pixel data destination for image file "
+                           "\"" << _inputFile.fileName() << "\".");
+    }
+
+    //
+    // In order to convert one scan line to RGB format, we need that
+    // scan line plus N2+1 extra scan lines above and N2+1 scan lines
+    // below in luminance/chroma format.
+    //
+    // We allow random access to scan lines, but we buffer partially
+    // processed luminance/chroma data in order to make reading pixels
+    // in increasing y or decreasing y order reasonably efficient:
+    //
+    // _currentScanLine        holds the y coordinate of the scan line
+    //                         that was most recently read.
+    //
+    // _buf1                   contains scan lines _currentScanLine-N2-1
+    //                         through _currentScanLine+N2+1 in
+    //                         luminance/chroma format.  Odd-numbered
+    //                         lines contain no chroma data.  Even-numbered
+    //                         lines have valid chroma data for all pixels.
+    //
+    //  _buf2                  contains scan lines _currentScanLine-1
+    //                         through _currentScanLine+1, in RGB format.
+    //                         Super-saturated pixels (see ImfRgbaYca.h)
+    //                         have not yet been eliminated.
+    //
+    // If the scan line we are trying to read now is close enough to
+    // _currentScanLine, we don't have to recompute the contents of _buf1
+    // and _buf2 from scratch.  We can rotate _buf1 and _buf2, and fill
+    // in the missing data.
+    //
+
+    int dy = scanLine - _currentScanLine;
+
+    if (abs (dy) < N + 2)
+       rotateBuf1 (dy);
+
+    if (abs (dy) < 3)
+       rotateBuf2 (dy);
+
+    if (dy < 0)
+    {
+       {
+           int n = min (-dy, N + 2);
+           int yMin = scanLine - N2 - 1;
+
+           for (int i = n - 1; i >= 0; --i)
+               readYCAScanLine (yMin + i, _buf1[i]);
+       }
+
+       {
+           int n = min (-dy, 3);
+
+           for (int i = 0; i < n; ++i)
+           {
+               if ((scanLine + i) & 1)
+               {
+                   YCAtoRGBA (_yw, _width, _buf1[N2 + i], _buf2[i]);
+               }
+               else
+               {
+                   reconstructChromaVert (_width, _buf1 + i, _buf2[i]);
+                   YCAtoRGBA (_yw, _width, _buf2[i], _buf2[i]);
+               }
+           }
+       }
+    }
+    else
+    {
+       {
+           int n = min (dy, N + 2);
+           int yMax = scanLine + N2 + 1;
+
+           for (int i = n - 1; i >= 0; --i)
+               readYCAScanLine (yMax - i, _buf1[N + 1 - i]);
+       }
+
+       {
+           int n = min (dy, 3);
+
+           for (int i = 2; i > 2 - n; --i)
+           {
+               if ((scanLine + i) & 1)
+               {
+                   YCAtoRGBA (_yw, _width, _buf1[N2 + i], _buf2[i]);
+               }
+               else
+               {
+                   reconstructChromaVert (_width, _buf1 + i, _buf2[i]);
+                   YCAtoRGBA (_yw, _width, _buf2[i], _buf2[i]);
+               }
+           }
+       }
+    }
+
+    fixSaturation (_yw, _width, _buf2, _tmpBuf);
+
+    for (int i = 0; i < _width; ++i)
+       _fbBase[_fbYStride * scanLine + _fbXStride * (i + _xMin)] = _tmpBuf[i];
+
+    _currentScanLine = scanLine;
+}
+
+
+void
+RgbaInputFile::FromYca::rotateBuf1 (int d)
+{
+    d = modp (d, N + 2);
+
+    Rgba *tmp[N + 2];
+
+    for (int i = 0; i < N + 2; ++i)
+       tmp[i] = _buf1[i];
+
+    for (int i = 0; i < N + 2; ++i)
+       _buf1[i] = tmp[(i + d) % (N + 2)];
+}
+
+
+void
+RgbaInputFile::FromYca::rotateBuf2 (int d)
+{
+    d = modp (d, 3);
+
+    Rgba *tmp[3];
+
+    for (int i = 0; i < 3; ++i)
+       tmp[i] = _buf2[i];
+
+    for (int i = 0; i < 3; ++i)
+       _buf2[i] = tmp[(i + d) % 3];
+}
+
+
+void
+RgbaInputFile::FromYca::readYCAScanLine (int y, Rgba *buf)
+{
+    //
+    // Clamp y.
+    //
+
+    if (y < _yMin)
+       y = _yMin;
+    else if (y > _yMax)
+       y = _yMax - 1;
+
+    //
+    // Read scan line y into _tmpBuf.
+    //
+
+    _inputFile.readPixels (y);
+
+    //
+    // Reconstruct missing chroma samples and copy
+    // the scan line into buf.
+    //
+
+    if (!_readC)
+    {
+       for (int i = 0; i < _width; ++i)
+       {
+           _tmpBuf[i + N2].r = 0;
+           _tmpBuf[i + N2].b = 0;
+       }
+    }
+
+    if (y & 1)
+    {
+       memcpy (buf, _tmpBuf + N2, _width * sizeof (Rgba));
+    }
+    else
+    {
+       padTmpBuf();
+       reconstructChromaHoriz (_width, _tmpBuf, buf);
+    }
+}
+
+
+void
+RgbaInputFile::FromYca::padTmpBuf ()
+{
+    for (int i = 0; i < N2; ++i)
+    {
+       _tmpBuf[i] = _tmpBuf[N2];
+       _tmpBuf[_width + N2 + i] = _tmpBuf[_width + N2 - 2];
+    }
+}
+
+
+RgbaInputFile::RgbaInputFile (const char name[], int numThreads):
+    _inputFile (new InputFile (name, numThreads)),
+    _fromYca (0),
+    _channelNamePrefix ("")
+{
+    RgbaChannels rgbaChannels = channels();
+
+    if (rgbaChannels & (WRITE_Y | WRITE_C))
+       _fromYca = new FromYca (*_inputFile, rgbaChannels);
+}
+
+
+RgbaInputFile::RgbaInputFile (IStream &is, int numThreads):
+    _inputFile (new InputFile (is, numThreads)),
+    _fromYca (0),
+    _channelNamePrefix ("")
+{
+    RgbaChannels rgbaChannels = channels();
+
+    if (rgbaChannels & (WRITE_Y | WRITE_C))
+       _fromYca = new FromYca (*_inputFile, rgbaChannels);
+}
+
+
+RgbaInputFile::RgbaInputFile (const char name[],
+                             const string &layerName,
+                             int numThreads)
+:
+    _inputFile (new InputFile (name, numThreads)),
+    _fromYca (0),
+    _channelNamePrefix (prefixFromLayerName (layerName, _inputFile->header()))
+{
+    RgbaChannels rgbaChannels = channels();
+
+    if (rgbaChannels & (WRITE_Y | WRITE_C))
+       _fromYca = new FromYca (*_inputFile, rgbaChannels);
+}
+
+
+RgbaInputFile::RgbaInputFile (IStream &is,
+                             const string &layerName,
+                             int numThreads)
+:
+    _inputFile (new InputFile (is, numThreads)),
+    _fromYca (0),
+    _channelNamePrefix (prefixFromLayerName (layerName, _inputFile->header()))
+{
+    RgbaChannels rgbaChannels = channels();
+
+    if (rgbaChannels & (WRITE_Y | WRITE_C))
+       _fromYca = new FromYca (*_inputFile, rgbaChannels);
+}
+
+
+RgbaInputFile::~RgbaInputFile ()
+{
+    delete _inputFile;
+    delete _fromYca;
+}
+
+
+void   
+RgbaInputFile::setFrameBuffer (Rgba *base, size_t xStride, size_t yStride)
+{
+    if (_fromYca)
+    {
+       Lock lock (*_fromYca);
+       _fromYca->setFrameBuffer (base, xStride, yStride, _channelNamePrefix);
+    }
+    else
+    {
+       size_t xs = xStride * sizeof (Rgba);
+       size_t ys = yStride * sizeof (Rgba);
+
+       FrameBuffer fb;
+
+       fb.insert (_channelNamePrefix + "R",
+                  Slice (HALF,
+                         (char *) &base[0].r,
+                         xs, ys,
+                         1, 1,         // xSampling, ySampling
+                         0.0));        // fillValue
+
+       fb.insert (_channelNamePrefix + "G",
+                  Slice (HALF,
+                         (char *) &base[0].g,
+                         xs, ys,
+                         1, 1,         // xSampling, ySampling
+                         0.0));        // fillValue
+
+       fb.insert (_channelNamePrefix + "B",
+                  Slice (HALF,
+                         (char *) &base[0].b,
+                         xs, ys,
+                         1, 1,         // xSampling, ySampling
+                         0.0));        // fillValue
+
+       fb.insert (_channelNamePrefix + "A",
+                  Slice (HALF,
+                         (char *) &base[0].a,
+                         xs, ys,
+                         1, 1,         // xSampling, ySampling
+                         1.0));        // fillValue
+
+       _inputFile->setFrameBuffer (fb);
+    }
+}
+
+
+void
+RgbaInputFile::setLayerName (const string &layerName)
+{
+    delete _fromYca;
+    _fromYca = 0;
+
+    _channelNamePrefix = prefixFromLayerName (layerName, _inputFile->header());
+
+    RgbaChannels rgbaChannels = channels();
+
+    if (rgbaChannels & (WRITE_Y | WRITE_C))
+       _fromYca = new FromYca (*_inputFile, rgbaChannels);
+
+    FrameBuffer fb;
+    _inputFile->setFrameBuffer (fb);
+}
+
+
+void   
+RgbaInputFile::readPixels (int scanLine1, int scanLine2)
+{
+    if (_fromYca)
+    {
+       Lock lock (*_fromYca);
+       _fromYca->readPixels (scanLine1, scanLine2);
+    }
+    else
+    {
+       _inputFile->readPixels (scanLine1, scanLine2);
+    }
+}
+
+
+void   
+RgbaInputFile::readPixels (int scanLine)
+{
+    readPixels (scanLine, scanLine);
+}
+
+
+bool
+RgbaInputFile::isComplete () const
+{
+    return _inputFile->isComplete();
+}
+
+
+const Header &
+RgbaInputFile::header () const
+{
+    return _inputFile->header();
+}
+
+
+const char *
+RgbaInputFile::fileName () const
+{
+    return _inputFile->fileName();
+}
+
+
+const FrameBuffer &    
+RgbaInputFile::frameBuffer () const
+{
+    return _inputFile->frameBuffer();
+}
+
+
+const Imath::Box2i &
+RgbaInputFile::displayWindow () const
+{
+    return _inputFile->header().displayWindow();
+}
+
+
+const Imath::Box2i &
+RgbaInputFile::dataWindow () const
+{
+    return _inputFile->header().dataWindow();
+}
+
+
+float  
+RgbaInputFile::pixelAspectRatio () const
+{
+    return _inputFile->header().pixelAspectRatio();
+}
+
+
+const Imath::V2f       
+RgbaInputFile::screenWindowCenter () const
+{
+    return _inputFile->header().screenWindowCenter();
+}
+
+
+float  
+RgbaInputFile::screenWindowWidth () const
+{
+    return _inputFile->header().screenWindowWidth();
+}
+
+
+LineOrder
+RgbaInputFile::lineOrder () const
+{
+    return _inputFile->header().lineOrder();
+}
+
+
+Compression
+RgbaInputFile::compression () const
+{
+    return _inputFile->header().compression();
+}
+
+
+RgbaChannels   
+RgbaInputFile::channels () const
+{
+    return rgbaChannels (_inputFile->header().channels(), _channelNamePrefix);
+}
+
+
+int
+RgbaInputFile::version () const
+{
+    return _inputFile->version();
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfRgbaFile.h b/3rdparty/openexr/IlmImf/ImfRgbaFile.h
new file mode 100644 (file)
index 0000000..eec67dc
--- /dev/null
@@ -0,0 +1,344 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_RGBA_FILE_H
+#define INCLUDED_IMF_RGBA_FILE_H
+
+
+//-----------------------------------------------------------------------------
+//
+//     Simplified RGBA image I/O
+//
+//     class RgbaOutputFile
+//     class RgbaInputFile
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfHeader.h>
+#include <ImfFrameBuffer.h>
+#include <ImfRgba.h>
+#include "ImathVec.h"
+#include "ImathBox.h"
+#include "half.h"
+#include <ImfThreading.h>
+#include <string>
+
+namespace Imf {
+
+
+class OutputFile;
+class InputFile;
+struct PreviewRgba;
+
+//
+// RGBA output file.
+//
+
+class RgbaOutputFile
+{
+  public:
+
+    //---------------------------------------------------
+    // Constructor -- header is constructed by the caller
+    //---------------------------------------------------
+
+    RgbaOutputFile (const char name[],
+                   const Header &header,
+                   RgbaChannels rgbaChannels = WRITE_RGBA,
+                    int numThreads = globalThreadCount());
+
+
+    //----------------------------------------------------
+    // Constructor -- header is constructed by the caller,
+    // file is opened by the caller, destructor will not
+    // automatically close the file.
+    //----------------------------------------------------
+
+    RgbaOutputFile (OStream &os,
+                   const Header &header,
+                   RgbaChannels rgbaChannels = WRITE_RGBA,
+                    int numThreads = globalThreadCount());
+
+
+    //----------------------------------------------------------------
+    // Constructor -- header data are explicitly specified as function
+    // call arguments (empty dataWindow means "same as displayWindow")
+    //----------------------------------------------------------------
+
+    RgbaOutputFile (const char name[],
+                   const Imath::Box2i &displayWindow,
+                   const Imath::Box2i &dataWindow = Imath::Box2i(),
+                   RgbaChannels rgbaChannels = WRITE_RGBA,
+                   float pixelAspectRatio = 1,
+                   const Imath::V2f screenWindowCenter = Imath::V2f (0, 0),
+                   float screenWindowWidth = 1,
+                   LineOrder lineOrder = INCREASING_Y,
+                   Compression compression = PIZ_COMPRESSION,
+                    int numThreads = globalThreadCount());
+
+
+    //-----------------------------------------------
+    // Constructor -- like the previous one, but both
+    // the display window and the data window are
+    // Box2i (V2i (0, 0), V2i (width - 1, height -1))
+    //-----------------------------------------------
+
+    RgbaOutputFile (const char name[],
+                   int width,
+                   int height,
+                   RgbaChannels rgbaChannels = WRITE_RGBA,
+                   float pixelAspectRatio = 1,
+                   const Imath::V2f screenWindowCenter = Imath::V2f (0, 0),
+                   float screenWindowWidth = 1,
+                   LineOrder lineOrder = INCREASING_Y,
+                   Compression compression = PIZ_COMPRESSION,
+                    int numThreads = globalThreadCount());
+
+
+    //-----------
+    // Destructor
+    //-----------
+
+    virtual ~RgbaOutputFile ();
+
+
+    //------------------------------------------------
+    // Define a frame buffer as the pixel data source:
+    // Pixel (x, y) is at address
+    //
+    //  base + x * xStride + y * yStride
+    //
+    //------------------------------------------------
+
+    void                       setFrameBuffer (const Rgba *base,
+                                               size_t xStride,
+                                               size_t yStride);
+
+
+    //---------------------------------------------
+    // Write pixel data (see class Imf::OutputFile)
+    //---------------------------------------------
+
+    void                       writePixels (int numScanLines = 1);
+    int                                currentScanLine () const;
+
+
+    //--------------------------
+    // Access to the file header
+    //--------------------------
+
+    const Header &             header () const;
+    const FrameBuffer &                frameBuffer () const;
+    const Imath::Box2i &       displayWindow () const;
+    const Imath::Box2i &       dataWindow () const;
+    float                      pixelAspectRatio () const;
+    const Imath::V2f           screenWindowCenter () const;
+    float                      screenWindowWidth () const;
+    LineOrder                  lineOrder () const;
+    Compression                        compression () const;
+    RgbaChannels               channels () const;
+
+
+    // --------------------------------------------------------------------
+    // Update the preview image (see Imf::OutputFile::updatePreviewImage())
+    // --------------------------------------------------------------------
+
+    void                       updatePreviewImage (const PreviewRgba[]);
+
+
+    //-----------------------------------------------------------------------
+    // Rounding control for luminance/chroma images:
+    //
+    // If the output file contains luminance and chroma channels (WRITE_YC
+    // or WRITE_YCA), then the the significands of the luminance and
+    // chroma values are rounded to roundY and roundC bits respectively (see
+    // function half::round()).  Rounding improves compression with minimal
+    // image degradation, usually much less than the degradation caused by
+    // chroma subsampling.  By default, roundY is 7, and roundC is 5.
+    //
+    // If the output file contains RGB channels or a luminance channel,
+    // without chroma, then no rounding is performed.
+    //-----------------------------------------------------------------------
+
+    void                       setYCRounding (unsigned int roundY,
+                                              unsigned int roundC);
+
+
+    //----------------------------------------------------
+    // Break a scan line -- for testing and debugging only
+    // (see Imf::OutputFile::updatePreviewImage()
+    //
+    // Warning: Calling this function usually results in a
+    // broken image file.  The file or parts of it may not
+    // be readable, or the file may contain bad data.
+    //
+    //----------------------------------------------------
+
+    void                       breakScanLine  (int y,
+                                               int offset,
+                                               int length,
+                                               char c);
+  private:
+
+    RgbaOutputFile (const RgbaOutputFile &);             // not implemented
+    RgbaOutputFile & operator = (const RgbaOutputFile &); // not implemented
+
+    class ToYca;
+
+    OutputFile *               _outputFile;
+    ToYca *                    _toYca;
+};
+
+
+//
+// RGBA input file
+//
+
+class RgbaInputFile
+{
+  public:
+
+    //-------------------------------------------------------
+    // Constructor -- opens the file with the specified name,
+    // destructor will automatically close the file.
+    //-------------------------------------------------------
+
+    RgbaInputFile (const char name[], int numThreads = globalThreadCount());
+
+
+    //-----------------------------------------------------------
+    // Constructor -- attaches the new RgbaInputFile object to a
+    // file that has already been opened by the caller.
+    // Destroying the RgbaInputFile object will not automatically
+    // close the file.
+    //-----------------------------------------------------------
+
+    RgbaInputFile (IStream &is, int numThreads = globalThreadCount());
+
+
+    //--------------------------------------------------------------
+    // Constructors -- the same as the previous two, but the names
+    // of the red, green, blue, alpha, luminance and chroma channels
+    // are expected to be layerName.R, layerName.G, etc.
+    //--------------------------------------------------------------
+
+    RgbaInputFile (const char name[],
+                  const std::string &layerName,
+                  int numThreads = globalThreadCount());
+
+    RgbaInputFile (IStream &is,
+                  const std::string &layerName,
+                  int numThreads = globalThreadCount());
+
+
+    //-----------
+    // Destructor
+    //-----------
+
+    virtual ~RgbaInputFile ();
+
+
+    //-----------------------------------------------------
+    // Define a frame buffer as the pixel data destination:
+    // Pixel (x, y) is at address
+    //
+    //  base + x * xStride + y * yStride
+    //
+    //-----------------------------------------------------
+
+    void                       setFrameBuffer (Rgba *base,
+                                               size_t xStride,
+                                               size_t yStride);
+
+
+    //----------------------------------------------------------------
+    // Switch to a different layer -- subsequent calls to readPixels()
+    // will read channels layerName.R, layerName.G, etc.
+    // After each call to setLayerName(), setFrameBuffer() must be
+    // called at least once before the next call to readPixels().
+    //----------------------------------------------------------------
+
+    void                       setLayerName (const std::string &layerName);
+
+
+    //-------------------------------------------
+    // Read pixel data (see class Imf::InputFile)
+    //-------------------------------------------
+
+    void                       readPixels (int scanLine1, int scanLine2);
+    void                       readPixels (int scanLine);
+
+
+    //--------------------------
+    // Access to the file header
+    //--------------------------
+
+    const Header &             header () const;
+    const FrameBuffer &                frameBuffer () const;
+    const Imath::Box2i &       displayWindow () const;
+    const Imath::Box2i &       dataWindow () const;
+    float                      pixelAspectRatio () const;
+    const Imath::V2f           screenWindowCenter () const;
+    float                      screenWindowWidth () const;
+    LineOrder                  lineOrder () const;
+    Compression                        compression () const;
+    RgbaChannels               channels () const;
+    const char *                fileName () const;
+    bool                       isComplete () const;
+
+
+    //----------------------------------
+    // Access to the file format version
+    //----------------------------------
+
+    int                                version () const;
+
+  private:
+
+    RgbaInputFile (const RgbaInputFile &);               // not implemented
+    RgbaInputFile & operator = (const RgbaInputFile &);   // not implemented
+
+    class FromYca;
+
+    InputFile *                        _inputFile;
+    FromYca *                  _fromYca;
+    std::string                        _channelNamePrefix;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfRgbaYca.cpp b/3rdparty/openexr/IlmImf/ImfRgbaYca.cpp
new file mode 100644 (file)
index 0000000..9a571de
--- /dev/null
@@ -0,0 +1,495 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucasfilm
+// Entertainment Company Ltd.  Portions contributed and copyright held by
+// others as indicated.  All rights reserved.
+//
+// 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 Industrial Light & Magic nor the names of
+//       any other contributors to this software 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 COPYRIGHT OWNER 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.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     Conversion between RGBA and YCA data.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfRgbaYca.h>
+#include <assert.h>
+#include <algorithm>
+
+using namespace Imath;
+using namespace std;
+
+namespace Imf {
+namespace RgbaYca {
+
+
+V3f
+computeYw (const Chromaticities &cr)
+{
+    M44f m = RGBtoXYZ (cr, 1);
+    return V3f (m[0][1], m[1][1], m[2][1]) / (m[0][1] + m[1][1] + m[2][1]);
+}
+
+
+void
+RGBAtoYCA (const V3f &yw,
+          int n,
+          bool aIsValid,
+          const Rgba rgbaIn[/*n*/],
+          Rgba ycaOut[/*n*/])
+{
+    for (int i = 0; i < n; ++i)
+    {
+       Rgba in = rgbaIn[i];
+       Rgba &out = ycaOut[i];
+
+       //
+       // Conversion to YCA and subsequent chroma subsampling
+       // work only if R, G and B are finite and non-negative.
+       //
+
+       if (!in.r.isFinite() || in.r < 0)
+           in.r = 0;
+
+       if (!in.g.isFinite() || in.g < 0)
+           in.g = 0;
+
+       if (!in.b.isFinite() || in.b < 0)
+           in.b = 0;
+
+       if (in.r == in.g && in.g == in.b)
+       {
+           //
+           // Special case -- R, G and B are equal. To avoid rounding
+           // errors, we explicitly set the output luminance channel
+           // to G, and the chroma channels to 0.
+           //
+           // The special cases here and in YCAtoRGBA() ensure that
+           // converting black-and white images from RGBA to YCA and
+           // back is lossless.
+           //
+
+           out.r = 0;
+           out.g = in.g;
+           out.b = 0;
+       }
+       else
+       {
+           out.g = in.r * yw.x + in.g * yw.y + in.b * yw.z;
+
+           float Y = out.g;
+
+           if (abs (in.r - Y) < HALF_MAX * Y)
+               out.r = (in.r - Y) / Y;
+           else
+               out.r = 0;
+
+           if (abs (in.b - Y) < HALF_MAX * Y)
+               out.b = (in.b - Y) / Y;
+           else
+               out.b = 0;
+       }
+
+       if (aIsValid)
+           out.a = in.a;
+       else
+           out.a = 1;
+    }
+}
+
+
+void
+decimateChromaHoriz (int n,
+                    const Rgba ycaIn[/*n+N-1*/],
+                    Rgba ycaOut[/*n*/])
+{
+    #ifdef DEBUG
+       assert (ycaIn != ycaOut);
+    #endif
+
+    int begin = N2;
+    int end = begin + n;
+
+    for (int i = begin, j = 0; i < end; ++i, ++j)
+    {
+       if ((j & 1) == 0)
+       {
+           ycaOut[j].r = ycaIn[i - 13].r *  0.001064f +
+                         ycaIn[i - 11].r * -0.003771f +
+                         ycaIn[i -  9].r *  0.009801f +
+                         ycaIn[i -  7].r * -0.021586f +
+                         ycaIn[i -  5].r *  0.043978f +
+                         ycaIn[i -  3].r * -0.093067f +
+                         ycaIn[i -  1].r *  0.313659f +
+                         ycaIn[i     ].r *  0.499846f +
+                         ycaIn[i +  1].r *  0.313659f +
+                         ycaIn[i +  3].r * -0.093067f +
+                         ycaIn[i +  5].r *  0.043978f +
+                         ycaIn[i +  7].r * -0.021586f +
+                         ycaIn[i +  9].r *  0.009801f +
+                         ycaIn[i + 11].r * -0.003771f +
+                         ycaIn[i + 13].r *  0.001064f;
+
+           ycaOut[j].b = ycaIn[i - 13].b *  0.001064f +
+                         ycaIn[i - 11].b * -0.003771f +
+                         ycaIn[i -  9].b *  0.009801f +
+                         ycaIn[i -  7].b * -0.021586f +
+                         ycaIn[i -  5].b *  0.043978f +
+                         ycaIn[i -  3].b * -0.093067f +
+                         ycaIn[i -  1].b *  0.313659f +
+                         ycaIn[i     ].b *  0.499846f +
+                         ycaIn[i +  1].b *  0.313659f +
+                         ycaIn[i +  3].b * -0.093067f +
+                         ycaIn[i +  5].b *  0.043978f +
+                         ycaIn[i +  7].b * -0.021586f +
+                         ycaIn[i +  9].b *  0.009801f +
+                         ycaIn[i + 11].b * -0.003771f +
+                         ycaIn[i + 13].b *  0.001064f;
+       }
+
+       ycaOut[j].g = ycaIn[i].g;
+       ycaOut[j].a = ycaIn[i].a;
+    }
+}
+
+
+void
+decimateChromaVert (int n,
+                   const Rgba * const ycaIn[N],
+                   Rgba ycaOut[/*n*/])
+{
+    for (int i = 0; i < n; ++i)
+    {
+       if ((i & 1) == 0)
+       {
+           ycaOut[i].r = ycaIn[ 0][i].r *  0.001064f +
+                         ycaIn[ 2][i].r * -0.003771f +
+                         ycaIn[ 4][i].r *  0.009801f +
+                         ycaIn[ 6][i].r * -0.021586f +
+                         ycaIn[ 8][i].r *  0.043978f +
+                         ycaIn[10][i].r * -0.093067f +
+                         ycaIn[12][i].r *  0.313659f +
+                         ycaIn[13][i].r *  0.499846f +
+                         ycaIn[14][i].r *  0.313659f +
+                         ycaIn[16][i].r * -0.093067f +
+                         ycaIn[18][i].r *  0.043978f +
+                         ycaIn[20][i].r * -0.021586f +
+                         ycaIn[22][i].r *  0.009801f +
+                         ycaIn[24][i].r * -0.003771f +
+                         ycaIn[26][i].r *  0.001064f;
+
+           ycaOut[i].b = ycaIn[ 0][i].b *  0.001064f +
+                         ycaIn[ 2][i].b * -0.003771f +
+                         ycaIn[ 4][i].b *  0.009801f +
+                         ycaIn[ 6][i].b * -0.021586f +
+                         ycaIn[ 8][i].b *  0.043978f +
+                         ycaIn[10][i].b * -0.093067f +
+                         ycaIn[12][i].b *  0.313659f +
+                         ycaIn[13][i].b *  0.499846f +
+                         ycaIn[14][i].b *  0.313659f +
+                         ycaIn[16][i].b * -0.093067f +
+                         ycaIn[18][i].b *  0.043978f +
+                         ycaIn[20][i].b * -0.021586f +
+                         ycaIn[22][i].b *  0.009801f +
+                         ycaIn[24][i].b * -0.003771f +
+                         ycaIn[26][i].b *  0.001064f;
+       }
+
+       ycaOut[i].g = ycaIn[13][i].g;
+       ycaOut[i].a = ycaIn[13][i].a;
+    }
+}
+
+
+void
+roundYCA (int n,
+         unsigned int roundY,
+         unsigned int roundC,
+         const Rgba ycaIn[/*n*/],
+         Rgba ycaOut[/*n*/])
+{
+    for (int i = 0; i < n; ++i)
+    {
+       ycaOut[i].g = ycaIn[i].g.round (roundY);
+       ycaOut[i].a = ycaIn[i].a;
+
+       if ((i & 1) == 0)
+       {
+           ycaOut[i].r = ycaIn[i].r.round (roundC);
+           ycaOut[i].b = ycaIn[i].b.round (roundC);
+       }
+    }
+}
+
+
+void
+reconstructChromaHoriz (int n,
+                       const Rgba ycaIn[/*n+N-1*/],
+                       Rgba ycaOut[/*n*/])
+{
+    #ifdef DEBUG
+       assert (ycaIn != ycaOut);
+    #endif
+
+    int begin = N2;
+    int end = begin + n;
+
+    for (int i = begin, j = 0; i < end; ++i, ++j)
+    {
+       if (j & 1)
+       {
+           ycaOut[j].r = ycaIn[i - 13].r *  0.002128f +
+                         ycaIn[i - 11].r * -0.007540f +
+                         ycaIn[i -  9].r *  0.019597f +
+                         ycaIn[i -  7].r * -0.043159f +
+                         ycaIn[i -  5].r *  0.087929f +
+                         ycaIn[i -  3].r * -0.186077f +
+                         ycaIn[i -  1].r *  0.627123f +
+                         ycaIn[i +  1].r *  0.627123f +
+                         ycaIn[i +  3].r * -0.186077f +
+                         ycaIn[i +  5].r *  0.087929f +
+                         ycaIn[i +  7].r * -0.043159f +
+                         ycaIn[i +  9].r *  0.019597f +
+                         ycaIn[i + 11].r * -0.007540f +
+                         ycaIn[i + 13].r *  0.002128f;
+
+           ycaOut[j].b = ycaIn[i - 13].b *  0.002128f +
+                         ycaIn[i - 11].b * -0.007540f +
+                         ycaIn[i -  9].b *  0.019597f +
+                         ycaIn[i -  7].b * -0.043159f +
+                         ycaIn[i -  5].b *  0.087929f +
+                         ycaIn[i -  3].b * -0.186077f +
+                         ycaIn[i -  1].b *  0.627123f +
+                         ycaIn[i +  1].b *  0.627123f +
+                         ycaIn[i +  3].b * -0.186077f +
+                         ycaIn[i +  5].b *  0.087929f +
+                         ycaIn[i +  7].b * -0.043159f +
+                         ycaIn[i +  9].b *  0.019597f +
+                         ycaIn[i + 11].b * -0.007540f +
+                         ycaIn[i + 13].b *  0.002128f;
+       }
+       else
+       {
+           ycaOut[j].r = ycaIn[i].r;
+           ycaOut[j].b = ycaIn[i].b;
+       }
+
+       ycaOut[j].g = ycaIn[i].g;
+       ycaOut[j].a = ycaIn[i].a;
+    }
+}
+
+
+void
+reconstructChromaVert (int n,
+                      const Rgba * const ycaIn[N],
+                      Rgba ycaOut[/*n*/])
+{
+    for (int i = 0; i < n; ++i)
+    {
+       ycaOut[i].r = ycaIn[ 0][i].r *  0.002128f +
+                     ycaIn[ 2][i].r * -0.007540f +
+                     ycaIn[ 4][i].r *  0.019597f +
+                     ycaIn[ 6][i].r * -0.043159f +
+                     ycaIn[ 8][i].r *  0.087929f +
+                     ycaIn[10][i].r * -0.186077f +
+                     ycaIn[12][i].r *  0.627123f +
+                     ycaIn[14][i].r *  0.627123f +
+                     ycaIn[16][i].r * -0.186077f +
+                     ycaIn[18][i].r *  0.087929f +
+                     ycaIn[20][i].r * -0.043159f +
+                     ycaIn[22][i].r *  0.019597f +
+                     ycaIn[24][i].r * -0.007540f +
+                     ycaIn[26][i].r *  0.002128f;
+
+       ycaOut[i].b = ycaIn[ 0][i].b *  0.002128f +
+                     ycaIn[ 2][i].b * -0.007540f +
+                     ycaIn[ 4][i].b *  0.019597f +
+                     ycaIn[ 6][i].b * -0.043159f +
+                     ycaIn[ 8][i].b *  0.087929f +
+                     ycaIn[10][i].b * -0.186077f +
+                     ycaIn[12][i].b *  0.627123f +
+                     ycaIn[14][i].b *  0.627123f +
+                     ycaIn[16][i].b * -0.186077f +
+                     ycaIn[18][i].b *  0.087929f +
+                     ycaIn[20][i].b * -0.043159f +
+                     ycaIn[22][i].b *  0.019597f +
+                     ycaIn[24][i].b * -0.007540f +
+                     ycaIn[26][i].b *  0.002128f;
+
+       ycaOut[i].g = ycaIn[13][i].g;
+       ycaOut[i].a = ycaIn[13][i].a;
+    }
+}
+
+                        
+void
+YCAtoRGBA (const Imath::V3f &yw,
+          int n,
+          const Rgba ycaIn[/*n*/],
+          Rgba rgbaOut[/*n*/])
+{
+    for (int i = 0; i < n; ++i)
+    {
+       const Rgba &in = ycaIn[i];
+       Rgba &out = rgbaOut[i];
+
+       if (in.r == 0 && in.b == 0)
+       {
+           //
+           // Special case -- both chroma channels are 0.  To avoid
+           // rounding errors, we explicitly set the output R, G and B
+           // channels equal to the input luminance.
+           //
+           // The special cases here and in RGBAtoYCA() ensure that
+           // converting black-and white images from RGBA to YCA and
+           // back is lossless.
+           //
+
+           out.r = in.g;
+           out.g = in.g;
+           out.b = in.g;
+           out.a = in.a;
+       }
+       else
+       {
+           float Y =  in.g;
+           float r = (in.r + 1) * Y;
+           float b = (in.b + 1) * Y;
+           float g = (Y - r * yw.x - b * yw.z) / yw.y;
+
+           out.r = r;
+           out.g = g;
+           out.b = b;
+           out.a = in.a;
+       }
+    }
+}
+
+
+namespace {
+
+inline float
+saturation (const Rgba &in)
+{
+    float rgbMax = max (in.r, max (in.g, in.b));
+    float rgbMin = min (in.r, min (in.g, in.b));
+
+    if (rgbMax > 0)
+       return 1 - rgbMin / rgbMax;
+    else
+       return 0;
+}
+
+
+void
+desaturate (const Rgba &in, float f, const V3f &yw, Rgba &out)
+{
+    float rgbMax = max (in.r, max (in.g, in.b));
+
+    out.r = max (float (rgbMax - (rgbMax - in.r) * f), 0.0f);
+    out.g = max (float (rgbMax - (rgbMax - in.g) * f), 0.0f);
+    out.b = max (float (rgbMax - (rgbMax - in.b) * f), 0.0f);
+    out.a = in.a;
+
+    float Yin  = in.r  * yw.x + in.g  * yw.y + in.b  * yw.z;
+    float Yout = out.r * yw.x + out.g * yw.y + out.b * yw.z;
+
+    if (Yout > 0)
+    {
+       out.r *= Yin / Yout;
+       out.g *= Yin / Yout;
+       out.b *= Yin / Yout;
+    }
+}
+
+} // namespace
+
+                        
+void
+fixSaturation (const Imath::V3f &yw,
+              int n,
+              const Rgba * const rgbaIn[3],
+              Rgba rgbaOut[/*n*/])
+{
+    float neighborA2 = saturation (rgbaIn[0][0]);
+    float neighborA1 = neighborA2;
+
+    float neighborB2 = saturation (rgbaIn[2][0]);
+    float neighborB1 = neighborB2;
+
+    for (int i = 0; i < n; ++i)
+    {
+       float neighborA0 = neighborA1;
+       neighborA1 = neighborA2;
+
+       float neighborB0 = neighborB1;
+       neighborB1 = neighborB2;
+
+       if (i < n - 1)
+       {
+           neighborA2 = saturation (rgbaIn[0][i + 1]);
+           neighborB2 = saturation (rgbaIn[2][i + 1]);
+       }
+
+       //
+       // A0       A1       A2
+       //      rgbaOut[i]
+       // B0       B1       B2
+       //
+
+       float sMean = min (1.0f, 0.25f * (neighborA0 + neighborA2 +
+                                         neighborB0 + neighborB2));
+
+       const Rgba &in  = rgbaIn[1][i];
+       Rgba &out = rgbaOut[i];
+
+       float s = saturation (in);
+
+       if (s > sMean)
+       {
+           float sMax = min (1.0f, 1 - (1 - sMean) * 0.25f);
+
+           if (s > sMax)
+           {
+               desaturate (in, sMax / s, yw, out);
+               continue;
+           }
+       }
+
+       out = in;
+    }
+}
+
+} // namespace RgbaYca
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfRgbaYca.h b/3rdparty/openexr/IlmImf/ImfRgbaYca.h
new file mode 100644 (file)
index 0000000..4a2743e
--- /dev/null
@@ -0,0 +1,248 @@
+#ifndef INCLUDED_IMF_RGBA_YCA_H
+#define INCLUDED_IMF_RGBA_YCA_H
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucasfilm
+// Entertainment Company Ltd.  Portions contributed and copyright held by
+// others as indicated.  All rights reserved.
+//
+// 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 Industrial Light & Magic nor the names of
+//       any other contributors to this software 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 COPYRIGHT OWNER 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.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     Conversion between RGBA (red, green, blue alpha)
+//     and YCA (luminance, subsampled chroma, alpha) data:
+//
+//     Luminance, Y, is computed as a weighted sum of R, G, and B:
+//
+//             Y = yw.x * R + yw.y * G + yw.z * B
+//
+//     Function computeYw() computes a set of RGB-to-Y weights, yw,
+//     from a set of primary and white point chromaticities.
+//
+//     Chroma, C, consists of two components, RY and BY:
+//
+//             RY = (R - Y) / Y
+//             BY = (B - Y) / Y
+//
+//     For efficiency, the x and y subsampling rates for chroma are
+//     hardwired to 2, and the chroma subsampling and reconstruction
+//     filters are fixed 27-pixel wide windowed sinc functions.
+//
+//     Starting with an image that has RGBA data for all pixels,
+//
+//             RGBA RGBA RGBA RGBA ... RGBA RGBA
+//             RGBA RGBA RGBA RGBA ... RGBA RGBA
+//             RGBA RGBA RGBA RGBA ... RGBA RGBA
+//             RGBA RGBA RGBA RGBA ... RGBA RGBA
+//             ...
+//             RGBA RGBA RGBA RGBA ... RGBA RGBA
+//             RGBA RGBA RGBA RGBA ... RGBA RGBA
+//
+//     function RGBAtoYCA() converts the pixels to YCA format:
+//
+//             YCA  YCA  YCA  YCA  ... YCA  YCA
+//             YCA  YCA  YCA  YCA  ... YCA  YCA
+//             YCA  YCA  YCA  YCA  ... YCA  YCA
+//             YCA  YCA  YCA  YCA  ... YCA  YCA
+//             ...
+//             YCA  YCA  YCA  YCA  ... YCA  YCA
+//             YCA  YCA  YCA  YCA  ... YCA  YCA
+//
+//     Next, decimateChomaHoriz() eliminates the chroma values from
+//     the odd-numbered pixels in every scan line:
+//
+//             YCA  YA   YCA  YA   ... YCA  YA  
+//             YCA  YA   YCA  YA   ... YCA  YA  
+//             YCA  YA   YCA  YA   ... YCA  YA  
+//             YCA  YA   YCA  YA   ... YCA  YA  
+//             ...
+//             YCA  YA   YCA  YA   ... YCA  YA  
+//             YCA  YA   YCA  YA   ... YCA  YA  
+//
+//     decimateChromaVert() eliminates all chroma values from the
+//     odd-numbered scan lines:
+//
+//             YCA  YA   YCA  YA   ... YCA  YA  
+//             YA   YA   YA   YA   ... YA   YA  
+//             YCA  YA   YCA  YA   ... YCA  YA  
+//             YA   YA   YA   YA   ... YA   YA  
+//             ...
+//             YCA  YA   YCA  YA   ... YCA  YA  
+//             YA   YA   YA   YA   ... YA   YA  
+//
+//     Finally, roundYCA() reduces the precision of the luminance
+//     and chroma values so that the pixel data shrink more when
+//     they are saved in a compressed file.
+//
+//     The output of roundYCA() can be converted back to a set
+//     of RGBA pixel data that is visually very similar to the
+//     original RGBA image, by calling reconstructChromaHoriz(),
+//     reconstructChromaVert(), YCAtoRGBA(), and finally
+//     fixSaturation().
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfRgba.h>
+#include <ImfChromaticities.h>
+
+namespace Imf {
+namespace RgbaYca {
+
+
+//
+// Width of the chroma subsampling and reconstruction filters
+//
+
+static const int N = 27;
+static const int N2 = N / 2;
+
+
+//
+// Convert a set of primary chromaticities into a set of weighting
+// factors for computing a pixels's luminance, Y, from R, G and B
+// 
+
+Imath::V3f computeYw (const Chromaticities &cr);
+
+
+//
+// Convert an array of n RGBA pixels, rgbaIn, to YCA (luminance/chroma/alpha):
+//
+//     ycaOut[i].g = Y (rgbaIn[i]);
+//     ycaOut[i].r = RY (rgbaIn[i]);
+//     ycaOut[i].b = BY (rgbaIn[i]);
+//     ycaOut[i].a = aIsValid? rgbaIn[i].a: 1
+//
+// yw is a set of RGB-to-Y weighting factors, as computed by computeYw().
+//
+
+void RGBAtoYCA (const Imath::V3f &yw,
+               int n,
+               bool aIsValid,
+               const Rgba rgbaIn[/*n*/],
+               Rgba ycaOut[/*n*/]);
+
+//
+// Perform horizontal low-pass filtering and subsampling of
+// the chroma channels of an array of n pixels.  In order
+// to avoid indexing off the ends of the input array during
+// low-pass filtering, ycaIn must have N2 extra pixels at
+// both ends.  Before calling decimateChromaHoriz(), the extra
+// pixels should be filled with copies of the first and last
+// "real" input pixel.
+//
+
+void decimateChromaHoriz (int n,
+                         const Rgba ycaIn[/*n+N-1*/],
+                         Rgba ycaOut[/*n*/]);
+
+//
+// Perform vertical chroma channel low-pass filtering and subsampling.
+// N scan lines of input pixels are combined into a single scan line
+// of output pixels.
+//
+
+void decimateChromaVert (int n,
+                        const Rgba * const ycaIn[N],
+                        Rgba ycaOut[/*n*/]);
+
+//
+// Round the luminance and chroma channels of an array of YCA
+// pixels that has already been filtered and subsampled.
+// The signifcands of the pixels' luminance and chroma values
+// are rounded to roundY and roundC bits respectively.
+//
+
+void roundYCA (int n,
+              unsigned int roundY,
+              unsigned int roundC,
+              const Rgba ycaIn[/*n*/],
+              Rgba ycaOut[/*n*/]);
+
+//
+// For a scan line that has valid chroma data only for every other pixel,
+// reconstruct the missing chroma values.
+//
+
+void reconstructChromaHoriz (int n,
+                            const Rgba ycaIn[/*n+N-1*/],
+                            Rgba ycaOut[/*n*/]);
+
+//
+// For a scan line that has only luminance and no valid chroma data,
+// reconstruct chroma from the surronding N scan lines.
+//
+
+void reconstructChromaVert (int n,
+                           const Rgba * const ycaIn[N],
+                           Rgba ycaOut[/*n*/]);
+                        
+//
+// Convert an array of n YCA (luminance/chroma/alpha) pixels to RGBA.
+// This function is the inverse of RGBAtoYCA().
+// yw is a set of RGB-to-Y weighting factors, as computed by computeYw().
+//
+
+void YCAtoRGBA (const Imath::V3f &yw,
+               int n,
+               const Rgba ycaIn[/*n*/],
+               Rgba rgbaOut[/*n*/]);
+                        
+//
+// Eliminate super-saturated pixels:
+//
+// Converting an image from RGBA to YCA, low-pass filtering chroma,
+// and converting the result back to RGBA can produce pixels with
+// super-saturated colors, where one or two of the RGB components
+// become zero or negative.  (The low-pass and reconstruction filters
+// introduce some amount of ringing into the chroma components.
+// This can lead to negative RGB values near high-contrast edges.)
+//
+// The fixSaturation() function finds super-saturated pixels and
+// corrects them by desaturating their colors while maintaining
+// their luminance.  fixSaturation() takes three adjacent input
+// scan lines, rgbaIn[0], rgbaIn[1], rgbaIn[2], adjusts the
+// saturation of rgbaIn[1], and stores the result in rgbaOut.
+//
+
+void fixSaturation (const Imath::V3f &yw,
+                   int n,
+                   const Rgba * const rgbaIn[3],
+                   Rgba rgbaOut[/*n*/]);
+
+} // namespace RgbaYca
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfRleCompressor.cpp b/3rdparty/openexr/IlmImf/ImfRleCompressor.cpp
new file mode 100644 (file)
index 0000000..90619b4
--- /dev/null
@@ -0,0 +1,331 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class RleCompressor
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfRleCompressor.h>
+#include <ImfCheckedArithmetic.h>
+#include "Iex.h"
+
+namespace Imf {
+namespace {
+
+const int MIN_RUN_LENGTH = 3;
+const int MAX_RUN_LENGTH = 127;
+
+
+//
+// Compress an array of bytes, using run-length encoding,
+// and return the length of the compressed data.
+//
+
+int
+rleCompress (int inLength, const char in[], signed char out[])
+{
+    const char *inEnd = in + inLength;
+    const char *runStart = in;
+    const char *runEnd = in + 1;
+    signed char *outWrite = out;
+
+    while (runStart < inEnd)
+    {
+       while (runEnd < inEnd &&
+              *runStart == *runEnd &&
+              runEnd - runStart - 1 < MAX_RUN_LENGTH)
+       {
+           ++runEnd;
+       }
+
+       if (runEnd - runStart >= MIN_RUN_LENGTH)
+       {
+           //
+           // Compressable run
+           //
+
+           *outWrite++ = (runEnd - runStart) - 1;
+           *outWrite++ = *(signed char *) runStart;
+           runStart = runEnd;
+       }
+       else
+       {
+           //
+           // Uncompressable run
+           //
+
+           while (runEnd < inEnd &&
+                  ((runEnd + 1 >= inEnd ||
+                    *runEnd != *(runEnd + 1)) ||
+                   (runEnd + 2 >= inEnd ||
+                    *(runEnd + 1) != *(runEnd + 2))) &&
+                  runEnd - runStart < MAX_RUN_LENGTH)
+           {
+               ++runEnd;
+           }
+
+           *outWrite++ = runStart - runEnd;
+
+           while (runStart < runEnd)
+           {
+               *outWrite++ = *(signed char *) (runStart++);
+           }
+       }
+
+       ++runEnd;
+    }
+
+    return outWrite - out;
+}
+
+
+//
+// Uncompress an array of bytes compressed with rleCompress().
+// Returns the length of the oncompressed data, or 0 if the
+// length of the uncompressed data would be more than maxLength.
+//
+
+int
+rleUncompress (int inLength, int maxLength, const signed char in[], char out[])
+{
+    char *outStart = out;
+
+    while (inLength > 0)
+    {
+       if (*in < 0)
+       {
+           int count = -((int)*in++);
+           inLength -= count + 1;
+
+           if (0 > (maxLength -= count))
+               return 0;
+
+           while (count-- > 0)
+               *out++ = *(char *) (in++);
+       }
+       else
+       {
+           int count = *in++;
+           inLength -= 2;
+
+           if (0 > (maxLength -= count + 1))
+               return 0;
+
+           while (count-- >= 0)
+               *out++ = *(char *) in;
+
+           in++;
+       }
+    }
+
+    return out - outStart;
+}
+
+} // namespace
+
+
+RleCompressor::RleCompressor (const Header &hdr, size_t maxScanLineSize):
+    Compressor (hdr),
+    _maxScanLineSize (maxScanLineSize),
+    _tmpBuffer (0),
+    _outBuffer (0)
+{
+    _tmpBuffer = new char [maxScanLineSize];
+    _outBuffer = new char [uiMult (maxScanLineSize, size_t (3)) / 2];
+}
+
+
+RleCompressor::~RleCompressor ()
+{
+    delete [] _tmpBuffer;
+    delete [] _outBuffer;
+}
+
+
+int
+RleCompressor::numScanLines () const
+{
+    //
+    // This compressor compresses individual scan lines.
+    //
+
+    return 1;
+}
+
+
+int
+RleCompressor::compress (const char *inPtr,
+                        int inSize,
+                        int minY,
+                        const char *&outPtr)
+{
+    //
+    // Special case Â­- empty input buffer
+    //
+
+    if (inSize == 0)
+    {
+       outPtr = _outBuffer;
+       return 0;
+    }
+
+    //
+    // Reorder the pixel data.
+    //
+
+    {
+       char *t1 = _tmpBuffer;
+       char *t2 = _tmpBuffer + (inSize + 1) / 2;
+       const char *stop = inPtr + inSize;
+
+       while (true)
+       {
+           if (inPtr < stop)
+               *(t1++) = *(inPtr++);
+           else
+               break;
+
+           if (inPtr < stop)
+               *(t2++) = *(inPtr++);
+           else
+               break;
+       }
+    }
+
+    //
+    // Predictor.
+    //
+
+    {
+       unsigned char *t = (unsigned char *) _tmpBuffer + 1;
+       unsigned char *stop = (unsigned char *) _tmpBuffer + inSize;
+       int p = t[-1];
+
+       while (t < stop)
+       {
+           int d = int (t[0]) - p + (128 + 256);
+           p = t[0];
+           t[0] = d;
+           ++t;
+       }
+    }
+
+    //
+    // Run-length encode the data.
+    //
+
+    outPtr = _outBuffer;
+    return rleCompress (inSize, _tmpBuffer, (signed char *) _outBuffer);
+}
+
+
+int
+RleCompressor::uncompress (const char *inPtr,
+                          int inSize,
+                          int minY,
+                          const char *&outPtr)
+{
+    //
+    // Special case Â­- empty input buffer
+    //
+
+    if (inSize == 0)
+    {
+       outPtr = _outBuffer;
+       return 0;
+    }
+
+    //
+    // Decode the run-length encoded data
+    //
+
+    int outSize;
+
+    if (0 == (outSize = rleUncompress (inSize, _maxScanLineSize,
+                                      (const signed char *) inPtr,
+                                      _tmpBuffer)))
+    {
+       throw Iex::InputExc ("Data decoding (rle) failed.");
+    }
+
+    //
+    // Predictor.
+    //
+
+    {
+       unsigned char *t = (unsigned char *) _tmpBuffer + 1;
+       unsigned char *stop = (unsigned char *) _tmpBuffer + outSize;
+
+       while (t < stop)
+       {
+           int d = int (t[-1]) + int (t[0]) - 128;
+           t[0] = d;
+           ++t;
+       }
+    }
+
+    //
+    // Reorder the pixel data.
+    //
+
+    {
+       const char *t1 = _tmpBuffer;
+       const char *t2 = _tmpBuffer + (outSize + 1) / 2;
+       char *s = _outBuffer;
+       char *stop = s + outSize;
+
+       while (true)
+       {
+           if (s < stop)
+               *(s++) = *(t1++);
+           else
+               break;
+
+           if (s < stop)
+               *(s++) = *(t2++);
+           else
+               break;
+       }
+    }
+
+    outPtr = _outBuffer;
+    return outSize;
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfRleCompressor.h b/3rdparty/openexr/IlmImf/ImfRleCompressor.h
new file mode 100644 (file)
index 0000000..e272381
--- /dev/null
@@ -0,0 +1,79 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_RLE_COMPRESSOR_H
+#define INCLUDED_IMF_RLE_COMPRESSOR_H
+
+//-----------------------------------------------------------------------------
+//
+//     class RleCompressor -- performs run-length encoding
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfCompressor.h>
+
+namespace Imf {
+
+
+class RleCompressor: public Compressor
+{
+  public:
+
+    RleCompressor (const Header &hdr, size_t maxScanLineSize);
+    virtual ~RleCompressor ();
+
+    virtual int numScanLines () const;
+
+    virtual int        compress (const char *inPtr,
+                         int inSize,
+                         int minY,
+                         const char *&outPtr);
+
+    virtual int        uncompress (const char *inPtr,
+                           int inSize,
+                           int minY,
+                           const char *&outPtr);
+  private:
+
+    int                _maxScanLineSize;
+    char *     _tmpBuffer;
+    char *     _outBuffer;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp b/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp
new file mode 100644 (file)
index 0000000..c5c6465
--- /dev/null
@@ -0,0 +1,1021 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class ScanLineInputFile
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfScanLineInputFile.h>
+#include <ImfChannelList.h>
+#include <ImfMisc.h>
+#include <ImfStdIO.h>
+#include <ImfCompressor.h>
+#include "ImathBox.h"
+#include "ImathFun.h"
+#include <ImfXdr.h>
+#include <ImfConvert.h>
+#include <ImfThreading.h>
+#include "IlmThreadPool.h"
+#include "IlmThreadSemaphore.h"
+#include "IlmThreadMutex.h"
+#include "Iex.h"
+#include <string>
+#include <vector>
+#include <assert.h>
+
+
+namespace Imf {
+
+using Imath::Box2i;
+using Imath::divp;
+using Imath::modp;
+using std::string;
+using std::vector;
+using std::ifstream;
+using std::min;
+using std::max;
+using IlmThread::Mutex;
+using IlmThread::Lock;
+using IlmThread::Semaphore;
+using IlmThread::Task;
+using IlmThread::TaskGroup;
+using IlmThread::ThreadPool;
+
+namespace {
+
+struct InSliceInfo
+{
+    PixelType  typeInFrameBuffer;
+    PixelType  typeInFile;
+    char *     base;
+    size_t     xStride;
+    size_t     yStride;
+    int                xSampling;
+    int                ySampling;
+    bool       fill;
+    bool       skip;
+    double     fillValue;
+
+    InSliceInfo (PixelType typeInFrameBuffer = HALF,
+                PixelType typeInFile = HALF,
+                char *base = 0,
+                size_t xStride = 0,
+                size_t yStride = 0,
+                int xSampling = 1,
+                int ySampling = 1,
+                bool fill = false,
+                bool skip = false,
+                double fillValue = 0.0);
+};
+
+
+InSliceInfo::InSliceInfo (PixelType tifb,
+                         PixelType tifl,
+                         char *b,
+                         size_t xs, size_t ys,
+                         int xsm, int ysm,
+                         bool f, bool s,
+                         double fv)
+:
+    typeInFrameBuffer (tifb),
+    typeInFile (tifl),
+    base (b),
+    xStride (xs),
+    yStride (ys),
+    xSampling (xsm),
+    ySampling (ysm),
+    fill (f),
+    skip (s),
+    fillValue (fv)
+{
+    // empty
+}
+
+
+struct LineBuffer
+{
+    const char *       uncompressedData;
+    char *             buffer;
+    int                        dataSize;
+    int                        minY;
+    int                        maxY;
+    Compressor *       compressor;
+    Compressor::Format format;
+    int                        number;
+    bool               hasException;
+    string             exception;
+
+    LineBuffer (Compressor * const comp);
+    ~LineBuffer ();
+
+    inline void                wait () {_sem.wait();}
+    inline void                post () {_sem.post();}
+
+  private:
+
+    Semaphore          _sem;
+};
+
+
+LineBuffer::LineBuffer (Compressor *comp):
+    uncompressedData (0),
+    buffer (0),
+    dataSize (0),
+    compressor (comp),
+    format (defaultFormat(compressor)),
+    number (-1),
+    hasException (false),
+    exception (),
+    _sem (1)
+{
+    // empty
+}
+
+
+LineBuffer::~LineBuffer ()
+{
+    delete compressor;
+}
+
+} // namespace
+
+
+struct ScanLineInputFile::Data: public Mutex
+{
+    Header             header;             // the image header
+    int                        version;            // file's version
+    FrameBuffer                frameBuffer;        // framebuffer to write into
+    LineOrder          lineOrder;          // order of the scanlines in file
+    int                        minX;               // data window's min x coord
+    int                        maxX;               // data window's max x coord
+    int                        minY;               // data window's min y coord
+    int                        maxY;               // data window's max x coord
+    vector<Int64>      lineOffsets;        // stores offsets in file for
+                                           // each line
+    bool               fileIsComplete;     // True if no scanlines are missing
+                                           // in the file
+    int                        nextLineBufferMinY; // minimum y of the next linebuffer
+    vector<size_t>     bytesPerLine;       // combined size of a line over all
+                                            // channels
+    vector<size_t>     offsetInLineBuffer; // offset for each scanline in its
+                                            // linebuffer
+    vector<InSliceInfo>        slices;             // info about channels in file
+    IStream *          is;                 // file stream to read from
+    
+    vector<LineBuffer*> lineBuffers;        // each holds one line buffer
+    int                        linesInBuffer;      // number of scanlines each buffer
+                                            // holds
+    size_t             lineBufferSize;     // size of the line buffer
+
+     Data (IStream *is, int numThreads);
+    ~Data ();
+    
+    inline LineBuffer * getLineBuffer (int number); // hash function from line
+                                                   // buffer indices into our
+                                                   // vector of line buffers
+};
+
+
+ScanLineInputFile::Data::Data (IStream *is, int numThreads):
+    is (is)
+{
+    //
+    // We need at least one lineBuffer, but if threading is used,
+    // to keep n threads busy we need 2*n lineBuffers
+    //
+
+    lineBuffers.resize (max (1, 2 * numThreads));
+}
+
+
+ScanLineInputFile::Data::~Data ()
+{
+    for (size_t i = 0; i < lineBuffers.size(); i++)
+        delete lineBuffers[i];
+}
+
+
+inline LineBuffer *
+ScanLineInputFile::Data::getLineBuffer (int lineBufferNumber)
+{
+    return lineBuffers[lineBufferNumber % lineBuffers.size()];
+}
+
+
+namespace {
+
+
+void
+reconstructLineOffsets (IStream &is,
+                       LineOrder lineOrder,
+                       vector<Int64> &lineOffsets)
+{
+    Int64 position = is.tellg();
+
+    try
+    {
+       for (unsigned int i = 0; i < lineOffsets.size(); i++)
+       {
+           Int64 lineOffset = is.tellg();
+
+           int y;
+           Xdr::read <StreamIO> (is, y);
+
+           int dataSize;
+           Xdr::read <StreamIO> (is, dataSize);
+
+           Xdr::skip <StreamIO> (is, dataSize);
+
+           if (lineOrder == INCREASING_Y)
+               lineOffsets[i] = lineOffset;
+           else
+               lineOffsets[lineOffsets.size() - i - 1] = lineOffset;
+       }
+    }
+    catch (...)
+    {
+       //
+       // Suppress all exceptions.  This functions is
+       // called only to reconstruct the line offset
+       // table for incomplete files, and exceptions
+       // are likely.
+       //
+    }
+
+    is.clear();
+    is.seekg (position);
+}
+
+
+void
+readLineOffsets (IStream &is,
+                LineOrder lineOrder,
+                vector<Int64> &lineOffsets,
+                bool &complete)
+{
+    for (unsigned int i = 0; i < lineOffsets.size(); i++)
+    {
+       Xdr::read <StreamIO> (is, lineOffsets[i]);
+    }
+
+    complete = true;
+
+    for (unsigned int i = 0; i < lineOffsets.size(); i++)
+    {
+       if (lineOffsets[i] <= 0)
+       {
+           //
+           // Invalid data in the line offset table mean that
+           // the file is probably incomplete (the table is
+           // the last thing written to the file).  Either
+           // some process is still busy writing the file,
+           // or writing the file was aborted.
+           //
+           // We should still be able to read the existing
+           // parts of the file.  In order to do this, we
+           // have to make a sequential scan over the scan
+           // line data to reconstruct the line offset table.
+           //
+
+           complete = false;
+           reconstructLineOffsets (is, lineOrder, lineOffsets);
+           break;
+       }
+    }
+}
+
+
+void
+readPixelData (ScanLineInputFile::Data *ifd,
+              int minY,
+              char *&buffer,
+              int &dataSize)
+{
+    //
+    // Read a single line buffer from the input file.
+    //
+    // If the input file is not memory-mapped, we copy the pixel data into
+    // into the array pointed to by buffer.  If the file is memory-mapped,
+    // then we change where buffer points to instead of writing into the
+    // array (hence buffer needs to be a reference to a char *).
+    //
+
+    Int64 lineOffset =
+       ifd->lineOffsets[(minY - ifd->minY) / ifd->linesInBuffer];
+
+    if (lineOffset == 0)
+       THROW (Iex::InputExc, "Scan line " << minY << " is missing.");
+
+    //
+    // Seek to the start of the scan line in the file,
+    // if necessary.
+    //
+
+    if (ifd->nextLineBufferMinY != minY)
+       ifd->is->seekg (lineOffset);
+
+    //
+    // Read the data block's header.
+    //
+
+    int yInFile;
+
+    Xdr::read <StreamIO> (*ifd->is, yInFile);
+    Xdr::read <StreamIO> (*ifd->is, dataSize);
+    
+    if (yInFile != minY)
+        throw Iex::InputExc ("Unexpected data block y coordinate.");
+
+    if (dataSize > (int) ifd->lineBufferSize)
+       throw Iex::InputExc ("Unexpected data block length.");
+
+    //
+    // Read the pixel data.
+    //
+
+    if (ifd->is->isMemoryMapped ())
+        buffer = ifd->is->readMemoryMapped (dataSize);
+    else
+        ifd->is->read (buffer, dataSize);
+
+    //
+    // Keep track of which scan line is the next one in
+    // the file, so that we can avoid redundant seekg()
+    // operations (seekg() can be fairly expensive).
+    //
+
+    if (ifd->lineOrder == INCREASING_Y)
+       ifd->nextLineBufferMinY = minY + ifd->linesInBuffer;
+    else
+       ifd->nextLineBufferMinY = minY - ifd->linesInBuffer;
+}
+
+
+//
+// A LineBufferTask encapsulates the task uncompressing a set of
+// scanlines (line buffer) and copying them into the frame buffer.
+//
+
+class LineBufferTask : public Task
+{
+  public:
+
+    LineBufferTask (TaskGroup *group,
+                    ScanLineInputFile::Data *ifd,
+                   LineBuffer *lineBuffer,
+                    int scanLineMin,
+                   int scanLineMax);
+
+    virtual ~LineBufferTask ();
+
+    virtual void               execute ();
+
+  private:
+
+    ScanLineInputFile::Data *  _ifd;
+    LineBuffer *               _lineBuffer;
+    int                                _scanLineMin;
+    int                                _scanLineMax;
+};
+
+
+LineBufferTask::LineBufferTask
+    (TaskGroup *group,
+     ScanLineInputFile::Data *ifd,
+     LineBuffer *lineBuffer,
+     int scanLineMin,
+     int scanLineMax)
+:
+    Task (group),
+    _ifd (ifd),
+    _lineBuffer (lineBuffer),
+    _scanLineMin (scanLineMin),
+    _scanLineMax (scanLineMax)
+{
+    // empty
+}
+
+
+LineBufferTask::~LineBufferTask ()
+{
+    //
+    // Signal that the line buffer is now free
+    //
+
+    _lineBuffer->post ();
+}
+
+
+void
+LineBufferTask::execute ()
+{
+    try
+    {
+        //
+        // Uncompress the data, if necessary
+        //
+    
+        if (_lineBuffer->uncompressedData == 0)
+        {
+            int uncompressedSize = 0;
+            int maxY = min (_lineBuffer->maxY, _ifd->maxY);
+    
+            for (int i = _lineBuffer->minY - _ifd->minY;
+                 i <= maxY - _ifd->minY;
+                ++i)
+           {
+                uncompressedSize += (int) _ifd->bytesPerLine[i];
+           }
+    
+            if (_lineBuffer->compressor &&
+                _lineBuffer->dataSize < uncompressedSize)
+            {
+                _lineBuffer->format = _lineBuffer->compressor->format();
+
+                _lineBuffer->dataSize = _lineBuffer->compressor->uncompress
+                    (_lineBuffer->buffer, _lineBuffer->dataSize,
+                    _lineBuffer->minY, _lineBuffer->uncompressedData);
+            }
+            else
+            {
+                //
+                // If the line is uncompressed, it's in XDR format,
+                // regardless of the compressor's output format.
+                //
+    
+                _lineBuffer->format = Compressor::XDR;
+                _lineBuffer->uncompressedData = _lineBuffer->buffer;
+            }
+        }
+        
+        int yStart, yStop, dy;
+
+        if (_ifd->lineOrder == INCREASING_Y)
+        {
+            yStart = _scanLineMin;
+            yStop = _scanLineMax + 1;
+            dy = 1;
+        }
+        else
+        {
+            yStart = _scanLineMax;
+            yStop = _scanLineMin - 1;
+            dy = -1;
+        }
+    
+        for (int y = yStart; y != yStop; y += dy)
+        {
+            //
+            // Convert one scan line's worth of pixel data back
+            // from the machine-independent representation, and
+            // store the result in the frame buffer.
+            //
+    
+            const char *readPtr = _lineBuffer->uncompressedData +
+                                  _ifd->offsetInLineBuffer[y - _ifd->minY];
+    
+            //
+            // Iterate over all image channels.
+            //
+    
+            for (unsigned int i = 0; i < _ifd->slices.size(); ++i)
+            {
+                //
+                // Test if scan line y of this channel contains any data
+               // (the scan line contains data only if y % ySampling == 0).
+                //
+    
+                const InSliceInfo &slice = _ifd->slices[i];
+    
+                if (modp (y, slice.ySampling) != 0)
+                    continue;
+    
+                //
+                // Find the x coordinates of the leftmost and rightmost
+                // sampled pixels (i.e. pixels within the data window
+                // for which x % xSampling == 0).
+                //
+    
+                int dMinX = divp (_ifd->minX, slice.xSampling);
+                int dMaxX = divp (_ifd->maxX, slice.xSampling);
+    
+                //
+               // Fill the frame buffer with pixel data.
+                //
+    
+                if (slice.skip)
+                {
+                    //
+                    // The file contains data for this channel, but
+                    // the frame buffer contains no slice for this channel.
+                    //
+    
+                    skipChannel (readPtr, slice.typeInFile, dMaxX - dMinX + 1);
+                }
+                else
+                {
+                    //
+                    // The frame buffer contains a slice for this channel.
+                    //
+    
+                    char *linePtr  = slice.base +
+                                        divp (y, slice.ySampling) *
+                                        slice.yStride;
+    
+                    char *writePtr = linePtr + dMinX * slice.xStride;
+                    char *endPtr   = linePtr + dMaxX * slice.xStride;
+                    
+                    copyIntoFrameBuffer (readPtr, writePtr, endPtr,
+                                         slice.xStride, slice.fill,
+                                         slice.fillValue, _lineBuffer->format,
+                                         slice.typeInFrameBuffer,
+                                         slice.typeInFile);
+                }
+            }
+        }
+    }
+    catch (std::exception &e)
+    {
+        if (!_lineBuffer->hasException)
+        {
+            _lineBuffer->exception = e.what();
+            _lineBuffer->hasException = true;
+        }
+    }
+    catch (...)
+    {
+        if (!_lineBuffer->hasException)
+        {
+            _lineBuffer->exception = "unrecognized exception";
+            _lineBuffer->hasException = true;
+        }
+    }
+}
+
+
+LineBufferTask *
+newLineBufferTask
+    (TaskGroup *group,
+     ScanLineInputFile::Data *ifd,
+     int number,
+     int scanLineMin,
+     int scanLineMax)
+{
+    //
+    // Wait for a line buffer to become available, fill the line
+    // buffer with raw data from the file if necessary, and create
+    // a new LineBufferTask whose execute() method will uncompress
+    // the contents of the buffer and copy the pixels into the
+    // frame buffer.
+    //
+
+    LineBuffer *lineBuffer = ifd->getLineBuffer (number);
+
+    try
+    {
+       lineBuffer->wait ();
+       
+       if (lineBuffer->number != number)
+       {
+           lineBuffer->minY = ifd->minY + number * ifd->linesInBuffer;
+           lineBuffer->maxY = lineBuffer->minY + ifd->linesInBuffer - 1;
+           
+           lineBuffer->number = number;
+           lineBuffer->uncompressedData = 0;
+
+           readPixelData (ifd, lineBuffer->minY,
+                          lineBuffer->buffer,
+                          lineBuffer->dataSize);
+       }
+    }
+       catch (std::exception &e)
+       {
+       if (!lineBuffer->hasException)
+       {
+               lineBuffer->exception = e.what();
+               lineBuffer->hasException = true;
+       }
+       lineBuffer->number = -1;
+       lineBuffer->post();\
+       throw;
+       }
+       catch (...)
+    {
+       //
+       // Reading from the file caused an exception.
+       // Signal that the line buffer is free, and
+       // re-throw the exception.
+       //
+
+       lineBuffer->exception = "unrecognized exception";
+       lineBuffer->hasException = true;
+       lineBuffer->number = -1;
+       lineBuffer->post();
+       throw;
+    }
+    
+    scanLineMin = max (lineBuffer->minY, scanLineMin);
+    scanLineMax = min (lineBuffer->maxY, scanLineMax);
+
+    return new LineBufferTask (group, ifd, lineBuffer,
+                              scanLineMin, scanLineMax);
+}
+
+} // namespace
+
+
+ScanLineInputFile::ScanLineInputFile
+    (const Header &header,
+     IStream *is,
+     int numThreads)
+:
+    _data (new Data (is, numThreads))
+{
+    try
+    {
+       _data->header = header;
+
+       _data->lineOrder = _data->header.lineOrder();
+
+       const Box2i &dataWindow = _data->header.dataWindow();
+
+       _data->minX = dataWindow.min.x;
+       _data->maxX = dataWindow.max.x;
+       _data->minY = dataWindow.min.y;
+       _data->maxY = dataWindow.max.y;
+
+       size_t maxBytesPerLine = bytesPerLineTable (_data->header,
+                                                    _data->bytesPerLine);
+
+        for (size_t i = 0; i < _data->lineBuffers.size(); i++)
+        {
+            _data->lineBuffers[i] = new LineBuffer (newCompressor
+                                                (_data->header.compression(),
+                                                 maxBytesPerLine,
+                                                 _data->header));
+        }
+
+        _data->linesInBuffer =
+           numLinesInBuffer (_data->lineBuffers[0]->compressor);
+
+        _data->lineBufferSize = maxBytesPerLine * _data->linesInBuffer;
+
+        if (!_data->is->isMemoryMapped())
+            for (size_t i = 0; i < _data->lineBuffers.size(); i++)
+                _data->lineBuffers[i]->buffer = new char[_data->lineBufferSize];
+
+       _data->nextLineBufferMinY = _data->minY - 1;
+
+       offsetInLineBufferTable (_data->bytesPerLine,
+                                _data->linesInBuffer,
+                                _data->offsetInLineBuffer);
+
+       int lineOffsetSize = (dataWindow.max.y - dataWindow.min.y +
+                             _data->linesInBuffer) / _data->linesInBuffer;
+
+       _data->lineOffsets.resize (lineOffsetSize);
+
+       readLineOffsets (*_data->is,
+                        _data->lineOrder,
+                        _data->lineOffsets,
+                        _data->fileIsComplete);
+    }
+    catch (...)
+    {
+       delete _data;
+       throw;
+    }
+}
+
+
+ScanLineInputFile::~ScanLineInputFile ()
+{
+    if (!_data->is->isMemoryMapped())
+        for (size_t i = 0; i < _data->lineBuffers.size(); i++)
+            delete [] _data->lineBuffers[i]->buffer;
+
+    delete _data;
+}
+
+
+const char *
+ScanLineInputFile::fileName () const
+{
+    return _data->is->fileName();
+}
+
+
+const Header &
+ScanLineInputFile::header () const
+{
+    return _data->header;
+}
+
+
+int
+ScanLineInputFile::version () const
+{
+    return _data->version;
+}
+
+
+void   
+ScanLineInputFile::setFrameBuffer (const FrameBuffer &frameBuffer)
+{
+    Lock lock (*_data);
+
+    //
+    // Check if the new frame buffer descriptor is
+    // compatible with the image file header.
+    //
+
+    const ChannelList &channels = _data->header.channels();
+
+    for (FrameBuffer::ConstIterator j = frameBuffer.begin();
+        j != frameBuffer.end();
+        ++j)
+    {
+       ChannelList::ConstIterator i = channels.find (j.name());
+
+       if (i == channels.end())
+           continue;
+
+       if (i.channel().xSampling != j.slice().xSampling ||
+           i.channel().ySampling != j.slice().ySampling)
+           THROW (Iex::ArgExc, "X and/or y subsampling factors "
+                               "of \"" << i.name() << "\" channel "
+                               "of input file \"" << fileName() << "\" are "
+                               "not compatible with the frame buffer's "
+                               "subsampling factors.");
+    }
+
+    //
+    // Initialize the slice table for readPixels().
+    //
+
+    vector<InSliceInfo> slices;
+    ChannelList::ConstIterator i = channels.begin();
+
+    for (FrameBuffer::ConstIterator j = frameBuffer.begin();
+        j != frameBuffer.end();
+        ++j)
+    {
+       while (i != channels.end() && strcmp (i.name(), j.name()) < 0)
+       {
+           //
+           // Channel i is present in the file but not
+           // in the frame buffer; data for channel i
+           // will be skipped during readPixels().
+           //
+
+           slices.push_back (InSliceInfo (i.channel().type,
+                                          i.channel().type,
+                                          0, // base
+                                          0, // xStride
+                                          0, // yStride
+                                          i.channel().xSampling,
+                                          i.channel().ySampling,
+                                          false,  // fill
+                                          true, // skip
+                                          0.0)); // fillValue
+           ++i;
+       }
+
+       bool fill = false;
+
+       if (i == channels.end() || strcmp (i.name(), j.name()) > 0)
+       {
+           //
+           // Channel i is present in the frame buffer, but not in the file.
+           // In the frame buffer, slice j will be filled with a default value.
+           //
+
+           fill = true;
+       }
+
+       slices.push_back (InSliceInfo (j.slice().type,
+                                      fill? j.slice().type:
+                                            i.channel().type,
+                                      j.slice().base,
+                                      j.slice().xStride,
+                                      j.slice().yStride,
+                                      j.slice().xSampling,
+                                      j.slice().ySampling,
+                                      fill,
+                                      false, // skip
+                                      j.slice().fillValue));
+
+       if (i != channels.end() && !fill)
+           ++i;
+    }
+
+    //
+    // Store the new frame buffer.
+    //
+
+    _data->frameBuffer = frameBuffer;
+    _data->slices = slices;
+}
+
+
+const FrameBuffer &
+ScanLineInputFile::frameBuffer () const
+{
+    Lock lock (*_data);
+    return _data->frameBuffer;
+}
+
+
+bool
+ScanLineInputFile::isComplete () const
+{
+    return _data->fileIsComplete;
+}
+
+
+void   
+ScanLineInputFile::readPixels (int scanLine1, int scanLine2)
+{
+    try
+    {
+        Lock lock (*_data);
+
+       if (_data->slices.size() == 0)
+           throw Iex::ArgExc ("No frame buffer specified "
+                              "as pixel data destination.");
+
+       int scanLineMin = min (scanLine1, scanLine2);
+       int scanLineMax = max (scanLine1, scanLine2);
+
+       if (scanLineMin < _data->minY || scanLineMax > _data->maxY)
+           throw Iex::ArgExc ("Tried to read scan line outside "
+                              "the image file's data window.");
+
+        //
+        // We impose a numbering scheme on the lineBuffers where the first
+        // scanline is contained in lineBuffer 1.
+        //
+        // Determine the first and last lineBuffer numbers in this scanline
+        // range. We always attempt to read the scanlines in the order that
+        // they are stored in the file.
+        //
+
+        int start, stop, dl;
+
+        if (_data->lineOrder == INCREASING_Y)
+        {
+            start = (scanLineMin - _data->minY) / _data->linesInBuffer;
+            stop  = (scanLineMax - _data->minY) / _data->linesInBuffer + 1;
+            dl = 1;
+        }
+        else
+        {
+            start = (scanLineMax - _data->minY) / _data->linesInBuffer;
+            stop  = (scanLineMin - _data->minY) / _data->linesInBuffer - 1;
+            dl = -1;
+        }
+
+        //
+        // Create a task group for all line buffer tasks.  When the
+       // task group goes out of scope, the destructor waits until
+       // all tasks are complete.
+        //
+        
+        {
+            TaskGroup taskGroup;
+    
+            //
+            // Add the line buffer tasks.
+            //
+            // The tasks will execute in the order that they are created
+            // because we lock the line buffers during construction and the
+            // constructors are called by the main thread.  Hence, in order
+           // for a successive task to execute the previous task which
+           // used that line buffer must have completed already.
+            //
+    
+            for (int l = start; l != stop; l += dl)
+            {
+                ThreadPool::addGlobalTask (newLineBufferTask (&taskGroup,
+                                                              _data, l,
+                                                              scanLineMin,
+                                                              scanLineMax));
+            }
+        
+           //
+            // finish all tasks
+           //
+        }
+        
+       //
+       // Exeption handling:
+       //
+       // LineBufferTask::execute() may have encountered exceptions, but
+       // those exceptions occurred in another thread, not in the thread
+       // that is executing this call to ScanLineInputFile::readPixels().
+       // LineBufferTask::execute() has caught all exceptions and stored
+       // the exceptions' what() strings in the line buffers.
+       // Now we check if any line buffer contains a stored exception; if
+       // this is the case then we re-throw the exception in this thread.
+       // (It is possible that multiple line buffers contain stored
+       // exceptions.  We re-throw the first exception we find and
+       // ignore all others.)
+       //
+
+       const string *exception = 0;
+
+        for (int i = 0; i < _data->lineBuffers.size(); ++i)
+       {
+            LineBuffer *lineBuffer = _data->lineBuffers[i];
+
+           if (lineBuffer->hasException && !exception)
+               exception = &lineBuffer->exception;
+
+           lineBuffer->hasException = false;
+       }
+
+       if (exception)
+           throw Iex::IoExc (*exception);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Error reading pixel data from image "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+void   
+ScanLineInputFile::readPixels (int scanLine)
+{
+    readPixels (scanLine, scanLine);
+}
+
+
+void
+ScanLineInputFile::rawPixelData (int firstScanLine,
+                                const char *&pixelData,
+                                int &pixelDataSize)
+{
+    try
+    {
+        Lock lock (*_data);
+
+       if (firstScanLine < _data->minY || firstScanLine > _data->maxY)
+       {
+           throw Iex::ArgExc ("Tried to read scan line outside "
+                              "the image file's data window.");
+       }
+
+        int minY = lineBufferMinY
+           (firstScanLine, _data->minY, _data->linesInBuffer);
+
+       readPixelData
+           (_data, minY, _data->lineBuffers[0]->buffer, pixelDataSize);
+
+       pixelData = _data->lineBuffers[0]->buffer;
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Error reading pixel data from image "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfScanLineInputFile.h b/3rdparty/openexr/IlmImf/ImfScanLineInputFile.h
new file mode 100644 (file)
index 0000000..02b36e2
--- /dev/null
@@ -0,0 +1,172 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_SCAN_LINE_INPUT_FILE_H
+#define INCLUDED_IMF_SCAN_LINE_INPUT_FILE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class ScanLineInputFile
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfHeader.h>
+#include <ImfFrameBuffer.h>
+#include <ImfThreading.h>
+
+namespace Imf {
+
+
+class ScanLineInputFile
+{
+  public:
+
+    //------------
+    // Constructor
+    //------------
+
+    ScanLineInputFile (const Header &header, IStream *is,
+                       int numThreads = globalThreadCount());
+
+
+    //-----------------------------------------
+    // Destructor -- deallocates internal data
+    // structures, but does not close the file.
+    //-----------------------------------------
+
+    virtual ~ScanLineInputFile ();
+
+
+    //------------------------
+    // Access to the file name
+    //------------------------
+
+    const char *       fileName () const;
+
+
+    //--------------------------
+    // Access to the file header
+    //--------------------------
+
+    const Header &     header () const;
+
+
+    //----------------------------------
+    // Access to the file format version
+    //----------------------------------
+
+    int                        version () const;
+
+
+    //-----------------------------------------------------------
+    // Set the current frame buffer -- copies the FrameBuffer
+    // object into the InputFile object.
+    //
+    // The current frame buffer is the destination for the pixel
+    // data read from the file.  The current frame buffer must be
+    // set at least once before readPixels() is called.
+    // The current frame buffer can be changed after each call
+    // to readPixels().
+    //-----------------------------------------------------------
+
+    void               setFrameBuffer (const FrameBuffer &frameBuffer);
+
+
+    //-----------------------------------
+    // Access to the current frame buffer
+    //-----------------------------------
+
+    const FrameBuffer &        frameBuffer () const;
+
+
+    //---------------------------------------------------------------
+    // Check if the file is complete:
+    //
+    // isComplete() returns true if all pixels in the data window are
+    // present in the input file, or false if any pixels are missing.
+    // (Another program may still be busy writing the file, or file
+    // writing may have been aborted prematurely.)
+    //---------------------------------------------------------------
+
+    bool               isComplete () const;
+
+
+    //---------------------------------------------------------------
+    // Read pixel data:
+    //
+    // readPixels(s1,s2) reads all scan lines with y coordinates
+    // in the interval [min (s1, s2), max (s1, s2)] from the file,
+    // and stores them in the current frame buffer.
+    //
+    // Both s1 and s2 must be within the interval
+    // [header().dataWindow().min.y, header.dataWindow().max.y]
+    //
+    // The scan lines can be read from the file in random order, and
+    // individual scan lines may be skipped or read multiple times.
+    // For maximum efficiency, the scan lines should be read in the
+    // order in which they were written to the file.
+    //
+    // readPixels(s) calls readPixels(s,s).
+    //
+    // If threading is enabled, readPixels (s1, s2) tries to perform
+    // decopmression of multiple scanlines in parallel.
+    //
+    //---------------------------------------------------------------
+
+    void               readPixels (int scanLine1, int scanLine2);
+    void               readPixels (int scanLine);
+
+
+    //----------------------------------------------
+    // Read a block of raw pixel data from the file,
+    // without uncompressing it (this function is
+    // used to implement OutputFile::copyPixels()).
+    //----------------------------------------------
+
+    void               rawPixelData (int firstScanLine,
+                                     const char *&pixelData,
+                                     int &pixelDataSize);
+
+    struct Data;
+
+  private:
+
+    Data *             _data;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfStandardAttributes.cpp b/3rdparty/openexr/IlmImf/ImfStandardAttributes.cpp
new file mode 100644 (file)
index 0000000..baa2c1f
--- /dev/null
@@ -0,0 +1,118 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     Optional Standard Attributes
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfStandardAttributes.h>
+
+
+#define IMF_STRING(name) #name
+
+#define IMF_STD_ATTRIBUTE_IMP(name,suffix,type)                                 \
+                                                                        \
+    void                                                                \
+    add##suffix (Header &header, const type &value)                     \
+    {                                                                   \
+       header.insert (IMF_STRING (name), TypedAttribute<type> (value)); \
+    }                                                                   \
+                                                                        \
+    bool                                                                \
+    has##suffix (const Header &header)                                  \
+    {                                                                   \
+       return header.findTypedAttribute <TypedAttribute <type> >        \
+               (IMF_STRING (name)) != 0;                                \
+    }                                                                   \
+                                                                        \
+    const TypedAttribute<type> &                                        \
+    name##Attribute (const Header &header)                              \
+    {                                                                   \
+       return header.typedAttribute <TypedAttribute <type> >            \
+               (IMF_STRING (name));                                     \
+    }                                                                   \
+                                                                        \
+    TypedAttribute<type> &                                              \
+    name##Attribute (Header &header)                                    \
+    {                                                                   \
+       return header.typedAttribute <TypedAttribute <type> >            \
+               (IMF_STRING (name));                                     \
+    }                                                                   \
+                                                                        \
+    const type &                                                        \
+    name (const Header &header)                                                 \
+    {                                                                   \
+       return name##Attribute(header).value();                          \
+    }                                                                   \
+                                                                        \
+    type &                                                              \
+    name (Header &header)                                               \
+    {                                                                   \
+       return name##Attribute(header).value();                          \
+    }
+
+
+namespace Imf {
+
+   
+IMF_STD_ATTRIBUTE_IMP (chromaticities, Chromaticities, Chromaticities)
+IMF_STD_ATTRIBUTE_IMP (whiteLuminance, WhiteLuminance, float)
+IMF_STD_ATTRIBUTE_IMP (adoptedNeutral, AdoptedNeutral, Imath::V2f)
+IMF_STD_ATTRIBUTE_IMP (renderingTransform, RenderingTransform, std::string)
+IMF_STD_ATTRIBUTE_IMP (lookModTransform, LookModTransform, std::string)
+IMF_STD_ATTRIBUTE_IMP (xDensity, XDensity, float)
+IMF_STD_ATTRIBUTE_IMP (owner, Owner, std::string)
+IMF_STD_ATTRIBUTE_IMP (comments, Comments, std::string)
+IMF_STD_ATTRIBUTE_IMP (capDate, CapDate, std::string)
+IMF_STD_ATTRIBUTE_IMP (utcOffset, UtcOffset, float)
+IMF_STD_ATTRIBUTE_IMP (longitude, Longitude, float)
+IMF_STD_ATTRIBUTE_IMP (latitude, Latitude, float)
+IMF_STD_ATTRIBUTE_IMP (altitude, Altitude, float)
+IMF_STD_ATTRIBUTE_IMP (focus, Focus, float)
+IMF_STD_ATTRIBUTE_IMP (expTime, ExpTime, float)
+IMF_STD_ATTRIBUTE_IMP (aperture, Aperture, float)
+IMF_STD_ATTRIBUTE_IMP (isoSpeed, IsoSpeed, float)
+IMF_STD_ATTRIBUTE_IMP (envmap, Envmap, Envmap)
+IMF_STD_ATTRIBUTE_IMP (keyCode, KeyCode, KeyCode)
+IMF_STD_ATTRIBUTE_IMP (timeCode, TimeCode, TimeCode)
+IMF_STD_ATTRIBUTE_IMP (wrapmodes, Wrapmodes, std::string)
+IMF_STD_ATTRIBUTE_IMP (framesPerSecond, FramesPerSecond, Rational)
+IMF_STD_ATTRIBUTE_IMP (multiView, MultiView, StringVector)
+IMF_STD_ATTRIBUTE_IMP (worldToCamera, WorldToCamera, Imath::M44f)
+IMF_STD_ATTRIBUTE_IMP (worldToNDC, WorldToNDC, Imath::M44f)
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfStandardAttributes.h b/3rdparty/openexr/IlmImf/ImfStandardAttributes.h
new file mode 100644 (file)
index 0000000..38783b1
--- /dev/null
@@ -0,0 +1,343 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_STANDARD_ATTRIBUTES_H
+#define INCLUDED_IMF_STANDARD_ATTRIBUTES_H
+
+//-----------------------------------------------------------------------------
+//
+//     Optional Standard Attributes -- these attributes are "optional"
+//     because not every image file header has them, but they define a
+//     "standard" way to represent commonly used data in the file header.
+//
+//     For each attribute, with name "foo", and type "T", the following
+//     functions are automatically generated via macros:
+//
+//     void                       addFoo (Header &header, const T &value);
+//     bool                       hasFoo (const Header &header);
+//     const TypedAttribute<T> &  fooAttribute (const Header &header);
+//     TypedAttribute<T> &        fooAttribute (Header &header);
+//     const T &                  foo (const Header &Header);
+//     T &                        foo (Header &Header);
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfHeader.h>
+#include <ImfChromaticitiesAttribute.h>
+#include <ImfEnvmapAttribute.h>
+#include <ImfFloatAttribute.h>
+#include <ImfKeyCodeAttribute.h>
+#include <ImfMatrixAttribute.h>
+#include <ImfRationalAttribute.h>
+#include <ImfStringAttribute.h>
+#include <ImfStringVectorAttribute.h>
+#include <ImfTimeCodeAttribute.h>
+#include <ImfVecAttribute.h>
+
+#define IMF_STD_ATTRIBUTE_DEF(name,suffix,type)                                      \
+                                                                             \
+    void                        add##suffix (Header &header, const type &v); \
+    bool                        has##suffix (const Header &header);          \
+    const TypedAttribute<type> & name##Attribute (const Header &header);      \
+    TypedAttribute<type> &      name##Attribute (Header &header);            \
+    const type &                name (const Header &header);                 \
+    type &                      name (Header &header);
+
+
+namespace Imf {
+
+//
+// chromaticities -- for RGB images, specifies the CIE (x,y)
+// chromaticities of the primaries and the white point
+//
+
+IMF_STD_ATTRIBUTE_DEF (chromaticities, Chromaticities, Chromaticities)
+
+
+//
+// whiteLuminance -- for RGB images, defines the luminance, in Nits
+// (candelas per square meter) of the RGB value (1.0, 1.0, 1.0).
+//
+// If the chromaticities and the whiteLuminance of an RGB image are
+// known, then it is possible to convert the image's pixels from RGB
+// to CIE XYZ tristimulus values (see function RGBtoXYZ() in header
+// file ImfChromaticities.h).
+// 
+//
+
+IMF_STD_ATTRIBUTE_DEF (whiteLuminance, WhiteLuminance, float)
+
+
+//
+// adoptedNeutral -- specifies the CIE (x,y) coordinates that should
+// be considered neutral during color rendering.  Pixels in the image
+// file whose (x,y) coordinates match the adoptedNeutral value should
+// be mapped to neutral values on the display.
+//
+
+IMF_STD_ATTRIBUTE_DEF (adoptedNeutral, AdoptedNeutral, Imath::V2f)
+
+
+//
+// renderingTransform, lookModTransform -- specify the names of the
+// CTL functions that implements the intended color rendering and look
+// modification transforms for this image.
+// 
+
+IMF_STD_ATTRIBUTE_DEF (renderingTransform, RenderingTransform, std::string)
+IMF_STD_ATTRIBUTE_DEF (lookModTransform, LookModTransform, std::string)
+
+
+//
+// xDensity -- horizontal output density, in pixels per inch.
+// The image's vertical output density is xDensity * pixelAspectRatio.
+//
+
+IMF_STD_ATTRIBUTE_DEF (xDensity, XDensity, float)
+
+
+//
+// owner -- name of the owner of the image
+//
+
+IMF_STD_ATTRIBUTE_DEF (owner, Owner, std::string)
+   
+
+//
+// comments -- additional image information in human-readable
+// form, for example a verbal description of the image
+//
+
+IMF_STD_ATTRIBUTE_DEF (comments, Comments, std::string)
+
+
+//
+// capDate -- the date when the image was created or captured,
+// in local time, and formatted as
+//
+//    YYYY:MM:DD hh:mm:ss
+//
+// where YYYY is the year (4 digits, e.g. 2003), MM is the month
+// (2 digits, 01, 02, ... 12), DD is the day of the month (2 digits,
+// 01, 02, ... 31), hh is the hour (2 digits, 00, 01, ... 23), mm
+// is the minute, and ss is the second (2 digits, 00, 01, ... 59).
+//
+//
+
+IMF_STD_ATTRIBUTE_DEF (capDate, CapDate, std::string)
+
+
+//
+// utcOffset -- offset of local time at capDate from
+// Universal Coordinated Time (UTC), in seconds:
+//
+//    UTC == local time + utcOffset
+//
+
+IMF_STD_ATTRIBUTE_DEF (utcOffset, UtcOffset, float)
+
+
+//
+// longitude, latitude, altitude -- for images of real objects, the
+// location where the image was recorded.  Longitude and latitude are
+// in degrees east of Greenwich and north of the equator.  Altitude
+// is in meters above sea level.  For example, Kathmandu, Nepal is
+// at longitude 85.317, latitude 27.717, altitude 1305.
+//
+
+IMF_STD_ATTRIBUTE_DEF (longitude, Longitude, float)
+IMF_STD_ATTRIBUTE_DEF (latitude, Latitude, float)
+IMF_STD_ATTRIBUTE_DEF (altitude, Altitude, float)
+
+
+//
+// focus -- the camera's focus distance, in meters
+//
+
+IMF_STD_ATTRIBUTE_DEF (focus, Focus, float)
+
+
+//
+// exposure -- exposure time, in seconds
+//
+
+IMF_STD_ATTRIBUTE_DEF (expTime, ExpTime, float)
+
+
+//
+// aperture -- the camera's lens aperture, in f-stops (focal length
+// of the lens divided by the diameter of the iris opening)
+//
+
+IMF_STD_ATTRIBUTE_DEF (aperture, Aperture, float)
+
+
+//
+// isoSpeed -- the ISO speed of the film or image sensor
+// that was used to record the image
+//
+
+IMF_STD_ATTRIBUTE_DEF (isoSpeed, IsoSpeed, float)
+
+
+//
+// envmap -- if this attribute is present, the image represents
+// an environment map.  The attribute's value defines how 3D
+// directions are mapped to 2D pixel locations.  For details
+// see header file ImfEnvmap.h
+//
+
+IMF_STD_ATTRIBUTE_DEF (envmap, Envmap, Envmap)
+
+
+//
+// keyCode -- for motion picture film frames.  Identifies film
+// manufacturer, film type, film roll and frame position within
+// the roll.
+//
+
+IMF_STD_ATTRIBUTE_DEF (keyCode, KeyCode, KeyCode)
+
+
+//
+// timeCode -- time and control code
+//
+
+IMF_STD_ATTRIBUTE_DEF (timeCode, TimeCode, TimeCode)
+
+
+//
+// wrapmodes -- determines how texture map images are extrapolated.
+// If an OpenEXR file is used as a texture map for 3D rendering,
+// texture coordinates (0.0, 0.0) and (1.0, 1.0) correspond to
+// the upper left and lower right corners of the data window.
+// If the image is mapped onto a surface with texture coordinates
+// outside the zero-to-one range, then the image must be extrapolated.
+// This attribute tells the renderer how to do this extrapolation.
+// The attribute contains either a pair of comma-separated keywords,
+// to specify separate extrapolation modes for the horizontal and
+// vertical directions; or a single keyword, to specify extrapolation
+// in both directions (e.g. "clamp,periodic" or "clamp").  Extra white
+// space surrounding the keywords is allowed, but should be ignored
+// by the renderer ("clamp, black " is equivalent to "clamp,black").
+// The keywords listed below are predefined; some renderers may support
+// additional extrapolation modes:
+//
+//     black           pixels outside the zero-to-one range are black
+//
+//     clamp           texture coordinates less than 0.0 and greater
+//                     than 1.0 are clamped to 0.0 and 1.0 respectively
+//
+//     periodic        the texture image repeats periodically
+//
+//     mirror          the texture image repeats periodically, but
+//                     every other instance is mirrored
+//
+
+IMF_STD_ATTRIBUTE_DEF (wrapmodes, Wrapmodes, std::string)
+
+
+//
+// framesPerSecond -- defines the nominal playback frame rate for image
+// sequences, in frames per second.  Every image in a sequence should
+// have a framesPerSecond attribute, and the attribute value should be
+// the same for all images in the sequence.  If an image sequence has
+// no framesPerSecond attribute, playback software should assume that
+// the frame rate for the sequence is 24 frames per second.
+//
+// In order to allow exact representation of NTSC frame and field rates,
+// framesPerSecond is stored as a rational number.  A rational number is
+// a pair of integers, n and d, that represents the value n/d.
+//
+// For the exact values of commonly used frame rates, please see header
+// file ImfFramesPerSecond.h.
+//
+
+IMF_STD_ATTRIBUTE_DEF (framesPerSecond, FramesPerSecond, Rational)
+
+
+//
+// multiView -- defines the view names for multi-view image files.
+// A multi-view image contains two or more views of the same scene,
+// as seen from different viewpoints, for example a left-eye and
+// a right-eye view for stereo displays.  The multiView attribute
+// lists the names of the views in an image, and a naming convention
+// identifies the channels that belong to each view.
+//
+// For details, please see header file ImfMultiView.h
+//
+
+IMF_STD_ATTRIBUTE_DEF (multiView , MultiView, StringVector)
+
+
+// 
+// worldToCamera -- for images generated by 3D computer graphics rendering,
+// a matrix that transforms 3D points from the world to the camera coordinate
+// space of the renderer.
+// 
+// The camera coordinate space is left-handed.  Its origin indicates the
+// location of the camera.  The positive x and y axes correspond to the
+// "right" and "up" directions in the rendered image.  The positive z
+// axis indicates the camera's viewing direction.  (Objects in front of
+// the camera have positive z coordinates.)
+// 
+// Camera coordinate space in OpenEXR is the same as in Pixar's Renderman.
+// 
+
+IMF_STD_ATTRIBUTE_DEF (worldToCamera, WorldToCamera, Imath::M44f)
+
+
+// 
+// worldToNDC -- for images generated by 3D computer graphics rendering, a
+// matrix that transforms 3D points from the world to the Normalized Device
+// Coordinate (NDC) space of the renderer.
+// 
+// NDC is a 2D coordinate space that corresponds to the image plane, with
+// positive x and pointing to the right and y positive pointing down.  The
+// coordinates (0, 0) and (1, 1) correspond to the upper left and lower right
+// corners of the OpenEXR display window.
+// 
+// To transform a 3D point in word space into a 2D point in NDC space,
+// multiply the 3D point by the worldToNDC matrix and discard the z
+// coordinate.
+// 
+// NDC space in OpenEXR is the same as in Pixar's Renderman.
+// 
+
+IMF_STD_ATTRIBUTE_DEF (worldToNDC, WorldToNDC, Imath::M44f)
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfStdIO.cpp b/3rdparty/openexr/IlmImf/ImfStdIO.cpp
new file mode 100644 (file)
index 0000000..5028410
--- /dev/null
@@ -0,0 +1,240 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.67
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     Low-level file input and output for OpenEXR
+//     based on C++ standard iostreams.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfStdIO.h>
+#include "Iex.h"
+#include <errno.h>
+
+using namespace std;
+
+namespace Imf {
+namespace {
+
+void
+clearError ()
+{
+    errno = 0;
+}
+
+
+bool
+checkError (istream &is, streamsize expected = 0)
+{
+    if (!is)
+    {
+       if (errno)
+           Iex::throwErrnoExc();
+
+       if (is.gcount() < expected) 
+       {
+               THROW (Iex::InputExc, "Early end of file: read " << is.gcount() 
+                       << " out of " << expected << " requested bytes.");
+       }
+       return false;
+    }
+
+    return true;
+}
+
+
+void
+checkError (ostream &os)
+{
+    if (!os)
+    {
+       if (errno)
+           Iex::throwErrnoExc();
+
+       throw Iex::ErrnoExc ("File output failed.");
+    }
+}
+
+} // namespace
+
+
+StdIFStream::StdIFStream (const char fileName[]):
+    IStream (fileName),
+    _is (new ifstream (fileName, ios_base::binary)),
+    _deleteStream (true)
+{
+    if (!*_is)
+    {
+       delete _is;
+       Iex::throwErrnoExc();
+    }
+}
+
+    
+StdIFStream::StdIFStream (ifstream &is, const char fileName[]):
+    IStream (fileName),
+    _is (&is),
+    _deleteStream (false)
+{
+    // empty
+}
+
+
+StdIFStream::~StdIFStream ()
+{
+    if (_deleteStream)
+       delete _is;
+}
+
+
+bool
+StdIFStream::read (char c[/*n*/], int n)
+{
+    if (!*_is)
+        throw Iex::InputExc ("Unexpected end of file.");
+
+    clearError();
+    _is->read (c, n);
+    return checkError (*_is, n);
+}
+
+
+Int64
+StdIFStream::tellg ()
+{
+    return std::streamoff (_is->tellg());
+}
+
+
+void
+StdIFStream::seekg (Int64 pos)
+{
+    _is->seekg (pos);
+    checkError (*_is);
+}
+
+
+void
+StdIFStream::clear ()
+{
+    _is->clear();
+}
+
+
+StdOFStream::StdOFStream (const char fileName[]):
+    OStream (fileName),
+    _os (new ofstream (fileName, ios_base::binary)),
+    _deleteStream (true)
+{
+    if (!*_os)
+    {
+       delete _os;
+       Iex::throwErrnoExc();
+    }
+}
+
+
+StdOFStream::StdOFStream (ofstream &os, const char fileName[]):
+    OStream (fileName),
+    _os (&os),
+    _deleteStream (false)
+{
+    // empty
+}
+
+
+StdOFStream::~StdOFStream ()
+{
+    if (_deleteStream)
+       delete _os;
+}
+
+
+void
+StdOFStream::write (const char c[/*n*/], int n)
+{
+    clearError();
+    _os->write (c, n);
+    checkError (*_os);
+}
+
+
+Int64
+StdOFStream::tellp ()
+{
+    return std::streamoff (_os->tellp());
+}
+
+
+void
+StdOFStream::seekp (Int64 pos)
+{
+    _os->seekp (pos);
+    checkError (*_os);
+}
+
+
+StdOSStream::StdOSStream (): OStream ("(string)")
+{
+    // empty
+}
+
+
+void
+StdOSStream::write (const char c[/*n*/], int n)
+{
+    clearError();
+    _os.write (c, n);
+    checkError (_os);
+}
+
+
+Int64
+StdOSStream::tellp ()
+{
+    return std::streamoff (_os.tellp());
+}
+
+
+void
+StdOSStream::seekp (Int64 pos)
+{
+    _os.seekp (pos);
+    checkError (_os);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfStdIO.h b/3rdparty/openexr/IlmImf/ImfStdIO.h
new file mode 100644 (file)
index 0000000..0137b45
--- /dev/null
@@ -0,0 +1,156 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_STD_IO_H
+#define INCLUDED_IMF_STD_IO_H
+
+//-----------------------------------------------------------------------------
+//
+//     Low-level file input and output for OpenEXR
+//     based on C++ standard iostreams.
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfIO.h>
+#include <fstream>
+#include <sstream>
+
+namespace Imf {
+
+//-------------------------------------------
+// class StdIFStream -- an implementation of
+// class IStream based on class std::ifstream
+//-------------------------------------------
+
+class StdIFStream: public IStream
+{
+  public:
+
+    //-------------------------------------------------------
+    // A constructor that opens the file with the given name.
+    // The destructor will close the file.
+    //-------------------------------------------------------
+
+    StdIFStream (const char fileName[]);
+
+    
+    //---------------------------------------------------------
+    // A constructor that uses a std::ifstream that has already
+    // been opened by the caller.  The StdIFStream's destructor
+    // will not close the std::ifstream.
+    //---------------------------------------------------------
+
+    StdIFStream (std::ifstream &is, const char fileName[]);
+
+
+    virtual ~StdIFStream ();
+
+    virtual bool       read (char c[/*n*/], int n);
+    virtual Int64      tellg ();
+    virtual void       seekg (Int64 pos);
+    virtual void       clear ();
+
+  private:
+
+    std::ifstream *    _is;
+    bool               _deleteStream;
+};
+
+
+//-------------------------------------------
+// class StdOFStream -- an implementation of
+// class OStream based on class std::ofstream
+//-------------------------------------------
+
+class StdOFStream: public OStream
+{
+  public:
+
+    //-------------------------------------------------------
+    // A constructor that opens the file with the given name.
+    // The destructor will close the file.
+    //-------------------------------------------------------
+
+    StdOFStream (const char fileName[]);
+    
+
+    //---------------------------------------------------------
+    // A constructor that uses a std::ofstream that has already
+    // been opened by the caller.  The StdOFStream's destructor
+    // will not close the std::ofstream.
+    //---------------------------------------------------------
+
+    StdOFStream (std::ofstream &os, const char fileName[]);
+
+
+    virtual ~StdOFStream ();
+
+    virtual void       write (const char c[/*n*/], int n);
+    virtual Int64      tellp ();
+    virtual void       seekp (Int64 pos);
+
+  private:
+
+    std::ofstream *    _os;
+    bool               _deleteStream;
+};
+
+
+//------------------------------------------------
+// class StdOSStream -- an implementation of class
+// OStream, based on class std::ostringstream
+//------------------------------------------------
+
+class StdOSStream: public OStream
+{
+  public:
+
+    StdOSStream ();
+
+    virtual void       write (const char c[/*n*/], int n);
+    virtual Int64      tellp ();
+    virtual void       seekp (Int64 pos);
+
+    std::string                str () const {return _os.str();}
+
+  private:
+
+    std::ostringstream         _os;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfStringAttribute.cpp b/3rdparty/openexr/IlmImf/ImfStringAttribute.cpp
new file mode 100644 (file)
index 0000000..6f6ca94
--- /dev/null
@@ -0,0 +1,79 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class StringAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfStringAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+StringAttribute::staticTypeName ()
+{
+    return "string";
+}
+
+
+template <>
+void
+StringAttribute::writeValueTo (OStream &os, int version) const
+{
+    int size = _value.size();
+
+    for (int i = 0; i < size; i++)
+       Xdr::write <StreamIO> (os, _value[i]);
+}
+
+
+template <>
+void
+StringAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    _value.resize (size);
+
+    for (int i = 0; i < size; i++)
+       Xdr::read <StreamIO> (is, _value[i]);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfStringAttribute.h b/3rdparty/openexr/IlmImf/ImfStringAttribute.h
new file mode 100644 (file)
index 0000000..3ce76eb
--- /dev/null
@@ -0,0 +1,66 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_STRING_ATTRIBUTE_H
+#define INCLUDED_IMF_STRING_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class StringAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include <string>
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<std::string> StringAttribute;
+template <> const char *StringAttribute::staticTypeName ();
+template <> void StringAttribute::writeValueTo (OStream &, int) const;
+template <> void StringAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfStringAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfStringVectorAttribute.cpp b/3rdparty/openexr/IlmImf/ImfStringVectorAttribute.cpp
new file mode 100644 (file)
index 0000000..76b21be
--- /dev/null
@@ -0,0 +1,94 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2007, Weta Digital Ltd
+// 
+// All rights reserved.
+// 
+// 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 Weta Digital 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class StringAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfStringVectorAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+StringVectorAttribute::staticTypeName ()
+{
+    return "stringvector";
+}
+
+
+template <>
+void
+StringVectorAttribute::writeValueTo (OStream &os, int version) const
+{
+    int size = _value.size();
+
+    for (int i = 0; i < size; i++)
+    {
+        int strSize = _value[i].size();
+        Xdr::write <StreamIO> (os, strSize);
+       Xdr::write <StreamIO> (os, &_value[i][0], strSize);
+    }
+}
+
+
+template <>
+void
+StringVectorAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    int read = 0;
+
+    while (read < size)
+    {   
+       int strSize;
+       Xdr::read <StreamIO> (is, strSize);
+       read += Xdr::size<int>();       
+
+       std::string str;
+       str.resize (strSize);
+  
+       Xdr::read<StreamIO> (is, &str[0], strSize);
+       read += strSize;
+
+       _value.push_back (str);
+    }
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfStringVectorAttribute.h b/3rdparty/openexr/IlmImf/ImfStringVectorAttribute.h
new file mode 100644 (file)
index 0000000..752a486
--- /dev/null
@@ -0,0 +1,66 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2007, Weta Digital Ltd
+// 
+// All rights reserved.
+// 
+// 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 Weta Digital 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_STRINGVECTOR_ATTRIBUTE_H
+#define INCLUDED_IMF_STRINGVECTOR_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class StringVectorAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include <string>
+#include <vector>
+
+
+namespace Imf {
+
+typedef std::vector<std::string> StringVector;
+typedef TypedAttribute<StringVector> StringVectorAttribute;
+template <> const char *StringVectorAttribute::staticTypeName ();
+template <> void StringVectorAttribute::writeValueTo (OStream &, int) const;
+template <> void StringVectorAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfStringVectorAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfTestFile.cpp b/3rdparty/openexr/IlmImf/ImfTestFile.cpp
new file mode 100644 (file)
index 0000000..1bf7872
--- /dev/null
@@ -0,0 +1,135 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     Utility routines to test quickly if a given
+//     file is an OpenEXR file, and whether the
+//     file is scanline-based or tiled.
+//
+//-----------------------------------------------------------------------------
+
+
+#include <ImfTestFile.h>
+#include <ImfStdIO.h>
+#include <ImfXdr.h>
+#include <ImfVersion.h>
+
+namespace Imf {
+
+
+bool
+isOpenExrFile (const char fileName[], bool &tiled)
+{
+    try
+    {
+       StdIFStream is (fileName);
+
+       int magic, version;
+       Xdr::read <StreamIO> (is, magic);
+       Xdr::read <StreamIO> (is, version);
+
+       tiled = isTiled (version);
+       return magic == MAGIC;
+    }
+    catch (...)
+    {
+       tiled = false;
+       return false;
+    }
+}
+
+
+bool
+isOpenExrFile (const char fileName[])
+{
+    bool tiled;
+    return isOpenExrFile (fileName, tiled);
+}
+
+
+bool
+isTiledOpenExrFile (const char fileName[])
+{
+    bool exr, tiled;
+    exr = isOpenExrFile (fileName, tiled);
+    return exr && tiled;
+}
+
+
+bool
+isOpenExrFile (IStream &is, bool &tiled)
+{
+    try
+    {
+       Int64 pos = is.tellg();
+
+       if (pos != 0)
+           is.seekg (0);
+
+       int magic, version;
+       Xdr::read <StreamIO> (is, magic);
+       Xdr::read <StreamIO> (is, version);
+
+       is.seekg (pos);
+
+       tiled = isTiled (version);
+       return magic == MAGIC;
+    }
+    catch (...)
+    {
+       is.clear();
+       tiled = false;
+       return false;
+    }
+}
+
+
+bool
+isOpenExrFile (IStream &is)
+{
+    bool tiled;
+    return isOpenExrFile (is, tiled);
+}
+
+
+bool
+isTiledOpenExrFile (IStream &is)
+{
+    bool exr, tiled;
+    exr = isOpenExrFile (is, tiled);
+    return exr && tiled;
+}
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfTestFile.h b/3rdparty/openexr/IlmImf/ImfTestFile.h
new file mode 100644 (file)
index 0000000..d81c61a
--- /dev/null
@@ -0,0 +1,63 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_TEST_FILE_H
+#define INCLUDED_IMF_TEST_FILE_H
+
+//-----------------------------------------------------------------------------
+//
+//     Utility routines to test quickly if a given
+//     file is an OpenEXR file, and whether the
+//     file is scanline-based or tiled.
+//
+//-----------------------------------------------------------------------------
+
+
+namespace Imf {
+
+class IStream;
+
+
+bool isOpenExrFile (const char fileName[], bool &isTiled);
+bool isOpenExrFile (const char fileName[]);
+bool isTiledOpenExrFile (const char fileName[]);
+bool isOpenExrFile (IStream &is, bool &isTiled);
+bool isOpenExrFile (IStream &is);
+bool isTiledOpenExrFile (IStream &is);
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfThreading.cpp b/3rdparty/openexr/IlmImf/ImfThreading.cpp
new file mode 100644 (file)
index 0000000..80f569c
--- /dev/null
@@ -0,0 +1,60 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     Threading support for the IlmImf library
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmThreadPool.h"
+
+namespace Imf {
+
+
+int
+globalThreadCount ()
+{
+    return IlmThread::ThreadPool::globalThreadPool().numThreads();
+}
+
+
+void
+setGlobalThreadCount (int count)
+{
+    IlmThread::ThreadPool::globalThreadPool().setNumThreads (count);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfThreading.h b/3rdparty/openexr/IlmImf/ImfThreading.h
new file mode 100644 (file)
index 0000000..50fe35e
--- /dev/null
@@ -0,0 +1,92 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_THREADING_H
+#define INCLUDED_IMF_THREADING_H
+
+//-----------------------------------------------------------------------------
+//
+//     Threading support for the IlmImf library
+//
+//     The IlmImf library uses threads to perform reading and writing
+//     of OpenEXR files in parallel.  The thread that calls the library
+//     always performs the actual file IO (this is usually the main
+//     application thread) whereas a several worker threads perform
+//     data compression and decompression.  The number of worker
+//     threads can be any non-negative value (a value of zero reverts
+//     to single-threaded operation).  As long as there is at least
+//     one worker thread, file IO and compression can potentially be
+//     done concurrently through pinelining.  If there are two or more
+//     worker threads, then pipelining as well as concurrent compression
+//     of multiple blocks can be performed.
+// 
+//     Threading in the Imf library is controllable at two granularities:
+//
+//     * The functions in this file query and control the total number
+//       of worker threads, which will be created globally for the whole
+//       library.  Regardless of how many input or output files are
+//       opened simultaneously, the library will use at most this number
+//       of worker threads to perform all work.  The default number of
+//       global worker threads is zero (i.e. single-threaded operation;
+//       everything happens in the thread that calls the library).
+//
+//     * Furthermore, it is possible to set the number of threads that
+//       each input or output file should keep busy.  This number can
+//       be explicitly set for each file.  The default behavior is for
+//       each file to try to occupy all worker threads in the library's
+//       thread pool.
+//
+//-----------------------------------------------------------------------------
+
+namespace Imf {
+
+
+//-----------------------------------------------------------------------------
+// Return the number of Imf-global worker threads used for parallel
+// compression and decompression of OpenEXR files.
+//-----------------------------------------------------------------------------
+    
+int     globalThreadCount ();
+
+
+//-----------------------------------------------------------------------------
+// Change the number of Imf-global worker threads
+//-----------------------------------------------------------------------------
+
+void    setGlobalThreadCount (int count);
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfTileDescription.h b/3rdparty/openexr/IlmImf/ImfTileDescription.h
new file mode 100644 (file)
index 0000000..78bcc0b
--- /dev/null
@@ -0,0 +1,102 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_TILE_DESCRIPTION_H
+#define INCLUDED_IMF_TILE_DESCRIPTION_H
+
+//-----------------------------------------------------------------------------
+//
+//     class TileDescription and enum LevelMode
+//
+//-----------------------------------------------------------------------------
+
+namespace Imf {
+
+
+enum LevelMode
+{
+    ONE_LEVEL = 0,
+    MIPMAP_LEVELS = 1,
+    RIPMAP_LEVELS = 2,
+    
+    NUM_LEVELMODES     // number of different level modes
+};
+
+
+enum LevelRoundingMode
+{
+    ROUND_DOWN = 0,
+    ROUND_UP = 1,
+
+    NUM_ROUNDINGMODES  // number of different rounding modes
+};
+
+
+class TileDescription
+{
+  public:
+
+    unsigned int       xSize;          // size of a tile in the x dimension
+    unsigned int       ySize;          // size of a tile in the y dimension
+    LevelMode          mode;
+    LevelRoundingMode  roundingMode;
+    
+    TileDescription (unsigned int xs = 32,
+                    unsigned int ys = 32,
+                     LevelMode m = ONE_LEVEL,
+                    LevelRoundingMode r = ROUND_DOWN)
+    :
+        xSize (xs),
+       ySize (ys),
+       mode (m),
+       roundingMode (r)
+    {
+       // empty
+    }
+
+    bool
+    operator == (const TileDescription &other) const
+    {
+       return xSize        == other.xSize &&
+              ySize        == other.ySize &&
+              mode         == other.mode &&
+              roundingMode == other.roundingMode;
+    }
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfTileDescriptionAttribute.cpp b/3rdparty/openexr/IlmImf/ImfTileDescriptionAttribute.cpp
new file mode 100644 (file)
index 0000000..e15f10f
--- /dev/null
@@ -0,0 +1,85 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class TileDescriptionAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfTileDescriptionAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+TileDescriptionAttribute::staticTypeName ()
+{
+    return "tiledesc";
+}
+
+
+template <>
+void
+TileDescriptionAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.xSize);
+    Xdr::write <StreamIO> (os, _value.ySize);
+
+    unsigned char tmp = _value.mode | (_value.roundingMode << 4);
+    Xdr::write <StreamIO> (os, tmp);
+}
+
+
+template <>
+void
+TileDescriptionAttribute::readValueFrom (IStream &is,
+                                        int size,
+                                        int version)
+{
+    Xdr::read <StreamIO> (is, _value.xSize);
+    Xdr::read <StreamIO> (is, _value.ySize);
+
+    unsigned char tmp;
+    Xdr::read <StreamIO> (is, tmp);
+    _value.mode = LevelMode (tmp & 0x0f);
+    _value.roundingMode = LevelRoundingMode ((tmp >> 4) & 0x0f);
+    
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfTileDescriptionAttribute.h b/3rdparty/openexr/IlmImf/ImfTileDescriptionAttribute.h
new file mode 100644 (file)
index 0000000..8a7125a
--- /dev/null
@@ -0,0 +1,73 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_TILE_DESCRIPTION_ATTRIBUTE_H
+#define INCLUDED_IMF_TILE_DESCRIPTION_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class TileDescriptionAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include <ImfTileDescription.h>
+
+namespace Imf {
+
+
+typedef TypedAttribute<TileDescription> TileDescriptionAttribute;
+
+template <>
+const char *
+TileDescriptionAttribute::staticTypeName ();
+
+template <>
+void
+TileDescriptionAttribute::writeValueTo (OStream &, int) const;
+
+template <>
+void
+TileDescriptionAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfTileDescriptionAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfTileOffsets.cpp b/3rdparty/openexr/IlmImf/ImfTileOffsets.cpp
new file mode 100644 (file)
index 0000000..b1fa29c
--- /dev/null
@@ -0,0 +1,385 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class TileOffsets
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfTileOffsets.h>
+#include <ImfXdr.h>
+#include <ImfIO.h>
+#include "Iex.h"
+
+namespace Imf {
+
+
+TileOffsets::TileOffsets (LevelMode mode,
+                         int numXLevels, int numYLevels,
+                         const int *numXTiles, const int *numYTiles)
+:
+    _mode (mode),
+    _numXLevels (numXLevels),
+    _numYLevels (numYLevels)
+{
+    switch (_mode)
+    {
+      case ONE_LEVEL:
+      case MIPMAP_LEVELS:
+
+        _offsets.resize (_numXLevels);
+
+        for (unsigned int l = 0; l < _offsets.size(); ++l)
+        {
+            _offsets[l].resize (numYTiles[l]);
+
+            for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy)
+           {
+                _offsets[l][dy].resize (numXTiles[l]);
+            }
+        }
+        break;
+
+      case RIPMAP_LEVELS:
+
+        _offsets.resize (_numXLevels * _numYLevels);
+
+        for (unsigned int ly = 0; ly < _numYLevels; ++ly)
+        {
+            for (unsigned int lx = 0; lx < _numXLevels; ++lx)
+            {
+                int l = ly * _numXLevels + lx;
+                _offsets[l].resize (numYTiles[ly]);
+
+                for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy)
+                {
+                    _offsets[l][dy].resize (numXTiles[lx]);
+                }
+            }
+        }
+        break;
+    }
+}
+
+
+bool
+TileOffsets::anyOffsetsAreInvalid () const
+{
+    for (unsigned int l = 0; l < _offsets.size(); ++l)
+       for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy)
+           for (unsigned int dx = 0; dx < _offsets[l][dy].size(); ++dx)
+               if (_offsets[l][dy][dx] <= 0)
+                   return true;
+    
+    return false;
+}
+
+
+void
+TileOffsets::findTiles (IStream &is)
+{
+    for (unsigned int l = 0; l < _offsets.size(); ++l)
+    {
+       for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy)
+       {
+           for (unsigned int dx = 0; dx < _offsets[l][dy].size(); ++dx)
+           {
+               Int64 tileOffset = is.tellg();
+
+               int tileX;
+               Xdr::read <StreamIO> (is, tileX);
+
+               int tileY;
+               Xdr::read <StreamIO> (is, tileY);
+
+               int levelX;
+               Xdr::read <StreamIO> (is, levelX);
+
+               int levelY;
+               Xdr::read <StreamIO> (is, levelY);
+
+               int dataSize;
+               Xdr::read <StreamIO> (is, dataSize);
+
+               Xdr::skip <StreamIO> (is, dataSize);
+
+               if (!isValidTile(tileX, tileY, levelX, levelY))
+                   return;
+
+               operator () (tileX, tileY, levelX, levelY) = tileOffset;
+           }
+       }
+    }
+}
+
+
+void
+TileOffsets::reconstructFromFile (IStream &is)
+{
+    //
+    // Try to reconstruct a missing tile offset table by sequentially
+    // scanning through the file, and recording the offsets in the file
+    // of the tiles we find.
+    //
+
+    Int64 position = is.tellg();
+
+    try
+    {
+       findTiles (is);
+    }
+    catch (...)
+    {
+        //
+        // Suppress all exceptions.  This function is called only to
+       // reconstruct the tile offset table for incomplete files,
+       // and exceptions are likely.
+        //
+    }
+
+    is.clear();
+    is.seekg (position);
+}
+
+
+void
+TileOffsets::readFrom (IStream &is, bool &complete)
+{
+    //
+    // Read in the tile offsets from the file's tile offset table
+    //
+
+    for (unsigned int l = 0; l < _offsets.size(); ++l)
+       for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy)
+           for (unsigned int dx = 0; dx < _offsets[l][dy].size(); ++dx)
+               Xdr::read <StreamIO> (is, _offsets[l][dy][dx]);
+
+    //
+    // Check if any tile offsets are invalid.
+    //
+    // Invalid offsets mean that the file is probably incomplete
+    // (the offset table is the last thing written to the file).
+    // Either some process is still busy writing the file, or
+    // writing the file was aborted.
+    //
+    // We should still be able to read the existing parts of the
+    // file.  In order to do this, we have to make a sequential
+    // scan over the scan tile to reconstruct the tile offset
+    // table.
+    //
+
+    if (anyOffsetsAreInvalid())
+    {
+       complete = false;
+       reconstructFromFile (is);
+    }
+    else
+    {
+       complete = true;
+    }
+
+}
+
+
+Int64
+TileOffsets::writeTo (OStream &os) const
+{
+    //
+    // Write the tile offset table to the file, and
+    // return the position of the start of the table
+    // in the file.
+    //
+    
+    Int64 pos = os.tellp();
+
+    if (pos == -1)
+       Iex::throwErrnoExc ("Cannot determine current file position (%T).");
+
+    for (unsigned int l = 0; l < _offsets.size(); ++l)
+       for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy)
+           for (unsigned int dx = 0; dx < _offsets[l][dy].size(); ++dx)
+               Xdr::write <StreamIO> (os, _offsets[l][dy][dx]);
+
+    return pos;
+}
+
+
+bool
+TileOffsets::isEmpty () const
+{
+    for (unsigned int l = 0; l < _offsets.size(); ++l)
+       for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy)
+           for (unsigned int dx = 0; dx < _offsets[l][dy].size(); ++dx)
+               if (_offsets[l][dy][dx] != 0)
+                   return false;
+    return true;
+}
+
+
+bool
+TileOffsets::isValidTile (int dx, int dy, int lx, int ly) const
+{
+    switch (_mode)
+    {
+      case ONE_LEVEL:
+
+        if (lx == 0 &&
+           ly == 0 &&
+           _offsets.size() > 0 &&
+            _offsets[0].size() > dy &&
+            _offsets[0][dy].size() > dx)
+       {
+            return true;
+       }
+
+        break;
+
+      case MIPMAP_LEVELS:
+
+        if (lx < _numXLevels &&
+           ly < _numYLevels &&
+            _offsets.size() > lx &&
+            _offsets[lx].size() > dy &&
+            _offsets[lx][dy].size() > dx)
+       {
+            return true;
+       }
+
+        break;
+
+      case RIPMAP_LEVELS:
+
+        if (lx < _numXLevels &&
+           ly < _numYLevels &&
+            _offsets.size() > lx + ly * _numXLevels &&
+            _offsets[lx + ly * _numXLevels].size() > dy &&
+            _offsets[lx + ly * _numXLevels][dy].size() > dx)
+       {
+            return true;
+       }
+
+        break;
+
+      default:
+
+        return false;
+    }
+    
+    return false;
+}
+
+
+Int64 &
+TileOffsets::operator () (int dx, int dy, int lx, int ly)
+{
+    //
+    // Looks up the value of the tile with tile coordinate (dx, dy)
+    // and level number (lx, ly) in the _offsets array, and returns
+    // the cooresponding offset.
+    //
+
+    switch (_mode)
+    {
+      case ONE_LEVEL:
+
+        return _offsets[0][dy][dx];
+        break;
+
+      case MIPMAP_LEVELS:
+
+        return _offsets[lx][dy][dx];
+        break;
+
+      case RIPMAP_LEVELS:
+
+        return _offsets[lx + ly * _numXLevels][dy][dx];
+        break;
+
+      default:
+
+        throw Iex::ArgExc ("Unknown LevelMode format.");
+    }
+}
+
+
+Int64 &
+TileOffsets::operator () (int dx, int dy, int l)
+{
+    return operator () (dx, dy, l, l);
+}
+
+
+const Int64 &
+TileOffsets::operator () (int dx, int dy, int lx, int ly) const
+{
+    //
+    // Looks up the value of the tile with tile coordinate (dx, dy)
+    // and level number (lx, ly) in the _offsets array, and returns
+    // the cooresponding offset.
+    //
+
+    switch (_mode)
+    {
+      case ONE_LEVEL:
+
+        return _offsets[0][dy][dx];
+        break;
+
+      case MIPMAP_LEVELS:
+
+        return _offsets[lx][dy][dx];
+        break;
+
+      case RIPMAP_LEVELS:
+
+        return _offsets[lx + ly * _numXLevels][dy][dx];
+        break;
+
+      default:
+
+        throw Iex::ArgExc ("Unknown LevelMode format.");
+    }
+}
+
+
+const Int64 &
+TileOffsets::operator () (int dx, int dy, int l) const
+{
+    return operator () (dx, dy, l, l);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfTileOffsets.h b/3rdparty/openexr/IlmImf/ImfTileOffsets.h
new file mode 100644 (file)
index 0000000..7b2b4c2
--- /dev/null
@@ -0,0 +1,107 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_TILE_OFFSETS_H
+#define INCLUDED_IMF_TILE_OFFSETS_H
+
+//-----------------------------------------------------------------------------
+//
+//     class TileOffsets
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfTileDescription.h>
+#include <ImfInt64.h>
+#include <vector>
+
+namespace Imf {
+
+class IStream;
+class OStream;
+
+
+class TileOffsets
+{
+  public:
+
+    TileOffsets (LevelMode mode = ONE_LEVEL,
+                int numXLevels = 0,
+                int numYLevels = 0,
+                const int *numXTiles = 0,
+                const int *numYTiles = 0);    
+
+    // --------
+    // File I/O
+    // --------
+
+    void               readFrom (IStream &is, bool &complete);
+    Int64              writeTo (OStream &os) const;
+
+
+    //-----------------------------------------------------------
+    // Test if the tileOffsets array is empty (all entries are 0)
+    //-----------------------------------------------------------
+
+    bool               isEmpty () const;
+    
+
+    //-----------------------
+    // Access to the elements
+    //-----------------------
+
+    Int64 &            operator () (int dx, int dy, int lx, int ly);
+    Int64 &            operator () (int dx, int dy, int l);
+    const Int64 &      operator () (int dx, int dy, int lx, int ly) const;
+    const Int64 &      operator () (int dx, int dy, int l) const;
+
+  private:
+  
+    void               findTiles (IStream &is);
+    void               reconstructFromFile (IStream &is);
+    bool               readTile (IStream &is);
+    bool               anyOffsetsAreInvalid () const;
+    bool               isValidTile (int dx, int dy, int lx, int ly) const;
+
+    LevelMode          _mode;
+    int                        _numXLevels;
+    int                        _numYLevels;
+
+    std::vector<std::vector<std::vector <Int64> > > _offsets;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfTiledInputFile.cpp b/3rdparty/openexr/IlmImf/ImfTiledInputFile.cpp
new file mode 100644 (file)
index 0000000..a45c3ac
--- /dev/null
@@ -0,0 +1,1302 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class TiledInputFile
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfTiledInputFile.h>
+#include <ImfTileDescriptionAttribute.h>
+#include <ImfChannelList.h>
+#include <ImfMisc.h>
+#include <ImfTiledMisc.h>
+#include <ImfStdIO.h>
+#include <ImfCompressor.h>
+#include "ImathBox.h"
+#include <ImfXdr.h>
+#include <ImfConvert.h>
+#include <ImfVersion.h>
+#include <ImfTileOffsets.h>
+#include <ImfThreading.h>
+#include "IlmThreadPool.h"
+#include "IlmThreadSemaphore.h"
+#include "IlmThreadMutex.h"
+#include "ImathVec.h"
+#include "Iex.h"
+#include <string>
+#include <vector>
+#include <algorithm>
+#include <assert.h>
+
+
+namespace Imf {
+
+using Imath::Box2i;
+using Imath::V2i;
+using std::string;
+using std::vector;
+using std::min;
+using std::max;
+using IlmThread::Mutex;
+using IlmThread::Lock;
+using IlmThread::Semaphore;
+using IlmThread::Task;
+using IlmThread::TaskGroup;
+using IlmThread::ThreadPool;
+
+namespace {
+
+struct TInSliceInfo
+{
+    PixelType   typeInFrameBuffer;
+    PixelType   typeInFile;
+    char *      base;
+    size_t      xStride;
+    size_t      yStride;
+    bool        fill;
+    bool        skip;
+    double      fillValue;
+    int         xTileCoords;
+    int         yTileCoords;
+
+    TInSliceInfo (PixelType typeInFrameBuffer = HALF,
+                  PixelType typeInFile = HALF,
+                  char *base = 0,
+                  size_t xStride = 0,
+                  size_t yStride = 0,
+                  bool fill = false,
+                  bool skip = false,
+                  double fillValue = 0.0,
+                  int xTileCoords = 0,
+                  int yTileCoords = 0);
+};
+
+
+TInSliceInfo::TInSliceInfo (PixelType tifb,
+                            PixelType tifl,
+                            char *b,
+                            size_t xs, size_t ys,
+                            bool f, bool s,
+                            double fv,
+                            int xtc,
+                            int ytc)
+:
+    typeInFrameBuffer (tifb),
+    typeInFile (tifl),
+    base (b),
+    xStride (xs),
+    yStride (ys),
+    fill (f),
+    skip (s),
+    fillValue (fv),
+    xTileCoords (xtc),
+    yTileCoords (ytc)
+{
+    // empty
+}
+
+
+struct TileBuffer
+{
+    const char *       uncompressedData;
+    char *             buffer;
+    int                        dataSize;
+    Compressor *       compressor;
+    Compressor::Format format;
+    int                        dx;
+    int                        dy;
+    int                        lx;
+    int                        ly;
+    bool               hasException;
+    string             exception;
+
+     TileBuffer (Compressor * const comp);
+    ~TileBuffer ();
+
+    inline void                wait () {_sem.wait();}
+    inline void                post () {_sem.post();}
+
+ protected:
+
+    Semaphore _sem;
+};
+
+
+TileBuffer::TileBuffer (Compressor *comp):
+    uncompressedData (0),
+    dataSize (0),
+    compressor (comp),
+    format (defaultFormat (compressor)),
+    dx (-1),
+    dy (-1),
+    lx (-1),
+    ly (-1),
+    hasException (false),
+    exception (),
+    _sem (1)
+{
+    // empty
+}
+
+
+TileBuffer::~TileBuffer ()
+{
+    delete compressor;
+}
+
+} // namespace
+
+
+//
+// struct TiledInputFile::Data stores things that will be
+// needed between calls to readTile()
+//
+
+struct TiledInputFile::Data: public Mutex
+{
+    Header         header;                 // the image header
+    TileDescription tileDesc;              // describes the tile layout
+    int                    version;                // file's version
+    FrameBuffer            frameBuffer;            // framebuffer to write into
+    LineOrder      lineOrder;              // the file's lineorder
+    int                    minX;                   // data window's min x coord
+    int                    maxX;                   // data window's max x coord
+    int                    minY;                   // data window's min y coord
+    int                    maxY;                   // data window's max x coord
+
+    int                    numXLevels;             // number of x levels
+    int                    numYLevels;             // number of y levels
+    int *          numXTiles;              // number of x tiles at a level
+    int *          numYTiles;              // number of y tiles at a level
+
+    TileOffsets            tileOffsets;            // stores offsets in file for
+                                           // each tile
+
+    bool           fileIsComplete;         // True if no tiles are missing
+                                           // in the file
+
+    Int64          currentPosition;        // file offset for current tile,
+                                           // used to prevent unnecessary
+                                           // seeking
+
+    vector<TInSliceInfo> slices;           // info about channels in file
+    IStream *      is;                     // file stream to read from
+
+    bool           deleteStream;           // should we delete the stream
+                                           // ourselves? or does someone
+                                           // else do it?
+
+    size_t         bytesPerPixel;          // size of an uncompressed pixel
+
+    size_t         maxBytesPerTileLine;    // combined size of a line
+                                           // over all channels
+
+    
+    vector<TileBuffer*> tileBuffers;        // each holds a single tile
+    size_t          tileBufferSize;        // size of the tile buffers
+
+     Data (bool deleteStream, int numThreads);
+    ~Data ();
+
+    inline TileBuffer * getTileBuffer (int number);
+                                           // hash function from tile indices
+                                           // into our vector of tile buffers
+};
+
+
+TiledInputFile::Data::Data (bool del, int numThreads):
+    numXTiles (0),
+    numYTiles (0),
+    is (0),
+    deleteStream (del)
+{
+    //
+    // We need at least one tileBuffer, but if threading is used,
+    // to keep n threads busy we need 2*n tileBuffers
+    //
+
+    tileBuffers.resize (max (1, 2 * numThreads));
+}
+
+
+TiledInputFile::Data::~Data ()
+{
+    delete [] numXTiles;
+    delete [] numYTiles;
+
+    if (deleteStream)
+       delete is;
+
+    for (size_t i = 0; i < tileBuffers.size(); i++)
+        delete tileBuffers[i];
+}
+
+
+TileBuffer*
+TiledInputFile::Data::getTileBuffer (int number)
+{
+    return tileBuffers[number % tileBuffers.size()];
+}
+
+
+namespace {
+
+void
+readTileData (TiledInputFile::Data *ifd,
+             int dx, int dy,
+             int lx, int ly,
+              char *&buffer,
+              int &dataSize)
+{
+    //
+    // Read a single tile block from the file and into the array pointed
+    // to by buffer.  If the file is memory-mapped, then we change where
+    // buffer points instead of writing into the array (hence buffer needs
+    // to be a reference to a char *).
+    //
+
+    //
+    // Look up the location for this tile in the Index and
+    // seek to that position if necessary
+    //
+    
+    Int64 tileOffset = ifd->tileOffsets (dx, dy, lx, ly);
+
+    if (tileOffset == 0)
+    {
+        THROW (Iex::InputExc, "Tile (" << dx << ", " << dy << ", " <<
+                             lx << ", " << ly << ") is missing.");
+    }
+
+    if (ifd->currentPosition != tileOffset)
+        ifd->is->seekg (tileOffset);
+
+    //
+    // Read the first few bytes of the tile (the header).
+    // Verify that the tile coordinates and the level number
+    // are correct.
+    //
+    
+    int tileXCoord, tileYCoord, levelX, levelY;
+
+    Xdr::read <StreamIO> (*ifd->is, tileXCoord);
+    Xdr::read <StreamIO> (*ifd->is, tileYCoord);
+    Xdr::read <StreamIO> (*ifd->is, levelX);
+    Xdr::read <StreamIO> (*ifd->is, levelY);
+    Xdr::read <StreamIO> (*ifd->is, dataSize);
+
+    if (tileXCoord != dx)
+        throw Iex::InputExc ("Unexpected tile x coordinate.");
+
+    if (tileYCoord != dy)
+        throw Iex::InputExc ("Unexpected tile y coordinate.");
+
+    if (levelX != lx)
+        throw Iex::InputExc ("Unexpected tile x level number coordinate.");
+
+    if (levelY != ly)
+        throw Iex::InputExc ("Unexpected tile y level number coordinate.");
+
+    if (dataSize > (int) ifd->tileBufferSize)
+        throw Iex::InputExc ("Unexpected tile block length.");
+
+    //
+    // Read the pixel data.
+    //
+
+    if (ifd->is->isMemoryMapped ())
+        buffer = ifd->is->readMemoryMapped (dataSize);
+    else
+        ifd->is->read (buffer, dataSize);
+
+    //
+    // Keep track of which tile is the next one in
+    // the file, so that we can avoid redundant seekg()
+    // operations (seekg() can be fairly expensive).
+    //
+    
+    ifd->currentPosition = tileOffset + 5 * Xdr::size<int>() + dataSize;
+}
+
+
+void
+readNextTileData (TiledInputFile::Data *ifd,
+                 int &dx, int &dy,
+                 int &lx, int &ly,
+                  char * & buffer,
+                 int &dataSize)
+{
+    //
+    // Read the next tile block from the file
+    //
+
+    //
+    // Read the first few bytes of the tile (the header).
+    //
+
+    Xdr::read <StreamIO> (*ifd->is, dx);
+    Xdr::read <StreamIO> (*ifd->is, dy);
+    Xdr::read <StreamIO> (*ifd->is, lx);
+    Xdr::read <StreamIO> (*ifd->is, ly);
+    Xdr::read <StreamIO> (*ifd->is, dataSize);
+
+    if (dataSize > (int) ifd->tileBufferSize)
+        throw Iex::InputExc ("Unexpected tile block length.");
+    
+    //
+    // Read the pixel data.
+    //
+
+    ifd->is->read (buffer, dataSize);
+    
+    //
+    // Keep track of which tile is the next one in
+    // the file, so that we can avoid redundant seekg()
+    // operations (seekg() can be fairly expensive).
+    //
+
+    ifd->currentPosition += 5 * Xdr::size<int>() + dataSize;
+}
+
+
+//
+// A TileBufferTask encapsulates the task of uncompressing
+// a single tile and copying it into the frame buffer.
+//
+
+class TileBufferTask : public Task
+{
+  public:
+
+    TileBufferTask (TaskGroup *group,
+                    TiledInputFile::Data *ifd,
+                   TileBuffer *tileBuffer);
+                    
+    virtual ~TileBufferTask ();
+
+    virtual void               execute ();
+    
+  private:
+
+    TiledInputFile::Data *     _ifd;
+    TileBuffer *               _tileBuffer;
+};
+
+
+TileBufferTask::TileBufferTask
+    (TaskGroup *group,
+     TiledInputFile::Data *ifd,
+     TileBuffer *tileBuffer)
+:
+    Task (group),
+    _ifd (ifd),
+    _tileBuffer (tileBuffer)
+{
+    // empty
+}
+
+
+TileBufferTask::~TileBufferTask ()
+{
+    //
+    // Signal that the tile buffer is now free
+    //
+
+    _tileBuffer->post ();
+}
+
+
+void
+TileBufferTask::execute ()
+{
+    try
+    {
+        //
+        // Calculate information about the tile
+        //
+    
+        Box2i tileRange = Imf::dataWindowForTile (_ifd->tileDesc,
+                                                  _ifd->minX, _ifd->maxX,
+                                                  _ifd->minY, _ifd->maxY,
+                                                  _tileBuffer->dx,
+                                                  _tileBuffer->dy,
+                                                  _tileBuffer->lx,
+                                                  _tileBuffer->ly);
+    
+        int numPixelsPerScanLine = tileRange.max.x - tileRange.min.x + 1;
+    
+        int numPixelsInTile = numPixelsPerScanLine *
+                            (tileRange.max.y - tileRange.min.y + 1);
+    
+        int sizeOfTile = _ifd->bytesPerPixel * numPixelsInTile;
+    
+    
+        //
+        // Uncompress the data, if necessary
+        //
+    
+        if (_tileBuffer->compressor && _tileBuffer->dataSize < sizeOfTile)
+        {
+            _tileBuffer->format = _tileBuffer->compressor->format();
+
+            _tileBuffer->dataSize = _tileBuffer->compressor->uncompressTile
+               (_tileBuffer->buffer, _tileBuffer->dataSize,
+                tileRange, _tileBuffer->uncompressedData);
+        }
+        else
+        {
+            //
+            // If the line is uncompressed, it's in XDR format,
+            // regardless of the compressor's output format.
+            //
+    
+            _tileBuffer->format = Compressor::XDR;
+            _tileBuffer->uncompressedData = _tileBuffer->buffer;
+        }
+    
+        //
+        // Convert the tile of pixel data back from the machine-independent
+       // representation, and store the result in the frame buffer.
+        //
+    
+        const char *readPtr = _tileBuffer->uncompressedData;
+                                                        // points to where we
+                                                        // read from in the
+                                                        // tile block
+        
+        //
+        // Iterate over the scan lines in the tile.
+        //
+    
+        for (int y = tileRange.min.y; y <= tileRange.max.y; ++y)
+        {
+            //
+            // Iterate over all image channels.
+            //
+            
+            for (unsigned int i = 0; i < _ifd->slices.size(); ++i)
+            {
+                const TInSliceInfo &slice = _ifd->slices[i];
+    
+                //
+                // These offsets are used to facilitate both
+                // absolute and tile-relative pixel coordinates.
+                //
+            
+                int xOffset = slice.xTileCoords * tileRange.min.x;
+                int yOffset = slice.yTileCoords * tileRange.min.y;
+    
+                //
+                // Fill the frame buffer with pixel data.
+                //
+    
+                if (slice.skip)
+                {
+                    //
+                    // The file contains data for this channel, but
+                    // the frame buffer contains no slice for this channel.
+                    //
+    
+                    skipChannel (readPtr, slice.typeInFile,
+                                 numPixelsPerScanLine);
+                }
+                else
+                {
+                    //
+                    // The frame buffer contains a slice for this channel.
+                    //
+    
+                    char *writePtr = slice.base +
+                                     (y - yOffset) * slice.yStride +
+                                     (tileRange.min.x - xOffset) *
+                                     slice.xStride;
+
+                    char *endPtr = writePtr +
+                                   (numPixelsPerScanLine - 1) * slice.xStride;
+                                    
+                    copyIntoFrameBuffer (readPtr, writePtr, endPtr,
+                                         slice.xStride,
+                                         slice.fill, slice.fillValue,
+                                         _tileBuffer->format,
+                                         slice.typeInFrameBuffer,
+                                         slice.typeInFile);
+                }
+            }
+        }
+    }
+    catch (std::exception &e)
+    {
+        if (!_tileBuffer->hasException)
+        {
+            _tileBuffer->exception = e.what ();
+            _tileBuffer->hasException = true;
+        }
+    }
+    catch (...)
+    {
+        if (!_tileBuffer->hasException)
+        {
+            _tileBuffer->exception = "unrecognized exception";
+            _tileBuffer->hasException = true;
+        }
+    }
+}
+
+
+TileBufferTask *
+newTileBufferTask
+    (TaskGroup *group,
+     TiledInputFile::Data *ifd,
+     int number,
+     int dx, int dy,
+     int lx, int ly)
+{
+    //
+    // Wait for a tile buffer to become available,
+    // fill the buffer with raw data from the file,
+    // and create a new TileBufferTask whose execute()
+    // method will uncompress the tile and copy the
+    // tile's pixels into the frame buffer.
+    //
+
+    TileBuffer *tileBuffer = ifd->getTileBuffer (number);
+
+    try
+    {
+       tileBuffer->wait();
+       
+       tileBuffer->dx = dx;
+       tileBuffer->dy = dy;
+       tileBuffer->lx = lx;
+       tileBuffer->ly = ly;
+
+       tileBuffer->uncompressedData = 0;
+
+       readTileData (ifd, dx, dy, lx, ly,
+                     tileBuffer->buffer,
+                     tileBuffer->dataSize);
+    }
+    catch (...)
+    {
+       //
+       // Reading from the file caused an exception.
+       // Signal that the tile buffer is free, and
+       // re-throw the exception.
+       //
+
+       tileBuffer->post();
+       throw;
+    }
+
+    return new TileBufferTask (group, ifd, tileBuffer);
+}
+
+
+} // namespace
+
+
+TiledInputFile::TiledInputFile (const char fileName[], int numThreads):
+    _data (new Data (true, numThreads))
+{
+    //
+    // This constructor is called when a user
+    // explicitly wants to read a tiled file.
+    //
+
+    try
+    {
+       _data->is = new StdIFStream (fileName);
+       _data->header.readFrom (*_data->is, _data->version);
+       initialize();
+    }
+    catch (Iex::BaseExc &e)
+    {
+       delete _data;
+
+       REPLACE_EXC (e, "Cannot open image file "
+                       "\"" << fileName << "\". " << e);
+       throw;
+    }
+    catch (...)
+    {
+       delete _data;
+        throw;
+    }
+}
+
+
+TiledInputFile::TiledInputFile (IStream &is, int numThreads):
+    _data (new Data (false, numThreads))
+{
+    //
+    // This constructor is called when a user
+    // explicitly wants to read a tiled file.
+    //
+
+    try
+    {
+       _data->is = &is;
+       _data->header.readFrom (*_data->is, _data->version);
+       initialize();
+    }
+    catch (Iex::BaseExc &e)
+    {
+       delete _data;
+
+       REPLACE_EXC (e, "Cannot open image file "
+                       "\"" << is.fileName() << "\". " << e);
+       throw;
+    }
+    catch (...)
+    {
+       delete _data;
+        throw;
+    }
+}
+
+
+TiledInputFile::TiledInputFile
+    (const Header &header,
+     IStream *is,
+     int version,
+     int numThreads)
+:
+    _data (new Data (false, numThreads))
+{
+    //
+    // This constructor called by class Imf::InputFile
+    // when a user wants to just read an image file, and
+    // doesn't care or know if the file is tiled.
+    //
+
+    _data->is = is;
+    _data->header = header;
+    _data->version = version;
+    initialize();
+}
+
+
+void
+TiledInputFile::initialize ()
+{
+    if (!isTiled (_data->version))
+       throw Iex::ArgExc ("Expected a tiled file but the file is not tiled.");
+
+    _data->header.sanityCheck (true);
+
+    _data->tileDesc = _data->header.tileDescription();
+    _data->lineOrder = _data->header.lineOrder();
+
+    //
+    // Save the dataWindow information
+    //
+    
+    const Box2i &dataWindow = _data->header.dataWindow();
+    _data->minX = dataWindow.min.x;
+    _data->maxX = dataWindow.max.x;
+    _data->minY = dataWindow.min.y;
+    _data->maxY = dataWindow.max.y;
+
+    //
+    // Precompute level and tile information to speed up utility functions
+    //
+
+    precalculateTileInfo (_data->tileDesc,
+                         _data->minX, _data->maxX,
+                         _data->minY, _data->maxY,
+                         _data->numXTiles, _data->numYTiles,
+                         _data->numXLevels, _data->numYLevels);    
+
+    _data->bytesPerPixel = calculateBytesPerPixel (_data->header);
+
+    _data->maxBytesPerTileLine = _data->bytesPerPixel * _data->tileDesc.xSize;
+
+    _data->tileBufferSize = _data->maxBytesPerTileLine * _data->tileDesc.ySize;
+
+    //
+    // Create all the TileBuffers and allocate their internal buffers
+    //
+
+    for (size_t i = 0; i < _data->tileBuffers.size(); i++)
+    {
+        _data->tileBuffers[i] = new TileBuffer (newTileCompressor
+                                                 (_data->header.compression(),
+                                                  _data->maxBytesPerTileLine,
+                                                  _data->tileDesc.ySize,
+                                                  _data->header));
+
+        if (!_data->is->isMemoryMapped ())
+            _data->tileBuffers[i]->buffer = new char [_data->tileBufferSize];
+    }
+
+    _data->tileOffsets = TileOffsets (_data->tileDesc.mode,
+                                     _data->numXLevels,
+                                     _data->numYLevels,
+                                     _data->numXTiles,
+                                     _data->numYTiles);
+
+    _data->tileOffsets.readFrom (*(_data->is), _data->fileIsComplete);
+
+    _data->currentPosition = _data->is->tellg();
+}
+
+
+TiledInputFile::~TiledInputFile ()
+{
+    if (!_data->is->isMemoryMapped())
+        for (size_t i = 0; i < _data->tileBuffers.size(); i++)
+            delete [] _data->tileBuffers[i]->buffer;
+
+    delete _data;
+}
+
+
+const char *
+TiledInputFile::fileName () const
+{
+    return _data->is->fileName();
+}
+
+
+const Header &
+TiledInputFile::header () const
+{
+    return _data->header;
+}
+
+
+int
+TiledInputFile::version () const
+{
+    return _data->version;
+}
+
+
+void   
+TiledInputFile::setFrameBuffer (const FrameBuffer &frameBuffer)
+{
+    Lock lock (*_data);
+
+    //
+    // Set the frame buffer
+    //
+
+    //
+    // Check if the new frame buffer descriptor is
+    // compatible with the image file header.
+    //
+
+    const ChannelList &channels = _data->header.channels();
+
+    for (FrameBuffer::ConstIterator j = frameBuffer.begin();
+         j != frameBuffer.end();
+         ++j)
+    {
+        ChannelList::ConstIterator i = channels.find (j.name());
+
+        if (i == channels.end())
+            continue;
+
+        if (i.channel().xSampling != j.slice().xSampling ||
+            i.channel().ySampling != j.slice().ySampling)
+            THROW (Iex::ArgExc, "X and/or y subsampling factors "
+                               "of \"" << i.name() << "\" channel "
+                               "of input file \"" << fileName() << "\" are "
+                               "not compatible with the frame buffer's "
+                               "subsampling factors.");
+    }
+
+    //
+    // Initialize the slice table for readPixels().
+    //
+
+    vector<TInSliceInfo> slices;
+    ChannelList::ConstIterator i = channels.begin();
+
+    for (FrameBuffer::ConstIterator j = frameBuffer.begin();
+         j != frameBuffer.end();
+         ++j)
+    {
+        while (i != channels.end() && strcmp (i.name(), j.name()) < 0)
+        {
+            //
+            // Channel i is present in the file but not
+            // in the frame buffer; data for channel i
+            // will be skipped during readPixels().
+            //
+
+            slices.push_back (TInSliceInfo (i.channel().type,
+                                           i.channel().type,
+                                           0,      // base
+                                           0,      // xStride
+                                           0,      // yStride
+                                           false,  // fill
+                                           true,   // skip
+                                           0.0));  // fillValue
+            ++i;
+        }
+
+        bool fill = false;
+
+        if (i == channels.end() || strcmp (i.name(), j.name()) > 0)
+        {
+            //
+            // Channel i is present in the frame buffer, but not in the file.
+            // In the frame buffer, slice j will be filled with a default value.
+            //
+
+            fill = true;
+        }
+
+        slices.push_back (TInSliceInfo (j.slice().type,
+                                        fill? j.slice().type: i.channel().type,
+                                        j.slice().base,
+                                        j.slice().xStride,
+                                        j.slice().yStride,
+                                        fill,
+                                        false, // skip
+                                        j.slice().fillValue,
+                                        (j.slice().xTileCoords)? 1: 0,
+                                        (j.slice().yTileCoords)? 1: 0));
+
+        if (i != channels.end() && !fill)
+            ++i;
+    }
+
+    while (i != channels.end())
+    {
+       //
+       // Channel i is present in the file but not
+       // in the frame buffer; data for channel i
+       // will be skipped during readPixels().
+       //
+
+       slices.push_back (TInSliceInfo (i.channel().type,
+                                       i.channel().type,
+                                       0, // base
+                                       0, // xStride
+                                       0, // yStride
+                                       false,  // fill
+                                       true, // skip
+                                       0.0)); // fillValue
+       ++i;
+    }
+
+    //
+    // Store the new frame buffer.
+    //
+
+    _data->frameBuffer = frameBuffer;
+    _data->slices = slices;
+}
+
+
+const FrameBuffer &
+TiledInputFile::frameBuffer () const
+{
+    Lock lock (*_data);
+    return _data->frameBuffer;
+}
+
+
+bool
+TiledInputFile::isComplete () const
+{
+    return _data->fileIsComplete;
+}
+
+
+void
+TiledInputFile::readTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly)
+{
+    //
+    // Read a range of tiles from the file into the framebuffer
+    //
+
+    try
+    {
+        Lock lock (*_data);
+
+        if (_data->slices.size() == 0)
+            throw Iex::ArgExc ("No frame buffer specified "
+                              "as pixel data destination.");
+        
+        //
+        // Determine the first and last tile coordinates in both dimensions.
+        // We always attempt to read the range of tiles in the order that
+        // they are stored in the file.
+        //
+                               
+        if (dx1 > dx2)
+            std::swap (dx1, dx2);
+        
+        if (dy1 > dy2)
+            std::swap (dy1, dy2);
+        
+        int dyStart = dy1;
+       int dyStop  = dy2 + 1;
+       int dY      = 1;
+
+        if (_data->lineOrder == DECREASING_Y)
+        {
+            dyStart = dy2;
+            dyStop  = dy1 - 1;
+            dY      = -1;
+        }
+
+        //
+        // Create a task group for all tile buffer tasks.  When the
+       // task group goes out of scope, the destructor waits until
+       // all tasks are complete.
+        //
+        
+        {
+            TaskGroup taskGroup;
+            int tileNumber = 0;
+    
+            for (int dy = dyStart; dy != dyStop; dy += dY)
+            {
+                for (int dx = dx1; dx <= dx2; dx++)
+                {
+                    if (!isValidTile (dx, dy, lx, ly))
+                        THROW (Iex::ArgExc,
+                              "Tile (" << dx << ", " << dy << ", " <<
+                              lx << "," << ly << ") is not a valid tile.");
+                    
+                    ThreadPool::addGlobalTask (newTileBufferTask (&taskGroup,
+                                                                  _data,
+                                                                  tileNumber++,
+                                                                  dx, dy,
+                                                                  lx, ly));
+                }
+            }
+
+           //
+            // finish all tasks
+           //
+        }
+
+       //
+       // Exeption handling:
+       //
+       // TileBufferTask::execute() may have encountered exceptions, but
+       // those exceptions occurred in another thread, not in the thread
+       // that is executing this call to TiledInputFile::readTiles().
+       // TileBufferTask::execute() has caught all exceptions and stored
+       // the exceptions' what() strings in the tile buffers.
+       // Now we check if any tile buffer contains a stored exception; if
+       // this is the case then we re-throw the exception in this thread.
+       // (It is possible that multiple tile buffers contain stored
+       // exceptions.  We re-throw the first exception we find and
+       // ignore all others.)
+       //
+
+       const string *exception = 0;
+
+        for (int i = 0; i < _data->tileBuffers.size(); ++i)
+       {
+            TileBuffer *tileBuffer = _data->tileBuffers[i];
+
+           if (tileBuffer->hasException && !exception)
+               exception = &tileBuffer->exception;
+
+           tileBuffer->hasException = false;
+       }
+
+       if (exception)
+           throw Iex::IoExc (*exception);
+    }
+    catch (Iex::BaseExc &e)
+    {
+        REPLACE_EXC (e, "Error reading pixel data from image "
+                        "file \"" << fileName() << "\". " << e);
+        throw;
+    }
+}
+
+
+void   
+TiledInputFile::readTiles (int dx1, int dx2, int dy1, int dy2, int l)
+{
+    readTiles (dx1, dx2, dy1, dy2, l, l);
+}
+
+
+void   
+TiledInputFile::readTile (int dx, int dy, int lx, int ly)
+{
+    readTiles (dx, dx, dy, dy, lx, ly);
+}
+
+
+void   
+TiledInputFile::readTile (int dx, int dy, int l)
+{
+    readTile (dx, dy, l, l);
+}
+
+
+void
+TiledInputFile::rawTileData (int &dx, int &dy,
+                            int &lx, int &ly,
+                             const char *&pixelData,
+                            int &pixelDataSize)
+{
+    try
+    {
+        Lock lock (*_data);
+
+        if (!isValidTile (dx, dy, lx, ly))
+            throw Iex::ArgExc ("Tried to read a tile outside "
+                              "the image file's data window.");
+
+        TileBuffer *tileBuffer = _data->getTileBuffer (0);
+        
+        readNextTileData (_data, dx, dy, lx, ly,
+                         tileBuffer->buffer,
+                          pixelDataSize);
+
+        pixelData = tileBuffer->buffer;
+    }
+    catch (Iex::BaseExc &e)
+    {
+        REPLACE_EXC (e, "Error reading pixel data from image "
+                       "file \"" << fileName() << "\". " << e);
+        throw;
+    }
+}
+
+
+unsigned int
+TiledInputFile::tileXSize () const
+{
+    return _data->tileDesc.xSize;
+}
+
+
+unsigned int
+TiledInputFile::tileYSize () const
+{
+    return _data->tileDesc.ySize;
+}
+
+
+LevelMode
+TiledInputFile::levelMode () const
+{
+    return _data->tileDesc.mode;
+}
+
+
+LevelRoundingMode
+TiledInputFile::levelRoundingMode () const
+{
+    return _data->tileDesc.roundingMode;
+}
+
+
+int
+TiledInputFile::numLevels () const
+{
+    if (levelMode() == RIPMAP_LEVELS)
+       THROW (Iex::LogicExc, "Error calling numLevels() on image "
+                             "file \"" << fileName() << "\" "
+                             "(numLevels() is not defined for files "
+                             "with RIPMAP level mode).");
+
+    return _data->numXLevels;
+}
+
+
+int
+TiledInputFile::numXLevels () const
+{
+    return _data->numXLevels;
+}
+
+
+int
+TiledInputFile::numYLevels () const
+{
+    return _data->numYLevels;
+}
+
+
+bool   
+TiledInputFile::isValidLevel (int lx, int ly) const
+{
+    if (lx < 0 || ly < 0)
+       return false;
+
+    if (levelMode() == MIPMAP_LEVELS && lx != ly)
+       return false;
+
+    if (lx >= numXLevels() || ly >= numYLevels())
+       return false;
+
+    return true;
+}
+
+
+int
+TiledInputFile::levelWidth (int lx) const
+{
+    try
+    {
+        return levelSize (_data->minX, _data->maxX, lx,
+                         _data->tileDesc.roundingMode);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Error calling levelWidth() on image "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+int
+TiledInputFile::levelHeight (int ly) const
+{
+    try
+    {
+        return levelSize (_data->minY, _data->maxY, ly,
+                          _data->tileDesc.roundingMode);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Error calling levelHeight() on image "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+int
+TiledInputFile::numXTiles (int lx) const
+{
+    if (lx < 0 || lx >= _data->numXLevels)
+    {
+        THROW (Iex::ArgExc, "Error calling numXTiles() on image "
+                           "file \"" << _data->is->fileName() << "\" "
+                           "(Argument is not in valid range).");
+
+    }
+    
+    return _data->numXTiles[lx];
+}
+
+
+int
+TiledInputFile::numYTiles (int ly) const
+{
+    if (ly < 0 || ly >= _data->numYLevels)
+    {
+        THROW (Iex::ArgExc, "Error calling numYTiles() on image "
+                           "file \"" << _data->is->fileName() << "\" "
+                           "(Argument is not in valid range).");
+    }
+    
+    return _data->numYTiles[ly];
+}
+
+
+Box2i
+TiledInputFile::dataWindowForLevel (int l) const
+{
+    return dataWindowForLevel (l, l);
+}
+
+
+Box2i
+TiledInputFile::dataWindowForLevel (int lx, int ly) const
+{
+    try
+    {
+       return Imf::dataWindowForLevel (_data->tileDesc,
+                                       _data->minX, _data->maxX,
+                                       _data->minY, _data->maxY,
+                                       lx, ly);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Error calling dataWindowForLevel() on image "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+Box2i
+TiledInputFile::dataWindowForTile (int dx, int dy, int l) const
+{
+    return dataWindowForTile (dx, dy, l, l);
+}
+
+
+Box2i
+TiledInputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const
+{
+    try
+    {
+       if (!isValidTile (dx, dy, lx, ly))
+           throw Iex::ArgExc ("Arguments not in valid range.");
+
+        return Imf::dataWindowForTile (_data->tileDesc,
+                                      _data->minX, _data->maxX,
+                                      _data->minY, _data->maxY,
+                                      dx, dy, lx, ly);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Error calling dataWindowForTile() on image "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+bool
+TiledInputFile::isValidTile (int dx, int dy, int lx, int ly) const
+{
+    return ((lx < _data->numXLevels && lx >= 0) &&
+            (ly < _data->numYLevels && ly >= 0) &&
+            (dx < _data->numXTiles[lx] && dx >= 0) &&
+            (dy < _data->numYTiles[ly] && dy >= 0));
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfTiledInputFile.h b/3rdparty/openexr/IlmImf/ImfTiledInputFile.h
new file mode 100644 (file)
index 0000000..13eb84f
--- /dev/null
@@ -0,0 +1,381 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_TILED_INPUT_FILE_H
+#define INCLUDED_IMF_TILED_INPUT_FILE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class TiledInputFile
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfHeader.h>
+#include <ImfFrameBuffer.h>
+#include "ImathBox.h"
+#include <ImfTileDescription.h>
+#include <ImfThreading.h>
+
+namespace Imf {
+
+
+class TiledInputFile
+{
+  public:
+
+    //--------------------------------------------------------------------
+    // A constructor that opens the file with the specified name, and
+    // reads the file header.  The constructor throws an Iex::ArgExc
+    // exception if the file is not tiled.
+    // The numThreads parameter specifies how many worker threads this
+    // file will try to keep busy when decompressing individual tiles.
+    // Destroying TiledInputFile objects constructed with this constructor
+    // automatically closes the corresponding files.
+    //--------------------------------------------------------------------
+
+    TiledInputFile (const char fileName[],
+                    int numThreads = globalThreadCount ());
+
+    
+    // ----------------------------------------------------------
+    // A constructor that attaches the new TiledInputFile object
+    // to a file that has already been opened.  
+    // Destroying TiledInputFile objects constructed with this
+    // constructor does not automatically close the corresponding
+    // files.
+    // ----------------------------------------------------------
+
+    TiledInputFile (IStream &is, int numThreads = globalThreadCount ());
+
+
+    //-----------
+    // Destructor
+    //-----------
+
+    virtual ~TiledInputFile ();
+
+
+    //------------------------
+    // Access to the file name
+    //------------------------
+
+    const char *       fileName () const;
+
+
+    //--------------------------
+    // Access to the file header
+    //--------------------------
+
+    const Header &     header () const;
+
+
+    //----------------------------------
+    // Access to the file format version
+    //----------------------------------
+
+    int                        version () const;
+
+
+    //-----------------------------------------------------------
+    // Set the current frame buffer -- copies the FrameBuffer
+    // object into the TiledInputFile object.
+    //
+    // The current frame buffer is the destination for the pixel
+    // data read from the file.  The current frame buffer must be
+    // set at least once before readTile() is called.
+    // The current frame buffer can be changed after each call
+    // to readTile().
+    //-----------------------------------------------------------
+
+    void               setFrameBuffer (const FrameBuffer &frameBuffer);
+
+
+    //-----------------------------------
+    // Access to the current frame buffer
+    //-----------------------------------
+
+    const FrameBuffer &        frameBuffer () const;
+
+
+    //------------------------------------------------------------
+    // Check if the file is complete:
+    //
+    // isComplete() returns true if all pixels in the data window
+    // (in all levels) are present in the input file, or false if
+    // any pixels are missing.  (Another program may still be busy
+    // writing the file, or file writing may have been aborted
+    // prematurely.)
+    //------------------------------------------------------------
+
+    bool               isComplete () const;
+
+
+    //--------------------------------------------------
+    // Utility functions:
+    //--------------------------------------------------
+
+    //---------------------------------------------------------
+    // Multiresolution mode and tile size:
+    // The following functions return the xSize, ySize and mode
+    // fields of the file header's TileDescriptionAttribute.
+    //---------------------------------------------------------
+
+    unsigned int       tileXSize () const;
+    unsigned int       tileYSize () const;
+    LevelMode          levelMode () const;
+    LevelRoundingMode  levelRoundingMode () const;
+
+
+    //--------------------------------------------------------------------
+    // Number of levels:
+    //
+    // numXLevels() returns the file's number of levels in x direction.
+    //
+    // if levelMode() == ONE_LEVEL:
+    //      return value is: 1
+    //
+    // if levelMode() == MIPMAP_LEVELS:
+    //      return value is: rfunc (log (max (w, h)) / log (2)) + 1
+    //
+    // if levelMode() == RIPMAP_LEVELS:
+    //      return value is: rfunc (log (w) / log (2)) + 1
+    //
+    // where
+    //     w is the width of the image's data window,  max.x - min.x + 1,
+    //     y is the height of the image's data window, max.y - min.y + 1,
+    //     and rfunc(x) is either floor(x), or ceil(x), depending on
+    //     whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP.
+    //
+    // numYLevels() returns the file's number of levels in y direction.
+    //
+    // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS:
+    //      return value is the same as for numXLevels()
+    //
+    // if levelMode() == RIPMAP_LEVELS:
+    //      return value is: rfunc (log (h) / log (2)) + 1
+    //
+    //
+    // numLevels() is a convenience function for use with
+    // MIPMAP_LEVELS files.
+    //
+    // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS:
+    //      return value is the same as for numXLevels()
+    //
+    // if levelMode() == RIPMAP_LEVELS:
+    //      an Iex::LogicExc exception is thrown
+    //
+    // isValidLevel(lx, ly) returns true if the file contains 
+    // a level with level number (lx, ly), false if not.
+    //
+    //--------------------------------------------------------------------
+
+    int                        numLevels () const;
+    int                        numXLevels () const;
+    int                        numYLevels () const;
+    bool               isValidLevel (int lx, int ly) const;
+
+
+    //----------------------------------------------------------
+    // Dimensions of a level:
+    //
+    // levelWidth(lx) returns the width of a level with level
+    // number (lx, *), where * is any number.
+    //
+    // return value is:
+    //      max (1, rfunc (w / pow (2, lx)))
+    //
+    //
+    // levelHeight(ly) returns the height of a level with level
+    // number (*, ly), where * is any number.
+    //
+    // return value is:
+    //      max (1, rfunc (h / pow (2, ly)))
+    //
+    //----------------------------------------------------------
+
+    int                        levelWidth  (int lx) const;
+    int                        levelHeight (int ly) const;
+
+
+    //--------------------------------------------------------------
+    // Number of tiles:
+    //
+    // numXTiles(lx) returns the number of tiles in x direction
+    // that cover a level with level number (lx, *), where * is
+    // any number.
+    //
+    // return value is:
+    //      (levelWidth(lx) + tileXSize() - 1) / tileXSize()
+    //
+    //
+    // numYTiles(ly) returns the number of tiles in y direction
+    // that cover a level with level number (*, ly), where * is
+    // any number.
+    //
+    // return value is:
+    //      (levelHeight(ly) + tileXSize() - 1) / tileXSize()
+    //
+    //--------------------------------------------------------------
+
+    int                        numXTiles (int lx = 0) const;
+    int                        numYTiles (int ly = 0) const;
+
+
+    //---------------------------------------------------------------
+    // Level pixel ranges:
+    //
+    // dataWindowForLevel(lx, ly) returns a 2-dimensional region of
+    // valid pixel coordinates for a level with level number (lx, ly)
+    //
+    // return value is a Box2i with min value:
+    //      (dataWindow.min.x, dataWindow.min.y)
+    //
+    // and max value:
+    //      (dataWindow.min.x + levelWidth(lx) - 1,
+    //       dataWindow.min.y + levelHeight(ly) - 1)
+    //
+    // dataWindowForLevel(level) is a convenience function used
+    // for ONE_LEVEL and MIPMAP_LEVELS files.  It returns
+    // dataWindowForLevel(level, level).
+    //
+    //---------------------------------------------------------------
+
+    Imath::Box2i       dataWindowForLevel (int l = 0) const;
+    Imath::Box2i       dataWindowForLevel (int lx, int ly) const;
+
+
+    //-------------------------------------------------------------------
+    // Tile pixel ranges:
+    //
+    // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional
+    // region of valid pixel coordinates for a tile with tile coordinates
+    // (dx,dy) and level number (lx, ly).
+    //
+    // return value is a Box2i with min value:
+    //      (dataWindow.min.x + dx * tileXSize(),
+    //       dataWindow.min.y + dy * tileYSize())
+    //
+    // and max value:
+    //      (dataWindow.min.x + (dx + 1) * tileXSize() - 1,
+    //       dataWindow.min.y + (dy + 1) * tileYSize() - 1)
+    //
+    // dataWindowForTile(dx, dy, level) is a convenience function
+    // used for ONE_LEVEL and MIPMAP_LEVELS files.  It returns
+    // dataWindowForTile(dx, dy, level, level).
+    //
+    //-------------------------------------------------------------------
+
+    Imath::Box2i       dataWindowForTile (int dx, int dy, int l = 0) const;
+
+    Imath::Box2i       dataWindowForTile (int dx, int dy,
+                                           int lx, int ly) const;
+
+    //------------------------------------------------------------
+    // Read pixel data:
+    //
+    // readTile(dx, dy, lx, ly) reads the tile with tile
+    // coordinates (dx, dy), and level number (lx, ly),
+    // and stores it in the current frame buffer.
+    //
+    //   dx must lie in the interval [0, numXTiles(lx)-1]
+    //   dy must lie in the interval [0, numYTiles(ly)-1]
+    //
+    //   lx must lie in the interval [0, numXLevels()-1]
+    //   ly must lie in the inverval [0, numYLevels()-1]
+    //
+    // readTile(dx, dy, level) is a convenience function used
+    // for ONE_LEVEL and MIPMAP_LEVELS files.  It calls
+    // readTile(dx, dy, level, level).
+    //
+    // The two readTiles(dx1, dx2, dy1, dy2, ...) functions allow
+    // reading multiple tiles at once.  If multi-threading is used
+    // the multiple tiles are read concurrently.
+    //
+    // Pixels that are outside the pixel coordinate range for the
+    // tile's level, are never accessed by readTile().
+    //
+    // Attempting to access a tile that is not present in the file
+    // throws an InputExc exception.
+    //
+    //------------------------------------------------------------
+
+    void               readTile  (int dx, int dy, int l = 0);
+    void               readTile  (int dx, int dy, int lx, int ly);
+
+    void               readTiles (int dx1, int dx2, int dy1, int dy2,
+                                   int lx, int ly);
+
+    void               readTiles (int dx1, int dx2, int dy1, int dy2,
+                                   int l = 0);
+
+
+    //--------------------------------------------------
+    // Read a tile of raw pixel data from the file,
+    // without uncompressing it (this function is
+    // used to implement TiledOutputFile::copyPixels()).
+    //--------------------------------------------------
+
+    void               rawTileData (int &dx, int &dy,
+                                    int &lx, int &ly,
+                                    const char *&pixelData,
+                                    int &pixelDataSize);
+
+    struct Data;
+
+  private:
+
+    friend class InputFile;
+
+    TiledInputFile (const TiledInputFile &);             // not implemented
+    TiledInputFile & operator = (const TiledInputFile &); // not implemented
+
+    TiledInputFile (const Header &header, IStream *is, int version,
+                    int numThreads);
+
+    void               initialize ();
+
+    bool               isValidTile (int dx, int dy,
+                                    int lx, int ly) const;
+
+    size_t             bytesPerLineForTile (int dx, int dy,
+                                            int lx, int ly) const;
+
+    Data *             _data;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp b/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp
new file mode 100644 (file)
index 0000000..7c723bb
--- /dev/null
@@ -0,0 +1,301 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     Miscellaneous stuff related to tiled files
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfTiledMisc.h>
+#include "Iex.h"
+#include <ImfMisc.h>
+#include <ImfChannelList.h>
+
+
+namespace Imf {
+
+using Imath::Box2i;
+using Imath::V2i;
+
+
+int
+levelSize (int min, int max, int l, LevelRoundingMode rmode)
+{
+    if (l < 0)
+       throw Iex::ArgExc ("Argument not in valid range.");
+
+    int a = max - min + 1;
+    int b = (1 << l);
+    int size = a / b;
+
+    if (rmode == ROUND_UP && size * b < a)
+       size += 1;
+
+    return std::max (size, 1);
+}
+
+
+Box2i
+dataWindowForLevel (const TileDescription &tileDesc,
+                   int minX, int maxX,
+                   int minY, int maxY,
+                   int lx, int ly)
+{
+    V2i levelMin = V2i (minX, minY);
+
+    V2i levelMax = levelMin +
+                  V2i (levelSize (minX, maxX, lx, tileDesc.roundingMode) - 1,
+                       levelSize (minY, maxY, ly, tileDesc.roundingMode) - 1);
+
+    return Box2i(levelMin, levelMax);
+}
+
+
+Box2i
+dataWindowForTile (const TileDescription &tileDesc,
+                  int minX, int maxX,
+                  int minY, int maxY,
+                  int dx, int dy,
+                  int lx, int ly)
+{
+    V2i tileMin = V2i (minX + dx * tileDesc.xSize,
+                      minY + dy * tileDesc.ySize);
+
+    V2i tileMax = tileMin + V2i (tileDesc.xSize - 1, tileDesc.ySize - 1);
+
+    V2i levelMax = dataWindowForLevel
+                      (tileDesc, minX, maxX, minY, maxY, lx, ly).max;
+
+    tileMax = V2i (std::min (tileMax[0], levelMax[0]),
+                  std::min (tileMax[1], levelMax[1]));
+
+    return Box2i (tileMin, tileMax);
+}
+
+
+size_t
+calculateBytesPerPixel (const Header &header)
+{
+    const ChannelList &channels = header.channels();
+
+    size_t bytesPerPixel = 0;
+
+    for (ChannelList::ConstIterator c = channels.begin();
+        c != channels.end();
+        ++c)
+    {
+       bytesPerPixel += pixelTypeSize (c.channel().type);
+    }
+
+    return bytesPerPixel;
+}
+
+
+namespace {
+
+int
+floorLog2 (int x)
+{
+    //
+    // For x > 0, floorLog2(y) returns floor(log(x)/log(2)).
+    //
+
+    int y = 0;
+
+    while (x > 1)
+    {
+       y +=  1;
+       x >>= 1;
+    }
+
+    return y;
+}
+
+
+int
+ceilLog2 (int x)
+{
+    //
+    // For x > 0, ceilLog2(y) returns ceil(log(x)/log(2)).
+    //
+
+    int y = 0;
+    int r = 0;
+
+    while (x > 1)
+    {
+       if (x & 1)
+           r = 1;
+
+       y +=  1;
+       x >>= 1;
+    }
+
+    return y + r;
+}
+
+
+int
+roundLog2 (int x, LevelRoundingMode rmode)
+{
+    return (rmode == ROUND_DOWN)? floorLog2 (x): ceilLog2 (x);
+}
+
+
+int
+calculateNumXLevels (const TileDescription& tileDesc,
+                    int minX, int maxX,
+                    int minY, int maxY)
+{
+    int num = 0;
+
+    switch (tileDesc.mode)
+    {
+      case ONE_LEVEL:
+
+       num = 1;
+       break;
+
+      case MIPMAP_LEVELS:
+
+       {
+         int w = maxX - minX + 1;
+         int h = maxY - minY + 1;
+         num = roundLog2 (std::max (w, h), tileDesc.roundingMode) + 1;
+       }
+        break;
+
+      case RIPMAP_LEVELS:
+
+       {
+         int w = maxX - minX + 1;
+         num = roundLog2 (w, tileDesc.roundingMode) + 1;
+       }
+       break;
+
+      default:
+
+       throw Iex::ArgExc ("Unknown LevelMode format.");
+    }
+
+    return num;
+}
+
+
+int
+calculateNumYLevels (const TileDescription& tileDesc,
+                    int minX, int maxX,
+                    int minY, int maxY)
+{
+    int num = 0;
+
+    switch (tileDesc.mode)
+    {
+      case ONE_LEVEL:
+
+       num = 1;
+       break;
+
+      case MIPMAP_LEVELS:
+
+       {
+         int w = maxX - minX + 1;
+         int h = maxY - minY + 1;
+         num = roundLog2 (std::max (w, h), tileDesc.roundingMode) + 1;
+       }
+        break;
+
+      case RIPMAP_LEVELS:
+
+       {
+         int h = maxY - minY + 1;
+         num = roundLog2 (h, tileDesc.roundingMode) + 1;
+       }
+       break;
+
+      default:
+
+       throw Iex::ArgExc ("Unknown LevelMode format.");
+    }
+
+    return num;
+}
+
+
+void
+calculateNumTiles (int *numTiles,
+                  int numLevels,
+                  int min, int max,
+                  int size,
+                  LevelRoundingMode rmode)
+{
+    for (int i = 0; i < numLevels; i++)
+    {
+       numTiles[i] = (levelSize (min, max, i, rmode) + size - 1) / size;
+    }
+}
+
+} // namespace
+
+
+void
+precalculateTileInfo (const TileDescription& tileDesc,
+                     int minX, int maxX,
+                     int minY, int maxY,
+                     int *&numXTiles, int *&numYTiles,
+                     int &numXLevels, int &numYLevels)
+{
+    numXLevels = calculateNumXLevels(tileDesc, minX, maxX, minY, maxY);
+    numYLevels = calculateNumYLevels(tileDesc, minX, maxX, minY, maxY);
+    
+    numXTiles = new int[numXLevels];
+    numYTiles = new int[numYLevels];
+
+    calculateNumTiles (numXTiles,
+                      numXLevels,
+                      minX, maxX,
+                      tileDesc.xSize,
+                      tileDesc.roundingMode);
+
+    calculateNumTiles (numYTiles,
+                      numYLevels,
+                      minY, maxY,
+                      tileDesc.ySize,
+                      tileDesc.roundingMode);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfTiledMisc.h b/3rdparty/openexr/IlmImf/ImfTiledMisc.h
new file mode 100644 (file)
index 0000000..9342c6f
--- /dev/null
@@ -0,0 +1,75 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_TILED_MISC_H
+#define INCLUDED_IMF_TILED_MISC_H
+
+//-----------------------------------------------------------------------------
+//
+//     Miscellaneous stuff related to tiled files
+//
+//-----------------------------------------------------------------------------
+
+#include "ImathBox.h"
+#include <ImfHeader.h>
+#include <stdio.h>
+
+namespace Imf {
+
+int levelSize (int min, int max, int l, LevelRoundingMode rmode);
+
+Imath::Box2i dataWindowForLevel (const TileDescription &tileDesc,
+                                int minX, int maxX,
+                                int minY, int maxY,
+                                int lx, int ly);
+
+Imath::Box2i dataWindowForTile (const TileDescription &tileDesc,
+                               int minX, int maxX,
+                               int minY, int maxY,
+                               int dx, int dy,
+                               int lx, int ly);
+
+size_t calculateBytesPerPixel (const Header &header);
+
+void precalculateTileInfo (const TileDescription& tileDesc,
+                          int minX, int maxX,
+                          int minY, int maxY,
+                          int *&numXTiles, int *&numYTiles,
+                          int &numXLevels, int &numYLevels);
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp
new file mode 100644 (file)
index 0000000..9a96ac9
--- /dev/null
@@ -0,0 +1,1692 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class TiledOutputFile
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfTiledOutputFile.h>
+#include <ImfTiledInputFile.h>
+#include <ImfInputFile.h>
+#include <ImfTileDescriptionAttribute.h>
+#include <ImfPreviewImageAttribute.h>
+#include <ImfChannelList.h>
+#include <ImfMisc.h>
+#include <ImfTiledMisc.h>
+#include <ImfStdIO.h>
+#include <ImfCompressor.h>
+#include "ImathBox.h"
+#include <ImfArray.h>
+#include <ImfXdr.h>
+#include <ImfVersion.h>
+#include <ImfTileOffsets.h>
+#include <ImfThreading.h>
+#include "IlmThreadPool.h"
+#include "IlmThreadSemaphore.h"
+#include "IlmThreadMutex.h"
+#include "Iex.h"
+#include <string>
+#include <vector>
+#include <fstream>
+#include <assert.h>
+#include <map>
+
+
+namespace Imf {
+
+using Imath::Box2i;
+using Imath::V2i;
+using std::string;
+using std::vector;
+using std::ofstream;
+using std::map;
+using std::min;
+using std::max;
+using std::swap;
+using IlmThread::Mutex;
+using IlmThread::Lock;
+using IlmThread::Semaphore;
+using IlmThread::Task;
+using IlmThread::TaskGroup;
+using IlmThread::ThreadPool;
+
+namespace {
+
+struct TOutSliceInfo
+{
+    PixelType          type;
+    const char *       base;
+    size_t             xStride;
+    size_t             yStride;
+    bool               zero;
+    int                 xTileCoords;
+    int                 yTileCoords;
+
+    TOutSliceInfo (PixelType type = HALF,
+                  const char *base = 0,
+                  size_t xStride = 0,
+                  size_t yStride = 0,
+                  bool zero = false,
+                   int xTileCoords = 0,
+                   int yTileCoords = 0);
+};
+
+
+TOutSliceInfo::TOutSliceInfo (PixelType t,
+                             const char *b,
+                             size_t xs, size_t ys,
+                             bool z,
+                              int xtc,
+                              int ytc)
+:
+    type (t),
+    base (b),
+    xStride (xs),
+    yStride (ys),
+    zero (z),
+    xTileCoords (xtc),
+    yTileCoords (ytc)
+{
+    // empty
+}
+
+
+struct TileCoord
+{
+    int                dx;
+    int                dy;
+    int                lx;
+    int                ly;
+    
+
+    TileCoord (int xTile = 0, int yTile = 0,
+              int xLevel = 0, int yLevel = 0)
+    :
+        dx (xTile),  dy (yTile),
+       lx (xLevel), ly (yLevel)
+    {
+        // empty
+    }
+    
+
+    bool
+    operator < (const TileCoord &other) const
+    {
+        return (ly < other.ly) ||
+              (ly == other.ly && lx < other.lx) ||
+              ((ly == other.ly && lx == other.lx) &&
+                   ((dy < other.dy) || (dy == other.dy && dx < other.dx)));
+    }
+
+
+    bool
+    operator == (const TileCoord &other) const
+    {
+        return lx == other.lx &&
+              ly == other.ly &&
+              dx == other.dx &&
+              dy == other.dy;
+    }
+};
+
+
+struct BufferedTile
+{
+    char *     pixelData;
+    int                pixelDataSize;
+
+    BufferedTile (const char *data, int size):
+       pixelData (0),
+       pixelDataSize(size)
+    {
+       pixelData = new char[pixelDataSize];
+       memcpy (pixelData, data, pixelDataSize);
+    }
+
+    ~BufferedTile()
+    {
+       delete [] pixelData;
+    }
+};
+
+
+typedef map <TileCoord, BufferedTile *> TileMap;
+
+
+struct TileBuffer
+{
+    Array<char>                buffer;
+    const char *       dataPtr;
+    int                        dataSize;
+    Compressor *       compressor;
+    TileCoord          tileCoord;
+    bool               hasException;
+    string             exception;
+
+     TileBuffer (Compressor *comp);
+    ~TileBuffer ();
+
+    inline void                wait () {_sem.wait();}
+    inline void                post () {_sem.post();}
+
+  protected:
+
+    Semaphore          _sem;
+};
+
+
+TileBuffer::TileBuffer (Compressor *comp):
+    dataPtr (0),
+    dataSize (0),
+    compressor (comp),
+    hasException (false),
+    exception (),
+    _sem (1)
+{
+    // empty
+}
+
+
+TileBuffer::~TileBuffer ()
+{
+    delete compressor;
+}
+
+
+} // namespace
+
+
+struct TiledOutputFile::Data: public Mutex
+{
+    Header             header;                 // the image header
+    int                        version;                // file format version
+    TileDescription    tileDesc;               // describes the tile layout
+    FrameBuffer                frameBuffer;            // framebuffer to write into
+    Int64              previewPosition;
+    LineOrder          lineOrder;              // the file's lineorder
+    int                        minX;                   // data window's min x coord
+    int                        maxX;                   // data window's max x coord
+    int                        minY;                   // data window's min y coord
+    int                        maxY;                   // data window's max x coord
+
+    int                        numXLevels;             // number of x levels
+    int                        numYLevels;             // number of y levels
+    int *              numXTiles;              // number of x tiles at a level
+    int *              numYTiles;              // number of y tiles at a level
+
+    TileOffsets                tileOffsets;            // stores offsets in file for
+                                               // each tile
+
+    Compressor::Format format;                 // compressor's data format
+    vector<TOutSliceInfo> slices;              // info about channels in file
+    OStream *          os;                     // file stream to write to
+    bool               deleteStream;
+
+    size_t             maxBytesPerTileLine;    // combined size of a tile line
+                                               // over all channels
+
+    
+    vector<TileBuffer*> tileBuffers;
+    size_t             tileBufferSize;         // size of a tile buffer
+
+    Int64              tileOffsetsPosition;    // position of the tile index
+    Int64              currentPosition;        // current position in the file
+    
+    TileMap            tileMap;
+    TileCoord          nextTileToWrite;
+
+     Data (bool del, int numThreads);
+    ~Data ();
+    
+    inline TileBuffer *        getTileBuffer (int number);
+                                               // hash function from tile
+                                               // buffer coords into our
+                                               // vector of tile buffers
+    
+    TileCoord          nextTileCoord (const TileCoord &a);
+};
+
+
+TiledOutputFile::Data::Data (bool del, int numThreads):
+    numXTiles(0),
+    numYTiles(0),
+    os (0),
+    deleteStream (del),
+    tileOffsetsPosition (0)
+{
+    //
+    // We need at least one tileBuffer, but if threading is used,
+    // to keep n threads busy we need 2*n tileBuffers
+    //
+
+    tileBuffers.resize (max (1, 2 * numThreads));
+}
+
+
+TiledOutputFile::Data::~Data ()
+{
+    delete [] numXTiles;
+    delete [] numYTiles;
+
+    if (deleteStream)
+       delete os;
+    
+    //
+    // Delete all the tile buffers, if any still happen to exist
+    //
+    
+    for (TileMap::iterator i = tileMap.begin(); i != tileMap.end(); ++i)
+       delete i->second;
+
+    for (size_t i = 0; i < tileBuffers.size(); i++)
+        delete tileBuffers[i];
+}
+
+
+TileBuffer*
+TiledOutputFile::Data::getTileBuffer (int number)
+{
+    return tileBuffers[number % tileBuffers.size()];
+}
+
+
+TileCoord
+TiledOutputFile::Data::nextTileCoord (const TileCoord &a)
+{
+    TileCoord b = a;
+    
+    if (lineOrder == INCREASING_Y)
+    {
+        b.dx++;
+
+        if (b.dx >= numXTiles[b.lx])
+        {
+            b.dx = 0;
+            b.dy++;
+
+            if (b.dy >= numYTiles[b.ly])
+            {
+               //
+               // the next tile is in the next level
+               //
+
+                b.dy = 0;
+
+                switch (tileDesc.mode)
+                {
+                  case ONE_LEVEL:
+                  case MIPMAP_LEVELS:
+
+                    b.lx++;
+                    b.ly++;
+                    break;
+
+                  case RIPMAP_LEVELS:
+
+                    b.lx++;
+
+                    if (b.lx >= numXLevels)
+                    {
+                        b.lx = 0;
+                        b.ly++;
+
+                       #ifdef DEBUG
+                           assert (b.ly <= numYLevels);
+                       #endif
+                    }
+                    break;
+                }
+            }
+        }
+    }
+    else if (lineOrder == DECREASING_Y)
+    {
+        b.dx++;
+
+        if (b.dx >= numXTiles[b.lx])
+        {
+            b.dx = 0;
+            b.dy--;
+
+            if (b.dy < 0)
+            {
+               //
+               // the next tile is in the next level
+               //
+
+                switch (tileDesc.mode)
+                {
+                  case ONE_LEVEL:
+                  case MIPMAP_LEVELS:
+
+                    b.lx++;
+                    b.ly++;
+                    break;
+
+                  case RIPMAP_LEVELS:
+
+                    b.lx++;
+
+                    if (b.lx >= numXLevels)
+                    {
+                        b.lx = 0;
+                        b.ly++;
+
+                       #ifdef DEBUG
+                           assert (b.ly <= numYLevels);
+                       #endif
+                    }
+                    break;
+                }
+
+               if (b.ly < numYLevels)
+                   b.dy = numYTiles[b.ly] - 1;
+            }
+        }
+    }
+    
+    return b;   
+}
+
+
+namespace {
+
+void
+writeTileData (TiledOutputFile::Data *ofd,
+               int dx, int dy,
+              int lx, int ly, 
+               const char pixelData[],
+               int pixelDataSize)
+{
+    //
+    // Store a block of pixel data in the output file, and try
+    // to keep track of the current writing position the file,
+    // without calling tellp() (tellp() can be fairly expensive).
+    //
+
+    Int64 currentPosition = ofd->currentPosition;
+    ofd->currentPosition = 0;
+
+    if (currentPosition == 0)
+        currentPosition = ofd->os->tellp();
+
+    ofd->tileOffsets (dx, dy, lx, ly) = currentPosition;
+
+    #ifdef DEBUG
+       assert (ofd->os->tellp() == currentPosition);
+    #endif
+
+    //
+    // Write the tile header.
+    //
+
+    Xdr::write <StreamIO> (*ofd->os, dx);
+    Xdr::write <StreamIO> (*ofd->os, dy);
+    Xdr::write <StreamIO> (*ofd->os, lx);
+    Xdr::write <StreamIO> (*ofd->os, ly);
+    Xdr::write <StreamIO> (*ofd->os, pixelDataSize);
+
+    ofd->os->write (pixelData, pixelDataSize);    
+
+    //
+    // Keep current position in the file so that we can avoid 
+    // redundant seekg() operations (seekg() can be fairly expensive).
+    //
+
+    ofd->currentPosition = currentPosition +
+                           5 * Xdr::size<int>() +
+                           pixelDataSize;
+}
+
+
+
+void
+bufferedTileWrite (TiledOutputFile::Data *ofd,
+                   int dx, int dy,
+                  int lx, int ly, 
+                   const char pixelData[],
+                   int pixelDataSize)
+{
+    //
+    // Check if a tile with coordinates (dx,dy,lx,ly) has already been written.
+    //
+
+    if (ofd->tileOffsets (dx, dy, lx, ly))
+    {
+       THROW (Iex::ArgExc,
+              "Attempt to write tile "
+              "(" << dx << ", " << dy << ", " << lx << "," << ly << ") "
+              "more than once.");
+    }
+
+    //
+    // If tiles can be written in random order, then don't buffer anything.
+    //
+    
+    if (ofd->lineOrder == RANDOM_Y)
+    {
+        writeTileData (ofd, dx, dy, lx, ly, pixelData, pixelDataSize);
+        return;
+    }
+    
+    //
+    // If the tiles cannot be written in random order, then check if a
+    // tile with coordinates (dx,dy,lx,ly) has already been buffered.
+    //
+
+    TileCoord currentTile = TileCoord(dx, dy, lx, ly);
+
+    if (ofd->tileMap.find (currentTile) != ofd->tileMap.end())
+    {
+       THROW (Iex::ArgExc,
+              "Attempt to write tile "
+              "(" << dx << ", " << dy << ", " << lx << "," << ly << ") "
+              "more than once.");
+    }
+
+    //
+    // If all the tiles before this one have already been written to the file,
+    // then write this tile immediately and check if we have buffered tiles
+    // that can be written after this tile.
+    //
+    // Otherwise, buffer the tile so it can be written to file later.
+    //
+    
+    if (ofd->nextTileToWrite == currentTile)
+    {
+        writeTileData (ofd, dx, dy, lx, ly, pixelData, pixelDataSize);        
+        ofd->nextTileToWrite = ofd->nextTileCoord (ofd->nextTileToWrite);
+
+        TileMap::iterator i = ofd->tileMap.find (ofd->nextTileToWrite);
+        
+        //
+        // Step through the tiles and write all successive buffered tiles after
+        // the current one.
+        //
+        
+        while(i != ofd->tileMap.end())
+        {
+            //
+            // Write the tile, and then delete the tile's buffered data
+            //
+
+            writeTileData (ofd,
+                          i->first.dx, i->first.dy,
+                          i->first.lx, i->first.ly,
+                          i->second->pixelData,
+                          i->second->pixelDataSize);
+
+            delete i->second;
+            ofd->tileMap.erase (i);
+            
+            //
+            // Proceed to the next tile
+            //
+            
+            ofd->nextTileToWrite = ofd->nextTileCoord (ofd->nextTileToWrite);
+            i = ofd->tileMap.find (ofd->nextTileToWrite);
+        }
+    }
+    else
+    {
+        //
+        // Create a new BufferedTile, copy the pixelData into it, and
+        // insert it into the tileMap.
+        //
+
+       ofd->tileMap[currentTile] =
+           new BufferedTile ((const char *)pixelData, pixelDataSize);
+    }
+}
+
+
+void
+convertToXdr (TiledOutputFile::Data *ofd,
+              Array<char>& tileBuffer,
+             int numScanLines,
+             int numPixelsPerScanLine)
+{
+    //
+    // Convert the contents of a TiledOutputFile's tileBuffer from the 
+    // machine's native representation to Xdr format. This function is called
+    // by writeTile(), below, if the compressor wanted its input pixel data
+    // in the machine's native format, but then failed to compress the data
+    // (most compressors will expand rather than compress random input data).
+    //
+    // Note that this routine assumes that the machine's native representation
+    // of the pixel data has the same size as the Xdr representation.  This
+    // makes it possible to convert the pixel data in place, without an
+    // intermediate temporary buffer.
+    //
+
+    //
+    // Set these to point to the start of the tile.
+    // We will write to toPtr, and read from fromPtr.
+    //
+
+    char *writePtr = tileBuffer;
+    const char *readPtr = writePtr;
+
+    //
+    // Iterate over all scan lines in the tile.
+    //
+
+    for (int y = 0; y < numScanLines; ++y)
+    {
+       //
+       // Iterate over all slices in the file.
+       //
+
+       for (unsigned int i = 0; i < ofd->slices.size(); ++i)
+       {
+           const TOutSliceInfo &slice = ofd->slices[i];
+
+           //
+           // Convert the samples in place.
+           //
+            
+            convertInPlace (writePtr, readPtr, slice.type,
+                            numPixelsPerScanLine);
+       }
+    }
+
+    #ifdef DEBUG
+
+       assert (writePtr == readPtr);
+
+    #endif
+}
+
+
+//
+// A TileBufferTask encapsulates the task of copying a tile from
+// the user's framebuffer into a LineBuffer and compressing the data
+// if necessary.
+//
+
+class TileBufferTask: public Task
+{
+  public:
+                    
+    TileBufferTask (TaskGroup *group,
+                    TiledOutputFile::Data *ofd,
+                    int number,
+                   int dx, int dy,
+                   int lx, int ly);
+                    
+    virtual ~TileBufferTask ();
+
+    virtual void               execute ();
+    
+  private:
+
+    TiledOutputFile::Data *    _ofd;
+    TileBuffer *               _tileBuffer;
+};
+
+
+TileBufferTask::TileBufferTask
+    (TaskGroup *group,
+     TiledOutputFile::Data *ofd,
+     int number,
+     int dx, int dy,
+     int lx, int ly)
+:
+    Task (group),
+    _ofd (ofd),
+    _tileBuffer (_ofd->getTileBuffer (number))
+{
+    //
+    // Wait for the tileBuffer to become available
+    //
+
+    _tileBuffer->wait ();
+    _tileBuffer->tileCoord = TileCoord (dx, dy, lx, ly);
+}
+
+
+TileBufferTask::~TileBufferTask ()
+{
+    //
+    // Signal that the tile buffer is now free
+    //
+
+    _tileBuffer->post ();
+}
+
+
+void
+TileBufferTask::execute ()
+{
+    try
+    {
+        //
+        // First copy the pixel data from the frame buffer
+       // into the tile buffer
+        //
+        // Convert one tile's worth of pixel data to
+        // a machine-independent representation, and store
+        // the result in _tileBuffer->buffer.
+        //
+    
+        char *writePtr = _tileBuffer->buffer;
+    
+        Box2i tileRange = Imf::dataWindowForTile (_ofd->tileDesc,
+                                                  _ofd->minX, _ofd->maxX,
+                                                  _ofd->minY, _ofd->maxY,
+                                                  _tileBuffer->tileCoord.dx,
+                                                  _tileBuffer->tileCoord.dy,
+                                                  _tileBuffer->tileCoord.lx,
+                                                  _tileBuffer->tileCoord.ly);
+    
+        int numScanLines = tileRange.max.y - tileRange.min.y + 1;
+        int numPixelsPerScanLine = tileRange.max.x - tileRange.min.x + 1;
+    
+        //
+        // Iterate over the scan lines in the tile.
+        //
+        
+        for (int y = tileRange.min.y; y <= tileRange.max.y; ++y)
+        {
+            //
+            // Iterate over all image channels.
+            //
+    
+            for (unsigned int i = 0; i < _ofd->slices.size(); ++i)
+            {
+                const TOutSliceInfo &slice = _ofd->slices[i];
+    
+                //
+                // These offsets are used to facilitate both absolute
+                // and tile-relative pixel coordinates.
+                //
+            
+                int xOffset = slice.xTileCoords * tileRange.min.x;
+                int yOffset = slice.yTileCoords * tileRange.min.y;
+    
+               //
+               // Fill the tile buffer with pixel data.
+               //
+
+                if (slice.zero)
+                {
+                    //
+                    // The frame buffer contains no data for this channel.
+                    // Store zeroes in _data->tileBuffer.
+                    //
+                    
+                    fillChannelWithZeroes (writePtr, _ofd->format, slice.type,
+                                           numPixelsPerScanLine);
+                }
+                else
+                {
+                    //
+                    // The frame buffer contains data for this channel.
+                    //
+    
+                    const char *readPtr = slice.base +
+                                          (y - yOffset) * slice.yStride +
+                                          (tileRange.min.x - xOffset) *
+                                          slice.xStride;
+
+                    const char *endPtr  = readPtr +
+                                          (numPixelsPerScanLine - 1) *
+                                          slice.xStride;
+                                        
+                    copyFromFrameBuffer (writePtr, readPtr, endPtr,
+                                         slice.xStride, _ofd->format,
+                                         slice.type);
+                }
+            }
+        }
+        
+        //
+        // Compress the contents of the tileBuffer, 
+        // and store the compressed data in the output file.
+        //
+    
+        _tileBuffer->dataSize = writePtr - _tileBuffer->buffer;
+        _tileBuffer->dataPtr = _tileBuffer->buffer;
+    
+        if (_tileBuffer->compressor)
+        {
+            const char *compPtr;
+
+            int compSize = _tileBuffer->compressor->compressTile
+                                                (_tileBuffer->dataPtr,
+                                                 _tileBuffer->dataSize,
+                                                 tileRange, compPtr);
+    
+            if (compSize < _tileBuffer->dataSize)
+            {
+                _tileBuffer->dataSize = compSize;
+                _tileBuffer->dataPtr = compPtr;
+            }
+            else if (_ofd->format == Compressor::NATIVE)
+            {
+                //
+                // The data did not shrink during compression, but
+                // we cannot write to the file using native format,
+                // so we need to convert the lineBuffer to Xdr.
+                //
+    
+                convertToXdr (_ofd, _tileBuffer->buffer, numScanLines,
+                              numPixelsPerScanLine);
+            }
+        }
+    }
+    catch (std::exception &e)
+    {
+        if (!_tileBuffer->hasException)
+        {
+            _tileBuffer->exception = e.what ();
+            _tileBuffer->hasException = true;
+        }
+    }
+    catch (...)
+    {
+        if (!_tileBuffer->hasException)
+        {
+            _tileBuffer->exception = "unrecognized exception";
+            _tileBuffer->hasException = true;
+        }
+    }
+}
+
+} // namespace
+
+
+TiledOutputFile::TiledOutputFile
+    (const char fileName[],
+     const Header &header,
+     int numThreads)
+:
+    _data (new Data (true, numThreads))
+{
+    try
+    {
+       header.sanityCheck (true);
+       _data->os = new StdOFStream (fileName);
+       initialize (header);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       delete _data;
+
+       REPLACE_EXC (e, "Cannot open image file "
+                       "\"" << fileName << "\". " << e);
+       throw;
+    }
+    catch (...)
+    {
+       delete _data;
+        throw;
+    }
+}
+
+
+TiledOutputFile::TiledOutputFile
+    (OStream &os,
+     const Header &header,
+     int numThreads)
+:
+    _data (new Data (false, numThreads))
+{
+    try
+    {
+       header.sanityCheck(true);
+       _data->os = &os;
+       initialize (header);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       delete _data;
+
+       REPLACE_EXC (e, "Cannot open image file "
+                       "\"" << os.fileName() << "\". " << e);
+       throw;
+    }
+    catch (...)
+    {
+       delete _data;
+        throw;
+    }
+}
+
+
+void
+TiledOutputFile::initialize (const Header &header)
+{
+    _data->header = header;
+    _data->lineOrder = _data->header.lineOrder();
+
+    //
+    // Check that the file is indeed tiled
+    //
+
+    _data->tileDesc = _data->header.tileDescription();
+
+    //
+    // Save the dataWindow information
+    //
+
+    const Box2i &dataWindow = _data->header.dataWindow();
+    _data->minX = dataWindow.min.x;
+    _data->maxX = dataWindow.max.x;
+    _data->minY = dataWindow.min.y;
+    _data->maxY = dataWindow.max.y;
+
+    //
+    // Precompute level and tile information to speed up utility functions
+    //
+
+    precalculateTileInfo (_data->tileDesc,
+                         _data->minX, _data->maxX,
+                         _data->minY, _data->maxY,
+                         _data->numXTiles, _data->numYTiles,
+                         _data->numXLevels, _data->numYLevels);       
+    
+    //
+    // Determine the first tile coordinate that we will be writing
+    // if the file is not RANDOM_Y.
+    //
+    
+    _data->nextTileToWrite = (_data->lineOrder == INCREASING_Y)?
+                              TileCoord (0, 0, 0, 0):
+                              TileCoord (0, _data->numYTiles[0] - 1, 0, 0);
+
+    _data->maxBytesPerTileLine =
+           calculateBytesPerPixel (_data->header) * _data->tileDesc.xSize;
+
+    _data->tileBufferSize = _data->maxBytesPerTileLine * _data->tileDesc.ySize;
+    
+    //
+    // Create all the TileBuffers and allocate their internal buffers
+    //
+
+    for (size_t i = 0; i < _data->tileBuffers.size(); i++)
+    {
+        _data->tileBuffers[i] = new TileBuffer (newTileCompressor
+                                                 (_data->header.compression(),
+                                                  _data->maxBytesPerTileLine,
+                                                  _data->tileDesc.ySize,
+                                                  _data->header));
+
+        _data->tileBuffers[i]->buffer.resizeErase(_data->tileBufferSize);
+    }
+
+    _data->format = defaultFormat (_data->tileBuffers[0]->compressor);
+
+    _data->tileOffsets = TileOffsets (_data->tileDesc.mode,
+                                     _data->numXLevels,
+                                     _data->numYLevels,
+                                     _data->numXTiles,
+                                     _data->numYTiles);
+
+    _data->previewPosition = _data->header.writeTo (*_data->os, true);
+
+    _data->tileOffsetsPosition = _data->tileOffsets.writeTo (*_data->os);
+    _data->currentPosition = _data->os->tellp();
+}
+
+
+TiledOutputFile::~TiledOutputFile ()
+{
+    if (_data)
+    {
+        {
+            if (_data->tileOffsetsPosition > 0)
+            {
+                try
+                {
+                    _data->os->seekp (_data->tileOffsetsPosition);
+                    _data->tileOffsets.writeTo (*_data->os);
+                }
+                catch (...)
+                {
+                    //
+                    // We cannot safely throw any exceptions from here.
+                    // This destructor may have been called because the
+                    // stack is currently being unwound for another
+                    // exception.
+                    //
+                }
+            }
+        }
+        
+        delete _data;
+    }
+}
+
+
+const char *
+TiledOutputFile::fileName () const
+{
+    return _data->os->fileName();
+}
+
+
+const Header &
+TiledOutputFile::header () const
+{
+    return _data->header;
+}
+
+
+void   
+TiledOutputFile::setFrameBuffer (const FrameBuffer &frameBuffer)
+{
+    Lock lock (*_data);
+
+    //
+    // Check if the new frame buffer descriptor
+    // is compatible with the image file header.
+    //
+
+    const ChannelList &channels = _data->header.channels();
+
+    for (ChannelList::ConstIterator i = channels.begin();
+        i != channels.end();
+        ++i)
+    {
+       FrameBuffer::ConstIterator j = frameBuffer.find (i.name());
+
+       if (j == frameBuffer.end())
+           continue;
+
+       if (i.channel().type != j.slice().type)
+           THROW (Iex::ArgExc, "Pixel type of \"" << i.name() << "\" channel "
+                               "of output file \"" << fileName() << "\" is "
+                               "not compatible with the frame buffer's "
+                               "pixel type.");
+
+       if (j.slice().xSampling != 1 || j.slice().ySampling != 1)
+           THROW (Iex::ArgExc, "All channels in a tiled file must have"
+                               "sampling (1,1).");
+    }
+    
+    //
+    // Initialize slice table for writePixels().
+    //
+
+    vector<TOutSliceInfo> slices;
+
+    for (ChannelList::ConstIterator i = channels.begin();
+        i != channels.end();
+        ++i)
+    {
+       FrameBuffer::ConstIterator j = frameBuffer.find (i.name());
+
+       if (j == frameBuffer.end())
+       {
+           //
+           // Channel i is not present in the frame buffer.
+           // In the file, channel i will contain only zeroes.
+           //
+
+           slices.push_back (TOutSliceInfo (i.channel().type,
+                                            0, // base
+                                            0, // xStride,
+                                            0, // yStride,
+                                            true)); // zero
+       }
+       else
+       {
+           //
+           // Channel i is present in the frame buffer.
+           //
+
+           slices.push_back (TOutSliceInfo (j.slice().type,
+                                            j.slice().base,
+                                            j.slice().xStride,
+                                            j.slice().yStride,
+                                            false, // zero
+                                             (j.slice().xTileCoords)? 1: 0,
+                                             (j.slice().yTileCoords)? 1: 0));
+       }
+    }
+
+    //
+    // Store the new frame buffer.
+    //
+
+    _data->frameBuffer = frameBuffer;
+    _data->slices = slices;
+}
+
+
+const FrameBuffer &
+TiledOutputFile::frameBuffer () const
+{
+    Lock lock (*_data);
+    return _data->frameBuffer;
+}
+
+
+void   
+TiledOutputFile::writeTiles (int dx1, int dx2, int dy1, int dy2,
+                             int lx, int ly)
+{
+    try
+    {
+        Lock lock (*_data);
+
+        if (_data->slices.size() == 0)
+           throw Iex::ArgExc ("No frame buffer specified "
+                              "as pixel data source.");
+
+       if (!isValidTile (dx1, dy1, lx, ly) || !isValidTile (dx2, dy2, lx, ly))
+           throw Iex::ArgExc ("Tile coordinates are invalid.");
+
+        //
+        // Determine the first and last tile coordinates in both dimensions
+        // based on the file's lineOrder
+        //
+                               
+        if (dx1 > dx2)
+            swap (dx1, dx2);
+        
+        if (dy1 > dy2)
+            swap (dy1, dy2);
+        
+        int dyStart = dy1;
+       int dyStop  = dy2 + 1;
+       int dY      = 1;
+    
+        if (_data->lineOrder == DECREASING_Y)
+        {
+            dyStart = dy2;
+            dyStop  = dy1 - 1;
+            dY      = -1;
+        }
+        
+        int numTiles = (dx2 - dx1 + 1) * (dy2 - dy1 + 1);
+        int numTasks = min ((int)_data->tileBuffers.size(), numTiles);
+
+        //
+        // Create a task group for all tile buffer tasks.  When the
+       // task group goes out of scope, the destructor waits until
+       // all tasks are complete.
+        //
+
+        {
+            TaskGroup taskGroup;
+    
+            //
+            // Add in the initial compression tasks to the thread pool
+            //
+    
+            int nextCompBuffer = 0;
+           int dxComp         = dx1;
+           int dyComp         = dyStart;
+
+            while (nextCompBuffer < numTasks)
+            {
+                ThreadPool::addGlobalTask (new TileBufferTask (&taskGroup,
+                                                               _data,
+                                                               nextCompBuffer++,
+                                                               dxComp, dyComp,
+                                                               lx, ly));
+                dxComp++;
+
+                if (dxComp > dx2)
+                {
+                    dxComp = dx1;
+                    dyComp += dY;
+                }
+            }
+            
+            //
+            // Write the compressed buffers and add in more compression
+           // tasks until done
+            //
+    
+            int nextWriteBuffer = 0;
+           int dxWrite         = dx1;
+           int dyWrite         = dyStart;
+
+            while (nextWriteBuffer < numTiles)
+            {
+               //
+                // Wait until the nextWriteBuffer is ready to be written
+               //
+
+                TileBuffer* writeBuffer =
+                                    _data->getTileBuffer (nextWriteBuffer);
+
+                writeBuffer->wait();
+    
+               //
+                // Write the tilebuffer
+               //
+
+                bufferedTileWrite (_data, dxWrite, dyWrite, lx, ly,
+                                   writeBuffer->dataPtr,
+                                   writeBuffer->dataSize);
+                
+               //
+                // Release the lock on nextWriteBuffer
+               //
+
+                writeBuffer->post();
+                
+               //
+                // If there are no more tileBuffers to compress, then
+               // only continue to write out remaining tileBuffers,
+               // otherwise keep adding compression tasks.
+               //
+
+                if (nextCompBuffer < numTiles)
+                {
+                   //
+                    // add nextCompBuffer as a compression Task
+                   //
+
+                    ThreadPool::addGlobalTask
+                       (new TileBufferTask (&taskGroup,
+                                            _data,
+                                            nextCompBuffer,
+                                             dxComp, dyComp,
+                                            lx, ly));
+                }
+    
+                nextWriteBuffer++;
+                dxWrite++;
+
+                if (dxWrite > dx2)
+                {
+                    dxWrite = dx1;
+                    dyWrite += dY;
+                }
+                    
+                nextCompBuffer++;
+                dxComp++;
+
+                if (dxComp > dx2)
+                {
+                    dxComp = dx1;
+                    dyComp += dY;
+                }
+            }
+
+           //
+            // finish all tasks
+           //
+        }
+
+       //
+       // Exeption handling:
+       //
+       // TileBufferTask::execute() may have encountered exceptions, but
+       // those exceptions occurred in another thread, not in the thread
+       // that is executing this call to TiledOutputFile::writeTiles().
+       // TileBufferTask::execute() has caught all exceptions and stored
+       // the exceptions' what() strings in the tile buffers.
+       // Now we check if any tile buffer contains a stored exception; if
+       // this is the case then we re-throw the exception in this thread.
+       // (It is possible that multiple tile buffers contain stored
+       // exceptions.  We re-throw the first exception we find and
+       // ignore all others.)
+       //
+
+       const string *exception = 0;
+
+        for (int i = 0; i < _data->tileBuffers.size(); ++i)
+       {
+            TileBuffer *tileBuffer = _data->tileBuffers[i];
+
+           if (tileBuffer->hasException && !exception)
+               exception = &tileBuffer->exception;
+
+           tileBuffer->hasException = false;
+       }
+
+       if (exception)
+           throw Iex::IoExc (*exception);
+    }
+    catch (Iex::BaseExc &e)
+    {
+        REPLACE_EXC (e, "Failed to write pixel data to image "
+                        "file \"" << fileName() << "\". " << e);
+        throw;
+    }
+}
+
+
+void   
+TiledOutputFile::writeTiles (int dx1, int dxMax, int dyMin, int dyMax, int l)
+{
+    writeTiles (dx1, dxMax, dyMin, dyMax, l, l);
+}
+
+
+void   
+TiledOutputFile::writeTile (int dx, int dy, int lx, int ly)
+{
+    writeTiles (dx, dx, dy, dy, lx, ly);
+}
+
+
+void
+TiledOutputFile::writeTile (int dx, int dy, int l)
+{
+    writeTile(dx, dy, l, l);
+}
+
+
+void   
+TiledOutputFile::copyPixels (TiledInputFile &in)
+{
+    Lock lock (*_data);
+
+    //
+    // Check if this file's and and the InputFile's
+    // headers are compatible.
+    //
+
+    const Header &hdr = _data->header;
+    const Header &inHdr = in.header(); 
+
+    if (!hdr.hasTileDescription() || !inHdr.hasTileDescription())
+        THROW (Iex::ArgExc, "Cannot perform a quick pixel copy from image "
+                           "file \"" << in.fileName() << "\" to image "
+                           "file \"" << fileName() << "\".  The "
+                            "output file is tiled, but the input file is not.  "
+                            "Try using OutputFile::copyPixels() instead.");
+
+    if (!(hdr.tileDescription() == inHdr.tileDescription()))
+        THROW (Iex::ArgExc, "Quick pixel copy from image "
+                           "file \"" << in.fileName() << "\" to image "
+                           "file \"" << fileName() << "\" failed. "
+                           "The files have different tile descriptions.");
+
+    if (!(hdr.dataWindow() == inHdr.dataWindow()))
+        THROW (Iex::ArgExc, "Cannot copy pixels from image "
+                           "file \"" << in.fileName() << "\" to image "
+                           "file \"" << fileName() << "\". The "
+                            "files have different data windows.");
+
+    if (!(hdr.lineOrder() == inHdr.lineOrder()))
+        THROW (Iex::ArgExc, "Quick pixel copy from image "
+                           "file \"" << in.fileName() << "\" to image "
+                           "file \"" << fileName() << "\" failed. "
+                           "The files have different line orders.");
+
+    if (!(hdr.compression() == inHdr.compression()))
+        THROW (Iex::ArgExc, "Quick pixel copy from image "
+                           "file \"" << in.fileName() << "\" to image "
+                           "file \"" << fileName() << "\" failed. "
+                           "The files use different compression methods.");
+
+    if (!(hdr.channels() == inHdr.channels()))
+        THROW (Iex::ArgExc, "Quick pixel copy from image "
+                            "file \"" << in.fileName() << "\" to image "
+                            "file \"" << fileName() << "\" "
+                             "failed.  The files have different channel "
+                             "lists.");
+
+    //
+    // Verify that no pixel data have been written to this file yet.
+    //
+
+    if (!_data->tileOffsets.isEmpty())
+        THROW (Iex::LogicExc, "Quick pixel copy from image "
+                             "file \"" << in.fileName() << "\" to image "
+                             "file \"" << _data->os->fileName() << "\" "
+                              "failed. \"" << fileName() << "\" "
+                              "already contains pixel data.");
+
+    //
+    // Calculate the total number of tiles in the file
+    //
+
+    int numAllTiles = 0;
+
+    switch (levelMode ())
+    {
+      case ONE_LEVEL:
+      case MIPMAP_LEVELS:
+
+        for (size_t i_l = 0; i_l < numLevels (); ++i_l)
+            numAllTiles += numXTiles (i_l) * numYTiles (i_l);
+
+        break;
+
+      case RIPMAP_LEVELS:
+
+        for (size_t i_ly = 0; i_ly < numYLevels (); ++i_ly)
+            for (size_t i_lx = 0; i_lx < numXLevels (); ++i_lx)
+                numAllTiles += numXTiles (i_lx) * numYTiles (i_ly);
+
+        break;
+
+      default:
+
+        throw Iex::ArgExc ("Unknown LevelMode format.");
+    }
+
+    for (int i = 0; i < numAllTiles; ++i)
+    {
+        const char *pixelData;
+        int pixelDataSize;
+        
+        int dx = _data->nextTileToWrite.dx;
+        int dy = _data->nextTileToWrite.dy;
+        int lx = _data->nextTileToWrite.lx;
+        int ly = _data->nextTileToWrite.ly;
+
+        in.rawTileData (dx, dy, lx, ly, pixelData, pixelDataSize);
+        writeTileData (_data, dx, dy, lx, ly, pixelData, pixelDataSize);
+    }
+}
+
+
+void   
+TiledOutputFile::copyPixels (InputFile &in)
+{
+    copyPixels (*in.tFile());
+}
+
+
+unsigned int
+TiledOutputFile::tileXSize () const
+{
+    return _data->tileDesc.xSize;
+}
+
+
+unsigned int
+TiledOutputFile::tileYSize () const
+{
+    return _data->tileDesc.ySize;
+}
+
+
+LevelMode
+TiledOutputFile::levelMode () const
+{
+    return _data->tileDesc.mode;
+}
+
+
+LevelRoundingMode
+TiledOutputFile::levelRoundingMode () const
+{
+    return _data->tileDesc.roundingMode;
+}
+
+
+int
+TiledOutputFile::numLevels () const
+{
+    if (levelMode() == RIPMAP_LEVELS)
+       THROW (Iex::LogicExc, "Error calling numLevels() on image "
+                             "file \"" << fileName() << "\" "
+                             "(numLevels() is not defined for RIPMAPs).");
+    return _data->numXLevels;
+}
+
+
+int
+TiledOutputFile::numXLevels () const
+{
+    return _data->numXLevels;
+}
+
+
+int
+TiledOutputFile::numYLevels () const
+{
+    return _data->numYLevels;
+}
+
+
+bool   
+TiledOutputFile::isValidLevel (int lx, int ly) const
+{
+    if (lx < 0 || ly < 0)
+       return false;
+
+    if (levelMode() == MIPMAP_LEVELS && lx != ly)
+       return false;
+
+    if (lx >= numXLevels() || ly >= numYLevels())
+       return false;
+
+    return true;
+}
+
+
+int
+TiledOutputFile::levelWidth (int lx) const
+{
+    try
+    {
+       int retVal = levelSize (_data->minX, _data->maxX, lx,
+                               _data->tileDesc.roundingMode);
+        
+        return retVal;
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Error calling levelWidth() on image "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+int
+TiledOutputFile::levelHeight (int ly) const
+{
+    try
+    {
+       return levelSize (_data->minY, _data->maxY, ly,
+                         _data->tileDesc.roundingMode);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Error calling levelHeight() on image "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+int
+TiledOutputFile::numXTiles (int lx) const
+{
+    if (lx < 0 || lx >= _data->numXLevels)
+       THROW (Iex::LogicExc, "Error calling numXTiles() on image "
+                             "file \"" << _data->os->fileName() << "\" "
+                             "(Argument is not in valid range).");
+
+    return _data->numXTiles[lx];
+}
+
+
+int
+TiledOutputFile::numYTiles (int ly) const
+{
+   if (ly < 0 || ly >= _data->numYLevels)
+       THROW (Iex::LogicExc, "Error calling numXTiles() on image "
+                             "file \"" << _data->os->fileName() << "\" "
+                             "(Argument is not in valid range).");
+
+    return _data->numYTiles[ly];
+}
+
+
+Box2i
+TiledOutputFile::dataWindowForLevel (int l) const
+{
+    return dataWindowForLevel (l, l);
+}
+
+
+Box2i
+TiledOutputFile::dataWindowForLevel (int lx, int ly) const
+{
+    try
+    {
+       return Imf::dataWindowForLevel (_data->tileDesc,
+                                       _data->minX, _data->maxX,
+                                       _data->minY, _data->maxY,
+                                       lx, ly);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Error calling dataWindowForLevel() on image "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+Box2i
+TiledOutputFile::dataWindowForTile (int dx, int dy, int l) const
+{
+    return dataWindowForTile (dx, dy, l, l);
+}
+
+
+Box2i
+TiledOutputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const
+{
+    try
+    {
+       if (!isValidTile (dx, dy, lx, ly))
+           throw Iex::ArgExc ("Arguments not in valid range.");
+
+       return Imf::dataWindowForTile (_data->tileDesc,
+                                      _data->minX, _data->maxX,
+                                      _data->minY, _data->maxY,
+                                      dx, dy,
+                                      lx, ly);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Error calling dataWindowForTile() on image "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+bool
+TiledOutputFile::isValidTile (int dx, int dy, int lx, int ly) const
+{
+    return ((lx < _data->numXLevels && lx >= 0) &&
+           (ly < _data->numYLevels && ly >= 0) &&
+           (dx < _data->numXTiles[lx] && dx >= 0) &&
+           (dy < _data->numYTiles[ly] && dy >= 0));
+}
+
+
+void
+TiledOutputFile::updatePreviewImage (const PreviewRgba newPixels[])
+{
+    Lock lock (*_data);
+
+    if (_data->previewPosition <= 0)
+       THROW (Iex::LogicExc, "Cannot update preview image pixels. "
+                             "File \"" << fileName() << "\" does not "
+                             "contain a preview image.");
+
+    //
+    // Store the new pixels in the header's preview image attribute.
+    //
+
+    PreviewImageAttribute &pia =
+       _data->header.typedAttribute <PreviewImageAttribute> ("preview");
+
+    PreviewImage &pi = pia.value();
+    PreviewRgba *pixels = pi.pixels();
+    int numPixels = pi.width() * pi.height();
+
+    for (int i = 0; i < numPixels; ++i)
+       pixels[i] = newPixels[i];
+
+    //
+    // Save the current file position, jump to the position in
+    // the file where the preview image starts, store the new
+    // preview image, and jump back to the saved file position.
+    //
+
+    Int64 savedPosition = _data->os->tellp();
+
+    try
+    {
+       _data->os->seekp (_data->previewPosition);
+       pia.writeValueTo (*_data->os, _data->version);
+       _data->os->seekp (savedPosition);
+    }
+    catch (Iex::BaseExc &e)
+    {
+       REPLACE_EXC (e, "Cannot update preview image pixels for "
+                       "file \"" << fileName() << "\". " << e);
+       throw;
+    }
+}
+
+
+void
+TiledOutputFile::breakTile 
+    (int dx, int dy,
+     int lx, int ly,
+     int offset,
+     int length,
+     char c)
+{
+    Lock lock (*_data);
+
+    Int64 position = _data->tileOffsets (dx, dy, lx, ly);
+
+    if (!position)
+       THROW (Iex::ArgExc,
+              "Cannot overwrite tile "
+              "(" << dx << ", " << dy << ", " << lx << "," << ly << "). "
+              "The tile has not yet been stored in "
+              "file \"" << fileName() << "\".");
+
+    _data->currentPosition = 0;
+    _data->os->seekp (position + offset);
+
+    for (int i = 0; i < length; ++i)
+       _data->os->write (&c, 1);
+}
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfTiledOutputFile.h b/3rdparty/openexr/IlmImf/ImfTiledOutputFile.h
new file mode 100644 (file)
index 0000000..3b4f3ff
--- /dev/null
@@ -0,0 +1,475 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_TILED_OUTPUT_FILE_H
+#define INCLUDED_IMF_TILED_OUTPUT_FILE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class TiledOutputFile
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfHeader.h>
+#include <ImfFrameBuffer.h>
+#include "ImathBox.h"
+#include <ImfTileDescription.h>
+#include <ImfThreading.h>
+
+namespace Imf {
+
+class TiledInputFile;
+class InputFile;
+struct PreviewRgba;
+
+
+class TiledOutputFile
+{
+  public:
+
+    //-------------------------------------------------------------------
+    // A constructor that opens the file with the specified name, and
+    // writes the file header.  The file header is also copied into the
+    // TiledOutputFile object, and can later be accessed via the header()
+    // method.
+    //
+    // Destroying TiledOutputFile constructed with this constructor
+    // automatically closes the corresponding files.
+    //
+    // The header must contain a TileDescriptionAttribute called "tiles".
+    //
+    // The x and y subsampling factors for all image channels must be 1;
+    // subsampling is not supported.
+    //
+    // Tiles can be written to the file in arbitrary order.  The line
+    // order attribute can be used to cause the tiles to be sorted in
+    // the file.  When the file is read later, reading the tiles in the
+    // same order as they are in the file tends to be significantly
+    // faster than reading the tiles in random order (see writeTile,
+    // below).
+    //-------------------------------------------------------------------
+    
+    TiledOutputFile (const char fileName[],
+                    const Header &header,
+                     int numThreads = globalThreadCount ());
+
+
+    // ----------------------------------------------------------------
+    // A constructor that attaches the new TiledOutputFile object to
+    // a file that has already been opened.  Destroying TiledOutputFile
+    // objects constructed with this constructor does not automatically
+    // close the corresponding files.
+    // ----------------------------------------------------------------
+
+    TiledOutputFile (OStream &os,
+                    const Header &header,
+                     int numThreads = globalThreadCount ());
+
+
+    //-----------------------------------------------------
+    // Destructor
+    //
+    // Destroying a TiledOutputFile object before all tiles
+    // have been written results in an incomplete file.
+    //-----------------------------------------------------
+    
+    virtual ~TiledOutputFile ();
+
+
+    //------------------------
+    // Access to the file name
+    //------------------------
+    
+    const char *       fileName () const;
+
+
+    //--------------------------
+    // Access to the file header
+    //--------------------------
+    
+    const Header &     header () const;
+
+
+    //-------------------------------------------------------
+    // Set the current frame buffer -- copies the FrameBuffer
+    // object into the TiledOutputFile object.
+    //
+    // The current frame buffer is the source of the pixel
+    // data written to the file.  The current frame buffer
+    // must be set at least once before writeTile() is
+    // called.  The current frame buffer can be changed
+    // after each call to writeTile().
+    //-------------------------------------------------------
+    
+    void               setFrameBuffer (const FrameBuffer &frameBuffer);
+
+
+    //-----------------------------------
+    // Access to the current frame buffer
+    //-----------------------------------
+    
+    const FrameBuffer &        frameBuffer () const;
+
+
+    //-------------------
+    // Utility functions:
+    //-------------------
+
+    //---------------------------------------------------------
+    // Multiresolution mode and tile size:
+    // The following functions return the xSize, ySize and mode
+    // fields of the file header's TileDescriptionAttribute.
+    //---------------------------------------------------------
+
+    unsigned int       tileXSize () const;
+    unsigned int       tileYSize () const;
+    LevelMode          levelMode () const;
+    LevelRoundingMode  levelRoundingMode () const;
+
+
+    //--------------------------------------------------------------------
+    // Number of levels:
+    //
+    // numXLevels() returns the file's number of levels in x direction.
+    //
+    // if levelMode() == ONE_LEVEL:
+    //      return value is: 1
+    //
+    // if levelMode() == MIPMAP_LEVELS:
+    //      return value is: rfunc (log (max (w, h)) / log (2)) + 1
+    //
+    // if levelMode() == RIPMAP_LEVELS:
+    //      return value is: rfunc (log (w) / log (2)) + 1
+    //
+    // where
+    //     w is the width of the image's data window,  max.x - min.x + 1,
+    //     y is the height of the image's data window, max.y - min.y + 1,
+    //     and rfunc(x) is either floor(x), or ceil(x), depending on
+    //     whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP.
+    //
+    // numYLevels() returns the file's number of levels in y direction.
+    //
+    // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS:
+    //      return value is the same as for numXLevels()
+    //
+    // if levelMode() == RIPMAP_LEVELS:
+    //      return value is: rfunc (log (h) / log (2)) + 1
+    //
+    //
+    // numLevels() is a convenience function for use with MIPMAP_LEVELS
+    // files.
+    //
+    // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS:
+    //      return value is the same as for numXLevels()
+    //
+    // if levelMode() == RIPMAP_LEVELS:
+    //      an Iex::LogicExc exception is thrown
+    //
+    // isValidLevel(lx, ly) returns true if the file contains 
+    // a level with level number (lx, ly), false if not.
+    //
+    //--------------------------------------------------------------------
+
+    int                        numLevels () const;
+    int                        numXLevels () const;
+    int                        numYLevels () const;
+    bool               isValidLevel (int lx, int ly) const;
+
+
+    //---------------------------------------------------------
+    // Dimensions of a level:
+    //
+    // levelWidth(lx) returns the width of a level with level
+    // number (lx, *), where * is any number.
+    //
+    // return value is:
+    //      max (1, rfunc (w / pow (2, lx)))
+    //
+    //
+    // levelHeight(ly) returns the height of a level with level
+    // number (*, ly), where * is any number.
+    //
+    // return value is:
+    //      max (1, rfunc (h / pow (2, ly)))
+    //
+    //---------------------------------------------------------
+
+    int                        levelWidth  (int lx) const;
+    int                        levelHeight (int ly) const;
+
+
+    //----------------------------------------------------------
+    // Number of tiles:
+    //
+    // numXTiles(lx) returns the number of tiles in x direction
+    // that cover a level with level number (lx, *), where * is
+    // any number.
+    //
+    // return value is:
+    //      (levelWidth(lx) + tileXSize() - 1) / tileXSize()
+    //
+    //
+    // numYTiles(ly) returns the number of tiles in y direction
+    // that cover a level with level number (*, ly), where * is
+    // any number.
+    //
+    // return value is:
+    //      (levelHeight(ly) + tileXSize() - 1) / tileXSize()
+    //
+    //----------------------------------------------------------
+
+    int                        numXTiles (int lx = 0) const;
+    int                        numYTiles (int ly = 0) const;
+
+
+    //---------------------------------------------------------
+    // Level pixel ranges:
+    //
+    // dataWindowForLevel(lx, ly) returns a 2-dimensional
+    // region of valid pixel coordinates for a level with
+    // level number (lx, ly)
+    //
+    // return value is a Box2i with min value:
+    //      (dataWindow.min.x, dataWindow.min.y)
+    //
+    // and max value:
+    //      (dataWindow.min.x + levelWidth(lx) - 1,
+    //       dataWindow.min.y + levelHeight(ly) - 1)
+    //
+    // dataWindowForLevel(level) is a convenience function used
+    // for ONE_LEVEL and MIPMAP_LEVELS files.  It returns
+    // dataWindowForLevel(level, level).
+    //
+    //---------------------------------------------------------
+
+    Imath::Box2i       dataWindowForLevel (int l = 0) const;
+    Imath::Box2i       dataWindowForLevel (int lx, int ly) const;
+
+
+    //-------------------------------------------------------------------
+    // Tile pixel ranges:
+    //
+    // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional
+    // region of valid pixel coordinates for a tile with tile coordinates
+    // (dx,dy) and level number (lx, ly).
+    //
+    // return value is a Box2i with min value:
+    //      (dataWindow.min.x + dx * tileXSize(),
+    //       dataWindow.min.y + dy * tileYSize())
+    //
+    // and max value:
+    //      (dataWindow.min.x + (dx + 1) * tileXSize() - 1,
+    //       dataWindow.min.y + (dy + 1) * tileYSize() - 1)
+    //
+    // dataWindowForTile(dx, dy, level) is a convenience function
+    // used for ONE_LEVEL and MIPMAP_LEVELS files.  It returns
+    // dataWindowForTile(dx, dy, level, level).
+    //
+    //-------------------------------------------------------------------
+
+    Imath::Box2i       dataWindowForTile (int dx, int dy,
+                                          int l = 0) const;
+
+    Imath::Box2i       dataWindowForTile (int dx, int dy,
+                                          int lx, int ly) const;
+
+    //------------------------------------------------------------------
+    // Write pixel data:
+    //
+    // writeTile(dx, dy, lx, ly) writes the tile with tile
+    // coordinates (dx, dy), and level number (lx, ly) to
+    // the file.
+    //
+    //   dx must lie in the interval [0, numXTiles(lx) - 1]
+    //   dy must lie in the interval [0, numYTiles(ly) - 1]
+    //
+    //   lx must lie in the interval [0, numXLevels() - 1]
+    //   ly must lie in the inverval [0, numYLevels() - 1]
+    //
+    // writeTile(dx, dy, level) is a convenience function
+    // used for ONE_LEVEL and MIPMAP_LEVEL files.  It calls
+    // writeTile(dx, dy, level, level).
+    //
+    // The two writeTiles(dx1, dx2, dy1, dy2, ...) functions allow
+    // writing multiple tiles at once.  If multi-threading is used
+    // multiple tiles are written concurrently.  The tile coordinates,
+    // dx1, dx2 and dy1, dy2, specify inclusive ranges of tile
+    // coordinates.  It is valid for dx1 < dx2 or dy1 < dy2; the
+    // tiles are always written in the order specified by the line
+    // order attribute.  Hence, it is not possible to specify an
+    // "invalid" or empty tile range.
+    //
+    // Pixels that are outside the pixel coordinate range for the tile's
+    // level, are never accessed by writeTile().
+    //
+    // Each tile in the file must be written exactly once.
+    //
+    // The file's line order attribute determines the order of the tiles
+    // in the file:
+    //
+    //  INCREASING_Y   In the file, the tiles for each level are stored
+    //                 in a contiguous block.  The levels are ordered
+    //                 like this:
+    //
+    //                     (0, 0)   (1, 0)   ... (nx-1, 0) 
+    //                     (0, 1)   (1, 1)   ... (nx-1, 1) 
+    //                      ...
+    //                     (0,ny-1) (1,ny-1) ... (nx-1,ny-1) 
+    //
+    //                 where nx = numXLevels(), and ny = numYLevels().
+    //                 In an individual level, (lx, ly), the tiles
+    //                 are stored in the following order:
+    //
+    //                     (0, 0)   (1, 0)   ... (tx-1, 0)
+    //                     (0, 1)   (1, 1)   ... (tx-1, 1)
+    //                      ...
+    //                     (0,ty-1) (1,ty-1) ... (tx-1,ty-1)
+    //
+    //                 where tx = numXTiles(lx),
+    //                 and   ty = numYTiles(ly).
+    //
+    //  DECREASING_Y   As for INCREASING_Y, the tiles for each level
+    //                 are stored in a contiguous block.  The levels
+    //                 are ordered the same way as for INCREASING_Y,
+    //                 but within an individual level, the tiles
+    //                 are stored in this order:
+    //
+    //                     (0,ty-1) (1,ty-1) ... (tx-1,ty-1)
+    //                      ...
+    //                     (0, 1)   (1, 1)   ... (tx-1, 1)
+    //                     (0, 0)   (1, 0)   ... (tx-1, 0)
+    //
+    //
+    //  RANDOM_Y       The order of the calls to writeTile() determines
+    //                 the order of the tiles in the file.
+    //
+    //------------------------------------------------------------------
+
+    void               writeTile  (int dx, int dy, int l = 0);
+    void               writeTile  (int dx, int dy, int lx, int ly);
+
+    void               writeTiles (int dx1, int dx2, int dy1, int dy2,
+                                    int lx, int ly);
+
+    void               writeTiles (int dx1, int dx2, int dy1, int dy2,
+                                    int l = 0);
+
+
+    //------------------------------------------------------------------
+    // Shortcut to copy all pixels from a TiledInputFile into this file,
+    // without uncompressing and then recompressing the pixel data.
+    // This file's header must be compatible with the TiledInputFile's
+    // header:  The two header's "dataWindow", "compression",
+    // "lineOrder", "channels", and "tiles" attributes must be the same.
+    //------------------------------------------------------------------
+    
+    void               copyPixels (TiledInputFile &in);
+    
+
+    //------------------------------------------------------------------
+    // Shortcut to copy all pixels from an InputFile into this file,
+    // without uncompressing and then recompressing the pixel data.
+    // This file's header must be compatible with the InputFile's
+    // header:  The two header's "dataWindow", "compression",
+    // "lineOrder", "channels", and "tiles" attributes must be the same.
+    //
+    // To use this function, the InputFile must be tiled.
+    //------------------------------------------------------------------
+    
+    void               copyPixels (InputFile &in);
+
+
+    //--------------------------------------------------------------
+    // Updating the preview image:
+    //
+    // updatePreviewImage() supplies a new set of pixels for the
+    // preview image attribute in the file's header.  If the header
+    // does not contain a preview image, updatePreviewImage() throws
+    // an Iex::LogicExc.
+    //
+    // Note: updatePreviewImage() is necessary because images are
+    // often stored in a file incrementally, a few tiles at a time,
+    // while the image is being generated.  Since the preview image
+    // is an attribute in the file's header, it gets stored in the
+    // file as soon as the file is opened, but we may not know what
+    // the preview image should look like until we have written the
+    // last tile of the main image.
+    //
+    //--------------------------------------------------------------
+
+    void               updatePreviewImage (const PreviewRgba newPixels[]);
+
+
+    //-------------------------------------------------------------
+    // Break a tile -- for testing and debugging only:
+    // 
+    // breakTile(dx,dy,lx,ly,p,n,c) introduces an error into the
+    // output file by writing n copies of character c, starting
+    // p bytes from the beginning of the tile with tile coordinates
+    // (dx, dy) and level number (lx, ly).
+    //
+    // Warning: Calling this function usually results in a broken
+    // image file.  The file or parts of it may not be readable,
+    // or the file may contain bad data.
+    //
+    //-------------------------------------------------------------
+
+    void               breakTile  (int dx, int dy,
+                                   int lx, int ly,
+                                   int offset,
+                                   int length,
+                                   char c);
+    struct Data;
+
+  private:
+
+    TiledOutputFile (const TiledOutputFile &);             // not implemented
+    TiledOutputFile & operator = (const TiledOutputFile &); // not implemented
+
+    void               initialize (const Header &header);
+
+    bool               isValidTile (int dx, int dy,
+                                    int lx, int ly) const;
+
+    size_t             bytesPerLineForTile (int dx, int dy,
+                                            int lx, int ly) const;
+
+    Data *             _data;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfTiledRgbaFile.cpp b/3rdparty/openexr/IlmImf/ImfTiledRgbaFile.cpp
new file mode 100644 (file)
index 0000000..1448fe6
--- /dev/null
@@ -0,0 +1,1162 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class TiledRgbaOutputFile
+//     class TiledRgbaInputFile
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfTiledRgbaFile.h>
+#include <ImfRgbaFile.h>
+#include <ImfTiledOutputFile.h>
+#include <ImfTiledInputFile.h>
+#include <ImfChannelList.h>
+#include <ImfTileDescriptionAttribute.h>
+#include <ImfStandardAttributes.h>
+#include <ImfRgbaYca.h>
+#include <ImfArray.h>
+#include "IlmThreadMutex.h"
+#include "Iex.h"
+
+
+namespace Imf {
+
+using namespace std;
+using namespace Imath;
+using namespace RgbaYca;
+using namespace IlmThread;
+
+namespace {
+
+void
+insertChannels (Header &header,
+               RgbaChannels rgbaChannels,
+               const char fileName[])
+{
+    ChannelList ch;
+
+    if (rgbaChannels & (WRITE_Y | WRITE_C))
+    {
+       if (rgbaChannels & WRITE_Y)
+       {
+           ch.insert ("Y", Channel (HALF, 1, 1));
+       }
+
+       if (rgbaChannels & WRITE_C)
+       {
+           THROW (Iex::ArgExc, "Cannot open file \"" << fileName << "\" "
+                               "for writing.  Tiled image files do not "
+                               "support subsampled chroma channels.");
+       }
+    }
+    else
+    {
+       if (rgbaChannels & WRITE_R)
+           ch.insert ("R", Channel (HALF, 1, 1));
+
+       if (rgbaChannels & WRITE_G)
+           ch.insert ("G", Channel (HALF, 1, 1));
+
+       if (rgbaChannels & WRITE_B)
+           ch.insert ("B", Channel (HALF, 1, 1));
+    }
+
+    if (rgbaChannels & WRITE_A)
+       ch.insert ("A", Channel (HALF, 1, 1));
+
+    header.channels() = ch;
+}
+
+
+RgbaChannels
+rgbaChannels (const ChannelList &ch, const string &channelNamePrefix = "")
+{
+    int i = 0;
+
+    if (ch.findChannel (channelNamePrefix + "R"))
+       i |= WRITE_R;
+
+    if (ch.findChannel (channelNamePrefix + "G"))
+       i |= WRITE_G;
+    
+    if (ch.findChannel (channelNamePrefix + "B"))
+       i |= WRITE_B;
+
+    if (ch.findChannel (channelNamePrefix + "A"))
+       i |= WRITE_A;
+
+    if (ch.findChannel (channelNamePrefix + "Y"))
+       i |= WRITE_Y;
+
+    return RgbaChannels (i);
+}
+
+
+string
+prefixFromLayerName (const string &layerName, const Header &header)
+{
+    if (layerName.empty())
+       return "";
+
+    if (hasMultiView (header) && multiView(header)[0] == layerName)
+       return "";
+
+    return layerName + ".";
+}
+
+
+V3f
+ywFromHeader (const Header &header)
+{
+    Chromaticities cr;
+
+    if (hasChromaticities (header))
+       cr = chromaticities (header);
+
+    return computeYw (cr);
+}
+
+} // namespace
+
+
+class TiledRgbaOutputFile::ToYa: public Mutex
+{
+  public:
+
+     ToYa (TiledOutputFile &outputFile, RgbaChannels rgbaChannels);
+
+     void      setFrameBuffer (const Rgba *base,
+                               size_t xStride,
+                               size_t yStride);
+
+     void      writeTile (int dx, int dy, int lx, int ly);
+
+  private:
+
+     TiledOutputFile & _outputFile;
+     bool              _writeA;
+     unsigned int      _tileXSize;
+     unsigned int      _tileYSize;
+     V3f               _yw;
+     Array2D <Rgba>    _buf;
+     const Rgba *      _fbBase;
+     size_t            _fbXStride;
+     size_t            _fbYStride;
+};
+
+
+TiledRgbaOutputFile::ToYa::ToYa (TiledOutputFile &outputFile,
+                                RgbaChannels rgbaChannels)
+:
+    _outputFile (outputFile)
+{
+    _writeA = (rgbaChannels & WRITE_A)? true: false;
+    
+    const TileDescription &td = outputFile.header().tileDescription();
+
+    _tileXSize = td.xSize;
+    _tileYSize = td.ySize;
+    _yw = ywFromHeader (_outputFile.header());
+    _buf.resizeErase (_tileYSize, _tileXSize);
+    _fbBase = 0;
+    _fbXStride = 0;
+    _fbYStride = 0;
+}
+
+
+void
+TiledRgbaOutputFile::ToYa::setFrameBuffer (const Rgba *base,
+                                          size_t xStride,
+                                          size_t yStride)
+{
+    _fbBase = base;
+    _fbXStride = xStride;
+    _fbYStride = yStride;
+}
+
+
+void
+TiledRgbaOutputFile::ToYa::writeTile (int dx, int dy, int lx, int ly)
+{
+    if (_fbBase == 0)
+    {
+       THROW (Iex::ArgExc, "No frame buffer was specified as the "
+                           "pixel data source for image file "
+                           "\"" << _outputFile.fileName() << "\".");
+    }
+
+    //
+    // Copy the tile's RGBA pixels into _buf and convert
+    // them to luminance/alpha format
+    //
+
+    Box2i dw = _outputFile.dataWindowForTile (dx, dy, lx, ly);
+    int width = dw.max.x - dw.min.x + 1;
+
+    for (int y = dw.min.y, y1 = 0; y <= dw.max.y; ++y, ++y1)
+    {
+       for (int x = dw.min.x, x1 = 0; x <= dw.max.x; ++x, ++x1)
+           _buf[y1][x1] = _fbBase[x * _fbXStride + y * _fbYStride];
+
+       RGBAtoYCA (_yw, width, _writeA, _buf[y1], _buf[y1]);
+    }
+
+    //
+    // Store the contents of _buf in the output file
+    //
+
+    FrameBuffer fb;
+
+    fb.insert ("Y", Slice (HALF,                                  // type
+                          (char *) &_buf[-dw.min.y][-dw.min.x].g, // base
+                          sizeof (Rgba),                          // xStride
+                          sizeof (Rgba) * _tileXSize));           // yStride
+
+    fb.insert ("A", Slice (HALF,                                  // type
+                          (char *) &_buf[-dw.min.y][-dw.min.x].a, // base
+                          sizeof (Rgba),                          // xStride
+                          sizeof (Rgba) * _tileXSize));           // yStride
+
+    _outputFile.setFrameBuffer (fb);
+    _outputFile.writeTile (dx, dy, lx, ly);
+}
+
+
+TiledRgbaOutputFile::TiledRgbaOutputFile
+    (const char name[],
+     const Header &header,
+     RgbaChannels rgbaChannels,
+     int tileXSize,
+     int tileYSize,
+     LevelMode mode,
+     LevelRoundingMode rmode,
+     int numThreads)
+:
+    _outputFile (0),
+    _toYa (0)
+{
+    Header hd (header);
+    insertChannels (hd, rgbaChannels, name);
+    hd.setTileDescription (TileDescription (tileXSize, tileYSize, mode, rmode));
+    _outputFile = new TiledOutputFile (name, hd, numThreads);
+
+    if (rgbaChannels & WRITE_Y)
+       _toYa = new ToYa (*_outputFile, rgbaChannels);
+}
+
+
+
+TiledRgbaOutputFile::TiledRgbaOutputFile
+    (OStream &os,
+     const Header &header,
+     RgbaChannels rgbaChannels,
+     int tileXSize,
+     int tileYSize,
+     LevelMode mode,
+     LevelRoundingMode rmode,
+     int numThreads)
+:
+    _outputFile (0),
+    _toYa (0)
+{
+    Header hd (header);
+    insertChannels (hd, rgbaChannels, os.fileName());
+    hd.setTileDescription (TileDescription (tileXSize, tileYSize, mode, rmode));
+    _outputFile = new TiledOutputFile (os, hd, numThreads);
+
+    if (rgbaChannels & WRITE_Y)
+       _toYa = new ToYa (*_outputFile, rgbaChannels);
+}
+
+
+
+TiledRgbaOutputFile::TiledRgbaOutputFile
+    (const char name[],
+     int tileXSize,
+     int tileYSize,
+     LevelMode mode,
+     LevelRoundingMode rmode,
+     const Imath::Box2i &displayWindow,
+     const Imath::Box2i &dataWindow,
+     RgbaChannels rgbaChannels,
+     float pixelAspectRatio,
+     const Imath::V2f screenWindowCenter,
+     float screenWindowWidth,
+     LineOrder lineOrder,
+     Compression compression,
+     int numThreads)
+:
+    _outputFile (0),
+    _toYa (0)
+{
+    Header hd (displayWindow,
+              dataWindow.isEmpty()? displayWindow: dataWindow,
+              pixelAspectRatio,
+              screenWindowCenter,
+              screenWindowWidth,
+              lineOrder,
+              compression);
+
+    insertChannels (hd, rgbaChannels, name);
+    hd.setTileDescription (TileDescription (tileXSize, tileYSize, mode, rmode));
+    _outputFile = new TiledOutputFile (name, hd, numThreads);
+
+    if (rgbaChannels & WRITE_Y)
+       _toYa = new ToYa (*_outputFile, rgbaChannels);
+}
+
+
+TiledRgbaOutputFile::TiledRgbaOutputFile
+    (const char name[],
+     int width,
+     int height,
+     int tileXSize,
+     int tileYSize,
+     LevelMode mode,
+     LevelRoundingMode rmode,
+     RgbaChannels rgbaChannels,
+     float pixelAspectRatio,
+     const Imath::V2f screenWindowCenter,
+     float screenWindowWidth,
+     LineOrder lineOrder,
+     Compression compression,
+     int numThreads)
+:
+    _outputFile (0),
+    _toYa (0)
+{
+    Header hd (width,
+              height,
+              pixelAspectRatio,
+              screenWindowCenter,
+              screenWindowWidth,
+              lineOrder,
+              compression);
+
+    insertChannels (hd, rgbaChannels, name);
+    hd.setTileDescription (TileDescription (tileXSize, tileYSize, mode, rmode));
+    _outputFile = new TiledOutputFile (name, hd, numThreads);
+
+    if (rgbaChannels & WRITE_Y)
+       _toYa = new ToYa (*_outputFile, rgbaChannels);
+}
+
+
+TiledRgbaOutputFile::~TiledRgbaOutputFile ()
+{
+    delete _outputFile;
+    delete _toYa;
+}
+
+
+void
+TiledRgbaOutputFile::setFrameBuffer (const Rgba *base,
+                                    size_t xStride,
+                                    size_t yStride)
+{
+    if (_toYa)
+    {
+       Lock lock (*_toYa);
+       _toYa->setFrameBuffer (base, xStride, yStride);
+    }
+    else
+    {
+       size_t xs = xStride * sizeof (Rgba);
+       size_t ys = yStride * sizeof (Rgba);
+
+       FrameBuffer fb;
+
+       fb.insert ("R", Slice (HALF, (char *) &base[0].r, xs, ys));
+       fb.insert ("G", Slice (HALF, (char *) &base[0].g, xs, ys));
+       fb.insert ("B", Slice (HALF, (char *) &base[0].b, xs, ys));
+       fb.insert ("A", Slice (HALF, (char *) &base[0].a, xs, ys));
+
+       _outputFile->setFrameBuffer (fb);
+    }
+}
+
+
+const Header &
+TiledRgbaOutputFile::header () const
+{
+    return _outputFile->header();
+}
+
+
+const FrameBuffer &
+TiledRgbaOutputFile::frameBuffer () const
+{
+    return _outputFile->frameBuffer();
+}
+
+
+const Imath::Box2i &
+TiledRgbaOutputFile::displayWindow () const
+{
+    return _outputFile->header().displayWindow();
+}
+
+
+const Imath::Box2i &
+TiledRgbaOutputFile::dataWindow () const
+{
+    return _outputFile->header().dataWindow();
+}
+
+
+float  
+TiledRgbaOutputFile::pixelAspectRatio () const
+{
+    return _outputFile->header().pixelAspectRatio();
+}
+
+
+const Imath::V2f
+TiledRgbaOutputFile::screenWindowCenter () const
+{
+    return _outputFile->header().screenWindowCenter();
+}
+
+
+float  
+TiledRgbaOutputFile::screenWindowWidth () const
+{
+    return _outputFile->header().screenWindowWidth();
+}
+
+
+LineOrder
+TiledRgbaOutputFile::lineOrder () const
+{
+    return _outputFile->header().lineOrder();
+}
+
+
+Compression
+TiledRgbaOutputFile::compression () const
+{
+    return _outputFile->header().compression();
+}
+
+
+RgbaChannels
+TiledRgbaOutputFile::channels () const
+{
+    return rgbaChannels (_outputFile->header().channels());
+}
+
+
+unsigned int
+TiledRgbaOutputFile::tileXSize () const
+{
+     return _outputFile->tileXSize();
+}
+
+
+unsigned int
+TiledRgbaOutputFile::tileYSize () const
+{
+     return _outputFile->tileYSize();
+}
+
+
+LevelMode
+TiledRgbaOutputFile::levelMode () const
+{
+     return _outputFile->levelMode();
+}
+
+
+LevelRoundingMode
+TiledRgbaOutputFile::levelRoundingMode () const
+{
+     return _outputFile->levelRoundingMode();
+}
+
+
+int
+TiledRgbaOutputFile::numLevels () const
+{
+     return _outputFile->numLevels();
+}
+
+
+int
+TiledRgbaOutputFile::numXLevels () const
+{
+     return _outputFile->numXLevels();
+}
+
+
+int
+TiledRgbaOutputFile::numYLevels () const
+{
+     return _outputFile->numYLevels();
+}
+
+
+bool
+TiledRgbaOutputFile::isValidLevel (int lx, int ly) const
+{
+    return _outputFile->isValidLevel (lx, ly);
+}
+
+
+int
+TiledRgbaOutputFile::levelWidth (int lx) const
+{
+     return _outputFile->levelWidth (lx);
+}
+
+
+int
+TiledRgbaOutputFile::levelHeight (int ly) const
+{
+     return _outputFile->levelHeight (ly);
+}
+
+
+int
+TiledRgbaOutputFile::numXTiles (int lx) const
+{
+     return _outputFile->numXTiles (lx);
+}
+
+
+int
+TiledRgbaOutputFile::numYTiles (int ly) const
+{
+     return _outputFile->numYTiles (ly);
+}
+
+
+Imath::Box2i
+TiledRgbaOutputFile::dataWindowForLevel (int l) const
+{
+     return _outputFile->dataWindowForLevel (l);
+}
+
+
+Imath::Box2i
+TiledRgbaOutputFile::dataWindowForLevel (int lx, int ly) const
+{
+     return _outputFile->dataWindowForLevel (lx, ly);
+}
+
+
+Imath::Box2i
+TiledRgbaOutputFile::dataWindowForTile (int dx, int dy, int l) const
+{
+     return _outputFile->dataWindowForTile (dx, dy, l);
+}
+
+
+Imath::Box2i
+TiledRgbaOutputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const
+{
+     return _outputFile->dataWindowForTile (dx, dy, lx, ly);
+}
+
+
+void
+TiledRgbaOutputFile::writeTile (int dx, int dy, int l)
+{
+    if (_toYa)
+    {
+       Lock lock (*_toYa);
+       _toYa->writeTile (dx, dy, l, l);
+    }
+    else
+    {
+        _outputFile->writeTile (dx, dy, l);
+    }
+}
+
+
+void
+TiledRgbaOutputFile::writeTile (int dx, int dy, int lx, int ly)
+{
+    if (_toYa)
+    {
+       Lock lock (*_toYa);
+       _toYa->writeTile (dx, dy, lx, ly);
+    }
+    else
+    {
+        _outputFile->writeTile (dx, dy, lx, ly);
+    }
+}
+
+
+void   
+TiledRgbaOutputFile::writeTiles
+    (int dxMin, int dxMax, int dyMin, int dyMax, int lx, int ly)
+{
+    if (_toYa)
+    {
+       Lock lock (*_toYa);
+
+        for (int dy = dyMin; dy <= dyMax; dy++)
+            for (int dx = dxMin; dx <= dxMax; dx++)
+               _toYa->writeTile (dx, dy, lx, ly);
+    }
+    else
+    {
+        _outputFile->writeTiles (dxMin, dxMax, dyMin, dyMax, lx, ly);
+    }
+}
+
+void   
+TiledRgbaOutputFile::writeTiles
+    (int dxMin, int dxMax, int dyMin, int dyMax, int l)
+{
+    writeTiles (dxMin, dxMax, dyMin, dyMax, l, l);
+}
+
+
+class TiledRgbaInputFile::FromYa: public Mutex
+{
+  public:
+
+     FromYa (TiledInputFile &inputFile);
+
+     void      setFrameBuffer (Rgba *base,
+                               size_t xStride,
+                               size_t yStride,
+                               const string &channelNamePrefix);
+
+     void      readTile (int dx, int dy, int lx, int ly);
+
+  private:
+
+     TiledInputFile &  _inputFile;
+     unsigned int      _tileXSize;
+     unsigned int      _tileYSize;
+     V3f               _yw;
+     Array2D <Rgba>    _buf;
+     Rgba *            _fbBase;
+     size_t            _fbXStride;
+     size_t            _fbYStride;
+};
+
+
+TiledRgbaInputFile::FromYa::FromYa (TiledInputFile &inputFile)
+:
+    _inputFile (inputFile)
+{
+    const TileDescription &td = inputFile.header().tileDescription();
+
+    _tileXSize = td.xSize;
+    _tileYSize = td.ySize;
+    _yw = ywFromHeader (_inputFile.header());
+    _buf.resizeErase (_tileYSize, _tileXSize);
+    _fbBase = 0;
+    _fbXStride = 0;
+    _fbYStride = 0;
+}
+
+
+void
+TiledRgbaInputFile::FromYa::setFrameBuffer (Rgba *base,
+                                           size_t xStride,
+                                           size_t yStride,
+                                           const string &channelNamePrefix)
+{
+    if (_fbBase == 0)
+{
+       FrameBuffer fb;
+
+       fb.insert (channelNamePrefix + "Y",
+                  Slice (HALF,                         // type
+                         (char *) &_buf[0][0].g,       // base
+                         sizeof (Rgba),                // xStride
+                         sizeof (Rgba) * _tileXSize,   // yStride
+                         1, 1,                         // sampling
+                         0.0,                          // fillValue
+                         true, true));                 // tileCoordinates
+
+       fb.insert (channelNamePrefix + "A",
+                  Slice (HALF,                         // type
+                         (char *) &_buf[0][0].a,       // base
+                         sizeof (Rgba),                // xStride
+                         sizeof (Rgba) * _tileXSize,   // yStride
+                         1, 1,                         // sampling
+                         1.0,                          // fillValue
+                         true, true));                 // tileCoordinates
+
+       _inputFile.setFrameBuffer (fb);
+    }
+
+    _fbBase = base;
+    _fbXStride = xStride;
+    _fbYStride = yStride;
+}
+
+
+void
+TiledRgbaInputFile::FromYa::readTile (int dx, int dy, int lx, int ly)
+{
+    if (_fbBase == 0)
+    {
+       THROW (Iex::ArgExc, "No frame buffer was specified as the "
+                           "pixel data destination for image file "
+                           "\"" << _inputFile.fileName() << "\".");
+    }
+
+    //
+    // Read the tile requested by the caller into _buf.
+    //
+    
+    _inputFile.readTile (dx, dy, lx, ly);
+
+    //
+    // Convert the luminance/alpha pixels to RGBA
+    // and copy them into the caller's frame buffer.
+    //
+
+    Box2i dw = _inputFile.dataWindowForTile (dx, dy, lx, ly);
+    int width = dw.max.x - dw.min.x + 1;
+
+    for (int y = dw.min.y, y1 = 0; y <= dw.max.y; ++y, ++y1)
+    {
+       for (int x1 = 0; x1 < width; ++x1)
+       {
+           _buf[y1][x1].r = 0;
+           _buf[y1][x1].b = 0;
+       }
+
+       YCAtoRGBA (_yw, width, _buf[y1], _buf[y1]);
+
+       for (int x = dw.min.x, x1 = 0; x <= dw.max.x; ++x, ++x1)
+       {
+           _fbBase[x * _fbXStride + y * _fbYStride] = _buf[y1][x1];
+       }
+    }
+}
+
+
+TiledRgbaInputFile::TiledRgbaInputFile (const char name[], int numThreads):
+    _inputFile (new TiledInputFile (name, numThreads)),
+    _fromYa (0),
+    _channelNamePrefix ("")
+{
+    if (channels() & WRITE_Y)
+       _fromYa = new FromYa (*_inputFile);
+}
+
+
+TiledRgbaInputFile::TiledRgbaInputFile (IStream &is, int numThreads):
+    _inputFile (new TiledInputFile (is, numThreads)),
+    _fromYa (0),
+    _channelNamePrefix ("")
+{
+    if (channels() & WRITE_Y)
+       _fromYa = new FromYa (*_inputFile);
+}
+
+
+TiledRgbaInputFile::TiledRgbaInputFile (const char name[],
+                                       const string &layerName,
+                                       int numThreads)
+:
+    _inputFile (new TiledInputFile (name, numThreads)),
+    _fromYa (0),
+    _channelNamePrefix (prefixFromLayerName (layerName, _inputFile->header()))
+{
+    if (channels() & WRITE_Y)
+       _fromYa = new FromYa (*_inputFile);
+}
+
+
+TiledRgbaInputFile::TiledRgbaInputFile (IStream &is,
+                                       const string &layerName,
+                                       int numThreads)
+:
+    _inputFile (new TiledInputFile (is, numThreads)),
+    _fromYa (0),
+    _channelNamePrefix (prefixFromLayerName (layerName, _inputFile->header()))
+{
+    if (channels() & WRITE_Y)
+       _fromYa = new FromYa (*_inputFile);
+}
+
+
+TiledRgbaInputFile::~TiledRgbaInputFile ()
+{
+    delete _inputFile;
+    delete _fromYa;
+}
+
+
+void   
+TiledRgbaInputFile::setFrameBuffer (Rgba *base, size_t xStride, size_t yStride)
+{
+    if (_fromYa)
+    {
+       Lock lock (*_fromYa);
+       _fromYa->setFrameBuffer (base, xStride, yStride, _channelNamePrefix);
+    }
+    else
+    {
+       size_t xs = xStride * sizeof (Rgba);
+       size_t ys = yStride * sizeof (Rgba);
+
+       FrameBuffer fb;
+
+       fb.insert (_channelNamePrefix + "R",
+                  Slice (HALF,
+                              (char *) &base[0].r,
+                              xs, ys,
+                              1, 1,    // xSampling, ySampling
+                              0.0));   // fillValue
+
+       fb.insert (_channelNamePrefix + "G",
+                  Slice (HALF,
+                              (char *) &base[0].g,
+                              xs, ys,
+                              1, 1,    // xSampling, ySampling
+                              0.0));   // fillValue
+
+       fb.insert (_channelNamePrefix + "B",
+                  Slice (HALF,
+                              (char *) &base[0].b,
+                              xs, ys,
+                              1, 1,    // xSampling, ySampling
+                              0.0));   // fillValue
+
+       fb.insert (_channelNamePrefix + "A",
+                  Slice (HALF,
+                              (char *) &base[0].a,
+                              xs, ys,
+                              1, 1,    // xSampling, ySampling
+                              1.0));   // fillValue
+
+       _inputFile->setFrameBuffer (fb);
+    }
+}
+
+
+void           
+TiledRgbaInputFile::setLayerName (const std::string &layerName)
+{
+    delete _fromYa;
+    _fromYa = 0;
+    
+    _channelNamePrefix = prefixFromLayerName (layerName, _inputFile->header());
+
+    if (channels() & WRITE_Y)
+       _fromYa = new FromYa (*_inputFile);
+
+    FrameBuffer fb;
+    _inputFile->setFrameBuffer (fb);
+}
+
+
+const Header &
+TiledRgbaInputFile::header () const
+{
+    return _inputFile->header();
+}
+
+
+const char *
+TiledRgbaInputFile::fileName () const
+{
+    return _inputFile->fileName();
+}
+
+
+const FrameBuffer &    
+TiledRgbaInputFile::frameBuffer () const
+{
+    return _inputFile->frameBuffer();
+}
+
+
+const Imath::Box2i &
+TiledRgbaInputFile::displayWindow () const
+{
+    return _inputFile->header().displayWindow();
+}
+
+
+const Imath::Box2i &
+TiledRgbaInputFile::dataWindow () const
+{
+    return _inputFile->header().dataWindow();
+}
+
+
+float  
+TiledRgbaInputFile::pixelAspectRatio () const
+{
+    return _inputFile->header().pixelAspectRatio();
+}
+
+
+const Imath::V2f       
+TiledRgbaInputFile::screenWindowCenter () const
+{
+    return _inputFile->header().screenWindowCenter();
+}
+
+
+float  
+TiledRgbaInputFile::screenWindowWidth () const
+{
+    return _inputFile->header().screenWindowWidth();
+}
+
+
+LineOrder
+TiledRgbaInputFile::lineOrder () const
+{
+    return _inputFile->header().lineOrder();
+}
+
+
+Compression
+TiledRgbaInputFile::compression () const
+{
+    return _inputFile->header().compression();
+}
+
+
+RgbaChannels   
+TiledRgbaInputFile::channels () const
+{
+    return rgbaChannels (_inputFile->header().channels(), _channelNamePrefix);
+}
+
+
+int
+TiledRgbaInputFile::version () const
+{
+    return _inputFile->version();
+}
+
+
+bool
+TiledRgbaInputFile::isComplete () const
+{
+    return _inputFile->isComplete();
+}
+
+
+unsigned int
+TiledRgbaInputFile::tileXSize () const
+{
+     return _inputFile->tileXSize();
+}
+
+
+unsigned int
+TiledRgbaInputFile::tileYSize () const
+{
+     return _inputFile->tileYSize();
+}
+
+
+LevelMode
+TiledRgbaInputFile::levelMode () const
+{
+     return _inputFile->levelMode();
+}
+
+
+LevelRoundingMode
+TiledRgbaInputFile::levelRoundingMode () const
+{
+     return _inputFile->levelRoundingMode();
+}
+
+
+int
+TiledRgbaInputFile::numLevels () const
+{
+     return _inputFile->numLevels();
+}
+
+
+int
+TiledRgbaInputFile::numXLevels () const
+{
+     return _inputFile->numXLevels();
+}
+
+
+int
+TiledRgbaInputFile::numYLevels () const
+{
+     return _inputFile->numYLevels();
+}
+
+
+bool
+TiledRgbaInputFile::isValidLevel (int lx, int ly) const
+{
+    return _inputFile->isValidLevel (lx, ly);
+}
+
+
+int
+TiledRgbaInputFile::levelWidth (int lx) const
+{
+     return _inputFile->levelWidth (lx);
+}
+
+
+int
+TiledRgbaInputFile::levelHeight (int ly) const
+{
+     return _inputFile->levelHeight (ly);
+}
+
+
+int
+TiledRgbaInputFile::numXTiles (int lx) const
+{
+     return _inputFile->numXTiles(lx);
+}
+
+
+int
+TiledRgbaInputFile::numYTiles (int ly) const
+{
+     return _inputFile->numYTiles(ly);
+}
+
+
+Imath::Box2i
+TiledRgbaInputFile::dataWindowForLevel (int l) const
+{
+     return _inputFile->dataWindowForLevel (l);
+}
+
+
+Imath::Box2i
+TiledRgbaInputFile::dataWindowForLevel (int lx, int ly) const
+{
+     return _inputFile->dataWindowForLevel (lx, ly);
+}
+
+
+Imath::Box2i
+TiledRgbaInputFile::dataWindowForTile (int dx, int dy, int l) const
+{
+     return _inputFile->dataWindowForTile (dx, dy, l);
+}
+
+
+Imath::Box2i
+TiledRgbaInputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const
+{
+     return _inputFile->dataWindowForTile (dx, dy, lx, ly);
+}
+
+
+void
+TiledRgbaInputFile::readTile (int dx, int dy, int l)
+{
+    if (_fromYa)
+    {
+       Lock lock (*_fromYa);
+       _fromYa->readTile (dx, dy, l, l);
+    }
+    else
+    {
+        _inputFile->readTile (dx, dy, l);
+    }
+}
+
+
+void
+TiledRgbaInputFile::readTile (int dx, int dy, int lx, int ly)
+{
+    if (_fromYa)
+    {
+       Lock lock (*_fromYa);
+       _fromYa->readTile (dx, dy, lx, ly);
+    }
+    else
+    {
+        _inputFile->readTile (dx, dy, lx, ly);
+    }
+}
+
+
+void   
+TiledRgbaInputFile::readTiles (int dxMin, int dxMax, int dyMin, int dyMax,
+                               int lx, int ly)
+{
+    if (_fromYa)
+    {
+       Lock lock (*_fromYa);
+
+        for (int dy = dyMin; dy <= dyMax; dy++)
+            for (int dx = dxMin; dx <= dxMax; dx++)
+               _fromYa->readTile (dx, dy, lx, ly);
+    }
+    else
+    {
+        _inputFile->readTiles (dxMin, dxMax, dyMin, dyMax, lx, ly);
+    }
+}
+
+void   
+TiledRgbaInputFile::readTiles (int dxMin, int dxMax, int dyMin, int dyMax,
+                               int l)
+{
+    readTiles (dxMin, dxMax, dyMin, dyMax, l, l);
+}
+
+
+void           
+TiledRgbaOutputFile::updatePreviewImage (const PreviewRgba newPixels[])
+{
+    _outputFile->updatePreviewImage (newPixels);
+}
+
+
+void   
+TiledRgbaOutputFile::breakTile  (int dx, int dy, int lx, int ly,
+                                int offset, int length, char c)
+{
+    _outputFile->breakTile (dx, dy, lx, ly, offset, length, c);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfTiledRgbaFile.h b/3rdparty/openexr/IlmImf/ImfTiledRgbaFile.h
new file mode 100644 (file)
index 0000000..5fcd22b
--- /dev/null
@@ -0,0 +1,479 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_TILED_RGBA_FILE_H
+#define INCLUDED_IMF_TILED_RGBA_FILE_H
+
+//-----------------------------------------------------------------------------
+//
+//     Simplified RGBA image I/O for tiled files
+//
+//     class TiledRgbaOutputFile
+//     class TiledRgbaInputFile
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfHeader.h>
+#include <ImfFrameBuffer.h>
+#include "ImathVec.h"
+#include "ImathBox.h"
+#include "half.h"
+#include <ImfTileDescription.h>
+#include <ImfRgba.h>
+#include <ImfThreading.h>
+#include <string>
+
+namespace Imf {
+
+class TiledOutputFile;
+class TiledInputFile;
+struct PreviewRgba;
+
+
+//
+// Tiled RGBA output file.
+//
+
+class TiledRgbaOutputFile
+{
+  public:
+
+    //---------------------------------------------------
+    // Constructor -- rgbaChannels, tileXSize, tileYSize,
+    // levelMode, and levelRoundingMode overwrite the
+    // channel list and tile description attribute in the
+    // header that is passed as an argument to the
+    // constructor.
+    //---------------------------------------------------
+
+    TiledRgbaOutputFile (const char name[],
+                        const Header &header,
+                        RgbaChannels rgbaChannels,
+                        int tileXSize,
+                        int tileYSize,
+                        LevelMode mode,
+                        LevelRoundingMode rmode = ROUND_DOWN,
+                         int numThreads = globalThreadCount ());
+
+
+    //---------------------------------------------------
+    // Constructor -- like the previous one, but the new
+    // TiledRgbaOutputFile is attached to a file that has
+    // already been opened by the caller.  Destroying
+    // TiledRgbaOutputFileObjects constructed with this
+    // constructor does not automatically close the
+    // corresponding files.
+    //---------------------------------------------------
+
+    TiledRgbaOutputFile (OStream &os,
+                        const Header &header,
+                        RgbaChannels rgbaChannels,
+                        int tileXSize,
+                        int tileYSize,
+                        LevelMode mode,
+                        LevelRoundingMode rmode = ROUND_DOWN,
+                         int numThreads = globalThreadCount ());
+
+
+    //------------------------------------------------------
+    // Constructor -- header data are explicitly specified
+    // as function call arguments (an empty dataWindow means
+    // "same as displayWindow")
+    //------------------------------------------------------
+
+    TiledRgbaOutputFile (const char name[],
+                        int tileXSize,
+                        int tileYSize,
+                        LevelMode mode,
+                        LevelRoundingMode rmode,
+                        const Imath::Box2i &displayWindow,
+                        const Imath::Box2i &dataWindow = Imath::Box2i(),
+                        RgbaChannels rgbaChannels = WRITE_RGBA,
+                        float pixelAspectRatio = 1,
+                        const Imath::V2f screenWindowCenter =
+                                                   Imath::V2f (0, 0),
+                        float screenWindowWidth = 1,
+                        LineOrder lineOrder = INCREASING_Y,
+                        Compression compression = ZIP_COMPRESSION,
+                         int numThreads = globalThreadCount ());
+
+
+    //-----------------------------------------------
+    // Constructor -- like the previous one, but both
+    // the display window and the data window are
+    // Box2i (V2i (0, 0), V2i (width - 1, height -1))
+    //-----------------------------------------------
+
+    TiledRgbaOutputFile (const char name[],
+                        int width,
+                        int height,
+                        int tileXSize,
+                        int tileYSize,
+                        LevelMode mode,
+                        LevelRoundingMode rmode = ROUND_DOWN,
+                        RgbaChannels rgbaChannels = WRITE_RGBA,
+                        float pixelAspectRatio = 1,
+                        const Imath::V2f screenWindowCenter =
+                                                   Imath::V2f (0, 0),
+                        float screenWindowWidth = 1,
+                        LineOrder lineOrder = INCREASING_Y,
+                        Compression compression = ZIP_COMPRESSION,
+                         int numThreads = globalThreadCount ());
+
+
+    virtual ~TiledRgbaOutputFile ();
+
+
+    //------------------------------------------------
+    // Define a frame buffer as the pixel data source:
+    // Pixel (x, y) is at address
+    //
+    //  base + x * xStride + y * yStride
+    //
+    //------------------------------------------------
+
+    void               setFrameBuffer (const Rgba *base,
+                                       size_t xStride,
+                                       size_t yStride);
+
+    //--------------------------
+    // Access to the file header
+    //--------------------------
+
+    const Header &             header () const;
+    const FrameBuffer &                frameBuffer () const;
+    const Imath::Box2i &       displayWindow () const;
+    const Imath::Box2i &       dataWindow () const;
+    float                      pixelAspectRatio () const;
+    const Imath::V2f           screenWindowCenter () const;
+    float                      screenWindowWidth () const;
+    LineOrder                  lineOrder () const;
+    Compression                        compression () const;
+    RgbaChannels               channels () const;
+
+
+    //----------------------------------------------------
+    // Utility functions (same as in Imf::TiledOutputFile)
+    //----------------------------------------------------
+
+    unsigned int       tileXSize () const;
+    unsigned int       tileYSize () const;
+    LevelMode          levelMode () const;
+    LevelRoundingMode  levelRoundingMode () const;
+
+    int                        numLevels () const;
+    int                        numXLevels () const;
+    int                        numYLevels () const;
+    bool               isValidLevel (int lx, int ly) const;
+
+    int                        levelWidth  (int lx) const;
+    int                        levelHeight (int ly) const;
+
+    int                        numXTiles (int lx = 0) const;
+    int                        numYTiles (int ly = 0) const;
+
+    Imath::Box2i       dataWindowForLevel (int l = 0) const;
+    Imath::Box2i       dataWindowForLevel (int lx, int ly) const;
+
+    Imath::Box2i       dataWindowForTile (int dx, int dy,
+                                          int l = 0) const;
+
+    Imath::Box2i       dataWindowForTile (int dx, int dy,
+                                          int lx, int ly) const;
+
+    //------------------------------------------------------------------
+    // Write pixel data:
+    //
+    // writeTile(dx, dy, lx, ly) writes the tile with tile
+    // coordinates (dx, dy), and level number (lx, ly) to
+    // the file.
+    //
+    //   dx must lie in the interval [0, numXTiles(lx)-1]
+    //   dy must lie in the interval [0, numYTiles(ly)-1]
+    //
+    //   lx must lie in the interval [0, numXLevels()-1]
+    //   ly must lie in the inverval [0, numYLevels()-1]
+    //
+    // writeTile(dx, dy, level) is a convenience function
+    // used for ONE_LEVEL and MIPMAP_LEVEL files.  It calls
+    // writeTile(dx, dy, level, level).
+    //
+    // The two writeTiles(dx1, dx2, dy1, dy2, ...) functions allow
+    // writing multiple tiles at once.  If multi-threading is used
+    // multiple tiles are written concurrently.
+    //
+    // Pixels that are outside the pixel coordinate range for the tile's
+    // level, are never accessed by writeTile().
+    //
+    // Each tile in the file must be written exactly once.
+    //
+    //------------------------------------------------------------------
+
+    void               writeTile (int dx, int dy, int l = 0);
+    void               writeTile (int dx, int dy, int lx, int ly);
+
+    void               writeTiles (int dxMin, int dxMax, int dyMin, int dyMax,
+                                    int lx, int ly);
+
+    void               writeTiles (int dxMin, int dxMax, int dyMin, int dyMax,
+                                    int l = 0);
+
+
+    // -------------------------------------------------------------------------
+    // Update the preview image (see Imf::TiledOutputFile::updatePreviewImage())
+    // -------------------------------------------------------------------------
+
+    void               updatePreviewImage (const PreviewRgba[]);
+
+
+    //------------------------------------------------
+    // Break a tile -- for testing and debugging only
+    // (see Imf::TiledOutputFile::breakTile())
+    //
+    // Warning: Calling this function usually results
+    // in a broken image file.  The file or parts of
+    // it may not be readable, or the file may contain
+    // bad data.
+    //
+    //------------------------------------------------
+
+    void               breakTile  (int dx, int dy,
+                                   int lx, int ly,
+                                   int offset,
+                                   int length,
+                                   char c);
+  private:
+
+    //
+    // Copy constructor and assignment are not implemented
+    //
+
+    TiledRgbaOutputFile (const TiledRgbaOutputFile &); 
+    TiledRgbaOutputFile & operator = (const TiledRgbaOutputFile &);
+
+    class ToYa;
+
+    TiledOutputFile *            _outputFile;
+    ToYa *                     _toYa;
+};
+
+
+
+//
+// Tiled RGBA input file
+//
+
+class TiledRgbaInputFile
+{
+  public:
+
+    //--------------------------------------------------------
+    // Constructor -- opens the file with the specified name.
+    // Destroying TiledRgbaInputFile objects constructed with
+    // this constructor automatically closes the corresponding
+    // files.
+    //--------------------------------------------------------
+
+    TiledRgbaInputFile (const char name[],
+                        int numThreads = globalThreadCount ());
+
+
+    //-------------------------------------------------------
+    // Constructor -- attaches the new TiledRgbaInputFile
+    // object to a file that has already been opened by the
+    // caller.
+    // Destroying TiledRgbaInputFile objects constructed with
+    // this constructor does not automatically close the
+    // corresponding files.
+    //-------------------------------------------------------
+
+    TiledRgbaInputFile (IStream &is, int numThreads = globalThreadCount ());
+
+
+    //------------------------------------------------------------
+    // Constructors -- the same as the previous two, but the names
+    // of the red, green, blue, alpha, and luminance channels are
+    // expected to be layerName.R, layerName.G, etc.
+    //------------------------------------------------------------
+
+    TiledRgbaInputFile (const char name[],
+                       const std::string &layerName,
+                       int numThreads = globalThreadCount());
+
+    TiledRgbaInputFile (IStream &is,
+                       const std::string &layerName,
+                       int numThreads = globalThreadCount());
+
+    //-----------
+    // Destructor
+    //-----------
+
+    virtual ~TiledRgbaInputFile ();
+
+
+    //-----------------------------------------------------
+    // Define a frame buffer as the pixel data destination:
+    // Pixel (x, y) is at address
+    //
+    //  base + x * xStride + y * yStride
+    //
+    //-----------------------------------------------------
+
+    void                       setFrameBuffer (Rgba *base,
+                                               size_t xStride,
+                                               size_t yStride);
+
+    //-------------------------------------------------------------------
+    // Switch to a different layer -- subsequent calls to readTile()
+    // and readTiles() will read channels layerName.R, layerName.G, etc.
+    // After each call to setLayerName(), setFrameBuffer() must be called
+    // at least once before the next call to readTile() or readTiles().
+    //-------------------------------------------------------------------
+
+    void                       setLayerName (const std::string &layerName);
+
+
+    //--------------------------
+    // Access to the file header
+    //--------------------------
+
+    const Header &             header () const;
+    const FrameBuffer &                frameBuffer () const;
+    const Imath::Box2i &       displayWindow () const;
+    const Imath::Box2i &       dataWindow () const;
+    float                      pixelAspectRatio () const;
+    const Imath::V2f           screenWindowCenter () const;
+    float                      screenWindowWidth () const;
+    LineOrder                  lineOrder () const;
+    Compression                        compression () const;
+    RgbaChannels               channels () const;
+    const char *                fileName () const;
+    bool                       isComplete () const;
+
+    //----------------------------------
+    // Access to the file format version
+    //----------------------------------
+
+    int                                version () const;
+
+
+    //---------------------------------------------------
+    // Utility functions (same as in Imf::TiledInputFile)
+    //---------------------------------------------------
+
+    unsigned int       tileXSize () const;
+    unsigned int       tileYSize () const;
+    LevelMode          levelMode () const;
+    LevelRoundingMode  levelRoundingMode () const;
+
+    int                        numLevels () const;
+    int                        numXLevels () const;
+    int                        numYLevels () const;
+    bool               isValidLevel (int lx, int ly) const;
+
+    int                        levelWidth  (int lx) const;
+    int                        levelHeight (int ly) const;
+
+    int                        numXTiles (int lx = 0) const;
+    int                        numYTiles (int ly = 0) const;
+
+    Imath::Box2i       dataWindowForLevel (int l = 0) const;
+    Imath::Box2i       dataWindowForLevel (int lx, int ly) const;
+
+    Imath::Box2i       dataWindowForTile (int dx, int dy,
+                                          int l = 0) const;
+
+    Imath::Box2i       dataWindowForTile (int dx, int dy,
+                                          int lx, int ly) const;
+                                          
+
+    //----------------------------------------------------------------
+    // Read pixel data:
+    //
+    // readTile(dx, dy, lx, ly) reads the tile with tile
+    // coordinates (dx, dy), and level number (lx, ly),
+    // and stores it in the current frame buffer.
+    //
+    //   dx must lie in the interval [0, numXTiles(lx)-1]
+    //   dy must lie in the interval [0, numYTiles(ly)-1]
+    //
+    //   lx must lie in the interval [0, numXLevels()-1]
+    //   ly must lie in the inverval [0, numYLevels()-1]
+    //
+    // readTile(dx, dy, level) is a convenience function used
+    // for ONE_LEVEL and MIPMAP_LEVELS files.  It calls
+    // readTile(dx, dy, level, level).
+    //
+    // The two readTiles(dx1, dx2, dy1, dy2, ...) functions allow
+    // reading multiple tiles at once.  If multi-threading is used
+    // multiple tiles are read concurrently.
+    //
+    // Pixels that are outside the pixel coordinate range for the
+    // tile's level, are never accessed by readTile().
+    //
+    // Attempting to access a tile that is not present in the file
+    // throws an InputExc exception.
+    //
+    //----------------------------------------------------------------
+
+    void               readTile (int dx, int dy, int l = 0);
+    void               readTile (int dx, int dy, int lx, int ly);
+
+    void               readTiles (int dxMin, int dxMax,
+                                   int dyMin, int dyMax, int lx, int ly);
+
+    void               readTiles (int dxMin, int dxMax,
+                                   int dyMin, int dyMax, int l = 0);
+
+  private:
+
+    //
+    // Copy constructor and assignment are not implemented
+    //
+
+    TiledRgbaInputFile (const TiledRgbaInputFile &);
+    TiledRgbaInputFile & operator = (const TiledRgbaInputFile &);
+
+    class FromYa;
+
+    TiledInputFile *   _inputFile;
+    FromYa *           _fromYa;
+    std::string                _channelNamePrefix;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfTimeCode.cpp b/3rdparty/openexr/IlmImf/ImfTimeCode.cpp
new file mode 100644 (file)
index 0000000..9b34cce
--- /dev/null
@@ -0,0 +1,415 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class TimeCode
+//     
+//-----------------------------------------------------------------------------
+
+#include <ImfTimeCode.h>
+#include "Iex.h"
+
+namespace Imf {
+
+   
+TimeCode::TimeCode ()
+{
+    _time = 0;
+    _user = 0;
+}
+
+
+TimeCode::TimeCode
+    (int hours,
+     int minutes,
+     int seconds,
+     int frame,
+     bool dropFrame,
+     bool colorFrame,
+     bool fieldPhase,
+     bool bgf0,
+     bool bgf1,
+     bool bgf2,
+     int binaryGroup1,
+     int binaryGroup2,
+     int binaryGroup3,
+     int binaryGroup4,
+     int binaryGroup5,
+     int binaryGroup6,
+     int binaryGroup7,
+     int binaryGroup8)
+{
+    setHours (hours);
+    setMinutes (minutes);
+    setSeconds (seconds);
+    setFrame (frame);
+    setDropFrame (dropFrame);
+    setColorFrame (colorFrame);
+    setFieldPhase (fieldPhase);
+    setBgf0 (bgf0);
+    setBgf1 (bgf1);
+    setBgf2 (bgf2);
+    setBinaryGroup (1, binaryGroup1);
+    setBinaryGroup (2, binaryGroup2);
+    setBinaryGroup (3, binaryGroup3);
+    setBinaryGroup (4, binaryGroup4);
+    setBinaryGroup (5, binaryGroup5);
+    setBinaryGroup (6, binaryGroup6);
+    setBinaryGroup (7, binaryGroup7);
+    setBinaryGroup (8, binaryGroup8);
+}
+
+
+TimeCode::TimeCode
+    (unsigned int timeAndFlags,
+     unsigned int userData,
+     Packing packing)
+{
+    setTimeAndFlags (timeAndFlags, packing);
+    setUserData (userData);
+}
+
+
+TimeCode::TimeCode (const TimeCode &other)
+{
+    _time = other._time;
+    _user = other._user;
+}
+
+
+TimeCode &
+TimeCode::operator = (const TimeCode &other)
+{
+    _time = other._time;
+    _user = other._user;
+    return *this;
+}
+
+
+namespace {
+
+unsigned int
+bitField (unsigned int value, int minBit, int maxBit)
+{
+    int shift = minBit;
+    unsigned int mask = (~(~0U << (maxBit - minBit + 1)) << minBit);
+    return (value & mask) >> shift;
+}
+
+
+void
+setBitField (unsigned int &value, int minBit, int maxBit, unsigned int field)
+{
+    int shift = minBit;
+    unsigned int mask = (~(~0U << (maxBit - minBit + 1)) << minBit);
+    value = ((value & ~mask) | ((field << shift) & mask));
+}
+
+
+int
+bcdToBinary (unsigned int bcd)
+{
+    return int ((bcd & 0x0f) + 10 * ((bcd >> 4) & 0x0f));
+}
+
+
+unsigned int
+binaryToBcd (int binary)
+{
+    int units = binary % 10;
+    int tens = (binary / 10) % 10;
+    return (unsigned int) (units | (tens << 4));
+}
+
+
+} // namespace
+
+
+int
+TimeCode::hours () const
+{
+    return bcdToBinary (bitField (_time, 24, 29));
+}
+
+
+void
+TimeCode::setHours (int value)
+{
+    if (value < 0 || value > 23)
+       throw Iex::ArgExc ("Cannot set hours field in time code. "
+                          "New value is out of range.");
+
+    setBitField (_time, 24, 29, binaryToBcd (value));
+}
+
+
+int
+TimeCode::minutes () const
+{
+    return bcdToBinary (bitField (_time, 16, 22));
+}
+
+
+void
+TimeCode::setMinutes (int value)
+{
+    if (value < 0 || value > 59)
+       throw Iex::ArgExc ("Cannot set minutes field in time code. "
+                          "New value is out of range.");
+
+    setBitField (_time, 16, 22, binaryToBcd (value));
+}
+
+
+int
+TimeCode::seconds () const
+{
+    return bcdToBinary (bitField (_time, 8, 14));
+}
+
+
+void
+TimeCode::setSeconds (int value)
+{
+    if (value < 0 || value > 59)
+       throw Iex::ArgExc ("Cannot set seconds field in time code. "
+                          "New value is out of range.");
+
+    setBitField (_time, 8, 14, binaryToBcd (value));
+}
+
+
+int
+TimeCode::frame () const
+{
+    return bcdToBinary (bitField (_time, 0, 5));
+}
+
+
+void
+TimeCode::setFrame (int value)
+{
+    if (value < 0 || value > 59)
+       throw Iex::ArgExc ("Cannot set frame field in time code. "
+                          "New value is out of range.");
+
+    setBitField (_time, 0, 5, binaryToBcd (value));
+}
+
+
+bool
+TimeCode::dropFrame () const
+{
+    return bool (bitField (_time, 6, 6));
+}
+
+
+void
+TimeCode::setDropFrame (bool value)
+{
+    setBitField (_time, 6, 6, (unsigned int) !!value);
+}
+
+
+bool
+TimeCode::colorFrame () const
+{
+    return bool (bitField (_time, 7, 7));
+}
+
+
+void
+TimeCode::setColorFrame (bool value)
+{
+    setBitField (_time, 7, 7, (unsigned int) !!value);
+}
+
+
+bool
+TimeCode::fieldPhase () const
+{
+    return bool (bitField (_time, 15, 15));
+}
+
+
+void
+TimeCode::setFieldPhase (bool value)
+{
+    setBitField (_time, 15, 15, (unsigned int) !!value);
+}
+
+
+bool
+TimeCode::bgf0 () const
+{
+    return bool (bitField (_time, 23, 23));
+}
+
+
+void
+TimeCode::setBgf0 (bool value)
+{
+    setBitField (_time, 23, 23, (unsigned int) !!value);
+}
+
+
+bool
+TimeCode::bgf1 () const
+{
+    return bool (bitField (_time, 30, 30));
+}
+
+
+void
+TimeCode::setBgf1 (bool value)
+{
+    setBitField (_time, 30, 30, (unsigned int) !!value);
+}
+
+
+bool
+TimeCode::bgf2 () const
+{
+    return bool (bitField (_time, 31, 31));
+}
+
+
+void
+TimeCode::setBgf2 (bool value)
+{
+    setBitField (_time, 31, 31, (unsigned int) !!value);
+}
+
+
+int
+TimeCode::binaryGroup (int group) const
+{
+    if (group < 1 || group > 8)
+       throw Iex::ArgExc ("Cannot extract binary group from time code "
+                          "user data.  Group number is out of range.");
+
+    int minBit = 4 * (group - 1);
+    int maxBit = minBit + 3;
+    return int (bitField (_user, minBit, maxBit));
+}
+
+
+void
+TimeCode::setBinaryGroup (int group, int value)
+{
+    if (group < 1 || group > 8)
+       throw Iex::ArgExc ("Cannot extract binary group from time code "
+                          "user data.  Group number is out of range.");
+
+    int minBit = 4 * (group - 1);
+    int maxBit = minBit + 3;
+    setBitField (_user, minBit, maxBit, (unsigned int) value);
+}
+
+
+unsigned int
+TimeCode::timeAndFlags (Packing packing) const
+{
+    if (packing == TV50_PACKING)
+    {
+       unsigned int t = _time;
+
+       t &= ~((1 << 6) | (1 << 15) | (1 << 23) | (1 << 30) | (1 << 31));
+
+       t |= ((unsigned int) bgf0() << 15);
+       t |= ((unsigned int) bgf2() << 23);
+       t |= ((unsigned int) bgf1() << 30);
+       t |= ((unsigned int) fieldPhase() << 31);
+
+       return t;
+    }
+    if (packing == FILM24_PACKING)
+    {
+       return _time & ~((1 << 6) | (1 << 7));
+    }
+    else // packing == TV60_PACKING
+    {
+       return _time;
+    }
+}
+
+
+void
+TimeCode::setTimeAndFlags (unsigned int value, Packing packing)
+{
+    if (packing == TV50_PACKING)
+    {
+       _time = value &
+                ~((1 << 6) | (1 << 15) | (1 << 23) | (1 << 30) | (1 << 31));
+
+       if (value & (1 << 15))
+           setBgf0 (true);
+
+       if (value & (1 << 23))
+           setBgf2 (true);
+
+       if (value & (1 << 30))
+           setBgf1 (true);
+
+       if (value & (1 << 31))
+           setFieldPhase (true);
+    }
+    else if (packing == FILM24_PACKING)
+    {
+       _time = value & ~((1 << 6) | (1 << 7));
+    }
+    else // packing == TV60_PACKING
+    {
+       _time = value;
+    }
+}
+
+
+unsigned int
+TimeCode::userData () const
+{
+    return _user;
+}
+
+
+void
+TimeCode::setUserData (unsigned int value)
+{
+    _user = value;
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfTimeCode.h b/3rdparty/openexr/IlmImf/ImfTimeCode.h
new file mode 100644 (file)
index 0000000..3030d49
--- /dev/null
@@ -0,0 +1,226 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_TIME_CODE_H
+#define INCLUDED_IMF_TIME_CODE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class TimeCode
+//     
+//     A TimeCode object stores time and control codes as described
+//     in SMPTE standard 12M-1999.  A TimeCode object contains the
+//     following fields:
+//
+//         Time Address:
+//
+//             hours                   integer, range 0 - 23
+//             minutes                 integer, range 0 - 59
+//             seconds                 integer, range 0 - 59
+//             frame                   integer, range 0 - 29
+//
+//         Flags:
+//
+//             drop frame flag         boolean
+//             color frame flag        boolean
+//             field/phase flag        boolean
+//             bgf0                    boolean
+//             bgf1                    boolean
+//             bgf2                    boolean
+//
+//         Binary groups for user-defined data and control codes:
+//
+//             binary group 1          integer, range 0 - 15
+//             binary group 2          integer, range 0 - 15
+//             ...
+//             binary group 8          integer, range 0 - 15
+//
+//     Class TimeCode contains methods to convert between the fields
+//     listed above and a more compact representation where the fields
+//     are packed into two unsigned 32-bit integers.  In the packed
+//     integer representations, bit 0 is the least significant bit,
+//     and bit 31 is the most significant bit of the integer value.
+//
+//     The time address and flags fields can be packed in three
+//     different ways:
+//
+//           bits      packing for       packing for       packing for
+//                     24-frame          60-field          50-field
+//                     film              television        television
+//
+//          0 -  3     frame units       frame units       frame units
+//          4 -  5     frame tens        frame tens        frame tens
+//          6          unused, set to 0  drop frame flag   unused, set to 0
+//          7          unused, set to 0  color frame flag  color frame flag
+//          8 - 11     seconds units     seconds units     seconds units
+//         12 - 14     seconds tens      seconds tens      seconds tens
+//         15          phase flag        field/phase flag  bgf0
+//         16 - 19     minutes units     minutes units     minutes units
+//         20 - 22     minutes tens      minutes tens      minutes tens
+//         23          bgf0              bgf0              bgf2
+//         24 - 27     hours units       hours units       hours units
+//         28 - 29     hours tens        hours tens        hours tens
+//         30          bgf1              bgf1              bgf1
+//         31          bgf2              bgf2              field/phase flag
+//
+//     User-defined data and control codes are packed as follows:
+//
+//           bits      field
+//
+//          0 -  3     binary group 1
+//          4 -  7     binary group 2
+//          8 - 11     binary group 3
+//         12 - 15     binary group 4
+//         16 - 19     binary group 5
+//         20 - 23     binary group 6
+//         24 - 27     binary group 7
+//         28 - 31     binary group 8
+//
+//-----------------------------------------------------------------------------
+
+namespace Imf {
+
+   
+class TimeCode
+{
+  public:
+
+    //---------------------
+    // Bit packing variants
+    //---------------------
+
+    enum Packing
+    {
+       TV60_PACKING,           // packing for 60-field television
+       TV50_PACKING,           // packing for 50-field television
+       FILM24_PACKING          // packing for 24-frame film
+    };
+
+
+    //-------------------------------------
+    // Constructors and assignment operator
+    //-------------------------------------
+
+    TimeCode ();  // all fields set to 0 or false
+
+    TimeCode (int hours,
+             int minutes,
+             int seconds,
+             int frame,
+             bool dropFrame = false,
+             bool colorFrame = false,
+             bool fieldPhase = false,
+             bool bgf0 = false,
+             bool bgf1 = false,
+             bool bgf2 = false,
+             int binaryGroup1 = 0,
+             int binaryGroup2 = 0,
+             int binaryGroup3 = 0,
+             int binaryGroup4 = 0,
+             int binaryGroup5 = 0,
+             int binaryGroup6 = 0,
+             int binaryGroup7 = 0,
+             int binaryGroup8 = 0);
+
+    TimeCode (unsigned int timeAndFlags,
+             unsigned int userData = 0,
+             Packing packing = TV60_PACKING);
+
+    TimeCode (const TimeCode &other);
+
+    TimeCode & operator = (const TimeCode &other);
+
+
+    //----------------------------
+    // Access to individual fields
+    //----------------------------
+
+    int                hours () const;
+    void       setHours (int value);
+
+    int                minutes () const;
+    void       setMinutes (int value);
+
+    int                seconds () const;
+    void       setSeconds (int value);
+
+    int                frame () const;
+    void       setFrame (int value);
+
+    bool       dropFrame () const;
+    void       setDropFrame (bool value);
+
+    bool       colorFrame () const;
+    void       setColorFrame (bool value);
+
+    bool       fieldPhase () const;
+    void       setFieldPhase (bool value);
+
+    bool       bgf0 () const;
+    void       setBgf0 (bool value);
+
+    bool       bgf1 () const;
+    void       setBgf1 (bool value);
+
+    bool       bgf2 () const;
+    void       setBgf2 (bool value);
+
+    int                binaryGroup (int group) const; // group must be between 1 and 8
+    void       setBinaryGroup (int group, int value);
+
+    
+    //---------------------------------
+    // Access to packed representations
+    //---------------------------------
+
+    unsigned int       timeAndFlags (Packing packing = TV60_PACKING) const;
+
+    void               setTimeAndFlags (unsigned int value,
+                                        Packing packing = TV60_PACKING);
+
+    unsigned int       userData () const;
+
+    void               setUserData (unsigned int value);
+
+  private:
+
+    unsigned int       _time;
+    unsigned int       _user;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfTimeCodeAttribute.cpp b/3rdparty/openexr/IlmImf/ImfTimeCodeAttribute.cpp
new file mode 100644 (file)
index 0000000..2c2088b
--- /dev/null
@@ -0,0 +1,78 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     class TimeCodeAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfTimeCodeAttribute.h>
+
+namespace Imf {
+
+
+template <>
+const char *
+TimeCodeAttribute::staticTypeName ()
+{
+    return "timecode";
+}
+
+
+template <>
+void
+TimeCodeAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.timeAndFlags());
+    Xdr::write <StreamIO> (os, _value.userData());
+}
+
+
+template <>
+void
+TimeCodeAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    unsigned int tmp;
+
+    Xdr::read <StreamIO> (is, tmp);
+    _value.setTimeAndFlags (tmp);
+
+    Xdr::read <StreamIO> (is, tmp);
+    _value.setUserData (tmp);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfTimeCodeAttribute.h b/3rdparty/openexr/IlmImf/ImfTimeCodeAttribute.h
new file mode 100644 (file)
index 0000000..3d548fa
--- /dev/null
@@ -0,0 +1,72 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_TIME_CODE_ATTRIBUTE_H
+#define INCLUDED_IMF_TIME_CODE_ATTRIBUTE_H
+
+
+//-----------------------------------------------------------------------------
+//
+//     class TimeCodeAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include <ImfTimeCode.h>
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<TimeCode> TimeCodeAttribute;
+
+template <>
+const char *TimeCodeAttribute::staticTypeName ();
+
+template <>
+void TimeCodeAttribute::writeValueTo (OStream &, int) const;
+
+template <>
+void TimeCodeAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfTimeCodeAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfVecAttribute.cpp b/3rdparty/openexr/IlmImf/ImfVecAttribute.cpp
new file mode 100644 (file)
index 0000000..7527bfd
--- /dev/null
@@ -0,0 +1,216 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class V2iAttribute
+//     class V2fAttribute
+//     class V2dAttribute
+//     class V3iAttribute
+//     class V3fAttribute
+//     class V3dAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfVecAttribute.h>
+
+
+namespace Imf {
+
+
+template <>
+const char *
+V2iAttribute::staticTypeName ()
+{
+    return "v2i";
+}
+
+
+template <>
+void
+V2iAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.x);
+    Xdr::write <StreamIO> (os, _value.y);
+}
+
+
+template <>
+void
+V2iAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value.x);
+    Xdr::read <StreamIO> (is, _value.y);
+}
+
+
+template <>
+const char *
+V2fAttribute::staticTypeName ()
+{
+    return "v2f";
+}
+
+
+template <>
+void
+V2fAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.x);
+    Xdr::write <StreamIO> (os, _value.y);
+}
+
+
+template <>
+void
+V2fAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value.x);
+    Xdr::read <StreamIO> (is, _value.y);
+}
+
+
+template <>
+const char *
+V2dAttribute::staticTypeName ()
+{
+    return "v2d";
+}
+
+
+template <>
+void
+V2dAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.x);
+    Xdr::write <StreamIO> (os, _value.y);
+}
+
+
+template <>
+void
+V2dAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value.x);
+    Xdr::read <StreamIO> (is, _value.y);
+}
+
+
+template <>
+const char *
+V3iAttribute::staticTypeName ()
+{
+    return "v3i";
+}
+
+
+template <>
+void
+V3iAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.x);
+    Xdr::write <StreamIO> (os, _value.y);
+    Xdr::write <StreamIO> (os, _value.z);
+}
+
+
+template <>
+void
+V3iAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value.x);
+    Xdr::read <StreamIO> (is, _value.y);
+    Xdr::read <StreamIO> (is, _value.z);
+}
+
+
+template <>
+const char *
+V3fAttribute::staticTypeName ()
+{
+    return "v3f";
+}
+
+
+template <>
+void
+V3fAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.x);
+    Xdr::write <StreamIO> (os, _value.y);
+    Xdr::write <StreamIO> (os, _value.z);
+}
+
+
+template <>
+void
+V3fAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value.x);
+    Xdr::read <StreamIO> (is, _value.y);
+    Xdr::read <StreamIO> (is, _value.z);
+}
+
+
+template <>
+const char *
+V3dAttribute::staticTypeName ()
+{
+    return "v3d";
+}
+
+
+template <>
+void
+V3dAttribute::writeValueTo (OStream &os, int version) const
+{
+    Xdr::write <StreamIO> (os, _value.x);
+    Xdr::write <StreamIO> (os, _value.y);
+    Xdr::write <StreamIO> (os, _value.z);
+}
+
+
+template <>
+void
+V3dAttribute::readValueFrom (IStream &is, int size, int version)
+{
+    Xdr::read <StreamIO> (is, _value.x);
+    Xdr::read <StreamIO> (is, _value.y);
+    Xdr::read <StreamIO> (is, _value.z);
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfVecAttribute.h b/3rdparty/openexr/IlmImf/ImfVecAttribute.h
new file mode 100644 (file)
index 0000000..b0b79ba
--- /dev/null
@@ -0,0 +1,101 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_VEC_ATTRIBUTE_H
+#define INCLUDED_IMF_VEC_ATTRIBUTE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class V2iAttribute
+//     class V2fAttribute
+//     class V2dAttribute
+//     class V3iAttribute
+//     class V3fAttribute
+//     class V3dAttribute
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfAttribute.h>
+#include "ImathVec.h"
+
+
+namespace Imf {
+
+
+typedef TypedAttribute<Imath::V2i> V2iAttribute;
+template <> const char *V2iAttribute::staticTypeName ();
+template <> void V2iAttribute::writeValueTo (OStream &, int) const;
+template <> void V2iAttribute::readValueFrom (IStream &, int, int);
+
+
+typedef TypedAttribute<Imath::V2f> V2fAttribute;
+template <> const char *V2fAttribute::staticTypeName ();
+template <> void V2fAttribute::writeValueTo (OStream &, int) const;
+template <> void V2fAttribute::readValueFrom (IStream &, int, int);
+
+
+typedef TypedAttribute<Imath::V2d> V2dAttribute;
+template <> const char *V2dAttribute::staticTypeName ();
+template <> void V2dAttribute::writeValueTo (OStream &, int) const;
+template <> void V2dAttribute::readValueFrom (IStream &, int, int);
+
+
+typedef TypedAttribute<Imath::V3i> V3iAttribute;
+template <> const char *V3iAttribute::staticTypeName ();
+template <> void V3iAttribute::writeValueTo (OStream &, int) const;
+template <> void V3iAttribute::readValueFrom (IStream &, int, int);
+
+
+typedef TypedAttribute<Imath::V3f> V3fAttribute;
+template <> const char *V3fAttribute::staticTypeName ();
+template <> void V3fAttribute::writeValueTo (OStream &, int) const;
+template <> void V3fAttribute::readValueFrom (IStream &, int, int);
+
+
+typedef TypedAttribute<Imath::V3d> V3dAttribute;
+template <> const char *V3dAttribute::staticTypeName ();
+template <> void V3dAttribute::writeValueTo (OStream &, int) const;
+template <> void V3dAttribute::readValueFrom (IStream &, int, int);
+
+
+} // namespace Imf
+
+// Metrowerks compiler wants the .cpp file inlined, too
+#ifdef __MWERKS__
+#include <ImfVecAttribute.cpp>
+#endif
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfVersion.cpp b/3rdparty/openexr/IlmImf/ImfVersion.cpp
new file mode 100644 (file)
index 0000000..3814479
--- /dev/null
@@ -0,0 +1,59 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//-----------------------------------------------------------------------------
+//
+//     Magic and version number.
+//
+//-----------------------------------------------------------------------------
+
+
+#include <ImfVersion.h>
+
+namespace Imf {
+
+
+bool
+isImfMagic (const char bytes[4])
+{
+    return bytes[0] == ((MAGIC >>  0) & 0x00ff) &&
+          bytes[1] == ((MAGIC >>  8) & 0x00ff) &&
+          bytes[2] == ((MAGIC >> 16) & 0x00ff) &&
+          bytes[3] == ((MAGIC >> 24) & 0x00ff);
+}
+
+
+} // namespace Imf
+
diff --git a/3rdparty/openexr/IlmImf/ImfVersion.h b/3rdparty/openexr/IlmImf/ImfVersion.h
new file mode 100644 (file)
index 0000000..34fb93b
--- /dev/null
@@ -0,0 +1,120 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_VERSION_H
+#define INCLUDED_IMF_VERSION_H
+
+//-----------------------------------------------------------------------------
+//
+//     Magic and version number.
+//
+//-----------------------------------------------------------------------------
+
+
+namespace Imf {
+
+
+//
+// The MAGIC number is stored in the first four bytes of every
+// OpenEXR image file.  This can be used to quickly test whether
+// a given file is an OpenEXR image file (see isImfMagic(), below).
+//
+
+const int MAGIC = 20000630;
+
+
+//
+// The second item in each OpenEXR image file, right after the
+// magic number, is a four-byte file version identifier.  Depending
+// on a file's version identifier, a file reader can enable various
+// backwards-compatibility switches, or it can quickly reject files
+// that it cannot read.
+//
+// The version identifier is split into an 8-bit version number,
+// and a 24-bit flags field.
+//
+
+const int VERSION_NUMBER_FIELD = 0x000000ff;
+const int VERSION_FLAGS_FIELD  = 0xffffff00;
+
+
+//
+// Value that goes into VERSION_NUMBER_FIELD.
+//
+
+const int EXR_VERSION          = 2;
+
+
+//
+// Flags that can go into VERSION_FLAGS_FIELD.
+// Flags can only occupy the 1 bits in VERSION_FLAGS_FIELD.
+//
+
+const int TILED_FLAG           = 0x00000200;   // File is tiled
+
+const int LONG_NAMES_FLAG       = 0x00000400;   // File contains long
+                                                // attribute or channel
+                                                // names
+
+//
+// Bitwise OR of all known flags.
+//
+
+const int ALL_FLAGS            = TILED_FLAG | LONG_NAMES_FLAG;
+
+
+//
+// Utility functions
+//
+
+inline bool  isTiled (int version)     {return !!(version & TILED_FLAG);}
+inline int   makeTiled (int version)   {return version | TILED_FLAG;}
+inline int   makeNotTiled (int version) {return version & ~TILED_FLAG;}
+inline int   getVersion (int version)  {return version & VERSION_NUMBER_FIELD;}
+inline int   getFlags (int version)    {return version & VERSION_FLAGS_FIELD;}
+inline bool  supportsFlags (int flags) {return !(flags & ~ALL_FLAGS);}
+
+
+//
+// Given the first four bytes of a file, returns true if the
+// file is probably an OpenEXR image file, false if not.
+//
+
+bool        isImfMagic (const char bytes[4]);
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfWav.cpp b/3rdparty/openexr/IlmImf/ImfWav.cpp
new file mode 100644 (file)
index 0000000..d4486d5
--- /dev/null
@@ -0,0 +1,390 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     16-bit Haar Wavelet encoding and decoding
+//
+//     The source code in this file is derived from the encoding
+//     and decoding routines written by Christian Rouet for his
+//     PIZ image file format.
+//
+//-----------------------------------------------------------------------------
+
+
+#include <ImfWav.h>
+
+namespace Imf {
+namespace {
+
+
+//
+// Wavelet basis functions without modulo arithmetic; they produce
+// the best compression ratios when the wavelet-transformed data are
+// Huffman-encoded, but the wavelet transform works only for 14-bit
+// data (untransformed data values must be less than (1 << 14)).
+//
+
+inline void
+wenc14 (unsigned short  a, unsigned short  b,
+        unsigned short &l, unsigned short &h)
+{
+    short as = a;
+    short bs = b;
+
+    short ms = (as + bs) >> 1;
+    short ds = as - bs;
+
+    l = ms;
+    h = ds;
+}
+
+
+inline void
+wdec14 (unsigned short  l, unsigned short  h,
+        unsigned short &a, unsigned short &b)
+{
+    short ls = l;
+    short hs = h;
+
+    int hi = hs;
+    int ai = ls + (hi & 1) + (hi >> 1);
+
+    short as = ai;
+    short bs = ai - hi;
+
+    a = as;
+    b = bs;
+}
+
+
+//
+// Wavelet basis functions with modulo arithmetic; they work with full
+// 16-bit data, but Huffman-encoding the wavelet-transformed data doesn't
+// compress the data quite as well.
+//
+
+const int NBITS = 16;
+const int A_OFFSET =  1 << (NBITS  - 1);
+const int M_OFFSET =  1 << (NBITS  - 1);
+const int MOD_MASK = (1 <<  NBITS) - 1;
+
+
+inline void
+wenc16 (unsigned short  a, unsigned short  b,
+        unsigned short &l, unsigned short &h)
+{
+    int ao =  (a + A_OFFSET) & MOD_MASK;
+    int m  = ((ao + b) >> 1);
+    int d  =   ao - b;
+
+    if (d < 0)
+       m = (m + M_OFFSET) & MOD_MASK;
+
+    d &= MOD_MASK;
+
+    l = m;
+    h = d;
+}
+
+
+inline void
+wdec16 (unsigned short  l, unsigned short  h,
+        unsigned short &a, unsigned short &b)
+{
+    int m = l;
+    int d = h;
+    int bb = (m - (d >> 1)) & MOD_MASK;
+    int aa = (d + bb - A_OFFSET) & MOD_MASK;
+    b = bb;
+    a = aa;
+}
+
+} // namespace
+
+
+//
+// 2D Wavelet encoding:
+//
+
+void
+wav2Encode
+    (unsigned short*   in,     // io: values are transformed in place
+     int               nx,     // i : x size
+     int               ox,     // i : x offset
+     int               ny,     // i : y size
+     int               oy,     // i : y offset
+     unsigned short    mx)     // i : maximum in[x][y] value
+{
+    bool w14 = (mx < (1 << 14));
+    int        n  = (nx > ny)? ny: nx;
+    int        p  = 1;                 // == 1 <<  level
+    int p2 = 2;                        // == 1 << (level+1)
+
+    //
+    // Hierachical loop on smaller dimension n
+    //
+
+    while (p2 <= n)
+    {
+       unsigned short *py = in;
+       unsigned short *ey = in + oy * (ny - p2);
+       int oy1 = oy * p;
+       int oy2 = oy * p2;
+       int ox1 = ox * p;
+       int ox2 = ox * p2;
+       unsigned short i00,i01,i10,i11;
+
+       //
+       // Y loop
+       //
+
+       for (; py <= ey; py += oy2)
+       {
+           unsigned short *px = py;
+           unsigned short *ex = py + ox * (nx - p2);
+
+           //
+           // X loop
+           //
+
+           for (; px <= ex; px += ox2)
+           {
+               unsigned short *p01 = px  + ox1;
+               unsigned short *p10 = px  + oy1;
+               unsigned short *p11 = p10 + ox1;
+
+               //
+               // 2D wavelet encoding
+               //
+
+               if (w14)
+               {
+                   wenc14 (*px,  *p01, i00, i01);
+                   wenc14 (*p10, *p11, i10, i11);
+                   wenc14 (i00, i10, *px,  *p10);
+                   wenc14 (i01, i11, *p01, *p11);
+               }
+               else
+               {
+                   wenc16 (*px,  *p01, i00, i01);
+                   wenc16 (*p10, *p11, i10, i11);
+                   wenc16 (i00, i10, *px,  *p10);
+                   wenc16 (i01, i11, *p01, *p11);
+               }
+           }
+
+           //
+           // Encode (1D) odd column (still in Y loop)
+           //
+
+           if (nx & p)
+           {
+               unsigned short *p10 = px + oy1;
+
+               if (w14)
+                   wenc14 (*px, *p10, i00, *p10);
+               else
+                   wenc16 (*px, *p10, i00, *p10);
+
+               *px= i00;
+           }
+       }
+
+       //
+       // Encode (1D) odd line (must loop in X)
+       //
+
+       if (ny & p)
+       {
+           unsigned short *px = py;
+           unsigned short *ex = py + ox * (nx - p2);
+
+           for (; px <= ex; px += ox2)
+           {
+               unsigned short *p01 = px + ox1;
+
+               if (w14)
+                   wenc14 (*px, *p01, i00, *p01);
+               else
+                   wenc16 (*px, *p01, i00, *p01);
+
+               *px= i00;
+           }
+       }
+
+       //
+       // Next level
+       //
+
+       p = p2;
+       p2 <<= 1;
+    }
+}
+
+
+//
+// 2D Wavelet decoding:
+//
+
+void
+wav2Decode
+    (unsigned short*   in,     // io: values are transformed in place
+     int               nx,     // i : x size
+     int               ox,     // i : x offset
+     int               ny,     // i : y size
+     int               oy,     // i : y offset
+     unsigned short    mx)     // i : maximum in[x][y] value
+{
+    bool w14 = (mx < (1 << 14));
+    int        n = (nx > ny)? ny: nx;
+    int        p = 1;
+    int p2;
+
+    //
+    // Search max level
+    //
+
+    while (p <= n)
+       p <<= 1;
+
+    p >>= 1;
+    p2 = p;
+    p >>= 1;
+
+    //
+    // Hierarchical loop on smaller dimension n
+    //
+
+    while (p >= 1)
+    {
+       unsigned short *py = in;
+       unsigned short *ey = in + oy * (ny - p2);
+       int oy1 = oy * p;
+       int oy2 = oy * p2;
+       int ox1 = ox * p;
+       int ox2 = ox * p2;
+       unsigned short i00,i01,i10,i11;
+
+       //
+       // Y loop
+       //
+
+       for (; py <= ey; py += oy2)
+       {
+           unsigned short *px = py;
+           unsigned short *ex = py + ox * (nx - p2);
+
+           //
+           // X loop
+           //
+
+           for (; px <= ex; px += ox2)
+           {
+               unsigned short *p01 = px  + ox1;
+               unsigned short *p10 = px  + oy1;
+               unsigned short *p11 = p10 + ox1;
+
+               //
+               // 2D wavelet decoding
+               //
+
+               if (w14)
+               {
+                   wdec14 (*px,  *p10, i00, i10);
+                   wdec14 (*p01, *p11, i01, i11);
+                   wdec14 (i00, i01, *px,  *p01);
+                   wdec14 (i10, i11, *p10, *p11);
+               }
+               else
+               {
+                   wdec16 (*px,  *p10, i00, i10);
+                   wdec16 (*p01, *p11, i01, i11);
+                   wdec16 (i00, i01, *px,  *p01);
+                   wdec16 (i10, i11, *p10, *p11);
+               }
+           }
+
+           //
+           // Decode (1D) odd column (still in Y loop)
+           //
+
+           if (nx & p)
+           {
+               unsigned short *p10 = px + oy1;
+
+               if (w14)
+                   wdec14 (*px, *p10, i00, *p10);
+               else
+                   wdec16 (*px, *p10, i00, *p10);
+
+               *px= i00;
+           }
+       }
+
+       //
+       // Decode (1D) odd line (must loop in X)
+       //
+
+       if (ny & p)
+       {
+           unsigned short *px = py;
+           unsigned short *ex = py + ox * (nx - p2);
+
+           for (; px <= ex; px += ox2)
+           {
+               unsigned short *p01 = px + ox1;
+
+               if (w14)
+                   wdec14 (*px, *p01, i00, *p01);
+               else
+                   wdec16 (*px, *p01, i00, *p01);
+
+               *px= i00;
+           }
+       }
+
+       //
+       // Next level
+       //
+
+       p2 = p;
+       p >>= 1;
+    }
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfWav.h b/3rdparty/openexr/IlmImf/ImfWav.h
new file mode 100644 (file)
index 0000000..815d2d5
--- /dev/null
@@ -0,0 +1,70 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_WAV_H
+#define INCLUDED_IMF_WAV_H
+
+//-----------------------------------------------------------------------------
+//
+//     16-bit Haar Wavelet encoding and decoding
+//
+//-----------------------------------------------------------------------------
+
+namespace Imf {
+
+
+void
+wav2Encode
+    (unsigned short *in, // io: values in[y][x] are transformed in place
+     int     nx,        // i : x size
+     int     ox,        // i : x offset
+     int     ny,        // i : y size
+     int     oy,        // i : y offset
+     unsigned short mx); // i : maximum in[x][y] value
+
+void
+wav2Decode
+    (unsigned short *in, // io: values in[y][x] are transformed in place
+     int     nx,        // i : x size
+     int     ox,        // i : x offset
+     int     ny,        // i : y size
+     int     oy,        // i : y offset
+     unsigned short mx); // i : maximum in[x][y] value
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfXdr.h b/3rdparty/openexr/IlmImf/ImfXdr.h
new file mode 100644 (file)
index 0000000..7992921
--- /dev/null
@@ -0,0 +1,916 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_XDR_H
+#define INCLUDED_IMF_XDR_H
+
+//----------------------------------------------------------------------------
+//
+//     Xdr -- routines to convert data between the machine's native
+//     format and a machine-independent external data representation:
+//
+//         write<R> (T &o, S v);       converts a value, v, of type S
+//                                     into a machine-independent
+//                                     representation and stores the
+//                                     result in an output buffer, o.
+//
+//         read<R> (T &i, S &v);       reads the machine-independent
+//                                     representation of a value of type
+//                                     S from input buffer i, converts
+//                                     the value into the machine's native
+//                                     representation, and stores the result
+//                                     in v.
+//
+//         size<S>();                  returns the size, in bytes, of the
+//                                     machine-independent representation
+//                                     of an object of type S.
+//                                     
+//     The write() and read() routines are templates; data can be written
+//     to and read from any output or input buffer type T for which a helper
+//     class, R, exits.  Class R must define a method to store a char array
+//     in a T, and a method to read a char array from a T:
+//
+//         struct R
+//         {
+//             static void
+//             writeChars (T &o, const char c[/*n*/], int n)
+//             {
+//                 ... // Write c[0], c[1] ... c[n-1] to output buffer o.
+//             }
+//
+//             static void
+//             readChars (T &i, char c[/*n*/], int n)
+//             {
+//                 ... // Read n characters from input buffer i
+//                     // and copy them to c[0], c[1] ... c[n-1].
+//             }
+//         };
+//
+//     Example - writing to and reading from iostreams:
+//
+//         struct CharStreamIO
+//         {
+//             static void
+//             writeChars (ostream &os, const char c[], int n)
+//             {
+//                 os.write (c, n);
+//             }
+//
+//             static void
+//             readChars (istream &is, char c[], int n)
+//             {
+//                 is.read (c, n);
+//             }
+//         };
+//
+//          ...
+//
+//         Xdr::write<CharStreamIO> (os, 3);
+//         Xdr::write<CharStreamIO> (os, 5.0);
+//
+//----------------------------------------------------------------------------
+
+#include <ImfInt64.h>
+#include "IexMathExc.h"
+#include "half.h"
+#include <limits.h>
+
+namespace Imf {
+namespace Xdr {
+
+
+//-------------------------------
+// Write data to an output stream
+//-------------------------------
+
+template <class S, class T>
+void
+write (T &out, bool v);
+
+template <class S, class T>
+void
+write (T &out, char v);
+
+template <class S, class T>
+void
+write (T &out, signed char v);
+
+template <class S, class T>
+void
+write (T &out, unsigned char v);
+
+template <class S, class T>
+void
+write (T &out, signed short v);
+
+template <class S, class T>
+void
+write (T &out, unsigned short v);
+
+template <class S, class T>
+void
+write (T &out, signed int v);
+
+template <class S, class T>
+void
+write (T &out, unsigned int v);
+
+template <class S, class T>
+void
+write (T &out, signed long v);
+
+template <class S, class T>
+void
+write (T &out, unsigned long v);
+
+#if ULONG_MAX != 18446744073709551615LU
+
+    template <class S, class T>
+    void
+    write (T &out, Int64 v);
+
+#endif
+
+template <class S, class T>
+void
+write (T &out, float v);
+
+template <class S, class T>
+void
+write (T &out, double v);
+
+template <class S, class T>
+void
+write (T &out, half v);
+
+template <class S, class T>
+void
+write (T &out, const char v[/*n*/], int n);    // fixed-size char array
+
+template <class S, class T>
+void
+write (T &out, const char v[]);                        // zero-terminated string
+
+
+//-----------------------------------------
+// Append padding bytes to an output stream
+//-----------------------------------------
+
+template <class S, class T>
+void
+pad (T &out, int n);                           // write n padding bytes
+
+
+
+//-------------------------------
+// Read data from an input stream
+//-------------------------------
+
+template <class S, class T>
+void
+read (T &in, bool &v);
+
+template <class S, class T>
+void
+read (T &in, char &v);
+
+template <class S, class T>
+void
+read (T &in, signed char &v);
+
+template <class S, class T>
+void
+read (T &in, unsigned char &v);
+
+template <class S, class T>
+void
+read (T &in, signed short &v);
+
+template <class S, class T>
+void
+read (T &in, unsigned short &v);
+
+template <class S, class T>
+void
+read (T &in, signed int &v);
+
+template <class S, class T>
+void
+read (T &in, unsigned int &v);
+
+template <class S, class T>
+void
+read (T &in, signed long &v);
+
+template <class S, class T>
+void
+read (T &in, unsigned long &v);
+
+#if ULONG_MAX != 18446744073709551615LU
+
+    template <class S, class T>
+    void
+    read (T &in, Int64 &v);
+
+#endif
+
+template <class S, class T>
+void
+read (T &in, float &v);
+
+template <class S, class T>
+void
+read (T &in, double &v);
+
+template <class S, class T>
+void
+read (T &in, half &v);
+
+template <class S, class T>
+void
+read (T &in, char v[/*n*/], int n);            // fixed-size char array
+
+template <class S, class T>
+void
+read (T &in, int n, char v[/*n*/]);            // zero-terminated string
+
+
+//-------------------------------------------
+// Skip over padding bytes in an input stream
+//-------------------------------------------
+
+template <class S, class T>
+void
+skip (T &in, int n);                           // skip n padding bytes
+
+
+
+//--------------------------------------
+// Size of the machine-independent
+// representation of an object of type S
+//--------------------------------------
+
+template <class S>
+int
+size ();
+
+
+//---------------
+// Implementation
+//---------------
+
+template <class S, class T>
+inline void
+writeSignedChars (T &out, const signed char c[], int n)
+{
+    S::writeChars (out, (const char *) c, n);
+}
+
+
+template <class S, class T>
+inline void
+writeUnsignedChars (T &out, const unsigned char c[], int n)
+{
+    S::writeChars (out, (const char *) c, n);
+}
+
+
+template <class S, class T>
+inline void
+readSignedChars (T &in, signed char c[], int n)
+{
+    S::readChars (in, (char *) c, n);
+}
+
+
+template <class S, class T>
+inline void
+readUnsignedChars (T &in, unsigned char c[], int n)
+{
+    S::readChars (in, (char *) c, n);
+}
+
+
+template <class S, class T>
+inline void
+write (T &out, bool v)
+{
+    char c = !!v;
+    S::writeChars (out, &c, 1);
+}
+
+
+template <class S, class T>
+inline void
+write (T &out, char v)
+{
+    S::writeChars (out, &v, 1);
+}
+
+
+template <class S, class T>
+inline void
+write (T &out, signed char v)
+{
+    writeSignedChars<S> (out, &v, 1);
+}
+
+
+template <class S, class T>
+inline void
+write (T &out, unsigned char v)
+{
+    writeUnsignedChars<S> (out, &v, 1);
+}
+
+
+template <class S, class T>
+void
+write (T &out, signed short v)
+{
+    signed char b[2];
+
+    b[0] =  (signed char) (v);
+    b[1] =  (signed char) (v >> 8);
+
+    writeSignedChars<S> (out, b, 2);
+}
+
+
+template <class S, class T>
+void
+write (T &out, unsigned short v)
+{
+    unsigned char b[2];
+
+    b[0] =  (unsigned char) (v);
+    b[1] =  (unsigned char) (v >> 8);
+
+    writeUnsignedChars<S> (out, b, 2);
+}
+
+
+template <class S, class T>
+void
+write (T &out, signed int v)
+{
+    signed char b[4];
+
+    b[0] =  (signed char) (v);
+    b[1] =  (signed char) (v >> 8);
+    b[2] =  (signed char) (v >> 16);
+    b[3] =  (signed char) (v >> 24);
+
+    writeSignedChars<S> (out, b, 4);
+}
+
+
+template <class S, class T>
+void
+write (T &out, unsigned int v)
+{
+    unsigned char b[4];
+
+    b[0] =  (unsigned char) (v);
+    b[1] =  (unsigned char) (v >> 8);
+    b[2] =  (unsigned char) (v >> 16);
+    b[3] =  (unsigned char) (v >> 24);
+
+    writeUnsignedChars<S> (out, b, 4);
+}
+
+
+template <class S, class T>
+void
+write (T &out, signed long v)
+{
+    signed char b[8];
+
+    b[0] = (signed char) (v);
+    b[1] = (signed char) (v >> 8);
+    b[2] = (signed char) (v >> 16);
+    b[3] = (signed char) (v >> 24);
+
+    #if LONG_MAX == 2147483647
+
+       if (v >= 0)
+       {
+           b[4] = 0;
+           b[5] = 0;
+           b[6] = 0;
+           b[7] = 0;
+       }
+       else
+       {
+           b[4] = ~0;
+           b[5] = ~0;
+           b[6] = ~0;
+           b[7] = ~0;
+       }
+
+    #elif LONG_MAX == 9223372036854775807L
+
+       b[4] = (signed char) (v >> 32);
+       b[5] = (signed char) (v >> 40);
+       b[6] = (signed char) (v >> 48);
+       b[7] = (signed char) (v >> 56);
+
+    #else
+       
+       #error write<T> (T &out, signed long v) not implemented
+
+    #endif
+
+    writeSignedChars<S> (out, b, 8);
+}
+
+
+template <class S, class T>
+void
+write (T &out, unsigned long v)
+{
+    unsigned char b[8];
+
+    b[0] = (unsigned char) (v);
+    b[1] = (unsigned char) (v >> 8);
+    b[2] = (unsigned char) (v >> 16);
+    b[3] = (unsigned char) (v >> 24);
+
+    #if ULONG_MAX == 4294967295U
+
+       b[4] = 0;
+       b[5] = 0;
+       b[6] = 0;
+       b[7] = 0;
+
+    #elif ULONG_MAX == 18446744073709551615LU
+
+       b[4] = (unsigned char) (v >> 32);
+       b[5] = (unsigned char) (v >> 40);
+       b[6] = (unsigned char) (v >> 48);
+       b[7] = (unsigned char) (v >> 56);
+
+    #else
+       
+       #error write<T> (T &out, unsigned long v) not implemented
+
+    #endif
+
+    writeUnsignedChars<S> (out, b, 8);
+}
+
+
+#if ULONG_MAX != 18446744073709551615LU
+
+    template <class S, class T>
+    void
+    write (T &out, Int64 v)
+    {
+        unsigned char b[8];
+
+        b[0] = (unsigned char) (v);
+        b[1] = (unsigned char) (v >> 8);
+        b[2] = (unsigned char) (v >> 16);
+        b[3] = (unsigned char) (v >> 24);
+        b[4] = (unsigned char) (v >> 32);
+        b[5] = (unsigned char) (v >> 40);
+        b[6] = (unsigned char) (v >> 48);
+        b[7] = (unsigned char) (v >> 56);
+
+        writeUnsignedChars<S> (out, b, 8);
+    }
+
+#endif
+
+
+template <class S, class T>
+void
+write (T &out, float v)
+{
+    union {unsigned int i; float f;} u;
+    u.f = v;
+
+    unsigned char b[4];
+
+    b[0] = (unsigned char) (u.i);
+    b[1] = (unsigned char) (u.i >> 8);
+    b[2] = (unsigned char) (u.i >> 16);
+    b[3] = (unsigned char) (u.i >> 24);
+
+    writeUnsignedChars<S> (out, b, 4);
+}
+
+
+template <class S, class T>
+void
+write (T &out, double v)
+{
+    union {Int64 i; double d;} u;
+    u.d = v;
+
+    unsigned char b[8];
+
+    b[0] = (unsigned char) (u.i);
+    b[1] = (unsigned char) (u.i >> 8);
+    b[2] = (unsigned char) (u.i >> 16);
+    b[3] = (unsigned char) (u.i >> 24);
+    b[4] = (unsigned char) (u.i >> 32);
+    b[5] = (unsigned char) (u.i >> 40);
+    b[6] = (unsigned char) (u.i >> 48);
+    b[7] = (unsigned char) (u.i >> 56);
+
+    writeUnsignedChars<S> (out, b, 8);
+}
+
+
+template <class S, class T>
+inline void
+write (T &out, half v)
+{
+    unsigned char b[2];
+
+    b[0] =  (unsigned char) (v.bits());
+    b[1] =  (unsigned char) (v.bits() >> 8);
+
+    writeUnsignedChars<S> (out, b, 2);
+}
+
+
+template <class S, class T>
+inline void
+write (T &out, const char v[], int n)  // fixed-size char array
+{
+    S::writeChars (out, v, n);
+}
+
+
+template <class S, class T>
+void
+write (T &out, const char v[])         // zero-terminated string
+{
+    while (*v)
+    {
+       S::writeChars (out, v, 1);
+       ++v;
+    }
+
+    S::writeChars (out, v, 1);
+}
+
+
+template <class S, class T>
+void
+pad (T &out, int n)                    // add n padding bytes
+{
+    for (int i = 0; i < n; i++)
+    {
+       const char c = 0;
+       S::writeChars (out, &c, 1);
+    }
+}
+
+
+template <class S, class T>
+inline void
+read (T &in, bool &v)
+{
+    char c;
+
+    S::readChars (in, &c, 1);
+    v = !!c;
+}
+
+
+template <class S, class T>
+inline void
+read (T &in, char &v)
+{
+    S::readChars (in, &v, 1);
+}
+
+
+template <class S, class T>
+inline void
+read (T &in, signed char &v)
+{
+    readSignedChars<S> (in, &v, 1);
+}
+
+
+template <class S, class T>
+inline void
+read (T &in, unsigned char &v)
+{
+    readUnsignedChars<S> (in, &v, 1);
+}
+
+
+template <class S, class T>
+void
+read (T &in, signed short &v)
+{
+    signed char b[2];
+
+    readSignedChars<S> (in, b, 2);
+
+    v = (b[0] & 0x00ff) |
+       (b[1] << 8);
+}
+
+
+template <class S, class T>
+void
+read (T &in, unsigned short &v)
+{
+    unsigned char b[2];
+
+    readUnsignedChars<S> (in, b, 2);
+
+    v = (b[0] & 0x00ff) |
+       (b[1] << 8);
+}
+
+
+template <class S, class T>
+void
+read (T &in, signed int &v)
+{
+    signed char b[4];
+
+    readSignedChars<S> (in, b, 4);
+
+    v =  (b[0]        & 0x000000ff) |
+       ((b[1] << 8)  & 0x0000ff00) |
+       ((b[2] << 16) & 0x00ff0000) |
+        (b[3] << 24);
+}
+
+
+template <class S, class T>
+void
+read (T &in, unsigned int &v)
+{
+    unsigned char b[4];
+
+    readUnsignedChars<S> (in, b, 4);
+
+    v =  (b[0]        & 0x000000ff) |
+       ((b[1] << 8)  & 0x0000ff00) |
+       ((b[2] << 16) & 0x00ff0000) |
+        (b[3] << 24);
+}
+
+
+template <class S, class T>
+void
+read (T &in, signed long &v)
+{
+    signed char b[8];
+
+    readSignedChars<S> (in, b, 8);
+
+    #if LONG_MAX == 2147483647
+
+       v =  (b[0]        & 0x000000ff) |
+           ((b[1] << 8)  & 0x0000ff00) |
+           ((b[2] << 16) & 0x00ff0000) |
+            (b[3] << 24);
+
+       if (( b[4] ||  b[5] ||  b[6] ||  b[7]) &&
+           (~b[4] || ~b[5] || ~b[6] || ~b[7]))
+       {
+           throw Iex::OverflowExc ("Long int overflow - read a large "
+                                   "64-bit integer in a 32-bit process.");
+       }
+
+    #elif LONG_MAX == 9223372036854775807L
+
+       v =  ((long) b[0]        & 0x00000000000000ff) |
+           (((long) b[1] << 8)  & 0x000000000000ff00) |
+           (((long) b[2] << 16) & 0x0000000000ff0000) |
+           (((long) b[3] << 24) & 0x00000000ff000000) |
+           (((long) b[4] << 32) & 0x000000ff00000000) |
+           (((long) b[5] << 40) & 0x0000ff0000000000) |
+           (((long) b[6] << 48) & 0x00ff000000000000) |
+            ((long) b[7] << 56);
+
+    #else
+
+       #error read<T> (T &in, signed long &v) not implemented
+
+    #endif
+}
+
+
+template <class S, class T>
+void
+read (T &in, unsigned long &v)
+{
+    unsigned char b[8];
+
+    readUnsignedChars<S> (in, b, 8);
+
+    #if ULONG_MAX == 4294967295U
+
+       v =  (b[0]        & 0x000000ff) |
+           ((b[1] << 8)  & 0x0000ff00) |
+           ((b[2] << 16) & 0x00ff0000) |
+            (b[3] << 24);
+
+       if (b[4] || b[5] || b[6] || b[7])
+       {
+           throw Iex::OverflowExc ("Long int overflow - read a large "
+                                   "64-bit integer in a 32-bit process.");
+       }
+
+    #elif ULONG_MAX == 18446744073709551615LU
+
+       v =  ((unsigned long) b[0]        & 0x00000000000000ff) |
+           (((unsigned long) b[1] << 8)  & 0x000000000000ff00) |
+           (((unsigned long) b[2] << 16) & 0x0000000000ff0000) |
+           (((unsigned long) b[3] << 24) & 0x00000000ff000000) |
+           (((unsigned long) b[4] << 32) & 0x000000ff00000000) |
+           (((unsigned long) b[5] << 40) & 0x0000ff0000000000) |
+           (((unsigned long) b[6] << 48) & 0x00ff000000000000) |
+            ((unsigned long) b[7] << 56);
+
+    #else
+
+       #error read<T> (T &in, unsigned long &v) not implemented
+
+    #endif
+}
+
+
+#if ULONG_MAX != 18446744073709551615LU
+
+    template <class S, class T>
+    void
+    read (T &in, Int64 &v)
+    {
+        unsigned char b[8];
+
+        readUnsignedChars<S> (in, b, 8);
+
+        v =  ((Int64) b[0]        & 0x00000000000000ffLL) |
+           (((Int64) b[1] << 8)  & 0x000000000000ff00LL) |
+           (((Int64) b[2] << 16) & 0x0000000000ff0000LL) |
+           (((Int64) b[3] << 24) & 0x00000000ff000000LL) |
+           (((Int64) b[4] << 32) & 0x000000ff00000000LL) |
+           (((Int64) b[5] << 40) & 0x0000ff0000000000LL) |
+           (((Int64) b[6] << 48) & 0x00ff000000000000LL) |
+           ((Int64) b[7] << 56);
+    }
+
+#endif
+
+
+template <class S, class T>
+void
+read (T &in, float &v)
+{
+    unsigned char b[4];
+
+    readUnsignedChars<S> (in, b, 4);
+
+    union {unsigned int i; float f;} u;
+
+    u.i = (b[0]        & 0x000000ff) |
+        ((b[1] << 8)  & 0x0000ff00) |
+        ((b[2] << 16) & 0x00ff0000) |
+         (b[3] << 24);
+
+    v = u.f;
+}
+
+
+template <class S, class T>
+void
+read (T &in, double &v)
+{
+    unsigned char b[8];
+
+    readUnsignedChars<S> (in, b, 8);
+
+    union {Int64 i; double d;} u;
+
+    u.i = ((Int64) b[0]        & 0x00000000000000ffULL) |
+        (((Int64) b[1] << 8)  & 0x000000000000ff00ULL) |
+        (((Int64) b[2] << 16) & 0x0000000000ff0000ULL) |
+        (((Int64) b[3] << 24) & 0x00000000ff000000ULL) |
+        (((Int64) b[4] << 32) & 0x000000ff00000000ULL) |
+        (((Int64) b[5] << 40) & 0x0000ff0000000000ULL) |
+        (((Int64) b[6] << 48) & 0x00ff000000000000ULL) |
+         ((Int64) b[7] << 56);
+
+    v = u.d;
+}
+
+
+template <class S, class T>
+inline void
+read (T &in, half &v)
+{
+    unsigned char b[2];
+
+    readUnsignedChars<S> (in, b, 2);
+
+    v.setBits ((b[0] & 0x00ff) | (b[1] << 8));
+}
+
+
+template <class S, class T>
+inline void
+read (T &in, char v[], int n)          // fixed-size char array
+{
+    S::readChars (in, v, n);
+}
+
+
+template <class S, class T>
+void
+read (T &in, int n, char v[])          // zero-terminated string
+{
+    while (n >= 0)
+    {
+       S::readChars (in, v, 1);
+
+       if (*v == 0)
+           break;
+
+       --n;
+       ++v;
+    }
+}
+
+
+template <class S, class T>
+void
+skip (T &in, int n)                    // skip n padding bytes
+{
+    char c[1024];
+
+    while (n >= (int) sizeof (c))
+    {
+       if (!S::readChars (in, c, sizeof (c)))
+           return;
+
+       n -= sizeof (c);
+    }
+
+    if (n >= 1)
+       S::readChars (in, c, n);
+}
+
+
+template <> inline int size <bool> ()                  {return 1;}
+template <> inline int size <char> ()                  {return 1;}
+template <> inline int size <signed char> ()           {return 1;}
+template <> inline int size <unsigned char> ()         {return 1;}
+template <> inline int size <signed short> ()          {return 2;}
+template <> inline int size <unsigned short> ()                {return 2;}
+template <> inline int size <signed int> ()            {return 4;}
+template <> inline int size <unsigned int> ()          {return 4;}
+template <> inline int size <signed long> ()           {return 8;}
+template <> inline int size <unsigned long> ()         {return 8;}
+template <> inline int size <float> ()                 {return 4;}
+template <> inline int size <double> ()                        {return 8;}
+template <> inline int size <half> ()                  {return 2;}
+
+
+} // namespace Xdr
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/ImfZipCompressor.cpp b/3rdparty/openexr/IlmImf/ImfZipCompressor.cpp
new file mode 100644 (file)
index 0000000..80cefa1
--- /dev/null
@@ -0,0 +1,240 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//-----------------------------------------------------------------------------
+//
+//     class ZipCompressor
+//
+//-----------------------------------------------------------------------------
+#define ZLIB_WINAPI
+
+#include <ImfZipCompressor.h>
+#include <ImfCheckedArithmetic.h>
+#include "Iex.h"
+#include <zlib.h>
+
+namespace Imf {
+
+
+ZipCompressor::ZipCompressor
+    (const Header &hdr,
+     size_t maxScanLineSize,
+     size_t numScanLines)
+:
+    Compressor (hdr),
+    _maxScanLineSize (maxScanLineSize),
+    _numScanLines (numScanLines),
+    _tmpBuffer (0),
+    _outBuffer (0)
+{
+    size_t maxInBytes =
+        uiMult (maxScanLineSize, numScanLines);
+
+    size_t maxOutBytes =
+        uiAdd (uiAdd (maxInBytes,
+                      size_t (ceil (maxInBytes * 0.01))),
+               size_t (100));
+
+    _tmpBuffer =
+       new char [maxInBytes];
+
+    _outBuffer =
+       new char [maxOutBytes];
+}
+
+
+ZipCompressor::~ZipCompressor ()
+{
+    delete [] _tmpBuffer;
+    delete [] _outBuffer;
+}
+
+
+int
+ZipCompressor::numScanLines () const
+{
+    return _numScanLines;
+}
+
+
+int
+ZipCompressor::compress (const char *inPtr,
+                        int inSize,
+                        int minY,
+                        const char *&outPtr)
+{
+    //
+    // Special case Â­- empty input buffer
+    //
+
+    if (inSize == 0)
+    {
+       outPtr = _outBuffer;
+       return 0;
+    }
+
+    //
+    // Reorder the pixel data.
+    //
+
+    {
+       char *t1 = _tmpBuffer;
+       char *t2 = _tmpBuffer + (inSize + 1) / 2;
+       const char *stop = inPtr + inSize;
+
+       while (true)
+       {
+           if (inPtr < stop)
+               *(t1++) = *(inPtr++);
+           else
+               break;
+
+           if (inPtr < stop)
+               *(t2++) = *(inPtr++);
+           else
+               break;
+       }
+    }
+
+    //
+    // Predictor.
+    //
+
+    {
+       unsigned char *t = (unsigned char *) _tmpBuffer + 1;
+       unsigned char *stop = (unsigned char *) _tmpBuffer + inSize;
+       int p = t[-1];
+
+       while (t < stop)
+       {
+           int d = int (t[0]) - p + (128 + 256);
+           p = t[0];
+           t[0] = d;
+           ++t;
+       }
+    }
+
+    //
+    // Compress the data using zlib
+    //
+
+    uLongf outSize = int(ceil(inSize * 1.01)) + 100;
+
+    if (Z_OK != ::compress ((Bytef *)_outBuffer, &outSize,
+                           (const Bytef *) _tmpBuffer, inSize))
+    {
+       throw Iex::BaseExc ("Data compression (zlib) failed.");
+    }
+
+    outPtr = _outBuffer;
+    return outSize;
+}
+
+
+int
+ZipCompressor::uncompress (const char *inPtr,
+                          int inSize,
+                          int minY,
+                          const char *&outPtr)
+{
+    //
+    // Special case Â­- empty input buffer
+    //
+
+    if (inSize == 0)
+    {
+       outPtr = _outBuffer;
+       return 0;
+    }
+
+    //
+    // Decompress the data using zlib
+    //
+
+    uLongf outSize = _maxScanLineSize * _numScanLines;
+
+    if (Z_OK != ::uncompress ((Bytef *)_tmpBuffer, &outSize,
+                             (const Bytef *) inPtr, inSize))
+    {
+       throw Iex::InputExc ("Data decompression (zlib) failed.");
+    }
+
+    //
+    // Predictor.
+    //
+
+    {
+       unsigned char *t = (unsigned char *) _tmpBuffer + 1;
+       unsigned char *stop = (unsigned char *) _tmpBuffer + outSize;
+
+       while (t < stop)
+       {
+           int d = int (t[-1]) + int (t[0]) - 128;
+           t[0] = d;
+           ++t;
+       }
+    }
+
+    //
+    // Reorder the pixel data.
+    //
+
+    {
+       const char *t1 = _tmpBuffer;
+       const char *t2 = _tmpBuffer + (outSize + 1) / 2;
+       char *s = _outBuffer;
+       char *stop = s + outSize;
+
+       while (true)
+       {
+           if (s < stop)
+               *(s++) = *(t1++);
+           else
+               break;
+
+           if (s < stop)
+               *(s++) = *(t2++);
+           else
+               break;
+       }
+    }
+
+    outPtr = _outBuffer;
+    return outSize;
+}
+
+
+} // namespace Imf
diff --git a/3rdparty/openexr/IlmImf/ImfZipCompressor.h b/3rdparty/openexr/IlmImf/ImfZipCompressor.h
new file mode 100644 (file)
index 0000000..a515348
--- /dev/null
@@ -0,0 +1,83 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMF_ZIP_COMPRESSOR_H
+#define INCLUDED_IMF_ZIP_COMPRESSOR_H
+
+//-----------------------------------------------------------------------------
+//
+//     class ZipCompressor -- performs zlib-style compression
+//
+//-----------------------------------------------------------------------------
+
+#include <ImfCompressor.h>
+
+namespace Imf {
+
+
+class ZipCompressor: public Compressor
+{
+  public:
+
+    ZipCompressor (const Header &hdr, 
+                   size_t maxScanLineSize,
+                   size_t numScanLines);
+
+    virtual ~ZipCompressor ();
+
+    virtual int numScanLines () const;
+
+    virtual int        compress (const char *inPtr,
+                         int inSize,
+                         int minY,
+                         const char *&outPtr);
+
+    virtual int        uncompress (const char *inPtr,
+                           int inSize,
+                           int minY,
+                           const char *&outPtr);
+  private:
+
+    int                _maxScanLineSize;
+    int                _numScanLines;
+    char *     _tmpBuffer;
+    char *     _outBuffer;
+};
+
+
+} // namespace Imf
+
+#endif
diff --git a/3rdparty/openexr/IlmImf/b44ExpLogTable.cpp b/3rdparty/openexr/IlmImf/b44ExpLogTable.cpp
new file mode 100644 (file)
index 0000000..24e35fb
--- /dev/null
@@ -0,0 +1,136 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//---------------------------------------------------------------------------
+//
+//     b44ExpLogTable
+//
+//     A program to generate lookup tables for
+//
+//             y = exp (x / 8)
+//
+//     and
+//             x = 8 * log (x);
+//
+//     where x and y are 16-bit floating-point numbers
+//
+//     The tables are used by class B44Compressor.
+//
+//---------------------------------------------------------------------------
+
+#include <half.h>
+#include <math.h>
+#include <iostream>
+#include <iomanip>
+
+using namespace std;
+
+//---------------------------------------------
+// Main - prints the half-to-float lookup table
+//---------------------------------------------
+
+int
+main ()
+{
+#ifndef HAVE_IOS_BASE
+    cout.setf (ios::hex, ios::basefield);
+#else
+    cout.setf (ios_base::hex, ios_base::basefield);
+#endif
+
+    cout << "//\n"
+           "// This is an automatically generated file.\n"
+           "// Do not edit.\n"
+           "//\n\n";
+
+    const int iMax = (1 << 16);
+
+    cout << "const unsigned short expTable[] =\n"
+           "{\n"
+           "    ";
+
+    for (int i = 0; i < iMax; i++)
+    {
+       half h;
+       h.setBits (i);
+
+       if (!h.isFinite())
+           h = 0;
+       else if (h >= 8 * log (HALF_MAX))
+           h = HALF_MAX;
+       else
+           h = exp (h / 8);
+
+       cout << "0x" << setfill ('0') << setw (4) << h.bits() << ", ";
+
+       if (i % 8 == 7)
+       {
+           cout << "\n";
+
+           if (i < iMax - 1)
+               cout << "    ";
+       }
+    }
+
+    cout << "};\n\n";
+
+    cout << "const unsigned short logTable[] =\n"
+           "{\n"
+           "    ";
+
+    for (int i = 0; i < iMax; i++)
+    {
+       half h;
+       h.setBits (i);
+
+       if (!h.isFinite() || h < 0)
+           h = 0;
+       else
+           h = 8 * log (h);
+
+       cout << "0x" << setfill ('0') << setw (4) << h.bits() << ", ";
+
+       if (i % 8 == 7)
+       {
+           cout << "\n";
+
+           if (i < iMax - 1)
+               cout << "    ";
+       }
+    }
+
+    cout << "};\n";
+
+    return 0;
+}
diff --git a/3rdparty/openexr/IlmImf/b44ExpLogTable.h b/3rdparty/openexr/IlmImf/b44ExpLogTable.h
new file mode 100644 (file)
index 0000000..c13d16c
--- /dev/null
@@ -0,0 +1,16396 @@
+//
+// This is an automatically generated file.
+// Do not edit.
+//
+
+const unsigned short expTable[] =
+{
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 
+    0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 
+    0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 
+    0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 
+    0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 
+    0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 
+    0x3c06, 0x3c06, 0x3c06, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 
+    0x3c07, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 
+    0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 
+    0x3c09, 0x3c09, 0x3c09, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 
+    0x3c0a, 0x3c0a, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 
+    0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 
+    0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 
+    0x3c0e, 0x3c0e, 0x3c0e, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 
+    0x3c0f, 0x3c0f, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 
+    0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 
+    0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 
+    0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 
+    0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 
+    0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 
+    0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 
+    0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 
+    0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 
+    0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 
+    0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 
+    0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 
+    0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 
+    0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 
+    0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 
+    0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 
+    0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 
+    0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 
+    0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 
+    0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 
+    0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c12, 
+    0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 
+    0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 
+    0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 
+    0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 
+    0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 
+    0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 
+    0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 
+    0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c13, 0x3c13, 
+    0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 
+    0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 
+    0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 
+    0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 
+    0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 
+    0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 
+    0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 
+    0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c14, 0x3c14, 0x3c14, 
+    0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 
+    0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 
+    0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 
+    0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 
+    0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 
+    0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 
+    0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 
+    0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 
+    0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 
+    0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 
+    0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 
+    0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 
+    0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 
+    0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 
+    0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 
+    0x3c15, 0x3c15, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 
+    0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 
+    0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 
+    0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 
+    0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 
+    0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 
+    0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 
+    0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 
+    0x3c16, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 
+    0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 
+    0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 
+    0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 
+    0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 
+    0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 
+    0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 
+    0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c18, 
+    0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 
+    0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 
+    0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 
+    0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 
+    0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 
+    0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 
+    0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 
+    0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c19, 0x3c19, 
+    0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 
+    0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 
+    0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 
+    0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 
+    0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 
+    0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 
+    0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 
+    0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c1a, 0x3c1a, 0x3c1a, 
+    0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 
+    0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 
+    0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 
+    0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 
+    0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 
+    0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 
+    0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 
+    0x3c1a, 0x3c1a, 0x3c1a, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 
+    0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 
+    0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 
+    0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 
+    0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 
+    0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 
+    0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 
+    0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 
+    0x3c1b, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 
+    0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 
+    0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 
+    0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 
+    0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 
+    0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 
+    0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 
+    0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 
+    0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 
+    0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 
+    0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 
+    0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 
+    0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 
+    0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 
+    0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 
+    0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1e, 0x3c1e, 
+    0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 
+    0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 
+    0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 
+    0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 
+    0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 
+    0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 
+    0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 
+    0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 
+    0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 
+    0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 
+    0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 
+    0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 
+    0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 
+    0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 
+    0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 
+    0x3c1f, 0x3c1f, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 
+    0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 
+    0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 
+    0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 
+    0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 
+    0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 
+    0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 
+    0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 
+    0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 
+    0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 
+    0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 
+    0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c22, 
+    0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 
+    0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 
+    0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 
+    0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c23, 0x3c23, 
+    0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 
+    0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 
+    0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 
+    0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c24, 0x3c24, 0x3c24, 
+    0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 
+    0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 
+    0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 
+    0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 
+    0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 
+    0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 
+    0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 
+    0x3c25, 0x3c25, 0x3c25, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 
+    0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 
+    0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 
+    0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 
+    0x3c26, 0x3c26, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 
+    0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 
+    0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 
+    0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 
+    0x3c27, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 
+    0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 
+    0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 
+    0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 
+    0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 
+    0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 
+    0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 
+    0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c2a, 0x3c2a, 
+    0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 
+    0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 
+    0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 
+    0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2b, 0x3c2b, 0x3c2b, 
+    0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 
+    0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 
+    0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 
+    0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 
+    0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 
+    0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 
+    0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 
+    0x3c2c, 0x3c2c, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 
+    0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 
+    0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 
+    0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 
+    0x3c2d, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 
+    0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 
+    0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 
+    0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 
+    0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 
+    0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 
+    0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 
+    0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c30, 0x3c30, 
+    0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 
+    0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 
+    0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 
+    0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c31, 0x3c31, 0x3c31, 
+    0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 
+    0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 
+    0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 
+    0x3c31, 0x3c31, 0x3c31, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 
+    0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 
+    0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 
+    0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 
+    0x3c32, 0x3c32, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 
+    0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 
+    0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 
+    0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 
+    0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 
+    0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 
+    0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 
+    0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c35, 
+    0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 
+    0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 
+    0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 
+    0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c36, 0x3c36, 0x3c36, 
+    0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 
+    0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 
+    0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 
+    0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 
+    0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 
+    0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 
+    0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 
+    0x3c37, 0x3c37, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 
+    0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 
+    0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 
+    0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 
+    0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 
+    0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 
+    0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 
+    0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c3a, 
+    0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 
+    0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 
+    0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 
+    0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3b, 0x3c3b, 0x3c3b, 
+    0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 
+    0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 
+    0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 
+    0x3c3b, 0x3c3b, 0x3c3b, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 
+    0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 
+    0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 
+    0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 
+    0x3c3c, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 
+    0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 
+    0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 
+    0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 
+    0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 
+    0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 
+    0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 
+    0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3f, 0x3c3f, 
+    0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 
+    0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 
+    0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 
+    0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 
+    0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 
+    0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 
+    0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 
+    0x3c40, 0x3c40, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 
+    0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 
+    0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 
+    0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 
+    0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 
+    0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 
+    0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c43, 
+    0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c43, 
+    0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c44, 0x3c44, 
+    0x3c44, 0x3c44, 0x3c44, 0x3c44, 0x3c44, 0x3c44, 0x3c44, 0x3c44, 
+    0x3c44, 0x3c44, 0x3c44, 0x3c44, 0x3c44, 0x3c45, 0x3c45, 0x3c45, 
+    0x3c45, 0x3c45, 0x3c45, 0x3c45, 0x3c45, 0x3c45, 0x3c45, 0x3c45, 
+    0x3c45, 0x3c45, 0x3c45, 0x3c45, 0x3c46, 0x3c46, 0x3c46, 0x3c46, 
+    0x3c46, 0x3c46, 0x3c46, 0x3c46, 0x3c46, 0x3c46, 0x3c46, 0x3c46, 
+    0x3c46, 0x3c46, 0x3c46, 0x3c47, 0x3c47, 0x3c47, 0x3c47, 0x3c47, 
+    0x3c47, 0x3c47, 0x3c47, 0x3c47, 0x3c47, 0x3c47, 0x3c47, 0x3c47, 
+    0x3c47, 0x3c47, 0x3c48, 0x3c48, 0x3c48, 0x3c48, 0x3c48, 0x3c48, 
+    0x3c48, 0x3c48, 0x3c48, 0x3c48, 0x3c48, 0x3c48, 0x3c48, 0x3c48, 
+    0x3c48, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 
+    0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 
+    0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 
+    0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4b, 
+    0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 
+    0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4c, 0x3c4c, 
+    0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, 
+    0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4d, 0x3c4d, 0x3c4d, 
+    0x3c4d, 0x3c4d, 0x3c4d, 0x3c4d, 0x3c4d, 0x3c4d, 0x3c4d, 0x3c4d, 
+    0x3c4d, 0x3c4d, 0x3c4d, 0x3c4d, 0x3c4e, 0x3c4e, 0x3c4e, 0x3c4e, 
+    0x3c4e, 0x3c4e, 0x3c4e, 0x3c4e, 0x3c4e, 0x3c4e, 0x3c4e, 0x3c4e, 
+    0x3c4e, 0x3c4e, 0x3c4e, 0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, 
+    0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, 
+    0x3c4f, 0x3c4f, 0x3c50, 0x3c50, 0x3c50, 0x3c50, 0x3c50, 0x3c50, 
+    0x3c50, 0x3c50, 0x3c50, 0x3c50, 0x3c50, 0x3c50, 0x3c50, 0x3c50, 
+    0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, 
+    0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c52, 
+    0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c52, 
+    0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c53, 0x3c53, 
+    0x3c53, 0x3c53, 0x3c53, 0x3c53, 0x3c53, 0x3c53, 0x3c53, 0x3c53, 
+    0x3c53, 0x3c53, 0x3c53, 0x3c53, 0x3c53, 0x3c54, 0x3c54, 0x3c54, 
+    0x3c54, 0x3c54, 0x3c54, 0x3c54, 0x3c54, 0x3c54, 0x3c54, 0x3c54, 
+    0x3c54, 0x3c54, 0x3c54, 0x3c54, 0x3c55, 0x3c55, 0x3c55, 0x3c55, 
+    0x3c55, 0x3c55, 0x3c55, 0x3c55, 0x3c55, 0x3c55, 0x3c55, 0x3c55, 
+    0x3c55, 0x3c55, 0x3c56, 0x3c56, 0x3c56, 0x3c56, 0x3c56, 0x3c56, 
+    0x3c56, 0x3c56, 0x3c56, 0x3c56, 0x3c56, 0x3c56, 0x3c56, 0x3c56, 
+    0x3c56, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 
+    0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 
+    0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, 
+    0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c59, 
+    0x3c59, 0x3c59, 0x3c59, 0x3c59, 0x3c59, 0x3c59, 0x3c59, 0x3c59, 
+    0x3c59, 0x3c59, 0x3c59, 0x3c59, 0x3c59, 0x3c5a, 0x3c5a, 0x3c5a, 
+    0x3c5a, 0x3c5a, 0x3c5a, 0x3c5a, 0x3c5a, 0x3c5a, 0x3c5a, 0x3c5a, 
+    0x3c5a, 0x3c5a, 0x3c5a, 0x3c5a, 0x3c5b, 0x3c5b, 0x3c5b, 0x3c5b, 
+    0x3c5b, 0x3c5b, 0x3c5b, 0x3c5b, 0x3c5b, 0x3c5b, 0x3c5b, 0x3c5b, 
+    0x3c5b, 0x3c5b, 0x3c5b, 0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, 
+    0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, 
+    0x3c5c, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 
+    0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 
+    0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 
+    0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5f, 
+    0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, 
+    0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, 0x3c60, 0x3c60, 0x3c60, 
+    0x3c60, 0x3c60, 0x3c60, 0x3c60, 0x3c60, 0x3c60, 0x3c60, 0x3c60, 
+    0x3c60, 0x3c60, 0x3c60, 0x3c60, 0x3c61, 0x3c61, 0x3c61, 0x3c61, 
+    0x3c61, 0x3c61, 0x3c61, 0x3c61, 0x3c61, 0x3c61, 0x3c61, 0x3c61, 
+    0x3c61, 0x3c61, 0x3c61, 0x3c62, 0x3c62, 0x3c62, 0x3c62, 0x3c62, 
+    0x3c62, 0x3c62, 0x3c62, 0x3c62, 0x3c62, 0x3c62, 0x3c62, 0x3c62, 
+    0x3c62, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 
+    0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 
+    0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c64, 
+    0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c65, 0x3c65, 
+    0x3c65, 0x3c65, 0x3c65, 0x3c65, 0x3c65, 0x3c65, 0x3c65, 0x3c65, 
+    0x3c65, 0x3c65, 0x3c65, 0x3c65, 0x3c65, 0x3c66, 0x3c66, 0x3c66, 
+    0x3c66, 0x3c66, 0x3c66, 0x3c66, 0x3c66, 0x3c66, 0x3c66, 0x3c66, 
+    0x3c66, 0x3c66, 0x3c66, 0x3c66, 0x3c67, 0x3c67, 0x3c67, 0x3c67, 
+    0x3c67, 0x3c67, 0x3c67, 0x3c67, 0x3c67, 0x3c67, 0x3c67, 0x3c67, 
+    0x3c67, 0x3c67, 0x3c68, 0x3c68, 0x3c68, 0x3c68, 0x3c68, 0x3c68, 
+    0x3c68, 0x3c68, 0x3c68, 0x3c68, 0x3c68, 0x3c68, 0x3c68, 0x3c68, 
+    0x3c68, 0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c69, 
+    0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c6a, 
+    0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 
+    0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6b, 0x3c6b, 
+    0x3c6b, 0x3c6b, 0x3c6b, 0x3c6b, 0x3c6b, 0x3c6b, 0x3c6b, 0x3c6b, 
+    0x3c6b, 0x3c6b, 0x3c6b, 0x3c6b, 0x3c6c, 0x3c6c, 0x3c6c, 0x3c6c, 
+    0x3c6c, 0x3c6c, 0x3c6c, 0x3c6c, 0x3c6c, 0x3c6c, 0x3c6c, 0x3c6c, 
+    0x3c6c, 0x3c6c, 0x3c6c, 0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, 
+    0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, 
+    0x3c6d, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 
+    0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6f, 
+    0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 
+    0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c70, 0x3c70, 
+    0x3c70, 0x3c70, 0x3c70, 0x3c70, 0x3c70, 0x3c70, 0x3c70, 0x3c70, 
+    0x3c70, 0x3c70, 0x3c70, 0x3c70, 0x3c71, 0x3c71, 0x3c71, 0x3c71, 
+    0x3c71, 0x3c71, 0x3c71, 0x3c71, 0x3c71, 0x3c71, 0x3c71, 0x3c71, 
+    0x3c71, 0x3c71, 0x3c71, 0x3c72, 0x3c72, 0x3c72, 0x3c72, 0x3c72, 
+    0x3c72, 0x3c72, 0x3c72, 0x3c72, 0x3c72, 0x3c72, 0x3c72, 0x3c72, 
+    0x3c72, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 
+    0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 
+    0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c74, 
+    0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c75, 0x3c75, 
+    0x3c75, 0x3c75, 0x3c75, 0x3c75, 0x3c75, 0x3c75, 0x3c75, 0x3c75, 
+    0x3c75, 0x3c75, 0x3c75, 0x3c75, 0x3c76, 0x3c76, 0x3c76, 0x3c76, 
+    0x3c76, 0x3c76, 0x3c76, 0x3c76, 0x3c76, 0x3c76, 0x3c76, 0x3c76, 
+    0x3c76, 0x3c76, 0x3c76, 0x3c77, 0x3c77, 0x3c77, 0x3c77, 0x3c77, 
+    0x3c77, 0x3c77, 0x3c77, 0x3c77, 0x3c77, 0x3c77, 0x3c77, 0x3c77, 
+    0x3c77, 0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c78, 
+    0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c79, 
+    0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c79, 
+    0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c7a, 0x3c7a, 
+    0x3c7a, 0x3c7a, 0x3c7a, 0x3c7a, 0x3c7a, 0x3c7a, 0x3c7a, 0x3c7a, 
+    0x3c7a, 0x3c7a, 0x3c7a, 0x3c7a, 0x3c7b, 0x3c7b, 0x3c7b, 0x3c7b, 
+    0x3c7b, 0x3c7b, 0x3c7b, 0x3c7b, 0x3c7b, 0x3c7b, 0x3c7b, 0x3c7b, 
+    0x3c7b, 0x3c7b, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 
+    0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 
+    0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 
+    0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7e, 
+    0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, 
+    0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7f, 0x3c7f, 0x3c7f, 
+    0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 
+    0x3c7f, 0x3c7f, 0x3c7f, 0x3c80, 0x3c80, 0x3c80, 0x3c80, 0x3c80, 
+    0x3c80, 0x3c80, 0x3c80, 0x3c80, 0x3c80, 0x3c80, 0x3c80, 0x3c80, 
+    0x3c80, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 
+    0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 
+    0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c82, 
+    0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c83, 0x3c83, 
+    0x3c83, 0x3c83, 0x3c83, 0x3c83, 0x3c83, 0x3c83, 0x3c83, 0x3c83, 
+    0x3c83, 0x3c83, 0x3c83, 0x3c83, 0x3c84, 0x3c84, 0x3c84, 0x3c84, 
+    0x3c84, 0x3c84, 0x3c84, 0x3c84, 0x3c84, 0x3c84, 0x3c84, 0x3c84, 
+    0x3c84, 0x3c84, 0x3c85, 0x3c85, 0x3c85, 0x3c85, 0x3c85, 0x3c85, 
+    0x3c85, 0x3c85, 0x3c85, 0x3c85, 0x3c85, 0x3c85, 0x3c85, 0x3c85, 
+    0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c86, 
+    0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c87, 0x3c87, 
+    0x3c87, 0x3c87, 0x3c87, 0x3c87, 0x3c87, 0x3c87, 0x3c87, 0x3c87, 
+    0x3c87, 0x3c87, 0x3c87, 0x3c87, 0x3c87, 0x3c88, 0x3c88, 0x3c88, 
+    0x3c88, 0x3c88, 0x3c88, 0x3c88, 0x3c88, 0x3c88, 0x3c88, 0x3c88, 
+    0x3c88, 0x3c88, 0x3c89, 0x3c89, 0x3c89, 0x3c89, 0x3c89, 0x3c89, 
+    0x3c89, 0x3c8a, 0x3c8a, 0x3c8a, 0x3c8a, 0x3c8a, 0x3c8a, 0x3c8a, 
+    0x3c8b, 0x3c8b, 0x3c8b, 0x3c8b, 0x3c8b, 0x3c8b, 0x3c8b, 0x3c8c, 
+    0x3c8c, 0x3c8c, 0x3c8c, 0x3c8c, 0x3c8c, 0x3c8c, 0x3c8d, 0x3c8d, 
+    0x3c8d, 0x3c8d, 0x3c8d, 0x3c8d, 0x3c8d, 0x3c8e, 0x3c8e, 0x3c8e, 
+    0x3c8e, 0x3c8e, 0x3c8e, 0x3c8e, 0x3c8f, 0x3c8f, 0x3c8f, 0x3c8f, 
+    0x3c8f, 0x3c8f, 0x3c8f, 0x3c90, 0x3c90, 0x3c90, 0x3c90, 0x3c90, 
+    0x3c90, 0x3c90, 0x3c91, 0x3c91, 0x3c91, 0x3c91, 0x3c91, 0x3c91, 
+    0x3c91, 0x3c92, 0x3c92, 0x3c92, 0x3c92, 0x3c92, 0x3c92, 0x3c92, 
+    0x3c93, 0x3c93, 0x3c93, 0x3c93, 0x3c93, 0x3c93, 0x3c93, 0x3c94, 
+    0x3c94, 0x3c94, 0x3c94, 0x3c94, 0x3c94, 0x3c94, 0x3c95, 0x3c95, 
+    0x3c95, 0x3c95, 0x3c95, 0x3c95, 0x3c95, 0x3c96, 0x3c96, 0x3c96, 
+    0x3c96, 0x3c96, 0x3c96, 0x3c96, 0x3c97, 0x3c97, 0x3c97, 0x3c97, 
+    0x3c97, 0x3c97, 0x3c97, 0x3c98, 0x3c98, 0x3c98, 0x3c98, 0x3c98, 
+    0x3c98, 0x3c98, 0x3c99, 0x3c99, 0x3c99, 0x3c99, 0x3c99, 0x3c99, 
+    0x3c99, 0x3c9a, 0x3c9a, 0x3c9a, 0x3c9a, 0x3c9a, 0x3c9a, 0x3c9a, 
+    0x3c9b, 0x3c9b, 0x3c9b, 0x3c9b, 0x3c9b, 0x3c9b, 0x3c9b, 0x3c9c, 
+    0x3c9c, 0x3c9c, 0x3c9c, 0x3c9c, 0x3c9c, 0x3c9c, 0x3c9d, 0x3c9d, 
+    0x3c9d, 0x3c9d, 0x3c9d, 0x3c9d, 0x3c9d, 0x3c9e, 0x3c9e, 0x3c9e, 
+    0x3c9e, 0x3c9e, 0x3c9e, 0x3c9f, 0x3c9f, 0x3c9f, 0x3c9f, 0x3c9f, 
+    0x3c9f, 0x3c9f, 0x3ca0, 0x3ca0, 0x3ca0, 0x3ca0, 0x3ca0, 0x3ca0, 
+    0x3ca0, 0x3ca1, 0x3ca1, 0x3ca1, 0x3ca1, 0x3ca1, 0x3ca1, 0x3ca1, 
+    0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca3, 
+    0x3ca3, 0x3ca3, 0x3ca3, 0x3ca3, 0x3ca3, 0x3ca3, 0x3ca4, 0x3ca4, 
+    0x3ca4, 0x3ca4, 0x3ca4, 0x3ca4, 0x3ca4, 0x3ca5, 0x3ca5, 0x3ca5, 
+    0x3ca5, 0x3ca5, 0x3ca5, 0x3ca5, 0x3ca6, 0x3ca6, 0x3ca6, 0x3ca6, 
+    0x3ca6, 0x3ca6, 0x3ca6, 0x3ca7, 0x3ca7, 0x3ca7, 0x3ca7, 0x3ca7, 
+    0x3ca7, 0x3ca7, 0x3ca8, 0x3ca8, 0x3ca8, 0x3ca8, 0x3ca8, 0x3ca8, 
+    0x3ca9, 0x3ca9, 0x3ca9, 0x3ca9, 0x3ca9, 0x3ca9, 0x3ca9, 0x3caa, 
+    0x3caa, 0x3caa, 0x3caa, 0x3caa, 0x3caa, 0x3caa, 0x3cab, 0x3cab, 
+    0x3cab, 0x3cab, 0x3cab, 0x3cab, 0x3cab, 0x3cac, 0x3cac, 0x3cac, 
+    0x3cac, 0x3cac, 0x3cac, 0x3cac, 0x3cad, 0x3cad, 0x3cad, 0x3cad, 
+    0x3cad, 0x3cad, 0x3cad, 0x3cae, 0x3cae, 0x3cae, 0x3cae, 0x3cae, 
+    0x3cae, 0x3cae, 0x3caf, 0x3caf, 0x3caf, 0x3caf, 0x3caf, 0x3caf, 
+    0x3cb0, 0x3cb0, 0x3cb0, 0x3cb0, 0x3cb0, 0x3cb0, 0x3cb0, 0x3cb1, 
+    0x3cb1, 0x3cb1, 0x3cb1, 0x3cb1, 0x3cb1, 0x3cb1, 0x3cb2, 0x3cb2, 
+    0x3cb2, 0x3cb2, 0x3cb2, 0x3cb2, 0x3cb2, 0x3cb3, 0x3cb3, 0x3cb3, 
+    0x3cb3, 0x3cb3, 0x3cb3, 0x3cb3, 0x3cb4, 0x3cb4, 0x3cb4, 0x3cb4, 
+    0x3cb4, 0x3cb4, 0x3cb5, 0x3cb5, 0x3cb5, 0x3cb5, 0x3cb5, 0x3cb5, 
+    0x3cb5, 0x3cb6, 0x3cb6, 0x3cb6, 0x3cb6, 0x3cb6, 0x3cb6, 0x3cb6, 
+    0x3cb7, 0x3cb7, 0x3cb7, 0x3cb7, 0x3cb7, 0x3cb7, 0x3cb7, 0x3cb8, 
+    0x3cb8, 0x3cb8, 0x3cb8, 0x3cb8, 0x3cb8, 0x3cb8, 0x3cb9, 0x3cb9, 
+    0x3cb9, 0x3cb9, 0x3cb9, 0x3cb9, 0x3cba, 0x3cba, 0x3cba, 0x3cba, 
+    0x3cba, 0x3cba, 0x3cba, 0x3cbb, 0x3cbb, 0x3cbb, 0x3cbb, 0x3cbb, 
+    0x3cbb, 0x3cbb, 0x3cbc, 0x3cbc, 0x3cbc, 0x3cbc, 0x3cbc, 0x3cbc, 
+    0x3cbc, 0x3cbd, 0x3cbd, 0x3cbd, 0x3cbd, 0x3cbd, 0x3cbd, 0x3cbe, 
+    0x3cbe, 0x3cbe, 0x3cbe, 0x3cbe, 0x3cbe, 0x3cbe, 0x3cbf, 0x3cbf, 
+    0x3cbf, 0x3cbf, 0x3cbf, 0x3cbf, 0x3cbf, 0x3cc0, 0x3cc0, 0x3cc0, 
+    0x3cc0, 0x3cc0, 0x3cc0, 0x3cc0, 0x3cc1, 0x3cc1, 0x3cc1, 0x3cc1, 
+    0x3cc1, 0x3cc1, 0x3cc2, 0x3cc2, 0x3cc2, 0x3cc2, 0x3cc2, 0x3cc2, 
+    0x3cc2, 0x3cc3, 0x3cc3, 0x3cc3, 0x3cc3, 0x3cc3, 0x3cc3, 0x3cc3, 
+    0x3cc4, 0x3cc4, 0x3cc4, 0x3cc4, 0x3cc4, 0x3cc4, 0x3cc4, 0x3cc5, 
+    0x3cc5, 0x3cc5, 0x3cc5, 0x3cc5, 0x3cc5, 0x3cc6, 0x3cc6, 0x3cc6, 
+    0x3cc6, 0x3cc6, 0x3cc6, 0x3cc6, 0x3cc7, 0x3cc7, 0x3cc7, 0x3cc7, 
+    0x3cc7, 0x3cc7, 0x3cc7, 0x3cc8, 0x3cc8, 0x3cc8, 0x3cc8, 0x3cc8, 
+    0x3cc8, 0x3cc9, 0x3cc9, 0x3cc9, 0x3cc9, 0x3cc9, 0x3cc9, 0x3cc9, 
+    0x3cca, 0x3cca, 0x3cca, 0x3cca, 0x3cca, 0x3cca, 0x3cca, 0x3ccb, 
+    0x3ccb, 0x3ccb, 0x3ccb, 0x3ccb, 0x3ccb, 0x3ccc, 0x3ccc, 0x3ccc, 
+    0x3ccc, 0x3ccc, 0x3ccc, 0x3ccc, 0x3ccd, 0x3ccd, 0x3ccd, 0x3ccd, 
+    0x3ccd, 0x3ccd, 0x3ccd, 0x3cce, 0x3cce, 0x3cce, 0x3cce, 0x3cce, 
+    0x3cce, 0x3ccf, 0x3ccf, 0x3ccf, 0x3ccf, 0x3ccf, 0x3ccf, 0x3ccf, 
+    0x3cd0, 0x3cd0, 0x3cd0, 0x3cd0, 0x3cd0, 0x3cd0, 0x3cd0, 0x3cd1, 
+    0x3cd1, 0x3cd1, 0x3cd1, 0x3cd1, 0x3cd1, 0x3cd2, 0x3cd2, 0x3cd2, 
+    0x3cd2, 0x3cd2, 0x3cd2, 0x3cd2, 0x3cd3, 0x3cd3, 0x3cd3, 0x3cd3, 
+    0x3cd3, 0x3cd3, 0x3cd3, 0x3cd4, 0x3cd4, 0x3cd4, 0x3cd4, 0x3cd4, 
+    0x3cd4, 0x3cd5, 0x3cd5, 0x3cd5, 0x3cd5, 0x3cd5, 0x3cd5, 0x3cd5, 
+    0x3cd6, 0x3cd6, 0x3cd6, 0x3cd6, 0x3cd6, 0x3cd6, 0x3cd7, 0x3cd7, 
+    0x3cd7, 0x3cd7, 0x3cd7, 0x3cd7, 0x3cd7, 0x3cd8, 0x3cd8, 0x3cd8, 
+    0x3cd8, 0x3cd8, 0x3cd8, 0x3cd8, 0x3cd9, 0x3cd9, 0x3cd9, 0x3cd9, 
+    0x3cd9, 0x3cd9, 0x3cda, 0x3cda, 0x3cda, 0x3cda, 0x3cda, 0x3cda, 
+    0x3cda, 0x3cdb, 0x3cdb, 0x3cdb, 0x3cdb, 0x3cdb, 0x3cdb, 0x3cdc, 
+    0x3cdc, 0x3cdc, 0x3cdc, 0x3cdc, 0x3cdc, 0x3cdc, 0x3cdd, 0x3cdd, 
+    0x3cdd, 0x3cdd, 0x3cdd, 0x3cdd, 0x3cdd, 0x3cde, 0x3cde, 0x3cde, 
+    0x3cde, 0x3cde, 0x3cde, 0x3cdf, 0x3cdf, 0x3cdf, 0x3cdf, 0x3cdf, 
+    0x3cdf, 0x3cdf, 0x3ce0, 0x3ce0, 0x3ce0, 0x3ce0, 0x3ce0, 0x3ce0, 
+    0x3ce1, 0x3ce1, 0x3ce1, 0x3ce1, 0x3ce1, 0x3ce1, 0x3ce1, 0x3ce2, 
+    0x3ce2, 0x3ce2, 0x3ce2, 0x3ce2, 0x3ce2, 0x3ce3, 0x3ce3, 0x3ce3, 
+    0x3ce3, 0x3ce3, 0x3ce3, 0x3ce3, 0x3ce4, 0x3ce4, 0x3ce4, 0x3ce4, 
+    0x3ce4, 0x3ce4, 0x3ce4, 0x3ce5, 0x3ce5, 0x3ce5, 0x3ce5, 0x3ce5, 
+    0x3ce5, 0x3ce6, 0x3ce6, 0x3ce6, 0x3ce6, 0x3ce6, 0x3ce6, 0x3ce6, 
+    0x3ce7, 0x3ce7, 0x3ce7, 0x3ce7, 0x3ce7, 0x3ce7, 0x3ce8, 0x3ce8, 
+    0x3ce8, 0x3ce8, 0x3ce8, 0x3ce8, 0x3ce8, 0x3ce9, 0x3ce9, 0x3ce9, 
+    0x3ce9, 0x3ce9, 0x3ce9, 0x3cea, 0x3cea, 0x3cea, 0x3cea, 0x3cea, 
+    0x3cea, 0x3cea, 0x3ceb, 0x3ceb, 0x3ceb, 0x3ceb, 0x3ceb, 0x3ceb, 
+    0x3cec, 0x3cec, 0x3cec, 0x3cec, 0x3cec, 0x3cec, 0x3cec, 0x3ced, 
+    0x3ced, 0x3ced, 0x3ced, 0x3ced, 0x3ced, 0x3cee, 0x3cee, 0x3cee, 
+    0x3cee, 0x3cee, 0x3cee, 0x3cee, 0x3cef, 0x3cef, 0x3cef, 0x3cef, 
+    0x3cef, 0x3cef, 0x3cf0, 0x3cf0, 0x3cf0, 0x3cf0, 0x3cf0, 0x3cf0, 
+    0x3cf0, 0x3cf1, 0x3cf1, 0x3cf1, 0x3cf1, 0x3cf1, 0x3cf1, 0x3cf2, 
+    0x3cf2, 0x3cf2, 0x3cf2, 0x3cf2, 0x3cf2, 0x3cf2, 0x3cf3, 0x3cf3, 
+    0x3cf3, 0x3cf3, 0x3cf3, 0x3cf3, 0x3cf4, 0x3cf4, 0x3cf4, 0x3cf4, 
+    0x3cf4, 0x3cf4, 0x3cf4, 0x3cf5, 0x3cf5, 0x3cf5, 0x3cf5, 0x3cf5, 
+    0x3cf5, 0x3cf6, 0x3cf6, 0x3cf6, 0x3cf6, 0x3cf6, 0x3cf6, 0x3cf7, 
+    0x3cf7, 0x3cf7, 0x3cf7, 0x3cf7, 0x3cf7, 0x3cf7, 0x3cf8, 0x3cf8, 
+    0x3cf8, 0x3cf8, 0x3cf8, 0x3cf8, 0x3cf9, 0x3cf9, 0x3cf9, 0x3cf9, 
+    0x3cf9, 0x3cf9, 0x3cf9, 0x3cfa, 0x3cfa, 0x3cfa, 0x3cfa, 0x3cfa, 
+    0x3cfa, 0x3cfb, 0x3cfb, 0x3cfb, 0x3cfb, 0x3cfb, 0x3cfb, 0x3cfb, 
+    0x3cfc, 0x3cfc, 0x3cfc, 0x3cfc, 0x3cfc, 0x3cfc, 0x3cfd, 0x3cfd, 
+    0x3cfd, 0x3cfd, 0x3cfd, 0x3cfd, 0x3cfe, 0x3cfe, 0x3cfe, 0x3cfe, 
+    0x3cfe, 0x3cfe, 0x3cfe, 0x3cff, 0x3cff, 0x3cff, 0x3cff, 0x3cff, 
+    0x3cff, 0x3d00, 0x3d00, 0x3d00, 0x3d00, 0x3d00, 0x3d00, 0x3d00, 
+    0x3d01, 0x3d01, 0x3d01, 0x3d01, 0x3d01, 0x3d01, 0x3d02, 0x3d02, 
+    0x3d02, 0x3d02, 0x3d02, 0x3d02, 0x3d03, 0x3d03, 0x3d03, 0x3d03, 
+    0x3d03, 0x3d03, 0x3d03, 0x3d04, 0x3d04, 0x3d04, 0x3d04, 0x3d04, 
+    0x3d04, 0x3d05, 0x3d05, 0x3d05, 0x3d05, 0x3d05, 0x3d05, 0x3d05, 
+    0x3d06, 0x3d06, 0x3d06, 0x3d06, 0x3d06, 0x3d06, 0x3d07, 0x3d07, 
+    0x3d07, 0x3d07, 0x3d07, 0x3d07, 0x3d08, 0x3d08, 0x3d08, 0x3d08, 
+    0x3d08, 0x3d08, 0x3d08, 0x3d09, 0x3d09, 0x3d09, 0x3d09, 0x3d09, 
+    0x3d09, 0x3d0a, 0x3d0a, 0x3d0a, 0x3d0a, 0x3d0a, 0x3d0a, 0x3d0b, 
+    0x3d0b, 0x3d0b, 0x3d0b, 0x3d0b, 0x3d0b, 0x3d0b, 0x3d0c, 0x3d0c, 
+    0x3d0c, 0x3d0c, 0x3d0c, 0x3d0c, 0x3d0d, 0x3d0d, 0x3d0d, 0x3d0d, 
+    0x3d0d, 0x3d0d, 0x3d0e, 0x3d0e, 0x3d0e, 0x3d0e, 0x3d0e, 0x3d0e, 
+    0x3d0e, 0x3d0f, 0x3d0f, 0x3d0f, 0x3d0f, 0x3d0f, 0x3d0f, 0x3d10, 
+    0x3d10, 0x3d10, 0x3d10, 0x3d10, 0x3d10, 0x3d11, 0x3d11, 0x3d11, 
+    0x3d11, 0x3d11, 0x3d11, 0x3d11, 0x3d12, 0x3d12, 0x3d12, 0x3d12, 
+    0x3d12, 0x3d12, 0x3d13, 0x3d13, 0x3d13, 0x3d13, 0x3d13, 0x3d13, 
+    0x3d14, 0x3d14, 0x3d14, 0x3d14, 0x3d14, 0x3d14, 0x3d14, 0x3d15, 
+    0x3d15, 0x3d15, 0x3d15, 0x3d15, 0x3d15, 0x3d16, 0x3d16, 0x3d16, 
+    0x3d16, 0x3d16, 0x3d16, 0x3d17, 0x3d17, 0x3d17, 0x3d17, 0x3d17, 
+    0x3d17, 0x3d17, 0x3d18, 0x3d18, 0x3d18, 0x3d18, 0x3d18, 0x3d18, 
+    0x3d19, 0x3d19, 0x3d19, 0x3d19, 0x3d19, 0x3d19, 0x3d1a, 0x3d1a, 
+    0x3d1a, 0x3d1a, 0x3d1a, 0x3d1a, 0x3d1b, 0x3d1b, 0x3d1b, 0x3d1b, 
+    0x3d1b, 0x3d1b, 0x3d1b, 0x3d1c, 0x3d1c, 0x3d1c, 0x3d1c, 0x3d1c, 
+    0x3d1c, 0x3d1d, 0x3d1d, 0x3d1d, 0x3d1d, 0x3d1d, 0x3d1d, 0x3d1e, 
+    0x3d1e, 0x3d1e, 0x3d1e, 0x3d1e, 0x3d1e, 0x3d1f, 0x3d1f, 0x3d1f, 
+    0x3d1f, 0x3d1f, 0x3d1f, 0x3d1f, 0x3d20, 0x3d20, 0x3d20, 0x3d20, 
+    0x3d20, 0x3d20, 0x3d21, 0x3d21, 0x3d21, 0x3d21, 0x3d21, 0x3d21, 
+    0x3d22, 0x3d22, 0x3d22, 0x3d22, 0x3d22, 0x3d22, 0x3d23, 0x3d23, 
+    0x3d23, 0x3d23, 0x3d23, 0x3d24, 0x3d24, 0x3d24, 0x3d25, 0x3d25, 
+    0x3d25, 0x3d26, 0x3d26, 0x3d26, 0x3d27, 0x3d27, 0x3d27, 0x3d28, 
+    0x3d28, 0x3d28, 0x3d29, 0x3d29, 0x3d29, 0x3d2a, 0x3d2a, 0x3d2a, 
+    0x3d2b, 0x3d2b, 0x3d2b, 0x3d2c, 0x3d2c, 0x3d2c, 0x3d2d, 0x3d2d, 
+    0x3d2d, 0x3d2d, 0x3d2e, 0x3d2e, 0x3d2e, 0x3d2f, 0x3d2f, 0x3d2f, 
+    0x3d30, 0x3d30, 0x3d30, 0x3d31, 0x3d31, 0x3d31, 0x3d32, 0x3d32, 
+    0x3d32, 0x3d33, 0x3d33, 0x3d33, 0x3d34, 0x3d34, 0x3d34, 0x3d35, 
+    0x3d35, 0x3d35, 0x3d36, 0x3d36, 0x3d36, 0x3d37, 0x3d37, 0x3d37, 
+    0x3d38, 0x3d38, 0x3d38, 0x3d39, 0x3d39, 0x3d39, 0x3d3a, 0x3d3a, 
+    0x3d3a, 0x3d3a, 0x3d3b, 0x3d3b, 0x3d3b, 0x3d3c, 0x3d3c, 0x3d3c, 
+    0x3d3d, 0x3d3d, 0x3d3d, 0x3d3e, 0x3d3e, 0x3d3e, 0x3d3f, 0x3d3f, 
+    0x3d3f, 0x3d40, 0x3d40, 0x3d40, 0x3d41, 0x3d41, 0x3d41, 0x3d42, 
+    0x3d42, 0x3d42, 0x3d43, 0x3d43, 0x3d43, 0x3d44, 0x3d44, 0x3d44, 
+    0x3d45, 0x3d45, 0x3d45, 0x3d46, 0x3d46, 0x3d46, 0x3d47, 0x3d47, 
+    0x3d47, 0x3d48, 0x3d48, 0x3d48, 0x3d49, 0x3d49, 0x3d49, 0x3d4a, 
+    0x3d4a, 0x3d4a, 0x3d4b, 0x3d4b, 0x3d4b, 0x3d4c, 0x3d4c, 0x3d4c, 
+    0x3d4d, 0x3d4d, 0x3d4d, 0x3d4e, 0x3d4e, 0x3d4e, 0x3d4f, 0x3d4f, 
+    0x3d4f, 0x3d50, 0x3d50, 0x3d50, 0x3d51, 0x3d51, 0x3d51, 0x3d52, 
+    0x3d52, 0x3d52, 0x3d53, 0x3d53, 0x3d53, 0x3d54, 0x3d54, 0x3d54, 
+    0x3d55, 0x3d55, 0x3d55, 0x3d56, 0x3d56, 0x3d56, 0x3d57, 0x3d57, 
+    0x3d57, 0x3d58, 0x3d58, 0x3d58, 0x3d59, 0x3d59, 0x3d59, 0x3d5a, 
+    0x3d5a, 0x3d5a, 0x3d5b, 0x3d5b, 0x3d5b, 0x3d5c, 0x3d5c, 0x3d5c, 
+    0x3d5d, 0x3d5d, 0x3d5d, 0x3d5e, 0x3d5e, 0x3d5e, 0x3d5f, 0x3d5f, 
+    0x3d5f, 0x3d60, 0x3d60, 0x3d60, 0x3d61, 0x3d61, 0x3d61, 0x3d62, 
+    0x3d62, 0x3d62, 0x3d63, 0x3d63, 0x3d63, 0x3d64, 0x3d64, 0x3d64, 
+    0x3d65, 0x3d65, 0x3d65, 0x3d66, 0x3d66, 0x3d66, 0x3d67, 0x3d67, 
+    0x3d67, 0x3d68, 0x3d68, 0x3d68, 0x3d69, 0x3d69, 0x3d69, 0x3d6a, 
+    0x3d6a, 0x3d6a, 0x3d6b, 0x3d6b, 0x3d6b, 0x3d6c, 0x3d6c, 0x3d6c, 
+    0x3d6d, 0x3d6d, 0x3d6d, 0x3d6e, 0x3d6e, 0x3d6e, 0x3d6f, 0x3d6f, 
+    0x3d6f, 0x3d70, 0x3d70, 0x3d70, 0x3d71, 0x3d71, 0x3d72, 0x3d72, 
+    0x3d72, 0x3d73, 0x3d73, 0x3d73, 0x3d74, 0x3d74, 0x3d74, 0x3d75, 
+    0x3d75, 0x3d75, 0x3d76, 0x3d76, 0x3d76, 0x3d77, 0x3d77, 0x3d77, 
+    0x3d78, 0x3d78, 0x3d78, 0x3d79, 0x3d79, 0x3d79, 0x3d7a, 0x3d7a, 
+    0x3d7a, 0x3d7b, 0x3d7b, 0x3d7b, 0x3d7c, 0x3d7c, 0x3d7c, 0x3d7d, 
+    0x3d7d, 0x3d7d, 0x3d7e, 0x3d7e, 0x3d7e, 0x3d7f, 0x3d7f, 0x3d80, 
+    0x3d80, 0x3d80, 0x3d81, 0x3d81, 0x3d81, 0x3d82, 0x3d82, 0x3d82, 
+    0x3d83, 0x3d83, 0x3d83, 0x3d84, 0x3d84, 0x3d84, 0x3d85, 0x3d85, 
+    0x3d85, 0x3d86, 0x3d86, 0x3d86, 0x3d87, 0x3d87, 0x3d87, 0x3d88, 
+    0x3d88, 0x3d88, 0x3d89, 0x3d89, 0x3d8a, 0x3d8a, 0x3d8a, 0x3d8b, 
+    0x3d8b, 0x3d8b, 0x3d8c, 0x3d8c, 0x3d8c, 0x3d8d, 0x3d8d, 0x3d8d, 
+    0x3d8e, 0x3d8e, 0x3d8e, 0x3d8f, 0x3d8f, 0x3d8f, 0x3d90, 0x3d90, 
+    0x3d90, 0x3d91, 0x3d91, 0x3d92, 0x3d92, 0x3d92, 0x3d93, 0x3d93, 
+    0x3d93, 0x3d94, 0x3d94, 0x3d94, 0x3d95, 0x3d95, 0x3d95, 0x3d96, 
+    0x3d96, 0x3d96, 0x3d97, 0x3d97, 0x3d97, 0x3d98, 0x3d98, 0x3d98, 
+    0x3d99, 0x3d99, 0x3d9a, 0x3d9a, 0x3d9a, 0x3d9b, 0x3d9b, 0x3d9b, 
+    0x3d9c, 0x3d9c, 0x3d9c, 0x3d9d, 0x3d9d, 0x3d9d, 0x3d9e, 0x3d9e, 
+    0x3d9e, 0x3d9f, 0x3d9f, 0x3d9f, 0x3da0, 0x3da0, 0x3da1, 0x3da1, 
+    0x3da1, 0x3da2, 0x3da2, 0x3da2, 0x3da3, 0x3da3, 0x3da3, 0x3da4, 
+    0x3da4, 0x3da4, 0x3da5, 0x3da5, 0x3da5, 0x3da6, 0x3da6, 0x3da7, 
+    0x3da7, 0x3da7, 0x3da8, 0x3da8, 0x3da8, 0x3da9, 0x3da9, 0x3da9, 
+    0x3daa, 0x3daa, 0x3daa, 0x3dab, 0x3dab, 0x3dab, 0x3dac, 0x3dac, 
+    0x3dad, 0x3dad, 0x3dad, 0x3dae, 0x3dae, 0x3dae, 0x3daf, 0x3daf, 
+    0x3daf, 0x3db0, 0x3db0, 0x3db0, 0x3db1, 0x3db1, 0x3db2, 0x3db2, 
+    0x3db2, 0x3db3, 0x3db3, 0x3db3, 0x3db4, 0x3db4, 0x3db4, 0x3db5, 
+    0x3db5, 0x3db5, 0x3db6, 0x3db6, 0x3db7, 0x3db7, 0x3db7, 0x3db8, 
+    0x3db8, 0x3db8, 0x3db9, 0x3db9, 0x3db9, 0x3dba, 0x3dba, 0x3dba, 
+    0x3dbb, 0x3dbb, 0x3dbc, 0x3dbc, 0x3dbc, 0x3dbd, 0x3dbd, 0x3dbd, 
+    0x3dbe, 0x3dbe, 0x3dbe, 0x3dbf, 0x3dbf, 0x3dbf, 0x3dc0, 0x3dc0, 
+    0x3dc1, 0x3dc1, 0x3dc1, 0x3dc2, 0x3dc2, 0x3dc2, 0x3dc3, 0x3dc3, 
+    0x3dc3, 0x3dc4, 0x3dc4, 0x3dc5, 0x3dc5, 0x3dc5, 0x3dc6, 0x3dc6, 
+    0x3dc6, 0x3dc7, 0x3dc7, 0x3dc7, 0x3dc8, 0x3dc8, 0x3dc8, 0x3dc9, 
+    0x3dc9, 0x3dca, 0x3dca, 0x3dca, 0x3dcb, 0x3dcb, 0x3dcb, 0x3dcc, 
+    0x3dcc, 0x3dcc, 0x3dcd, 0x3dcd, 0x3dce, 0x3dce, 0x3dce, 0x3dcf, 
+    0x3dcf, 0x3dcf, 0x3dd0, 0x3dd0, 0x3dd0, 0x3dd1, 0x3dd1, 0x3dd2, 
+    0x3dd2, 0x3dd2, 0x3dd3, 0x3dd3, 0x3dd3, 0x3dd4, 0x3dd4, 0x3dd4, 
+    0x3dd5, 0x3dd5, 0x3dd6, 0x3dd6, 0x3dd6, 0x3dd7, 0x3dd7, 0x3dd7, 
+    0x3dd8, 0x3dd8, 0x3dd8, 0x3dd9, 0x3dd9, 0x3dda, 0x3dda, 0x3dda, 
+    0x3ddb, 0x3ddb, 0x3ddb, 0x3ddc, 0x3ddc, 0x3ddc, 0x3ddd, 0x3ddd, 
+    0x3dde, 0x3dde, 0x3dde, 0x3ddf, 0x3ddf, 0x3ddf, 0x3de0, 0x3de0, 
+    0x3de1, 0x3de1, 0x3de1, 0x3de2, 0x3de2, 0x3de2, 0x3de3, 0x3de3, 
+    0x3de3, 0x3de4, 0x3de4, 0x3de5, 0x3de5, 0x3de5, 0x3de6, 0x3de6, 
+    0x3de6, 0x3de7, 0x3de7, 0x3de8, 0x3de8, 0x3de8, 0x3de9, 0x3de9, 
+    0x3de9, 0x3dea, 0x3dea, 0x3dea, 0x3deb, 0x3deb, 0x3dec, 0x3dec, 
+    0x3dec, 0x3ded, 0x3ded, 0x3ded, 0x3dee, 0x3dee, 0x3def, 0x3def, 
+    0x3def, 0x3df0, 0x3df0, 0x3df0, 0x3df1, 0x3df1, 0x3df2, 0x3df2, 
+    0x3df2, 0x3df3, 0x3df3, 0x3df3, 0x3df4, 0x3df4, 0x3df4, 0x3df5, 
+    0x3df5, 0x3df6, 0x3df6, 0x3df6, 0x3df7, 0x3df7, 0x3df7, 0x3df8, 
+    0x3df8, 0x3df9, 0x3df9, 0x3df9, 0x3dfa, 0x3dfa, 0x3dfa, 0x3dfb, 
+    0x3dfb, 0x3dfc, 0x3dfc, 0x3dfc, 0x3dfd, 0x3dfd, 0x3dfd, 0x3dfe, 
+    0x3dfe, 0x3dff, 0x3dff, 0x3dff, 0x3e00, 0x3e00, 0x3e00, 0x3e01, 
+    0x3e01, 0x3e02, 0x3e02, 0x3e02, 0x3e03, 0x3e03, 0x3e03, 0x3e04, 
+    0x3e04, 0x3e05, 0x3e05, 0x3e05, 0x3e06, 0x3e06, 0x3e06, 0x3e07, 
+    0x3e07, 0x3e08, 0x3e08, 0x3e08, 0x3e09, 0x3e09, 0x3e09, 0x3e0a, 
+    0x3e0a, 0x3e0b, 0x3e0b, 0x3e0b, 0x3e0c, 0x3e0c, 0x3e0d, 0x3e0d, 
+    0x3e0d, 0x3e0e, 0x3e0e, 0x3e0e, 0x3e0f, 0x3e0f, 0x3e10, 0x3e10, 
+    0x3e10, 0x3e11, 0x3e11, 0x3e11, 0x3e12, 0x3e12, 0x3e13, 0x3e13, 
+    0x3e13, 0x3e14, 0x3e14, 0x3e14, 0x3e15, 0x3e15, 0x3e16, 0x3e16, 
+    0x3e16, 0x3e17, 0x3e17, 0x3e18, 0x3e18, 0x3e18, 0x3e19, 0x3e19, 
+    0x3e19, 0x3e1a, 0x3e1a, 0x3e1b, 0x3e1b, 0x3e1b, 0x3e1c, 0x3e1c, 
+    0x3e1c, 0x3e1d, 0x3e1d, 0x3e1e, 0x3e1e, 0x3e1e, 0x3e1f, 0x3e1f, 
+    0x3e20, 0x3e20, 0x3e20, 0x3e21, 0x3e21, 0x3e21, 0x3e22, 0x3e22, 
+    0x3e23, 0x3e23, 0x3e23, 0x3e24, 0x3e24, 0x3e25, 0x3e25, 0x3e25, 
+    0x3e26, 0x3e26, 0x3e26, 0x3e27, 0x3e27, 0x3e28, 0x3e28, 0x3e28, 
+    0x3e29, 0x3e29, 0x3e2a, 0x3e2a, 0x3e2a, 0x3e2b, 0x3e2b, 0x3e2b, 
+    0x3e2c, 0x3e2c, 0x3e2d, 0x3e2d, 0x3e2d, 0x3e2e, 0x3e2e, 0x3e2f, 
+    0x3e2f, 0x3e2f, 0x3e30, 0x3e30, 0x3e30, 0x3e31, 0x3e31, 0x3e32, 
+    0x3e32, 0x3e32, 0x3e33, 0x3e33, 0x3e34, 0x3e34, 0x3e34, 0x3e35, 
+    0x3e35, 0x3e35, 0x3e36, 0x3e36, 0x3e37, 0x3e37, 0x3e37, 0x3e38, 
+    0x3e38, 0x3e39, 0x3e39, 0x3e39, 0x3e3a, 0x3e3a, 0x3e3b, 0x3e3b, 
+    0x3e3b, 0x3e3c, 0x3e3c, 0x3e3c, 0x3e3d, 0x3e3d, 0x3e3e, 0x3e3e, 
+    0x3e3e, 0x3e3f, 0x3e3f, 0x3e40, 0x3e40, 0x3e40, 0x3e41, 0x3e41, 
+    0x3e42, 0x3e42, 0x3e42, 0x3e43, 0x3e43, 0x3e44, 0x3e44, 0x3e44, 
+    0x3e45, 0x3e45, 0x3e45, 0x3e46, 0x3e46, 0x3e47, 0x3e47, 0x3e47, 
+    0x3e48, 0x3e48, 0x3e49, 0x3e49, 0x3e49, 0x3e4a, 0x3e4a, 0x3e4b, 
+    0x3e4b, 0x3e4b, 0x3e4c, 0x3e4c, 0x3e4d, 0x3e4d, 0x3e4d, 0x3e4e, 
+    0x3e4e, 0x3e4f, 0x3e4f, 0x3e4f, 0x3e50, 0x3e50, 0x3e50, 0x3e51, 
+    0x3e51, 0x3e52, 0x3e52, 0x3e52, 0x3e53, 0x3e53, 0x3e54, 0x3e54, 
+    0x3e54, 0x3e55, 0x3e55, 0x3e56, 0x3e56, 0x3e56, 0x3e57, 0x3e57, 
+    0x3e58, 0x3e58, 0x3e58, 0x3e59, 0x3e59, 0x3e5a, 0x3e5a, 0x3e5a, 
+    0x3e5b, 0x3e5b, 0x3e5c, 0x3e5c, 0x3e5c, 0x3e5d, 0x3e5d, 0x3e5e, 
+    0x3e5e, 0x3e5e, 0x3e5f, 0x3e5f, 0x3e60, 0x3e60, 0x3e60, 0x3e61, 
+    0x3e61, 0x3e62, 0x3e62, 0x3e62, 0x3e63, 0x3e63, 0x3e64, 0x3e64, 
+    0x3e64, 0x3e65, 0x3e65, 0x3e66, 0x3e66, 0x3e66, 0x3e67, 0x3e67, 
+    0x3e68, 0x3e68, 0x3e68, 0x3e69, 0x3e69, 0x3e6a, 0x3e6a, 0x3e6a, 
+    0x3e6b, 0x3e6b, 0x3e6c, 0x3e6c, 0x3e6c, 0x3e6d, 0x3e6d, 0x3e6e, 
+    0x3e6e, 0x3e6e, 0x3e6f, 0x3e6f, 0x3e70, 0x3e70, 0x3e70, 0x3e71, 
+    0x3e71, 0x3e72, 0x3e72, 0x3e72, 0x3e73, 0x3e73, 0x3e74, 0x3e74, 
+    0x3e74, 0x3e75, 0x3e75, 0x3e76, 0x3e76, 0x3e76, 0x3e77, 0x3e77, 
+    0x3e78, 0x3e78, 0x3e78, 0x3e79, 0x3e79, 0x3e7a, 0x3e7a, 0x3e7a, 
+    0x3e7b, 0x3e7b, 0x3e7c, 0x3e7c, 0x3e7c, 0x3e7d, 0x3e7d, 0x3e7e, 
+    0x3e7e, 0x3e7f, 0x3e7f, 0x3e7f, 0x3e80, 0x3e80, 0x3e81, 0x3e81, 
+    0x3e81, 0x3e82, 0x3e82, 0x3e83, 0x3e83, 0x3e83, 0x3e84, 0x3e84, 
+    0x3e85, 0x3e85, 0x3e85, 0x3e86, 0x3e86, 0x3e87, 0x3e87, 0x3e87, 
+    0x3e88, 0x3e88, 0x3e89, 0x3e89, 0x3e8a, 0x3e8a, 0x3e8a, 0x3e8b, 
+    0x3e8b, 0x3e8c, 0x3e8c, 0x3e8c, 0x3e8d, 0x3e8d, 0x3e8e, 0x3e8e, 
+    0x3e8e, 0x3e8f, 0x3e8f, 0x3e90, 0x3e90, 0x3e90, 0x3e91, 0x3e91, 
+    0x3e92, 0x3e92, 0x3e93, 0x3e93, 0x3e93, 0x3e94, 0x3e94, 0x3e95, 
+    0x3e95, 0x3e95, 0x3e96, 0x3e96, 0x3e97, 0x3e97, 0x3e97, 0x3e98, 
+    0x3e98, 0x3e99, 0x3e9a, 0x3e9b, 0x3e9c, 0x3e9c, 0x3e9d, 0x3e9e, 
+    0x3e9f, 0x3ea0, 0x3ea1, 0x3ea1, 0x3ea2, 0x3ea3, 0x3ea4, 0x3ea5, 
+    0x3ea6, 0x3ea6, 0x3ea7, 0x3ea8, 0x3ea9, 0x3eaa, 0x3eab, 0x3eab, 
+    0x3eac, 0x3ead, 0x3eae, 0x3eaf, 0x3eb0, 0x3eb0, 0x3eb1, 0x3eb2, 
+    0x3eb3, 0x3eb4, 0x3eb5, 0x3eb5, 0x3eb6, 0x3eb7, 0x3eb8, 0x3eb9, 
+    0x3eba, 0x3eba, 0x3ebb, 0x3ebc, 0x3ebd, 0x3ebe, 0x3ebf, 0x3ebf, 
+    0x3ec0, 0x3ec1, 0x3ec2, 0x3ec3, 0x3ec4, 0x3ec5, 0x3ec5, 0x3ec6, 
+    0x3ec7, 0x3ec8, 0x3ec9, 0x3eca, 0x3eca, 0x3ecb, 0x3ecc, 0x3ecd, 
+    0x3ece, 0x3ecf, 0x3ed0, 0x3ed0, 0x3ed1, 0x3ed2, 0x3ed3, 0x3ed4, 
+    0x3ed5, 0x3ed6, 0x3ed6, 0x3ed7, 0x3ed8, 0x3ed9, 0x3eda, 0x3edb, 
+    0x3edc, 0x3edc, 0x3edd, 0x3ede, 0x3edf, 0x3ee0, 0x3ee1, 0x3ee2, 
+    0x3ee2, 0x3ee3, 0x3ee4, 0x3ee5, 0x3ee6, 0x3ee7, 0x3ee8, 0x3ee8, 
+    0x3ee9, 0x3eea, 0x3eeb, 0x3eec, 0x3eed, 0x3eee, 0x3eef, 0x3eef, 
+    0x3ef0, 0x3ef1, 0x3ef2, 0x3ef3, 0x3ef4, 0x3ef5, 0x3ef5, 0x3ef6, 
+    0x3ef7, 0x3ef8, 0x3ef9, 0x3efa, 0x3efb, 0x3efc, 0x3efc, 0x3efd, 
+    0x3efe, 0x3eff, 0x3f00, 0x3f01, 0x3f02, 0x3f03, 0x3f03, 0x3f04, 
+    0x3f05, 0x3f06, 0x3f07, 0x3f08, 0x3f09, 0x3f0a, 0x3f0a, 0x3f0b, 
+    0x3f0c, 0x3f0d, 0x3f0e, 0x3f0f, 0x3f10, 0x3f11, 0x3f12, 0x3f12, 
+    0x3f13, 0x3f14, 0x3f15, 0x3f16, 0x3f17, 0x3f18, 0x3f19, 0x3f19, 
+    0x3f1a, 0x3f1b, 0x3f1c, 0x3f1d, 0x3f1e, 0x3f1f, 0x3f20, 0x3f21, 
+    0x3f21, 0x3f22, 0x3f23, 0x3f24, 0x3f25, 0x3f26, 0x3f27, 0x3f28, 
+    0x3f29, 0x3f2a, 0x3f2a, 0x3f2b, 0x3f2c, 0x3f2d, 0x3f2e, 0x3f2f, 
+    0x3f30, 0x3f31, 0x3f32, 0x3f32, 0x3f33, 0x3f34, 0x3f35, 0x3f36, 
+    0x3f37, 0x3f38, 0x3f39, 0x3f3a, 0x3f3b, 0x3f3c, 0x3f3c, 0x3f3d, 
+    0x3f3e, 0x3f3f, 0x3f40, 0x3f41, 0x3f42, 0x3f43, 0x3f44, 0x3f45, 
+    0x3f45, 0x3f46, 0x3f47, 0x3f48, 0x3f49, 0x3f4a, 0x3f4b, 0x3f4c, 
+    0x3f4d, 0x3f4e, 0x3f4f, 0x3f50, 0x3f50, 0x3f51, 0x3f52, 0x3f53, 
+    0x3f54, 0x3f55, 0x3f56, 0x3f57, 0x3f58, 0x3f59, 0x3f5a, 0x3f5b, 
+    0x3f5b, 0x3f5c, 0x3f5d, 0x3f5e, 0x3f5f, 0x3f60, 0x3f61, 0x3f62, 
+    0x3f63, 0x3f64, 0x3f65, 0x3f66, 0x3f66, 0x3f67, 0x3f68, 0x3f69, 
+    0x3f6a, 0x3f6b, 0x3f6c, 0x3f6d, 0x3f6e, 0x3f6f, 0x3f70, 0x3f71, 
+    0x3f72, 0x3f73, 0x3f73, 0x3f74, 0x3f75, 0x3f76, 0x3f77, 0x3f78, 
+    0x3f79, 0x3f7a, 0x3f7b, 0x3f7c, 0x3f7d, 0x3f7e, 0x3f7f, 0x3f80, 
+    0x3f81, 0x3f82, 0x3f82, 0x3f83, 0x3f84, 0x3f85, 0x3f86, 0x3f87, 
+    0x3f88, 0x3f89, 0x3f8a, 0x3f8b, 0x3f8c, 0x3f8d, 0x3f8e, 0x3f8f, 
+    0x3f90, 0x3f91, 0x3f92, 0x3f92, 0x3f93, 0x3f94, 0x3f95, 0x3f96, 
+    0x3f97, 0x3f98, 0x3f99, 0x3f9a, 0x3f9b, 0x3f9c, 0x3f9d, 0x3f9e, 
+    0x3f9f, 0x3fa0, 0x3fa1, 0x3fa2, 0x3fa3, 0x3fa4, 0x3fa5, 0x3fa5, 
+    0x3fa6, 0x3fa7, 0x3fa8, 0x3fa9, 0x3faa, 0x3fab, 0x3fac, 0x3fad, 
+    0x3fae, 0x3faf, 0x3fb0, 0x3fb1, 0x3fb2, 0x3fb3, 0x3fb4, 0x3fb5, 
+    0x3fb6, 0x3fb7, 0x3fb8, 0x3fb9, 0x3fba, 0x3fbb, 0x3fbc, 0x3fbd, 
+    0x3fbe, 0x3fbf, 0x3fbf, 0x3fc0, 0x3fc1, 0x3fc2, 0x3fc3, 0x3fc4, 
+    0x3fc5, 0x3fc6, 0x3fc7, 0x3fc8, 0x3fc9, 0x3fca, 0x3fcb, 0x3fcc, 
+    0x3fcd, 0x3fce, 0x3fcf, 0x3fd0, 0x3fd1, 0x3fd2, 0x3fd3, 0x3fd4, 
+    0x3fd5, 0x3fd6, 0x3fd7, 0x3fd8, 0x3fd9, 0x3fda, 0x3fdb, 0x3fdc, 
+    0x3fdd, 0x3fde, 0x3fdf, 0x3fe0, 0x3fe1, 0x3fe2, 0x3fe3, 0x3fe4, 
+    0x3fe5, 0x3fe6, 0x3fe7, 0x3fe8, 0x3fe9, 0x3fea, 0x3feb, 0x3fec, 
+    0x3fed, 0x3fee, 0x3fef, 0x3ff0, 0x3ff0, 0x3ff1, 0x3ff2, 0x3ff3, 
+    0x3ff4, 0x3ff5, 0x3ff6, 0x3ff7, 0x3ff8, 0x3ff9, 0x3ffa, 0x3ffb, 
+    0x3ffc, 0x3ffd, 0x3ffe, 0x3fff, 0x4000, 0x4001, 0x4001, 0x4002, 
+    0x4002, 0x4003, 0x4003, 0x4004, 0x4004, 0x4005, 0x4005, 0x4006, 
+    0x4006, 0x4007, 0x4007, 0x4008, 0x4008, 0x4009, 0x4009, 0x400a, 
+    0x400a, 0x400b, 0x400b, 0x400c, 0x400c, 0x400d, 0x400d, 0x400e, 
+    0x400e, 0x400f, 0x400f, 0x4010, 0x4010, 0x4011, 0x4011, 0x4012, 
+    0x4012, 0x4013, 0x4013, 0x4014, 0x4014, 0x4015, 0x4015, 0x4016, 
+    0x4016, 0x4017, 0x4017, 0x4018, 0x4019, 0x4019, 0x401a, 0x401a, 
+    0x401b, 0x401b, 0x401c, 0x401c, 0x401d, 0x401d, 0x401e, 0x401e, 
+    0x401f, 0x401f, 0x4020, 0x4020, 0x4021, 0x4021, 0x4022, 0x4022, 
+    0x4023, 0x4023, 0x4024, 0x4024, 0x4025, 0x4025, 0x4026, 0x4026, 
+    0x4027, 0x4027, 0x4028, 0x4028, 0x4029, 0x402a, 0x402a, 0x402b, 
+    0x402b, 0x402c, 0x402c, 0x402d, 0x402d, 0x402e, 0x402e, 0x402f, 
+    0x402f, 0x4030, 0x4030, 0x4031, 0x4031, 0x4032, 0x4032, 0x4033, 
+    0x4033, 0x4034, 0x4035, 0x4035, 0x4036, 0x4036, 0x4037, 0x4037, 
+    0x4038, 0x4038, 0x4039, 0x4039, 0x403a, 0x403a, 0x403b, 0x403b, 
+    0x403c, 0x403c, 0x403d, 0x403d, 0x403e, 0x403f, 0x403f, 0x4040, 
+    0x4040, 0x4041, 0x4041, 0x4042, 0x4042, 0x4043, 0x4043, 0x4044, 
+    0x4044, 0x4045, 0x4045, 0x4046, 0x4047, 0x4047, 0x4048, 0x4048, 
+    0x4049, 0x4049, 0x404a, 0x404a, 0x404b, 0x404b, 0x404c, 0x404c, 
+    0x404d, 0x404e, 0x404e, 0x404f, 0x404f, 0x4050, 0x4050, 0x4051, 
+    0x4051, 0x4052, 0x4052, 0x4053, 0x4053, 0x4054, 0x4055, 0x4055, 
+    0x4056, 0x4056, 0x4057, 0x4057, 0x4058, 0x4058, 0x4059, 0x4059, 
+    0x405a, 0x405a, 0x405b, 0x405c, 0x405c, 0x405d, 0x405d, 0x405e, 
+    0x405e, 0x405f, 0x405f, 0x4060, 0x4060, 0x4061, 0x4062, 0x4062, 
+    0x4063, 0x4063, 0x4064, 0x4064, 0x4065, 0x4065, 0x4066, 0x4067, 
+    0x4067, 0x4068, 0x4068, 0x4069, 0x4069, 0x406a, 0x406a, 0x406b, 
+    0x406b, 0x406c, 0x406d, 0x406d, 0x406e, 0x406e, 0x406f, 0x406f, 
+    0x4070, 0x4070, 0x4071, 0x4072, 0x4072, 0x4073, 0x4073, 0x4074, 
+    0x4074, 0x4075, 0x4075, 0x4076, 0x4077, 0x4077, 0x4078, 0x4078, 
+    0x4079, 0x4079, 0x407a, 0x407b, 0x407b, 0x407c, 0x407c, 0x407d, 
+    0x407d, 0x407e, 0x407e, 0x407f, 0x4080, 0x4080, 0x4081, 0x4081, 
+    0x4082, 0x4082, 0x4083, 0x4084, 0x4084, 0x4085, 0x4085, 0x4086, 
+    0x4086, 0x4087, 0x4087, 0x4088, 0x4089, 0x4089, 0x408a, 0x408a, 
+    0x408b, 0x408b, 0x408c, 0x408d, 0x408d, 0x408e, 0x408e, 0x408f, 
+    0x408f, 0x4090, 0x4091, 0x4091, 0x4092, 0x4092, 0x4093, 0x4093, 
+    0x4094, 0x4095, 0x4095, 0x4096, 0x4096, 0x4097, 0x4097, 0x4098, 
+    0x4099, 0x4099, 0x409a, 0x409a, 0x409b, 0x409b, 0x409c, 0x409d, 
+    0x409d, 0x409e, 0x409e, 0x409f, 0x409f, 0x40a0, 0x40a1, 0x40a1, 
+    0x40a2, 0x40a2, 0x40a3, 0x40a4, 0x40a4, 0x40a5, 0x40a5, 0x40a6, 
+    0x40a6, 0x40a7, 0x40a8, 0x40a8, 0x40a9, 0x40a9, 0x40aa, 0x40ab, 
+    0x40ab, 0x40ac, 0x40ac, 0x40ad, 0x40ad, 0x40ae, 0x40af, 0x40af, 
+    0x40b0, 0x40b0, 0x40b1, 0x40b2, 0x40b2, 0x40b3, 0x40b3, 0x40b4, 
+    0x40b4, 0x40b5, 0x40b6, 0x40b6, 0x40b7, 0x40b7, 0x40b8, 0x40b9, 
+    0x40b9, 0x40ba, 0x40ba, 0x40bb, 0x40bc, 0x40bc, 0x40bd, 0x40bd, 
+    0x40be, 0x40bf, 0x40bf, 0x40c0, 0x40c0, 0x40c1, 0x40c1, 0x40c2, 
+    0x40c3, 0x40c3, 0x40c4, 0x40c4, 0x40c5, 0x40c6, 0x40c6, 0x40c7, 
+    0x40c7, 0x40c8, 0x40c9, 0x40c9, 0x40ca, 0x40ca, 0x40cb, 0x40cc, 
+    0x40cc, 0x40cd, 0x40cd, 0x40ce, 0x40cf, 0x40cf, 0x40d0, 0x40d0, 
+    0x40d1, 0x40d2, 0x40d2, 0x40d3, 0x40d3, 0x40d4, 0x40d5, 0x40d5, 
+    0x40d6, 0x40d6, 0x40d7, 0x40d8, 0x40d8, 0x40d9, 0x40d9, 0x40da, 
+    0x40db, 0x40db, 0x40dc, 0x40dd, 0x40dd, 0x40de, 0x40de, 0x40df, 
+    0x40e0, 0x40e0, 0x40e1, 0x40e1, 0x40e2, 0x40e3, 0x40e3, 0x40e4, 
+    0x40e4, 0x40e5, 0x40e6, 0x40e6, 0x40e7, 0x40e8, 0x40e8, 0x40e9, 
+    0x40e9, 0x40ea, 0x40eb, 0x40eb, 0x40ec, 0x40ec, 0x40ed, 0x40ee, 
+    0x40ee, 0x40ef, 0x40f0, 0x40f0, 0x40f1, 0x40f1, 0x40f2, 0x40f3, 
+    0x40f3, 0x40f4, 0x40f4, 0x40f5, 0x40f6, 0x40f6, 0x40f7, 0x40f8, 
+    0x40f8, 0x40f9, 0x40f9, 0x40fa, 0x40fb, 0x40fb, 0x40fc, 0x40fd, 
+    0x40fd, 0x40fe, 0x40fe, 0x40ff, 0x4100, 0x4100, 0x4101, 0x4102, 
+    0x4102, 0x4103, 0x4103, 0x4104, 0x4105, 0x4105, 0x4106, 0x4107, 
+    0x4107, 0x4108, 0x4108, 0x4109, 0x410a, 0x410a, 0x410b, 0x410c, 
+    0x410c, 0x410d, 0x410d, 0x410e, 0x410f, 0x410f, 0x4110, 0x4111, 
+    0x4111, 0x4112, 0x4113, 0x4113, 0x4114, 0x4114, 0x4115, 0x4116, 
+    0x4116, 0x4117, 0x4118, 0x4118, 0x4119, 0x411a, 0x411a, 0x411b, 
+    0x411b, 0x411c, 0x411d, 0x411d, 0x411e, 0x411f, 0x411f, 0x4120, 
+    0x4121, 0x4121, 0x4122, 0x4122, 0x4123, 0x4124, 0x4124, 0x4125, 
+    0x4126, 0x4126, 0x4127, 0x4128, 0x4128, 0x4129, 0x412a, 0x412a, 
+    0x412b, 0x412b, 0x412c, 0x412d, 0x412d, 0x412e, 0x412f, 0x412f, 
+    0x4130, 0x4131, 0x4131, 0x4132, 0x4133, 0x4133, 0x4134, 0x4135, 
+    0x4135, 0x4136, 0x4137, 0x4137, 0x4138, 0x4138, 0x4139, 0x413a, 
+    0x413a, 0x413b, 0x413c, 0x413c, 0x413d, 0x413e, 0x413e, 0x413f, 
+    0x4140, 0x4140, 0x4141, 0x4142, 0x4142, 0x4143, 0x4144, 0x4144, 
+    0x4145, 0x4146, 0x4146, 0x4147, 0x4148, 0x4148, 0x4149, 0x414a, 
+    0x414a, 0x414b, 0x414c, 0x414c, 0x414d, 0x414e, 0x414e, 0x414f, 
+    0x4150, 0x4150, 0x4151, 0x4152, 0x4152, 0x4153, 0x4154, 0x4154, 
+    0x4155, 0x4156, 0x4156, 0x4157, 0x4158, 0x4158, 0x4159, 0x415a, 
+    0x415a, 0x415b, 0x415c, 0x415c, 0x415d, 0x415e, 0x415e, 0x415f, 
+    0x4160, 0x4160, 0x4161, 0x4162, 0x4162, 0x4163, 0x4164, 0x4164, 
+    0x4165, 0x4166, 0x4166, 0x4167, 0x4168, 0x4168, 0x4169, 0x416a, 
+    0x416a, 0x416b, 0x416c, 0x416c, 0x416d, 0x416e, 0x416e, 0x416f, 
+    0x4170, 0x4171, 0x4172, 0x4174, 0x4175, 0x4177, 0x4178, 0x4179, 
+    0x417b, 0x417c, 0x417d, 0x417f, 0x4180, 0x4182, 0x4183, 0x4184, 
+    0x4186, 0x4187, 0x4188, 0x418a, 0x418b, 0x418d, 0x418e, 0x418f, 
+    0x4191, 0x4192, 0x4194, 0x4195, 0x4196, 0x4198, 0x4199, 0x419b, 
+    0x419c, 0x419d, 0x419f, 0x41a0, 0x41a2, 0x41a3, 0x41a4, 0x41a6, 
+    0x41a7, 0x41a9, 0x41aa, 0x41ab, 0x41ad, 0x41ae, 0x41b0, 0x41b1, 
+    0x41b3, 0x41b4, 0x41b5, 0x41b7, 0x41b8, 0x41ba, 0x41bb, 0x41bd, 
+    0x41be, 0x41bf, 0x41c1, 0x41c2, 0x41c4, 0x41c5, 0x41c7, 0x41c8, 
+    0x41ca, 0x41cb, 0x41cc, 0x41ce, 0x41cf, 0x41d1, 0x41d2, 0x41d4, 
+    0x41d5, 0x41d7, 0x41d8, 0x41da, 0x41db, 0x41dc, 0x41de, 0x41df, 
+    0x41e1, 0x41e2, 0x41e4, 0x41e5, 0x41e7, 0x41e8, 0x41ea, 0x41eb, 
+    0x41ed, 0x41ee, 0x41f0, 0x41f1, 0x41f3, 0x41f4, 0x41f6, 0x41f7, 
+    0x41f9, 0x41fa, 0x41fc, 0x41fd, 0x41ff, 0x4200, 0x4202, 0x4203, 
+    0x4205, 0x4206, 0x4208, 0x4209, 0x420b, 0x420c, 0x420e, 0x420f, 
+    0x4211, 0x4212, 0x4214, 0x4215, 0x4217, 0x4218, 0x421a, 0x421b, 
+    0x421d, 0x421e, 0x4220, 0x4221, 0x4223, 0x4224, 0x4226, 0x4228, 
+    0x4229, 0x422b, 0x422c, 0x422e, 0x422f, 0x4231, 0x4232, 0x4234, 
+    0x4235, 0x4237, 0x4239, 0x423a, 0x423c, 0x423d, 0x423f, 0x4240, 
+    0x4242, 0x4243, 0x4245, 0x4247, 0x4248, 0x424a, 0x424b, 0x424d, 
+    0x424e, 0x4250, 0x4252, 0x4253, 0x4255, 0x4256, 0x4258, 0x425a, 
+    0x425b, 0x425d, 0x425e, 0x4260, 0x4262, 0x4263, 0x4265, 0x4266, 
+    0x4268, 0x4269, 0x426b, 0x426d, 0x426e, 0x4270, 0x4272, 0x4273, 
+    0x4275, 0x4276, 0x4278, 0x427a, 0x427b, 0x427d, 0x427e, 0x4280, 
+    0x4282, 0x4283, 0x4285, 0x4287, 0x4288, 0x428a, 0x428c, 0x428d, 
+    0x428f, 0x4290, 0x4292, 0x4294, 0x4295, 0x4297, 0x4299, 0x429a, 
+    0x429c, 0x429e, 0x429f, 0x42a1, 0x42a3, 0x42a4, 0x42a6, 0x42a8, 
+    0x42a9, 0x42ab, 0x42ad, 0x42ae, 0x42b0, 0x42b2, 0x42b3, 0x42b5, 
+    0x42b7, 0x42b8, 0x42ba, 0x42bc, 0x42bd, 0x42bf, 0x42c1, 0x42c2, 
+    0x42c4, 0x42c6, 0x42c7, 0x42c9, 0x42cb, 0x42cd, 0x42ce, 0x42d0, 
+    0x42d2, 0x42d3, 0x42d5, 0x42d7, 0x42d8, 0x42da, 0x42dc, 0x42de, 
+    0x42df, 0x42e1, 0x42e3, 0x42e5, 0x42e6, 0x42e8, 0x42ea, 0x42eb, 
+    0x42ed, 0x42ef, 0x42f1, 0x42f2, 0x42f4, 0x42f6, 0x42f8, 0x42f9, 
+    0x42fb, 0x42fd, 0x42ff, 0x4300, 0x4302, 0x4304, 0x4306, 0x4307, 
+    0x4309, 0x430b, 0x430d, 0x430e, 0x4310, 0x4312, 0x4314, 0x4315, 
+    0x4317, 0x4319, 0x431b, 0x431d, 0x431e, 0x4320, 0x4322, 0x4324, 
+    0x4325, 0x4327, 0x4329, 0x432b, 0x432d, 0x432e, 0x4330, 0x4332, 
+    0x4334, 0x4336, 0x4337, 0x4339, 0x433b, 0x433d, 0x433f, 0x4340, 
+    0x4342, 0x4344, 0x4346, 0x4348, 0x434a, 0x434b, 0x434d, 0x434f, 
+    0x4351, 0x4353, 0x4354, 0x4356, 0x4358, 0x435a, 0x435c, 0x435e, 
+    0x4360, 0x4361, 0x4363, 0x4365, 0x4367, 0x4369, 0x436b, 0x436c, 
+    0x436e, 0x4370, 0x4372, 0x4374, 0x4376, 0x4378, 0x4379, 0x437b, 
+    0x437d, 0x437f, 0x4381, 0x4383, 0x4385, 0x4387, 0x4388, 0x438a, 
+    0x438c, 0x438e, 0x4390, 0x4392, 0x4394, 0x4396, 0x4398, 0x439a, 
+    0x439b, 0x439d, 0x439f, 0x43a1, 0x43a3, 0x43a5, 0x43a7, 0x43a9, 
+    0x43ab, 0x43ad, 0x43af, 0x43b0, 0x43b2, 0x43b4, 0x43b6, 0x43b8, 
+    0x43ba, 0x43bc, 0x43be, 0x43c0, 0x43c2, 0x43c4, 0x43c6, 0x43c8, 
+    0x43ca, 0x43cc, 0x43ce, 0x43cf, 0x43d1, 0x43d3, 0x43d5, 0x43d7, 
+    0x43d9, 0x43db, 0x43dd, 0x43df, 0x43e1, 0x43e3, 0x43e5, 0x43e7, 
+    0x43e9, 0x43eb, 0x43ed, 0x43ef, 0x43f1, 0x43f3, 0x43f5, 0x43f7, 
+    0x43f9, 0x43fb, 0x43fd, 0x43ff, 0x4400, 0x4401, 0x4402, 0x4403, 
+    0x4404, 0x4405, 0x4406, 0x4407, 0x4408, 0x4409, 0x440a, 0x440b, 
+    0x440d, 0x440e, 0x440f, 0x4410, 0x4411, 0x4412, 0x4413, 0x4414, 
+    0x4415, 0x4416, 0x4417, 0x4418, 0x4419, 0x441a, 0x441b, 0x441c, 
+    0x441d, 0x441e, 0x441f, 0x4420, 0x4421, 0x4422, 0x4423, 0x4424, 
+    0x4425, 0x4426, 0x4427, 0x4428, 0x4429, 0x442a, 0x442b, 0x442c, 
+    0x442d, 0x442e, 0x4430, 0x4431, 0x4432, 0x4433, 0x4434, 0x4435, 
+    0x4436, 0x4437, 0x4438, 0x4439, 0x443a, 0x443b, 0x443c, 0x443d, 
+    0x443e, 0x443f, 0x4440, 0x4441, 0x4443, 0x4444, 0x4445, 0x4446, 
+    0x4447, 0x4448, 0x4449, 0x444a, 0x444b, 0x444c, 0x444d, 0x444e, 
+    0x444f, 0x4450, 0x4452, 0x4453, 0x4454, 0x4455, 0x4456, 0x4457, 
+    0x4458, 0x4459, 0x445a, 0x445b, 0x445c, 0x445d, 0x445f, 0x4460, 
+    0x4461, 0x4462, 0x4463, 0x4464, 0x4465, 0x4466, 0x4467, 0x4468, 
+    0x446a, 0x446b, 0x446c, 0x446d, 0x446e, 0x446f, 0x4470, 0x4471, 
+    0x4472, 0x4473, 0x4475, 0x4476, 0x4477, 0x4478, 0x4479, 0x447a, 
+    0x447b, 0x447c, 0x447e, 0x447f, 0x4480, 0x4481, 0x4482, 0x4483, 
+    0x4484, 0x4485, 0x4487, 0x4488, 0x4489, 0x448a, 0x448b, 0x448c, 
+    0x448d, 0x448f, 0x4490, 0x4491, 0x4492, 0x4493, 0x4494, 0x4495, 
+    0x4497, 0x4498, 0x4499, 0x449a, 0x449b, 0x449c, 0x449d, 0x449f, 
+    0x44a0, 0x44a1, 0x44a2, 0x44a3, 0x44a4, 0x44a6, 0x44a7, 0x44a8, 
+    0x44a9, 0x44aa, 0x44ab, 0x44ad, 0x44ae, 0x44af, 0x44b0, 0x44b1, 
+    0x44b2, 0x44b4, 0x44b5, 0x44b6, 0x44b7, 0x44b8, 0x44b9, 0x44bb, 
+    0x44bc, 0x44bd, 0x44be, 0x44bf, 0x44c1, 0x44c2, 0x44c3, 0x44c4, 
+    0x44c5, 0x44c7, 0x44c8, 0x44c9, 0x44ca, 0x44cb, 0x44cc, 0x44ce, 
+    0x44cf, 0x44d0, 0x44d1, 0x44d2, 0x44d4, 0x44d5, 0x44d6, 0x44d7, 
+    0x44d9, 0x44da, 0x44db, 0x44dc, 0x44dd, 0x44df, 0x44e0, 0x44e1, 
+    0x44e2, 0x44e3, 0x44e5, 0x44e6, 0x44e7, 0x44e8, 0x44ea, 0x44eb, 
+    0x44ec, 0x44ed, 0x44ef, 0x44f0, 0x44f1, 0x44f2, 0x44f3, 0x44f5, 
+    0x44f6, 0x44f7, 0x44f8, 0x44fa, 0x44fb, 0x44fc, 0x44fd, 0x44ff, 
+    0x4500, 0x4501, 0x4502, 0x4504, 0x4505, 0x4506, 0x4507, 0x4509, 
+    0x450a, 0x450b, 0x450c, 0x450e, 0x450f, 0x4510, 0x4512, 0x4513, 
+    0x4514, 0x4515, 0x4517, 0x4518, 0x4519, 0x451a, 0x451c, 0x451d, 
+    0x451e, 0x4520, 0x4521, 0x4522, 0x4523, 0x4525, 0x4526, 0x4527, 
+    0x4529, 0x452a, 0x452b, 0x452c, 0x452e, 0x452f, 0x4530, 0x4532, 
+    0x4533, 0x4534, 0x4536, 0x4537, 0x4538, 0x4539, 0x453b, 0x453c, 
+    0x453d, 0x453f, 0x4540, 0x4541, 0x4543, 0x4544, 0x4545, 0x4547, 
+    0x4548, 0x4549, 0x454b, 0x454c, 0x454d, 0x454e, 0x4550, 0x4551, 
+    0x4552, 0x4554, 0x4555, 0x4556, 0x4558, 0x4559, 0x455a, 0x455c, 
+    0x455d, 0x455e, 0x4560, 0x4561, 0x4563, 0x4564, 0x4565, 0x4567, 
+    0x4568, 0x4569, 0x456b, 0x456c, 0x456d, 0x456f, 0x4570, 0x4571, 
+    0x4573, 0x4574, 0x4576, 0x4577, 0x4578, 0x457a, 0x457b, 0x457c, 
+    0x457e, 0x457f, 0x4580, 0x4582, 0x4583, 0x4585, 0x4586, 0x4587, 
+    0x4589, 0x458a, 0x458c, 0x458d, 0x458e, 0x4590, 0x4591, 0x4592, 
+    0x4594, 0x4595, 0x4597, 0x4598, 0x4599, 0x459b, 0x459c, 0x459e, 
+    0x459f, 0x45a0, 0x45a2, 0x45a3, 0x45a5, 0x45a6, 0x45a8, 0x45a9, 
+    0x45aa, 0x45ac, 0x45ad, 0x45af, 0x45b0, 0x45b1, 0x45b3, 0x45b4, 
+    0x45b6, 0x45b7, 0x45b9, 0x45ba, 0x45bb, 0x45bd, 0x45be, 0x45c0, 
+    0x45c1, 0x45c3, 0x45c4, 0x45c6, 0x45c7, 0x45c8, 0x45ca, 0x45cb, 
+    0x45cd, 0x45ce, 0x45d0, 0x45d1, 0x45d3, 0x45d4, 0x45d5, 0x45d7, 
+    0x45d8, 0x45da, 0x45db, 0x45dd, 0x45de, 0x45e0, 0x45e1, 0x45e3, 
+    0x45e4, 0x45e6, 0x45e7, 0x45e9, 0x45ea, 0x45eb, 0x45ed, 0x45ee, 
+    0x45f0, 0x45f1, 0x45f3, 0x45f4, 0x45f6, 0x45f7, 0x45f9, 0x45fa, 
+    0x45fc, 0x45fd, 0x45ff, 0x4600, 0x4602, 0x4603, 0x4605, 0x4606, 
+    0x4608, 0x4609, 0x460b, 0x460c, 0x460e, 0x460f, 0x4611, 0x4612, 
+    0x4614, 0x4616, 0x4617, 0x4619, 0x461a, 0x461c, 0x461d, 0x461f, 
+    0x4620, 0x4622, 0x4623, 0x4625, 0x4626, 0x4628, 0x4629, 0x462b, 
+    0x462c, 0x462e, 0x4630, 0x4631, 0x4633, 0x4634, 0x4636, 0x4637, 
+    0x4639, 0x463a, 0x463c, 0x463e, 0x463f, 0x4641, 0x4642, 0x4644, 
+    0x4645, 0x4647, 0x4649, 0x464a, 0x464c, 0x464d, 0x464f, 0x4650, 
+    0x4652, 0x4654, 0x4655, 0x4657, 0x4658, 0x465a, 0x465b, 0x465d, 
+    0x465f, 0x4660, 0x4662, 0x4663, 0x4665, 0x4667, 0x4668, 0x466a, 
+    0x466b, 0x466d, 0x466f, 0x4670, 0x4672, 0x4673, 0x4675, 0x4677, 
+    0x4678, 0x467a, 0x467c, 0x467d, 0x467f, 0x4680, 0x4682, 0x4684, 
+    0x4685, 0x4687, 0x4689, 0x468a, 0x468c, 0x468e, 0x468f, 0x4691, 
+    0x4692, 0x4694, 0x4696, 0x4697, 0x4699, 0x469b, 0x469c, 0x469e, 
+    0x46a0, 0x46a1, 0x46a3, 0x46a5, 0x46a6, 0x46a8, 0x46aa, 0x46ab, 
+    0x46ad, 0x46af, 0x46b0, 0x46b2, 0x46b4, 0x46b5, 0x46b7, 0x46b9, 
+    0x46ba, 0x46bc, 0x46be, 0x46bf, 0x46c1, 0x46c3, 0x46c4, 0x46c6, 
+    0x46c8, 0x46ca, 0x46cb, 0x46cd, 0x46cf, 0x46d0, 0x46d2, 0x46d4, 
+    0x46d5, 0x46d7, 0x46d9, 0x46db, 0x46dc, 0x46de, 0x46e0, 0x46e1, 
+    0x46e3, 0x46e5, 0x46e7, 0x46e8, 0x46ea, 0x46ec, 0x46ee, 0x46ef, 
+    0x46f1, 0x46f3, 0x46f4, 0x46f6, 0x46f8, 0x46fa, 0x46fb, 0x46fd, 
+    0x46ff, 0x4701, 0x4702, 0x4704, 0x4706, 0x4708, 0x4709, 0x470b, 
+    0x470d, 0x470f, 0x4711, 0x4712, 0x4714, 0x4716, 0x4718, 0x4719, 
+    0x471b, 0x471d, 0x471f, 0x4720, 0x4722, 0x4724, 0x4726, 0x4728, 
+    0x4729, 0x472b, 0x472d, 0x472f, 0x4731, 0x4732, 0x4734, 0x4736, 
+    0x4738, 0x473a, 0x473b, 0x473d, 0x473f, 0x4741, 0x4743, 0x4744, 
+    0x4746, 0x4748, 0x474a, 0x474c, 0x474e, 0x474f, 0x4751, 0x4753, 
+    0x4755, 0x4757, 0x4759, 0x475a, 0x475c, 0x475e, 0x4760, 0x4762, 
+    0x4764, 0x4767, 0x476b, 0x476f, 0x4772, 0x4776, 0x477a, 0x477e, 
+    0x4781, 0x4785, 0x4789, 0x478d, 0x4790, 0x4794, 0x4798, 0x479c, 
+    0x47a0, 0x47a3, 0x47a7, 0x47ab, 0x47af, 0x47b3, 0x47b7, 0x47bb, 
+    0x47be, 0x47c2, 0x47c6, 0x47ca, 0x47ce, 0x47d2, 0x47d6, 0x47da, 
+    0x47de, 0x47e2, 0x47e5, 0x47e9, 0x47ed, 0x47f1, 0x47f5, 0x47f9, 
+    0x47fd, 0x4801, 0x4803, 0x4805, 0x4807, 0x4809, 0x480b, 0x480d, 
+    0x480f, 0x4811, 0x4813, 0x4815, 0x4817, 0x4819, 0x481b, 0x481d, 
+    0x481f, 0x4821, 0x4823, 0x4825, 0x4827, 0x4829, 0x482c, 0x482e, 
+    0x4830, 0x4832, 0x4834, 0x4836, 0x4838, 0x483a, 0x483c, 0x483e, 
+    0x4841, 0x4843, 0x4845, 0x4847, 0x4849, 0x484b, 0x484d, 0x4850, 
+    0x4852, 0x4854, 0x4856, 0x4858, 0x485a, 0x485d, 0x485f, 0x4861, 
+    0x4863, 0x4865, 0x4868, 0x486a, 0x486c, 0x486e, 0x4870, 0x4873, 
+    0x4875, 0x4877, 0x4879, 0x487c, 0x487e, 0x4880, 0x4882, 0x4885, 
+    0x4887, 0x4889, 0x488b, 0x488e, 0x4890, 0x4892, 0x4894, 0x4897, 
+    0x4899, 0x489b, 0x489e, 0x48a0, 0x48a2, 0x48a5, 0x48a7, 0x48a9, 
+    0x48ac, 0x48ae, 0x48b0, 0x48b3, 0x48b5, 0x48b7, 0x48ba, 0x48bc, 
+    0x48be, 0x48c1, 0x48c3, 0x48c6, 0x48c8, 0x48ca, 0x48cd, 0x48cf, 
+    0x48d2, 0x48d4, 0x48d6, 0x48d9, 0x48db, 0x48de, 0x48e0, 0x48e3, 
+    0x48e5, 0x48e7, 0x48ea, 0x48ec, 0x48ef, 0x48f1, 0x48f4, 0x48f6, 
+    0x48f9, 0x48fb, 0x48fe, 0x4900, 0x4903, 0x4905, 0x4908, 0x490a, 
+    0x490d, 0x490f, 0x4912, 0x4914, 0x4917, 0x4919, 0x491c, 0x491f, 
+    0x4921, 0x4924, 0x4926, 0x4929, 0x492b, 0x492e, 0x4931, 0x4933, 
+    0x4936, 0x4938, 0x493b, 0x493e, 0x4940, 0x4943, 0x4946, 0x4948, 
+    0x494b, 0x494d, 0x4950, 0x4953, 0x4955, 0x4958, 0x495b, 0x495d, 
+    0x4960, 0x4963, 0x4966, 0x4968, 0x496b, 0x496e, 0x4970, 0x4973, 
+    0x4976, 0x4979, 0x497b, 0x497e, 0x4981, 0x4984, 0x4986, 0x4989, 
+    0x498c, 0x498f, 0x4991, 0x4994, 0x4997, 0x499a, 0x499d, 0x499f, 
+    0x49a2, 0x49a5, 0x49a8, 0x49ab, 0x49ad, 0x49b0, 0x49b3, 0x49b6, 
+    0x49b9, 0x49bc, 0x49bf, 0x49c1, 0x49c4, 0x49c7, 0x49ca, 0x49cd, 
+    0x49d0, 0x49d3, 0x49d6, 0x49d9, 0x49dc, 0x49df, 0x49e1, 0x49e4, 
+    0x49e7, 0x49ea, 0x49ed, 0x49f0, 0x49f3, 0x49f6, 0x49f9, 0x49fc, 
+    0x49ff, 0x4a02, 0x4a05, 0x4a08, 0x4a0b, 0x4a0e, 0x4a11, 0x4a14, 
+    0x4a17, 0x4a1a, 0x4a1d, 0x4a21, 0x4a24, 0x4a27, 0x4a2a, 0x4a2d, 
+    0x4a30, 0x4a33, 0x4a36, 0x4a39, 0x4a3c, 0x4a3f, 0x4a43, 0x4a46, 
+    0x4a49, 0x4a4c, 0x4a4f, 0x4a52, 0x4a55, 0x4a59, 0x4a5c, 0x4a5f, 
+    0x4a62, 0x4a65, 0x4a69, 0x4a6c, 0x4a6f, 0x4a72, 0x4a75, 0x4a79, 
+    0x4a7c, 0x4a7f, 0x4a82, 0x4a86, 0x4a89, 0x4a8c, 0x4a8f, 0x4a93, 
+    0x4a96, 0x4a99, 0x4a9d, 0x4aa0, 0x4aa3, 0x4aa7, 0x4aaa, 0x4aad, 
+    0x4ab1, 0x4ab4, 0x4ab7, 0x4abb, 0x4abe, 0x4ac1, 0x4ac5, 0x4ac8, 
+    0x4acc, 0x4acf, 0x4ad2, 0x4ad6, 0x4ad9, 0x4add, 0x4ae0, 0x4ae4, 
+    0x4ae7, 0x4aea, 0x4aee, 0x4af1, 0x4af5, 0x4af8, 0x4afc, 0x4aff, 
+    0x4b03, 0x4b06, 0x4b0a, 0x4b0d, 0x4b11, 0x4b14, 0x4b18, 0x4b1c, 
+    0x4b1f, 0x4b23, 0x4b26, 0x4b2a, 0x4b2d, 0x4b31, 0x4b35, 0x4b38, 
+    0x4b3c, 0x4b3f, 0x4b43, 0x4b47, 0x4b4a, 0x4b4e, 0x4b52, 0x4b55, 
+    0x4b59, 0x4b5d, 0x4b60, 0x4b64, 0x4b68, 0x4b6b, 0x4b6f, 0x4b73, 
+    0x4b77, 0x4b7a, 0x4b7e, 0x4b82, 0x4b86, 0x4b89, 0x4b8d, 0x4b91, 
+    0x4b95, 0x4b98, 0x4b9c, 0x4ba0, 0x4ba4, 0x4ba8, 0x4bac, 0x4baf, 
+    0x4bb3, 0x4bb7, 0x4bbb, 0x4bbf, 0x4bc3, 0x4bc7, 0x4bca, 0x4bce, 
+    0x4bd2, 0x4bd6, 0x4bda, 0x4bde, 0x4be2, 0x4be6, 0x4bea, 0x4bee, 
+    0x4bf2, 0x4bf6, 0x4bfa, 0x4bfe, 0x4c01, 0x4c03, 0x4c05, 0x4c07, 
+    0x4c09, 0x4c0b, 0x4c0d, 0x4c0f, 0x4c11, 0x4c13, 0x4c15, 0x4c17, 
+    0x4c19, 0x4c1b, 0x4c1d, 0x4c1f, 0x4c21, 0x4c23, 0x4c26, 0x4c28, 
+    0x4c2a, 0x4c2c, 0x4c2e, 0x4c30, 0x4c32, 0x4c34, 0x4c36, 0x4c38, 
+    0x4c3a, 0x4c3d, 0x4c3f, 0x4c41, 0x4c43, 0x4c45, 0x4c47, 0x4c49, 
+    0x4c4c, 0x4c4e, 0x4c50, 0x4c52, 0x4c54, 0x4c56, 0x4c58, 0x4c5b, 
+    0x4c5d, 0x4c5f, 0x4c61, 0x4c63, 0x4c66, 0x4c68, 0x4c6a, 0x4c6c, 
+    0x4c6e, 0x4c71, 0x4c73, 0x4c75, 0x4c77, 0x4c7a, 0x4c7c, 0x4c7e, 
+    0x4c80, 0x4c83, 0x4c85, 0x4c87, 0x4c89, 0x4c8c, 0x4c8e, 0x4c90, 
+    0x4c92, 0x4c95, 0x4c97, 0x4c99, 0x4c9c, 0x4c9e, 0x4ca0, 0x4ca3, 
+    0x4ca5, 0x4ca7, 0x4caa, 0x4cac, 0x4cae, 0x4cb1, 0x4cb3, 0x4cb5, 
+    0x4cb8, 0x4cba, 0x4cbc, 0x4cbf, 0x4cc1, 0x4cc3, 0x4cc6, 0x4cc8, 
+    0x4ccb, 0x4ccd, 0x4ccf, 0x4cd2, 0x4cd4, 0x4cd7, 0x4cd9, 0x4cdb, 
+    0x4cde, 0x4ce0, 0x4ce3, 0x4ce5, 0x4ce8, 0x4cea, 0x4ced, 0x4cef, 
+    0x4cf2, 0x4cf4, 0x4cf6, 0x4cf9, 0x4cfb, 0x4cfe, 0x4d00, 0x4d03, 
+    0x4d05, 0x4d08, 0x4d0b, 0x4d0d, 0x4d10, 0x4d12, 0x4d15, 0x4d17, 
+    0x4d1a, 0x4d1c, 0x4d1f, 0x4d21, 0x4d24, 0x4d27, 0x4d29, 0x4d2c, 
+    0x4d2e, 0x4d31, 0x4d33, 0x4d36, 0x4d39, 0x4d3b, 0x4d3e, 0x4d41, 
+    0x4d43, 0x4d46, 0x4d48, 0x4d4b, 0x4d4e, 0x4d50, 0x4d53, 0x4d56, 
+    0x4d58, 0x4d5b, 0x4d5e, 0x4d60, 0x4d63, 0x4d66, 0x4d69, 0x4d6b, 
+    0x4d6e, 0x4d71, 0x4d73, 0x4d76, 0x4d79, 0x4d7c, 0x4d7e, 0x4d81, 
+    0x4d84, 0x4d87, 0x4d89, 0x4d8c, 0x4d8f, 0x4d92, 0x4d94, 0x4d97, 
+    0x4d9a, 0x4d9d, 0x4da0, 0x4da2, 0x4da5, 0x4da8, 0x4dab, 0x4dae, 
+    0x4db1, 0x4db3, 0x4db6, 0x4db9, 0x4dbc, 0x4dbf, 0x4dc2, 0x4dc5, 
+    0x4dc8, 0x4dca, 0x4dcd, 0x4dd0, 0x4dd3, 0x4dd6, 0x4dd9, 0x4ddc, 
+    0x4ddf, 0x4de2, 0x4de5, 0x4de8, 0x4deb, 0x4dee, 0x4df1, 0x4df4, 
+    0x4df7, 0x4dfa, 0x4dfd, 0x4e00, 0x4e03, 0x4e06, 0x4e09, 0x4e0c, 
+    0x4e0f, 0x4e12, 0x4e15, 0x4e18, 0x4e1b, 0x4e1e, 0x4e21, 0x4e24, 
+    0x4e27, 0x4e2a, 0x4e2d, 0x4e30, 0x4e33, 0x4e36, 0x4e3a, 0x4e3d, 
+    0x4e40, 0x4e43, 0x4e46, 0x4e49, 0x4e4c, 0x4e4f, 0x4e53, 0x4e56, 
+    0x4e59, 0x4e5c, 0x4e5f, 0x4e63, 0x4e66, 0x4e69, 0x4e6c, 0x4e6f, 
+    0x4e73, 0x4e76, 0x4e79, 0x4e7c, 0x4e80, 0x4e83, 0x4e86, 0x4e89, 
+    0x4e8d, 0x4e90, 0x4e93, 0x4e96, 0x4e9a, 0x4e9d, 0x4ea0, 0x4ea4, 
+    0x4ea7, 0x4eaa, 0x4eae, 0x4eb1, 0x4eb4, 0x4eb8, 0x4ebb, 0x4ebe, 
+    0x4ec2, 0x4ec5, 0x4ec9, 0x4ecc, 0x4ecf, 0x4ed3, 0x4ed6, 0x4eda, 
+    0x4edd, 0x4ee0, 0x4ee4, 0x4ee7, 0x4eeb, 0x4eee, 0x4ef2, 0x4ef5, 
+    0x4ef9, 0x4efc, 0x4f00, 0x4f03, 0x4f07, 0x4f0a, 0x4f0e, 0x4f11, 
+    0x4f15, 0x4f18, 0x4f1c, 0x4f1f, 0x4f23, 0x4f27, 0x4f2a, 0x4f2e, 
+    0x4f31, 0x4f35, 0x4f39, 0x4f3c, 0x4f40, 0x4f43, 0x4f47, 0x4f4b, 
+    0x4f4e, 0x4f52, 0x4f56, 0x4f59, 0x4f5d, 0x4f61, 0x4f64, 0x4f68, 
+    0x4f6c, 0x4f70, 0x4f73, 0x4f77, 0x4f7b, 0x4f7e, 0x4f82, 0x4f86, 
+    0x4f8a, 0x4f8d, 0x4f91, 0x4f95, 0x4f99, 0x4f9d, 0x4fa0, 0x4fa4, 
+    0x4fa8, 0x4fac, 0x4fb0, 0x4fb4, 0x4fb7, 0x4fbb, 0x4fbf, 0x4fc3, 
+    0x4fc7, 0x4fcb, 0x4fcf, 0x4fd3, 0x4fd7, 0x4fdb, 0x4fde, 0x4fe2, 
+    0x4fe6, 0x4fea, 0x4fee, 0x4ff2, 0x4ff6, 0x4ffa, 0x4ffe, 0x5001, 
+    0x5003, 0x5005, 0x5007, 0x5009, 0x500b, 0x500d, 0x500f, 0x5011, 
+    0x5013, 0x5015, 0x5017, 0x5019, 0x501b, 0x501e, 0x5020, 0x5022, 
+    0x5024, 0x5026, 0x5028, 0x502a, 0x502c, 0x502e, 0x5030, 0x5032, 
+    0x5034, 0x5036, 0x5039, 0x503b, 0x503d, 0x503f, 0x5041, 0x5043, 
+    0x5045, 0x5047, 0x504a, 0x504c, 0x504e, 0x5050, 0x5052, 0x5054, 
+    0x5057, 0x5059, 0x505b, 0x505d, 0x505f, 0x5061, 0x5064, 0x5066, 
+    0x5068, 0x506a, 0x506c, 0x506f, 0x5071, 0x5073, 0x5075, 0x5078, 
+    0x507a, 0x507c, 0x507e, 0x5081, 0x5083, 0x5085, 0x5087, 0x508a, 
+    0x508c, 0x508e, 0x5090, 0x5093, 0x5095, 0x5097, 0x509a, 0x509c, 
+    0x509e, 0x50a0, 0x50a3, 0x50a5, 0x50a7, 0x50aa, 0x50ac, 0x50ae, 
+    0x50b1, 0x50b3, 0x50b5, 0x50b8, 0x50ba, 0x50bd, 0x50bf, 0x50c1, 
+    0x50c4, 0x50c6, 0x50c8, 0x50cb, 0x50cd, 0x50d0, 0x50d2, 0x50d4, 
+    0x50d7, 0x50d9, 0x50dc, 0x50de, 0x50e1, 0x50e3, 0x50e6, 0x50e8, 
+    0x50ea, 0x50ed, 0x50ef, 0x50f2, 0x50f4, 0x50f7, 0x50f9, 0x50fc, 
+    0x50fe, 0x5101, 0x5103, 0x5106, 0x5108, 0x510b, 0x510d, 0x5110, 
+    0x5112, 0x5115, 0x5117, 0x511a, 0x511d, 0x511f, 0x5122, 0x5124, 
+    0x5127, 0x5129, 0x512c, 0x512f, 0x5131, 0x5134, 0x5136, 0x5139, 
+    0x513c, 0x513e, 0x5141, 0x5143, 0x5146, 0x5149, 0x514b, 0x514e, 
+    0x5151, 0x5153, 0x5156, 0x5159, 0x515b, 0x515e, 0x5161, 0x5163, 
+    0x5166, 0x5169, 0x516c, 0x516e, 0x5171, 0x5174, 0x5176, 0x5179, 
+    0x517c, 0x517f, 0x5181, 0x5184, 0x5187, 0x518a, 0x518c, 0x518f, 
+    0x5192, 0x5195, 0x5198, 0x519a, 0x519d, 0x51a0, 0x51a3, 0x51a6, 
+    0x51a8, 0x51ab, 0x51ae, 0x51b1, 0x51b4, 0x51b7, 0x51ba, 0x51bc, 
+    0x51bf, 0x51c2, 0x51c5, 0x51c8, 0x51cb, 0x51ce, 0x51d1, 0x51d3, 
+    0x51d6, 0x51d9, 0x51dc, 0x51df, 0x51e2, 0x51e5, 0x51e8, 0x51eb, 
+    0x51ee, 0x51f1, 0x51f4, 0x51f7, 0x51fa, 0x51fd, 0x5200, 0x5203, 
+    0x5206, 0x5209, 0x520c, 0x520f, 0x5212, 0x5215, 0x5218, 0x521b, 
+    0x521e, 0x5221, 0x5224, 0x5227, 0x522a, 0x522d, 0x5231, 0x5234, 
+    0x5237, 0x523a, 0x523d, 0x5240, 0x5243, 0x5246, 0x524a, 0x524d, 
+    0x5250, 0x5253, 0x5256, 0x5259, 0x525d, 0x5260, 0x5263, 0x5266, 
+    0x5269, 0x526c, 0x5270, 0x5273, 0x5276, 0x5279, 0x527d, 0x5280, 
+    0x5283, 0x5286, 0x528a, 0x528d, 0x5290, 0x5293, 0x5297, 0x529a, 
+    0x529d, 0x52a1, 0x52a4, 0x52a7, 0x52ab, 0x52ae, 0x52b1, 0x52b5, 
+    0x52b8, 0x52bb, 0x52bf, 0x52c2, 0x52c6, 0x52c9, 0x52cc, 0x52d0, 
+    0x52d3, 0x52da, 0x52e1, 0x52e8, 0x52ef, 0x52f6, 0x52fd, 0x5304, 
+    0x530b, 0x5312, 0x5319, 0x5320, 0x5327, 0x532e, 0x5335, 0x533d, 
+    0x5344, 0x534b, 0x5352, 0x535a, 0x5361, 0x5369, 0x5370, 0x5377, 
+    0x537f, 0x5386, 0x538e, 0x5395, 0x539d, 0x53a5, 0x53ac, 0x53b4, 
+    0x53bc, 0x53c4, 0x53cb, 0x53d3, 0x53db, 0x53e3, 0x53eb, 0x53f3, 
+    0x53fb, 0x5401, 0x5405, 0x5409, 0x540d, 0x5411, 0x5416, 0x541a, 
+    0x541e, 0x5422, 0x5426, 0x542a, 0x542e, 0x5433, 0x5437, 0x543b, 
+    0x543f, 0x5443, 0x5448, 0x544c, 0x5450, 0x5455, 0x5459, 0x545d, 
+    0x5462, 0x5466, 0x546a, 0x546f, 0x5473, 0x5478, 0x547c, 0x5481, 
+    0x5485, 0x548a, 0x548e, 0x5493, 0x5498, 0x549c, 0x54a1, 0x54a5, 
+    0x54aa, 0x54af, 0x54b3, 0x54b8, 0x54bd, 0x54c2, 0x54c6, 0x54cb, 
+    0x54d0, 0x54d5, 0x54da, 0x54de, 0x54e3, 0x54e8, 0x54ed, 0x54f2, 
+    0x54f7, 0x54fc, 0x5501, 0x5506, 0x550b, 0x5510, 0x5515, 0x551a, 
+    0x551f, 0x5525, 0x552a, 0x552f, 0x5534, 0x5539, 0x553e, 0x5544, 
+    0x5549, 0x554e, 0x5554, 0x5559, 0x555e, 0x5564, 0x5569, 0x556f, 
+    0x5574, 0x5579, 0x557f, 0x5584, 0x558a, 0x558f, 0x5595, 0x559b, 
+    0x55a0, 0x55a6, 0x55ac, 0x55b1, 0x55b7, 0x55bd, 0x55c2, 0x55c8, 
+    0x55ce, 0x55d4, 0x55da, 0x55e0, 0x55e5, 0x55eb, 0x55f1, 0x55f7, 
+    0x55fd, 0x5603, 0x5609, 0x560f, 0x5615, 0x561b, 0x5622, 0x5628, 
+    0x562e, 0x5634, 0x563a, 0x5640, 0x5647, 0x564d, 0x5653, 0x565a, 
+    0x5660, 0x5666, 0x566d, 0x5673, 0x567a, 0x5680, 0x5687, 0x568d, 
+    0x5694, 0x569a, 0x56a1, 0x56a8, 0x56ae, 0x56b5, 0x56bc, 0x56c3, 
+    0x56c9, 0x56d0, 0x56d7, 0x56de, 0x56e5, 0x56ec, 0x56f3, 0x56f9, 
+    0x5700, 0x5707, 0x570f, 0x5716, 0x571d, 0x5724, 0x572b, 0x5732, 
+    0x5739, 0x5741, 0x5748, 0x574f, 0x5756, 0x575e, 0x5765, 0x576d, 
+    0x5774, 0x577c, 0x5783, 0x578b, 0x5792, 0x579a, 0x57a1, 0x57a9, 
+    0x57b1, 0x57b8, 0x57c0, 0x57c8, 0x57d0, 0x57d7, 0x57df, 0x57e7, 
+    0x57ef, 0x57f7, 0x57ff, 0x5804, 0x5808, 0x580c, 0x5810, 0x5814, 
+    0x5818, 0x581c, 0x5820, 0x5824, 0x5828, 0x582c, 0x5831, 0x5835, 
+    0x5839, 0x583d, 0x5842, 0x5846, 0x584a, 0x584e, 0x5853, 0x5857, 
+    0x585b, 0x5860, 0x5864, 0x5869, 0x586d, 0x5871, 0x5876, 0x587a, 
+    0x587f, 0x5883, 0x5888, 0x588c, 0x5891, 0x5895, 0x589a, 0x589f, 
+    0x58a3, 0x58a8, 0x58ad, 0x58b1, 0x58b6, 0x58bb, 0x58bf, 0x58c4, 
+    0x58c9, 0x58ce, 0x58d3, 0x58d7, 0x58dc, 0x58e1, 0x58e6, 0x58eb, 
+    0x58f0, 0x58f5, 0x58fa, 0x58ff, 0x5904, 0x5909, 0x590e, 0x5913, 
+    0x5918, 0x591d, 0x5922, 0x5927, 0x592d, 0x5932, 0x5937, 0x593c, 
+    0x5941, 0x5947, 0x594c, 0x5951, 0x5957, 0x595c, 0x5961, 0x5967, 
+    0x596c, 0x5972, 0x5977, 0x597c, 0x5982, 0x5987, 0x598d, 0x5993, 
+    0x5998, 0x599e, 0x59a3, 0x59a9, 0x59af, 0x59b4, 0x59ba, 0x59c0, 
+    0x59c6, 0x59cb, 0x59d1, 0x59d7, 0x59dd, 0x59e3, 0x59e9, 0x59ef, 
+    0x59f5, 0x59fa, 0x5a00, 0x5a07, 0x5a0d, 0x5a13, 0x5a19, 0x5a1f, 
+    0x5a25, 0x5a2b, 0x5a31, 0x5a37, 0x5a3e, 0x5a44, 0x5a4a, 0x5a51, 
+    0x5a57, 0x5a5d, 0x5a64, 0x5a6a, 0x5a70, 0x5a77, 0x5a7d, 0x5a84, 
+    0x5a8a, 0x5a91, 0x5a98, 0x5a9e, 0x5aa5, 0x5aab, 0x5ab2, 0x5ab9, 
+    0x5ac0, 0x5ac6, 0x5acd, 0x5ad4, 0x5adb, 0x5ae2, 0x5ae8, 0x5aef, 
+    0x5af6, 0x5afd, 0x5b04, 0x5b0b, 0x5b12, 0x5b1a, 0x5b21, 0x5b28, 
+    0x5b2f, 0x5b36, 0x5b3d, 0x5b45, 0x5b4c, 0x5b53, 0x5b5b, 0x5b62, 
+    0x5b69, 0x5b71, 0x5b78, 0x5b80, 0x5b87, 0x5b8f, 0x5b96, 0x5b9e, 
+    0x5ba6, 0x5bad, 0x5bb5, 0x5bbd, 0x5bc4, 0x5bcc, 0x5bd4, 0x5bdc, 
+    0x5be4, 0x5bec, 0x5bf4, 0x5bfb, 0x5c02, 0x5c06, 0x5c0a, 0x5c0e, 
+    0x5c12, 0x5c16, 0x5c1a, 0x5c1e, 0x5c22, 0x5c26, 0x5c2b, 0x5c2f, 
+    0x5c33, 0x5c37, 0x5c3b, 0x5c40, 0x5c44, 0x5c48, 0x5c4c, 0x5c51, 
+    0x5c55, 0x5c59, 0x5c5e, 0x5c62, 0x5c67, 0x5c6b, 0x5c6f, 0x5c74, 
+    0x5c78, 0x5c7d, 0x5c81, 0x5c86, 0x5c8a, 0x5c8f, 0x5c93, 0x5c98, 
+    0x5c9d, 0x5ca1, 0x5ca6, 0x5cab, 0x5caf, 0x5cb4, 0x5cb9, 0x5cbd, 
+    0x5cc2, 0x5cc7, 0x5ccc, 0x5cd0, 0x5cd5, 0x5cda, 0x5cdf, 0x5ce4, 
+    0x5ce9, 0x5cee, 0x5cf3, 0x5cf8, 0x5cfd, 0x5d02, 0x5d07, 0x5d0c, 
+    0x5d11, 0x5d16, 0x5d1b, 0x5d20, 0x5d25, 0x5d2a, 0x5d2f, 0x5d35, 
+    0x5d3a, 0x5d3f, 0x5d44, 0x5d4a, 0x5d4f, 0x5d54, 0x5d5a, 0x5d5f, 
+    0x5d64, 0x5d6a, 0x5d6f, 0x5d75, 0x5d7a, 0x5d80, 0x5d85, 0x5d8b, 
+    0x5d90, 0x5d96, 0x5d9b, 0x5da1, 0x5da7, 0x5dac, 0x5db2, 0x5db8, 
+    0x5dbd, 0x5dc3, 0x5dc9, 0x5dcf, 0x5dd4, 0x5dda, 0x5de0, 0x5de6, 
+    0x5dec, 0x5df2, 0x5df8, 0x5dfe, 0x5e04, 0x5e0a, 0x5e10, 0x5e16, 
+    0x5e1c, 0x5e22, 0x5e28, 0x5e2f, 0x5e35, 0x5e3b, 0x5e41, 0x5e47, 
+    0x5e4e, 0x5e54, 0x5e5a, 0x5e61, 0x5e67, 0x5e6e, 0x5e74, 0x5e7a, 
+    0x5e81, 0x5e87, 0x5e8e, 0x5e95, 0x5e9b, 0x5ea2, 0x5ea8, 0x5eaf, 
+    0x5eb6, 0x5ebd, 0x5ec3, 0x5eca, 0x5ed1, 0x5ed8, 0x5edf, 0x5ee5, 
+    0x5eec, 0x5ef3, 0x5efa, 0x5f01, 0x5f08, 0x5f0f, 0x5f16, 0x5f1d, 
+    0x5f25, 0x5f2c, 0x5f33, 0x5f3a, 0x5f41, 0x5f49, 0x5f50, 0x5f57, 
+    0x5f5f, 0x5f66, 0x5f6d, 0x5f75, 0x5f7c, 0x5f84, 0x5f8b, 0x5f93, 
+    0x5f9b, 0x5fa2, 0x5faa, 0x5fb1, 0x5fb9, 0x5fc1, 0x5fc9, 0x5fd0, 
+    0x5fd8, 0x5fe0, 0x5fe8, 0x5ff0, 0x5ff8, 0x6000, 0x6004, 0x6008, 
+    0x600c, 0x6010, 0x6014, 0x6018, 0x601c, 0x6020, 0x6025, 0x6029, 
+    0x602d, 0x6031, 0x6035, 0x603a, 0x603e, 0x6042, 0x6046, 0x604b, 
+    0x604f, 0x6053, 0x6057, 0x605c, 0x6060, 0x6065, 0x6069, 0x606d, 
+    0x6072, 0x6076, 0x607b, 0x607f, 0x6084, 0x6088, 0x608d, 0x6091, 
+    0x6096, 0x609b, 0x609f, 0x60a4, 0x60a8, 0x60ad, 0x60b2, 0x60b7, 
+    0x60bb, 0x60c0, 0x60c5, 0x60ca, 0x60ce, 0x60d3, 0x60d8, 0x60dd, 
+    0x60e2, 0x60e7, 0x60eb, 0x60f0, 0x60f5, 0x60fa, 0x60ff, 0x6104, 
+    0x6109, 0x610e, 0x6113, 0x6119, 0x611e, 0x6123, 0x6128, 0x612d, 
+    0x6132, 0x6137, 0x613d, 0x6142, 0x6147, 0x614d, 0x6152, 0x6157, 
+    0x615d, 0x6162, 0x6167, 0x616d, 0x6172, 0x6178, 0x617d, 0x6183, 
+    0x6188, 0x618e, 0x6193, 0x6199, 0x619e, 0x61a4, 0x61aa, 0x61af, 
+    0x61b5, 0x61bb, 0x61c0, 0x61c6, 0x61cc, 0x61d2, 0x61d8, 0x61de, 
+    0x61e3, 0x61e9, 0x61ef, 0x61f5, 0x61fb, 0x6201, 0x6207, 0x620d, 
+    0x6213, 0x6219, 0x621f, 0x6226, 0x622c, 0x6232, 0x6238, 0x623e, 
+    0x6245, 0x624b, 0x6251, 0x6258, 0x625e, 0x6264, 0x626b, 0x6271, 
+    0x6278, 0x627e, 0x6285, 0x628b, 0x6292, 0x6298, 0x629f, 0x62a5, 
+    0x62ac, 0x62b3, 0x62ba, 0x62c0, 0x62c7, 0x62ce, 0x62d5, 0x62db, 
+    0x62e2, 0x62e9, 0x62f0, 0x62f7, 0x62fe, 0x6305, 0x630c, 0x6313, 
+    0x631a, 0x6321, 0x6329, 0x6330, 0x6337, 0x633e, 0x6345, 0x634d, 
+    0x6354, 0x635b, 0x6363, 0x636a, 0x6372, 0x6379, 0x6380, 0x6388, 
+    0x6390, 0x6397, 0x639f, 0x63a6, 0x63ae, 0x63b6, 0x63bd, 0x63c5, 
+    0x63cd, 0x63d5, 0x63dd, 0x63e5, 0x63ec, 0x63f4, 0x63fc, 0x6402, 
+    0x6406, 0x640a, 0x640e, 0x6412, 0x6416, 0x641b, 0x641f, 0x6423, 
+    0x6427, 0x642b, 0x642f, 0x6433, 0x6438, 0x643c, 0x6440, 0x6444, 
+    0x6449, 0x644d, 0x6451, 0x6456, 0x645a, 0x645e, 0x6463, 0x6467, 
+    0x646b, 0x6470, 0x6474, 0x6479, 0x647d, 0x6482, 0x6486, 0x648b, 
+    0x648f, 0x6494, 0x6499, 0x649d, 0x64a2, 0x64a6, 0x64ab, 0x64b0, 
+    0x64b4, 0x64b9, 0x64be, 0x64c3, 0x64c7, 0x64cc, 0x64d1, 0x64d6, 
+    0x64db, 0x64e0, 0x64e4, 0x64e9, 0x64ee, 0x64f3, 0x64f8, 0x64fd, 
+    0x6502, 0x6507, 0x650c, 0x6511, 0x6516, 0x651b, 0x6520, 0x6526, 
+    0x652b, 0x6530, 0x6535, 0x653a, 0x6540, 0x6545, 0x654a, 0x654f, 
+    0x6555, 0x655a, 0x655f, 0x6565, 0x656a, 0x6570, 0x6575, 0x657b, 
+    0x6580, 0x6586, 0x658b, 0x6591, 0x6596, 0x659c, 0x65a1, 0x65a7, 
+    0x65ad, 0x65b2, 0x65b8, 0x65be, 0x65c4, 0x65c9, 0x65cf, 0x65d5, 
+    0x65db, 0x65e1, 0x65e7, 0x65ed, 0x65f3, 0x65f8, 0x65fe, 0x6604, 
+    0x660b, 0x6611, 0x6617, 0x661d, 0x6623, 0x6629, 0x662f, 0x6635, 
+    0x663c, 0x6642, 0x6648, 0x664e, 0x6655, 0x665b, 0x6661, 0x6668, 
+    0x666e, 0x6675, 0x667b, 0x6682, 0x6688, 0x668f, 0x6695, 0x669c, 
+    0x66a2, 0x66a9, 0x66b0, 0x66b7, 0x66bd, 0x66c4, 0x66cb, 0x66d2, 
+    0x66d8, 0x66df, 0x66e6, 0x66ed, 0x66f4, 0x66fb, 0x6702, 0x6709, 
+    0x6710, 0x6717, 0x671e, 0x6725, 0x672d, 0x6734, 0x673b, 0x6742, 
+    0x6749, 0x6751, 0x6758, 0x675f, 0x6767, 0x676e, 0x6776, 0x677d, 
+    0x6785, 0x678c, 0x6794, 0x679b, 0x67a3, 0x67ab, 0x67b2, 0x67ba, 
+    0x67c2, 0x67ca, 0x67d1, 0x67d9, 0x67e1, 0x67e9, 0x67f1, 0x67f9, 
+    0x6800, 0x6804, 0x6808, 0x680c, 0x6811, 0x6815, 0x6819, 0x681d, 
+    0x6821, 0x6825, 0x6829, 0x682d, 0x6832, 0x6836, 0x683a, 0x683e, 
+    0x6842, 0x6847, 0x684b, 0x684f, 0x6854, 0x6858, 0x685c, 0x6861, 
+    0x6865, 0x6869, 0x686e, 0x6872, 0x6877, 0x687b, 0x6880, 0x6884, 
+    0x6889, 0x688d, 0x6892, 0x6896, 0x689b, 0x68a0, 0x68a4, 0x68a9, 
+    0x68ae, 0x68b2, 0x68b7, 0x68bc, 0x68c0, 0x68c5, 0x68ca, 0x68cf, 
+    0x68d4, 0x68d8, 0x68dd, 0x68e2, 0x68e7, 0x68ec, 0x68f1, 0x68f6, 
+    0x68fb, 0x6900, 0x6905, 0x690a, 0x690f, 0x6914, 0x6919, 0x691e, 
+    0x6923, 0x6928, 0x692e, 0x6933, 0x6938, 0x693d, 0x6943, 0x6948, 
+    0x694d, 0x6952, 0x6958, 0x695d, 0x6962, 0x6968, 0x696d, 0x6973, 
+    0x6978, 0x697e, 0x6983, 0x6989, 0x698e, 0x6994, 0x6999, 0x699f, 
+    0x69a5, 0x69aa, 0x69b0, 0x69b6, 0x69bb, 0x69c1, 0x69c7, 0x69cd, 
+    0x69d2, 0x69de, 0x69ea, 0x69f6, 0x6a02, 0x6a0e, 0x6a1a, 0x6a26, 
+    0x6a33, 0x6a3f, 0x6a4c, 0x6a58, 0x6a65, 0x6a72, 0x6a7f, 0x6a8c, 
+    0x6a99, 0x6aa6, 0x6ab4, 0x6ac1, 0x6acf, 0x6adc, 0x6aea, 0x6af8, 
+    0x6b06, 0x6b14, 0x6b22, 0x6b30, 0x6b3f, 0x6b4d, 0x6b5c, 0x6b6b, 
+    0x6b7a, 0x6b89, 0x6b98, 0x6ba7, 0x6bb7, 0x6bc6, 0x6bd6, 0x6be5, 
+    0x6bf5, 0x6c03, 0x6c0b, 0x6c13, 0x6c1b, 0x6c23, 0x6c2c, 0x6c34, 
+    0x6c3c, 0x6c45, 0x6c4d, 0x6c56, 0x6c5f, 0x6c68, 0x6c70, 0x6c79, 
+    0x6c82, 0x6c8b, 0x6c94, 0x6c9e, 0x6ca7, 0x6cb0, 0x6cba, 0x6cc3, 
+    0x6ccd, 0x6cd6, 0x6ce0, 0x6cea, 0x6cf4, 0x6cfe, 0x6d08, 0x6d12, 
+    0x6d1c, 0x6d26, 0x6d31, 0x6d3b, 0x6d45, 0x6d50, 0x6d5b, 0x6d65, 
+    0x6d70, 0x6d7b, 0x6d86, 0x6d91, 0x6d9c, 0x6da8, 0x6db3, 0x6dbf, 
+    0x6dca, 0x6dd6, 0x6de1, 0x6ded, 0x6df9, 0x6e05, 0x6e11, 0x6e1d, 
+    0x6e2a, 0x6e36, 0x6e43, 0x6e4f, 0x6e5c, 0x6e69, 0x6e75, 0x6e82, 
+    0x6e8f, 0x6e9d, 0x6eaa, 0x6eb7, 0x6ec5, 0x6ed2, 0x6ee0, 0x6eee, 
+    0x6efc, 0x6f0a, 0x6f18, 0x6f26, 0x6f34, 0x6f43, 0x6f52, 0x6f60, 
+    0x6f6f, 0x6f7e, 0x6f8d, 0x6f9c, 0x6fab, 0x6fbb, 0x6fca, 0x6fda, 
+    0x6fea, 0x6ffa, 0x7005, 0x700d, 0x7015, 0x701d, 0x7025, 0x702e, 
+    0x7036, 0x703f, 0x7047, 0x7050, 0x7058, 0x7061, 0x706a, 0x7073, 
+    0x707c, 0x7085, 0x708e, 0x7097, 0x70a0, 0x70a9, 0x70b3, 0x70bc, 
+    0x70c6, 0x70cf, 0x70d9, 0x70e3, 0x70ed, 0x70f6, 0x7100, 0x710a, 
+    0x7115, 0x711f, 0x7129, 0x7133, 0x713e, 0x7148, 0x7153, 0x715e, 
+    0x7168, 0x7173, 0x717e, 0x7189, 0x7194, 0x71a0, 0x71ab, 0x71b6, 
+    0x71c2, 0x71cd, 0x71d9, 0x71e5, 0x71f1, 0x71fc, 0x7208, 0x7215, 
+    0x7221, 0x722d, 0x7239, 0x7246, 0x7253, 0x725f, 0x726c, 0x7279, 
+    0x7286, 0x7293, 0x72a0, 0x72ae, 0x72bb, 0x72c8, 0x72d6, 0x72e4, 
+    0x72f2, 0x7300, 0x730e, 0x731c, 0x732a, 0x7338, 0x7347, 0x7356, 
+    0x7364, 0x7373, 0x7382, 0x7391, 0x73a0, 0x73b0, 0x73bf, 0x73cf, 
+    0x73de, 0x73ee, 0x73fe, 0x7407, 0x740f, 0x7417, 0x7420, 0x7428, 
+    0x7430, 0x7439, 0x7441, 0x744a, 0x7452, 0x745b, 0x7464, 0x746c, 
+    0x7475, 0x747e, 0x7487, 0x7490, 0x749a, 0x74a3, 0x74ac, 0x74b5, 
+    0x74bf, 0x74c8, 0x74d2, 0x74dc, 0x74e5, 0x74ef, 0x74f9, 0x7503, 
+    0x750d, 0x7517, 0x7522, 0x752c, 0x7536, 0x7541, 0x754b, 0x7556, 
+    0x7561, 0x756b, 0x7576, 0x7581, 0x758c, 0x7597, 0x75a3, 0x75ae, 
+    0x75b9, 0x75c5, 0x75d1, 0x75dc, 0x75e8, 0x75f4, 0x7600, 0x760c, 
+    0x7618, 0x7624, 0x7631, 0x763d, 0x7649, 0x7656, 0x7663, 0x7670, 
+    0x767d, 0x768a, 0x7697, 0x76a4, 0x76b1, 0x76bf, 0x76cc, 0x76da, 
+    0x76e8, 0x76f6, 0x7703, 0x7712, 0x7720, 0x772e, 0x773c, 0x774b, 
+    0x775a, 0x7768, 0x7777, 0x7786, 0x7795, 0x77a5, 0x77b4, 0x77c3, 
+    0x77d3, 0x77e3, 0x77f3, 0x7801, 0x7809, 0x7811, 0x781a, 0x7822, 
+    0x782a, 0x7832, 0x783b, 0x7843, 0x784c, 0x7855, 0x785d, 0x7866, 
+    0x786f, 0x7878, 0x7881, 0x788a, 0x7893, 0x789c, 0x78a5, 0x78af, 
+    0x78b8, 0x78c2, 0x78cb, 0x78d5, 0x78de, 0x78e8, 0x78f2, 0x78fc, 
+    0x7906, 0x7910, 0x791a, 0x7924, 0x792f, 0x7939, 0x7944, 0x794e, 
+    0x7959, 0x7964, 0x796e, 0x7979, 0x7984, 0x798f, 0x799b, 0x79a6, 
+    0x79b1, 0x79bd, 0x79c8, 0x79d4, 0x79df, 0x79eb, 0x79f7, 0x7a03, 
+    0x7a0f, 0x7a1b, 0x7a28, 0x7a34, 0x7a40, 0x7a4d, 0x7a5a, 0x7a66, 
+    0x7a73, 0x7a80, 0x7a8d, 0x7a9a, 0x7aa8, 0x7ab5, 0x7ac2, 0x7ad0, 
+    0x7ade, 0x7aeb, 0x7af9, 0x7b07, 0x7b16, 0x7b24, 0x7b32, 0x7b41, 
+    0x7b4f, 0x7b5e, 0x7b6d, 0x7b7b, 0x7b8a, 0x7b9a, 0x7ba9, 0x7bb8, 
+    0x7bc8, 0x7bd7, 0x7be7, 0x7bf7, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 
+    0x3c00, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 
+    0x3bff, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 
+    0x3bfe, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 
+    0x3bfd, 0x3bfd, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 
+    0x3bfc, 0x3bfc, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 
+    0x3bfb, 0x3bfb, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 
+    0x3bfa, 0x3bfa, 0x3bfa, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 
+    0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 
+    0x3bf8, 0x3bf8, 0x3bf8, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 
+    0x3bf7, 0x3bf7, 0x3bf7, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 
+    0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 
+    0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 
+    0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 
+    0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 
+    0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 
+    0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 
+    0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 
+    0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 
+    0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 
+    0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 
+    0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 
+    0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 
+    0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 
+    0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 
+    0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 
+    0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 
+    0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bef, 0x3bef, 0x3bef, 
+    0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 
+    0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 
+    0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 
+    0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 
+    0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 
+    0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 
+    0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 
+    0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bee, 0x3bee, 0x3bee, 
+    0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 
+    0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 
+    0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 
+    0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 
+    0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 
+    0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 
+    0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 
+    0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bed, 0x3bed, 
+    0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 
+    0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 
+    0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 
+    0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 
+    0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 
+    0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 
+    0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 
+    0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bec, 0x3bec, 
+    0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 
+    0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 
+    0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 
+    0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 
+    0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 
+    0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 
+    0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 
+    0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3beb, 
+    0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 
+    0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 
+    0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 
+    0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 
+    0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 
+    0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 
+    0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 
+    0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 
+    0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 
+    0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 
+    0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 
+    0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 
+    0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 
+    0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 
+    0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 
+    0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 
+    0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 
+    0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 
+    0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 
+    0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 
+    0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 
+    0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 
+    0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 
+    0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 
+    0x3be9, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 
+    0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 
+    0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 
+    0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 
+    0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 
+    0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 
+    0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 
+    0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 
+    0x3be8, 0x3be8, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 
+    0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 
+    0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 
+    0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 
+    0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 
+    0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 
+    0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 
+    0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 
+    0x3be7, 0x3be7, 0x3be7, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 
+    0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 
+    0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 
+    0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 
+    0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 
+    0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 
+    0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 
+    0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 
+    0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 
+    0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 
+    0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 
+    0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 
+    0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 
+    0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 
+    0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 
+    0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 
+    0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 
+    0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 
+    0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 
+    0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 
+    0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 
+    0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 
+    0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 
+    0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 
+    0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be3, 0x3be3, 0x3be3, 
+    0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 
+    0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 
+    0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 
+    0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 
+    0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 
+    0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 
+    0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 
+    0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be2, 0x3be2, 
+    0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 
+    0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 
+    0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 
+    0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 
+    0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 
+    0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 
+    0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 
+    0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be1, 
+    0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 
+    0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 
+    0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 
+    0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 
+    0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 
+    0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 
+    0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 
+    0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 
+    0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 
+    0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 
+    0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 
+    0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 
+    0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 
+    0x3be0, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 
+    0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 
+    0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 
+    0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 
+    0x3bdf, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 
+    0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 
+    0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 
+    0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 
+    0x3bde, 0x3bde, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 
+    0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 
+    0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 
+    0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 
+    0x3bdd, 0x3bdd, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 
+    0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 
+    0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 
+    0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 
+    0x3bdc, 0x3bdc, 0x3bdc, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 
+    0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 
+    0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 
+    0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 
+    0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 
+    0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 
+    0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 
+    0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 
+    0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 
+    0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 
+    0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 
+    0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 
+    0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd8, 0x3bd8, 0x3bd8, 
+    0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 
+    0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 
+    0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 
+    0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd7, 0x3bd7, 0x3bd7, 
+    0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 
+    0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 
+    0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 
+    0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd6, 0x3bd6, 
+    0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 
+    0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 
+    0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 
+    0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd5, 
+    0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 
+    0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 
+    0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 
+    0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd4, 
+    0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 
+    0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 
+    0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 
+    0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 
+    0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 
+    0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 
+    0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 
+    0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 
+    0x3bd3, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 
+    0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 
+    0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 
+    0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 
+    0x3bd2, 0x3bd2, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 
+    0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 
+    0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 
+    0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 
+    0x3bd1, 0x3bd1, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 
+    0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 
+    0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 
+    0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 
+    0x3bd0, 0x3bd0, 0x3bd0, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 
+    0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 
+    0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 
+    0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 
+    0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 
+    0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 
+    0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 
+    0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 
+    0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bcd, 0x3bcd, 0x3bcd, 
+    0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 
+    0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 
+    0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 
+    0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcc, 0x3bcc, 
+    0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 
+    0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 
+    0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 
+    0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcb, 0x3bcb, 
+    0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 
+    0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 
+    0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 
+    0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bca, 
+    0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 
+    0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 
+    0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 
+    0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 
+    0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 
+    0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 
+    0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 
+    0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 
+    0x3bc9, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 
+    0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 
+    0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 
+    0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 
+    0x3bc8, 0x3bc8, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 
+    0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 
+    0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 
+    0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 
+    0x3bc7, 0x3bc7, 0x3bc7, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 
+    0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 
+    0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 
+    0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 
+    0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 
+    0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 
+    0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 
+    0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 
+    0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc4, 0x3bc4, 0x3bc4, 
+    0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 
+    0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 
+    0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 
+    0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc3, 0x3bc3, 
+    0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 
+    0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 
+    0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 
+    0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc2, 
+    0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 
+    0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 
+    0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 
+    0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 
+    0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 
+    0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 
+    0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 
+    0x3bc1, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 
+    0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 
+    0x3bc0, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 
+    0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 
+    0x3bbf, 0x3bbf, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 
+    0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 
+    0x3bbe, 0x3bbe, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 
+    0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 
+    0x3bbd, 0x3bbd, 0x3bbd, 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, 
+    0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, 
+    0x3bbc, 0x3bbc, 0x3bbc, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 
+    0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 
+    0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bba, 0x3bba, 0x3bba, 0x3bba, 
+    0x3bba, 0x3bba, 0x3bba, 0x3bba, 0x3bba, 0x3bba, 0x3bba, 0x3bba, 
+    0x3bba, 0x3bba, 0x3bba, 0x3bba, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 
+    0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 
+    0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb8, 0x3bb8, 0x3bb8, 
+    0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 
+    0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb7, 0x3bb7, 
+    0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 
+    0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb6, 0x3bb6, 
+    0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 
+    0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb5, 
+    0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 
+    0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb4, 
+    0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 
+    0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 
+    0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 
+    0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 
+    0x3bb3, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 
+    0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 
+    0x3bb2, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 
+    0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 
+    0x3bb1, 0x3bb1, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 
+    0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 
+    0x3bb0, 0x3bb0, 0x3baf, 0x3baf, 0x3baf, 0x3baf, 0x3baf, 0x3baf, 
+    0x3baf, 0x3baf, 0x3baf, 0x3baf, 0x3baf, 0x3baf, 0x3baf, 0x3baf, 
+    0x3baf, 0x3baf, 0x3baf, 0x3bae, 0x3bae, 0x3bae, 0x3bae, 0x3bae, 
+    0x3bae, 0x3bae, 0x3bae, 0x3bae, 0x3bae, 0x3bae, 0x3bae, 0x3bae, 
+    0x3bae, 0x3bae, 0x3bae, 0x3bae, 0x3bad, 0x3bad, 0x3bad, 0x3bad, 
+    0x3bad, 0x3bad, 0x3bad, 0x3bad, 0x3bad, 0x3bad, 0x3bad, 0x3bad, 
+    0x3bad, 0x3bad, 0x3bad, 0x3bad, 0x3bac, 0x3bac, 0x3bac, 0x3bac, 
+    0x3bac, 0x3bac, 0x3bac, 0x3bac, 0x3bac, 0x3bac, 0x3bac, 0x3bac, 
+    0x3bac, 0x3bac, 0x3bac, 0x3bac, 0x3bac, 0x3bab, 0x3bab, 0x3bab, 
+    0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3bab, 
+    0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3baa, 0x3baa, 
+    0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, 
+    0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3ba9, 
+    0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 
+    0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba8, 
+    0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 
+    0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 
+    0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 
+    0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 
+    0x3ba7, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 
+    0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 
+    0x3ba6, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 
+    0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 
+    0x3ba5, 0x3ba5, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 
+    0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 
+    0x3ba4, 0x3ba4, 0x3ba4, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 
+    0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 
+    0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 
+    0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 
+    0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 
+    0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 
+    0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba0, 0x3ba0, 0x3ba0, 
+    0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 
+    0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3b9f, 0x3b9f, 
+    0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 
+    0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9e, 
+    0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 
+    0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 
+    0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 
+    0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 
+    0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 
+    0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 
+    0x3b9c, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 
+    0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 
+    0x3b9b, 0x3b9b, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 
+    0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 
+    0x3b9a, 0x3b9a, 0x3b9a, 0x3b99, 0x3b99, 0x3b99, 0x3b99, 0x3b99, 
+    0x3b99, 0x3b99, 0x3b99, 0x3b99, 0x3b99, 0x3b99, 0x3b99, 0x3b99, 
+    0x3b99, 0x3b99, 0x3b99, 0x3b99, 0x3b98, 0x3b98, 0x3b98, 0x3b98, 
+    0x3b98, 0x3b98, 0x3b98, 0x3b98, 0x3b98, 0x3b98, 0x3b98, 0x3b98, 
+    0x3b98, 0x3b98, 0x3b98, 0x3b98, 0x3b98, 0x3b97, 0x3b97, 0x3b97, 
+    0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b97, 
+    0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b96, 0x3b96, 
+    0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b96, 
+    0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b95, 0x3b95, 
+    0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, 
+    0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b94, 
+    0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 
+    0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 
+    0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 
+    0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 
+    0x3b93, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 
+    0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 
+    0x3b92, 0x3b92, 0x3b91, 0x3b91, 0x3b91, 0x3b91, 0x3b91, 0x3b91, 
+    0x3b91, 0x3b91, 0x3b91, 0x3b91, 0x3b91, 0x3b91, 0x3b91, 0x3b91, 
+    0x3b91, 0x3b91, 0x3b91, 0x3b90, 0x3b90, 0x3b90, 0x3b90, 0x3b90, 
+    0x3b90, 0x3b90, 0x3b90, 0x3b90, 0x3b90, 0x3b90, 0x3b90, 0x3b90, 
+    0x3b90, 0x3b90, 0x3b90, 0x3b90, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 
+    0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 
+    0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8e, 0x3b8e, 0x3b8e, 
+    0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 
+    0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8d, 0x3b8d, 
+    0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 
+    0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8c, 
+    0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 
+    0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 
+    0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 
+    0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 
+    0x3b8b, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 
+    0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 
+    0x3b8a, 0x3b8a, 0x3b89, 0x3b89, 0x3b89, 0x3b89, 0x3b89, 0x3b89, 
+    0x3b89, 0x3b89, 0x3b89, 0x3b89, 0x3b89, 0x3b89, 0x3b89, 0x3b89, 
+    0x3b89, 0x3b89, 0x3b89, 0x3b88, 0x3b88, 0x3b88, 0x3b88, 0x3b88, 
+    0x3b88, 0x3b88, 0x3b88, 0x3b88, 0x3b88, 0x3b88, 0x3b88, 0x3b88, 
+    0x3b88, 0x3b88, 0x3b88, 0x3b88, 0x3b87, 0x3b87, 0x3b87, 0x3b87, 
+    0x3b87, 0x3b87, 0x3b87, 0x3b87, 0x3b87, 0x3b87, 0x3b87, 0x3b87, 
+    0x3b87, 0x3b87, 0x3b87, 0x3b87, 0x3b87, 0x3b86, 0x3b86, 0x3b86, 
+    0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b86, 
+    0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b85, 0x3b85, 
+    0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, 
+    0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b84, 
+    0x3b84, 0x3b84, 0x3b84, 0x3b84, 0x3b84, 0x3b84, 0x3b84, 0x3b84, 
+    0x3b84, 0x3b84, 0x3b84, 0x3b84, 0x3b83, 0x3b83, 0x3b83, 0x3b83, 
+    0x3b83, 0x3b83, 0x3b83, 0x3b83, 0x3b83, 0x3b82, 0x3b82, 0x3b82, 
+    0x3b82, 0x3b82, 0x3b82, 0x3b82, 0x3b82, 0x3b81, 0x3b81, 0x3b81, 
+    0x3b81, 0x3b81, 0x3b81, 0x3b81, 0x3b81, 0x3b81, 0x3b80, 0x3b80, 
+    0x3b80, 0x3b80, 0x3b80, 0x3b80, 0x3b80, 0x3b80, 0x3b7f, 0x3b7f, 
+    0x3b7f, 0x3b7f, 0x3b7f, 0x3b7f, 0x3b7f, 0x3b7f, 0x3b7f, 0x3b7e, 
+    0x3b7e, 0x3b7e, 0x3b7e, 0x3b7e, 0x3b7e, 0x3b7e, 0x3b7e, 0x3b7d, 
+    0x3b7d, 0x3b7d, 0x3b7d, 0x3b7d, 0x3b7d, 0x3b7d, 0x3b7d, 0x3b7d, 
+    0x3b7c, 0x3b7c, 0x3b7c, 0x3b7c, 0x3b7c, 0x3b7c, 0x3b7c, 0x3b7c, 
+    0x3b7b, 0x3b7b, 0x3b7b, 0x3b7b, 0x3b7b, 0x3b7b, 0x3b7b, 0x3b7b, 
+    0x3b7b, 0x3b7a, 0x3b7a, 0x3b7a, 0x3b7a, 0x3b7a, 0x3b7a, 0x3b7a, 
+    0x3b7a, 0x3b79, 0x3b79, 0x3b79, 0x3b79, 0x3b79, 0x3b79, 0x3b79, 
+    0x3b79, 0x3b79, 0x3b78, 0x3b78, 0x3b78, 0x3b78, 0x3b78, 0x3b78, 
+    0x3b78, 0x3b78, 0x3b78, 0x3b77, 0x3b77, 0x3b77, 0x3b77, 0x3b77, 
+    0x3b77, 0x3b77, 0x3b77, 0x3b76, 0x3b76, 0x3b76, 0x3b76, 0x3b76, 
+    0x3b76, 0x3b76, 0x3b76, 0x3b76, 0x3b75, 0x3b75, 0x3b75, 0x3b75, 
+    0x3b75, 0x3b75, 0x3b75, 0x3b75, 0x3b74, 0x3b74, 0x3b74, 0x3b74, 
+    0x3b74, 0x3b74, 0x3b74, 0x3b74, 0x3b74, 0x3b73, 0x3b73, 0x3b73, 
+    0x3b73, 0x3b73, 0x3b73, 0x3b73, 0x3b73, 0x3b73, 0x3b72, 0x3b72, 
+    0x3b72, 0x3b72, 0x3b72, 0x3b72, 0x3b72, 0x3b72, 0x3b71, 0x3b71, 
+    0x3b71, 0x3b71, 0x3b71, 0x3b71, 0x3b71, 0x3b71, 0x3b71, 0x3b70, 
+    0x3b70, 0x3b70, 0x3b70, 0x3b70, 0x3b70, 0x3b70, 0x3b70, 0x3b6f, 
+    0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 
+    0x3b6e, 0x3b6e, 0x3b6e, 0x3b6e, 0x3b6e, 0x3b6e, 0x3b6e, 0x3b6e, 
+    0x3b6e, 0x3b6d, 0x3b6d, 0x3b6d, 0x3b6d, 0x3b6d, 0x3b6d, 0x3b6d, 
+    0x3b6d, 0x3b6c, 0x3b6c, 0x3b6c, 0x3b6c, 0x3b6c, 0x3b6c, 0x3b6c, 
+    0x3b6c, 0x3b6c, 0x3b6b, 0x3b6b, 0x3b6b, 0x3b6b, 0x3b6b, 0x3b6b, 
+    0x3b6b, 0x3b6b, 0x3b6a, 0x3b6a, 0x3b6a, 0x3b6a, 0x3b6a, 0x3b6a, 
+    0x3b6a, 0x3b6a, 0x3b6a, 0x3b69, 0x3b69, 0x3b69, 0x3b69, 0x3b69, 
+    0x3b69, 0x3b69, 0x3b69, 0x3b69, 0x3b68, 0x3b68, 0x3b68, 0x3b68, 
+    0x3b68, 0x3b68, 0x3b68, 0x3b68, 0x3b67, 0x3b67, 0x3b67, 0x3b67, 
+    0x3b67, 0x3b67, 0x3b67, 0x3b67, 0x3b67, 0x3b66, 0x3b66, 0x3b66, 
+    0x3b66, 0x3b66, 0x3b66, 0x3b66, 0x3b66, 0x3b66, 0x3b65, 0x3b65, 
+    0x3b65, 0x3b65, 0x3b65, 0x3b65, 0x3b65, 0x3b65, 0x3b64, 0x3b64, 
+    0x3b64, 0x3b64, 0x3b64, 0x3b64, 0x3b64, 0x3b64, 0x3b64, 0x3b63, 
+    0x3b63, 0x3b63, 0x3b63, 0x3b63, 0x3b63, 0x3b63, 0x3b63, 0x3b63, 
+    0x3b62, 0x3b62, 0x3b62, 0x3b62, 0x3b62, 0x3b62, 0x3b62, 0x3b62, 
+    0x3b61, 0x3b61, 0x3b61, 0x3b61, 0x3b61, 0x3b61, 0x3b61, 0x3b61, 
+    0x3b61, 0x3b60, 0x3b60, 0x3b60, 0x3b60, 0x3b60, 0x3b60, 0x3b60, 
+    0x3b60, 0x3b60, 0x3b5f, 0x3b5f, 0x3b5f, 0x3b5f, 0x3b5f, 0x3b5f, 
+    0x3b5f, 0x3b5f, 0x3b5e, 0x3b5e, 0x3b5e, 0x3b5e, 0x3b5e, 0x3b5e, 
+    0x3b5e, 0x3b5e, 0x3b5e, 0x3b5d, 0x3b5d, 0x3b5d, 0x3b5d, 0x3b5d, 
+    0x3b5d, 0x3b5d, 0x3b5d, 0x3b5d, 0x3b5c, 0x3b5c, 0x3b5c, 0x3b5c, 
+    0x3b5c, 0x3b5c, 0x3b5c, 0x3b5c, 0x3b5b, 0x3b5b, 0x3b5b, 0x3b5b, 
+    0x3b5b, 0x3b5b, 0x3b5b, 0x3b5b, 0x3b5b, 0x3b5a, 0x3b5a, 0x3b5a, 
+    0x3b5a, 0x3b5a, 0x3b5a, 0x3b5a, 0x3b5a, 0x3b5a, 0x3b59, 0x3b59, 
+    0x3b59, 0x3b59, 0x3b59, 0x3b59, 0x3b59, 0x3b59, 0x3b58, 0x3b58, 
+    0x3b58, 0x3b58, 0x3b58, 0x3b58, 0x3b58, 0x3b58, 0x3b58, 0x3b57, 
+    0x3b57, 0x3b57, 0x3b57, 0x3b57, 0x3b57, 0x3b57, 0x3b57, 0x3b57, 
+    0x3b56, 0x3b56, 0x3b56, 0x3b56, 0x3b56, 0x3b56, 0x3b56, 0x3b56, 
+    0x3b56, 0x3b55, 0x3b55, 0x3b55, 0x3b55, 0x3b55, 0x3b55, 0x3b55, 
+    0x3b55, 0x3b54, 0x3b54, 0x3b54, 0x3b54, 0x3b54, 0x3b54, 0x3b54, 
+    0x3b54, 0x3b54, 0x3b53, 0x3b53, 0x3b53, 0x3b53, 0x3b53, 0x3b53, 
+    0x3b53, 0x3b53, 0x3b53, 0x3b52, 0x3b52, 0x3b52, 0x3b52, 0x3b52, 
+    0x3b52, 0x3b52, 0x3b52, 0x3b52, 0x3b51, 0x3b51, 0x3b51, 0x3b51, 
+    0x3b51, 0x3b51, 0x3b51, 0x3b51, 0x3b50, 0x3b50, 0x3b50, 0x3b50, 
+    0x3b50, 0x3b50, 0x3b50, 0x3b50, 0x3b50, 0x3b4f, 0x3b4f, 0x3b4f, 
+    0x3b4f, 0x3b4f, 0x3b4f, 0x3b4f, 0x3b4f, 0x3b4f, 0x3b4e, 0x3b4e, 
+    0x3b4e, 0x3b4e, 0x3b4e, 0x3b4e, 0x3b4e, 0x3b4e, 0x3b4e, 0x3b4d, 
+    0x3b4d, 0x3b4d, 0x3b4d, 0x3b4d, 0x3b4d, 0x3b4d, 0x3b4d, 0x3b4c, 
+    0x3b4c, 0x3b4c, 0x3b4c, 0x3b4c, 0x3b4c, 0x3b4c, 0x3b4c, 0x3b4c, 
+    0x3b4b, 0x3b4b, 0x3b4b, 0x3b4b, 0x3b4b, 0x3b4b, 0x3b4b, 0x3b4b, 
+    0x3b4b, 0x3b4a, 0x3b4a, 0x3b4a, 0x3b4a, 0x3b4a, 0x3b4a, 0x3b4a, 
+    0x3b4a, 0x3b4a, 0x3b49, 0x3b49, 0x3b49, 0x3b49, 0x3b49, 0x3b49, 
+    0x3b49, 0x3b49, 0x3b48, 0x3b48, 0x3b48, 0x3b48, 0x3b48, 0x3b48, 
+    0x3b48, 0x3b48, 0x3b48, 0x3b47, 0x3b47, 0x3b47, 0x3b47, 0x3b47, 
+    0x3b47, 0x3b47, 0x3b47, 0x3b47, 0x3b46, 0x3b46, 0x3b46, 0x3b46, 
+    0x3b46, 0x3b46, 0x3b46, 0x3b46, 0x3b46, 0x3b45, 0x3b45, 0x3b45, 
+    0x3b45, 0x3b45, 0x3b45, 0x3b45, 0x3b45, 0x3b45, 0x3b44, 0x3b44, 
+    0x3b44, 0x3b44, 0x3b44, 0x3b44, 0x3b44, 0x3b44, 0x3b43, 0x3b43, 
+    0x3b43, 0x3b43, 0x3b43, 0x3b43, 0x3b43, 0x3b43, 0x3b43, 0x3b42, 
+    0x3b42, 0x3b42, 0x3b42, 0x3b42, 0x3b42, 0x3b42, 0x3b42, 0x3b42, 
+    0x3b41, 0x3b41, 0x3b41, 0x3b41, 0x3b41, 0x3b41, 0x3b41, 0x3b41, 
+    0x3b41, 0x3b40, 0x3b40, 0x3b40, 0x3b40, 0x3b40, 0x3b40, 0x3b40, 
+    0x3b40, 0x3b40, 0x3b3f, 0x3b3f, 0x3b3f, 0x3b3f, 0x3b3f, 0x3b3f, 
+    0x3b3f, 0x3b3f, 0x3b3f, 0x3b3e, 0x3b3e, 0x3b3e, 0x3b3e, 0x3b3e, 
+    0x3b3e, 0x3b3e, 0x3b3e, 0x3b3d, 0x3b3d, 0x3b3d, 0x3b3d, 0x3b3d, 
+    0x3b3d, 0x3b3d, 0x3b3d, 0x3b3d, 0x3b3c, 0x3b3c, 0x3b3c, 0x3b3c, 
+    0x3b3c, 0x3b3c, 0x3b3c, 0x3b3c, 0x3b3c, 0x3b3b, 0x3b3b, 0x3b3b, 
+    0x3b3b, 0x3b3b, 0x3b3b, 0x3b3b, 0x3b3b, 0x3b3b, 0x3b3a, 0x3b3a, 
+    0x3b3a, 0x3b3a, 0x3b3a, 0x3b3a, 0x3b3a, 0x3b3a, 0x3b3a, 0x3b39, 
+    0x3b39, 0x3b39, 0x3b39, 0x3b39, 0x3b39, 0x3b39, 0x3b39, 0x3b39, 
+    0x3b38, 0x3b38, 0x3b38, 0x3b38, 0x3b38, 0x3b38, 0x3b38, 0x3b38, 
+    0x3b38, 0x3b37, 0x3b37, 0x3b37, 0x3b37, 0x3b37, 0x3b37, 0x3b37, 
+    0x3b37, 0x3b36, 0x3b36, 0x3b36, 0x3b36, 0x3b36, 0x3b36, 0x3b36, 
+    0x3b36, 0x3b36, 0x3b35, 0x3b35, 0x3b35, 0x3b35, 0x3b35, 0x3b35, 
+    0x3b35, 0x3b35, 0x3b35, 0x3b34, 0x3b34, 0x3b34, 0x3b34, 0x3b34, 
+    0x3b34, 0x3b34, 0x3b34, 0x3b34, 0x3b33, 0x3b33, 0x3b33, 0x3b33, 
+    0x3b33, 0x3b33, 0x3b33, 0x3b33, 0x3b33, 0x3b32, 0x3b32, 0x3b32, 
+    0x3b32, 0x3b32, 0x3b32, 0x3b32, 0x3b32, 0x3b32, 0x3b31, 0x3b31, 
+    0x3b31, 0x3b31, 0x3b31, 0x3b31, 0x3b31, 0x3b31, 0x3b31, 0x3b30, 
+    0x3b30, 0x3b30, 0x3b30, 0x3b30, 0x3b30, 0x3b30, 0x3b30, 0x3b30, 
+    0x3b2f, 0x3b2f, 0x3b2f, 0x3b2f, 0x3b2f, 0x3b2f, 0x3b2f, 0x3b2f, 
+    0x3b2f, 0x3b2e, 0x3b2e, 0x3b2e, 0x3b2e, 0x3b2e, 0x3b2e, 0x3b2e, 
+    0x3b2e, 0x3b2d, 0x3b2d, 0x3b2d, 0x3b2d, 0x3b2d, 0x3b2d, 0x3b2d, 
+    0x3b2d, 0x3b2d, 0x3b2c, 0x3b2c, 0x3b2c, 0x3b2c, 0x3b2c, 0x3b2c, 
+    0x3b2c, 0x3b2c, 0x3b2c, 0x3b2b, 0x3b2b, 0x3b2b, 0x3b2b, 0x3b2b, 
+    0x3b2b, 0x3b2b, 0x3b2b, 0x3b2b, 0x3b2a, 0x3b2a, 0x3b2a, 0x3b2a, 
+    0x3b2a, 0x3b2a, 0x3b2a, 0x3b2a, 0x3b2a, 0x3b29, 0x3b29, 0x3b29, 
+    0x3b29, 0x3b29, 0x3b29, 0x3b29, 0x3b29, 0x3b29, 0x3b28, 0x3b28, 
+    0x3b28, 0x3b28, 0x3b28, 0x3b28, 0x3b28, 0x3b28, 0x3b28, 0x3b27, 
+    0x3b27, 0x3b27, 0x3b27, 0x3b27, 0x3b27, 0x3b27, 0x3b27, 0x3b27, 
+    0x3b26, 0x3b26, 0x3b26, 0x3b26, 0x3b26, 0x3b26, 0x3b26, 0x3b26, 
+    0x3b26, 0x3b25, 0x3b25, 0x3b25, 0x3b25, 0x3b25, 0x3b25, 0x3b25, 
+    0x3b25, 0x3b25, 0x3b24, 0x3b24, 0x3b24, 0x3b24, 0x3b24, 0x3b24, 
+    0x3b24, 0x3b24, 0x3b24, 0x3b23, 0x3b23, 0x3b23, 0x3b23, 0x3b23, 
+    0x3b23, 0x3b23, 0x3b23, 0x3b23, 0x3b22, 0x3b22, 0x3b22, 0x3b22, 
+    0x3b22, 0x3b22, 0x3b22, 0x3b22, 0x3b22, 0x3b21, 0x3b21, 0x3b21, 
+    0x3b21, 0x3b21, 0x3b21, 0x3b21, 0x3b21, 0x3b21, 0x3b20, 0x3b20, 
+    0x3b20, 0x3b20, 0x3b20, 0x3b20, 0x3b20, 0x3b20, 0x3b20, 0x3b1f, 
+    0x3b1f, 0x3b1f, 0x3b1f, 0x3b1f, 0x3b1f, 0x3b1f, 0x3b1f, 0x3b1f, 
+    0x3b1e, 0x3b1e, 0x3b1e, 0x3b1e, 0x3b1e, 0x3b1e, 0x3b1e, 0x3b1e, 
+    0x3b1e, 0x3b1d, 0x3b1d, 0x3b1d, 0x3b1d, 0x3b1d, 0x3b1d, 0x3b1d, 
+    0x3b1d, 0x3b1d, 0x3b1c, 0x3b1c, 0x3b1c, 0x3b1c, 0x3b1c, 0x3b1c, 
+    0x3b1c, 0x3b1c, 0x3b1c, 0x3b1b, 0x3b1b, 0x3b1b, 0x3b1b, 0x3b1b, 
+    0x3b1b, 0x3b1b, 0x3b1b, 0x3b1b, 0x3b1a, 0x3b1a, 0x3b1a, 0x3b1a, 
+    0x3b1a, 0x3b1a, 0x3b1a, 0x3b1a, 0x3b1a, 0x3b19, 0x3b19, 0x3b19, 
+    0x3b19, 0x3b19, 0x3b19, 0x3b19, 0x3b19, 0x3b19, 0x3b18, 0x3b18, 
+    0x3b18, 0x3b18, 0x3b18, 0x3b18, 0x3b18, 0x3b18, 0x3b18, 0x3b17, 
+    0x3b17, 0x3b17, 0x3b17, 0x3b17, 0x3b17, 0x3b17, 0x3b17, 0x3b17, 
+    0x3b16, 0x3b16, 0x3b16, 0x3b16, 0x3b16, 0x3b16, 0x3b16, 0x3b16, 
+    0x3b16, 0x3b15, 0x3b15, 0x3b15, 0x3b15, 0x3b15, 0x3b15, 0x3b15, 
+    0x3b15, 0x3b15, 0x3b14, 0x3b14, 0x3b14, 0x3b14, 0x3b14, 0x3b14, 
+    0x3b14, 0x3b14, 0x3b14, 0x3b13, 0x3b13, 0x3b13, 0x3b13, 0x3b13, 
+    0x3b13, 0x3b13, 0x3b13, 0x3b13, 0x3b12, 0x3b12, 0x3b12, 0x3b12, 
+    0x3b12, 0x3b12, 0x3b12, 0x3b12, 0x3b12, 0x3b11, 0x3b11, 0x3b11, 
+    0x3b11, 0x3b11, 0x3b11, 0x3b11, 0x3b11, 0x3b11, 0x3b10, 0x3b10, 
+    0x3b10, 0x3b10, 0x3b10, 0x3b10, 0x3b10, 0x3b10, 0x3b10, 0x3b0f, 
+    0x3b0f, 0x3b0f, 0x3b0f, 0x3b0f, 0x3b0e, 0x3b0e, 0x3b0e, 0x3b0e, 
+    0x3b0e, 0x3b0d, 0x3b0d, 0x3b0d, 0x3b0d, 0x3b0c, 0x3b0c, 0x3b0c, 
+    0x3b0c, 0x3b0c, 0x3b0b, 0x3b0b, 0x3b0b, 0x3b0b, 0x3b0b, 0x3b0a, 
+    0x3b0a, 0x3b0a, 0x3b0a, 0x3b09, 0x3b09, 0x3b09, 0x3b09, 0x3b09, 
+    0x3b08, 0x3b08, 0x3b08, 0x3b08, 0x3b07, 0x3b07, 0x3b07, 0x3b07, 
+    0x3b07, 0x3b06, 0x3b06, 0x3b06, 0x3b06, 0x3b05, 0x3b05, 0x3b05, 
+    0x3b05, 0x3b05, 0x3b04, 0x3b04, 0x3b04, 0x3b04, 0x3b03, 0x3b03, 
+    0x3b03, 0x3b03, 0x3b03, 0x3b02, 0x3b02, 0x3b02, 0x3b02, 0x3b02, 
+    0x3b01, 0x3b01, 0x3b01, 0x3b01, 0x3b00, 0x3b00, 0x3b00, 0x3b00, 
+    0x3b00, 0x3aff, 0x3aff, 0x3aff, 0x3aff, 0x3afe, 0x3afe, 0x3afe, 
+    0x3afe, 0x3afe, 0x3afd, 0x3afd, 0x3afd, 0x3afd, 0x3afc, 0x3afc, 
+    0x3afc, 0x3afc, 0x3afc, 0x3afb, 0x3afb, 0x3afb, 0x3afb, 0x3afb, 
+    0x3afa, 0x3afa, 0x3afa, 0x3afa, 0x3af9, 0x3af9, 0x3af9, 0x3af9, 
+    0x3af9, 0x3af8, 0x3af8, 0x3af8, 0x3af8, 0x3af7, 0x3af7, 0x3af7, 
+    0x3af7, 0x3af7, 0x3af6, 0x3af6, 0x3af6, 0x3af6, 0x3af6, 0x3af5, 
+    0x3af5, 0x3af5, 0x3af5, 0x3af4, 0x3af4, 0x3af4, 0x3af4, 0x3af4, 
+    0x3af3, 0x3af3, 0x3af3, 0x3af3, 0x3af2, 0x3af2, 0x3af2, 0x3af2, 
+    0x3af2, 0x3af1, 0x3af1, 0x3af1, 0x3af1, 0x3af1, 0x3af0, 0x3af0, 
+    0x3af0, 0x3af0, 0x3aef, 0x3aef, 0x3aef, 0x3aef, 0x3aef, 0x3aee, 
+    0x3aee, 0x3aee, 0x3aee, 0x3aed, 0x3aed, 0x3aed, 0x3aed, 0x3aed, 
+    0x3aec, 0x3aec, 0x3aec, 0x3aec, 0x3aec, 0x3aeb, 0x3aeb, 0x3aeb, 
+    0x3aeb, 0x3aea, 0x3aea, 0x3aea, 0x3aea, 0x3aea, 0x3ae9, 0x3ae9, 
+    0x3ae9, 0x3ae9, 0x3ae9, 0x3ae8, 0x3ae8, 0x3ae8, 0x3ae8, 0x3ae7, 
+    0x3ae7, 0x3ae7, 0x3ae7, 0x3ae7, 0x3ae6, 0x3ae6, 0x3ae6, 0x3ae6, 
+    0x3ae5, 0x3ae5, 0x3ae5, 0x3ae5, 0x3ae5, 0x3ae4, 0x3ae4, 0x3ae4, 
+    0x3ae4, 0x3ae4, 0x3ae3, 0x3ae3, 0x3ae3, 0x3ae3, 0x3ae2, 0x3ae2, 
+    0x3ae2, 0x3ae2, 0x3ae2, 0x3ae1, 0x3ae1, 0x3ae1, 0x3ae1, 0x3ae1, 
+    0x3ae0, 0x3ae0, 0x3ae0, 0x3ae0, 0x3adf, 0x3adf, 0x3adf, 0x3adf, 
+    0x3adf, 0x3ade, 0x3ade, 0x3ade, 0x3ade, 0x3ade, 0x3add, 0x3add, 
+    0x3add, 0x3add, 0x3adc, 0x3adc, 0x3adc, 0x3adc, 0x3adc, 0x3adb, 
+    0x3adb, 0x3adb, 0x3adb, 0x3adb, 0x3ada, 0x3ada, 0x3ada, 0x3ada, 
+    0x3ad9, 0x3ad9, 0x3ad9, 0x3ad9, 0x3ad9, 0x3ad8, 0x3ad8, 0x3ad8, 
+    0x3ad8, 0x3ad8, 0x3ad7, 0x3ad7, 0x3ad7, 0x3ad7, 0x3ad6, 0x3ad6, 
+    0x3ad6, 0x3ad6, 0x3ad6, 0x3ad5, 0x3ad5, 0x3ad5, 0x3ad5, 0x3ad5, 
+    0x3ad4, 0x3ad4, 0x3ad4, 0x3ad4, 0x3ad3, 0x3ad3, 0x3ad3, 0x3ad3, 
+    0x3ad3, 0x3ad2, 0x3ad2, 0x3ad2, 0x3ad2, 0x3ad2, 0x3ad1, 0x3ad1, 
+    0x3ad1, 0x3ad1, 0x3ad0, 0x3ad0, 0x3ad0, 0x3ad0, 0x3ad0, 0x3acf, 
+    0x3acf, 0x3acf, 0x3acf, 0x3acf, 0x3ace, 0x3ace, 0x3ace, 0x3ace, 
+    0x3ace, 0x3acd, 0x3acd, 0x3acd, 0x3acd, 0x3acc, 0x3acc, 0x3acc, 
+    0x3acc, 0x3acc, 0x3acb, 0x3acb, 0x3acb, 0x3acb, 0x3acb, 0x3aca, 
+    0x3aca, 0x3aca, 0x3aca, 0x3ac9, 0x3ac9, 0x3ac9, 0x3ac9, 0x3ac9, 
+    0x3ac8, 0x3ac8, 0x3ac8, 0x3ac8, 0x3ac8, 0x3ac7, 0x3ac7, 0x3ac7, 
+    0x3ac7, 0x3ac7, 0x3ac6, 0x3ac6, 0x3ac6, 0x3ac6, 0x3ac5, 0x3ac5, 
+    0x3ac5, 0x3ac5, 0x3ac5, 0x3ac4, 0x3ac4, 0x3ac4, 0x3ac4, 0x3ac4, 
+    0x3ac3, 0x3ac3, 0x3ac3, 0x3ac3, 0x3ac2, 0x3ac2, 0x3ac2, 0x3ac2, 
+    0x3ac2, 0x3ac1, 0x3ac1, 0x3ac1, 0x3ac1, 0x3ac1, 0x3ac0, 0x3ac0, 
+    0x3ac0, 0x3ac0, 0x3ac0, 0x3abf, 0x3abf, 0x3abf, 0x3abf, 0x3abe, 
+    0x3abe, 0x3abe, 0x3abe, 0x3abe, 0x3abd, 0x3abd, 0x3abd, 0x3abd, 
+    0x3abd, 0x3abc, 0x3abc, 0x3abc, 0x3abc, 0x3abc, 0x3abb, 0x3abb, 
+    0x3abb, 0x3abb, 0x3aba, 0x3aba, 0x3aba, 0x3aba, 0x3aba, 0x3ab9, 
+    0x3ab9, 0x3ab9, 0x3ab9, 0x3ab9, 0x3ab8, 0x3ab8, 0x3ab8, 0x3ab8, 
+    0x3ab8, 0x3ab7, 0x3ab7, 0x3ab7, 0x3ab7, 0x3ab6, 0x3ab6, 0x3ab6, 
+    0x3ab6, 0x3ab6, 0x3ab5, 0x3ab5, 0x3ab5, 0x3ab5, 0x3ab5, 0x3ab4, 
+    0x3ab4, 0x3ab4, 0x3ab4, 0x3ab4, 0x3ab3, 0x3ab3, 0x3ab3, 0x3ab3, 
+    0x3ab3, 0x3ab2, 0x3ab2, 0x3ab2, 0x3ab2, 0x3ab1, 0x3ab1, 0x3ab1, 
+    0x3ab1, 0x3ab1, 0x3ab0, 0x3ab0, 0x3ab0, 0x3ab0, 0x3ab0, 0x3aaf, 
+    0x3aaf, 0x3aaf, 0x3aaf, 0x3aaf, 0x3aae, 0x3aae, 0x3aae, 0x3aae, 
+    0x3aad, 0x3aad, 0x3aad, 0x3aad, 0x3aad, 0x3aac, 0x3aac, 0x3aac, 
+    0x3aac, 0x3aac, 0x3aab, 0x3aab, 0x3aab, 0x3aab, 0x3aab, 0x3aaa, 
+    0x3aaa, 0x3aaa, 0x3aaa, 0x3aaa, 0x3aa9, 0x3aa9, 0x3aa9, 0x3aa9, 
+    0x3aa8, 0x3aa8, 0x3aa8, 0x3aa8, 0x3aa8, 0x3aa7, 0x3aa7, 0x3aa7, 
+    0x3aa7, 0x3aa7, 0x3aa6, 0x3aa6, 0x3aa6, 0x3aa6, 0x3aa6, 0x3aa5, 
+    0x3aa5, 0x3aa5, 0x3aa5, 0x3aa5, 0x3aa4, 0x3aa4, 0x3aa4, 0x3aa4, 
+    0x3aa4, 0x3aa3, 0x3aa3, 0x3aa3, 0x3aa3, 0x3aa2, 0x3aa2, 0x3aa2, 
+    0x3aa2, 0x3aa2, 0x3aa1, 0x3aa1, 0x3aa1, 0x3aa1, 0x3aa1, 0x3aa0, 
+    0x3aa0, 0x3aa0, 0x3aa0, 0x3aa0, 0x3a9f, 0x3a9f, 0x3a9f, 0x3a9f, 
+    0x3a9f, 0x3a9e, 0x3a9e, 0x3a9e, 0x3a9e, 0x3a9e, 0x3a9d, 0x3a9d, 
+    0x3a9d, 0x3a9d, 0x3a9c, 0x3a9c, 0x3a9c, 0x3a9c, 0x3a9c, 0x3a9b, 
+    0x3a9b, 0x3a9b, 0x3a9b, 0x3a9b, 0x3a9a, 0x3a9a, 0x3a9a, 0x3a9a, 
+    0x3a9a, 0x3a99, 0x3a99, 0x3a99, 0x3a99, 0x3a99, 0x3a98, 0x3a98, 
+    0x3a98, 0x3a98, 0x3a98, 0x3a97, 0x3a97, 0x3a97, 0x3a97, 0x3a96, 
+    0x3a96, 0x3a96, 0x3a96, 0x3a96, 0x3a95, 0x3a95, 0x3a95, 0x3a95, 
+    0x3a95, 0x3a94, 0x3a94, 0x3a94, 0x3a94, 0x3a94, 0x3a93, 0x3a93, 
+    0x3a93, 0x3a93, 0x3a93, 0x3a92, 0x3a92, 0x3a92, 0x3a92, 0x3a92, 
+    0x3a91, 0x3a91, 0x3a91, 0x3a91, 0x3a91, 0x3a90, 0x3a90, 0x3a90, 
+    0x3a90, 0x3a90, 0x3a8f, 0x3a8f, 0x3a8f, 0x3a8f, 0x3a8e, 0x3a8e, 
+    0x3a8e, 0x3a8e, 0x3a8e, 0x3a8d, 0x3a8d, 0x3a8d, 0x3a8d, 0x3a8d, 
+    0x3a8c, 0x3a8c, 0x3a8c, 0x3a8c, 0x3a8c, 0x3a8b, 0x3a8b, 0x3a8b, 
+    0x3a8b, 0x3a8b, 0x3a8a, 0x3a8a, 0x3a8a, 0x3a8a, 0x3a8a, 0x3a89, 
+    0x3a89, 0x3a89, 0x3a89, 0x3a89, 0x3a88, 0x3a88, 0x3a88, 0x3a88, 
+    0x3a88, 0x3a87, 0x3a87, 0x3a87, 0x3a87, 0x3a87, 0x3a86, 0x3a86, 
+    0x3a86, 0x3a86, 0x3a85, 0x3a85, 0x3a85, 0x3a85, 0x3a85, 0x3a84, 
+    0x3a84, 0x3a84, 0x3a84, 0x3a84, 0x3a83, 0x3a83, 0x3a83, 0x3a83, 
+    0x3a83, 0x3a82, 0x3a82, 0x3a82, 0x3a82, 0x3a82, 0x3a81, 0x3a81, 
+    0x3a81, 0x3a81, 0x3a81, 0x3a80, 0x3a80, 0x3a80, 0x3a80, 0x3a80, 
+    0x3a7f, 0x3a7f, 0x3a7f, 0x3a7f, 0x3a7f, 0x3a7e, 0x3a7e, 0x3a7e, 
+    0x3a7e, 0x3a7e, 0x3a7d, 0x3a7d, 0x3a7d, 0x3a7d, 0x3a7d, 0x3a7c, 
+    0x3a7c, 0x3a7c, 0x3a7c, 0x3a7c, 0x3a7b, 0x3a7b, 0x3a7b, 0x3a7b, 
+    0x3a7b, 0x3a7a, 0x3a7a, 0x3a7a, 0x3a7a, 0x3a7a, 0x3a79, 0x3a79, 
+    0x3a79, 0x3a79, 0x3a78, 0x3a78, 0x3a78, 0x3a78, 0x3a78, 0x3a77, 
+    0x3a77, 0x3a77, 0x3a77, 0x3a77, 0x3a76, 0x3a76, 0x3a76, 0x3a76, 
+    0x3a76, 0x3a75, 0x3a75, 0x3a75, 0x3a75, 0x3a75, 0x3a74, 0x3a74, 
+    0x3a74, 0x3a74, 0x3a74, 0x3a73, 0x3a73, 0x3a73, 0x3a73, 0x3a73, 
+    0x3a72, 0x3a72, 0x3a72, 0x3a72, 0x3a72, 0x3a71, 0x3a71, 0x3a71, 
+    0x3a71, 0x3a71, 0x3a70, 0x3a70, 0x3a70, 0x3a70, 0x3a70, 0x3a6f, 
+    0x3a6f, 0x3a6f, 0x3a6f, 0x3a6f, 0x3a6e, 0x3a6e, 0x3a6e, 0x3a6e, 
+    0x3a6e, 0x3a6d, 0x3a6d, 0x3a6d, 0x3a6d, 0x3a6d, 0x3a6c, 0x3a6c, 
+    0x3a6c, 0x3a6c, 0x3a6c, 0x3a6b, 0x3a6b, 0x3a6b, 0x3a6b, 0x3a6b, 
+    0x3a6a, 0x3a6a, 0x3a6a, 0x3a6a, 0x3a6a, 0x3a69, 0x3a69, 0x3a69, 
+    0x3a69, 0x3a69, 0x3a68, 0x3a68, 0x3a68, 0x3a68, 0x3a68, 0x3a67, 
+    0x3a67, 0x3a67, 0x3a67, 0x3a67, 0x3a66, 0x3a66, 0x3a66, 0x3a66, 
+    0x3a66, 0x3a65, 0x3a65, 0x3a65, 0x3a65, 0x3a65, 0x3a64, 0x3a64, 
+    0x3a64, 0x3a64, 0x3a64, 0x3a63, 0x3a63, 0x3a63, 0x3a63, 0x3a63, 
+    0x3a62, 0x3a62, 0x3a62, 0x3a62, 0x3a62, 0x3a61, 0x3a61, 0x3a61, 
+    0x3a61, 0x3a61, 0x3a60, 0x3a60, 0x3a60, 0x3a60, 0x3a60, 0x3a5f, 
+    0x3a5f, 0x3a5f, 0x3a5f, 0x3a5f, 0x3a5e, 0x3a5e, 0x3a5e, 0x3a5e, 
+    0x3a5e, 0x3a5d, 0x3a5d, 0x3a5d, 0x3a5d, 0x3a5d, 0x3a5c, 0x3a5c, 
+    0x3a5c, 0x3a5c, 0x3a5c, 0x3a5b, 0x3a5b, 0x3a5b, 0x3a5b, 0x3a5b, 
+    0x3a5a, 0x3a5a, 0x3a5a, 0x3a5a, 0x3a5a, 0x3a59, 0x3a59, 0x3a59, 
+    0x3a59, 0x3a59, 0x3a58, 0x3a58, 0x3a58, 0x3a58, 0x3a58, 0x3a57, 
+    0x3a57, 0x3a57, 0x3a57, 0x3a57, 0x3a56, 0x3a56, 0x3a56, 0x3a56, 
+    0x3a56, 0x3a55, 0x3a55, 0x3a55, 0x3a55, 0x3a55, 0x3a54, 0x3a54, 
+    0x3a54, 0x3a54, 0x3a54, 0x3a54, 0x3a53, 0x3a53, 0x3a53, 0x3a53, 
+    0x3a53, 0x3a52, 0x3a52, 0x3a52, 0x3a52, 0x3a52, 0x3a51, 0x3a51, 
+    0x3a51, 0x3a51, 0x3a51, 0x3a50, 0x3a50, 0x3a50, 0x3a50, 0x3a50, 
+    0x3a4f, 0x3a4f, 0x3a4f, 0x3a4f, 0x3a4f, 0x3a4e, 0x3a4e, 0x3a4e, 
+    0x3a4e, 0x3a4e, 0x3a4d, 0x3a4d, 0x3a4d, 0x3a4d, 0x3a4d, 0x3a4c, 
+    0x3a4c, 0x3a4c, 0x3a4c, 0x3a4c, 0x3a4b, 0x3a4b, 0x3a4b, 0x3a4b, 
+    0x3a4b, 0x3a4a, 0x3a4a, 0x3a4a, 0x3a4a, 0x3a4a, 0x3a49, 0x3a49, 
+    0x3a49, 0x3a49, 0x3a49, 0x3a48, 0x3a48, 0x3a48, 0x3a48, 0x3a48, 
+    0x3a47, 0x3a47, 0x3a47, 0x3a47, 0x3a47, 0x3a47, 0x3a46, 0x3a46, 
+    0x3a46, 0x3a46, 0x3a46, 0x3a45, 0x3a45, 0x3a45, 0x3a45, 0x3a45, 
+    0x3a44, 0x3a44, 0x3a44, 0x3a44, 0x3a44, 0x3a43, 0x3a43, 0x3a43, 
+    0x3a43, 0x3a43, 0x3a42, 0x3a42, 0x3a42, 0x3a42, 0x3a42, 0x3a41, 
+    0x3a41, 0x3a41, 0x3a41, 0x3a41, 0x3a40, 0x3a40, 0x3a40, 0x3a40, 
+    0x3a40, 0x3a3f, 0x3a3f, 0x3a3f, 0x3a3f, 0x3a3f, 0x3a3e, 0x3a3e, 
+    0x3a3e, 0x3a3e, 0x3a3e, 0x3a3e, 0x3a3d, 0x3a3d, 0x3a3d, 0x3a3d, 
+    0x3a3d, 0x3a3c, 0x3a3c, 0x3a3c, 0x3a3c, 0x3a3c, 0x3a3b, 0x3a3b, 
+    0x3a3b, 0x3a3b, 0x3a3a, 0x3a3a, 0x3a39, 0x3a39, 0x3a39, 0x3a38, 
+    0x3a38, 0x3a37, 0x3a37, 0x3a37, 0x3a36, 0x3a36, 0x3a36, 0x3a35, 
+    0x3a35, 0x3a34, 0x3a34, 0x3a34, 0x3a33, 0x3a33, 0x3a32, 0x3a32, 
+    0x3a32, 0x3a31, 0x3a31, 0x3a31, 0x3a30, 0x3a30, 0x3a2f, 0x3a2f, 
+    0x3a2f, 0x3a2e, 0x3a2e, 0x3a2d, 0x3a2d, 0x3a2d, 0x3a2c, 0x3a2c, 
+    0x3a2b, 0x3a2b, 0x3a2b, 0x3a2a, 0x3a2a, 0x3a2a, 0x3a29, 0x3a29, 
+    0x3a28, 0x3a28, 0x3a28, 0x3a27, 0x3a27, 0x3a26, 0x3a26, 0x3a26, 
+    0x3a25, 0x3a25, 0x3a25, 0x3a24, 0x3a24, 0x3a23, 0x3a23, 0x3a23, 
+    0x3a22, 0x3a22, 0x3a21, 0x3a21, 0x3a21, 0x3a20, 0x3a20, 0x3a20, 
+    0x3a1f, 0x3a1f, 0x3a1e, 0x3a1e, 0x3a1e, 0x3a1d, 0x3a1d, 0x3a1d, 
+    0x3a1c, 0x3a1c, 0x3a1b, 0x3a1b, 0x3a1b, 0x3a1a, 0x3a1a, 0x3a19, 
+    0x3a19, 0x3a19, 0x3a18, 0x3a18, 0x3a18, 0x3a17, 0x3a17, 0x3a16, 
+    0x3a16, 0x3a16, 0x3a15, 0x3a15, 0x3a15, 0x3a14, 0x3a14, 0x3a13, 
+    0x3a13, 0x3a13, 0x3a12, 0x3a12, 0x3a11, 0x3a11, 0x3a11, 0x3a10, 
+    0x3a10, 0x3a10, 0x3a0f, 0x3a0f, 0x3a0e, 0x3a0e, 0x3a0e, 0x3a0d, 
+    0x3a0d, 0x3a0d, 0x3a0c, 0x3a0c, 0x3a0b, 0x3a0b, 0x3a0b, 0x3a0a, 
+    0x3a0a, 0x3a0a, 0x3a09, 0x3a09, 0x3a08, 0x3a08, 0x3a08, 0x3a07, 
+    0x3a07, 0x3a07, 0x3a06, 0x3a06, 0x3a05, 0x3a05, 0x3a05, 0x3a04, 
+    0x3a04, 0x3a04, 0x3a03, 0x3a03, 0x3a02, 0x3a02, 0x3a02, 0x3a01, 
+    0x3a01, 0x3a01, 0x3a00, 0x3a00, 0x39ff, 0x39ff, 0x39ff, 0x39fe, 
+    0x39fe, 0x39fe, 0x39fd, 0x39fd, 0x39fc, 0x39fc, 0x39fc, 0x39fb, 
+    0x39fb, 0x39fb, 0x39fa, 0x39fa, 0x39f9, 0x39f9, 0x39f9, 0x39f8, 
+    0x39f8, 0x39f8, 0x39f7, 0x39f7, 0x39f6, 0x39f6, 0x39f6, 0x39f5, 
+    0x39f5, 0x39f5, 0x39f4, 0x39f4, 0x39f3, 0x39f3, 0x39f3, 0x39f2, 
+    0x39f2, 0x39f2, 0x39f1, 0x39f1, 0x39f0, 0x39f0, 0x39f0, 0x39ef, 
+    0x39ef, 0x39ef, 0x39ee, 0x39ee, 0x39ed, 0x39ed, 0x39ed, 0x39ec, 
+    0x39ec, 0x39ec, 0x39eb, 0x39eb, 0x39eb, 0x39ea, 0x39ea, 0x39e9, 
+    0x39e9, 0x39e9, 0x39e8, 0x39e8, 0x39e8, 0x39e7, 0x39e7, 0x39e6, 
+    0x39e6, 0x39e6, 0x39e5, 0x39e5, 0x39e5, 0x39e4, 0x39e4, 0x39e4, 
+    0x39e3, 0x39e3, 0x39e2, 0x39e2, 0x39e2, 0x39e1, 0x39e1, 0x39e1, 
+    0x39e0, 0x39e0, 0x39df, 0x39df, 0x39df, 0x39de, 0x39de, 0x39de, 
+    0x39dd, 0x39dd, 0x39dd, 0x39dc, 0x39dc, 0x39db, 0x39db, 0x39db, 
+    0x39da, 0x39da, 0x39da, 0x39d9, 0x39d9, 0x39d9, 0x39d8, 0x39d8, 
+    0x39d7, 0x39d7, 0x39d7, 0x39d6, 0x39d6, 0x39d6, 0x39d5, 0x39d5, 
+    0x39d5, 0x39d4, 0x39d4, 0x39d3, 0x39d3, 0x39d3, 0x39d2, 0x39d2, 
+    0x39d2, 0x39d1, 0x39d1, 0x39d1, 0x39d0, 0x39d0, 0x39cf, 0x39cf, 
+    0x39cf, 0x39ce, 0x39ce, 0x39ce, 0x39cd, 0x39cd, 0x39cd, 0x39cc, 
+    0x39cc, 0x39cb, 0x39cb, 0x39cb, 0x39ca, 0x39ca, 0x39ca, 0x39c9, 
+    0x39c9, 0x39c9, 0x39c8, 0x39c8, 0x39c7, 0x39c7, 0x39c7, 0x39c6, 
+    0x39c6, 0x39c6, 0x39c5, 0x39c5, 0x39c5, 0x39c4, 0x39c4, 0x39c3, 
+    0x39c3, 0x39c3, 0x39c2, 0x39c2, 0x39c2, 0x39c1, 0x39c1, 0x39c1, 
+    0x39c0, 0x39c0, 0x39c0, 0x39bf, 0x39bf, 0x39be, 0x39be, 0x39be, 
+    0x39bd, 0x39bd, 0x39bd, 0x39bc, 0x39bc, 0x39bc, 0x39bb, 0x39bb, 
+    0x39bb, 0x39ba, 0x39ba, 0x39b9, 0x39b9, 0x39b9, 0x39b8, 0x39b8, 
+    0x39b8, 0x39b7, 0x39b7, 0x39b7, 0x39b6, 0x39b6, 0x39b5, 0x39b5, 
+    0x39b5, 0x39b4, 0x39b4, 0x39b4, 0x39b3, 0x39b3, 0x39b3, 0x39b2, 
+    0x39b2, 0x39b2, 0x39b1, 0x39b1, 0x39b1, 0x39b0, 0x39b0, 0x39af, 
+    0x39af, 0x39af, 0x39ae, 0x39ae, 0x39ae, 0x39ad, 0x39ad, 0x39ad, 
+    0x39ac, 0x39ac, 0x39ac, 0x39ab, 0x39ab, 0x39aa, 0x39aa, 0x39aa, 
+    0x39a9, 0x39a9, 0x39a9, 0x39a8, 0x39a8, 0x39a8, 0x39a7, 0x39a7, 
+    0x39a7, 0x39a6, 0x39a6, 0x39a6, 0x39a5, 0x39a5, 0x39a4, 0x39a4, 
+    0x39a4, 0x39a3, 0x39a3, 0x39a3, 0x39a2, 0x39a2, 0x39a2, 0x39a1, 
+    0x39a1, 0x39a1, 0x39a0, 0x39a0, 0x39a0, 0x399f, 0x399f, 0x399e, 
+    0x399e, 0x399e, 0x399d, 0x399d, 0x399d, 0x399c, 0x399c, 0x399c, 
+    0x399b, 0x399b, 0x399b, 0x399a, 0x399a, 0x399a, 0x3999, 0x3999, 
+    0x3999, 0x3998, 0x3998, 0x3997, 0x3997, 0x3997, 0x3996, 0x3996, 
+    0x3996, 0x3995, 0x3995, 0x3995, 0x3994, 0x3994, 0x3994, 0x3993, 
+    0x3993, 0x3993, 0x3992, 0x3992, 0x3992, 0x3991, 0x3991, 0x3991, 
+    0x3990, 0x3990, 0x398f, 0x398f, 0x398f, 0x398e, 0x398e, 0x398e, 
+    0x398d, 0x398d, 0x398d, 0x398c, 0x398c, 0x398c, 0x398b, 0x398b, 
+    0x398b, 0x398a, 0x398a, 0x398a, 0x3989, 0x3989, 0x3989, 0x3988, 
+    0x3988, 0x3987, 0x3987, 0x3987, 0x3986, 0x3986, 0x3986, 0x3985, 
+    0x3985, 0x3985, 0x3984, 0x3984, 0x3984, 0x3983, 0x3983, 0x3983, 
+    0x3982, 0x3982, 0x3982, 0x3981, 0x3981, 0x3981, 0x3980, 0x3980, 
+    0x3980, 0x397f, 0x397f, 0x397f, 0x397e, 0x397e, 0x397e, 0x397d, 
+    0x397d, 0x397c, 0x397c, 0x397c, 0x397b, 0x397b, 0x397b, 0x397a, 
+    0x397a, 0x397a, 0x3979, 0x3979, 0x3979, 0x3978, 0x3978, 0x3978, 
+    0x3977, 0x3977, 0x3977, 0x3976, 0x3976, 0x3976, 0x3975, 0x3975, 
+    0x3975, 0x3974, 0x3974, 0x3974, 0x3973, 0x3973, 0x3973, 0x3972, 
+    0x3972, 0x3972, 0x3971, 0x3971, 0x3971, 0x3970, 0x3970, 0x3970, 
+    0x396f, 0x396f, 0x396e, 0x396e, 0x396e, 0x396d, 0x396d, 0x396d, 
+    0x396c, 0x396c, 0x396c, 0x396b, 0x396b, 0x396b, 0x396a, 0x396a, 
+    0x396a, 0x3969, 0x3969, 0x3969, 0x3968, 0x3968, 0x3968, 0x3967, 
+    0x3967, 0x3967, 0x3966, 0x3966, 0x3966, 0x3965, 0x3965, 0x3965, 
+    0x3964, 0x3964, 0x3964, 0x3963, 0x3963, 0x3963, 0x3962, 0x3962, 
+    0x3962, 0x3961, 0x3961, 0x3961, 0x3960, 0x3960, 0x3960, 0x395f, 
+    0x395f, 0x395f, 0x395e, 0x395e, 0x395e, 0x395d, 0x395d, 0x395d, 
+    0x395c, 0x395c, 0x395c, 0x395b, 0x395b, 0x395b, 0x395a, 0x395a, 
+    0x395a, 0x3959, 0x3959, 0x3959, 0x3958, 0x3958, 0x3958, 0x3957, 
+    0x3957, 0x3957, 0x3956, 0x3956, 0x3956, 0x3955, 0x3955, 0x3955, 
+    0x3954, 0x3954, 0x3954, 0x3953, 0x3953, 0x3953, 0x3952, 0x3952, 
+    0x3952, 0x3951, 0x3951, 0x3951, 0x3950, 0x3950, 0x3950, 0x394f, 
+    0x394f, 0x394f, 0x394e, 0x394e, 0x394e, 0x394d, 0x394d, 0x394d, 
+    0x394c, 0x394c, 0x394c, 0x394b, 0x394b, 0x394b, 0x394a, 0x394a, 
+    0x394a, 0x3949, 0x3949, 0x3949, 0x3948, 0x3948, 0x3948, 0x3947, 
+    0x3947, 0x3947, 0x3946, 0x3946, 0x3946, 0x3945, 0x3945, 0x3945, 
+    0x3944, 0x3944, 0x3944, 0x3943, 0x3943, 0x3943, 0x3942, 0x3942, 
+    0x3942, 0x3941, 0x3941, 0x3941, 0x3940, 0x3940, 0x3940, 0x393f, 
+    0x393f, 0x393f, 0x393e, 0x393e, 0x393e, 0x393d, 0x393d, 0x393d, 
+    0x393c, 0x393c, 0x393c, 0x393c, 0x393b, 0x393b, 0x393b, 0x393a, 
+    0x393a, 0x393a, 0x3939, 0x3939, 0x3939, 0x3938, 0x3938, 0x3938, 
+    0x3937, 0x3937, 0x3937, 0x3936, 0x3936, 0x3936, 0x3935, 0x3935, 
+    0x3935, 0x3934, 0x3934, 0x3934, 0x3933, 0x3933, 0x3933, 0x3932, 
+    0x3932, 0x3932, 0x3931, 0x3931, 0x3931, 0x3930, 0x3930, 0x3930, 
+    0x392f, 0x392f, 0x392f, 0x392e, 0x392e, 0x392e, 0x392e, 0x392d, 
+    0x392d, 0x392d, 0x392c, 0x392c, 0x392c, 0x392b, 0x392b, 0x392b, 
+    0x392a, 0x392a, 0x392a, 0x3929, 0x3929, 0x3929, 0x3928, 0x3928, 
+    0x3928, 0x3927, 0x3927, 0x3927, 0x3926, 0x3926, 0x3926, 0x3925, 
+    0x3925, 0x3925, 0x3924, 0x3924, 0x3924, 0x3924, 0x3923, 0x3923, 
+    0x3923, 0x3922, 0x3922, 0x3922, 0x3921, 0x3921, 0x3921, 0x3920, 
+    0x3920, 0x3920, 0x391f, 0x391f, 0x391f, 0x391e, 0x391e, 0x391e, 
+    0x391d, 0x391d, 0x391d, 0x391c, 0x391c, 0x391c, 0x391c, 0x391b, 
+    0x391b, 0x391b, 0x391a, 0x391a, 0x391a, 0x3919, 0x3919, 0x3919, 
+    0x3918, 0x3918, 0x3918, 0x3917, 0x3917, 0x3917, 0x3916, 0x3916, 
+    0x3916, 0x3915, 0x3915, 0x3915, 0x3915, 0x3914, 0x3914, 0x3914, 
+    0x3913, 0x3913, 0x3913, 0x3912, 0x3912, 0x3912, 0x3911, 0x3911, 
+    0x3911, 0x3910, 0x3910, 0x3910, 0x390f, 0x390f, 0x390f, 0x390e, 
+    0x390e, 0x390e, 0x390e, 0x390d, 0x390d, 0x390d, 0x390c, 0x390c, 
+    0x390c, 0x390b, 0x390b, 0x390b, 0x390a, 0x390a, 0x390a, 0x3909, 
+    0x3909, 0x3909, 0x3909, 0x3908, 0x3908, 0x3908, 0x3907, 0x3907, 
+    0x3907, 0x3906, 0x3906, 0x3906, 0x3905, 0x3905, 0x3905, 0x3904, 
+    0x3904, 0x3904, 0x3903, 0x3903, 0x3903, 0x3903, 0x3902, 0x3902, 
+    0x3902, 0x3901, 0x3901, 0x3901, 0x3900, 0x3900, 0x3900, 0x38ff, 
+    0x38ff, 0x38ff, 0x38fe, 0x38fe, 0x38fe, 0x38fe, 0x38fd, 0x38fd, 
+    0x38fd, 0x38fc, 0x38fc, 0x38fc, 0x38fb, 0x38fb, 0x38fb, 0x38fa, 
+    0x38fa, 0x38fa, 0x38f9, 0x38f9, 0x38f9, 0x38f9, 0x38f8, 0x38f8, 
+    0x38f8, 0x38f7, 0x38f7, 0x38f7, 0x38f6, 0x38f6, 0x38f6, 0x38f5, 
+    0x38f5, 0x38f5, 0x38f5, 0x38f4, 0x38f4, 0x38f4, 0x38f3, 0x38f3, 
+    0x38f3, 0x38f2, 0x38f2, 0x38f2, 0x38f1, 0x38f1, 0x38f1, 0x38f1, 
+    0x38f0, 0x38f0, 0x38f0, 0x38ef, 0x38ef, 0x38ef, 0x38ee, 0x38ee, 
+    0x38ee, 0x38ed, 0x38ed, 0x38ed, 0x38ed, 0x38ec, 0x38ec, 0x38ec, 
+    0x38eb, 0x38eb, 0x38eb, 0x38ea, 0x38ea, 0x38ea, 0x38e9, 0x38e9, 
+    0x38e9, 0x38e9, 0x38e8, 0x38e8, 0x38e8, 0x38e7, 0x38e7, 0x38e7, 
+    0x38e6, 0x38e6, 0x38e6, 0x38e5, 0x38e5, 0x38e5, 0x38e5, 0x38e4, 
+    0x38e4, 0x38e4, 0x38e3, 0x38e3, 0x38e3, 0x38e2, 0x38e2, 0x38e2, 
+    0x38e1, 0x38e1, 0x38e1, 0x38e1, 0x38e0, 0x38e0, 0x38e0, 0x38df, 
+    0x38df, 0x38df, 0x38de, 0x38de, 0x38de, 0x38de, 0x38dd, 0x38dd, 
+    0x38dd, 0x38dc, 0x38dc, 0x38dc, 0x38db, 0x38db, 0x38db, 0x38da, 
+    0x38da, 0x38da, 0x38d9, 0x38d8, 0x38d8, 0x38d7, 0x38d7, 0x38d6, 
+    0x38d5, 0x38d5, 0x38d4, 0x38d4, 0x38d3, 0x38d2, 0x38d2, 0x38d1, 
+    0x38d1, 0x38d0, 0x38cf, 0x38cf, 0x38ce, 0x38ce, 0x38cd, 0x38cc, 
+    0x38cc, 0x38cb, 0x38cb, 0x38ca, 0x38c9, 0x38c9, 0x38c8, 0x38c8, 
+    0x38c7, 0x38c6, 0x38c6, 0x38c5, 0x38c5, 0x38c4, 0x38c3, 0x38c3, 
+    0x38c2, 0x38c2, 0x38c1, 0x38c0, 0x38c0, 0x38bf, 0x38bf, 0x38be, 
+    0x38bd, 0x38bd, 0x38bc, 0x38bc, 0x38bb, 0x38ba, 0x38ba, 0x38b9, 
+    0x38b9, 0x38b8, 0x38b7, 0x38b7, 0x38b6, 0x38b6, 0x38b5, 0x38b5, 
+    0x38b4, 0x38b3, 0x38b3, 0x38b2, 0x38b2, 0x38b1, 0x38b0, 0x38b0, 
+    0x38af, 0x38af, 0x38ae, 0x38ae, 0x38ad, 0x38ac, 0x38ac, 0x38ab, 
+    0x38ab, 0x38aa, 0x38a9, 0x38a9, 0x38a8, 0x38a8, 0x38a7, 0x38a7, 
+    0x38a6, 0x38a5, 0x38a5, 0x38a4, 0x38a4, 0x38a3, 0x38a2, 0x38a2, 
+    0x38a1, 0x38a1, 0x38a0, 0x38a0, 0x389f, 0x389e, 0x389e, 0x389d, 
+    0x389d, 0x389c, 0x389c, 0x389b, 0x389a, 0x389a, 0x3899, 0x3899, 
+    0x3898, 0x3897, 0x3897, 0x3896, 0x3896, 0x3895, 0x3895, 0x3894, 
+    0x3893, 0x3893, 0x3892, 0x3892, 0x3891, 0x3891, 0x3890, 0x388f, 
+    0x388f, 0x388e, 0x388e, 0x388d, 0x388d, 0x388c, 0x388c, 0x388b, 
+    0x388a, 0x388a, 0x3889, 0x3889, 0x3888, 0x3888, 0x3887, 0x3886, 
+    0x3886, 0x3885, 0x3885, 0x3884, 0x3884, 0x3883, 0x3882, 0x3882, 
+    0x3881, 0x3881, 0x3880, 0x3880, 0x387f, 0x387f, 0x387e, 0x387d, 
+    0x387d, 0x387c, 0x387c, 0x387b, 0x387b, 0x387a, 0x3879, 0x3879, 
+    0x3878, 0x3878, 0x3877, 0x3877, 0x3876, 0x3876, 0x3875, 0x3874, 
+    0x3874, 0x3873, 0x3873, 0x3872, 0x3872, 0x3871, 0x3871, 0x3870, 
+    0x386f, 0x386f, 0x386e, 0x386e, 0x386d, 0x386d, 0x386c, 0x386c, 
+    0x386b, 0x386a, 0x386a, 0x3869, 0x3869, 0x3868, 0x3868, 0x3867, 
+    0x3867, 0x3866, 0x3866, 0x3865, 0x3864, 0x3864, 0x3863, 0x3863, 
+    0x3862, 0x3862, 0x3861, 0x3861, 0x3860, 0x385f, 0x385f, 0x385e, 
+    0x385e, 0x385d, 0x385d, 0x385c, 0x385c, 0x385b, 0x385b, 0x385a, 
+    0x3859, 0x3859, 0x3858, 0x3858, 0x3857, 0x3857, 0x3856, 0x3856, 
+    0x3855, 0x3855, 0x3854, 0x3854, 0x3853, 0x3852, 0x3852, 0x3851, 
+    0x3851, 0x3850, 0x3850, 0x384f, 0x384f, 0x384e, 0x384e, 0x384d, 
+    0x384d, 0x384c, 0x384b, 0x384b, 0x384a, 0x384a, 0x3849, 0x3849, 
+    0x3848, 0x3848, 0x3847, 0x3847, 0x3846, 0x3846, 0x3845, 0x3844, 
+    0x3844, 0x3843, 0x3843, 0x3842, 0x3842, 0x3841, 0x3841, 0x3840, 
+    0x3840, 0x383f, 0x383f, 0x383e, 0x383e, 0x383d, 0x383d, 0x383c, 
+    0x383b, 0x383b, 0x383a, 0x383a, 0x3839, 0x3839, 0x3838, 0x3838, 
+    0x3837, 0x3837, 0x3836, 0x3836, 0x3835, 0x3835, 0x3834, 0x3834, 
+    0x3833, 0x3832, 0x3832, 0x3831, 0x3831, 0x3830, 0x3830, 0x382f, 
+    0x382f, 0x382e, 0x382e, 0x382d, 0x382d, 0x382c, 0x382c, 0x382b, 
+    0x382b, 0x382a, 0x382a, 0x3829, 0x3829, 0x3828, 0x3828, 0x3827, 
+    0x3826, 0x3826, 0x3825, 0x3825, 0x3824, 0x3824, 0x3823, 0x3823, 
+    0x3822, 0x3822, 0x3821, 0x3821, 0x3820, 0x3820, 0x381f, 0x381f, 
+    0x381e, 0x381e, 0x381d, 0x381d, 0x381c, 0x381c, 0x381b, 0x381b, 
+    0x381a, 0x381a, 0x3819, 0x3819, 0x3818, 0x3818, 0x3817, 0x3817, 
+    0x3816, 0x3816, 0x3815, 0x3814, 0x3814, 0x3813, 0x3813, 0x3812, 
+    0x3812, 0x3811, 0x3811, 0x3810, 0x3810, 0x380f, 0x380f, 0x380e, 
+    0x380e, 0x380d, 0x380d, 0x380c, 0x380c, 0x380b, 0x380b, 0x380a, 
+    0x380a, 0x3809, 0x3809, 0x3808, 0x3808, 0x3807, 0x3807, 0x3806, 
+    0x3806, 0x3805, 0x3805, 0x3804, 0x3804, 0x3803, 0x3803, 0x3802, 
+    0x3802, 0x3801, 0x3801, 0x3800, 0x3800, 0x37ff, 0x37fe, 0x37fd, 
+    0x37fc, 0x37fb, 0x37fa, 0x37f9, 0x37f8, 0x37f7, 0x37f6, 0x37f5, 
+    0x37f4, 0x37f3, 0x37f2, 0x37f1, 0x37f0, 0x37ef, 0x37ee, 0x37ed, 
+    0x37ec, 0x37eb, 0x37ea, 0x37e9, 0x37e8, 0x37e7, 0x37e6, 0x37e5, 
+    0x37e4, 0x37e3, 0x37e2, 0x37e1, 0x37e0, 0x37df, 0x37de, 0x37dd, 
+    0x37dc, 0x37db, 0x37da, 0x37d9, 0x37d8, 0x37d7, 0x37d6, 0x37d5, 
+    0x37d4, 0x37d3, 0x37d2, 0x37d1, 0x37d0, 0x37cf, 0x37ce, 0x37cd, 
+    0x37cc, 0x37cb, 0x37ca, 0x37c9, 0x37c8, 0x37c7, 0x37c6, 0x37c5, 
+    0x37c4, 0x37c3, 0x37c3, 0x37c2, 0x37c1, 0x37c0, 0x37bf, 0x37be, 
+    0x37bd, 0x37bc, 0x37bb, 0x37ba, 0x37b9, 0x37b8, 0x37b7, 0x37b6, 
+    0x37b5, 0x37b4, 0x37b3, 0x37b2, 0x37b1, 0x37b0, 0x37af, 0x37ae, 
+    0x37ad, 0x37ac, 0x37ab, 0x37aa, 0x37a9, 0x37a8, 0x37a8, 0x37a7, 
+    0x37a6, 0x37a5, 0x37a4, 0x37a3, 0x37a2, 0x37a1, 0x37a0, 0x379f, 
+    0x379e, 0x379d, 0x379c, 0x379b, 0x379a, 0x3799, 0x3798, 0x3797, 
+    0x3796, 0x3795, 0x3794, 0x3794, 0x3793, 0x3792, 0x3791, 0x3790, 
+    0x378f, 0x378e, 0x378d, 0x378c, 0x378b, 0x378a, 0x3789, 0x3788, 
+    0x3787, 0x3786, 0x3785, 0x3784, 0x3784, 0x3783, 0x3782, 0x3781, 
+    0x3780, 0x377f, 0x377e, 0x377d, 0x377c, 0x377b, 0x377a, 0x3779, 
+    0x3778, 0x3777, 0x3776, 0x3775, 0x3775, 0x3774, 0x3773, 0x3772, 
+    0x3771, 0x3770, 0x376f, 0x376e, 0x376d, 0x376c, 0x376b, 0x376a, 
+    0x3769, 0x3768, 0x3768, 0x3767, 0x3766, 0x3765, 0x3764, 0x3763, 
+    0x3762, 0x3761, 0x3760, 0x375f, 0x375e, 0x375d, 0x375c, 0x375c, 
+    0x375b, 0x375a, 0x3759, 0x3758, 0x3757, 0x3756, 0x3755, 0x3754, 
+    0x3753, 0x3752, 0x3751, 0x3751, 0x3750, 0x374f, 0x374e, 0x374d, 
+    0x374c, 0x374b, 0x374a, 0x3749, 0x3748, 0x3747, 0x3747, 0x3746, 
+    0x3745, 0x3744, 0x3743, 0x3742, 0x3741, 0x3740, 0x373f, 0x373e, 
+    0x373d, 0x373d, 0x373c, 0x373b, 0x373a, 0x3739, 0x3738, 0x3737, 
+    0x3736, 0x3735, 0x3734, 0x3734, 0x3733, 0x3732, 0x3731, 0x3730, 
+    0x372f, 0x372e, 0x372d, 0x372c, 0x372b, 0x372b, 0x372a, 0x3729, 
+    0x3728, 0x3727, 0x3726, 0x3725, 0x3724, 0x3723, 0x3722, 0x3722, 
+    0x3721, 0x3720, 0x371f, 0x371e, 0x371d, 0x371c, 0x371b, 0x371a, 
+    0x371a, 0x3719, 0x3718, 0x3717, 0x3716, 0x3715, 0x3714, 0x3713, 
+    0x3713, 0x3712, 0x3711, 0x3710, 0x370f, 0x370e, 0x370d, 0x370c, 
+    0x370b, 0x370b, 0x370a, 0x3709, 0x3708, 0x3707, 0x3706, 0x3705, 
+    0x3704, 0x3704, 0x3703, 0x3702, 0x3701, 0x3700, 0x36ff, 0x36fe, 
+    0x36fd, 0x36fd, 0x36fc, 0x36fb, 0x36fa, 0x36f9, 0x36f8, 0x36f7, 
+    0x36f6, 0x36f6, 0x36f5, 0x36f4, 0x36f3, 0x36f2, 0x36f1, 0x36f0, 
+    0x36ef, 0x36ef, 0x36ee, 0x36ed, 0x36ec, 0x36eb, 0x36ea, 0x36e9, 
+    0x36e9, 0x36e8, 0x36e7, 0x36e6, 0x36e5, 0x36e4, 0x36e3, 0x36e3, 
+    0x36e2, 0x36e1, 0x36e0, 0x36df, 0x36de, 0x36dd, 0x36dd, 0x36dc, 
+    0x36db, 0x36da, 0x36d9, 0x36d8, 0x36d7, 0x36d7, 0x36d6, 0x36d5, 
+    0x36d4, 0x36d3, 0x36d2, 0x36d1, 0x36d1, 0x36d0, 0x36cf, 0x36ce, 
+    0x36cd, 0x36cc, 0x36cb, 0x36cb, 0x36ca, 0x36c9, 0x36c8, 0x36c7, 
+    0x36c6, 0x36c6, 0x36c5, 0x36c4, 0x36c3, 0x36c2, 0x36c1, 0x36c0, 
+    0x36c0, 0x36bf, 0x36be, 0x36bd, 0x36bc, 0x36bb, 0x36bb, 0x36ba, 
+    0x36b9, 0x36b8, 0x36b7, 0x36b6, 0x36b6, 0x36b5, 0x36b4, 0x36b3, 
+    0x36b2, 0x36b1, 0x36b0, 0x36b0, 0x36af, 0x36ae, 0x36ad, 0x36ac, 
+    0x36ab, 0x36ab, 0x36aa, 0x36a9, 0x36a8, 0x36a7, 0x36a6, 0x36a6, 
+    0x36a5, 0x36a4, 0x36a3, 0x36a2, 0x36a1, 0x36a1, 0x36a0, 0x369f, 
+    0x369e, 0x369d, 0x369d, 0x369c, 0x369b, 0x369a, 0x3699, 0x3698, 
+    0x3698, 0x3697, 0x3696, 0x3695, 0x3694, 0x3693, 0x3693, 0x3692, 
+    0x3691, 0x3690, 0x368f, 0x368f, 0x368e, 0x368d, 0x368c, 0x368b, 
+    0x368a, 0x368a, 0x3689, 0x3688, 0x3687, 0x3686, 0x3686, 0x3685, 
+    0x3684, 0x3683, 0x3682, 0x3681, 0x3681, 0x3680, 0x367f, 0x367e, 
+    0x367d, 0x367d, 0x367c, 0x367b, 0x367a, 0x3679, 0x3679, 0x3678, 
+    0x3677, 0x3676, 0x3675, 0x3675, 0x3674, 0x3673, 0x3672, 0x3671, 
+    0x3670, 0x3670, 0x366f, 0x366e, 0x366d, 0x366c, 0x366c, 0x366b, 
+    0x366a, 0x3669, 0x3668, 0x3668, 0x3667, 0x3666, 0x3665, 0x3664, 
+    0x3664, 0x3663, 0x3662, 0x3661, 0x3660, 0x3660, 0x365f, 0x365e, 
+    0x365d, 0x365c, 0x365c, 0x365b, 0x365a, 0x3659, 0x3659, 0x3658, 
+    0x3657, 0x3656, 0x3655, 0x3655, 0x3654, 0x3653, 0x3652, 0x3651, 
+    0x3651, 0x3650, 0x364f, 0x364e, 0x364d, 0x364d, 0x364c, 0x364b, 
+    0x364a, 0x364a, 0x3649, 0x3648, 0x3647, 0x3646, 0x3646, 0x3645, 
+    0x3644, 0x3643, 0x3642, 0x3642, 0x3641, 0x3640, 0x363f, 0x363f, 
+    0x363e, 0x363d, 0x363c, 0x363b, 0x363b, 0x363a, 0x3639, 0x3638, 
+    0x3638, 0x3637, 0x3636, 0x3635, 0x3634, 0x3634, 0x3633, 0x3632, 
+    0x3631, 0x3631, 0x3630, 0x362f, 0x362e, 0x362d, 0x362d, 0x362c, 
+    0x362b, 0x362a, 0x362a, 0x3629, 0x3628, 0x3627, 0x3627, 0x3626, 
+    0x3625, 0x3624, 0x3623, 0x3623, 0x3622, 0x3621, 0x3620, 0x3620, 
+    0x361f, 0x361e, 0x361d, 0x361d, 0x361c, 0x361b, 0x361a, 0x361a, 
+    0x3619, 0x3618, 0x3617, 0x3616, 0x3616, 0x3615, 0x3614, 0x3613, 
+    0x3613, 0x3612, 0x3611, 0x3610, 0x3610, 0x360f, 0x360e, 0x360d, 
+    0x360d, 0x360c, 0x360b, 0x360a, 0x360a, 0x3609, 0x3608, 0x3607, 
+    0x3607, 0x3606, 0x3605, 0x3604, 0x3604, 0x3603, 0x3602, 0x3601, 
+    0x3601, 0x3600, 0x35ff, 0x35fe, 0x35fe, 0x35fd, 0x35fc, 0x35fb, 
+    0x35fb, 0x35fa, 0x35f9, 0x35f8, 0x35f8, 0x35f7, 0x35f6, 0x35f5, 
+    0x35f5, 0x35f4, 0x35f3, 0x35f2, 0x35f2, 0x35f1, 0x35f0, 0x35ef, 
+    0x35ef, 0x35ee, 0x35ed, 0x35ec, 0x35ec, 0x35eb, 0x35ea, 0x35e9, 
+    0x35e9, 0x35e8, 0x35e7, 0x35e7, 0x35e6, 0x35e5, 0x35e4, 0x35e4, 
+    0x35e3, 0x35e1, 0x35e0, 0x35de, 0x35dd, 0x35db, 0x35da, 0x35d9, 
+    0x35d7, 0x35d6, 0x35d4, 0x35d3, 0x35d1, 0x35d0, 0x35ce, 0x35cd, 
+    0x35cb, 0x35ca, 0x35c9, 0x35c7, 0x35c6, 0x35c4, 0x35c3, 0x35c1, 
+    0x35c0, 0x35be, 0x35bd, 0x35bc, 0x35ba, 0x35b9, 0x35b7, 0x35b6, 
+    0x35b4, 0x35b3, 0x35b2, 0x35b0, 0x35af, 0x35ad, 0x35ac, 0x35ab, 
+    0x35a9, 0x35a8, 0x35a6, 0x35a5, 0x35a3, 0x35a2, 0x35a1, 0x359f, 
+    0x359e, 0x359c, 0x359b, 0x359a, 0x3598, 0x3597, 0x3595, 0x3594, 
+    0x3593, 0x3591, 0x3590, 0x358e, 0x358d, 0x358c, 0x358a, 0x3589, 
+    0x3588, 0x3586, 0x3585, 0x3583, 0x3582, 0x3581, 0x357f, 0x357e, 
+    0x357d, 0x357b, 0x357a, 0x3578, 0x3577, 0x3576, 0x3574, 0x3573, 
+    0x3572, 0x3570, 0x356f, 0x356e, 0x356c, 0x356b, 0x3569, 0x3568, 
+    0x3567, 0x3565, 0x3564, 0x3563, 0x3561, 0x3560, 0x355f, 0x355d, 
+    0x355c, 0x355b, 0x3559, 0x3558, 0x3557, 0x3555, 0x3554, 0x3553, 
+    0x3551, 0x3550, 0x354f, 0x354d, 0x354c, 0x354b, 0x3549, 0x3548, 
+    0x3547, 0x3545, 0x3544, 0x3543, 0x3541, 0x3540, 0x353f, 0x353e, 
+    0x353c, 0x353b, 0x353a, 0x3538, 0x3537, 0x3536, 0x3534, 0x3533, 
+    0x3532, 0x3530, 0x352f, 0x352e, 0x352d, 0x352b, 0x352a, 0x3529, 
+    0x3527, 0x3526, 0x3525, 0x3524, 0x3522, 0x3521, 0x3520, 0x351e, 
+    0x351d, 0x351c, 0x351b, 0x3519, 0x3518, 0x3517, 0x3516, 0x3514, 
+    0x3513, 0x3512, 0x3510, 0x350f, 0x350e, 0x350d, 0x350b, 0x350a, 
+    0x3509, 0x3508, 0x3506, 0x3505, 0x3504, 0x3503, 0x3501, 0x3500, 
+    0x34ff, 0x34fe, 0x34fc, 0x34fb, 0x34fa, 0x34f9, 0x34f7, 0x34f6, 
+    0x34f5, 0x34f4, 0x34f2, 0x34f1, 0x34f0, 0x34ef, 0x34ed, 0x34ec, 
+    0x34eb, 0x34ea, 0x34e9, 0x34e7, 0x34e6, 0x34e5, 0x34e4, 0x34e2, 
+    0x34e1, 0x34e0, 0x34df, 0x34de, 0x34dc, 0x34db, 0x34da, 0x34d9, 
+    0x34d7, 0x34d6, 0x34d5, 0x34d4, 0x34d3, 0x34d1, 0x34d0, 0x34cf, 
+    0x34ce, 0x34cd, 0x34cb, 0x34ca, 0x34c9, 0x34c8, 0x34c7, 0x34c5, 
+    0x34c4, 0x34c3, 0x34c2, 0x34c1, 0x34c0, 0x34be, 0x34bd, 0x34bc, 
+    0x34bb, 0x34ba, 0x34b8, 0x34b7, 0x34b6, 0x34b5, 0x34b4, 0x34b3, 
+    0x34b1, 0x34b0, 0x34af, 0x34ae, 0x34ad, 0x34ac, 0x34aa, 0x34a9, 
+    0x34a8, 0x34a7, 0x34a6, 0x34a5, 0x34a3, 0x34a2, 0x34a1, 0x34a0, 
+    0x349f, 0x349e, 0x349c, 0x349b, 0x349a, 0x3499, 0x3498, 0x3497, 
+    0x3496, 0x3494, 0x3493, 0x3492, 0x3491, 0x3490, 0x348f, 0x348e, 
+    0x348c, 0x348b, 0x348a, 0x3489, 0x3488, 0x3487, 0x3486, 0x3484, 
+    0x3483, 0x3482, 0x3481, 0x3480, 0x347f, 0x347e, 0x347d, 0x347b, 
+    0x347a, 0x3479, 0x3478, 0x3477, 0x3476, 0x3475, 0x3474, 0x3473, 
+    0x3471, 0x3470, 0x346f, 0x346e, 0x346d, 0x346c, 0x346b, 0x346a, 
+    0x3469, 0x3467, 0x3466, 0x3465, 0x3464, 0x3463, 0x3462, 0x3461, 
+    0x3460, 0x345f, 0x345e, 0x345d, 0x345b, 0x345a, 0x3459, 0x3458, 
+    0x3457, 0x3456, 0x3455, 0x3454, 0x3453, 0x3452, 0x3451, 0x3450, 
+    0x344e, 0x344d, 0x344c, 0x344b, 0x344a, 0x3449, 0x3448, 0x3447, 
+    0x3446, 0x3445, 0x3444, 0x3443, 0x3442, 0x3441, 0x343f, 0x343e, 
+    0x343d, 0x343c, 0x343b, 0x343a, 0x3439, 0x3438, 0x3437, 0x3436, 
+    0x3435, 0x3434, 0x3433, 0x3432, 0x3431, 0x3430, 0x342f, 0x342e, 
+    0x342d, 0x342b, 0x342a, 0x3429, 0x3428, 0x3427, 0x3426, 0x3425, 
+    0x3424, 0x3423, 0x3422, 0x3421, 0x3420, 0x341f, 0x341e, 0x341d, 
+    0x341c, 0x341b, 0x341a, 0x3419, 0x3418, 0x3417, 0x3416, 0x3415, 
+    0x3414, 0x3413, 0x3412, 0x3411, 0x3410, 0x340f, 0x340e, 0x340d, 
+    0x340c, 0x340b, 0x340a, 0x3409, 0x3408, 0x3407, 0x3406, 0x3405, 
+    0x3404, 0x3403, 0x3402, 0x3401, 0x33ff, 0x33fd, 0x33fb, 0x33f9, 
+    0x33f7, 0x33f5, 0x33f3, 0x33f1, 0x33ef, 0x33ed, 0x33eb, 0x33e9, 
+    0x33e7, 0x33e5, 0x33e3, 0x33e1, 0x33df, 0x33dd, 0x33db, 0x33d9, 
+    0x33d8, 0x33d6, 0x33d4, 0x33d2, 0x33d0, 0x33ce, 0x33cc, 0x33ca, 
+    0x33c8, 0x33c6, 0x33c4, 0x33c2, 0x33c0, 0x33be, 0x33bc, 0x33ba, 
+    0x33b8, 0x33b6, 0x33b5, 0x33b3, 0x33b1, 0x33af, 0x33ad, 0x33ab, 
+    0x33a9, 0x33a7, 0x33a5, 0x33a3, 0x33a1, 0x339f, 0x339e, 0x339c, 
+    0x339a, 0x3398, 0x3396, 0x3394, 0x3392, 0x3390, 0x338e, 0x338d, 
+    0x338b, 0x3389, 0x3387, 0x3385, 0x3383, 0x3381, 0x337f, 0x337d, 
+    0x337c, 0x337a, 0x3378, 0x3376, 0x3374, 0x3372, 0x3370, 0x336f, 
+    0x336d, 0x336b, 0x3369, 0x3367, 0x3365, 0x3363, 0x3362, 0x3360, 
+    0x335e, 0x335c, 0x335a, 0x3358, 0x3357, 0x3355, 0x3353, 0x3351, 
+    0x334f, 0x334d, 0x334c, 0x334a, 0x3348, 0x3346, 0x3344, 0x3342, 
+    0x3341, 0x333f, 0x333d, 0x333b, 0x3339, 0x3338, 0x3336, 0x3334, 
+    0x3332, 0x3330, 0x332f, 0x332d, 0x332b, 0x3329, 0x3327, 0x3326, 
+    0x3324, 0x3322, 0x3320, 0x331f, 0x331d, 0x331b, 0x3319, 0x3317, 
+    0x3316, 0x3314, 0x3312, 0x3310, 0x330f, 0x330d, 0x330b, 0x3309, 
+    0x3308, 0x3306, 0x3304, 0x3302, 0x3301, 0x32ff, 0x32fd, 0x32fb, 
+    0x32fa, 0x32f8, 0x32f6, 0x32f4, 0x32f3, 0x32f1, 0x32ef, 0x32ed, 
+    0x32ec, 0x32ea, 0x32e8, 0x32e6, 0x32e5, 0x32e3, 0x32e1, 0x32e0, 
+    0x32de, 0x32dc, 0x32da, 0x32d9, 0x32d7, 0x32d5, 0x32d4, 0x32d2, 
+    0x32d0, 0x32ce, 0x32cd, 0x32cb, 0x32c9, 0x32c8, 0x32c6, 0x32c4, 
+    0x32c3, 0x32c1, 0x32bf, 0x32be, 0x32bc, 0x32ba, 0x32b8, 0x32b7, 
+    0x32b5, 0x32b3, 0x32b2, 0x32b0, 0x32ae, 0x32ad, 0x32ab, 0x32a9, 
+    0x32a8, 0x32a6, 0x32a4, 0x32a3, 0x32a1, 0x329f, 0x329e, 0x329c, 
+    0x329b, 0x3299, 0x3297, 0x3296, 0x3294, 0x3292, 0x3291, 0x328f, 
+    0x328d, 0x328c, 0x328a, 0x3288, 0x3287, 0x3285, 0x3284, 0x3282, 
+    0x3280, 0x327f, 0x327d, 0x327b, 0x327a, 0x3278, 0x3277, 0x3275, 
+    0x3273, 0x3272, 0x3270, 0x326f, 0x326d, 0x326b, 0x326a, 0x3268, 
+    0x3267, 0x3265, 0x3263, 0x3262, 0x3260, 0x325f, 0x325d, 0x325b, 
+    0x325a, 0x3258, 0x3257, 0x3255, 0x3253, 0x3252, 0x3250, 0x324f, 
+    0x324d, 0x324c, 0x324a, 0x3248, 0x3247, 0x3245, 0x3244, 0x3242, 
+    0x3241, 0x323f, 0x323d, 0x323c, 0x323a, 0x3239, 0x3237, 0x3236, 
+    0x3234, 0x3233, 0x3231, 0x322f, 0x322e, 0x322c, 0x322b, 0x3229, 
+    0x3228, 0x3226, 0x3225, 0x3223, 0x3222, 0x3220, 0x321f, 0x321d, 
+    0x321b, 0x321a, 0x3218, 0x3217, 0x3215, 0x3214, 0x3212, 0x3211, 
+    0x320f, 0x320e, 0x320c, 0x320b, 0x3209, 0x3208, 0x3206, 0x3205, 
+    0x3203, 0x3202, 0x3200, 0x31ff, 0x31fd, 0x31fc, 0x31fa, 0x31f9, 
+    0x31f7, 0x31f6, 0x31f4, 0x31f3, 0x31f1, 0x31f0, 0x31ee, 0x31ed, 
+    0x31eb, 0x31ea, 0x31e8, 0x31e7, 0x31e5, 0x31e4, 0x31e3, 0x31e1, 
+    0x31e0, 0x31de, 0x31dd, 0x31db, 0x31da, 0x31d8, 0x31d7, 0x31d5, 
+    0x31d4, 0x31d2, 0x31d1, 0x31d0, 0x31ce, 0x31cd, 0x31cb, 0x31ca, 
+    0x31c8, 0x31c7, 0x31c5, 0x31c4, 0x31c2, 0x31c1, 0x31c0, 0x31be, 
+    0x31bd, 0x31bb, 0x31ba, 0x31b8, 0x31b7, 0x31b6, 0x31b4, 0x31b3, 
+    0x31b1, 0x31b0, 0x31ae, 0x31ad, 0x31ac, 0x31aa, 0x31a9, 0x31a7, 
+    0x31a6, 0x31a5, 0x31a3, 0x31a2, 0x31a0, 0x319f, 0x319e, 0x319c, 
+    0x319b, 0x3199, 0x3198, 0x3197, 0x3195, 0x3194, 0x3192, 0x3191, 
+    0x3190, 0x318e, 0x318d, 0x318b, 0x318a, 0x3189, 0x3187, 0x3186, 
+    0x3184, 0x3183, 0x3182, 0x3180, 0x317f, 0x317e, 0x317c, 0x317b, 
+    0x3179, 0x3178, 0x3177, 0x3175, 0x3174, 0x3173, 0x3171, 0x3170, 
+    0x316f, 0x316d, 0x316c, 0x316b, 0x3169, 0x3168, 0x3166, 0x3165, 
+    0x3164, 0x3162, 0x3161, 0x3160, 0x315e, 0x315d, 0x315c, 0x315a, 
+    0x3159, 0x3158, 0x3156, 0x3155, 0x3154, 0x3152, 0x3151, 0x3150, 
+    0x314e, 0x314d, 0x314c, 0x314a, 0x3149, 0x3148, 0x3146, 0x3145, 
+    0x3144, 0x3142, 0x3141, 0x3140, 0x313f, 0x313d, 0x313c, 0x313b, 
+    0x3139, 0x3138, 0x3137, 0x3135, 0x3134, 0x3133, 0x3131, 0x3130, 
+    0x312f, 0x312e, 0x312c, 0x312b, 0x312a, 0x3128, 0x3127, 0x3126, 
+    0x3125, 0x3123, 0x3122, 0x3121, 0x311f, 0x311e, 0x311d, 0x311c, 
+    0x311a, 0x3119, 0x3118, 0x3117, 0x3115, 0x3114, 0x3113, 0x3111, 
+    0x3110, 0x310f, 0x310e, 0x310c, 0x310b, 0x310a, 0x3109, 0x3107, 
+    0x3106, 0x3105, 0x3104, 0x3102, 0x3101, 0x3100, 0x30ff, 0x30fd, 
+    0x30fc, 0x30fb, 0x30fa, 0x30f8, 0x30f7, 0x30f6, 0x30f5, 0x30f3, 
+    0x30f2, 0x30f1, 0x30f0, 0x30ee, 0x30ed, 0x30ec, 0x30eb, 0x30ea, 
+    0x30e8, 0x30e7, 0x30e6, 0x30e5, 0x30e3, 0x30e2, 0x30e1, 0x30e0, 
+    0x30df, 0x30dd, 0x30dc, 0x30db, 0x30da, 0x30d8, 0x30d7, 0x30d6, 
+    0x30d5, 0x30d4, 0x30d2, 0x30d1, 0x30d0, 0x30cf, 0x30ce, 0x30cc, 
+    0x30cb, 0x30ca, 0x30c9, 0x30c8, 0x30c6, 0x30c5, 0x30c4, 0x30c3, 
+    0x30c2, 0x30c0, 0x30bf, 0x30be, 0x30bd, 0x30bc, 0x30bb, 0x30b9, 
+    0x30b8, 0x30b7, 0x30b6, 0x30b5, 0x30b3, 0x30b2, 0x30b1, 0x30b0, 
+    0x30af, 0x30ae, 0x30ac, 0x30ab, 0x30aa, 0x30a9, 0x30a8, 0x30a7, 
+    0x30a5, 0x30a4, 0x30a3, 0x30a2, 0x30a1, 0x30a0, 0x309e, 0x309d, 
+    0x309c, 0x309b, 0x309a, 0x3099, 0x3098, 0x3096, 0x3095, 0x3094, 
+    0x3093, 0x3092, 0x3091, 0x3090, 0x308e, 0x308d, 0x308c, 0x308b, 
+    0x308a, 0x3089, 0x3088, 0x3086, 0x3085, 0x3084, 0x3083, 0x3082, 
+    0x3081, 0x3080, 0x307f, 0x307d, 0x307c, 0x307b, 0x307a, 0x3079, 
+    0x3078, 0x3077, 0x3076, 0x3075, 0x3073, 0x3072, 0x3071, 0x3070, 
+    0x306f, 0x306e, 0x306d, 0x306c, 0x306b, 0x3069, 0x3068, 0x3067, 
+    0x3066, 0x3065, 0x3064, 0x3063, 0x3062, 0x3061, 0x3060, 0x305e, 
+    0x305d, 0x305c, 0x305b, 0x305a, 0x3059, 0x3058, 0x3057, 0x3056, 
+    0x3055, 0x3053, 0x3050, 0x304e, 0x304c, 0x304a, 0x3048, 0x3046, 
+    0x3043, 0x3041, 0x303f, 0x303d, 0x303b, 0x3039, 0x3037, 0x3035, 
+    0x3033, 0x3030, 0x302e, 0x302c, 0x302a, 0x3028, 0x3026, 0x3024, 
+    0x3022, 0x3020, 0x301e, 0x301c, 0x301a, 0x3018, 0x3016, 0x3014, 
+    0x3011, 0x300f, 0x300d, 0x300b, 0x3009, 0x3007, 0x3005, 0x3003, 
+    0x3001, 0x2fff, 0x2ffb, 0x2ff7, 0x2ff3, 0x2fef, 0x2feb, 0x2fe7, 
+    0x2fe3, 0x2fdf, 0x2fdb, 0x2fd7, 0x2fd3, 0x2fcf, 0x2fcb, 0x2fc7, 
+    0x2fc4, 0x2fc0, 0x2fbc, 0x2fb8, 0x2fb4, 0x2fb0, 0x2fac, 0x2fa9, 
+    0x2fa5, 0x2fa1, 0x2f9d, 0x2f99, 0x2f96, 0x2f92, 0x2f8e, 0x2f8a, 
+    0x2f86, 0x2f83, 0x2f7f, 0x2f7b, 0x2f77, 0x2f74, 0x2f70, 0x2f6c, 
+    0x2f69, 0x2f65, 0x2f61, 0x2f5e, 0x2f5a, 0x2f56, 0x2f52, 0x2f4f, 
+    0x2f4b, 0x2f48, 0x2f44, 0x2f40, 0x2f3d, 0x2f39, 0x2f35, 0x2f32, 
+    0x2f2e, 0x2f2b, 0x2f27, 0x2f23, 0x2f20, 0x2f1c, 0x2f19, 0x2f15, 
+    0x2f12, 0x2f0e, 0x2f0b, 0x2f07, 0x2f04, 0x2f00, 0x2efd, 0x2ef9, 
+    0x2ef6, 0x2ef2, 0x2eef, 0x2eeb, 0x2ee8, 0x2ee4, 0x2ee1, 0x2edd, 
+    0x2eda, 0x2ed7, 0x2ed3, 0x2ed0, 0x2ecc, 0x2ec9, 0x2ec6, 0x2ec2, 
+    0x2ebf, 0x2ebb, 0x2eb8, 0x2eb5, 0x2eb1, 0x2eae, 0x2eab, 0x2ea7, 
+    0x2ea4, 0x2ea1, 0x2e9d, 0x2e9a, 0x2e97, 0x2e94, 0x2e90, 0x2e8d, 
+    0x2e8a, 0x2e86, 0x2e83, 0x2e80, 0x2e7d, 0x2e79, 0x2e76, 0x2e73, 
+    0x2e70, 0x2e6d, 0x2e69, 0x2e66, 0x2e63, 0x2e60, 0x2e5d, 0x2e59, 
+    0x2e56, 0x2e53, 0x2e50, 0x2e4d, 0x2e4a, 0x2e46, 0x2e43, 0x2e40, 
+    0x2e3d, 0x2e3a, 0x2e37, 0x2e34, 0x2e31, 0x2e2e, 0x2e2a, 0x2e27, 
+    0x2e24, 0x2e21, 0x2e1e, 0x2e1b, 0x2e18, 0x2e15, 0x2e12, 0x2e0f, 
+    0x2e0c, 0x2e09, 0x2e06, 0x2e03, 0x2e00, 0x2dfd, 0x2dfa, 0x2df7, 
+    0x2df4, 0x2df1, 0x2dee, 0x2deb, 0x2de8, 0x2de5, 0x2de2, 0x2ddf, 
+    0x2ddc, 0x2dd9, 0x2dd6, 0x2dd4, 0x2dd1, 0x2dce, 0x2dcb, 0x2dc8, 
+    0x2dc5, 0x2dc2, 0x2dbf, 0x2dbc, 0x2dba, 0x2db7, 0x2db4, 0x2db1, 
+    0x2dae, 0x2dab, 0x2da8, 0x2da6, 0x2da3, 0x2da0, 0x2d9d, 0x2d9a, 
+    0x2d98, 0x2d95, 0x2d92, 0x2d8f, 0x2d8c, 0x2d8a, 0x2d87, 0x2d84, 
+    0x2d81, 0x2d7f, 0x2d7c, 0x2d79, 0x2d76, 0x2d74, 0x2d71, 0x2d6e, 
+    0x2d6c, 0x2d69, 0x2d66, 0x2d63, 0x2d61, 0x2d5e, 0x2d5b, 0x2d59, 
+    0x2d56, 0x2d53, 0x2d51, 0x2d4e, 0x2d4b, 0x2d49, 0x2d46, 0x2d44, 
+    0x2d41, 0x2d3e, 0x2d3c, 0x2d39, 0x2d36, 0x2d34, 0x2d31, 0x2d2f, 
+    0x2d2c, 0x2d29, 0x2d27, 0x2d24, 0x2d22, 0x2d1f, 0x2d1d, 0x2d1a, 
+    0x2d18, 0x2d15, 0x2d12, 0x2d10, 0x2d0d, 0x2d0b, 0x2d08, 0x2d06, 
+    0x2d03, 0x2d01, 0x2cfe, 0x2cfc, 0x2cf9, 0x2cf7, 0x2cf4, 0x2cf2, 
+    0x2cef, 0x2ced, 0x2cea, 0x2ce8, 0x2ce6, 0x2ce3, 0x2ce1, 0x2cde, 
+    0x2cdc, 0x2cd9, 0x2cd7, 0x2cd5, 0x2cd2, 0x2cd0, 0x2ccd, 0x2ccb, 
+    0x2cc9, 0x2cc6, 0x2cc4, 0x2cc1, 0x2cbf, 0x2cbd, 0x2cba, 0x2cb8, 
+    0x2cb6, 0x2cb3, 0x2cb1, 0x2caf, 0x2cac, 0x2caa, 0x2ca7, 0x2ca5, 
+    0x2ca3, 0x2ca1, 0x2c9e, 0x2c9c, 0x2c9a, 0x2c97, 0x2c95, 0x2c93, 
+    0x2c90, 0x2c8e, 0x2c8c, 0x2c8a, 0x2c87, 0x2c85, 0x2c83, 0x2c81, 
+    0x2c7e, 0x2c7c, 0x2c7a, 0x2c78, 0x2c75, 0x2c73, 0x2c71, 0x2c6f, 
+    0x2c6d, 0x2c6a, 0x2c68, 0x2c66, 0x2c64, 0x2c61, 0x2c5f, 0x2c5d, 
+    0x2c5b, 0x2c59, 0x2c57, 0x2c54, 0x2c52, 0x2c50, 0x2c4e, 0x2c4c, 
+    0x2c4a, 0x2c48, 0x2c45, 0x2c43, 0x2c41, 0x2c3f, 0x2c3d, 0x2c3b, 
+    0x2c39, 0x2c37, 0x2c34, 0x2c32, 0x2c30, 0x2c2e, 0x2c2c, 0x2c2a, 
+    0x2c28, 0x2c26, 0x2c24, 0x2c22, 0x2c20, 0x2c1e, 0x2c1b, 0x2c19, 
+    0x2c17, 0x2c15, 0x2c13, 0x2c11, 0x2c0f, 0x2c0d, 0x2c0b, 0x2c09, 
+    0x2c07, 0x2c05, 0x2c03, 0x2c01, 0x2bfe, 0x2bfa, 0x2bf6, 0x2bf2, 
+    0x2bee, 0x2bea, 0x2be6, 0x2be2, 0x2bdf, 0x2bdb, 0x2bd7, 0x2bd3, 
+    0x2bcf, 0x2bcb, 0x2bc7, 0x2bc3, 0x2bbf, 0x2bbb, 0x2bb8, 0x2bb4, 
+    0x2bb0, 0x2bac, 0x2ba8, 0x2ba4, 0x2ba1, 0x2b9d, 0x2b99, 0x2b95, 
+    0x2b91, 0x2b8e, 0x2b8a, 0x2b86, 0x2b82, 0x2b7f, 0x2b7b, 0x2b77, 
+    0x2b73, 0x2b70, 0x2b6c, 0x2b68, 0x2b64, 0x2b61, 0x2b5d, 0x2b59, 
+    0x2b56, 0x2b52, 0x2b4e, 0x2b4b, 0x2b47, 0x2b44, 0x2b40, 0x2b3c, 
+    0x2b39, 0x2b35, 0x2b31, 0x2b2e, 0x2b2a, 0x2b27, 0x2b23, 0x2b20, 
+    0x2b1c, 0x2b18, 0x2b15, 0x2b11, 0x2b0e, 0x2b0a, 0x2b07, 0x2b03, 
+    0x2b00, 0x2afc, 0x2af9, 0x2af5, 0x2af2, 0x2aee, 0x2aeb, 0x2ae7, 
+    0x2ae4, 0x2ae1, 0x2add, 0x2ada, 0x2ad6, 0x2ad3, 0x2acf, 0x2acc, 
+    0x2ac9, 0x2ac5, 0x2ac2, 0x2abe, 0x2abb, 0x2ab8, 0x2ab4, 0x2ab1, 
+    0x2aae, 0x2aaa, 0x2aa7, 0x2aa4, 0x2aa0, 0x2a9d, 0x2a9a, 0x2a97, 
+    0x2a93, 0x2a90, 0x2a8d, 0x2a89, 0x2a86, 0x2a83, 0x2a80, 0x2a7c, 
+    0x2a79, 0x2a76, 0x2a73, 0x2a6f, 0x2a6c, 0x2a69, 0x2a66, 0x2a63, 
+    0x2a5f, 0x2a5c, 0x2a59, 0x2a56, 0x2a53, 0x2a50, 0x2a4c, 0x2a49, 
+    0x2a46, 0x2a43, 0x2a40, 0x2a3d, 0x2a3a, 0x2a37, 0x2a33, 0x2a30, 
+    0x2a2d, 0x2a2a, 0x2a27, 0x2a24, 0x2a21, 0x2a1e, 0x2a1b, 0x2a18, 
+    0x2a15, 0x2a12, 0x2a0f, 0x2a0c, 0x2a09, 0x2a06, 0x2a03, 0x2a00, 
+    0x29fd, 0x29fa, 0x29f7, 0x29f4, 0x29f1, 0x29ee, 0x29eb, 0x29e8, 
+    0x29e5, 0x29e2, 0x29df, 0x29dc, 0x29d9, 0x29d6, 0x29d3, 0x29d0, 
+    0x29cd, 0x29cb, 0x29c8, 0x29c5, 0x29c2, 0x29bf, 0x29bc, 0x29b9, 
+    0x29b6, 0x29b4, 0x29b1, 0x29ae, 0x29ab, 0x29a8, 0x29a5, 0x29a3, 
+    0x29a0, 0x299d, 0x299a, 0x2997, 0x2995, 0x2992, 0x298f, 0x298c, 
+    0x2989, 0x2987, 0x2984, 0x2981, 0x297e, 0x297c, 0x2979, 0x2976, 
+    0x2973, 0x2971, 0x296e, 0x296b, 0x2969, 0x2966, 0x2963, 0x2960, 
+    0x295e, 0x295b, 0x2958, 0x2956, 0x2953, 0x2950, 0x294e, 0x294b, 
+    0x2948, 0x2946, 0x2943, 0x2941, 0x293e, 0x293b, 0x2939, 0x2936, 
+    0x2934, 0x2931, 0x292e, 0x292c, 0x2929, 0x2927, 0x2924, 0x2921, 
+    0x291f, 0x291c, 0x291a, 0x2917, 0x2915, 0x2912, 0x2910, 0x290d, 
+    0x290b, 0x2908, 0x2906, 0x2903, 0x2901, 0x28fe, 0x28fc, 0x28f9, 
+    0x28f7, 0x28f4, 0x28f2, 0x28ef, 0x28ed, 0x28ea, 0x28e8, 0x28e5, 
+    0x28e3, 0x28e0, 0x28de, 0x28dc, 0x28d9, 0x28d7, 0x28d4, 0x28d2, 
+    0x28cf, 0x28cd, 0x28cb, 0x28c8, 0x28c6, 0x28c3, 0x28c1, 0x28bf, 
+    0x28bc, 0x28ba, 0x28b8, 0x28b5, 0x28b3, 0x28b1, 0x28ae, 0x28ac, 
+    0x28aa, 0x28a7, 0x28a5, 0x28a3, 0x28a0, 0x289e, 0x289c, 0x2899, 
+    0x2897, 0x2895, 0x2892, 0x2890, 0x288e, 0x288c, 0x2889, 0x2887, 
+    0x2885, 0x2883, 0x2880, 0x287e, 0x287c, 0x287a, 0x2877, 0x2875, 
+    0x2873, 0x2871, 0x286e, 0x286c, 0x286a, 0x2868, 0x2866, 0x2863, 
+    0x2861, 0x285f, 0x285d, 0x285b, 0x2859, 0x2856, 0x2854, 0x2852, 
+    0x2850, 0x284e, 0x284c, 0x2849, 0x2847, 0x2845, 0x2843, 0x2841, 
+    0x283f, 0x283d, 0x283b, 0x2838, 0x2836, 0x2834, 0x2832, 0x2830, 
+    0x282e, 0x282c, 0x282a, 0x2828, 0x2826, 0x2824, 0x2821, 0x281f, 
+    0x281d, 0x281b, 0x2819, 0x2817, 0x2815, 0x2813, 0x2811, 0x280f, 
+    0x280d, 0x280b, 0x2809, 0x2807, 0x2805, 0x2803, 0x2801, 0x27fe, 
+    0x27fa, 0x27f6, 0x27f2, 0x27ee, 0x27ea, 0x27e6, 0x27e2, 0x27de, 
+    0x27da, 0x27d6, 0x27d2, 0x27ce, 0x27cb, 0x27c7, 0x27c3, 0x27bf, 
+    0x27bb, 0x27b7, 0x27b3, 0x27af, 0x27ac, 0x27a8, 0x27a4, 0x27a0, 
+    0x279c, 0x2799, 0x2795, 0x2791, 0x278d, 0x2789, 0x2786, 0x2782, 
+    0x277e, 0x277a, 0x2777, 0x2773, 0x276f, 0x276b, 0x2768, 0x2764, 
+    0x2760, 0x275d, 0x2759, 0x2755, 0x2752, 0x274e, 0x274a, 0x2747, 
+    0x2743, 0x273f, 0x273c, 0x2738, 0x2735, 0x2731, 0x272d, 0x272a, 
+    0x2726, 0x2723, 0x271f, 0x271c, 0x2718, 0x2715, 0x2711, 0x270d, 
+    0x270a, 0x2706, 0x2703, 0x26ff, 0x26fc, 0x26f8, 0x26f5, 0x26f1, 
+    0x26ee, 0x26eb, 0x26e7, 0x26e4, 0x26e0, 0x26dd, 0x26d9, 0x26d6, 
+    0x26d2, 0x26cf, 0x26cc, 0x26c8, 0x26c5, 0x26c2, 0x26be, 0x26bb, 
+    0x26b7, 0x26b4, 0x26b1, 0x26ad, 0x26aa, 0x26a7, 0x26a3, 0x26a0, 
+    0x269d, 0x2699, 0x2696, 0x2693, 0x2690, 0x268c, 0x2689, 0x2686, 
+    0x2682, 0x267f, 0x267c, 0x2679, 0x2676, 0x2672, 0x266f, 0x266c, 
+    0x2669, 0x2665, 0x2662, 0x265f, 0x265c, 0x2659, 0x2656, 0x2652, 
+    0x264f, 0x264c, 0x2649, 0x2646, 0x2643, 0x2640, 0x263c, 0x2639, 
+    0x2636, 0x2633, 0x2630, 0x262d, 0x262a, 0x2627, 0x2624, 0x2621, 
+    0x261e, 0x261a, 0x2617, 0x2614, 0x2611, 0x260e, 0x260b, 0x2608, 
+    0x2605, 0x2602, 0x25ff, 0x25fc, 0x25f9, 0x25f6, 0x25f3, 0x25f0, 
+    0x25ed, 0x25ea, 0x25e7, 0x25e4, 0x25e2, 0x25df, 0x25dc, 0x25d9, 
+    0x25d6, 0x25d3, 0x25d0, 0x25cd, 0x25ca, 0x25c7, 0x25c4, 0x25c2, 
+    0x25bf, 0x25bc, 0x25b9, 0x25b6, 0x25b3, 0x25b0, 0x25ae, 0x25ab, 
+    0x25a8, 0x25a5, 0x25a2, 0x259f, 0x259d, 0x259a, 0x2597, 0x2594, 
+    0x2591, 0x258f, 0x258c, 0x2589, 0x2586, 0x2584, 0x2581, 0x257e, 
+    0x257b, 0x2579, 0x2576, 0x2573, 0x2570, 0x256e, 0x256b, 0x2568, 
+    0x2566, 0x2563, 0x2560, 0x255e, 0x255b, 0x2558, 0x2555, 0x2553, 
+    0x2550, 0x254e, 0x254b, 0x2548, 0x2546, 0x2543, 0x2540, 0x253e, 
+    0x253b, 0x2538, 0x2536, 0x2533, 0x2531, 0x252e, 0x252b, 0x2529, 
+    0x2526, 0x2524, 0x2521, 0x251f, 0x251c, 0x2519, 0x2517, 0x2514, 
+    0x2512, 0x250f, 0x250d, 0x250a, 0x2508, 0x2505, 0x2503, 0x2500, 
+    0x24fe, 0x24fb, 0x24f9, 0x24f6, 0x24f4, 0x24f1, 0x24ef, 0x24ec, 
+    0x24ea, 0x24e7, 0x24e5, 0x24e3, 0x24e0, 0x24de, 0x24db, 0x24d9, 
+    0x24d6, 0x24d4, 0x24d2, 0x24cf, 0x24cd, 0x24ca, 0x24c8, 0x24c6, 
+    0x24c3, 0x24c1, 0x24be, 0x24bc, 0x24ba, 0x24b7, 0x24b5, 0x24b3, 
+    0x24b0, 0x24ac, 0x24a7, 0x24a2, 0x249e, 0x2499, 0x2495, 0x2490, 
+    0x248b, 0x2487, 0x2482, 0x247e, 0x2479, 0x2475, 0x2470, 0x246c, 
+    0x2468, 0x2463, 0x245f, 0x245a, 0x2456, 0x2452, 0x244d, 0x2449, 
+    0x2445, 0x2441, 0x243c, 0x2438, 0x2434, 0x2430, 0x242c, 0x2427, 
+    0x2423, 0x241f, 0x241b, 0x2417, 0x2413, 0x240f, 0x240b, 0x2407, 
+    0x2403, 0x23fd, 0x23f5, 0x23ed, 0x23e6, 0x23de, 0x23d6, 0x23ce, 
+    0x23c6, 0x23be, 0x23b7, 0x23af, 0x23a7, 0x23a0, 0x2398, 0x2391, 
+    0x2389, 0x2381, 0x237a, 0x2373, 0x236b, 0x2364, 0x235c, 0x2355, 
+    0x234e, 0x2346, 0x233f, 0x2338, 0x2331, 0x2329, 0x2322, 0x231b, 
+    0x2314, 0x230d, 0x2306, 0x22ff, 0x22f8, 0x22f1, 0x22ea, 0x22e3, 
+    0x22dc, 0x22d6, 0x22cf, 0x22c8, 0x22c1, 0x22ba, 0x22b4, 0x22ad, 
+    0x22a6, 0x22a0, 0x2299, 0x2292, 0x228c, 0x2285, 0x227f, 0x2278, 
+    0x2272, 0x226c, 0x2265, 0x225f, 0x2258, 0x2252, 0x224c, 0x2245, 
+    0x223f, 0x2239, 0x2233, 0x222d, 0x2226, 0x2220, 0x221a, 0x2214, 
+    0x220e, 0x2208, 0x2202, 0x21fc, 0x21f6, 0x21f0, 0x21ea, 0x21e4, 
+    0x21de, 0x21d8, 0x21d3, 0x21cd, 0x21c7, 0x21c1, 0x21bb, 0x21b6, 
+    0x21b0, 0x21aa, 0x21a5, 0x219f, 0x219a, 0x2194, 0x218e, 0x2189, 
+    0x2183, 0x217e, 0x2178, 0x2173, 0x216d, 0x2168, 0x2163, 0x215d, 
+    0x2158, 0x2153, 0x214d, 0x2148, 0x2143, 0x213d, 0x2138, 0x2133, 
+    0x212e, 0x2129, 0x2123, 0x211e, 0x2119, 0x2114, 0x210f, 0x210a, 
+    0x2105, 0x2100, 0x20fb, 0x20f6, 0x20f1, 0x20ec, 0x20e7, 0x20e2, 
+    0x20dd, 0x20d9, 0x20d4, 0x20cf, 0x20ca, 0x20c5, 0x20c1, 0x20bc, 
+    0x20b7, 0x20b2, 0x20ae, 0x20a9, 0x20a4, 0x20a0, 0x209b, 0x2097, 
+    0x2092, 0x208d, 0x2089, 0x2084, 0x2080, 0x207b, 0x2077, 0x2072, 
+    0x206e, 0x206a, 0x2065, 0x2061, 0x205c, 0x2058, 0x2054, 0x204f, 
+    0x204b, 0x2047, 0x2043, 0x203e, 0x203a, 0x2036, 0x2032, 0x202d, 
+    0x2029, 0x2025, 0x2021, 0x201d, 0x2019, 0x2015, 0x2011, 0x200d, 
+    0x2009, 0x2004, 0x2000, 0x1ff9, 0x1ff1, 0x1fe9, 0x1fe1, 0x1fd9, 
+    0x1fd1, 0x1fca, 0x1fc2, 0x1fba, 0x1fb2, 0x1fab, 0x1fa3, 0x1f9c, 
+    0x1f94, 0x1f8c, 0x1f85, 0x1f7d, 0x1f76, 0x1f6e, 0x1f67, 0x1f60, 
+    0x1f58, 0x1f51, 0x1f4a, 0x1f42, 0x1f3b, 0x1f34, 0x1f2d, 0x1f26, 
+    0x1f1e, 0x1f17, 0x1f10, 0x1f09, 0x1f02, 0x1efb, 0x1ef4, 0x1eed, 
+    0x1ee6, 0x1edf, 0x1ed9, 0x1ed2, 0x1ecb, 0x1ec4, 0x1ebd, 0x1eb7, 
+    0x1eb0, 0x1ea9, 0x1ea3, 0x1e9c, 0x1e95, 0x1e8f, 0x1e88, 0x1e82, 
+    0x1e7b, 0x1e75, 0x1e6e, 0x1e68, 0x1e62, 0x1e5b, 0x1e55, 0x1e4f, 
+    0x1e48, 0x1e42, 0x1e3c, 0x1e36, 0x1e2f, 0x1e29, 0x1e23, 0x1e1d, 
+    0x1e17, 0x1e11, 0x1e0b, 0x1e05, 0x1dff, 0x1df9, 0x1df3, 0x1ded, 
+    0x1de7, 0x1de1, 0x1ddb, 0x1dd5, 0x1dcf, 0x1dca, 0x1dc4, 0x1dbe, 
+    0x1db8, 0x1db3, 0x1dad, 0x1da7, 0x1da2, 0x1d9c, 0x1d96, 0x1d91, 
+    0x1d8b, 0x1d86, 0x1d80, 0x1d7b, 0x1d75, 0x1d70, 0x1d6a, 0x1d65, 
+    0x1d60, 0x1d5a, 0x1d55, 0x1d50, 0x1d4a, 0x1d45, 0x1d40, 0x1d3b, 
+    0x1d35, 0x1d30, 0x1d2b, 0x1d26, 0x1d21, 0x1d1b, 0x1d16, 0x1d11, 
+    0x1d0c, 0x1d07, 0x1d02, 0x1cfd, 0x1cf8, 0x1cf3, 0x1cee, 0x1ce9, 
+    0x1ce5, 0x1ce0, 0x1cdb, 0x1cd6, 0x1cd1, 0x1ccc, 0x1cc7, 0x1cc3, 
+    0x1cbe, 0x1cb9, 0x1cb5, 0x1cb0, 0x1cab, 0x1ca6, 0x1ca2, 0x1c9d, 
+    0x1c99, 0x1c94, 0x1c8f, 0x1c8b, 0x1c86, 0x1c82, 0x1c7d, 0x1c79, 
+    0x1c74, 0x1c70, 0x1c6c, 0x1c67, 0x1c63, 0x1c5e, 0x1c5a, 0x1c56, 
+    0x1c51, 0x1c4d, 0x1c49, 0x1c44, 0x1c40, 0x1c3c, 0x1c38, 0x1c34, 
+    0x1c2f, 0x1c2b, 0x1c27, 0x1c23, 0x1c1f, 0x1c1b, 0x1c17, 0x1c12, 
+    0x1c0e, 0x1c0a, 0x1c06, 0x1c02, 0x1bfd, 0x1bf5, 0x1bed, 0x1be5, 
+    0x1bdd, 0x1bd5, 0x1bcd, 0x1bc5, 0x1bbe, 0x1bb6, 0x1bae, 0x1ba7, 
+    0x1b9f, 0x1b97, 0x1b90, 0x1b88, 0x1b81, 0x1b79, 0x1b72, 0x1b6a, 
+    0x1b63, 0x1b5c, 0x1b54, 0x1b4d, 0x1b46, 0x1b3e, 0x1b37, 0x1b30, 
+    0x1b29, 0x1b22, 0x1b1a, 0x1b13, 0x1b0c, 0x1b05, 0x1afe, 0x1af7, 
+    0x1af0, 0x1ae9, 0x1ae2, 0x1adc, 0x1ad5, 0x1ace, 0x1ac7, 0x1ac0, 
+    0x1aba, 0x1ab3, 0x1aac, 0x1aa6, 0x1a9f, 0x1a98, 0x1a92, 0x1a8b, 
+    0x1a85, 0x1a7e, 0x1a78, 0x1a71, 0x1a6b, 0x1a64, 0x1a5e, 0x1a58, 
+    0x1a51, 0x1a4b, 0x1a45, 0x1a3f, 0x1a38, 0x1a32, 0x1a2c, 0x1a26, 
+    0x1a20, 0x1a19, 0x1a13, 0x1a0d, 0x1a07, 0x1a01, 0x19fb, 0x19f5, 
+    0x19ef, 0x19e9, 0x19e4, 0x19de, 0x19d8, 0x19d2, 0x19cc, 0x19c6, 
+    0x19c1, 0x19bb, 0x19b5, 0x19af, 0x19aa, 0x19a4, 0x199f, 0x1999, 
+    0x1993, 0x198e, 0x1988, 0x1983, 0x197d, 0x1978, 0x1972, 0x196d, 
+    0x1967, 0x1962, 0x195d, 0x1957, 0x1952, 0x194d, 0x1947, 0x1942, 
+    0x193d, 0x1938, 0x1932, 0x192d, 0x1928, 0x1923, 0x191e, 0x1919, 
+    0x1914, 0x190f, 0x1909, 0x1904, 0x18ff, 0x18fa, 0x18f5, 0x18f1, 
+    0x18ec, 0x18e7, 0x18e2, 0x18dd, 0x18d8, 0x18d3, 0x18ce, 0x18ca, 
+    0x18c5, 0x18c0, 0x18bb, 0x18b7, 0x18b2, 0x18ad, 0x18a9, 0x18a4, 
+    0x189f, 0x189b, 0x1896, 0x1891, 0x188d, 0x1888, 0x1884, 0x187f, 
+    0x187b, 0x1876, 0x1872, 0x186e, 0x1869, 0x1865, 0x1860, 0x185c, 
+    0x1858, 0x1853, 0x184f, 0x184b, 0x1846, 0x1842, 0x183e, 0x183a, 
+    0x1835, 0x1831, 0x182d, 0x1829, 0x1825, 0x1821, 0x181c, 0x1818, 
+    0x1814, 0x1810, 0x180c, 0x1808, 0x1804, 0x1800, 0x17f8, 0x17f0, 
+    0x17e8, 0x17e0, 0x17d8, 0x17d1, 0x17c9, 0x17c1, 0x17b9, 0x17b2, 
+    0x17aa, 0x17a2, 0x179b, 0x1793, 0x178c, 0x1784, 0x177d, 0x1775, 
+    0x176e, 0x1766, 0x175f, 0x1757, 0x1750, 0x1749, 0x1742, 0x173a, 
+    0x1733, 0x172c, 0x1725, 0x171e, 0x1717, 0x170f, 0x1708, 0x1701, 
+    0x16fa, 0x16f3, 0x16ec, 0x16e6, 0x16df, 0x16d8, 0x16d1, 0x16ca, 
+    0x16c3, 0x16bd, 0x16b6, 0x16af, 0x16a9, 0x16a2, 0x169b, 0x1695, 
+    0x168e, 0x1688, 0x1681, 0x167b, 0x1674, 0x166e, 0x1667, 0x1661, 
+    0x165b, 0x1654, 0x164e, 0x1648, 0x1641, 0x163b, 0x1635, 0x162f, 
+    0x1628, 0x1622, 0x161c, 0x1616, 0x1610, 0x160a, 0x1604, 0x15fe, 
+    0x15f8, 0x15f2, 0x15ec, 0x15e6, 0x15e0, 0x15da, 0x15d5, 0x15cf, 
+    0x15c9, 0x15c3, 0x15bd, 0x15b8, 0x15b2, 0x15ac, 0x15a7, 0x15a1, 
+    0x159b, 0x1596, 0x1590, 0x158b, 0x1585, 0x1580, 0x157a, 0x1575, 
+    0x156f, 0x156a, 0x1564, 0x155f, 0x155a, 0x1554, 0x154f, 0x154a, 
+    0x1544, 0x153f, 0x153a, 0x1535, 0x1530, 0x152a, 0x1525, 0x1520, 
+    0x151b, 0x1516, 0x1511, 0x150c, 0x1507, 0x1502, 0x14fd, 0x14f8, 
+    0x14f3, 0x14ee, 0x14e9, 0x14e4, 0x14df, 0x14da, 0x14d5, 0x14d1, 
+    0x14cc, 0x14c7, 0x14c2, 0x14bd, 0x14b9, 0x14b4, 0x14af, 0x14ab, 
+    0x14a6, 0x14a1, 0x149d, 0x1498, 0x1494, 0x148f, 0x148a, 0x1486, 
+    0x1481, 0x147d, 0x1478, 0x1474, 0x146f, 0x146b, 0x1467, 0x1462, 
+    0x145e, 0x145a, 0x1455, 0x1451, 0x144d, 0x1448, 0x1444, 0x1440, 
+    0x143b, 0x1437, 0x1433, 0x142f, 0x142b, 0x1427, 0x1422, 0x141e, 
+    0x141a, 0x1416, 0x1412, 0x140e, 0x140a, 0x1406, 0x1402, 0x13fc, 
+    0x13f4, 0x13ec, 0x13e4, 0x13dc, 0x13d4, 0x13cc, 0x13c5, 0x13bd, 
+    0x13b5, 0x13ad, 0x13a6, 0x139e, 0x1396, 0x138f, 0x1387, 0x1380, 
+    0x1378, 0x1371, 0x1369, 0x1362, 0x135b, 0x1353, 0x134c, 0x1345, 
+    0x133e, 0x1336, 0x132f, 0x1328, 0x1321, 0x131a, 0x1313, 0x130c, 
+    0x1304, 0x12fd, 0x12f7, 0x12f0, 0x12e9, 0x12e2, 0x12db, 0x12d4, 
+    0x12cd, 0x12c6, 0x12c0, 0x12b9, 0x12b2, 0x12ac, 0x12a5, 0x129e, 
+    0x1298, 0x1291, 0x128b, 0x1284, 0x127d, 0x1277, 0x1271, 0x126a, 
+    0x1264, 0x125d, 0x1257, 0x1251, 0x124a, 0x1244, 0x123e, 0x1238, 
+    0x1231, 0x122b, 0x1225, 0x121f, 0x1219, 0x1213, 0x120d, 0x1207, 
+    0x1201, 0x11fb, 0x11f5, 0x11ef, 0x11e9, 0x11e3, 0x11dd, 0x11d7, 
+    0x11d1, 0x11cc, 0x11c6, 0x11c0, 0x11ba, 0x11b5, 0x11af, 0x11a9, 
+    0x11a4, 0x119e, 0x1198, 0x1193, 0x118d, 0x1188, 0x1182, 0x117d, 
+    0x1177, 0x1172, 0x116c, 0x1167, 0x1161, 0x115c, 0x1157, 0x1151, 
+    0x114c, 0x1147, 0x1142, 0x113c, 0x1137, 0x1132, 0x112d, 0x1127, 
+    0x1122, 0x111d, 0x1118, 0x1113, 0x110e, 0x1109, 0x1104, 0x10ff, 
+    0x10fa, 0x10f5, 0x10f0, 0x10eb, 0x10e6, 0x10e1, 0x10dc, 0x10d8, 
+    0x10d3, 0x10ce, 0x10c9, 0x10c4, 0x10c0, 0x10bb, 0x10b6, 0x10b1, 
+    0x10ad, 0x10a8, 0x10a3, 0x109f, 0x109a, 0x1096, 0x1091, 0x108c, 
+    0x1088, 0x1083, 0x107f, 0x107a, 0x1076, 0x1071, 0x106d, 0x1069, 
+    0x1064, 0x1060, 0x105b, 0x1057, 0x1053, 0x104e, 0x104a, 0x1046, 
+    0x1042, 0x103d, 0x1039, 0x1035, 0x1031, 0x102d, 0x1028, 0x1024, 
+    0x1020, 0x101c, 0x1018, 0x1014, 0x1010, 0x100c, 0x1008, 0x1004, 
+    0x0fff, 0x0ff7, 0x0fef, 0x0fe7, 0x0fdf, 0x0fd8, 0x0fd0, 0x0fc8, 
+    0x0fc0, 0x0fb8, 0x0fb1, 0x0fa9, 0x0fa1, 0x0f9a, 0x0f92, 0x0f8b, 
+    0x0f83, 0x0f7c, 0x0f74, 0x0f6d, 0x0f65, 0x0f5e, 0x0f57, 0x0f4f, 
+    0x0f48, 0x0f41, 0x0f3a, 0x0f32, 0x0f2b, 0x0f24, 0x0f1d, 0x0f16, 
+    0x0f0f, 0x0f08, 0x0f01, 0x0efa, 0x0ef3, 0x0eec, 0x0ee5, 0x0ede, 
+    0x0ed7, 0x0ed0, 0x0ec9, 0x0ec3, 0x0ebc, 0x0eb5, 0x0eaf, 0x0ea8, 
+    0x0ea1, 0x0e9b, 0x0e94, 0x0e8d, 0x0e87, 0x0e80, 0x0e7a, 0x0e73, 
+    0x0e6d, 0x0e67, 0x0e60, 0x0e5a, 0x0e53, 0x0e4d, 0x0e47, 0x0e41, 
+    0x0e3a, 0x0e34, 0x0e2e, 0x0e28, 0x0e22, 0x0e1c, 0x0e15, 0x0e0f, 
+    0x0e09, 0x0e03, 0x0dfd, 0x0df7, 0x0df1, 0x0deb, 0x0de6, 0x0de0, 
+    0x0dda, 0x0dd4, 0x0dce, 0x0dc8, 0x0dc3, 0x0dbd, 0x0db7, 0x0db1, 
+    0x0dac, 0x0da6, 0x0da0, 0x0d9b, 0x0d95, 0x0d90, 0x0d8a, 0x0d85, 
+    0x0d7f, 0x0d74, 0x0d69, 0x0d5e, 0x0d54, 0x0d49, 0x0d3f, 0x0d34, 
+    0x0d2a, 0x0d1f, 0x0d15, 0x0d0b, 0x0d01, 0x0cf7, 0x0ced, 0x0ce3, 
+    0x0cda, 0x0cd0, 0x0cc6, 0x0cbd, 0x0cb3, 0x0caa, 0x0ca1, 0x0c98, 
+    0x0c8e, 0x0c85, 0x0c7c, 0x0c73, 0x0c6b, 0x0c62, 0x0c59, 0x0c50, 
+    0x0c48, 0x0c3f, 0x0c37, 0x0c2e, 0x0c26, 0x0c1e, 0x0c16, 0x0c0d, 
+    0x0c05, 0x0bfb, 0x0beb, 0x0bdb, 0x0bcb, 0x0bbc, 0x0bad, 0x0b9d, 
+    0x0b8e, 0x0b7f, 0x0b70, 0x0b61, 0x0b53, 0x0b44, 0x0b36, 0x0b27, 
+    0x0b19, 0x0b0b, 0x0afd, 0x0aef, 0x0ae1, 0x0ad3, 0x0ac6, 0x0ab8, 
+    0x0aab, 0x0a9e, 0x0a90, 0x0a83, 0x0a76, 0x0a69, 0x0a5d, 0x0a50, 
+    0x0a43, 0x0a37, 0x0a2b, 0x0a1e, 0x0a12, 0x0a06, 0x09fa, 0x09ee, 
+    0x09e2, 0x09d7, 0x09cb, 0x09bf, 0x09b4, 0x09a9, 0x099d, 0x0992, 
+    0x0987, 0x097c, 0x0971, 0x0966, 0x095b, 0x0951, 0x0946, 0x093c, 
+    0x0931, 0x0927, 0x091d, 0x0912, 0x0908, 0x08fe, 0x08f4, 0x08eb, 
+    0x08e1, 0x08d7, 0x08cd, 0x08c4, 0x08ba, 0x08b1, 0x08a8, 0x089e, 
+    0x0895, 0x088c, 0x0883, 0x087a, 0x0871, 0x0868, 0x085f, 0x0857, 
+    0x084e, 0x0845, 0x083d, 0x0834, 0x082c, 0x0824, 0x081c, 0x0813, 
+    0x080b, 0x0803, 0x07f6, 0x07e7, 0x07d7, 0x07c7, 0x07b8, 0x07a8, 
+    0x0799, 0x078a, 0x077b, 0x076c, 0x075d, 0x074f, 0x0740, 0x0732, 
+    0x0723, 0x0715, 0x0707, 0x06f9, 0x06eb, 0x06dd, 0x06d0, 0x06c2, 
+    0x06b4, 0x06a7, 0x069a, 0x068d, 0x0680, 0x0673, 0x0666, 0x0659, 
+    0x064c, 0x0640, 0x0633, 0x0627, 0x061b, 0x060f, 0x0603, 0x05f7, 
+    0x05eb, 0x05df, 0x05d3, 0x05c8, 0x05bc, 0x05b1, 0x05a5, 0x059a, 
+    0x058f, 0x0584, 0x0579, 0x056e, 0x0563, 0x0558, 0x054e, 0x0543, 
+    0x0539, 0x052e, 0x0524, 0x051a, 0x0510, 0x0506, 0x04fc, 0x04f2, 
+    0x04e8, 0x04de, 0x04d4, 0x04cb, 0x04c1, 0x04b8, 0x04ae, 0x04a5, 
+    0x049c, 0x0493, 0x0489, 0x0480, 0x0477, 0x046f, 0x0466, 0x045d, 
+    0x0454, 0x044c, 0x0443, 0x043b, 0x0432, 0x042a, 0x0421, 0x0419, 
+    0x0411, 0x0409, 0x0401, 0x03f9, 0x03f1, 0x03e9, 0x03e1, 0x03da, 
+    0x03d2, 0x03ca, 0x03c3, 0x03bb, 0x03b4, 0x03ad, 0x03a5, 0x039e, 
+    0x0397, 0x0390, 0x0389, 0x0381, 0x037a, 0x0374, 0x036d, 0x0366, 
+    0x035f, 0x0358, 0x0352, 0x034b, 0x0345, 0x033e, 0x0338, 0x0331, 
+    0x032b, 0x0324, 0x031e, 0x0318, 0x0312, 0x030c, 0x0306, 0x0300, 
+    0x02fa, 0x02f4, 0x02ee, 0x02e8, 0x02e2, 0x02dd, 0x02d7, 0x02d1, 
+    0x02cc, 0x02c6, 0x02c0, 0x02bb, 0x02b6, 0x02b0, 0x02ab, 0x02a5, 
+    0x02a0, 0x029b, 0x0296, 0x0291, 0x028c, 0x0286, 0x0281, 0x027c, 
+    0x0277, 0x0273, 0x026e, 0x0269, 0x0264, 0x025f, 0x025b, 0x0256, 
+    0x0251, 0x024d, 0x0248, 0x0243, 0x023f, 0x023a, 0x0236, 0x0232, 
+    0x022d, 0x0229, 0x0225, 0x0220, 0x021c, 0x0218, 0x0214, 0x0210, 
+    0x020b, 0x0207, 0x0203, 0x01ff, 0x01fb, 0x01f7, 0x01f4, 0x01f0, 
+    0x01ec, 0x01e8, 0x01e4, 0x01e0, 0x01dd, 0x01d9, 0x01d5, 0x01d2, 
+    0x01ce, 0x01ca, 0x01c7, 0x01c3, 0x01c0, 0x01bc, 0x01b9, 0x01b5, 
+    0x01b2, 0x01af, 0x01ab, 0x01a8, 0x01a5, 0x01a1, 0x019e, 0x019b, 
+    0x0198, 0x0195, 0x0191, 0x018e, 0x018b, 0x0188, 0x0185, 0x0182, 
+    0x017f, 0x017c, 0x0179, 0x0176, 0x0173, 0x0170, 0x016d, 0x016b, 
+    0x0168, 0x0165, 0x0162, 0x015f, 0x015d, 0x015a, 0x0157, 0x0155, 
+    0x0152, 0x014f, 0x014d, 0x014a, 0x0148, 0x0145, 0x0143, 0x0140, 
+    0x013e, 0x013b, 0x0139, 0x0136, 0x0134, 0x0131, 0x012f, 0x012d, 
+    0x012a, 0x0128, 0x0126, 0x0123, 0x0121, 0x011f, 0x011d, 0x011a, 
+    0x0118, 0x0116, 0x0114, 0x0112, 0x0110, 0x010d, 0x010b, 0x0109, 
+    0x0107, 0x0105, 0x0103, 0x0101, 0x00ff, 0x00fd, 0x00fb, 0x00f9, 
+    0x00f7, 0x00f5, 0x00f3, 0x00f2, 0x00f0, 0x00ee, 0x00ec, 0x00ea, 
+    0x00e8, 0x00e6, 0x00e5, 0x00e3, 0x00e1, 0x00df, 0x00de, 0x00dc, 
+    0x00da, 0x00d9, 0x00d7, 0x00d5, 0x00d4, 0x00d2, 0x00d0, 0x00cf, 
+    0x00cd, 0x00cb, 0x00ca, 0x00c8, 0x00c7, 0x00c5, 0x00c4, 0x00c2, 
+    0x00c1, 0x00bf, 0x00be, 0x00bc, 0x00bb, 0x00b9, 0x00b8, 0x00b6, 
+    0x00b5, 0x00b4, 0x00b2, 0x00b1, 0x00af, 0x00ae, 0x00ad, 0x00ab, 
+    0x00aa, 0x00a9, 0x00a7, 0x00a6, 0x00a5, 0x00a3, 0x00a2, 0x00a1, 
+    0x00a0, 0x009e, 0x009d, 0x009c, 0x009b, 0x009a, 0x0098, 0x0097, 
+    0x0096, 0x0095, 0x0094, 0x0093, 0x0091, 0x0090, 0x008f, 0x008e, 
+    0x008d, 0x008c, 0x008b, 0x008a, 0x0089, 0x0087, 0x0086, 0x0085, 
+    0x0084, 0x0083, 0x0082, 0x0081, 0x0080, 0x007f, 0x007e, 0x007d, 
+    0x007c, 0x007b, 0x007a, 0x0079, 0x0079, 0x0078, 0x0077, 0x0076, 
+    0x0075, 0x0074, 0x0073, 0x0072, 0x0071, 0x0070, 0x006f, 0x006f, 
+    0x006e, 0x006d, 0x006c, 0x006b, 0x006a, 0x006a, 0x0069, 0x0068, 
+    0x0067, 0x0066, 0x0065, 0x0065, 0x0064, 0x0063, 0x0062, 0x0062, 
+    0x0061, 0x0060, 0x005f, 0x005f, 0x005e, 0x005d, 0x005c, 0x005c, 
+    0x005b, 0x005a, 0x005a, 0x0059, 0x0058, 0x0057, 0x0057, 0x0056, 
+    0x0055, 0x0055, 0x0054, 0x0053, 0x0053, 0x0052, 0x0052, 0x0051, 
+    0x0050, 0x0050, 0x004f, 0x004e, 0x004e, 0x004d, 0x004d, 0x004c, 
+    0x004b, 0x004b, 0x004a, 0x004a, 0x0049, 0x0049, 0x0048, 0x0047, 
+    0x0047, 0x0046, 0x0046, 0x0045, 0x0045, 0x0044, 0x0044, 0x0043, 
+    0x0043, 0x0042, 0x0042, 0x0041, 0x0041, 0x0040, 0x0040, 0x003f, 
+    0x003f, 0x003e, 0x003e, 0x003d, 0x003d, 0x003c, 0x003c, 0x003b, 
+    0x003b, 0x003a, 0x003a, 0x0039, 0x0039, 0x0038, 0x0038, 0x0038, 
+    0x0037, 0x0037, 0x0036, 0x0036, 0x0035, 0x0035, 0x0035, 0x0034, 
+    0x0034, 0x0033, 0x0033, 0x0033, 0x0032, 0x0032, 0x0031, 0x0031, 
+    0x0031, 0x0030, 0x0030, 0x0030, 0x002f, 0x002f, 0x002e, 0x002e, 
+    0x002e, 0x002d, 0x002d, 0x002d, 0x002c, 0x002c, 0x002c, 0x002b, 
+    0x002b, 0x002b, 0x002a, 0x002a, 0x002a, 0x0029, 0x0029, 0x0029, 
+    0x0028, 0x0028, 0x0028, 0x0027, 0x0027, 0x0027, 0x0027, 0x0026, 
+    0x0026, 0x0026, 0x0025, 0x0025, 0x0025, 0x0024, 0x0024, 0x0024, 
+    0x0024, 0x0023, 0x0023, 0x0023, 0x0023, 0x0022, 0x0022, 0x0022, 
+    0x0021, 0x0021, 0x0021, 0x0021, 0x0020, 0x0020, 0x0020, 0x0020, 
+    0x001f, 0x001f, 0x001f, 0x001f, 0x001e, 0x001e, 0x001e, 0x001e, 
+    0x001e, 0x001d, 0x001d, 0x001d, 0x001d, 0x001c, 0x001c, 0x001c, 
+    0x001c, 0x001c, 0x001b, 0x001b, 0x001b, 0x001b, 0x001a, 0x001a, 
+    0x001a, 0x001a, 0x001a, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 
+    0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0017, 0x0017, 
+    0x0017, 0x0017, 0x0017, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 
+    0x0016, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0014, 
+    0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0013, 0x0013, 
+    0x0013, 0x0013, 0x0013, 0x0013, 0x0012, 0x0012, 0x0012, 0x0012, 
+    0x0012, 0x0012, 0x0012, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 
+    0x0011, 0x0011, 0x0011, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 
+    0x0010, 0x0010, 0x0010, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 
+    0x000f, 0x000f, 0x000f, 0x000f, 0x000e, 0x000e, 0x000e, 0x000e, 
+    0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000d, 0x000d, 0x000d, 
+    0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000c, 
+    0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 
+    0x000c, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 
+    0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000a, 0x000a, 0x000a, 
+    0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 
+    0x000a, 0x000a, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 
+    0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 
+    0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 
+    0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 
+    0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 
+    0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 
+    0x0007, 0x0007, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 
+    0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 
+    0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 
+    0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 
+    0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 
+    0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 
+    0x0005, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 
+    0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 
+    0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 
+    0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 
+    0x0004, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 
+    0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 
+    0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 
+    0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 
+    0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 
+    0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0002, 0x0002, 0x0002, 
+    0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 
+    0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 
+    0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 
+    0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 
+    0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 
+    0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, 
+    0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 
+    0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 
+    0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 
+    0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 
+    0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 
+    0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 
+    0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 
+    0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 
+    0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+};
+
+const unsigned short logTable[] =
+{
+    0xfc00, 0xd829, 0xd7f9, 0xd7c5, 0xd7a0, 0xd783, 0xd76c, 0xd758, 
+    0xd747, 0xd738, 0xd72b, 0xd71e, 0xd713, 0xd709, 0xd700, 0xd6f7, 
+    0xd6ee, 0xd6e7, 0xd6df, 0xd6d8, 0xd6d2, 0xd6cc, 0xd6c6, 0xd6c0, 
+    0xd6bb, 0xd6b5, 0xd6b0, 0xd6ab, 0xd6a7, 0xd6a2, 0xd69e, 0xd69a, 
+    0xd696, 0xd692, 0xd68e, 0xd68a, 0xd687, 0xd683, 0xd680, 0xd67c, 
+    0xd679, 0xd676, 0xd673, 0xd670, 0xd66d, 0xd66a, 0xd667, 0xd665, 
+    0xd662, 0xd65f, 0xd65d, 0xd65a, 0xd658, 0xd655, 0xd653, 0xd650, 
+    0xd64e, 0xd64c, 0xd64a, 0xd647, 0xd645, 0xd643, 0xd641, 0xd63f, 
+    0xd63d, 0xd63b, 0xd639, 0xd637, 0xd635, 0xd633, 0xd632, 0xd630, 
+    0xd62e, 0xd62c, 0xd62a, 0xd629, 0xd627, 0xd625, 0xd624, 0xd622, 
+    0xd620, 0xd61f, 0xd61d, 0xd61c, 0xd61a, 0xd619, 0xd617, 0xd616, 
+    0xd614, 0xd613, 0xd611, 0xd610, 0xd60f, 0xd60d, 0xd60c, 0xd60a, 
+    0xd609, 0xd608, 0xd606, 0xd605, 0xd604, 0xd603, 0xd601, 0xd600, 
+    0xd5ff, 0xd5fe, 0xd5fc, 0xd5fb, 0xd5fa, 0xd5f9, 0xd5f8, 0xd5f7, 
+    0xd5f5, 0xd5f4, 0xd5f3, 0xd5f2, 0xd5f1, 0xd5f0, 0xd5ef, 0xd5ee, 
+    0xd5ed, 0xd5eb, 0xd5ea, 0xd5e9, 0xd5e8, 0xd5e7, 0xd5e6, 0xd5e5, 
+    0xd5e4, 0xd5e3, 0xd5e2, 0xd5e1, 0xd5e0, 0xd5df, 0xd5de, 0xd5dd, 
+    0xd5dd, 0xd5dc, 0xd5db, 0xd5da, 0xd5d9, 0xd5d8, 0xd5d7, 0xd5d6, 
+    0xd5d5, 0xd5d4, 0xd5d3, 0xd5d3, 0xd5d2, 0xd5d1, 0xd5d0, 0xd5cf, 
+    0xd5ce, 0xd5cd, 0xd5cd, 0xd5cc, 0xd5cb, 0xd5ca, 0xd5c9, 0xd5c9, 
+    0xd5c8, 0xd5c7, 0xd5c6, 0xd5c5, 0xd5c5, 0xd5c4, 0xd5c3, 0xd5c2, 
+    0xd5c1, 0xd5c1, 0xd5c0, 0xd5bf, 0xd5be, 0xd5be, 0xd5bd, 0xd5bc, 
+    0xd5bc, 0xd5bb, 0xd5ba, 0xd5b9, 0xd5b9, 0xd5b8, 0xd5b7, 0xd5b7, 
+    0xd5b6, 0xd5b5, 0xd5b4, 0xd5b4, 0xd5b3, 0xd5b2, 0xd5b2, 0xd5b1, 
+    0xd5b0, 0xd5b0, 0xd5af, 0xd5ae, 0xd5ae, 0xd5ad, 0xd5ac, 0xd5ac, 
+    0xd5ab, 0xd5ab, 0xd5aa, 0xd5a9, 0xd5a9, 0xd5a8, 0xd5a7, 0xd5a7, 
+    0xd5a6, 0xd5a6, 0xd5a5, 0xd5a4, 0xd5a4, 0xd5a3, 0xd5a3, 0xd5a2, 
+    0xd5a1, 0xd5a1, 0xd5a0, 0xd5a0, 0xd59f, 0xd59e, 0xd59e, 0xd59d, 
+    0xd59d, 0xd59c, 0xd59c, 0xd59b, 0xd59a, 0xd59a, 0xd599, 0xd599, 
+    0xd598, 0xd598, 0xd597, 0xd597, 0xd596, 0xd595, 0xd595, 0xd594, 
+    0xd594, 0xd593, 0xd593, 0xd592, 0xd592, 0xd591, 0xd591, 0xd590, 
+    0xd590, 0xd58f, 0xd58f, 0xd58e, 0xd58e, 0xd58d, 0xd58d, 0xd58c, 
+    0xd58c, 0xd58b, 0xd58b, 0xd58a, 0xd58a, 0xd589, 0xd589, 0xd588, 
+    0xd588, 0xd587, 0xd587, 0xd586, 0xd586, 0xd585, 0xd585, 0xd584, 
+    0xd584, 0xd583, 0xd583, 0xd582, 0xd582, 0xd581, 0xd581, 0xd581, 
+    0xd580, 0xd580, 0xd57f, 0xd57f, 0xd57e, 0xd57e, 0xd57d, 0xd57d, 
+    0xd57c, 0xd57c, 0xd57c, 0xd57b, 0xd57b, 0xd57a, 0xd57a, 0xd579, 
+    0xd579, 0xd579, 0xd578, 0xd578, 0xd577, 0xd577, 0xd576, 0xd576, 
+    0xd576, 0xd575, 0xd575, 0xd574, 0xd574, 0xd573, 0xd573, 0xd573, 
+    0xd572, 0xd572, 0xd571, 0xd571, 0xd571, 0xd570, 0xd570, 0xd56f, 
+    0xd56f, 0xd56f, 0xd56e, 0xd56e, 0xd56d, 0xd56d, 0xd56d, 0xd56c, 
+    0xd56c, 0xd56b, 0xd56b, 0xd56b, 0xd56a, 0xd56a, 0xd56a, 0xd569, 
+    0xd569, 0xd568, 0xd568, 0xd568, 0xd567, 0xd567, 0xd566, 0xd566, 
+    0xd566, 0xd565, 0xd565, 0xd565, 0xd564, 0xd564, 0xd564, 0xd563, 
+    0xd563, 0xd562, 0xd562, 0xd562, 0xd561, 0xd561, 0xd561, 0xd560, 
+    0xd560, 0xd560, 0xd55f, 0xd55f, 0xd55f, 0xd55e, 0xd55e, 0xd55d, 
+    0xd55d, 0xd55d, 0xd55c, 0xd55c, 0xd55c, 0xd55b, 0xd55b, 0xd55b, 
+    0xd55a, 0xd55a, 0xd55a, 0xd559, 0xd559, 0xd559, 0xd558, 0xd558, 
+    0xd558, 0xd557, 0xd557, 0xd557, 0xd556, 0xd556, 0xd556, 0xd555, 
+    0xd555, 0xd555, 0xd554, 0xd554, 0xd554, 0xd553, 0xd553, 0xd553, 
+    0xd552, 0xd552, 0xd552, 0xd551, 0xd551, 0xd551, 0xd551, 0xd550, 
+    0xd550, 0xd550, 0xd54f, 0xd54f, 0xd54f, 0xd54e, 0xd54e, 0xd54e, 
+    0xd54d, 0xd54d, 0xd54d, 0xd54d, 0xd54c, 0xd54c, 0xd54c, 0xd54b, 
+    0xd54b, 0xd54b, 0xd54a, 0xd54a, 0xd54a, 0xd549, 0xd549, 0xd549, 
+    0xd549, 0xd548, 0xd548, 0xd548, 0xd547, 0xd547, 0xd547, 0xd547, 
+    0xd546, 0xd546, 0xd546, 0xd545, 0xd545, 0xd545, 0xd545, 0xd544, 
+    0xd544, 0xd544, 0xd543, 0xd543, 0xd543, 0xd543, 0xd542, 0xd542, 
+    0xd542, 0xd541, 0xd541, 0xd541, 0xd541, 0xd540, 0xd540, 0xd540, 
+    0xd53f, 0xd53f, 0xd53f, 0xd53f, 0xd53e, 0xd53e, 0xd53e, 0xd53e, 
+    0xd53d, 0xd53d, 0xd53d, 0xd53c, 0xd53c, 0xd53c, 0xd53c, 0xd53b, 
+    0xd53b, 0xd53b, 0xd53b, 0xd53a, 0xd53a, 0xd53a, 0xd53a, 0xd539, 
+    0xd539, 0xd539, 0xd538, 0xd538, 0xd538, 0xd538, 0xd537, 0xd537, 
+    0xd537, 0xd537, 0xd536, 0xd536, 0xd536, 0xd536, 0xd535, 0xd535, 
+    0xd535, 0xd535, 0xd534, 0xd534, 0xd534, 0xd534, 0xd533, 0xd533, 
+    0xd533, 0xd533, 0xd532, 0xd532, 0xd532, 0xd532, 0xd531, 0xd531, 
+    0xd531, 0xd531, 0xd530, 0xd530, 0xd530, 0xd530, 0xd52f, 0xd52f, 
+    0xd52f, 0xd52f, 0xd52e, 0xd52e, 0xd52e, 0xd52e, 0xd52d, 0xd52d, 
+    0xd52d, 0xd52d, 0xd52d, 0xd52c, 0xd52c, 0xd52c, 0xd52c, 0xd52b, 
+    0xd52b, 0xd52b, 0xd52b, 0xd52a, 0xd52a, 0xd52a, 0xd52a, 0xd529, 
+    0xd529, 0xd529, 0xd529, 0xd529, 0xd528, 0xd528, 0xd528, 0xd528, 
+    0xd527, 0xd527, 0xd527, 0xd527, 0xd526, 0xd526, 0xd526, 0xd526, 
+    0xd526, 0xd525, 0xd525, 0xd525, 0xd525, 0xd524, 0xd524, 0xd524, 
+    0xd524, 0xd524, 0xd523, 0xd523, 0xd523, 0xd523, 0xd522, 0xd522, 
+    0xd522, 0xd522, 0xd522, 0xd521, 0xd521, 0xd521, 0xd521, 0xd520, 
+    0xd520, 0xd520, 0xd520, 0xd520, 0xd51f, 0xd51f, 0xd51f, 0xd51f, 
+    0xd51f, 0xd51e, 0xd51e, 0xd51e, 0xd51e, 0xd51d, 0xd51d, 0xd51d, 
+    0xd51d, 0xd51d, 0xd51c, 0xd51c, 0xd51c, 0xd51c, 0xd51c, 0xd51b, 
+    0xd51b, 0xd51b, 0xd51b, 0xd51b, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 
+    0xd51a, 0xd519, 0xd519, 0xd519, 0xd519, 0xd518, 0xd518, 0xd518, 
+    0xd518, 0xd518, 0xd517, 0xd517, 0xd517, 0xd517, 0xd517, 0xd516, 
+    0xd516, 0xd516, 0xd516, 0xd516, 0xd515, 0xd515, 0xd515, 0xd515, 
+    0xd515, 0xd514, 0xd514, 0xd514, 0xd514, 0xd514, 0xd514, 0xd513, 
+    0xd513, 0xd513, 0xd513, 0xd513, 0xd512, 0xd512, 0xd512, 0xd512, 
+    0xd512, 0xd511, 0xd511, 0xd511, 0xd511, 0xd511, 0xd510, 0xd510, 
+    0xd510, 0xd510, 0xd510, 0xd50f, 0xd50f, 0xd50f, 0xd50f, 0xd50f, 
+    0xd50f, 0xd50e, 0xd50e, 0xd50e, 0xd50e, 0xd50e, 0xd50d, 0xd50d, 
+    0xd50d, 0xd50d, 0xd50d, 0xd50c, 0xd50c, 0xd50c, 0xd50c, 0xd50c, 
+    0xd50c, 0xd50b, 0xd50b, 0xd50b, 0xd50b, 0xd50b, 0xd50a, 0xd50a, 
+    0xd50a, 0xd50a, 0xd50a, 0xd50a, 0xd509, 0xd509, 0xd509, 0xd509, 
+    0xd509, 0xd508, 0xd508, 0xd508, 0xd508, 0xd508, 0xd508, 0xd507, 
+    0xd507, 0xd507, 0xd507, 0xd507, 0xd506, 0xd506, 0xd506, 0xd506, 
+    0xd506, 0xd506, 0xd505, 0xd505, 0xd505, 0xd505, 0xd505, 0xd505, 
+    0xd504, 0xd504, 0xd504, 0xd504, 0xd504, 0xd504, 0xd503, 0xd503, 
+    0xd503, 0xd503, 0xd503, 0xd502, 0xd502, 0xd502, 0xd502, 0xd502, 
+    0xd502, 0xd501, 0xd501, 0xd501, 0xd501, 0xd501, 0xd501, 0xd500, 
+    0xd500, 0xd500, 0xd500, 0xd500, 0xd500, 0xd4ff, 0xd4ff, 0xd4ff, 
+    0xd4ff, 0xd4ff, 0xd4ff, 0xd4fe, 0xd4fe, 0xd4fe, 0xd4fe, 0xd4fe, 
+    0xd4fe, 0xd4fd, 0xd4fd, 0xd4fd, 0xd4fd, 0xd4fd, 0xd4fd, 0xd4fc, 
+    0xd4fc, 0xd4fc, 0xd4fc, 0xd4fc, 0xd4fc, 0xd4fb, 0xd4fb, 0xd4fb, 
+    0xd4fb, 0xd4fb, 0xd4fb, 0xd4fb, 0xd4fa, 0xd4fa, 0xd4fa, 0xd4fa, 
+    0xd4fa, 0xd4fa, 0xd4f9, 0xd4f9, 0xd4f9, 0xd4f9, 0xd4f9, 0xd4f9, 
+    0xd4f8, 0xd4f8, 0xd4f8, 0xd4f8, 0xd4f8, 0xd4f8, 0xd4f7, 0xd4f7, 
+    0xd4f7, 0xd4f7, 0xd4f7, 0xd4f7, 0xd4f7, 0xd4f6, 0xd4f6, 0xd4f6, 
+    0xd4f6, 0xd4f6, 0xd4f6, 0xd4f5, 0xd4f5, 0xd4f5, 0xd4f5, 0xd4f5, 
+    0xd4f5, 0xd4f5, 0xd4f4, 0xd4f4, 0xd4f4, 0xd4f4, 0xd4f4, 0xd4f4, 
+    0xd4f3, 0xd4f3, 0xd4f3, 0xd4f3, 0xd4f3, 0xd4f3, 0xd4f3, 0xd4f2, 
+    0xd4f2, 0xd4f2, 0xd4f2, 0xd4f2, 0xd4f2, 0xd4f2, 0xd4f1, 0xd4f1, 
+    0xd4f1, 0xd4f1, 0xd4f1, 0xd4f1, 0xd4f0, 0xd4f0, 0xd4f0, 0xd4f0, 
+    0xd4f0, 0xd4f0, 0xd4f0, 0xd4ef, 0xd4ef, 0xd4ef, 0xd4ef, 0xd4ef, 
+    0xd4ef, 0xd4ef, 0xd4ee, 0xd4ee, 0xd4ee, 0xd4ee, 0xd4ee, 0xd4ee, 
+    0xd4ee, 0xd4ed, 0xd4ed, 0xd4ed, 0xd4ed, 0xd4ed, 0xd4ed, 0xd4ed, 
+    0xd4ec, 0xd4ec, 0xd4ec, 0xd4ec, 0xd4ec, 0xd4ec, 0xd4eb, 0xd4eb, 
+    0xd4eb, 0xd4eb, 0xd4eb, 0xd4eb, 0xd4eb, 0xd4ea, 0xd4ea, 0xd4ea, 
+    0xd4ea, 0xd4ea, 0xd4ea, 0xd4ea, 0xd4ea, 0xd4e9, 0xd4e9, 0xd4e9, 
+    0xd4e9, 0xd4e9, 0xd4e9, 0xd4e9, 0xd4e8, 0xd4e8, 0xd4e8, 0xd4e8, 
+    0xd4e8, 0xd4e8, 0xd4e8, 0xd4e7, 0xd4e7, 0xd4e7, 0xd4e7, 0xd4e7, 
+    0xd4e7, 0xd4e7, 0xd4e6, 0xd4e6, 0xd4e6, 0xd4e6, 0xd4e6, 0xd4e6, 
+    0xd4e6, 0xd4e5, 0xd4e5, 0xd4e5, 0xd4e5, 0xd4e5, 0xd4e5, 0xd4e5, 
+    0xd4e5, 0xd4e4, 0xd4e4, 0xd4e4, 0xd4e4, 0xd4e4, 0xd4e4, 0xd4e4, 
+    0xd4e3, 0xd4e3, 0xd4e3, 0xd4e3, 0xd4e3, 0xd4e3, 0xd4e3, 0xd4e3, 
+    0xd4e2, 0xd4e2, 0xd4e2, 0xd4e2, 0xd4e2, 0xd4e2, 0xd4e2, 0xd4e1, 
+    0xd4e1, 0xd4e1, 0xd4e1, 0xd4e1, 0xd4e1, 0xd4e1, 0xd4e1, 0xd4e0, 
+    0xd4e0, 0xd4e0, 0xd4e0, 0xd4e0, 0xd4e0, 0xd4e0, 0xd4df, 0xd4df, 
+    0xd4df, 0xd4df, 0xd4df, 0xd4df, 0xd4df, 0xd4df, 0xd4de, 0xd4de, 
+    0xd4de, 0xd4de, 0xd4de, 0xd4de, 0xd4de, 0xd4de, 0xd4dd, 0xd4dd, 
+    0xd4dd, 0xd4dd, 0xd4dd, 0xd4dd, 0xd4dd, 0xd4dd, 0xd4dc, 0xd4dc, 
+    0xd4dc, 0xd4dc, 0xd4dc, 0xd4dc, 0xd4dc, 0xd4dc, 0xd4db, 0xd4db, 
+    0xd4db, 0xd4db, 0xd4db, 0xd4db, 0xd4db, 0xd4da, 0xd4da, 0xd4da, 
+    0xd4da, 0xd4da, 0xd4da, 0xd4da, 0xd4da, 0xd4d9, 0xd4d9, 0xd4d9, 
+    0xd4d9, 0xd4d9, 0xd4d9, 0xd4d9, 0xd4d9, 0xd4d9, 0xd4d8, 0xd4d8, 
+    0xd4d8, 0xd4d8, 0xd4d8, 0xd4d8, 0xd4d8, 0xd4d8, 0xd4d7, 0xd4d7, 
+    0xd4d7, 0xd4d7, 0xd4d7, 0xd4d7, 0xd4d7, 0xd4d7, 0xd4d6, 0xd4d6, 
+    0xd4d6, 0xd4d6, 0xd4d6, 0xd4d6, 0xd4d6, 0xd4d6, 0xd4d5, 0xd4d5, 
+    0xd4d5, 0xd4d5, 0xd4d5, 0xd4d5, 0xd4d5, 0xd4d5, 0xd4d4, 0xd4d4, 
+    0xd4d4, 0xd4d4, 0xd4d4, 0xd4d4, 0xd4d4, 0xd4d4, 0xd4d4, 0xd4d3, 
+    0xd4d3, 0xd4d3, 0xd4d3, 0xd4d3, 0xd4d3, 0xd4d3, 0xd4d3, 0xd4d2, 
+    0xd4d2, 0xd4d2, 0xd4d2, 0xd4d2, 0xd4d2, 0xd4d2, 0xd4d2, 0xd4d2, 
+    0xd4d1, 0xd4d1, 0xd4d1, 0xd4d1, 0xd4d1, 0xd4d1, 0xd4d1, 0xd4d1, 
+    0xd4d0, 0xd4d0, 0xd4d0, 0xd4d0, 0xd4d0, 0xd4d0, 0xd4d0, 0xd4d0, 
+    0xd4d0, 0xd4cf, 0xd4cf, 0xd4cf, 0xd4cf, 0xd4cf, 0xd4cf, 0xd4cf, 
+    0xd4cf, 0xd4cf, 0xd4ce, 0xd4ce, 0xd4ce, 0xd4ce, 0xd4ce, 0xd4ce, 
+    0xd4ce, 0xd4ce, 0xd4ce, 0xd4cd, 0xd4cd, 0xd4cd, 0xd4cd, 0xd4cd, 
+    0xd4cd, 0xd4cd, 0xd4cd, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 
+    0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cb, 0xd4cb, 0xd4cb, 0xd4cb, 
+    0xd4cb, 0xd4cb, 0xd4cb, 0xd4cb, 0xd4cb, 0xd4ca, 0xd4ca, 0xd4ca, 
+    0xd4ca, 0xd4ca, 0xd4ca, 0xd4ca, 0xd4ca, 0xd4ca, 0xd4c9, 0xd4c9, 
+    0xd4c9, 0xd4c9, 0xd4c9, 0xd4c9, 0xd4c9, 0xd4c9, 0xd4c9, 0xd4c9, 
+    0xd4c8, 0xd4c8, 0xd4c8, 0xd4c8, 0xd4c8, 0xd4c8, 0xd4c8, 0xd4c8, 
+    0xd4c8, 0xd4c7, 0xd4c7, 0xd4c7, 0xd4c7, 0xd4c7, 0xd4c7, 0xd4c7, 
+    0xd4c7, 0xd4c7, 0xd4c6, 0xd4c6, 0xd4c6, 0xd4c6, 0xd4c6, 0xd4c6, 
+    0xd4c6, 0xd4c6, 0xd4c6, 0xd4c5, 0xd4c5, 0xd4c5, 0xd4c5, 0xd4c5, 
+    0xd4c5, 0xd4c5, 0xd4c5, 0xd4c5, 0xd4c5, 0xd4c4, 0xd4c4, 0xd4c4, 
+    0xd4c4, 0xd4c4, 0xd4c4, 0xd4c4, 0xd4c4, 0xd4c4, 0xd4c3, 0xd4c3, 
+    0xd4c3, 0xd4c3, 0xd4c3, 0xd4c3, 0xd4c3, 0xd4c3, 0xd4c3, 0xd4c3, 
+    0xd4c2, 0xd4c2, 0xd4c2, 0xd4c2, 0xd4c2, 0xd4c2, 0xd4c2, 0xd4c2, 
+    0xd4c2, 0xd4c2, 0xd4c1, 0xd4c1, 0xd4c1, 0xd4c1, 0xd4c1, 0xd4c1, 
+    0xd4c1, 0xd4c1, 0xd4c1, 0xd4c0, 0xd4c0, 0xd4c0, 0xd4c0, 0xd4c0, 
+    0xd4c0, 0xd4c0, 0xd4c0, 0xd4c0, 0xd4c0, 0xd4bf, 0xd4bf, 0xd4bf, 
+    0xd4bf, 0xd4bf, 0xd4bf, 0xd4bf, 0xd4bf, 0xd4bf, 0xd4bf, 0xd4be, 
+    0xd4be, 0xd4be, 0xd4be, 0xd4be, 0xd4be, 0xd4be, 0xd4be, 0xd4be, 
+    0xd4be, 0xd4bd, 0xd4bd, 0xd4bd, 0xd4bd, 0xd4bd, 0xd4bd, 0xd4bd, 
+    0xd4bd, 0xd4bd, 0xd4bd, 0xd4bc, 0xd4bc, 0xd4bc, 0xd4bc, 0xd4bc, 
+    0xd4bc, 0xd4bc, 0xd4bc, 0xd4bc, 0xd4bc, 0xd4bb, 0xd4bb, 0xd4bb, 
+    0xd4bb, 0xd4bb, 0xd4bb, 0xd4bb, 0xd4bb, 0xd4bb, 0xd4bb, 0xd4ba, 
+    0xd4ba, 0xd4ba, 0xd4ba, 0xd4ba, 0xd4ba, 0xd4ba, 0xd4ba, 0xd4ba, 
+    0xd4ba, 0xd4ba, 0xd4b9, 0xd4b9, 0xd4b9, 0xd4b9, 0xd4b9, 0xd4b9, 
+    0xd4b9, 0xd4b9, 0xd4b9, 0xd4b9, 0xd4b8, 0xd4b8, 0xd4b8, 0xd4b8, 
+    0xd4b8, 0xd4b8, 0xd4b8, 0xd4b8, 0xd4b8, 0xd4b8, 0xd4b8, 0xd4b7, 
+    0xd4b7, 0xd4b7, 0xd4b7, 0xd4b7, 0xd4b7, 0xd4b7, 0xd4b7, 0xd4b7, 
+    0xd4b7, 0xd4b6, 0xd4b6, 0xd4b6, 0xd4b6, 0xd4b6, 0xd4b6, 0xd4b6, 
+    0xd4b6, 0xd4b6, 0xd4b6, 0xd4b6, 0xd4b5, 0xd4b5, 0xd4b5, 0xd4b5, 
+    0xd4b5, 0xd4b5, 0xd4b5, 0xd4b5, 0xd4b5, 0xd4b5, 0xd4b4, 0xd4b4, 
+    0xd4b4, 0xd4b4, 0xd4b4, 0xd4b4, 0xd4b4, 0xd4b4, 0xd4b4, 0xd4b4, 
+    0xd4b4, 0xd4b3, 0xd4b3, 0xd4b3, 0xd4b3, 0xd4b3, 0xd4b3, 0xd4b3, 
+    0xd4b3, 0xd4b3, 0xd4b3, 0xd4b3, 0xd4b2, 0xd4b2, 0xd4b2, 0xd4b2, 
+    0xd4b2, 0xd4b2, 0xd4b2, 0xd4b2, 0xd4b2, 0xd4b2, 0xd4b2, 0xd4b1, 
+    0xd4b1, 0xd4b1, 0xd4b1, 0xd4b1, 0xd4b1, 0xd4b1, 0xd4b1, 0xd4b1, 
+    0xd4b1, 0xd4b1, 0xd4b0, 0xd4b0, 0xd4b0, 0xd4b0, 0xd4b0, 0xd4b0, 
+    0xd4b0, 0xd4b0, 0xd4b0, 0xd4b0, 0xd4b0, 0xd4af, 0xd4af, 0xd4af, 
+    0xd4af, 0xd4af, 0xd4af, 0xd4af, 0xd4af, 0xd4af, 0xd4af, 0xd4af, 
+    0xd4ae, 0xd4ae, 0xd4ae, 0xd4ae, 0xd4ae, 0xd4ae, 0xd4ae, 0xd4ae, 
+    0xd4ae, 0xd4ae, 0xd4ae, 0xd4ae, 0xd4ad, 0xd4ad, 0xd4ad, 0xd4ad, 
+    0xd4ad, 0xd4ad, 0xd4ad, 0xd4ad, 0xd4ad, 0xd4ad, 0xd4ad, 0xd4ac, 
+    0xd4ac, 0xd4ac, 0xd4ac, 0xd4ac, 0xd4ac, 0xd4ac, 0xd4ac, 0xd4ac, 
+    0xd4ac, 0xd4ac, 0xd4ab, 0xd4ab, 0xd4ab, 0xd4ab, 0xd4ab, 0xd4ab, 
+    0xd4ab, 0xd4ab, 0xd4ab, 0xd4ab, 0xd4ab, 0xd4ab, 0xd4aa, 0xd4aa, 
+    0xd4aa, 0xd4aa, 0xd4aa, 0xd4aa, 0xd4aa, 0xd4aa, 0xd4aa, 0xd4aa, 
+    0xd4aa, 0xd4aa, 0xd4a9, 0xd4a9, 0xd4a9, 0xd4a9, 0xd4a9, 0xd4a9, 
+    0xd4a9, 0xd4a9, 0xd4a9, 0xd4a9, 0xd4a9, 0xd4a8, 0xd4a8, 0xd4a8, 
+    0xd4a8, 0xd4a8, 0xd4a8, 0xd4a8, 0xd4a8, 0xd4a8, 0xd4a8, 0xd4a8, 
+    0xd4a8, 0xd4a7, 0xd4a7, 0xd4a7, 0xd4a7, 0xd4a7, 0xd4a7, 0xd4a7, 
+    0xd4a7, 0xd4a7, 0xd4a7, 0xd4a7, 0xd4a7, 0xd4a6, 0xd4a6, 0xd4a6, 
+    0xd4a6, 0xd4a6, 0xd4a6, 0xd4a6, 0xd4a6, 0xd4a6, 0xd4a6, 0xd4a6, 
+    0xd4a6, 0xd4a5, 0xd4a5, 0xd4a5, 0xd4a5, 0xd4a5, 0xd4a5, 0xd4a5, 
+    0xd4a5, 0xd4a5, 0xd4a5, 0xd4a5, 0xd4a5, 0xd4a4, 0xd4a4, 0xd4a4, 
+    0xd4a4, 0xd4a4, 0xd4a4, 0xd4a4, 0xd4a4, 0xd4a4, 0xd4a4, 0xd4a4, 
+    0xd4a4, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, 
+    0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a2, 0xd4a2, 
+    0xd4a2, 0xd4a2, 0xd4a2, 0xd4a2, 0xd4a2, 0xd4a2, 0xd4a2, 0xd4a2, 
+    0xd4a2, 0xd4a2, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, 
+    0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a0, 
+    0xd4a0, 0xd4a0, 0xd4a0, 0xd4a0, 0xd4a0, 0xd4a0, 0xd4a0, 0xd4a0, 
+    0xd4a0, 0xd4a0, 0xd4a0, 0xd49f, 0xd49f, 0xd49f, 0xd49f, 0xd49f, 
+    0xd49f, 0xd49f, 0xd49f, 0xd49f, 0xd49f, 0xd49f, 0xd49f, 0xd49f, 
+    0xd49e, 0xd49e, 0xd49e, 0xd49e, 0xd49e, 0xd49e, 0xd49e, 0xd49e, 
+    0xd49e, 0xd49e, 0xd49e, 0xd49e, 0xd49e, 0xd49d, 0xd49d, 0xd49d, 
+    0xd49d, 0xd49d, 0xd49d, 0xd49d, 0xd49d, 0xd49d, 0xd49d, 0xd49d, 
+    0xd49d, 0xd49d, 0xd49c, 0xd49c, 0xd49c, 0xd49c, 0xd49c, 0xd49c, 
+    0xd49c, 0xd49c, 0xd49c, 0xd49c, 0xd49c, 0xd49c, 0xd49c, 0xd49b, 
+    0xd49b, 0xd49b, 0xd49b, 0xd49b, 0xd49b, 0xd49b, 0xd49b, 0xd49b, 
+    0xd49b, 0xd49b, 0xd49b, 0xd49b, 0xd49a, 0xd49a, 0xd49a, 0xd49a, 
+    0xd49a, 0xd49a, 0xd49a, 0xd49a, 0xd49a, 0xd49a, 0xd49a, 0xd49a, 
+    0xd49a, 0xd499, 0xd499, 0xd499, 0xd499, 0xd499, 0xd499, 0xd499, 
+    0xd499, 0xd499, 0xd499, 0xd499, 0xd499, 0xd499, 0xd498, 0xd498, 
+    0xd498, 0xd498, 0xd498, 0xd498, 0xd498, 0xd498, 0xd498, 0xd498, 
+    0xd498, 0xd498, 0xd498, 0xd498, 0xd497, 0xd497, 0xd497, 0xd497, 
+    0xd497, 0xd497, 0xd497, 0xd497, 0xd497, 0xd497, 0xd497, 0xd497, 
+    0xd497, 0xd496, 0xd496, 0xd496, 0xd496, 0xd496, 0xd496, 0xd496, 
+    0xd496, 0xd496, 0xd496, 0xd496, 0xd496, 0xd496, 0xd496, 0xd495, 
+    0xd495, 0xd495, 0xd495, 0xd495, 0xd495, 0xd495, 0xd495, 0xd495, 
+    0xd495, 0xd495, 0xd495, 0xd495, 0xd495, 0xd494, 0xd494, 0xd494, 
+    0xd494, 0xd494, 0xd494, 0xd494, 0xd494, 0xd494, 0xd494, 0xd494, 
+    0xd494, 0xd494, 0xd493, 0xd493, 0xd493, 0xd493, 0xd493, 0xd493, 
+    0xd493, 0xd493, 0xd493, 0xd493, 0xd493, 0xd493, 0xd493, 0xd493, 
+    0xd492, 0xd492, 0xd492, 0xd492, 0xd492, 0xd492, 0xd492, 0xd492, 
+    0xd492, 0xd492, 0xd492, 0xd492, 0xd492, 0xd492, 0xd491, 0xd491, 
+    0xd491, 0xd491, 0xd491, 0xd491, 0xd491, 0xd491, 0xd491, 0xd491, 
+    0xd491, 0xd491, 0xd491, 0xd491, 0xd491, 0xd490, 0xd490, 0xd490, 
+    0xd490, 0xd490, 0xd490, 0xd490, 0xd490, 0xd490, 0xd490, 0xd490, 
+    0xd490, 0xd490, 0xd490, 0xd48f, 0xd48f, 0xd48f, 0xd48f, 0xd48f, 
+    0xd48f, 0xd48f, 0xd48f, 0xd48f, 0xd48f, 0xd48f, 0xd48f, 0xd48f, 
+    0xd48f, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 
+    0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 
+    0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48d, 
+    0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48c, 0xd48c, 
+    0xd48c, 0xd48c, 0xd48c, 0xd48c, 0xd48c, 0xd48c, 0xd48c, 0xd48c, 
+    0xd48c, 0xd48c, 0xd48c, 0xd48c, 0xd48c, 0xd48b, 0xd48b, 0xd48b, 
+    0xd48b, 0xd48b, 0xd48b, 0xd48b, 0xd48b, 0xd48b, 0xd48b, 0xd48b, 
+    0xd48b, 0xd48b, 0xd48b, 0xd48b, 0xd48a, 0xd48a, 0xd48a, 0xd48a, 
+    0xd48a, 0xd48a, 0xd48a, 0xd48a, 0xd48a, 0xd48a, 0xd48a, 0xd48a, 
+    0xd48a, 0xd48a, 0xd48a, 0xd489, 0xd489, 0xd489, 0xd489, 0xd489, 
+    0xd489, 0xd489, 0xd489, 0xd489, 0xd489, 0xd489, 0xd489, 0xd489, 
+    0xd489, 0xd489, 0xd488, 0xd488, 0xd488, 0xd488, 0xd488, 0xd488, 
+    0xd488, 0xd488, 0xd488, 0xd488, 0xd488, 0xd488, 0xd488, 0xd488, 
+    0xd488, 0xd487, 0xd487, 0xd487, 0xd487, 0xd487, 0xd487, 0xd487, 
+    0xd487, 0xd487, 0xd487, 0xd487, 0xd487, 0xd487, 0xd487, 0xd487, 
+    0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 
+    0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 
+    0xd485, 0xd485, 0xd485, 0xd485, 0xd485, 0xd485, 0xd485, 0xd485, 
+    0xd485, 0xd485, 0xd485, 0xd485, 0xd485, 0xd485, 0xd485, 0xd484, 
+    0xd484, 0xd484, 0xd484, 0xd484, 0xd484, 0xd484, 0xd484, 0xd484, 
+    0xd484, 0xd484, 0xd484, 0xd484, 0xd484, 0xd484, 0xd484, 0xd483, 
+    0xd483, 0xd483, 0xd483, 0xd483, 0xd483, 0xd483, 0xd483, 0xd483, 
+    0xd483, 0xd483, 0xd483, 0xd483, 0xd483, 0xd483, 0xd483, 0xd482, 
+    0xd482, 0xd482, 0xd482, 0xd482, 0xd482, 0xd482, 0xd482, 0xd482, 
+    0xd482, 0xd482, 0xd482, 0xd482, 0xd482, 0xd482, 0xd482, 0xd481, 
+    0xd481, 0xd481, 0xd481, 0xd481, 0xd481, 0xd481, 0xd481, 0xd481, 
+    0xd480, 0xd480, 0xd480, 0xd480, 0xd480, 0xd480, 0xd480, 0xd480, 
+    0xd47f, 0xd47f, 0xd47f, 0xd47f, 0xd47f, 0xd47f, 0xd47f, 0xd47f, 
+    0xd47e, 0xd47e, 0xd47e, 0xd47e, 0xd47e, 0xd47e, 0xd47e, 0xd47e, 
+    0xd47d, 0xd47d, 0xd47d, 0xd47d, 0xd47d, 0xd47d, 0xd47d, 0xd47d, 
+    0xd47c, 0xd47c, 0xd47c, 0xd47c, 0xd47c, 0xd47c, 0xd47c, 0xd47c, 
+    0xd47c, 0xd47b, 0xd47b, 0xd47b, 0xd47b, 0xd47b, 0xd47b, 0xd47b, 
+    0xd47b, 0xd47a, 0xd47a, 0xd47a, 0xd47a, 0xd47a, 0xd47a, 0xd47a, 
+    0xd47a, 0xd47a, 0xd479, 0xd479, 0xd479, 0xd479, 0xd479, 0xd479, 
+    0xd479, 0xd479, 0xd478, 0xd478, 0xd478, 0xd478, 0xd478, 0xd478, 
+    0xd478, 0xd478, 0xd478, 0xd477, 0xd477, 0xd477, 0xd477, 0xd477, 
+    0xd477, 0xd477, 0xd477, 0xd476, 0xd476, 0xd476, 0xd476, 0xd476, 
+    0xd476, 0xd476, 0xd476, 0xd476, 0xd475, 0xd475, 0xd475, 0xd475, 
+    0xd475, 0xd475, 0xd475, 0xd475, 0xd475, 0xd474, 0xd474, 0xd474, 
+    0xd474, 0xd474, 0xd474, 0xd474, 0xd474, 0xd474, 0xd473, 0xd473, 
+    0xd473, 0xd473, 0xd473, 0xd473, 0xd473, 0xd473, 0xd473, 0xd472, 
+    0xd472, 0xd472, 0xd472, 0xd472, 0xd472, 0xd472, 0xd472, 0xd472, 
+    0xd471, 0xd471, 0xd471, 0xd471, 0xd471, 0xd471, 0xd471, 0xd471, 
+    0xd471, 0xd470, 0xd470, 0xd470, 0xd470, 0xd470, 0xd470, 0xd470, 
+    0xd470, 0xd470, 0xd46f, 0xd46f, 0xd46f, 0xd46f, 0xd46f, 0xd46f, 
+    0xd46f, 0xd46f, 0xd46f, 0xd46e, 0xd46e, 0xd46e, 0xd46e, 0xd46e, 
+    0xd46e, 0xd46e, 0xd46e, 0xd46e, 0xd46e, 0xd46d, 0xd46d, 0xd46d, 
+    0xd46d, 0xd46d, 0xd46d, 0xd46d, 0xd46d, 0xd46d, 0xd46c, 0xd46c, 
+    0xd46c, 0xd46c, 0xd46c, 0xd46c, 0xd46c, 0xd46c, 0xd46c, 0xd46c, 
+    0xd46b, 0xd46b, 0xd46b, 0xd46b, 0xd46b, 0xd46b, 0xd46b, 0xd46b, 
+    0xd46b, 0xd46a, 0xd46a, 0xd46a, 0xd46a, 0xd46a, 0xd46a, 0xd46a, 
+    0xd46a, 0xd46a, 0xd46a, 0xd469, 0xd469, 0xd469, 0xd469, 0xd469, 
+    0xd469, 0xd469, 0xd469, 0xd469, 0xd468, 0xd468, 0xd468, 0xd468, 
+    0xd468, 0xd468, 0xd468, 0xd468, 0xd468, 0xd468, 0xd467, 0xd467, 
+    0xd467, 0xd467, 0xd467, 0xd467, 0xd467, 0xd467, 0xd467, 0xd467, 
+    0xd466, 0xd466, 0xd466, 0xd466, 0xd466, 0xd466, 0xd466, 0xd466, 
+    0xd466, 0xd466, 0xd465, 0xd465, 0xd465, 0xd465, 0xd465, 0xd465, 
+    0xd465, 0xd465, 0xd465, 0xd465, 0xd464, 0xd464, 0xd464, 0xd464, 
+    0xd464, 0xd464, 0xd464, 0xd464, 0xd464, 0xd464, 0xd463, 0xd463, 
+    0xd463, 0xd463, 0xd463, 0xd463, 0xd463, 0xd463, 0xd463, 0xd463, 
+    0xd462, 0xd462, 0xd462, 0xd462, 0xd462, 0xd462, 0xd462, 0xd462, 
+    0xd462, 0xd462, 0xd461, 0xd461, 0xd461, 0xd461, 0xd461, 0xd461, 
+    0xd461, 0xd461, 0xd461, 0xd461, 0xd461, 0xd460, 0xd460, 0xd460, 
+    0xd460, 0xd460, 0xd460, 0xd460, 0xd460, 0xd460, 0xd460, 0xd45f, 
+    0xd45f, 0xd45f, 0xd45f, 0xd45f, 0xd45f, 0xd45f, 0xd45f, 0xd45f, 
+    0xd45f, 0xd45e, 0xd45e, 0xd45e, 0xd45e, 0xd45e, 0xd45e, 0xd45e, 
+    0xd45e, 0xd45e, 0xd45e, 0xd45e, 0xd45d, 0xd45d, 0xd45d, 0xd45d, 
+    0xd45d, 0xd45d, 0xd45d, 0xd45d, 0xd45d, 0xd45d, 0xd45d, 0xd45c, 
+    0xd45c, 0xd45c, 0xd45c, 0xd45c, 0xd45c, 0xd45c, 0xd45c, 0xd45c, 
+    0xd45c, 0xd45b, 0xd45b, 0xd45b, 0xd45b, 0xd45b, 0xd45b, 0xd45b, 
+    0xd45b, 0xd45b, 0xd45b, 0xd45b, 0xd45a, 0xd45a, 0xd45a, 0xd45a, 
+    0xd45a, 0xd45a, 0xd45a, 0xd45a, 0xd45a, 0xd45a, 0xd45a, 0xd459, 
+    0xd459, 0xd459, 0xd459, 0xd459, 0xd459, 0xd459, 0xd459, 0xd459, 
+    0xd459, 0xd459, 0xd458, 0xd458, 0xd458, 0xd458, 0xd458, 0xd458, 
+    0xd458, 0xd458, 0xd458, 0xd458, 0xd458, 0xd457, 0xd457, 0xd457, 
+    0xd457, 0xd457, 0xd457, 0xd457, 0xd457, 0xd457, 0xd457, 0xd457, 
+    0xd456, 0xd456, 0xd456, 0xd456, 0xd456, 0xd456, 0xd456, 0xd456, 
+    0xd456, 0xd456, 0xd456, 0xd455, 0xd455, 0xd455, 0xd455, 0xd455, 
+    0xd455, 0xd455, 0xd455, 0xd455, 0xd455, 0xd455, 0xd455, 0xd454, 
+    0xd454, 0xd454, 0xd454, 0xd454, 0xd454, 0xd454, 0xd454, 0xd454, 
+    0xd454, 0xd454, 0xd453, 0xd453, 0xd453, 0xd453, 0xd453, 0xd453, 
+    0xd453, 0xd453, 0xd453, 0xd453, 0xd453, 0xd453, 0xd452, 0xd452, 
+    0xd452, 0xd452, 0xd452, 0xd452, 0xd452, 0xd452, 0xd452, 0xd452, 
+    0xd452, 0xd451, 0xd451, 0xd451, 0xd451, 0xd451, 0xd451, 0xd451, 
+    0xd451, 0xd451, 0xd451, 0xd451, 0xd451, 0xd450, 0xd450, 0xd450, 
+    0xd450, 0xd450, 0xd450, 0xd450, 0xd450, 0xd450, 0xd450, 0xd450, 
+    0xd450, 0xd44f, 0xd44f, 0xd44f, 0xd44f, 0xd44f, 0xd44f, 0xd44f, 
+    0xd44f, 0xd44f, 0xd44f, 0xd44f, 0xd44f, 0xd44e, 0xd44e, 0xd44e, 
+    0xd44e, 0xd44e, 0xd44e, 0xd44e, 0xd44e, 0xd44e, 0xd44e, 0xd44e, 
+    0xd44d, 0xd44d, 0xd44d, 0xd44d, 0xd44d, 0xd44d, 0xd44d, 0xd44d, 
+    0xd44d, 0xd44d, 0xd44d, 0xd44d, 0xd44d, 0xd44c, 0xd44c, 0xd44c, 
+    0xd44c, 0xd44c, 0xd44c, 0xd44c, 0xd44c, 0xd44c, 0xd44c, 0xd44c, 
+    0xd44c, 0xd44b, 0xd44b, 0xd44b, 0xd44b, 0xd44b, 0xd44b, 0xd44b, 
+    0xd44b, 0xd44b, 0xd44b, 0xd44b, 0xd44b, 0xd44a, 0xd44a, 0xd44a, 
+    0xd44a, 0xd44a, 0xd44a, 0xd44a, 0xd44a, 0xd44a, 0xd44a, 0xd44a, 
+    0xd44a, 0xd449, 0xd449, 0xd449, 0xd449, 0xd449, 0xd449, 0xd449, 
+    0xd449, 0xd449, 0xd449, 0xd449, 0xd449, 0xd449, 0xd448, 0xd448, 
+    0xd448, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, 
+    0xd448, 0xd448, 0xd447, 0xd447, 0xd447, 0xd447, 0xd447, 0xd447, 
+    0xd447, 0xd447, 0xd447, 0xd447, 0xd447, 0xd447, 0xd447, 0xd446, 
+    0xd446, 0xd446, 0xd446, 0xd446, 0xd446, 0xd446, 0xd446, 0xd446, 
+    0xd446, 0xd446, 0xd446, 0xd446, 0xd445, 0xd445, 0xd445, 0xd445, 
+    0xd445, 0xd445, 0xd445, 0xd445, 0xd445, 0xd445, 0xd445, 0xd445, 
+    0xd444, 0xd444, 0xd444, 0xd444, 0xd444, 0xd444, 0xd444, 0xd444, 
+    0xd444, 0xd444, 0xd444, 0xd444, 0xd444, 0xd443, 0xd443, 0xd443, 
+    0xd443, 0xd443, 0xd443, 0xd443, 0xd443, 0xd443, 0xd443, 0xd443, 
+    0xd443, 0xd443, 0xd442, 0xd442, 0xd442, 0xd442, 0xd442, 0xd442, 
+    0xd442, 0xd442, 0xd442, 0xd442, 0xd442, 0xd442, 0xd442, 0xd441, 
+    0xd441, 0xd441, 0xd441, 0xd441, 0xd441, 0xd441, 0xd441, 0xd441, 
+    0xd441, 0xd441, 0xd441, 0xd441, 0xd441, 0xd440, 0xd440, 0xd440, 
+    0xd440, 0xd440, 0xd440, 0xd440, 0xd440, 0xd440, 0xd440, 0xd440, 
+    0xd440, 0xd440, 0xd43f, 0xd43f, 0xd43f, 0xd43f, 0xd43f, 0xd43f, 
+    0xd43f, 0xd43f, 0xd43f, 0xd43f, 0xd43f, 0xd43f, 0xd43f, 0xd43e, 
+    0xd43e, 0xd43e, 0xd43e, 0xd43e, 0xd43e, 0xd43e, 0xd43e, 0xd43e, 
+    0xd43e, 0xd43e, 0xd43e, 0xd43e, 0xd43e, 0xd43d, 0xd43d, 0xd43d, 
+    0xd43d, 0xd43d, 0xd43d, 0xd43d, 0xd43d, 0xd43d, 0xd43d, 0xd43d, 
+    0xd43d, 0xd43d, 0xd43d, 0xd43c, 0xd43c, 0xd43c, 0xd43c, 0xd43c, 
+    0xd43c, 0xd43c, 0xd43c, 0xd43c, 0xd43c, 0xd43c, 0xd43c, 0xd43c, 
+    0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43b, 
+    0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43a, 0xd43a, 
+    0xd43a, 0xd43a, 0xd43a, 0xd43a, 0xd43a, 0xd43a, 0xd43a, 0xd43a, 
+    0xd43a, 0xd43a, 0xd43a, 0xd43a, 0xd439, 0xd439, 0xd439, 0xd439, 
+    0xd439, 0xd439, 0xd439, 0xd439, 0xd439, 0xd439, 0xd439, 0xd439, 
+    0xd439, 0xd439, 0xd438, 0xd438, 0xd438, 0xd438, 0xd438, 0xd438, 
+    0xd438, 0xd438, 0xd438, 0xd438, 0xd438, 0xd438, 0xd438, 0xd438, 
+    0xd438, 0xd437, 0xd437, 0xd437, 0xd437, 0xd437, 0xd437, 0xd437, 
+    0xd437, 0xd437, 0xd437, 0xd437, 0xd437, 0xd437, 0xd437, 0xd436, 
+    0xd436, 0xd436, 0xd436, 0xd436, 0xd436, 0xd436, 0xd436, 0xd436, 
+    0xd436, 0xd436, 0xd436, 0xd436, 0xd436, 0xd435, 0xd435, 0xd435, 
+    0xd435, 0xd435, 0xd435, 0xd435, 0xd435, 0xd435, 0xd435, 0xd435, 
+    0xd435, 0xd435, 0xd435, 0xd435, 0xd434, 0xd434, 0xd434, 0xd434, 
+    0xd434, 0xd434, 0xd434, 0xd434, 0xd434, 0xd434, 0xd434, 0xd434, 
+    0xd434, 0xd434, 0xd433, 0xd433, 0xd433, 0xd433, 0xd433, 0xd433, 
+    0xd433, 0xd433, 0xd433, 0xd433, 0xd433, 0xd433, 0xd433, 0xd433, 
+    0xd433, 0xd432, 0xd432, 0xd432, 0xd432, 0xd432, 0xd432, 0xd432, 
+    0xd432, 0xd432, 0xd432, 0xd432, 0xd432, 0xd432, 0xd432, 0xd432, 
+    0xd431, 0xd431, 0xd431, 0xd431, 0xd431, 0xd431, 0xd431, 0xd431, 
+    0xd431, 0xd431, 0xd431, 0xd431, 0xd431, 0xd431, 0xd431, 0xd430, 
+    0xd430, 0xd430, 0xd430, 0xd430, 0xd430, 0xd430, 0xd430, 0xd430, 
+    0xd430, 0xd430, 0xd430, 0xd430, 0xd430, 0xd430, 0xd42f, 0xd42f, 
+    0xd42f, 0xd42f, 0xd42f, 0xd42f, 0xd42f, 0xd42f, 0xd42f, 0xd42f, 
+    0xd42f, 0xd42f, 0xd42f, 0xd42f, 0xd42f, 0xd42e, 0xd42e, 0xd42e, 
+    0xd42e, 0xd42e, 0xd42e, 0xd42e, 0xd42e, 0xd42e, 0xd42e, 0xd42e, 
+    0xd42e, 0xd42e, 0xd42e, 0xd42e, 0xd42e, 0xd42d, 0xd42d, 0xd42d, 
+    0xd42d, 0xd42d, 0xd42d, 0xd42d, 0xd42d, 0xd42d, 0xd42d, 0xd42d, 
+    0xd42d, 0xd42d, 0xd42d, 0xd42d, 0xd42c, 0xd42c, 0xd42c, 0xd42c, 
+    0xd42c, 0xd42c, 0xd42c, 0xd42c, 0xd42c, 0xd42c, 0xd42c, 0xd42c, 
+    0xd42c, 0xd42c, 0xd42c, 0xd42c, 0xd42b, 0xd42b, 0xd42b, 0xd42b, 
+    0xd42b, 0xd42b, 0xd42b, 0xd42b, 0xd42b, 0xd42b, 0xd42b, 0xd42b, 
+    0xd42b, 0xd42b, 0xd42b, 0xd42a, 0xd42a, 0xd42a, 0xd42a, 0xd42a, 
+    0xd42a, 0xd42a, 0xd42a, 0xd42a, 0xd42a, 0xd42a, 0xd42a, 0xd42a, 
+    0xd42a, 0xd42a, 0xd42a, 0xd429, 0xd429, 0xd429, 0xd429, 0xd429, 
+    0xd429, 0xd429, 0xd429, 0xd429, 0xd429, 0xd429, 0xd429, 0xd429, 
+    0xd429, 0xd429, 0xd428, 0xd428, 0xd428, 0xd428, 0xd428, 0xd428, 
+    0xd428, 0xd428, 0xd427, 0xd427, 0xd427, 0xd427, 0xd427, 0xd427, 
+    0xd427, 0xd427, 0xd426, 0xd426, 0xd426, 0xd426, 0xd426, 0xd426, 
+    0xd426, 0xd426, 0xd425, 0xd425, 0xd425, 0xd425, 0xd425, 0xd425, 
+    0xd425, 0xd425, 0xd424, 0xd424, 0xd424, 0xd424, 0xd424, 0xd424, 
+    0xd424, 0xd424, 0xd424, 0xd423, 0xd423, 0xd423, 0xd423, 0xd423, 
+    0xd423, 0xd423, 0xd423, 0xd422, 0xd422, 0xd422, 0xd422, 0xd422, 
+    0xd422, 0xd422, 0xd422, 0xd422, 0xd421, 0xd421, 0xd421, 0xd421, 
+    0xd421, 0xd421, 0xd421, 0xd421, 0xd420, 0xd420, 0xd420, 0xd420, 
+    0xd420, 0xd420, 0xd420, 0xd420, 0xd420, 0xd41f, 0xd41f, 0xd41f, 
+    0xd41f, 0xd41f, 0xd41f, 0xd41f, 0xd41f, 0xd41e, 0xd41e, 0xd41e, 
+    0xd41e, 0xd41e, 0xd41e, 0xd41e, 0xd41e, 0xd41e, 0xd41d, 0xd41d, 
+    0xd41d, 0xd41d, 0xd41d, 0xd41d, 0xd41d, 0xd41d, 0xd41d, 0xd41c, 
+    0xd41c, 0xd41c, 0xd41c, 0xd41c, 0xd41c, 0xd41c, 0xd41c, 0xd41c, 
+    0xd41b, 0xd41b, 0xd41b, 0xd41b, 0xd41b, 0xd41b, 0xd41b, 0xd41b, 
+    0xd41a, 0xd41a, 0xd41a, 0xd41a, 0xd41a, 0xd41a, 0xd41a, 0xd41a, 
+    0xd41a, 0xd419, 0xd419, 0xd419, 0xd419, 0xd419, 0xd419, 0xd419, 
+    0xd419, 0xd419, 0xd418, 0xd418, 0xd418, 0xd418, 0xd418, 0xd418, 
+    0xd418, 0xd418, 0xd418, 0xd418, 0xd417, 0xd417, 0xd417, 0xd417, 
+    0xd417, 0xd417, 0xd417, 0xd417, 0xd417, 0xd416, 0xd416, 0xd416, 
+    0xd416, 0xd416, 0xd416, 0xd416, 0xd416, 0xd416, 0xd415, 0xd415, 
+    0xd415, 0xd415, 0xd415, 0xd415, 0xd415, 0xd415, 0xd415, 0xd414, 
+    0xd414, 0xd414, 0xd414, 0xd414, 0xd414, 0xd414, 0xd414, 0xd414, 
+    0xd414, 0xd413, 0xd413, 0xd413, 0xd413, 0xd413, 0xd413, 0xd413, 
+    0xd413, 0xd413, 0xd412, 0xd412, 0xd412, 0xd412, 0xd412, 0xd412, 
+    0xd412, 0xd412, 0xd412, 0xd412, 0xd411, 0xd411, 0xd411, 0xd411, 
+    0xd411, 0xd411, 0xd411, 0xd411, 0xd411, 0xd410, 0xd410, 0xd410, 
+    0xd410, 0xd410, 0xd410, 0xd410, 0xd410, 0xd410, 0xd410, 0xd40f, 
+    0xd40f, 0xd40f, 0xd40f, 0xd40f, 0xd40f, 0xd40f, 0xd40f, 0xd40f, 
+    0xd40f, 0xd40e, 0xd40e, 0xd40e, 0xd40e, 0xd40e, 0xd40e, 0xd40e, 
+    0xd40e, 0xd40e, 0xd40e, 0xd40d, 0xd40d, 0xd40d, 0xd40d, 0xd40d, 
+    0xd40d, 0xd40d, 0xd40d, 0xd40d, 0xd40d, 0xd40c, 0xd40c, 0xd40c, 
+    0xd40c, 0xd40c, 0xd40c, 0xd40c, 0xd40c, 0xd40c, 0xd40c, 0xd40b, 
+    0xd40b, 0xd40b, 0xd40b, 0xd40b, 0xd40b, 0xd40b, 0xd40b, 0xd40b, 
+    0xd40b, 0xd40a, 0xd40a, 0xd40a, 0xd40a, 0xd40a, 0xd40a, 0xd40a, 
+    0xd40a, 0xd40a, 0xd40a, 0xd409, 0xd409, 0xd409, 0xd409, 0xd409, 
+    0xd409, 0xd409, 0xd409, 0xd409, 0xd409, 0xd408, 0xd408, 0xd408, 
+    0xd408, 0xd408, 0xd408, 0xd408, 0xd408, 0xd408, 0xd408, 0xd407, 
+    0xd407, 0xd407, 0xd407, 0xd407, 0xd407, 0xd407, 0xd407, 0xd407, 
+    0xd407, 0xd407, 0xd406, 0xd406, 0xd406, 0xd406, 0xd406, 0xd406, 
+    0xd406, 0xd406, 0xd406, 0xd406, 0xd405, 0xd405, 0xd405, 0xd405, 
+    0xd405, 0xd405, 0xd405, 0xd405, 0xd405, 0xd405, 0xd405, 0xd404, 
+    0xd404, 0xd404, 0xd404, 0xd404, 0xd404, 0xd404, 0xd404, 0xd404, 
+    0xd404, 0xd404, 0xd403, 0xd403, 0xd403, 0xd403, 0xd403, 0xd403, 
+    0xd403, 0xd403, 0xd403, 0xd403, 0xd402, 0xd402, 0xd402, 0xd402, 
+    0xd402, 0xd402, 0xd402, 0xd402, 0xd402, 0xd402, 0xd402, 0xd401, 
+    0xd401, 0xd401, 0xd401, 0xd401, 0xd401, 0xd401, 0xd401, 0xd401, 
+    0xd401, 0xd401, 0xd400, 0xd400, 0xd400, 0xd400, 0xd400, 0xd400, 
+    0xd400, 0xd400, 0xd3ff, 0xd3ff, 0xd3ff, 0xd3ff, 0xd3ff, 0xd3ff, 
+    0xd3fe, 0xd3fe, 0xd3fe, 0xd3fe, 0xd3fe, 0xd3fd, 0xd3fd, 0xd3fd, 
+    0xd3fd, 0xd3fd, 0xd3fd, 0xd3fc, 0xd3fc, 0xd3fc, 0xd3fc, 0xd3fc, 
+    0xd3fb, 0xd3fb, 0xd3fb, 0xd3fb, 0xd3fb, 0xd3fb, 0xd3fa, 0xd3fa, 
+    0xd3fa, 0xd3fa, 0xd3fa, 0xd3fa, 0xd3f9, 0xd3f9, 0xd3f9, 0xd3f9, 
+    0xd3f9, 0xd3f8, 0xd3f8, 0xd3f8, 0xd3f8, 0xd3f8, 0xd3f8, 0xd3f7, 
+    0xd3f7, 0xd3f7, 0xd3f7, 0xd3f7, 0xd3f7, 0xd3f6, 0xd3f6, 0xd3f6, 
+    0xd3f6, 0xd3f6, 0xd3f5, 0xd3f5, 0xd3f5, 0xd3f5, 0xd3f5, 0xd3f5, 
+    0xd3f4, 0xd3f4, 0xd3f4, 0xd3f4, 0xd3f4, 0xd3f4, 0xd3f3, 0xd3f3, 
+    0xd3f3, 0xd3f3, 0xd3f3, 0xd3f3, 0xd3f2, 0xd3f2, 0xd3f2, 0xd3f2, 
+    0xd3f2, 0xd3f2, 0xd3f1, 0xd3f1, 0xd3f1, 0xd3f1, 0xd3f1, 0xd3f0, 
+    0xd3f0, 0xd3f0, 0xd3f0, 0xd3f0, 0xd3f0, 0xd3ef, 0xd3ef, 0xd3ef, 
+    0xd3ef, 0xd3ef, 0xd3ef, 0xd3ee, 0xd3ee, 0xd3ee, 0xd3ee, 0xd3ee, 
+    0xd3ee, 0xd3ed, 0xd3ed, 0xd3ed, 0xd3ed, 0xd3ed, 0xd3ed, 0xd3ec, 
+    0xd3ec, 0xd3ec, 0xd3ec, 0xd3ec, 0xd3ec, 0xd3eb, 0xd3eb, 0xd3eb, 
+    0xd3eb, 0xd3eb, 0xd3eb, 0xd3ea, 0xd3ea, 0xd3ea, 0xd3ea, 0xd3ea, 
+    0xd3ea, 0xd3e9, 0xd3e9, 0xd3e9, 0xd3e9, 0xd3e9, 0xd3e9, 0xd3e8, 
+    0xd3e8, 0xd3e8, 0xd3e8, 0xd3e8, 0xd3e8, 0xd3e7, 0xd3e7, 0xd3e7, 
+    0xd3e7, 0xd3e7, 0xd3e7, 0xd3e6, 0xd3e6, 0xd3e6, 0xd3e6, 0xd3e6, 
+    0xd3e6, 0xd3e5, 0xd3e5, 0xd3e5, 0xd3e5, 0xd3e5, 0xd3e5, 0xd3e4, 
+    0xd3e4, 0xd3e4, 0xd3e4, 0xd3e4, 0xd3e4, 0xd3e3, 0xd3e3, 0xd3e3, 
+    0xd3e3, 0xd3e3, 0xd3e3, 0xd3e2, 0xd3e2, 0xd3e2, 0xd3e2, 0xd3e2, 
+    0xd3e2, 0xd3e2, 0xd3e1, 0xd3e1, 0xd3e1, 0xd3e1, 0xd3e1, 0xd3e1, 
+    0xd3e0, 0xd3e0, 0xd3e0, 0xd3e0, 0xd3e0, 0xd3e0, 0xd3df, 0xd3df, 
+    0xd3df, 0xd3df, 0xd3df, 0xd3df, 0xd3de, 0xd3de, 0xd3de, 0xd3de, 
+    0xd3de, 0xd3de, 0xd3de, 0xd3dd, 0xd3dd, 0xd3dd, 0xd3dd, 0xd3dd, 
+    0xd3dd, 0xd3dc, 0xd3dc, 0xd3dc, 0xd3dc, 0xd3dc, 0xd3dc, 0xd3db, 
+    0xd3db, 0xd3db, 0xd3db, 0xd3db, 0xd3db, 0xd3db, 0xd3da, 0xd3da, 
+    0xd3da, 0xd3da, 0xd3da, 0xd3da, 0xd3d9, 0xd3d9, 0xd3d9, 0xd3d9, 
+    0xd3d9, 0xd3d9, 0xd3d8, 0xd3d8, 0xd3d8, 0xd3d8, 0xd3d8, 0xd3d8, 
+    0xd3d8, 0xd3d7, 0xd3d7, 0xd3d7, 0xd3d7, 0xd3d7, 0xd3d7, 0xd3d6, 
+    0xd3d6, 0xd3d6, 0xd3d6, 0xd3d6, 0xd3d6, 0xd3d6, 0xd3d5, 0xd3d5, 
+    0xd3d5, 0xd3d5, 0xd3d5, 0xd3d5, 0xd3d4, 0xd3d4, 0xd3d4, 0xd3d4, 
+    0xd3d4, 0xd3d4, 0xd3d4, 0xd3d3, 0xd3d3, 0xd3d3, 0xd3d3, 0xd3d3, 
+    0xd3d3, 0xd3d2, 0xd3d2, 0xd3d2, 0xd3d2, 0xd3d2, 0xd3d2, 0xd3d2, 
+    0xd3d1, 0xd3d1, 0xd3d1, 0xd3d1, 0xd3d1, 0xd3d1, 0xd3d0, 0xd3d0, 
+    0xd3d0, 0xd3d0, 0xd3d0, 0xd3d0, 0xd3d0, 0xd3cf, 0xd3cf, 0xd3cf, 
+    0xd3cf, 0xd3cf, 0xd3cf, 0xd3cf, 0xd3ce, 0xd3ce, 0xd3ce, 0xd3ce, 
+    0xd3ce, 0xd3ce, 0xd3cd, 0xd3cd, 0xd3cd, 0xd3cd, 0xd3cd, 0xd3cd, 
+    0xd3cd, 0xd3cc, 0xd3cc, 0xd3cc, 0xd3cc, 0xd3cc, 0xd3cc, 0xd3cc, 
+    0xd3cb, 0xd3cb, 0xd3cb, 0xd3cb, 0xd3cb, 0xd3cb, 0xd3cb, 0xd3ca, 
+    0xd3ca, 0xd3ca, 0xd3ca, 0xd3ca, 0xd3ca, 0xd3c9, 0xd3c9, 0xd3c9, 
+    0xd3c9, 0xd3c9, 0xd3c9, 0xd3c9, 0xd3c8, 0xd3c8, 0xd3c8, 0xd3c8, 
+    0xd3c8, 0xd3c8, 0xd3c8, 0xd3c7, 0xd3c7, 0xd3c7, 0xd3c7, 0xd3c7, 
+    0xd3c7, 0xd3c7, 0xd3c6, 0xd3c6, 0xd3c6, 0xd3c6, 0xd3c6, 0xd3c6, 
+    0xd3c6, 0xd3c5, 0xd3c5, 0xd3c5, 0xd3c5, 0xd3c5, 0xd3c5, 0xd3c5, 
+    0xd3c4, 0xd3c4, 0xd3c4, 0xd3c4, 0xd3c4, 0xd3c4, 0xd3c4, 0xd3c3, 
+    0xd3c3, 0xd3c3, 0xd3c3, 0xd3c3, 0xd3c3, 0xd3c3, 0xd3c2, 0xd3c2, 
+    0xd3c2, 0xd3c2, 0xd3c2, 0xd3c2, 0xd3c2, 0xd3c1, 0xd3c1, 0xd3c1, 
+    0xd3c1, 0xd3c1, 0xd3c1, 0xd3c1, 0xd3c0, 0xd3c0, 0xd3c0, 0xd3c0, 
+    0xd3c0, 0xd3c0, 0xd3c0, 0xd3bf, 0xd3bf, 0xd3bf, 0xd3bf, 0xd3bf, 
+    0xd3bf, 0xd3bf, 0xd3be, 0xd3be, 0xd3be, 0xd3be, 0xd3be, 0xd3be, 
+    0xd3be, 0xd3bd, 0xd3bd, 0xd3bd, 0xd3bd, 0xd3bd, 0xd3bd, 0xd3bd, 
+    0xd3bc, 0xd3bc, 0xd3bc, 0xd3bc, 0xd3bc, 0xd3bc, 0xd3bc, 0xd3bb, 
+    0xd3bb, 0xd3bb, 0xd3bb, 0xd3bb, 0xd3bb, 0xd3bb, 0xd3ba, 0xd3ba, 
+    0xd3ba, 0xd3ba, 0xd3ba, 0xd3ba, 0xd3ba, 0xd3ba, 0xd3b9, 0xd3b9, 
+    0xd3b9, 0xd3b9, 0xd3b9, 0xd3b9, 0xd3b9, 0xd3b8, 0xd3b8, 0xd3b8, 
+    0xd3b8, 0xd3b8, 0xd3b8, 0xd3b8, 0xd3b7, 0xd3b7, 0xd3b7, 0xd3b7, 
+    0xd3b7, 0xd3b7, 0xd3b7, 0xd3b6, 0xd3b6, 0xd3b6, 0xd3b6, 0xd3b6, 
+    0xd3b6, 0xd3b6, 0xd3b6, 0xd3b5, 0xd3b5, 0xd3b5, 0xd3b5, 0xd3b5, 
+    0xd3b5, 0xd3b5, 0xd3b4, 0xd3b4, 0xd3b4, 0xd3b4, 0xd3b4, 0xd3b4, 
+    0xd3b4, 0xd3b4, 0xd3b3, 0xd3b3, 0xd3b3, 0xd3b3, 0xd3b3, 0xd3b3, 
+    0xd3b3, 0xd3b2, 0xd3b2, 0xd3b2, 0xd3b2, 0xd3b2, 0xd3b2, 0xd3b2, 
+    0xd3b1, 0xd3b1, 0xd3b1, 0xd3b1, 0xd3b1, 0xd3b1, 0xd3b1, 0xd3b1, 
+    0xd3b0, 0xd3b0, 0xd3b0, 0xd3b0, 0xd3b0, 0xd3b0, 0xd3b0, 0xd3af, 
+    0xd3af, 0xd3af, 0xd3af, 0xd3af, 0xd3af, 0xd3af, 0xd3af, 0xd3ae, 
+    0xd3ae, 0xd3ae, 0xd3ae, 0xd3ae, 0xd3ae, 0xd3ae, 0xd3ae, 0xd3ad, 
+    0xd3ad, 0xd3ad, 0xd3ad, 0xd3ad, 0xd3ad, 0xd3ad, 0xd3ac, 0xd3ac, 
+    0xd3ac, 0xd3ac, 0xd3ac, 0xd3ac, 0xd3ac, 0xd3ac, 0xd3ab, 0xd3ab, 
+    0xd3ab, 0xd3ab, 0xd3ab, 0xd3ab, 0xd3ab, 0xd3aa, 0xd3aa, 0xd3aa, 
+    0xd3aa, 0xd3aa, 0xd3aa, 0xd3aa, 0xd3aa, 0xd3a9, 0xd3a9, 0xd3a9, 
+    0xd3a9, 0xd3a9, 0xd3a9, 0xd3a9, 0xd3a9, 0xd3a8, 0xd3a8, 0xd3a8, 
+    0xd3a8, 0xd3a8, 0xd3a8, 0xd3a8, 0xd3a8, 0xd3a7, 0xd3a7, 0xd3a7, 
+    0xd3a7, 0xd3a7, 0xd3a7, 0xd3a7, 0xd3a6, 0xd3a6, 0xd3a6, 0xd3a6, 
+    0xd3a6, 0xd3a6, 0xd3a6, 0xd3a6, 0xd3a5, 0xd3a5, 0xd3a5, 0xd3a5, 
+    0xd3a5, 0xd3a5, 0xd3a5, 0xd3a5, 0xd3a4, 0xd3a4, 0xd3a4, 0xd3a4, 
+    0xd3a4, 0xd3a4, 0xd3a4, 0xd3a4, 0xd3a3, 0xd3a3, 0xd3a3, 0xd3a3, 
+    0xd3a3, 0xd3a3, 0xd3a3, 0xd3a3, 0xd3a2, 0xd3a2, 0xd3a2, 0xd3a2, 
+    0xd3a2, 0xd3a2, 0xd3a2, 0xd3a2, 0xd3a1, 0xd3a1, 0xd3a1, 0xd3a1, 
+    0xd3a1, 0xd3a1, 0xd3a1, 0xd3a1, 0xd3a0, 0xd3a0, 0xd3a0, 0xd3a0, 
+    0xd3a0, 0xd3a0, 0xd39f, 0xd39f, 0xd39f, 0xd39f, 0xd39e, 0xd39e, 
+    0xd39e, 0xd39e, 0xd39d, 0xd39d, 0xd39d, 0xd39d, 0xd39c, 0xd39c, 
+    0xd39c, 0xd39c, 0xd39b, 0xd39b, 0xd39b, 0xd39b, 0xd39a, 0xd39a, 
+    0xd39a, 0xd39a, 0xd399, 0xd399, 0xd399, 0xd399, 0xd399, 0xd398, 
+    0xd398, 0xd398, 0xd398, 0xd397, 0xd397, 0xd397, 0xd397, 0xd396, 
+    0xd396, 0xd396, 0xd396, 0xd395, 0xd395, 0xd395, 0xd395, 0xd394, 
+    0xd394, 0xd394, 0xd394, 0xd393, 0xd393, 0xd393, 0xd393, 0xd393, 
+    0xd392, 0xd392, 0xd392, 0xd392, 0xd391, 0xd391, 0xd391, 0xd391, 
+    0xd390, 0xd390, 0xd390, 0xd390, 0xd38f, 0xd38f, 0xd38f, 0xd38f, 
+    0xd38f, 0xd38e, 0xd38e, 0xd38e, 0xd38e, 0xd38d, 0xd38d, 0xd38d, 
+    0xd38d, 0xd38c, 0xd38c, 0xd38c, 0xd38c, 0xd38b, 0xd38b, 0xd38b, 
+    0xd38b, 0xd38b, 0xd38a, 0xd38a, 0xd38a, 0xd38a, 0xd389, 0xd389, 
+    0xd389, 0xd389, 0xd389, 0xd388, 0xd388, 0xd388, 0xd388, 0xd387, 
+    0xd387, 0xd387, 0xd387, 0xd386, 0xd386, 0xd386, 0xd386, 0xd386, 
+    0xd385, 0xd385, 0xd385, 0xd385, 0xd384, 0xd384, 0xd384, 0xd384, 
+    0xd384, 0xd383, 0xd383, 0xd383, 0xd383, 0xd382, 0xd382, 0xd382, 
+    0xd382, 0xd382, 0xd381, 0xd381, 0xd381, 0xd381, 0xd380, 0xd380, 
+    0xd380, 0xd380, 0xd380, 0xd37f, 0xd37f, 0xd37f, 0xd37f, 0xd37e, 
+    0xd37e, 0xd37e, 0xd37e, 0xd37e, 0xd37d, 0xd37d, 0xd37d, 0xd37d, 
+    0xd37c, 0xd37c, 0xd37c, 0xd37c, 0xd37c, 0xd37b, 0xd37b, 0xd37b, 
+    0xd37b, 0xd37b, 0xd37a, 0xd37a, 0xd37a, 0xd37a, 0xd379, 0xd379, 
+    0xd379, 0xd379, 0xd379, 0xd378, 0xd378, 0xd378, 0xd378, 0xd378, 
+    0xd377, 0xd377, 0xd377, 0xd377, 0xd376, 0xd376, 0xd376, 0xd376, 
+    0xd376, 0xd375, 0xd375, 0xd375, 0xd375, 0xd375, 0xd374, 0xd374, 
+    0xd374, 0xd374, 0xd373, 0xd373, 0xd373, 0xd373, 0xd373, 0xd372, 
+    0xd372, 0xd372, 0xd372, 0xd372, 0xd371, 0xd371, 0xd371, 0xd371, 
+    0xd371, 0xd370, 0xd370, 0xd370, 0xd370, 0xd370, 0xd36f, 0xd36f, 
+    0xd36f, 0xd36f, 0xd36e, 0xd36e, 0xd36e, 0xd36e, 0xd36e, 0xd36d, 
+    0xd36d, 0xd36d, 0xd36d, 0xd36d, 0xd36c, 0xd36c, 0xd36c, 0xd36c, 
+    0xd36c, 0xd36b, 0xd36b, 0xd36b, 0xd36b, 0xd36b, 0xd36a, 0xd36a, 
+    0xd36a, 0xd36a, 0xd36a, 0xd369, 0xd369, 0xd369, 0xd369, 0xd369, 
+    0xd368, 0xd368, 0xd368, 0xd368, 0xd368, 0xd367, 0xd367, 0xd367, 
+    0xd367, 0xd367, 0xd366, 0xd366, 0xd366, 0xd366, 0xd366, 0xd365, 
+    0xd365, 0xd365, 0xd365, 0xd365, 0xd364, 0xd364, 0xd364, 0xd364, 
+    0xd364, 0xd363, 0xd363, 0xd363, 0xd363, 0xd363, 0xd362, 0xd362, 
+    0xd362, 0xd362, 0xd362, 0xd361, 0xd361, 0xd361, 0xd361, 0xd361, 
+    0xd360, 0xd360, 0xd360, 0xd360, 0xd360, 0xd35f, 0xd35f, 0xd35f, 
+    0xd35f, 0xd35f, 0xd35f, 0xd35e, 0xd35e, 0xd35e, 0xd35e, 0xd35e, 
+    0xd35d, 0xd35d, 0xd35d, 0xd35d, 0xd35d, 0xd35c, 0xd35c, 0xd35c, 
+    0xd35c, 0xd35c, 0xd35b, 0xd35b, 0xd35b, 0xd35b, 0xd35b, 0xd35a, 
+    0xd35a, 0xd35a, 0xd35a, 0xd35a, 0xd35a, 0xd359, 0xd359, 0xd359, 
+    0xd359, 0xd359, 0xd358, 0xd358, 0xd358, 0xd358, 0xd358, 0xd357, 
+    0xd357, 0xd357, 0xd357, 0xd357, 0xd357, 0xd356, 0xd356, 0xd356, 
+    0xd356, 0xd356, 0xd355, 0xd355, 0xd355, 0xd355, 0xd355, 0xd354, 
+    0xd354, 0xd354, 0xd354, 0xd354, 0xd354, 0xd353, 0xd353, 0xd353, 
+    0xd353, 0xd353, 0xd352, 0xd352, 0xd352, 0xd352, 0xd352, 0xd351, 
+    0xd351, 0xd351, 0xd351, 0xd351, 0xd351, 0xd350, 0xd350, 0xd350, 
+    0xd350, 0xd350, 0xd34f, 0xd34f, 0xd34f, 0xd34f, 0xd34f, 0xd34f, 
+    0xd34e, 0xd34e, 0xd34e, 0xd34e, 0xd34e, 0xd34d, 0xd34d, 0xd34d, 
+    0xd34d, 0xd34d, 0xd34d, 0xd34c, 0xd34c, 0xd34c, 0xd34c, 0xd34c, 
+    0xd34b, 0xd34b, 0xd34b, 0xd34b, 0xd34b, 0xd34b, 0xd34a, 0xd34a, 
+    0xd34a, 0xd34a, 0xd34a, 0xd34a, 0xd349, 0xd349, 0xd349, 0xd349, 
+    0xd349, 0xd348, 0xd348, 0xd348, 0xd348, 0xd348, 0xd348, 0xd347, 
+    0xd347, 0xd347, 0xd347, 0xd347, 0xd347, 0xd346, 0xd346, 0xd346, 
+    0xd346, 0xd346, 0xd345, 0xd345, 0xd345, 0xd345, 0xd345, 0xd345, 
+    0xd344, 0xd344, 0xd344, 0xd344, 0xd344, 0xd344, 0xd343, 0xd343, 
+    0xd343, 0xd343, 0xd343, 0xd342, 0xd342, 0xd342, 0xd342, 0xd342, 
+    0xd342, 0xd341, 0xd341, 0xd341, 0xd341, 0xd341, 0xd341, 0xd340, 
+    0xd340, 0xd340, 0xd340, 0xd340, 0xd340, 0xd33f, 0xd33f, 0xd33f, 
+    0xd33f, 0xd33f, 0xd33f, 0xd33e, 0xd33e, 0xd33e, 0xd33e, 0xd33e, 
+    0xd33d, 0xd33d, 0xd33d, 0xd33d, 0xd33d, 0xd33d, 0xd33c, 0xd33c, 
+    0xd33c, 0xd33c, 0xd33c, 0xd33c, 0xd33b, 0xd33b, 0xd33b, 0xd33b, 
+    0xd33b, 0xd33b, 0xd33a, 0xd33a, 0xd33a, 0xd33a, 0xd33a, 0xd33a, 
+    0xd339, 0xd339, 0xd339, 0xd339, 0xd339, 0xd339, 0xd338, 0xd338, 
+    0xd338, 0xd338, 0xd338, 0xd338, 0xd337, 0xd337, 0xd337, 0xd337, 
+    0xd337, 0xd337, 0xd336, 0xd336, 0xd336, 0xd336, 0xd336, 0xd336, 
+    0xd335, 0xd335, 0xd335, 0xd335, 0xd335, 0xd335, 0xd334, 0xd334, 
+    0xd334, 0xd334, 0xd334, 0xd334, 0xd333, 0xd333, 0xd333, 0xd333, 
+    0xd333, 0xd333, 0xd332, 0xd332, 0xd332, 0xd332, 0xd332, 0xd332, 
+    0xd332, 0xd331, 0xd331, 0xd331, 0xd331, 0xd331, 0xd331, 0xd330, 
+    0xd330, 0xd330, 0xd330, 0xd330, 0xd330, 0xd32f, 0xd32f, 0xd32f, 
+    0xd32f, 0xd32f, 0xd32f, 0xd32e, 0xd32e, 0xd32e, 0xd32e, 0xd32e, 
+    0xd32e, 0xd32d, 0xd32d, 0xd32d, 0xd32d, 0xd32d, 0xd32d, 0xd32d, 
+    0xd32c, 0xd32c, 0xd32c, 0xd32c, 0xd32c, 0xd32c, 0xd32b, 0xd32b, 
+    0xd32b, 0xd32b, 0xd32b, 0xd32b, 0xd32a, 0xd32a, 0xd32a, 0xd32a, 
+    0xd32a, 0xd32a, 0xd32a, 0xd329, 0xd329, 0xd329, 0xd329, 0xd329, 
+    0xd329, 0xd328, 0xd328, 0xd328, 0xd328, 0xd328, 0xd328, 0xd327, 
+    0xd327, 0xd327, 0xd327, 0xd327, 0xd327, 0xd327, 0xd326, 0xd326, 
+    0xd326, 0xd326, 0xd326, 0xd326, 0xd325, 0xd325, 0xd325, 0xd325, 
+    0xd325, 0xd325, 0xd325, 0xd324, 0xd324, 0xd324, 0xd324, 0xd324, 
+    0xd324, 0xd323, 0xd323, 0xd323, 0xd323, 0xd323, 0xd323, 0xd323, 
+    0xd322, 0xd322, 0xd322, 0xd322, 0xd322, 0xd322, 0xd321, 0xd321, 
+    0xd321, 0xd321, 0xd321, 0xd321, 0xd321, 0xd320, 0xd320, 0xd320, 
+    0xd320, 0xd320, 0xd320, 0xd31f, 0xd31f, 0xd31f, 0xd31f, 0xd31f, 
+    0xd31f, 0xd31f, 0xd31e, 0xd31e, 0xd31e, 0xd31e, 0xd31e, 0xd31e, 
+    0xd31e, 0xd31d, 0xd31d, 0xd31d, 0xd31d, 0xd31d, 0xd31d, 0xd31c, 
+    0xd31c, 0xd31c, 0xd31c, 0xd31c, 0xd31c, 0xd31c, 0xd31b, 0xd31b, 
+    0xd31b, 0xd31b, 0xd31b, 0xd31b, 0xd31b, 0xd31a, 0xd31a, 0xd31a, 
+    0xd31a, 0xd31a, 0xd31a, 0xd31a, 0xd319, 0xd319, 0xd319, 0xd319, 
+    0xd319, 0xd319, 0xd318, 0xd318, 0xd318, 0xd318, 0xd318, 0xd318, 
+    0xd318, 0xd317, 0xd317, 0xd317, 0xd317, 0xd317, 0xd317, 0xd317, 
+    0xd316, 0xd316, 0xd316, 0xd316, 0xd316, 0xd316, 0xd316, 0xd315, 
+    0xd315, 0xd315, 0xd315, 0xd315, 0xd315, 0xd315, 0xd314, 0xd314, 
+    0xd314, 0xd314, 0xd314, 0xd314, 0xd314, 0xd313, 0xd313, 0xd313, 
+    0xd313, 0xd313, 0xd313, 0xd313, 0xd312, 0xd312, 0xd312, 0xd312, 
+    0xd312, 0xd312, 0xd311, 0xd311, 0xd311, 0xd311, 0xd311, 0xd311, 
+    0xd311, 0xd310, 0xd310, 0xd310, 0xd310, 0xd310, 0xd310, 0xd310, 
+    0xd310, 0xd30f, 0xd30f, 0xd30f, 0xd30f, 0xd30f, 0xd30f, 0xd30f, 
+    0xd30e, 0xd30e, 0xd30e, 0xd30e, 0xd30e, 0xd30e, 0xd30e, 0xd30d, 
+    0xd30d, 0xd30d, 0xd30d, 0xd30d, 0xd30d, 0xd30d, 0xd30c, 0xd30c, 
+    0xd30c, 0xd30c, 0xd30c, 0xd30c, 0xd30c, 0xd30b, 0xd30b, 0xd30b, 
+    0xd30b, 0xd30b, 0xd30b, 0xd30b, 0xd30a, 0xd30a, 0xd30a, 0xd30a, 
+    0xd30a, 0xd30a, 0xd30a, 0xd309, 0xd309, 0xd309, 0xd309, 0xd309, 
+    0xd309, 0xd309, 0xd308, 0xd308, 0xd308, 0xd308, 0xd308, 0xd308, 
+    0xd308, 0xd308, 0xd307, 0xd307, 0xd307, 0xd307, 0xd307, 0xd307, 
+    0xd307, 0xd306, 0xd306, 0xd306, 0xd306, 0xd306, 0xd306, 0xd306, 
+    0xd305, 0xd305, 0xd305, 0xd305, 0xd305, 0xd305, 0xd305, 0xd305, 
+    0xd304, 0xd304, 0xd304, 0xd304, 0xd304, 0xd304, 0xd304, 0xd303, 
+    0xd303, 0xd303, 0xd303, 0xd303, 0xd303, 0xd303, 0xd302, 0xd302, 
+    0xd302, 0xd302, 0xd302, 0xd302, 0xd302, 0xd302, 0xd301, 0xd301, 
+    0xd301, 0xd301, 0xd301, 0xd301, 0xd301, 0xd300, 0xd300, 0xd300, 
+    0xd300, 0xd300, 0xd300, 0xd300, 0xd300, 0xd2ff, 0xd2ff, 0xd2ff, 
+    0xd2ff, 0xd2ff, 0xd2ff, 0xd2ff, 0xd2fe, 0xd2fe, 0xd2fe, 0xd2fe, 
+    0xd2fe, 0xd2fe, 0xd2fe, 0xd2fe, 0xd2fd, 0xd2fd, 0xd2fd, 0xd2fd, 
+    0xd2fd, 0xd2fd, 0xd2fd, 0xd2fc, 0xd2fc, 0xd2fc, 0xd2fc, 0xd2fc, 
+    0xd2fc, 0xd2fc, 0xd2fc, 0xd2fb, 0xd2fb, 0xd2fb, 0xd2fb, 0xd2fb, 
+    0xd2fb, 0xd2fb, 0xd2fa, 0xd2fa, 0xd2fa, 0xd2fa, 0xd2fa, 0xd2fa, 
+    0xd2fa, 0xd2fa, 0xd2f9, 0xd2f9, 0xd2f9, 0xd2f9, 0xd2f9, 0xd2f9, 
+    0xd2f9, 0xd2f9, 0xd2f8, 0xd2f8, 0xd2f8, 0xd2f8, 0xd2f8, 0xd2f8, 
+    0xd2f8, 0xd2f7, 0xd2f7, 0xd2f7, 0xd2f7, 0xd2f7, 0xd2f7, 0xd2f7, 
+    0xd2f7, 0xd2f6, 0xd2f6, 0xd2f6, 0xd2f6, 0xd2f6, 0xd2f6, 0xd2f6, 
+    0xd2f6, 0xd2f5, 0xd2f5, 0xd2f5, 0xd2f5, 0xd2f5, 0xd2f5, 0xd2f5, 
+    0xd2f5, 0xd2f4, 0xd2f4, 0xd2f4, 0xd2f4, 0xd2f4, 0xd2f4, 0xd2f4, 
+    0xd2f4, 0xd2f3, 0xd2f3, 0xd2f3, 0xd2f3, 0xd2f3, 0xd2f3, 0xd2f3, 
+    0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 
+    0xd2f1, 0xd2f1, 0xd2f1, 0xd2f1, 0xd2f1, 0xd2f1, 0xd2f1, 0xd2f1, 
+    0xd2f0, 0xd2f0, 0xd2f0, 0xd2f0, 0xd2f0, 0xd2f0, 0xd2f0, 0xd2f0, 
+    0xd2ef, 0xd2ef, 0xd2ef, 0xd2ef, 0xd2ef, 0xd2ef, 0xd2ef, 0xd2ef, 
+    0xd2ee, 0xd2ee, 0xd2ee, 0xd2ee, 0xd2ed, 0xd2ed, 0xd2ed, 0xd2ed, 
+    0xd2ec, 0xd2ec, 0xd2ec, 0xd2ec, 0xd2eb, 0xd2eb, 0xd2eb, 0xd2eb, 
+    0xd2ea, 0xd2ea, 0xd2ea, 0xd2ea, 0xd2ea, 0xd2e9, 0xd2e9, 0xd2e9, 
+    0xd2e9, 0xd2e8, 0xd2e8, 0xd2e8, 0xd2e8, 0xd2e7, 0xd2e7, 0xd2e7, 
+    0xd2e7, 0xd2e6, 0xd2e6, 0xd2e6, 0xd2e6, 0xd2e5, 0xd2e5, 0xd2e5, 
+    0xd2e5, 0xd2e4, 0xd2e4, 0xd2e4, 0xd2e4, 0xd2e3, 0xd2e3, 0xd2e3, 
+    0xd2e3, 0xd2e2, 0xd2e2, 0xd2e2, 0xd2e2, 0xd2e2, 0xd2e1, 0xd2e1, 
+    0xd2e1, 0xd2e1, 0xd2e0, 0xd2e0, 0xd2e0, 0xd2e0, 0xd2df, 0xd2df, 
+    0xd2df, 0xd2df, 0xd2de, 0xd2de, 0xd2de, 0xd2de, 0xd2de, 0xd2dd, 
+    0xd2dd, 0xd2dd, 0xd2dd, 0xd2dc, 0xd2dc, 0xd2dc, 0xd2dc, 0xd2db, 
+    0xd2db, 0xd2db, 0xd2db, 0xd2db, 0xd2da, 0xd2da, 0xd2da, 0xd2da, 
+    0xd2d9, 0xd2d9, 0xd2d9, 0xd2d9, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 
+    0xd2d8, 0xd2d7, 0xd2d7, 0xd2d7, 0xd2d7, 0xd2d6, 0xd2d6, 0xd2d6, 
+    0xd2d6, 0xd2d5, 0xd2d5, 0xd2d5, 0xd2d5, 0xd2d5, 0xd2d4, 0xd2d4, 
+    0xd2d4, 0xd2d4, 0xd2d3, 0xd2d3, 0xd2d3, 0xd2d3, 0xd2d3, 0xd2d2, 
+    0xd2d2, 0xd2d2, 0xd2d2, 0xd2d1, 0xd2d1, 0xd2d1, 0xd2d1, 0xd2d1, 
+    0xd2d0, 0xd2d0, 0xd2d0, 0xd2d0, 0xd2cf, 0xd2cf, 0xd2cf, 0xd2cf, 
+    0xd2cf, 0xd2ce, 0xd2ce, 0xd2ce, 0xd2ce, 0xd2cd, 0xd2cd, 0xd2cd, 
+    0xd2cd, 0xd2cd, 0xd2cc, 0xd2cc, 0xd2cc, 0xd2cc, 0xd2cb, 0xd2cb, 
+    0xd2cb, 0xd2cb, 0xd2cb, 0xd2ca, 0xd2ca, 0xd2ca, 0xd2ca, 0xd2ca, 
+    0xd2c9, 0xd2c9, 0xd2c9, 0xd2c9, 0xd2c8, 0xd2c8, 0xd2c8, 0xd2c8, 
+    0xd2c8, 0xd2c7, 0xd2c7, 0xd2c7, 0xd2c7, 0xd2c6, 0xd2c6, 0xd2c6, 
+    0xd2c6, 0xd2c6, 0xd2c5, 0xd2c5, 0xd2c5, 0xd2c5, 0xd2c5, 0xd2c4, 
+    0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c3, 0xd2c3, 0xd2c3, 0xd2c3, 
+    0xd2c2, 0xd2c2, 0xd2c2, 0xd2c2, 0xd2c2, 0xd2c1, 0xd2c1, 0xd2c1, 
+    0xd2c1, 0xd2c1, 0xd2c0, 0xd2c0, 0xd2c0, 0xd2c0, 0xd2c0, 0xd2bf, 
+    0xd2bf, 0xd2bf, 0xd2bf, 0xd2be, 0xd2be, 0xd2be, 0xd2be, 0xd2be, 
+    0xd2bd, 0xd2bd, 0xd2bd, 0xd2bd, 0xd2bd, 0xd2bc, 0xd2bc, 0xd2bc, 
+    0xd2bc, 0xd2bc, 0xd2bb, 0xd2bb, 0xd2bb, 0xd2bb, 0xd2bb, 0xd2ba, 
+    0xd2ba, 0xd2ba, 0xd2ba, 0xd2ba, 0xd2b9, 0xd2b9, 0xd2b9, 0xd2b9, 
+    0xd2b9, 0xd2b8, 0xd2b8, 0xd2b8, 0xd2b8, 0xd2b8, 0xd2b7, 0xd2b7, 
+    0xd2b7, 0xd2b7, 0xd2b7, 0xd2b6, 0xd2b6, 0xd2b6, 0xd2b6, 0xd2b6, 
+    0xd2b5, 0xd2b5, 0xd2b5, 0xd2b5, 0xd2b5, 0xd2b4, 0xd2b4, 0xd2b4, 
+    0xd2b4, 0xd2b4, 0xd2b3, 0xd2b3, 0xd2b3, 0xd2b3, 0xd2b3, 0xd2b2, 
+    0xd2b2, 0xd2b2, 0xd2b2, 0xd2b2, 0xd2b1, 0xd2b1, 0xd2b1, 0xd2b1, 
+    0xd2b1, 0xd2b0, 0xd2b0, 0xd2b0, 0xd2b0, 0xd2b0, 0xd2af, 0xd2af, 
+    0xd2af, 0xd2af, 0xd2af, 0xd2ae, 0xd2ae, 0xd2ae, 0xd2ae, 0xd2ae, 
+    0xd2ad, 0xd2ad, 0xd2ad, 0xd2ad, 0xd2ad, 0xd2ac, 0xd2ac, 0xd2ac, 
+    0xd2ac, 0xd2ac, 0xd2ac, 0xd2ab, 0xd2ab, 0xd2ab, 0xd2ab, 0xd2ab, 
+    0xd2aa, 0xd2aa, 0xd2aa, 0xd2aa, 0xd2aa, 0xd2a9, 0xd2a9, 0xd2a9, 
+    0xd2a9, 0xd2a9, 0xd2a8, 0xd2a8, 0xd2a8, 0xd2a8, 0xd2a8, 0xd2a8, 
+    0xd2a7, 0xd2a7, 0xd2a7, 0xd2a7, 0xd2a7, 0xd2a6, 0xd2a6, 0xd2a6, 
+    0xd2a6, 0xd2a6, 0xd2a5, 0xd2a5, 0xd2a5, 0xd2a5, 0xd2a5, 0xd2a4, 
+    0xd2a4, 0xd2a4, 0xd2a4, 0xd2a4, 0xd2a4, 0xd2a3, 0xd2a3, 0xd2a3, 
+    0xd2a3, 0xd2a3, 0xd2a2, 0xd2a2, 0xd2a2, 0xd2a2, 0xd2a2, 0xd2a2, 
+    0xd2a1, 0xd2a1, 0xd2a1, 0xd2a1, 0xd2a1, 0xd2a0, 0xd2a0, 0xd2a0, 
+    0xd2a0, 0xd2a0, 0xd29f, 0xd29f, 0xd29f, 0xd29f, 0xd29f, 0xd29f, 
+    0xd29e, 0xd29e, 0xd29e, 0xd29e, 0xd29e, 0xd29d, 0xd29d, 0xd29d, 
+    0xd29d, 0xd29d, 0xd29d, 0xd29c, 0xd29c, 0xd29c, 0xd29c, 0xd29c, 
+    0xd29b, 0xd29b, 0xd29b, 0xd29b, 0xd29b, 0xd29b, 0xd29a, 0xd29a, 
+    0xd29a, 0xd29a, 0xd29a, 0xd29a, 0xd299, 0xd299, 0xd299, 0xd299, 
+    0xd299, 0xd298, 0xd298, 0xd298, 0xd298, 0xd298, 0xd298, 0xd297, 
+    0xd297, 0xd297, 0xd297, 0xd297, 0xd296, 0xd296, 0xd296, 0xd296, 
+    0xd296, 0xd296, 0xd295, 0xd295, 0xd295, 0xd295, 0xd295, 0xd295, 
+    0xd294, 0xd294, 0xd294, 0xd294, 0xd294, 0xd293, 0xd293, 0xd293, 
+    0xd293, 0xd293, 0xd293, 0xd292, 0xd292, 0xd292, 0xd292, 0xd292, 
+    0xd292, 0xd291, 0xd291, 0xd291, 0xd291, 0xd291, 0xd291, 0xd290, 
+    0xd290, 0xd290, 0xd290, 0xd290, 0xd28f, 0xd28f, 0xd28f, 0xd28f, 
+    0xd28f, 0xd28f, 0xd28e, 0xd28e, 0xd28e, 0xd28e, 0xd28e, 0xd28e, 
+    0xd28d, 0xd28d, 0xd28d, 0xd28d, 0xd28d, 0xd28d, 0xd28c, 0xd28c, 
+    0xd28c, 0xd28c, 0xd28c, 0xd28c, 0xd28b, 0xd28b, 0xd28b, 0xd28b, 
+    0xd28b, 0xd28b, 0xd28a, 0xd28a, 0xd28a, 0xd28a, 0xd28a, 0xd28a, 
+    0xd289, 0xd289, 0xd289, 0xd289, 0xd289, 0xd288, 0xd288, 0xd288, 
+    0xd288, 0xd288, 0xd288, 0xd287, 0xd287, 0xd287, 0xd287, 0xd287, 
+    0xd287, 0xd286, 0xd286, 0xd286, 0xd286, 0xd286, 0xd286, 0xd285, 
+    0xd285, 0xd285, 0xd285, 0xd285, 0xd285, 0xd285, 0xd284, 0xd284, 
+    0xd284, 0xd284, 0xd284, 0xd284, 0xd283, 0xd283, 0xd283, 0xd283, 
+    0xd283, 0xd283, 0xd282, 0xd282, 0xd282, 0xd282, 0xd282, 0xd282, 
+    0xd281, 0xd281, 0xd281, 0xd281, 0xd281, 0xd281, 0xd280, 0xd280, 
+    0xd280, 0xd280, 0xd280, 0xd280, 0xd27f, 0xd27f, 0xd27f, 0xd27f, 
+    0xd27f, 0xd27f, 0xd27e, 0xd27e, 0xd27e, 0xd27e, 0xd27e, 0xd27e, 
+    0xd27d, 0xd27d, 0xd27d, 0xd27d, 0xd27d, 0xd27d, 0xd27d, 0xd27c, 
+    0xd27c, 0xd27c, 0xd27c, 0xd27c, 0xd27c, 0xd27b, 0xd27b, 0xd27b, 
+    0xd27b, 0xd27b, 0xd27b, 0xd27a, 0xd27a, 0xd27a, 0xd27a, 0xd27a, 
+    0xd27a, 0xd27a, 0xd279, 0xd279, 0xd279, 0xd279, 0xd279, 0xd279, 
+    0xd278, 0xd278, 0xd278, 0xd278, 0xd278, 0xd278, 0xd277, 0xd277, 
+    0xd277, 0xd277, 0xd277, 0xd277, 0xd277, 0xd276, 0xd276, 0xd276, 
+    0xd276, 0xd276, 0xd276, 0xd275, 0xd275, 0xd275, 0xd275, 0xd275, 
+    0xd275, 0xd274, 0xd274, 0xd274, 0xd274, 0xd274, 0xd274, 0xd274, 
+    0xd273, 0xd273, 0xd273, 0xd273, 0xd273, 0xd273, 0xd272, 0xd272, 
+    0xd272, 0xd272, 0xd272, 0xd272, 0xd272, 0xd271, 0xd271, 0xd271, 
+    0xd271, 0xd271, 0xd271, 0xd270, 0xd270, 0xd270, 0xd270, 0xd270, 
+    0xd270, 0xd270, 0xd26f, 0xd26f, 0xd26f, 0xd26f, 0xd26f, 0xd26f, 
+    0xd26f, 0xd26e, 0xd26e, 0xd26e, 0xd26e, 0xd26e, 0xd26e, 0xd26d, 
+    0xd26d, 0xd26d, 0xd26d, 0xd26d, 0xd26d, 0xd26d, 0xd26c, 0xd26c, 
+    0xd26c, 0xd26c, 0xd26c, 0xd26c, 0xd26b, 0xd26b, 0xd26b, 0xd26b, 
+    0xd26b, 0xd26b, 0xd26b, 0xd26a, 0xd26a, 0xd26a, 0xd26a, 0xd26a, 
+    0xd26a, 0xd26a, 0xd269, 0xd269, 0xd269, 0xd269, 0xd269, 0xd269, 
+    0xd269, 0xd268, 0xd268, 0xd268, 0xd268, 0xd268, 0xd268, 0xd267, 
+    0xd267, 0xd267, 0xd267, 0xd267, 0xd267, 0xd267, 0xd266, 0xd266, 
+    0xd266, 0xd266, 0xd266, 0xd266, 0xd266, 0xd265, 0xd265, 0xd265, 
+    0xd265, 0xd265, 0xd265, 0xd265, 0xd264, 0xd264, 0xd264, 0xd264, 
+    0xd264, 0xd264, 0xd264, 0xd263, 0xd263, 0xd263, 0xd263, 0xd263, 
+    0xd263, 0xd263, 0xd262, 0xd262, 0xd262, 0xd262, 0xd262, 0xd262, 
+    0xd261, 0xd261, 0xd261, 0xd261, 0xd261, 0xd261, 0xd261, 0xd260, 
+    0xd260, 0xd260, 0xd260, 0xd260, 0xd260, 0xd260, 0xd25f, 0xd25f, 
+    0xd25f, 0xd25f, 0xd25f, 0xd25f, 0xd25f, 0xd25e, 0xd25e, 0xd25e, 
+    0xd25e, 0xd25e, 0xd25e, 0xd25e, 0xd25d, 0xd25d, 0xd25d, 0xd25d, 
+    0xd25d, 0xd25d, 0xd25d, 0xd25c, 0xd25c, 0xd25c, 0xd25c, 0xd25c, 
+    0xd25c, 0xd25c, 0xd25c, 0xd25b, 0xd25b, 0xd25b, 0xd25b, 0xd25b, 
+    0xd25b, 0xd25b, 0xd25a, 0xd25a, 0xd25a, 0xd25a, 0xd25a, 0xd25a, 
+    0xd25a, 0xd259, 0xd259, 0xd259, 0xd259, 0xd259, 0xd259, 0xd259, 
+    0xd258, 0xd258, 0xd258, 0xd258, 0xd258, 0xd258, 0xd258, 0xd257, 
+    0xd257, 0xd257, 0xd257, 0xd257, 0xd257, 0xd257, 0xd256, 0xd256, 
+    0xd256, 0xd256, 0xd256, 0xd256, 0xd256, 0xd256, 0xd255, 0xd255, 
+    0xd255, 0xd255, 0xd255, 0xd255, 0xd255, 0xd254, 0xd254, 0xd254, 
+    0xd254, 0xd254, 0xd254, 0xd254, 0xd253, 0xd253, 0xd253, 0xd253, 
+    0xd253, 0xd253, 0xd253, 0xd253, 0xd252, 0xd252, 0xd252, 0xd252, 
+    0xd252, 0xd252, 0xd252, 0xd251, 0xd251, 0xd251, 0xd251, 0xd251, 
+    0xd251, 0xd251, 0xd250, 0xd250, 0xd250, 0xd250, 0xd250, 0xd250, 
+    0xd250, 0xd250, 0xd24f, 0xd24f, 0xd24f, 0xd24f, 0xd24f, 0xd24f, 
+    0xd24f, 0xd24e, 0xd24e, 0xd24e, 0xd24e, 0xd24e, 0xd24e, 0xd24e, 
+    0xd24e, 0xd24d, 0xd24d, 0xd24d, 0xd24d, 0xd24d, 0xd24d, 0xd24d, 
+    0xd24c, 0xd24c, 0xd24c, 0xd24c, 0xd24c, 0xd24c, 0xd24c, 0xd24c, 
+    0xd24b, 0xd24b, 0xd24b, 0xd24b, 0xd24b, 0xd24b, 0xd24b, 0xd24a, 
+    0xd24a, 0xd24a, 0xd24a, 0xd24a, 0xd24a, 0xd24a, 0xd24a, 0xd249, 
+    0xd249, 0xd249, 0xd249, 0xd249, 0xd249, 0xd249, 0xd249, 0xd248, 
+    0xd248, 0xd248, 0xd248, 0xd248, 0xd248, 0xd248, 0xd247, 0xd247, 
+    0xd247, 0xd247, 0xd247, 0xd247, 0xd247, 0xd247, 0xd246, 0xd246, 
+    0xd246, 0xd246, 0xd246, 0xd246, 0xd246, 0xd246, 0xd245, 0xd245, 
+    0xd245, 0xd245, 0xd245, 0xd245, 0xd245, 0xd244, 0xd244, 0xd244, 
+    0xd244, 0xd244, 0xd244, 0xd244, 0xd244, 0xd243, 0xd243, 0xd243, 
+    0xd243, 0xd243, 0xd243, 0xd243, 0xd243, 0xd242, 0xd242, 0xd242, 
+    0xd242, 0xd242, 0xd242, 0xd242, 0xd242, 0xd241, 0xd241, 0xd241, 
+    0xd241, 0xd241, 0xd241, 0xd241, 0xd241, 0xd240, 0xd240, 0xd240, 
+    0xd240, 0xd240, 0xd240, 0xd240, 0xd240, 0xd23f, 0xd23f, 0xd23f, 
+    0xd23f, 0xd23f, 0xd23f, 0xd23f, 0xd23f, 0xd23e, 0xd23e, 0xd23e, 
+    0xd23e, 0xd23e, 0xd23e, 0xd23e, 0xd23e, 0xd23d, 0xd23d, 0xd23d, 
+    0xd23d, 0xd23d, 0xd23d, 0xd23c, 0xd23c, 0xd23c, 0xd23c, 0xd23b, 
+    0xd23b, 0xd23b, 0xd23b, 0xd23a, 0xd23a, 0xd23a, 0xd23a, 0xd239, 
+    0xd239, 0xd239, 0xd239, 0xd238, 0xd238, 0xd238, 0xd238, 0xd237, 
+    0xd237, 0xd237, 0xd237, 0xd236, 0xd236, 0xd236, 0xd236, 0xd235, 
+    0xd235, 0xd235, 0xd235, 0xd234, 0xd234, 0xd234, 0xd234, 0xd233, 
+    0xd233, 0xd233, 0xd233, 0xd232, 0xd232, 0xd232, 0xd232, 0xd232, 
+    0xd231, 0xd231, 0xd231, 0xd231, 0xd230, 0xd230, 0xd230, 0xd230, 
+    0xd22f, 0xd22f, 0xd22f, 0xd22f, 0xd22e, 0xd22e, 0xd22e, 0xd22e, 
+    0xd22d, 0xd22d, 0xd22d, 0xd22d, 0xd22d, 0xd22c, 0xd22c, 0xd22c, 
+    0xd22c, 0xd22b, 0xd22b, 0xd22b, 0xd22b, 0xd22a, 0xd22a, 0xd22a, 
+    0xd22a, 0xd22a, 0xd229, 0xd229, 0xd229, 0xd229, 0xd228, 0xd228, 
+    0xd228, 0xd228, 0xd227, 0xd227, 0xd227, 0xd227, 0xd227, 0xd226, 
+    0xd226, 0xd226, 0xd226, 0xd225, 0xd225, 0xd225, 0xd225, 0xd224, 
+    0xd224, 0xd224, 0xd224, 0xd224, 0xd223, 0xd223, 0xd223, 0xd223, 
+    0xd222, 0xd222, 0xd222, 0xd222, 0xd222, 0xd221, 0xd221, 0xd221, 
+    0xd221, 0xd220, 0xd220, 0xd220, 0xd220, 0xd220, 0xd21f, 0xd21f, 
+    0xd21f, 0xd21f, 0xd21e, 0xd21e, 0xd21e, 0xd21e, 0xd21e, 0xd21d, 
+    0xd21d, 0xd21d, 0xd21d, 0xd21c, 0xd21c, 0xd21c, 0xd21c, 0xd21c, 
+    0xd21b, 0xd21b, 0xd21b, 0xd21b, 0xd21a, 0xd21a, 0xd21a, 0xd21a, 
+    0xd21a, 0xd219, 0xd219, 0xd219, 0xd219, 0xd218, 0xd218, 0xd218, 
+    0xd218, 0xd218, 0xd217, 0xd217, 0xd217, 0xd217, 0xd217, 0xd216, 
+    0xd216, 0xd216, 0xd216, 0xd215, 0xd215, 0xd215, 0xd215, 0xd215, 
+    0xd214, 0xd214, 0xd214, 0xd214, 0xd214, 0xd213, 0xd213, 0xd213, 
+    0xd213, 0xd212, 0xd212, 0xd212, 0xd212, 0xd212, 0xd211, 0xd211, 
+    0xd211, 0xd211, 0xd211, 0xd210, 0xd210, 0xd210, 0xd210, 0xd210, 
+    0xd20f, 0xd20f, 0xd20f, 0xd20f, 0xd20f, 0xd20e, 0xd20e, 0xd20e, 
+    0xd20e, 0xd20d, 0xd20d, 0xd20d, 0xd20d, 0xd20d, 0xd20c, 0xd20c, 
+    0xd20c, 0xd20c, 0xd20c, 0xd20b, 0xd20b, 0xd20b, 0xd20b, 0xd20b, 
+    0xd20a, 0xd20a, 0xd20a, 0xd20a, 0xd20a, 0xd209, 0xd209, 0xd209, 
+    0xd209, 0xd209, 0xd208, 0xd208, 0xd208, 0xd208, 0xd208, 0xd207, 
+    0xd207, 0xd207, 0xd207, 0xd206, 0xd206, 0xd206, 0xd206, 0xd206, 
+    0xd205, 0xd205, 0xd205, 0xd205, 0xd205, 0xd204, 0xd204, 0xd204, 
+    0xd204, 0xd204, 0xd203, 0xd203, 0xd203, 0xd203, 0xd203, 0xd202, 
+    0xd202, 0xd202, 0xd202, 0xd202, 0xd201, 0xd201, 0xd201, 0xd201, 
+    0xd201, 0xd201, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd1ff, 
+    0xd1ff, 0xd1ff, 0xd1ff, 0xd1ff, 0xd1fe, 0xd1fe, 0xd1fe, 0xd1fe, 
+    0xd1fe, 0xd1fd, 0xd1fd, 0xd1fd, 0xd1fd, 0xd1fd, 0xd1fc, 0xd1fc, 
+    0xd1fc, 0xd1fc, 0xd1fc, 0xd1fb, 0xd1fb, 0xd1fb, 0xd1fb, 0xd1fb, 
+    0xd1fa, 0xd1fa, 0xd1fa, 0xd1fa, 0xd1fa, 0xd1f9, 0xd1f9, 0xd1f9, 
+    0xd1f9, 0xd1f9, 0xd1f9, 0xd1f8, 0xd1f8, 0xd1f8, 0xd1f8, 0xd1f8, 
+    0xd1f7, 0xd1f7, 0xd1f7, 0xd1f7, 0xd1f7, 0xd1f6, 0xd1f6, 0xd1f6, 
+    0xd1f6, 0xd1f6, 0xd1f5, 0xd1f5, 0xd1f5, 0xd1f5, 0xd1f5, 0xd1f5, 
+    0xd1f4, 0xd1f4, 0xd1f4, 0xd1f4, 0xd1f4, 0xd1f3, 0xd1f3, 0xd1f3, 
+    0xd1f3, 0xd1f3, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2, 
+    0xd1f1, 0xd1f1, 0xd1f1, 0xd1f1, 0xd1f1, 0xd1f0, 0xd1f0, 0xd1f0, 
+    0xd1f0, 0xd1f0, 0xd1f0, 0xd1ef, 0xd1ef, 0xd1ef, 0xd1ef, 0xd1ef, 
+    0xd1ee, 0xd1ee, 0xd1ee, 0xd1ee, 0xd1ee, 0xd1ed, 0xd1ed, 0xd1ed, 
+    0xd1ed, 0xd1ed, 0xd1ed, 0xd1ec, 0xd1ec, 0xd1ec, 0xd1ec, 0xd1ec, 
+    0xd1eb, 0xd1eb, 0xd1eb, 0xd1eb, 0xd1eb, 0xd1eb, 0xd1ea, 0xd1ea, 
+    0xd1ea, 0xd1ea, 0xd1ea, 0xd1e9, 0xd1e9, 0xd1e9, 0xd1e9, 0xd1e9, 
+    0xd1e9, 0xd1e8, 0xd1e8, 0xd1e8, 0xd1e8, 0xd1e8, 0xd1e8, 0xd1e7, 
+    0xd1e7, 0xd1e7, 0xd1e7, 0xd1e7, 0xd1e6, 0xd1e6, 0xd1e6, 0xd1e6, 
+    0xd1e6, 0xd1e6, 0xd1e5, 0xd1e5, 0xd1e5, 0xd1e5, 0xd1e5, 0xd1e4, 
+    0xd1e4, 0xd1e4, 0xd1e4, 0xd1e4, 0xd1e4, 0xd1e3, 0xd1e3, 0xd1e3, 
+    0xd1e3, 0xd1e3, 0xd1e3, 0xd1e2, 0xd1e2, 0xd1e2, 0xd1e2, 0xd1e2, 
+    0xd1e2, 0xd1e1, 0xd1e1, 0xd1e1, 0xd1e1, 0xd1e1, 0xd1e0, 0xd1e0, 
+    0xd1e0, 0xd1e0, 0xd1e0, 0xd1e0, 0xd1df, 0xd1df, 0xd1df, 0xd1df, 
+    0xd1df, 0xd1df, 0xd1de, 0xd1de, 0xd1de, 0xd1de, 0xd1de, 0xd1de, 
+    0xd1dd, 0xd1dd, 0xd1dd, 0xd1dd, 0xd1dd, 0xd1dc, 0xd1dc, 0xd1dc, 
+    0xd1dc, 0xd1dc, 0xd1dc, 0xd1db, 0xd1db, 0xd1db, 0xd1db, 0xd1db, 
+    0xd1db, 0xd1da, 0xd1da, 0xd1da, 0xd1da, 0xd1da, 0xd1da, 0xd1d9, 
+    0xd1d9, 0xd1d9, 0xd1d9, 0xd1d9, 0xd1d9, 0xd1d8, 0xd1d8, 0xd1d8, 
+    0xd1d8, 0xd1d8, 0xd1d8, 0xd1d7, 0xd1d7, 0xd1d7, 0xd1d7, 0xd1d7, 
+    0xd1d7, 0xd1d6, 0xd1d6, 0xd1d6, 0xd1d6, 0xd1d6, 0xd1d6, 0xd1d5, 
+    0xd1d5, 0xd1d5, 0xd1d5, 0xd1d5, 0xd1d5, 0xd1d4, 0xd1d4, 0xd1d4, 
+    0xd1d4, 0xd1d4, 0xd1d4, 0xd1d3, 0xd1d3, 0xd1d3, 0xd1d3, 0xd1d3, 
+    0xd1d3, 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d1, 
+    0xd1d1, 0xd1d1, 0xd1d1, 0xd1d1, 0xd1d1, 0xd1d0, 0xd1d0, 0xd1d0, 
+    0xd1d0, 0xd1d0, 0xd1d0, 0xd1cf, 0xd1cf, 0xd1cf, 0xd1cf, 0xd1cf, 
+    0xd1cf, 0xd1ce, 0xd1ce, 0xd1ce, 0xd1ce, 0xd1ce, 0xd1ce, 0xd1cd, 
+    0xd1cd, 0xd1cd, 0xd1cd, 0xd1cd, 0xd1cd, 0xd1cd, 0xd1cc, 0xd1cc, 
+    0xd1cc, 0xd1cc, 0xd1cc, 0xd1cc, 0xd1cb, 0xd1cb, 0xd1cb, 0xd1cb, 
+    0xd1cb, 0xd1cb, 0xd1ca, 0xd1ca, 0xd1ca, 0xd1ca, 0xd1ca, 0xd1ca, 
+    0xd1c9, 0xd1c9, 0xd1c9, 0xd1c9, 0xd1c9, 0xd1c9, 0xd1c9, 0xd1c8, 
+    0xd1c8, 0xd1c8, 0xd1c8, 0xd1c8, 0xd1c8, 0xd1c7, 0xd1c7, 0xd1c7, 
+    0xd1c7, 0xd1c7, 0xd1c7, 0xd1c6, 0xd1c6, 0xd1c6, 0xd1c6, 0xd1c6, 
+    0xd1c6, 0xd1c6, 0xd1c5, 0xd1c5, 0xd1c5, 0xd1c5, 0xd1c5, 0xd1c5, 
+    0xd1c4, 0xd1c4, 0xd1c4, 0xd1c4, 0xd1c4, 0xd1c4, 0xd1c4, 0xd1c3, 
+    0xd1c3, 0xd1c3, 0xd1c3, 0xd1c3, 0xd1c3, 0xd1c2, 0xd1c2, 0xd1c2, 
+    0xd1c2, 0xd1c2, 0xd1c2, 0xd1c1, 0xd1c1, 0xd1c1, 0xd1c1, 0xd1c1, 
+    0xd1c1, 0xd1c1, 0xd1c0, 0xd1c0, 0xd1c0, 0xd1c0, 0xd1c0, 0xd1c0, 
+    0xd1bf, 0xd1bf, 0xd1bf, 0xd1bf, 0xd1bf, 0xd1bf, 0xd1bf, 0xd1be, 
+    0xd1be, 0xd1be, 0xd1be, 0xd1be, 0xd1be, 0xd1be, 0xd1bd, 0xd1bd, 
+    0xd1bd, 0xd1bd, 0xd1bd, 0xd1bd, 0xd1bc, 0xd1bc, 0xd1bc, 0xd1bc, 
+    0xd1bc, 0xd1bc, 0xd1bc, 0xd1bb, 0xd1bb, 0xd1bb, 0xd1bb, 0xd1bb, 
+    0xd1bb, 0xd1ba, 0xd1ba, 0xd1ba, 0xd1ba, 0xd1ba, 0xd1ba, 0xd1ba, 
+    0xd1b9, 0xd1b9, 0xd1b9, 0xd1b9, 0xd1b9, 0xd1b9, 0xd1b9, 0xd1b8, 
+    0xd1b8, 0xd1b8, 0xd1b8, 0xd1b8, 0xd1b8, 0xd1b8, 0xd1b7, 0xd1b7, 
+    0xd1b7, 0xd1b7, 0xd1b7, 0xd1b7, 0xd1b6, 0xd1b6, 0xd1b6, 0xd1b6, 
+    0xd1b6, 0xd1b6, 0xd1b6, 0xd1b5, 0xd1b5, 0xd1b5, 0xd1b5, 0xd1b5, 
+    0xd1b5, 0xd1b5, 0xd1b4, 0xd1b4, 0xd1b4, 0xd1b4, 0xd1b4, 0xd1b4, 
+    0xd1b4, 0xd1b3, 0xd1b3, 0xd1b3, 0xd1b3, 0xd1b3, 0xd1b3, 0xd1b3, 
+    0xd1b2, 0xd1b2, 0xd1b2, 0xd1b2, 0xd1b2, 0xd1b2, 0xd1b1, 0xd1b1, 
+    0xd1b1, 0xd1b1, 0xd1b1, 0xd1b1, 0xd1b1, 0xd1b0, 0xd1b0, 0xd1b0, 
+    0xd1b0, 0xd1b0, 0xd1b0, 0xd1b0, 0xd1af, 0xd1af, 0xd1af, 0xd1af, 
+    0xd1af, 0xd1af, 0xd1af, 0xd1ae, 0xd1ae, 0xd1ae, 0xd1ae, 0xd1ae, 
+    0xd1ae, 0xd1ae, 0xd1ad, 0xd1ad, 0xd1ad, 0xd1ad, 0xd1ad, 0xd1ad, 
+    0xd1ad, 0xd1ac, 0xd1ac, 0xd1ac, 0xd1ac, 0xd1ac, 0xd1ac, 0xd1ac, 
+    0xd1ab, 0xd1ab, 0xd1ab, 0xd1ab, 0xd1ab, 0xd1ab, 0xd1ab, 0xd1aa, 
+    0xd1aa, 0xd1aa, 0xd1aa, 0xd1aa, 0xd1aa, 0xd1aa, 0xd1a9, 0xd1a9, 
+    0xd1a9, 0xd1a9, 0xd1a9, 0xd1a9, 0xd1a9, 0xd1a9, 0xd1a8, 0xd1a8, 
+    0xd1a8, 0xd1a8, 0xd1a8, 0xd1a8, 0xd1a8, 0xd1a7, 0xd1a7, 0xd1a7, 
+    0xd1a7, 0xd1a7, 0xd1a7, 0xd1a7, 0xd1a6, 0xd1a6, 0xd1a6, 0xd1a6, 
+    0xd1a6, 0xd1a6, 0xd1a6, 0xd1a5, 0xd1a5, 0xd1a5, 0xd1a5, 0xd1a5, 
+    0xd1a5, 0xd1a5, 0xd1a4, 0xd1a4, 0xd1a4, 0xd1a4, 0xd1a4, 0xd1a4, 
+    0xd1a4, 0xd1a4, 0xd1a3, 0xd1a3, 0xd1a3, 0xd1a3, 0xd1a3, 0xd1a3, 
+    0xd1a3, 0xd1a2, 0xd1a2, 0xd1a2, 0xd1a2, 0xd1a2, 0xd1a2, 0xd1a2, 
+    0xd1a1, 0xd1a1, 0xd1a1, 0xd1a1, 0xd1a1, 0xd1a1, 0xd1a1, 0xd1a1, 
+    0xd1a0, 0xd1a0, 0xd1a0, 0xd1a0, 0xd1a0, 0xd1a0, 0xd1a0, 0xd19f, 
+    0xd19f, 0xd19f, 0xd19f, 0xd19f, 0xd19f, 0xd19f, 0xd19e, 0xd19e, 
+    0xd19e, 0xd19e, 0xd19e, 0xd19e, 0xd19e, 0xd19e, 0xd19d, 0xd19d, 
+    0xd19d, 0xd19d, 0xd19d, 0xd19d, 0xd19d, 0xd19c, 0xd19c, 0xd19c, 
+    0xd19c, 0xd19c, 0xd19c, 0xd19c, 0xd19c, 0xd19b, 0xd19b, 0xd19b, 
+    0xd19b, 0xd19b, 0xd19b, 0xd19b, 0xd19a, 0xd19a, 0xd19a, 0xd19a, 
+    0xd19a, 0xd19a, 0xd19a, 0xd19a, 0xd199, 0xd199, 0xd199, 0xd199, 
+    0xd199, 0xd199, 0xd199, 0xd199, 0xd198, 0xd198, 0xd198, 0xd198, 
+    0xd198, 0xd198, 0xd198, 0xd197, 0xd197, 0xd197, 0xd197, 0xd197, 
+    0xd197, 0xd197, 0xd197, 0xd196, 0xd196, 0xd196, 0xd196, 0xd196, 
+    0xd196, 0xd196, 0xd196, 0xd195, 0xd195, 0xd195, 0xd195, 0xd195, 
+    0xd195, 0xd195, 0xd194, 0xd194, 0xd194, 0xd194, 0xd194, 0xd194, 
+    0xd194, 0xd194, 0xd193, 0xd193, 0xd193, 0xd193, 0xd193, 0xd193, 
+    0xd193, 0xd193, 0xd192, 0xd192, 0xd192, 0xd192, 0xd192, 0xd192, 
+    0xd192, 0xd192, 0xd191, 0xd191, 0xd191, 0xd191, 0xd191, 0xd191, 
+    0xd191, 0xd190, 0xd190, 0xd190, 0xd190, 0xd190, 0xd190, 0xd190, 
+    0xd190, 0xd18f, 0xd18f, 0xd18f, 0xd18f, 0xd18f, 0xd18f, 0xd18f, 
+    0xd18f, 0xd18e, 0xd18e, 0xd18e, 0xd18e, 0xd18e, 0xd18e, 0xd18e, 
+    0xd18e, 0xd18d, 0xd18d, 0xd18d, 0xd18d, 0xd18d, 0xd18d, 0xd18d, 
+    0xd18d, 0xd18c, 0xd18c, 0xd18c, 0xd18c, 0xd18c, 0xd18c, 0xd18c, 
+    0xd18c, 0xd18b, 0xd18b, 0xd18b, 0xd18b, 0xd18a, 0xd18a, 0xd18a, 
+    0xd18a, 0xd189, 0xd189, 0xd189, 0xd189, 0xd188, 0xd188, 0xd188, 
+    0xd188, 0xd187, 0xd187, 0xd187, 0xd187, 0xd186, 0xd186, 0xd186, 
+    0xd186, 0xd185, 0xd185, 0xd185, 0xd185, 0xd184, 0xd184, 0xd184, 
+    0xd184, 0xd183, 0xd183, 0xd183, 0xd183, 0xd182, 0xd182, 0xd182, 
+    0xd182, 0xd182, 0xd181, 0xd181, 0xd181, 0xd181, 0xd180, 0xd180, 
+    0xd180, 0xd180, 0xd17f, 0xd17f, 0xd17f, 0xd17f, 0xd17e, 0xd17e, 
+    0xd17e, 0xd17e, 0xd17d, 0xd17d, 0xd17d, 0xd17d, 0xd17d, 0xd17c, 
+    0xd17c, 0xd17c, 0xd17c, 0xd17b, 0xd17b, 0xd17b, 0xd17b, 0xd17a, 
+    0xd17a, 0xd17a, 0xd17a, 0xd179, 0xd179, 0xd179, 0xd179, 0xd179, 
+    0xd178, 0xd178, 0xd178, 0xd178, 0xd177, 0xd177, 0xd177, 0xd177, 
+    0xd176, 0xd176, 0xd176, 0xd176, 0xd176, 0xd175, 0xd175, 0xd175, 
+    0xd175, 0xd174, 0xd174, 0xd174, 0xd174, 0xd173, 0xd173, 0xd173, 
+    0xd173, 0xd173, 0xd172, 0xd172, 0xd172, 0xd172, 0xd171, 0xd171, 
+    0xd171, 0xd171, 0xd171, 0xd170, 0xd170, 0xd170, 0xd170, 0xd16f, 
+    0xd16f, 0xd16f, 0xd16f, 0xd16f, 0xd16e, 0xd16e, 0xd16e, 0xd16e, 
+    0xd16d, 0xd16d, 0xd16d, 0xd16d, 0xd16d, 0xd16c, 0xd16c, 0xd16c, 
+    0xd16c, 0xd16b, 0xd16b, 0xd16b, 0xd16b, 0xd16b, 0xd16a, 0xd16a, 
+    0xd16a, 0xd16a, 0xd169, 0xd169, 0xd169, 0xd169, 0xd169, 0xd168, 
+    0xd168, 0xd168, 0xd168, 0xd167, 0xd167, 0xd167, 0xd167, 0xd167, 
+    0xd166, 0xd166, 0xd166, 0xd166, 0xd166, 0xd165, 0xd165, 0xd165, 
+    0xd165, 0xd164, 0xd164, 0xd164, 0xd164, 0xd164, 0xd163, 0xd163, 
+    0xd163, 0xd163, 0xd163, 0xd162, 0xd162, 0xd162, 0xd162, 0xd161, 
+    0xd161, 0xd161, 0xd161, 0xd161, 0xd160, 0xd160, 0xd160, 0xd160, 
+    0xd160, 0xd15f, 0xd15f, 0xd15f, 0xd15f, 0xd15f, 0xd15e, 0xd15e, 
+    0xd15e, 0xd15e, 0xd15d, 0xd15d, 0xd15d, 0xd15d, 0xd15d, 0xd15c, 
+    0xd15c, 0xd15c, 0xd15c, 0xd15c, 0xd15b, 0xd15b, 0xd15b, 0xd15b, 
+    0xd15b, 0xd15a, 0xd15a, 0xd15a, 0xd15a, 0xd15a, 0xd159, 0xd159, 
+    0xd159, 0xd159, 0xd159, 0xd158, 0xd158, 0xd158, 0xd158, 0xd157, 
+    0xd157, 0xd157, 0xd157, 0xd157, 0xd156, 0xd156, 0xd156, 0xd156, 
+    0xd156, 0xd155, 0xd155, 0xd155, 0xd155, 0xd155, 0xd154, 0xd154, 
+    0xd154, 0xd154, 0xd154, 0xd153, 0xd153, 0xd153, 0xd153, 0xd153, 
+    0xd152, 0xd152, 0xd152, 0xd152, 0xd152, 0xd151, 0xd151, 0xd151, 
+    0xd151, 0xd151, 0xd150, 0xd150, 0xd150, 0xd150, 0xd150, 0xd14f, 
+    0xd14f, 0xd14f, 0xd14f, 0xd14f, 0xd14e, 0xd14e, 0xd14e, 0xd14e, 
+    0xd14e, 0xd14d, 0xd14d, 0xd14d, 0xd14d, 0xd14d, 0xd14d, 0xd14c, 
+    0xd14c, 0xd14c, 0xd14c, 0xd14c, 0xd14b, 0xd14b, 0xd14b, 0xd14b, 
+    0xd14b, 0xd14a, 0xd14a, 0xd14a, 0xd14a, 0xd14a, 0xd149, 0xd149, 
+    0xd149, 0xd149, 0xd149, 0xd148, 0xd148, 0xd148, 0xd148, 0xd148, 
+    0xd147, 0xd147, 0xd147, 0xd147, 0xd147, 0xd147, 0xd146, 0xd146, 
+    0xd146, 0xd146, 0xd146, 0xd145, 0xd145, 0xd145, 0xd145, 0xd145, 
+    0xd144, 0xd144, 0xd144, 0xd144, 0xd144, 0xd143, 0xd143, 0xd143, 
+    0xd143, 0xd143, 0xd143, 0xd142, 0xd142, 0xd142, 0xd142, 0xd142, 
+    0xd141, 0xd141, 0xd141, 0xd141, 0xd141, 0xd140, 0xd140, 0xd140, 
+    0xd140, 0xd140, 0xd140, 0xd13f, 0xd13f, 0xd13f, 0xd13f, 0xd13f, 
+    0xd13e, 0xd13e, 0xd13e, 0xd13e, 0xd13e, 0xd13e, 0xd13d, 0xd13d, 
+    0xd13d, 0xd13d, 0xd13d, 0xd13c, 0xd13c, 0xd13c, 0xd13c, 0xd13c, 
+    0xd13c, 0xd13b, 0xd13b, 0xd13b, 0xd13b, 0xd13b, 0xd13a, 0xd13a, 
+    0xd13a, 0xd13a, 0xd13a, 0xd139, 0xd139, 0xd139, 0xd139, 0xd139, 
+    0xd139, 0xd138, 0xd138, 0xd138, 0xd138, 0xd138, 0xd138, 0xd137, 
+    0xd137, 0xd137, 0xd137, 0xd137, 0xd136, 0xd136, 0xd136, 0xd136, 
+    0xd136, 0xd136, 0xd135, 0xd135, 0xd135, 0xd135, 0xd135, 0xd134, 
+    0xd134, 0xd134, 0xd134, 0xd134, 0xd134, 0xd133, 0xd133, 0xd133, 
+    0xd133, 0xd133, 0xd133, 0xd132, 0xd132, 0xd132, 0xd132, 0xd132, 
+    0xd131, 0xd131, 0xd131, 0xd131, 0xd131, 0xd131, 0xd130, 0xd130, 
+    0xd130, 0xd130, 0xd130, 0xd130, 0xd12f, 0xd12f, 0xd12f, 0xd12f, 
+    0xd12f, 0xd12e, 0xd12e, 0xd12e, 0xd12e, 0xd12e, 0xd12e, 0xd12d, 
+    0xd12d, 0xd12d, 0xd12d, 0xd12d, 0xd12d, 0xd12c, 0xd12c, 0xd12c, 
+    0xd12c, 0xd12c, 0xd12c, 0xd12b, 0xd12b, 0xd12b, 0xd12b, 0xd12b, 
+    0xd12b, 0xd12a, 0xd12a, 0xd12a, 0xd12a, 0xd12a, 0xd129, 0xd129, 
+    0xd129, 0xd129, 0xd129, 0xd129, 0xd128, 0xd128, 0xd128, 0xd128, 
+    0xd128, 0xd128, 0xd127, 0xd127, 0xd127, 0xd127, 0xd127, 0xd127, 
+    0xd126, 0xd126, 0xd126, 0xd126, 0xd126, 0xd126, 0xd125, 0xd125, 
+    0xd125, 0xd125, 0xd125, 0xd125, 0xd124, 0xd124, 0xd124, 0xd124, 
+    0xd124, 0xd124, 0xd123, 0xd123, 0xd123, 0xd123, 0xd123, 0xd123, 
+    0xd122, 0xd122, 0xd122, 0xd122, 0xd122, 0xd122, 0xd121, 0xd121, 
+    0xd121, 0xd121, 0xd121, 0xd121, 0xd120, 0xd120, 0xd120, 0xd120, 
+    0xd120, 0xd120, 0xd11f, 0xd11f, 0xd11f, 0xd11f, 0xd11f, 0xd11f, 
+    0xd11e, 0xd11e, 0xd11e, 0xd11e, 0xd11e, 0xd11e, 0xd11e, 0xd11d, 
+    0xd11d, 0xd11d, 0xd11d, 0xd11d, 0xd11d, 0xd11c, 0xd11c, 0xd11c, 
+    0xd11c, 0xd11c, 0xd11c, 0xd11b, 0xd11b, 0xd11b, 0xd11b, 0xd11b, 
+    0xd11b, 0xd11a, 0xd11a, 0xd11a, 0xd11a, 0xd11a, 0xd11a, 0xd119, 
+    0xd119, 0xd119, 0xd119, 0xd119, 0xd119, 0xd119, 0xd118, 0xd118, 
+    0xd118, 0xd118, 0xd118, 0xd118, 0xd117, 0xd117, 0xd117, 0xd117, 
+    0xd117, 0xd117, 0xd116, 0xd116, 0xd116, 0xd116, 0xd116, 0xd116, 
+    0xd116, 0xd115, 0xd115, 0xd115, 0xd115, 0xd115, 0xd115, 0xd114, 
+    0xd114, 0xd114, 0xd114, 0xd114, 0xd114, 0xd113, 0xd113, 0xd113, 
+    0xd113, 0xd113, 0xd113, 0xd113, 0xd112, 0xd112, 0xd112, 0xd112, 
+    0xd112, 0xd112, 0xd111, 0xd111, 0xd111, 0xd111, 0xd111, 0xd111, 
+    0xd111, 0xd110, 0xd110, 0xd110, 0xd110, 0xd110, 0xd110, 0xd10f, 
+    0xd10f, 0xd10f, 0xd10f, 0xd10f, 0xd10f, 0xd10f, 0xd10e, 0xd10e, 
+    0xd10e, 0xd10e, 0xd10e, 0xd10e, 0xd10d, 0xd10d, 0xd10d, 0xd10d, 
+    0xd10d, 0xd10d, 0xd10d, 0xd10c, 0xd10c, 0xd10c, 0xd10c, 0xd10c, 
+    0xd10c, 0xd10b, 0xd10b, 0xd10b, 0xd10b, 0xd10b, 0xd10b, 0xd10b, 
+    0xd10a, 0xd10a, 0xd10a, 0xd10a, 0xd10a, 0xd10a, 0xd109, 0xd109, 
+    0xd109, 0xd109, 0xd109, 0xd109, 0xd109, 0xd108, 0xd108, 0xd108, 
+    0xd108, 0xd108, 0xd108, 0xd108, 0xd107, 0xd107, 0xd107, 0xd107, 
+    0xd107, 0xd107, 0xd107, 0xd106, 0xd106, 0xd106, 0xd106, 0xd106, 
+    0xd106, 0xd105, 0xd105, 0xd105, 0xd105, 0xd105, 0xd105, 0xd105, 
+    0xd104, 0xd104, 0xd104, 0xd104, 0xd104, 0xd104, 0xd104, 0xd103, 
+    0xd103, 0xd103, 0xd103, 0xd103, 0xd103, 0xd103, 0xd102, 0xd102, 
+    0xd102, 0xd102, 0xd102, 0xd102, 0xd101, 0xd101, 0xd101, 0xd101, 
+    0xd101, 0xd101, 0xd101, 0xd100, 0xd100, 0xd100, 0xd100, 0xd100, 
+    0xd100, 0xd100, 0xd0ff, 0xd0ff, 0xd0ff, 0xd0ff, 0xd0ff, 0xd0ff, 
+    0xd0ff, 0xd0fe, 0xd0fe, 0xd0fe, 0xd0fe, 0xd0fe, 0xd0fe, 0xd0fe, 
+    0xd0fd, 0xd0fd, 0xd0fd, 0xd0fd, 0xd0fd, 0xd0fd, 0xd0fd, 0xd0fc, 
+    0xd0fc, 0xd0fc, 0xd0fc, 0xd0fc, 0xd0fc, 0xd0fc, 0xd0fb, 0xd0fb, 
+    0xd0fb, 0xd0fb, 0xd0fb, 0xd0fb, 0xd0fb, 0xd0fa, 0xd0fa, 0xd0fa, 
+    0xd0fa, 0xd0fa, 0xd0fa, 0xd0fa, 0xd0f9, 0xd0f9, 0xd0f9, 0xd0f9, 
+    0xd0f9, 0xd0f9, 0xd0f9, 0xd0f8, 0xd0f8, 0xd0f8, 0xd0f8, 0xd0f8, 
+    0xd0f8, 0xd0f8, 0xd0f7, 0xd0f7, 0xd0f7, 0xd0f7, 0xd0f7, 0xd0f7, 
+    0xd0f7, 0xd0f7, 0xd0f6, 0xd0f6, 0xd0f6, 0xd0f6, 0xd0f6, 0xd0f6, 
+    0xd0f6, 0xd0f5, 0xd0f5, 0xd0f5, 0xd0f5, 0xd0f5, 0xd0f5, 0xd0f5, 
+    0xd0f4, 0xd0f4, 0xd0f4, 0xd0f4, 0xd0f4, 0xd0f4, 0xd0f4, 0xd0f3, 
+    0xd0f3, 0xd0f3, 0xd0f3, 0xd0f3, 0xd0f3, 0xd0f3, 0xd0f2, 0xd0f2, 
+    0xd0f2, 0xd0f2, 0xd0f2, 0xd0f2, 0xd0f2, 0xd0f2, 0xd0f1, 0xd0f1, 
+    0xd0f1, 0xd0f1, 0xd0f1, 0xd0f1, 0xd0f1, 0xd0f0, 0xd0f0, 0xd0f0, 
+    0xd0f0, 0xd0f0, 0xd0f0, 0xd0f0, 0xd0ef, 0xd0ef, 0xd0ef, 0xd0ef, 
+    0xd0ef, 0xd0ef, 0xd0ef, 0xd0ef, 0xd0ee, 0xd0ee, 0xd0ee, 0xd0ee, 
+    0xd0ee, 0xd0ee, 0xd0ee, 0xd0ed, 0xd0ed, 0xd0ed, 0xd0ed, 0xd0ed, 
+    0xd0ed, 0xd0ed, 0xd0ed, 0xd0ec, 0xd0ec, 0xd0ec, 0xd0ec, 0xd0ec, 
+    0xd0ec, 0xd0ec, 0xd0eb, 0xd0eb, 0xd0eb, 0xd0eb, 0xd0eb, 0xd0eb, 
+    0xd0eb, 0xd0eb, 0xd0ea, 0xd0ea, 0xd0ea, 0xd0ea, 0xd0ea, 0xd0ea, 
+    0xd0ea, 0xd0e9, 0xd0e9, 0xd0e9, 0xd0e9, 0xd0e9, 0xd0e9, 0xd0e9, 
+    0xd0e9, 0xd0e8, 0xd0e8, 0xd0e8, 0xd0e8, 0xd0e8, 0xd0e8, 0xd0e8, 
+    0xd0e7, 0xd0e7, 0xd0e7, 0xd0e7, 0xd0e7, 0xd0e7, 0xd0e7, 0xd0e7, 
+    0xd0e6, 0xd0e6, 0xd0e6, 0xd0e6, 0xd0e6, 0xd0e6, 0xd0e6, 0xd0e5, 
+    0xd0e5, 0xd0e5, 0xd0e5, 0xd0e5, 0xd0e5, 0xd0e5, 0xd0e5, 0xd0e4, 
+    0xd0e4, 0xd0e4, 0xd0e4, 0xd0e4, 0xd0e4, 0xd0e4, 0xd0e4, 0xd0e3, 
+    0xd0e3, 0xd0e3, 0xd0e3, 0xd0e3, 0xd0e3, 0xd0e3, 0xd0e3, 0xd0e2, 
+    0xd0e2, 0xd0e2, 0xd0e2, 0xd0e2, 0xd0e2, 0xd0e2, 0xd0e1, 0xd0e1, 
+    0xd0e1, 0xd0e1, 0xd0e1, 0xd0e1, 0xd0e1, 0xd0e1, 0xd0e0, 0xd0e0, 
+    0xd0e0, 0xd0e0, 0xd0e0, 0xd0e0, 0xd0e0, 0xd0e0, 0xd0df, 0xd0df, 
+    0xd0df, 0xd0df, 0xd0df, 0xd0df, 0xd0df, 0xd0df, 0xd0de, 0xd0de, 
+    0xd0de, 0xd0de, 0xd0de, 0xd0de, 0xd0de, 0xd0de, 0xd0dd, 0xd0dd, 
+    0xd0dd, 0xd0dd, 0xd0dd, 0xd0dd, 0xd0dd, 0xd0dd, 0xd0dc, 0xd0dc, 
+    0xd0dc, 0xd0dc, 0xd0dc, 0xd0dc, 0xd0dc, 0xd0db, 0xd0db, 0xd0db, 
+    0xd0db, 0xd0db, 0xd0db, 0xd0db, 0xd0db, 0xd0da, 0xd0da, 0xd0da, 
+    0xd0da, 0xd0da, 0xd0da, 0xd0d9, 0xd0d9, 0xd0d9, 0xd0d9, 0xd0d8, 
+    0xd0d8, 0xd0d8, 0xd0d8, 0xd0d7, 0xd0d7, 0xd0d7, 0xd0d7, 0xd0d6, 
+    0xd0d6, 0xd0d6, 0xd0d6, 0xd0d5, 0xd0d5, 0xd0d5, 0xd0d5, 0xd0d4, 
+    0xd0d4, 0xd0d4, 0xd0d4, 0xd0d3, 0xd0d3, 0xd0d3, 0xd0d3, 0xd0d2, 
+    0xd0d2, 0xd0d2, 0xd0d2, 0xd0d2, 0xd0d1, 0xd0d1, 0xd0d1, 0xd0d1, 
+    0xd0d0, 0xd0d0, 0xd0d0, 0xd0d0, 0xd0cf, 0xd0cf, 0xd0cf, 0xd0cf, 
+    0xd0ce, 0xd0ce, 0xd0ce, 0xd0ce, 0xd0cd, 0xd0cd, 0xd0cd, 0xd0cd, 
+    0xd0cc, 0xd0cc, 0xd0cc, 0xd0cc, 0xd0cc, 0xd0cb, 0xd0cb, 0xd0cb, 
+    0xd0cb, 0xd0ca, 0xd0ca, 0xd0ca, 0xd0ca, 0xd0c9, 0xd0c9, 0xd0c9, 
+    0xd0c9, 0xd0c8, 0xd0c8, 0xd0c8, 0xd0c8, 0xd0c8, 0xd0c7, 0xd0c7, 
+    0xd0c7, 0xd0c7, 0xd0c6, 0xd0c6, 0xd0c6, 0xd0c6, 0xd0c5, 0xd0c5, 
+    0xd0c5, 0xd0c5, 0xd0c5, 0xd0c4, 0xd0c4, 0xd0c4, 0xd0c4, 0xd0c3, 
+    0xd0c3, 0xd0c3, 0xd0c3, 0xd0c2, 0xd0c2, 0xd0c2, 0xd0c2, 0xd0c2, 
+    0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c0, 0xd0c0, 0xd0c0, 0xd0c0, 
+    0xd0c0, 0xd0bf, 0xd0bf, 0xd0bf, 0xd0bf, 0xd0be, 0xd0be, 0xd0be, 
+    0xd0be, 0xd0be, 0xd0bd, 0xd0bd, 0xd0bd, 0xd0bd, 0xd0bc, 0xd0bc, 
+    0xd0bc, 0xd0bc, 0xd0bc, 0xd0bb, 0xd0bb, 0xd0bb, 0xd0bb, 0xd0ba, 
+    0xd0ba, 0xd0ba, 0xd0ba, 0xd0ba, 0xd0b9, 0xd0b9, 0xd0b9, 0xd0b9, 
+    0xd0b8, 0xd0b8, 0xd0b8, 0xd0b8, 0xd0b8, 0xd0b7, 0xd0b7, 0xd0b7, 
+    0xd0b7, 0xd0b6, 0xd0b6, 0xd0b6, 0xd0b6, 0xd0b6, 0xd0b5, 0xd0b5, 
+    0xd0b5, 0xd0b5, 0xd0b5, 0xd0b4, 0xd0b4, 0xd0b4, 0xd0b4, 0xd0b3, 
+    0xd0b3, 0xd0b3, 0xd0b3, 0xd0b3, 0xd0b2, 0xd0b2, 0xd0b2, 0xd0b2, 
+    0xd0b2, 0xd0b1, 0xd0b1, 0xd0b1, 0xd0b1, 0xd0b0, 0xd0b0, 0xd0b0, 
+    0xd0b0, 0xd0b0, 0xd0af, 0xd0af, 0xd0af, 0xd0af, 0xd0af, 0xd0ae, 
+    0xd0ae, 0xd0ae, 0xd0ae, 0xd0ad, 0xd0ad, 0xd0ad, 0xd0ad, 0xd0ad, 
+    0xd0ac, 0xd0ac, 0xd0ac, 0xd0ac, 0xd0ac, 0xd0ab, 0xd0ab, 0xd0ab, 
+    0xd0ab, 0xd0ab, 0xd0aa, 0xd0aa, 0xd0aa, 0xd0aa, 0xd0aa, 0xd0a9, 
+    0xd0a9, 0xd0a9, 0xd0a9, 0xd0a9, 0xd0a8, 0xd0a8, 0xd0a8, 0xd0a8, 
+    0xd0a7, 0xd0a7, 0xd0a7, 0xd0a7, 0xd0a7, 0xd0a6, 0xd0a6, 0xd0a6, 
+    0xd0a6, 0xd0a6, 0xd0a5, 0xd0a5, 0xd0a5, 0xd0a5, 0xd0a5, 0xd0a4, 
+    0xd0a4, 0xd0a4, 0xd0a4, 0xd0a4, 0xd0a3, 0xd0a3, 0xd0a3, 0xd0a3, 
+    0xd0a3, 0xd0a2, 0xd0a2, 0xd0a2, 0xd0a2, 0xd0a2, 0xd0a1, 0xd0a1, 
+    0xd0a1, 0xd0a1, 0xd0a1, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 
+    0xd09f, 0xd09f, 0xd09f, 0xd09f, 0xd09f, 0xd09e, 0xd09e, 0xd09e, 
+    0xd09e, 0xd09e, 0xd09d, 0xd09d, 0xd09d, 0xd09d, 0xd09d, 0xd09c, 
+    0xd09c, 0xd09c, 0xd09c, 0xd09c, 0xd09b, 0xd09b, 0xd09b, 0xd09b, 
+    0xd09b, 0xd09a, 0xd09a, 0xd09a, 0xd09a, 0xd09a, 0xd09a, 0xd099, 
+    0xd099, 0xd099, 0xd099, 0xd099, 0xd098, 0xd098, 0xd098, 0xd098, 
+    0xd098, 0xd097, 0xd097, 0xd097, 0xd097, 0xd097, 0xd096, 0xd096, 
+    0xd096, 0xd096, 0xd096, 0xd095, 0xd095, 0xd095, 0xd095, 0xd095, 
+    0xd095, 0xd094, 0xd094, 0xd094, 0xd094, 0xd094, 0xd093, 0xd093, 
+    0xd093, 0xd093, 0xd093, 0xd092, 0xd092, 0xd092, 0xd092, 0xd092, 
+    0xd091, 0xd091, 0xd091, 0xd091, 0xd091, 0xd091, 0xd090, 0xd090, 
+    0xd090, 0xd090, 0xd090, 0xd08f, 0xd08f, 0xd08f, 0xd08f, 0xd08f, 
+    0xd08e, 0xd08e, 0xd08e, 0xd08e, 0xd08e, 0xd08e, 0xd08d, 0xd08d, 
+    0xd08d, 0xd08d, 0xd08d, 0xd08c, 0xd08c, 0xd08c, 0xd08c, 0xd08c, 
+    0xd08c, 0xd08b, 0xd08b, 0xd08b, 0xd08b, 0xd08b, 0xd08a, 0xd08a, 
+    0xd08a, 0xd08a, 0xd08a, 0xd08a, 0xd089, 0xd089, 0xd089, 0xd089, 
+    0xd089, 0xd088, 0xd088, 0xd088, 0xd088, 0xd088, 0xd088, 0xd087, 
+    0xd087, 0xd087, 0xd087, 0xd087, 0xd086, 0xd086, 0xd086, 0xd086, 
+    0xd086, 0xd086, 0xd085, 0xd085, 0xd085, 0xd085, 0xd085, 0xd084, 
+    0xd084, 0xd084, 0xd084, 0xd084, 0xd084, 0xd083, 0xd083, 0xd083, 
+    0xd083, 0xd083, 0xd082, 0xd082, 0xd082, 0xd082, 0xd082, 0xd082, 
+    0xd081, 0xd081, 0xd081, 0xd081, 0xd081, 0xd081, 0xd080, 0xd080, 
+    0xd080, 0xd080, 0xd080, 0xd07f, 0xd07f, 0xd07f, 0xd07f, 0xd07f, 
+    0xd07f, 0xd07e, 0xd07e, 0xd07e, 0xd07e, 0xd07e, 0xd07e, 0xd07d, 
+    0xd07d, 0xd07d, 0xd07d, 0xd07d, 0xd07d, 0xd07c, 0xd07c, 0xd07c, 
+    0xd07c, 0xd07c, 0xd07b, 0xd07b, 0xd07b, 0xd07b, 0xd07b, 0xd07b, 
+    0xd07a, 0xd07a, 0xd07a, 0xd07a, 0xd07a, 0xd07a, 0xd079, 0xd079, 
+    0xd079, 0xd079, 0xd079, 0xd079, 0xd078, 0xd078, 0xd078, 0xd078, 
+    0xd078, 0xd078, 0xd077, 0xd077, 0xd077, 0xd077, 0xd077, 0xd077, 
+    0xd076, 0xd076, 0xd076, 0xd076, 0xd076, 0xd076, 0xd075, 0xd075, 
+    0xd075, 0xd075, 0xd075, 0xd074, 0xd074, 0xd074, 0xd074, 0xd074, 
+    0xd074, 0xd073, 0xd073, 0xd073, 0xd073, 0xd073, 0xd073, 0xd072, 
+    0xd072, 0xd072, 0xd072, 0xd072, 0xd072, 0xd071, 0xd071, 0xd071, 
+    0xd071, 0xd071, 0xd071, 0xd070, 0xd070, 0xd070, 0xd070, 0xd070, 
+    0xd070, 0xd070, 0xd06f, 0xd06f, 0xd06f, 0xd06f, 0xd06f, 0xd06f, 
+    0xd06e, 0xd06e, 0xd06e, 0xd06e, 0xd06e, 0xd06e, 0xd06d, 0xd06d, 
+    0xd06d, 0xd06d, 0xd06d, 0xd06d, 0xd06c, 0xd06c, 0xd06c, 0xd06c, 
+    0xd06c, 0xd06c, 0xd06b, 0xd06b, 0xd06b, 0xd06b, 0xd06b, 0xd06b, 
+    0xd06a, 0xd06a, 0xd06a, 0xd06a, 0xd06a, 0xd06a, 0xd069, 0xd069, 
+    0xd069, 0xd069, 0xd069, 0xd069, 0xd069, 0xd068, 0xd068, 0xd068, 
+    0xd068, 0xd068, 0xd068, 0xd067, 0xd067, 0xd067, 0xd067, 0xd067, 
+    0xd067, 0xd066, 0xd066, 0xd066, 0xd066, 0xd066, 0xd066, 0xd065, 
+    0xd065, 0xd065, 0xd065, 0xd065, 0xd065, 0xd065, 0xd064, 0xd064, 
+    0xd064, 0xd064, 0xd064, 0xd064, 0xd063, 0xd063, 0xd063, 0xd063, 
+    0xd063, 0xd063, 0xd062, 0xd062, 0xd062, 0xd062, 0xd062, 0xd062, 
+    0xd062, 0xd061, 0xd061, 0xd061, 0xd061, 0xd061, 0xd061, 0xd060, 
+    0xd060, 0xd060, 0xd060, 0xd060, 0xd060, 0xd060, 0xd05f, 0xd05f, 
+    0xd05f, 0xd05f, 0xd05f, 0xd05f, 0xd05e, 0xd05e, 0xd05e, 0xd05e, 
+    0xd05e, 0xd05e, 0xd05e, 0xd05d, 0xd05d, 0xd05d, 0xd05d, 0xd05d, 
+    0xd05d, 0xd05c, 0xd05c, 0xd05c, 0xd05c, 0xd05c, 0xd05c, 0xd05c, 
+    0xd05b, 0xd05b, 0xd05b, 0xd05b, 0xd05b, 0xd05b, 0xd05a, 0xd05a, 
+    0xd05a, 0xd05a, 0xd05a, 0xd05a, 0xd05a, 0xd059, 0xd059, 0xd059, 
+    0xd059, 0xd059, 0xd059, 0xd059, 0xd058, 0xd058, 0xd058, 0xd058, 
+    0xd058, 0xd058, 0xd057, 0xd057, 0xd057, 0xd057, 0xd057, 0xd057, 
+    0xd057, 0xd056, 0xd056, 0xd056, 0xd056, 0xd056, 0xd056, 0xd056, 
+    0xd055, 0xd055, 0xd055, 0xd055, 0xd055, 0xd055, 0xd054, 0xd054, 
+    0xd054, 0xd054, 0xd054, 0xd054, 0xd054, 0xd053, 0xd053, 0xd053, 
+    0xd053, 0xd053, 0xd053, 0xd053, 0xd052, 0xd052, 0xd052, 0xd052, 
+    0xd052, 0xd052, 0xd052, 0xd051, 0xd051, 0xd051, 0xd051, 0xd051, 
+    0xd051, 0xd050, 0xd050, 0xd050, 0xd050, 0xd050, 0xd050, 0xd050, 
+    0xd04f, 0xd04f, 0xd04f, 0xd04f, 0xd04f, 0xd04f, 0xd04f, 0xd04e, 
+    0xd04e, 0xd04e, 0xd04e, 0xd04e, 0xd04e, 0xd04e, 0xd04d, 0xd04d, 
+    0xd04d, 0xd04d, 0xd04d, 0xd04d, 0xd04d, 0xd04c, 0xd04c, 0xd04c, 
+    0xd04c, 0xd04c, 0xd04c, 0xd04c, 0xd04b, 0xd04b, 0xd04b, 0xd04b, 
+    0xd04b, 0xd04b, 0xd04b, 0xd04a, 0xd04a, 0xd04a, 0xd04a, 0xd04a, 
+    0xd04a, 0xd04a, 0xd049, 0xd049, 0xd049, 0xd049, 0xd049, 0xd049, 
+    0xd049, 0xd048, 0xd048, 0xd048, 0xd048, 0xd048, 0xd048, 0xd048, 
+    0xd047, 0xd047, 0xd047, 0xd047, 0xd047, 0xd047, 0xd047, 0xd046, 
+    0xd046, 0xd046, 0xd046, 0xd046, 0xd046, 0xd046, 0xd045, 0xd045, 
+    0xd045, 0xd045, 0xd045, 0xd045, 0xd045, 0xd045, 0xd044, 0xd044, 
+    0xd044, 0xd044, 0xd044, 0xd044, 0xd044, 0xd043, 0xd043, 0xd043, 
+    0xd043, 0xd043, 0xd043, 0xd043, 0xd042, 0xd042, 0xd042, 0xd042, 
+    0xd042, 0xd042, 0xd042, 0xd041, 0xd041, 0xd041, 0xd041, 0xd041, 
+    0xd041, 0xd041, 0xd040, 0xd040, 0xd040, 0xd040, 0xd040, 0xd040, 
+    0xd040, 0xd040, 0xd03f, 0xd03f, 0xd03f, 0xd03f, 0xd03f, 0xd03f, 
+    0xd03f, 0xd03e, 0xd03e, 0xd03e, 0xd03e, 0xd03e, 0xd03e, 0xd03e, 
+    0xd03d, 0xd03d, 0xd03d, 0xd03d, 0xd03d, 0xd03d, 0xd03d, 0xd03d, 
+    0xd03c, 0xd03c, 0xd03c, 0xd03c, 0xd03c, 0xd03c, 0xd03c, 0xd03b, 
+    0xd03b, 0xd03b, 0xd03b, 0xd03b, 0xd03b, 0xd03b, 0xd03b, 0xd03a, 
+    0xd03a, 0xd03a, 0xd03a, 0xd03a, 0xd03a, 0xd03a, 0xd039, 0xd039, 
+    0xd039, 0xd039, 0xd039, 0xd039, 0xd039, 0xd039, 0xd038, 0xd038, 
+    0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd037, 0xd037, 0xd037, 
+    0xd037, 0xd037, 0xd037, 0xd037, 0xd037, 0xd036, 0xd036, 0xd036, 
+    0xd036, 0xd036, 0xd036, 0xd036, 0xd035, 0xd035, 0xd035, 0xd035, 
+    0xd035, 0xd035, 0xd035, 0xd035, 0xd034, 0xd034, 0xd034, 0xd034, 
+    0xd034, 0xd034, 0xd034, 0xd034, 0xd033, 0xd033, 0xd033, 0xd033, 
+    0xd033, 0xd033, 0xd033, 0xd032, 0xd032, 0xd032, 0xd032, 0xd032, 
+    0xd032, 0xd032, 0xd032, 0xd031, 0xd031, 0xd031, 0xd031, 0xd031, 
+    0xd031, 0xd031, 0xd031, 0xd030, 0xd030, 0xd030, 0xd030, 0xd030, 
+    0xd030, 0xd030, 0xd030, 0xd02f, 0xd02f, 0xd02f, 0xd02f, 0xd02f, 
+    0xd02f, 0xd02f, 0xd02e, 0xd02e, 0xd02e, 0xd02e, 0xd02e, 0xd02e, 
+    0xd02e, 0xd02e, 0xd02d, 0xd02d, 0xd02d, 0xd02d, 0xd02d, 0xd02d, 
+    0xd02d, 0xd02d, 0xd02c, 0xd02c, 0xd02c, 0xd02c, 0xd02c, 0xd02c, 
+    0xd02c, 0xd02c, 0xd02b, 0xd02b, 0xd02b, 0xd02b, 0xd02b, 0xd02b, 
+    0xd02b, 0xd02b, 0xd02a, 0xd02a, 0xd02a, 0xd02a, 0xd02a, 0xd02a, 
+    0xd02a, 0xd02a, 0xd029, 0xd029, 0xd029, 0xd029, 0xd029, 0xd029, 
+    0xd029, 0xd028, 0xd028, 0xd028, 0xd028, 0xd027, 0xd027, 0xd027, 
+    0xd027, 0xd026, 0xd026, 0xd026, 0xd026, 0xd025, 0xd025, 0xd025, 
+    0xd025, 0xd024, 0xd024, 0xd024, 0xd024, 0xd023, 0xd023, 0xd023, 
+    0xd023, 0xd022, 0xd022, 0xd022, 0xd022, 0xd022, 0xd021, 0xd021, 
+    0xd021, 0xd021, 0xd020, 0xd020, 0xd020, 0xd020, 0xd01f, 0xd01f, 
+    0xd01f, 0xd01f, 0xd01e, 0xd01e, 0xd01e, 0xd01e, 0xd01d, 0xd01d, 
+    0xd01d, 0xd01d, 0xd01c, 0xd01c, 0xd01c, 0xd01c, 0xd01c, 0xd01b, 
+    0xd01b, 0xd01b, 0xd01b, 0xd01a, 0xd01a, 0xd01a, 0xd01a, 0xd019, 
+    0xd019, 0xd019, 0xd019, 0xd018, 0xd018, 0xd018, 0xd018, 0xd018, 
+    0xd017, 0xd017, 0xd017, 0xd017, 0xd016, 0xd016, 0xd016, 0xd016, 
+    0xd015, 0xd015, 0xd015, 0xd015, 0xd014, 0xd014, 0xd014, 0xd014, 
+    0xd014, 0xd013, 0xd013, 0xd013, 0xd013, 0xd012, 0xd012, 0xd012, 
+    0xd012, 0xd012, 0xd011, 0xd011, 0xd011, 0xd011, 0xd010, 0xd010, 
+    0xd010, 0xd010, 0xd00f, 0xd00f, 0xd00f, 0xd00f, 0xd00f, 0xd00e, 
+    0xd00e, 0xd00e, 0xd00e, 0xd00d, 0xd00d, 0xd00d, 0xd00d, 0xd00d, 
+    0xd00c, 0xd00c, 0xd00c, 0xd00c, 0xd00b, 0xd00b, 0xd00b, 0xd00b, 
+    0xd00b, 0xd00a, 0xd00a, 0xd00a, 0xd00a, 0xd009, 0xd009, 0xd009, 
+    0xd009, 0xd009, 0xd008, 0xd008, 0xd008, 0xd008, 0xd007, 0xd007, 
+    0xd007, 0xd007, 0xd007, 0xd006, 0xd006, 0xd006, 0xd006, 0xd005, 
+    0xd005, 0xd005, 0xd005, 0xd005, 0xd004, 0xd004, 0xd004, 0xd004, 
+    0xd004, 0xd003, 0xd003, 0xd003, 0xd003, 0xd002, 0xd002, 0xd002, 
+    0xd002, 0xd002, 0xd001, 0xd001, 0xd001, 0xd001, 0xd000, 0xd000, 
+    0xd000, 0xd000, 0xcfff, 0xcfff, 0xcffe, 0xcffe, 0xcffe, 0xcffd, 
+    0xcffd, 0xcffc, 0xcffc, 0xcffb, 0xcffb, 0xcffb, 0xcffa, 0xcffa, 
+    0xcff9, 0xcff9, 0xcff9, 0xcff8, 0xcff8, 0xcff7, 0xcff7, 0xcff6, 
+    0xcff6, 0xcff6, 0xcff5, 0xcff5, 0xcff4, 0xcff4, 0xcff3, 0xcff3, 
+    0xcff3, 0xcff2, 0xcff2, 0xcff1, 0xcff1, 0xcff1, 0xcff0, 0xcff0, 
+    0xcfef, 0xcfef, 0xcfef, 0xcfee, 0xcfee, 0xcfed, 0xcfed, 0xcfec, 
+    0xcfec, 0xcfec, 0xcfeb, 0xcfeb, 0xcfea, 0xcfea, 0xcfea, 0xcfe9, 
+    0xcfe9, 0xcfe8, 0xcfe8, 0xcfe8, 0xcfe7, 0xcfe7, 0xcfe6, 0xcfe6, 
+    0xcfe6, 0xcfe5, 0xcfe5, 0xcfe4, 0xcfe4, 0xcfe4, 0xcfe3, 0xcfe3, 
+    0xcfe2, 0xcfe2, 0xcfe2, 0xcfe1, 0xcfe1, 0xcfe0, 0xcfe0, 0xcfdf, 
+    0xcfdf, 0xcfdf, 0xcfde, 0xcfde, 0xcfde, 0xcfdd, 0xcfdd, 0xcfdc, 
+    0xcfdc, 0xcfdc, 0xcfdb, 0xcfdb, 0xcfda, 0xcfda, 0xcfda, 0xcfd9, 
+    0xcfd9, 0xcfd8, 0xcfd8, 0xcfd8, 0xcfd7, 0xcfd7, 0xcfd6, 0xcfd6, 
+    0xcfd6, 0xcfd5, 0xcfd5, 0xcfd4, 0xcfd4, 0xcfd4, 0xcfd3, 0xcfd3, 
+    0xcfd2, 0xcfd2, 0xcfd2, 0xcfd1, 0xcfd1, 0xcfd1, 0xcfd0, 0xcfd0, 
+    0xcfcf, 0xcfcf, 0xcfcf, 0xcfce, 0xcfce, 0xcfcd, 0xcfcd, 0xcfcd, 
+    0xcfcc, 0xcfcc, 0xcfcb, 0xcfcb, 0xcfcb, 0xcfca, 0xcfca, 0xcfca, 
+    0xcfc9, 0xcfc9, 0xcfc8, 0xcfc8, 0xcfc8, 0xcfc7, 0xcfc7, 0xcfc6, 
+    0xcfc6, 0xcfc6, 0xcfc5, 0xcfc5, 0xcfc5, 0xcfc4, 0xcfc4, 0xcfc3, 
+    0xcfc3, 0xcfc3, 0xcfc2, 0xcfc2, 0xcfc2, 0xcfc1, 0xcfc1, 0xcfc0, 
+    0xcfc0, 0xcfc0, 0xcfbf, 0xcfbf, 0xcfbf, 0xcfbe, 0xcfbe, 0xcfbd, 
+    0xcfbd, 0xcfbd, 0xcfbc, 0xcfbc, 0xcfbc, 0xcfbb, 0xcfbb, 0xcfba, 
+    0xcfba, 0xcfba, 0xcfb9, 0xcfb9, 0xcfb9, 0xcfb8, 0xcfb8, 0xcfb7, 
+    0xcfb7, 0xcfb7, 0xcfb6, 0xcfb6, 0xcfb6, 0xcfb5, 0xcfb5, 0xcfb5, 
+    0xcfb4, 0xcfb4, 0xcfb3, 0xcfb3, 0xcfb3, 0xcfb2, 0xcfb2, 0xcfb2, 
+    0xcfb1, 0xcfb1, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfaf, 0xcfaf, 0xcfaf, 
+    0xcfae, 0xcfae, 0xcfae, 0xcfad, 0xcfad, 0xcfac, 0xcfac, 0xcfac, 
+    0xcfab, 0xcfab, 0xcfab, 0xcfaa, 0xcfaa, 0xcfaa, 0xcfa9, 0xcfa9, 
+    0xcfa9, 0xcfa8, 0xcfa8, 0xcfa7, 0xcfa7, 0xcfa7, 0xcfa6, 0xcfa6, 
+    0xcfa6, 0xcfa5, 0xcfa5, 0xcfa5, 0xcfa4, 0xcfa4, 0xcfa4, 0xcfa3, 
+    0xcfa3, 0xcfa2, 0xcfa2, 0xcfa2, 0xcfa1, 0xcfa1, 0xcfa1, 0xcfa0, 
+    0xcfa0, 0xcfa0, 0xcf9f, 0xcf9f, 0xcf9f, 0xcf9e, 0xcf9e, 0xcf9d, 
+    0xcf9d, 0xcf9d, 0xcf9c, 0xcf9c, 0xcf9c, 0xcf9b, 0xcf9b, 0xcf9b, 
+    0xcf9a, 0xcf9a, 0xcf9a, 0xcf99, 0xcf99, 0xcf99, 0xcf98, 0xcf98, 
+    0xcf98, 0xcf97, 0xcf97, 0xcf96, 0xcf96, 0xcf96, 0xcf95, 0xcf95, 
+    0xcf95, 0xcf94, 0xcf94, 0xcf94, 0xcf93, 0xcf93, 0xcf93, 0xcf92, 
+    0xcf92, 0xcf92, 0xcf91, 0xcf91, 0xcf91, 0xcf90, 0xcf90, 0xcf90, 
+    0xcf8f, 0xcf8f, 0xcf8f, 0xcf8e, 0xcf8e, 0xcf8e, 0xcf8d, 0xcf8d, 
+    0xcf8d, 0xcf8c, 0xcf8c, 0xcf8c, 0xcf8b, 0xcf8b, 0xcf8a, 0xcf8a, 
+    0xcf8a, 0xcf89, 0xcf89, 0xcf89, 0xcf88, 0xcf88, 0xcf88, 0xcf87, 
+    0xcf87, 0xcf87, 0xcf86, 0xcf86, 0xcf86, 0xcf85, 0xcf85, 0xcf85, 
+    0xcf84, 0xcf84, 0xcf84, 0xcf83, 0xcf83, 0xcf83, 0xcf82, 0xcf82, 
+    0xcf82, 0xcf81, 0xcf81, 0xcf81, 0xcf80, 0xcf80, 0xcf80, 0xcf7f, 
+    0xcf7f, 0xcf7f, 0xcf7e, 0xcf7e, 0xcf7e, 0xcf7d, 0xcf7d, 0xcf7d, 
+    0xcf7c, 0xcf7c, 0xcf7c, 0xcf7b, 0xcf7b, 0xcf7b, 0xcf7a, 0xcf7a, 
+    0xcf7a, 0xcf79, 0xcf79, 0xcf79, 0xcf79, 0xcf78, 0xcf78, 0xcf78, 
+    0xcf77, 0xcf77, 0xcf77, 0xcf76, 0xcf76, 0xcf76, 0xcf75, 0xcf75, 
+    0xcf75, 0xcf74, 0xcf74, 0xcf74, 0xcf73, 0xcf73, 0xcf73, 0xcf72, 
+    0xcf72, 0xcf72, 0xcf71, 0xcf71, 0xcf71, 0xcf70, 0xcf70, 0xcf70, 
+    0xcf6f, 0xcf6f, 0xcf6f, 0xcf6e, 0xcf6e, 0xcf6e, 0xcf6d, 0xcf6d, 
+    0xcf6d, 0xcf6d, 0xcf6c, 0xcf6c, 0xcf6c, 0xcf6b, 0xcf6b, 0xcf6b, 
+    0xcf6a, 0xcf6a, 0xcf6a, 0xcf69, 0xcf69, 0xcf69, 0xcf68, 0xcf68, 
+    0xcf68, 0xcf67, 0xcf67, 0xcf67, 0xcf66, 0xcf66, 0xcf66, 0xcf66, 
+    0xcf65, 0xcf65, 0xcf65, 0xcf64, 0xcf64, 0xcf64, 0xcf63, 0xcf63, 
+    0xcf63, 0xcf62, 0xcf62, 0xcf62, 0xcf61, 0xcf61, 0xcf61, 0xcf61, 
+    0xcf60, 0xcf60, 0xcf60, 0xcf5f, 0xcf5f, 0xcf5f, 0xcf5e, 0xcf5e, 
+    0xcf5e, 0xcf5d, 0xcf5d, 0xcf5d, 0xcf5c, 0xcf5c, 0xcf5c, 0xcf5c, 
+    0xcf5b, 0xcf5b, 0xcf5b, 0xcf5a, 0xcf5a, 0xcf5a, 0xcf59, 0xcf59, 
+    0xcf59, 0xcf58, 0xcf58, 0xcf58, 0xcf58, 0xcf57, 0xcf57, 0xcf57, 
+    0xcf56, 0xcf56, 0xcf56, 0xcf55, 0xcf55, 0xcf55, 0xcf54, 0xcf54, 
+    0xcf54, 0xcf54, 0xcf53, 0xcf53, 0xcf53, 0xcf52, 0xcf52, 0xcf52, 
+    0xcf51, 0xcf51, 0xcf51, 0xcf51, 0xcf50, 0xcf50, 0xcf50, 0xcf4f, 
+    0xcf4f, 0xcf4f, 0xcf4e, 0xcf4e, 0xcf4e, 0xcf4e, 0xcf4d, 0xcf4d, 
+    0xcf4d, 0xcf4c, 0xcf4c, 0xcf4c, 0xcf4b, 0xcf4b, 0xcf4b, 0xcf4b, 
+    0xcf4a, 0xcf4a, 0xcf4a, 0xcf49, 0xcf49, 0xcf49, 0xcf48, 0xcf48, 
+    0xcf48, 0xcf48, 0xcf47, 0xcf47, 0xcf47, 0xcf46, 0xcf46, 0xcf46, 
+    0xcf45, 0xcf45, 0xcf45, 0xcf45, 0xcf44, 0xcf44, 0xcf44, 0xcf43, 
+    0xcf43, 0xcf43, 0xcf42, 0xcf42, 0xcf42, 0xcf42, 0xcf41, 0xcf41, 
+    0xcf41, 0xcf40, 0xcf40, 0xcf40, 0xcf40, 0xcf3f, 0xcf3f, 0xcf3f, 
+    0xcf3e, 0xcf3e, 0xcf3e, 0xcf3e, 0xcf3d, 0xcf3d, 0xcf3d, 0xcf3c, 
+    0xcf3c, 0xcf3c, 0xcf3b, 0xcf3b, 0xcf3b, 0xcf3b, 0xcf3a, 0xcf3a, 
+    0xcf3a, 0xcf39, 0xcf39, 0xcf39, 0xcf39, 0xcf38, 0xcf38, 0xcf38, 
+    0xcf37, 0xcf37, 0xcf37, 0xcf37, 0xcf36, 0xcf36, 0xcf36, 0xcf35, 
+    0xcf35, 0xcf35, 0xcf35, 0xcf34, 0xcf34, 0xcf34, 0xcf33, 0xcf33, 
+    0xcf33, 0xcf33, 0xcf32, 0xcf32, 0xcf32, 0xcf31, 0xcf31, 0xcf31, 
+    0xcf31, 0xcf30, 0xcf30, 0xcf30, 0xcf2f, 0xcf2f, 0xcf2f, 0xcf2f, 
+    0xcf2e, 0xcf2e, 0xcf2e, 0xcf2d, 0xcf2d, 0xcf2d, 0xcf2d, 0xcf2c, 
+    0xcf2c, 0xcf2c, 0xcf2b, 0xcf2b, 0xcf2b, 0xcf2b, 0xcf2a, 0xcf2a, 
+    0xcf2a, 0xcf29, 0xcf29, 0xcf29, 0xcf29, 0xcf28, 0xcf28, 0xcf28, 
+    0xcf28, 0xcf27, 0xcf27, 0xcf27, 0xcf26, 0xcf26, 0xcf26, 0xcf26, 
+    0xcf25, 0xcf25, 0xcf25, 0xcf24, 0xcf24, 0xcf24, 0xcf24, 0xcf23, 
+    0xcf23, 0xcf23, 0xcf23, 0xcf22, 0xcf22, 0xcf22, 0xcf21, 0xcf21, 
+    0xcf21, 0xcf21, 0xcf20, 0xcf20, 0xcf20, 0xcf1f, 0xcf1f, 0xcf1f, 
+    0xcf1f, 0xcf1e, 0xcf1e, 0xcf1e, 0xcf1e, 0xcf1d, 0xcf1d, 0xcf1d, 
+    0xcf1c, 0xcf1c, 0xcf1c, 0xcf1c, 0xcf1b, 0xcf1b, 0xcf1b, 0xcf1b, 
+    0xcf1a, 0xcf1a, 0xcf1a, 0xcf19, 0xcf19, 0xcf19, 0xcf19, 0xcf18, 
+    0xcf18, 0xcf18, 0xcf18, 0xcf17, 0xcf17, 0xcf17, 0xcf16, 0xcf16, 
+    0xcf16, 0xcf16, 0xcf15, 0xcf15, 0xcf15, 0xcf15, 0xcf14, 0xcf14, 
+    0xcf14, 0xcf14, 0xcf13, 0xcf13, 0xcf13, 0xcf12, 0xcf12, 0xcf12, 
+    0xcf12, 0xcf11, 0xcf11, 0xcf11, 0xcf11, 0xcf10, 0xcf10, 0xcf10, 
+    0xcf10, 0xcf0f, 0xcf0f, 0xcf0f, 0xcf0e, 0xcf0e, 0xcf0e, 0xcf0e, 
+    0xcf0d, 0xcf0d, 0xcf0d, 0xcf0d, 0xcf0c, 0xcf0c, 0xcf0c, 0xcf0c, 
+    0xcf0b, 0xcf0b, 0xcf0b, 0xcf0a, 0xcf0a, 0xcf0a, 0xcf0a, 0xcf09, 
+    0xcf09, 0xcf09, 0xcf09, 0xcf08, 0xcf08, 0xcf08, 0xcf08, 0xcf07, 
+    0xcf07, 0xcf07, 0xcf07, 0xcf06, 0xcf06, 0xcf06, 0xcf05, 0xcf05, 
+    0xcf05, 0xcf05, 0xcf04, 0xcf04, 0xcf04, 0xcf04, 0xcf03, 0xcf03, 
+    0xcf03, 0xcf03, 0xcf02, 0xcf02, 0xcf02, 0xcf02, 0xcf01, 0xcf01, 
+    0xcf01, 0xcf01, 0xcf00, 0xcf00, 0xcf00, 0xceff, 0xceff, 0xceff, 
+    0xceff, 0xcefe, 0xcefe, 0xcefe, 0xcefe, 0xcefd, 0xcefd, 0xcefd, 
+    0xcefd, 0xcefc, 0xcefc, 0xcefc, 0xcefc, 0xcefb, 0xcefb, 0xcefb, 
+    0xcefb, 0xcefa, 0xcefa, 0xcefa, 0xcefa, 0xcef9, 0xcef9, 0xcef9, 
+    0xcef9, 0xcef8, 0xcef8, 0xcef8, 0xcef8, 0xcef7, 0xcef7, 0xcef7, 
+    0xcef7, 0xcef6, 0xcef6, 0xcef6, 0xcef6, 0xcef5, 0xcef5, 0xcef5, 
+    0xcef4, 0xcef4, 0xcef4, 0xcef4, 0xcef3, 0xcef3, 0xcef3, 0xcef3, 
+    0xcef2, 0xcef2, 0xcef2, 0xcef2, 0xcef1, 0xcef1, 0xcef1, 0xcef1, 
+    0xcef0, 0xcef0, 0xcef0, 0xcef0, 0xceef, 0xceef, 0xceef, 0xceef, 
+    0xceee, 0xceee, 0xceed, 0xceed, 0xceec, 0xceec, 0xceeb, 0xceeb, 
+    0xceea, 0xceea, 0xcee9, 0xcee9, 0xcee8, 0xcee8, 0xcee8, 0xcee7, 
+    0xcee7, 0xcee6, 0xcee6, 0xcee5, 0xcee5, 0xcee4, 0xcee4, 0xcee3, 
+    0xcee3, 0xcee2, 0xcee2, 0xcee1, 0xcee1, 0xcee0, 0xcee0, 0xcedf, 
+    0xcedf, 0xcede, 0xcede, 0xcedd, 0xcedd, 0xcedc, 0xcedc, 0xcedb, 
+    0xcedb, 0xceda, 0xceda, 0xced9, 0xced9, 0xced8, 0xced8, 0xced7, 
+    0xced7, 0xced7, 0xced6, 0xced6, 0xced5, 0xced5, 0xced4, 0xced4, 
+    0xced3, 0xced3, 0xced2, 0xced2, 0xced1, 0xced1, 0xced0, 0xced0, 
+    0xcecf, 0xcecf, 0xcece, 0xcece, 0xcece, 0xcecd, 0xcecd, 0xcecc, 
+    0xcecc, 0xcecb, 0xcecb, 0xceca, 0xceca, 0xcec9, 0xcec9, 0xcec8, 
+    0xcec8, 0xcec7, 0xcec7, 0xcec7, 0xcec6, 0xcec6, 0xcec5, 0xcec5, 
+    0xcec4, 0xcec4, 0xcec3, 0xcec3, 0xcec2, 0xcec2, 0xcec1, 0xcec1, 
+    0xcec1, 0xcec0, 0xcec0, 0xcebf, 0xcebf, 0xcebe, 0xcebe, 0xcebd, 
+    0xcebd, 0xcebc, 0xcebc, 0xcebc, 0xcebb, 0xcebb, 0xceba, 0xceba, 
+    0xceb9, 0xceb9, 0xceb8, 0xceb8, 0xceb8, 0xceb7, 0xceb7, 0xceb6, 
+    0xceb6, 0xceb5, 0xceb5, 0xceb4, 0xceb4, 0xceb3, 0xceb3, 0xceb3, 
+    0xceb2, 0xceb2, 0xceb1, 0xceb1, 0xceb0, 0xceb0, 0xceaf, 0xceaf, 
+    0xceaf, 0xceae, 0xceae, 0xcead, 0xcead, 0xceac, 0xceac, 0xceac, 
+    0xceab, 0xceab, 0xceaa, 0xceaa, 0xcea9, 0xcea9, 0xcea8, 0xcea8, 
+    0xcea8, 0xcea7, 0xcea7, 0xcea6, 0xcea6, 0xcea5, 0xcea5, 0xcea5, 
+    0xcea4, 0xcea4, 0xcea3, 0xcea3, 0xcea2, 0xcea2, 0xcea2, 0xcea1, 
+    0xcea1, 0xcea0, 0xcea0, 0xce9f, 0xce9f, 0xce9f, 0xce9e, 0xce9e, 
+    0xce9d, 0xce9d, 0xce9c, 0xce9c, 0xce9c, 0xce9b, 0xce9b, 0xce9a, 
+    0xce9a, 0xce99, 0xce99, 0xce99, 0xce98, 0xce98, 0xce97, 0xce97, 
+    0xce96, 0xce96, 0xce96, 0xce95, 0xce95, 0xce94, 0xce94, 0xce94, 
+    0xce93, 0xce93, 0xce92, 0xce92, 0xce91, 0xce91, 0xce91, 0xce90, 
+    0xce90, 0xce8f, 0xce8f, 0xce8f, 0xce8e, 0xce8e, 0xce8d, 0xce8d, 
+    0xce8c, 0xce8c, 0xce8c, 0xce8b, 0xce8b, 0xce8a, 0xce8a, 0xce8a, 
+    0xce89, 0xce89, 0xce88, 0xce88, 0xce88, 0xce87, 0xce87, 0xce86, 
+    0xce86, 0xce85, 0xce85, 0xce85, 0xce84, 0xce84, 0xce83, 0xce83, 
+    0xce83, 0xce82, 0xce82, 0xce81, 0xce81, 0xce81, 0xce80, 0xce80, 
+    0xce7f, 0xce7f, 0xce7f, 0xce7e, 0xce7e, 0xce7d, 0xce7d, 0xce7d, 
+    0xce7c, 0xce7c, 0xce7b, 0xce7b, 0xce7b, 0xce7a, 0xce7a, 0xce79, 
+    0xce79, 0xce79, 0xce78, 0xce78, 0xce77, 0xce77, 0xce77, 0xce76, 
+    0xce76, 0xce75, 0xce75, 0xce75, 0xce74, 0xce74, 0xce73, 0xce73, 
+    0xce73, 0xce72, 0xce72, 0xce72, 0xce71, 0xce71, 0xce70, 0xce70, 
+    0xce70, 0xce6f, 0xce6f, 0xce6e, 0xce6e, 0xce6e, 0xce6d, 0xce6d, 
+    0xce6c, 0xce6c, 0xce6c, 0xce6b, 0xce6b, 0xce6b, 0xce6a, 0xce6a, 
+    0xce69, 0xce69, 0xce69, 0xce68, 0xce68, 0xce67, 0xce67, 0xce67, 
+    0xce66, 0xce66, 0xce66, 0xce65, 0xce65, 0xce64, 0xce64, 0xce64, 
+    0xce63, 0xce63, 0xce62, 0xce62, 0xce62, 0xce61, 0xce61, 0xce61, 
+    0xce60, 0xce60, 0xce5f, 0xce5f, 0xce5f, 0xce5e, 0xce5e, 0xce5e, 
+    0xce5d, 0xce5d, 0xce5c, 0xce5c, 0xce5c, 0xce5b, 0xce5b, 0xce5b, 
+    0xce5a, 0xce5a, 0xce59, 0xce59, 0xce59, 0xce58, 0xce58, 0xce58, 
+    0xce57, 0xce57, 0xce56, 0xce56, 0xce56, 0xce55, 0xce55, 0xce55, 
+    0xce54, 0xce54, 0xce53, 0xce53, 0xce53, 0xce52, 0xce52, 0xce52, 
+    0xce51, 0xce51, 0xce51, 0xce50, 0xce50, 0xce4f, 0xce4f, 0xce4f, 
+    0xce4e, 0xce4e, 0xce4e, 0xce4d, 0xce4d, 0xce4d, 0xce4c, 0xce4c, 
+    0xce4b, 0xce4b, 0xce4b, 0xce4a, 0xce4a, 0xce4a, 0xce49, 0xce49, 
+    0xce49, 0xce48, 0xce48, 0xce47, 0xce47, 0xce47, 0xce46, 0xce46, 
+    0xce46, 0xce45, 0xce45, 0xce45, 0xce44, 0xce44, 0xce43, 0xce43, 
+    0xce43, 0xce42, 0xce42, 0xce42, 0xce41, 0xce41, 0xce41, 0xce40, 
+    0xce40, 0xce40, 0xce3f, 0xce3f, 0xce3e, 0xce3e, 0xce3e, 0xce3d, 
+    0xce3d, 0xce3d, 0xce3c, 0xce3c, 0xce3c, 0xce3b, 0xce3b, 0xce3b, 
+    0xce3a, 0xce3a, 0xce3a, 0xce39, 0xce39, 0xce38, 0xce38, 0xce38, 
+    0xce37, 0xce37, 0xce37, 0xce36, 0xce36, 0xce36, 0xce35, 0xce35, 
+    0xce35, 0xce34, 0xce34, 0xce34, 0xce33, 0xce33, 0xce33, 0xce32, 
+    0xce32, 0xce32, 0xce31, 0xce31, 0xce30, 0xce30, 0xce30, 0xce2f, 
+    0xce2f, 0xce2f, 0xce2e, 0xce2e, 0xce2e, 0xce2d, 0xce2d, 0xce2d, 
+    0xce2c, 0xce2c, 0xce2c, 0xce2b, 0xce2b, 0xce2b, 0xce2a, 0xce2a, 
+    0xce2a, 0xce29, 0xce29, 0xce29, 0xce28, 0xce28, 0xce28, 0xce27, 
+    0xce27, 0xce27, 0xce26, 0xce26, 0xce26, 0xce25, 0xce25, 0xce25, 
+    0xce24, 0xce24, 0xce24, 0xce23, 0xce23, 0xce23, 0xce22, 0xce22, 
+    0xce22, 0xce21, 0xce21, 0xce21, 0xce20, 0xce20, 0xce20, 0xce1f, 
+    0xce1f, 0xce1f, 0xce1e, 0xce1e, 0xce1e, 0xce1d, 0xce1d, 0xce1d, 
+    0xce1c, 0xce1c, 0xce1c, 0xce1b, 0xce1b, 0xce1b, 0xce1a, 0xce1a, 
+    0xce1a, 0xce19, 0xce19, 0xce19, 0xce18, 0xce18, 0xce18, 0xce17, 
+    0xce17, 0xce17, 0xce16, 0xce16, 0xce16, 0xce15, 0xce15, 0xce15, 
+    0xce14, 0xce14, 0xce14, 0xce13, 0xce13, 0xce13, 0xce12, 0xce12, 
+    0xce12, 0xce11, 0xce11, 0xce11, 0xce10, 0xce10, 0xce10, 0xce0f, 
+    0xce0f, 0xce0f, 0xce0e, 0xce0e, 0xce0e, 0xce0d, 0xce0d, 0xce0d, 
+    0xce0d, 0xce0c, 0xce0c, 0xce0c, 0xce0b, 0xce0b, 0xce0b, 0xce0a, 
+    0xce0a, 0xce0a, 0xce09, 0xce09, 0xce09, 0xce08, 0xce08, 0xce08, 
+    0xce07, 0xce07, 0xce07, 0xce06, 0xce06, 0xce06, 0xce05, 0xce05, 
+    0xce05, 0xce05, 0xce04, 0xce04, 0xce04, 0xce03, 0xce03, 0xce03, 
+    0xce02, 0xce02, 0xce02, 0xce01, 0xce01, 0xce01, 0xce00, 0xce00, 
+    0xce00, 0xce00, 0xcdff, 0xcdff, 0xcdff, 0xcdfe, 0xcdfe, 0xcdfe, 
+    0xcdfd, 0xcdfd, 0xcdfd, 0xcdfc, 0xcdfc, 0xcdfc, 0xcdfb, 0xcdfb, 
+    0xcdfb, 0xcdfb, 0xcdfa, 0xcdfa, 0xcdfa, 0xcdf9, 0xcdf9, 0xcdf9, 
+    0xcdf8, 0xcdf8, 0xcdf8, 0xcdf7, 0xcdf7, 0xcdf7, 0xcdf6, 0xcdf6, 
+    0xcdf6, 0xcdf6, 0xcdf5, 0xcdf5, 0xcdf5, 0xcdf4, 0xcdf4, 0xcdf4, 
+    0xcdf3, 0xcdf3, 0xcdf3, 0xcdf3, 0xcdf2, 0xcdf2, 0xcdf2, 0xcdf1, 
+    0xcdf1, 0xcdf1, 0xcdf0, 0xcdf0, 0xcdf0, 0xcdef, 0xcdef, 0xcdef, 
+    0xcdef, 0xcdee, 0xcdee, 0xcdee, 0xcded, 0xcded, 0xcded, 0xcdec, 
+    0xcdec, 0xcdec, 0xcdec, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdea, 0xcdea, 
+    0xcdea, 0xcde9, 0xcde9, 0xcde9, 0xcde9, 0xcde8, 0xcde8, 0xcde8, 
+    0xcde7, 0xcde7, 0xcde7, 0xcde6, 0xcde6, 0xcde6, 0xcde6, 0xcde5, 
+    0xcde5, 0xcde5, 0xcde4, 0xcde4, 0xcde4, 0xcde3, 0xcde3, 0xcde3, 
+    0xcde3, 0xcde2, 0xcde2, 0xcde2, 0xcde1, 0xcde1, 0xcde1, 0xcde0, 
+    0xcde0, 0xcde0, 0xcde0, 0xcddf, 0xcddf, 0xcddf, 0xcdde, 0xcdde, 
+    0xcdde, 0xcdde, 0xcddd, 0xcddd, 0xcddd, 0xcddc, 0xcddc, 0xcddc, 
+    0xcddb, 0xcddb, 0xcddb, 0xcddb, 0xcdda, 0xcdda, 0xcdda, 0xcdd9, 
+    0xcdd9, 0xcdd9, 0xcdd9, 0xcdd8, 0xcdd8, 0xcdd8, 0xcdd7, 0xcdd7, 
+    0xcdd7, 0xcdd7, 0xcdd6, 0xcdd6, 0xcdd6, 0xcdd5, 0xcdd5, 0xcdd5, 
+    0xcdd5, 0xcdd4, 0xcdd4, 0xcdd4, 0xcdd3, 0xcdd3, 0xcdd3, 0xcdd3, 
+    0xcdd2, 0xcdd2, 0xcdd2, 0xcdd1, 0xcdd1, 0xcdd1, 0xcdd1, 0xcdd0, 
+    0xcdd0, 0xcdd0, 0xcdcf, 0xcdcf, 0xcdcf, 0xcdcf, 0xcdce, 0xcdce, 
+    0xcdce, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcc, 0xcdcc, 0xcdcc, 
+    0xcdcb, 0xcdcb, 0xcdcb, 0xcdcb, 0xcdca, 0xcdca, 0xcdca, 0xcdc9, 
+    0xcdc9, 0xcdc9, 0xcdc9, 0xcdc8, 0xcdc8, 0xcdc8, 0xcdc7, 0xcdc7, 
+    0xcdc7, 0xcdc7, 0xcdc6, 0xcdc6, 0xcdc6, 0xcdc5, 0xcdc5, 0xcdc5, 
+    0xcdc5, 0xcdc4, 0xcdc4, 0xcdc4, 0xcdc4, 0xcdc3, 0xcdc3, 0xcdc3, 
+    0xcdc2, 0xcdc2, 0xcdc2, 0xcdc2, 0xcdc1, 0xcdc1, 0xcdc1, 0xcdc0, 
+    0xcdc0, 0xcdc0, 0xcdc0, 0xcdbf, 0xcdbf, 0xcdbf, 0xcdbf, 0xcdbe, 
+    0xcdbe, 0xcdbe, 0xcdbd, 0xcdbd, 0xcdbd, 0xcdbd, 0xcdbc, 0xcdbc, 
+    0xcdbc, 0xcdbb, 0xcdbb, 0xcdbb, 0xcdbb, 0xcdba, 0xcdba, 0xcdba, 
+    0xcdba, 0xcdb9, 0xcdb9, 0xcdb9, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, 
+    0xcdb7, 0xcdb7, 0xcdb7, 0xcdb7, 0xcdb6, 0xcdb6, 0xcdb6, 0xcdb5, 
+    0xcdb5, 0xcdb5, 0xcdb5, 0xcdb4, 0xcdb4, 0xcdb4, 0xcdb4, 0xcdb3, 
+    0xcdb3, 0xcdb3, 0xcdb3, 0xcdb2, 0xcdb2, 0xcdb2, 0xcdb1, 0xcdb1, 
+    0xcdb1, 0xcdb1, 0xcdb0, 0xcdb0, 0xcdb0, 0xcdb0, 0xcdaf, 0xcdaf, 
+    0xcdaf, 0xcdae, 0xcdae, 0xcdae, 0xcdae, 0xcdad, 0xcdad, 0xcdad, 
+    0xcdad, 0xcdac, 0xcdac, 0xcdac, 0xcdac, 0xcdab, 0xcdab, 0xcdab, 
+    0xcdaa, 0xcdaa, 0xcdaa, 0xcdaa, 0xcda9, 0xcda9, 0xcda9, 0xcda9, 
+    0xcda8, 0xcda8, 0xcda8, 0xcda8, 0xcda7, 0xcda7, 0xcda7, 0xcda7, 
+    0xcda6, 0xcda6, 0xcda6, 0xcda5, 0xcda5, 0xcda5, 0xcda5, 0xcda4, 
+    0xcda4, 0xcda4, 0xcda4, 0xcda3, 0xcda3, 0xcda3, 0xcda3, 0xcda2, 
+    0xcda2, 0xcda2, 0xcda2, 0xcda1, 0xcda1, 0xcda1, 0xcda0, 0xcda0, 
+    0xcda0, 0xcda0, 0xcd9f, 0xcd9f, 0xcd9f, 0xcd9f, 0xcd9e, 0xcd9e, 
+    0xcd9e, 0xcd9e, 0xcd9d, 0xcd9d, 0xcd9d, 0xcd9d, 0xcd9c, 0xcd9c, 
+    0xcd9c, 0xcd9c, 0xcd9b, 0xcd9b, 0xcd9b, 0xcd9b, 0xcd9a, 0xcd9a, 
+    0xcd9a, 0xcd9a, 0xcd99, 0xcd99, 0xcd99, 0xcd98, 0xcd98, 0xcd98, 
+    0xcd98, 0xcd97, 0xcd97, 0xcd97, 0xcd97, 0xcd96, 0xcd96, 0xcd96, 
+    0xcd96, 0xcd95, 0xcd95, 0xcd95, 0xcd95, 0xcd94, 0xcd94, 0xcd94, 
+    0xcd94, 0xcd93, 0xcd93, 0xcd93, 0xcd93, 0xcd92, 0xcd92, 0xcd92, 
+    0xcd92, 0xcd91, 0xcd91, 0xcd91, 0xcd91, 0xcd90, 0xcd90, 0xcd90, 
+    0xcd90, 0xcd8f, 0xcd8f, 0xcd8f, 0xcd8f, 0xcd8e, 0xcd8e, 0xcd8e, 
+    0xcd8e, 0xcd8d, 0xcd8d, 0xcd8d, 0xcd8d, 0xcd8c, 0xcd8c, 0xcd8c, 
+    0xcd8c, 0xcd8b, 0xcd8b, 0xcd8a, 0xcd8a, 0xcd89, 0xcd89, 0xcd88, 
+    0xcd88, 0xcd87, 0xcd87, 0xcd86, 0xcd86, 0xcd85, 0xcd85, 0xcd84, 
+    0xcd84, 0xcd83, 0xcd83, 0xcd82, 0xcd82, 0xcd81, 0xcd81, 0xcd80, 
+    0xcd80, 0xcd7f, 0xcd7f, 0xcd7e, 0xcd7e, 0xcd7d, 0xcd7d, 0xcd7c, 
+    0xcd7c, 0xcd7b, 0xcd7b, 0xcd7a, 0xcd7a, 0xcd79, 0xcd79, 0xcd78, 
+    0xcd78, 0xcd77, 0xcd77, 0xcd77, 0xcd76, 0xcd76, 0xcd75, 0xcd75, 
+    0xcd74, 0xcd74, 0xcd73, 0xcd73, 0xcd72, 0xcd72, 0xcd71, 0xcd71, 
+    0xcd70, 0xcd70, 0xcd6f, 0xcd6f, 0xcd6e, 0xcd6e, 0xcd6d, 0xcd6d, 
+    0xcd6d, 0xcd6c, 0xcd6c, 0xcd6b, 0xcd6b, 0xcd6a, 0xcd6a, 0xcd69, 
+    0xcd69, 0xcd68, 0xcd68, 0xcd67, 0xcd67, 0xcd66, 0xcd66, 0xcd66, 
+    0xcd65, 0xcd65, 0xcd64, 0xcd64, 0xcd63, 0xcd63, 0xcd62, 0xcd62, 
+    0xcd61, 0xcd61, 0xcd60, 0xcd60, 0xcd60, 0xcd5f, 0xcd5f, 0xcd5e, 
+    0xcd5e, 0xcd5d, 0xcd5d, 0xcd5c, 0xcd5c, 0xcd5b, 0xcd5b, 0xcd5a, 
+    0xcd5a, 0xcd5a, 0xcd59, 0xcd59, 0xcd58, 0xcd58, 0xcd57, 0xcd57, 
+    0xcd56, 0xcd56, 0xcd56, 0xcd55, 0xcd55, 0xcd54, 0xcd54, 0xcd53, 
+    0xcd53, 0xcd52, 0xcd52, 0xcd51, 0xcd51, 0xcd51, 0xcd50, 0xcd50, 
+    0xcd4f, 0xcd4f, 0xcd4e, 0xcd4e, 0xcd4d, 0xcd4d, 0xcd4d, 0xcd4c, 
+    0xcd4c, 0xcd4b, 0xcd4b, 0xcd4a, 0xcd4a, 0xcd4a, 0xcd49, 0xcd49, 
+    0xcd48, 0xcd48, 0xcd47, 0xcd47, 0xcd46, 0xcd46, 0xcd46, 0xcd45, 
+    0xcd45, 0xcd44, 0xcd44, 0xcd43, 0xcd43, 0xcd43, 0xcd42, 0xcd42, 
+    0xcd41, 0xcd41, 0xcd40, 0xcd40, 0xcd40, 0xcd3f, 0xcd3f, 0xcd3e, 
+    0xcd3e, 0xcd3d, 0xcd3d, 0xcd3c, 0xcd3c, 0xcd3c, 0xcd3b, 0xcd3b, 
+    0xcd3a, 0xcd3a, 0xcd3a, 0xcd39, 0xcd39, 0xcd38, 0xcd38, 0xcd37, 
+    0xcd37, 0xcd37, 0xcd36, 0xcd36, 0xcd35, 0xcd35, 0xcd34, 0xcd34, 
+    0xcd34, 0xcd33, 0xcd33, 0xcd32, 0xcd32, 0xcd31, 0xcd31, 0xcd31, 
+    0xcd30, 0xcd30, 0xcd2f, 0xcd2f, 0xcd2f, 0xcd2e, 0xcd2e, 0xcd2d, 
+    0xcd2d, 0xcd2c, 0xcd2c, 0xcd2c, 0xcd2b, 0xcd2b, 0xcd2a, 0xcd2a, 
+    0xcd2a, 0xcd29, 0xcd29, 0xcd28, 0xcd28, 0xcd28, 0xcd27, 0xcd27, 
+    0xcd26, 0xcd26, 0xcd25, 0xcd25, 0xcd25, 0xcd24, 0xcd24, 0xcd23, 
+    0xcd23, 0xcd23, 0xcd22, 0xcd22, 0xcd21, 0xcd21, 0xcd21, 0xcd20, 
+    0xcd20, 0xcd1f, 0xcd1f, 0xcd1f, 0xcd1e, 0xcd1e, 0xcd1d, 0xcd1d, 
+    0xcd1d, 0xcd1c, 0xcd1c, 0xcd1b, 0xcd1b, 0xcd1b, 0xcd1a, 0xcd1a, 
+    0xcd19, 0xcd19, 0xcd19, 0xcd18, 0xcd18, 0xcd17, 0xcd17, 0xcd17, 
+    0xcd16, 0xcd16, 0xcd15, 0xcd15, 0xcd15, 0xcd14, 0xcd14, 0xcd13, 
+    0xcd13, 0xcd13, 0xcd12, 0xcd12, 0xcd11, 0xcd11, 0xcd11, 0xcd10, 
+    0xcd10, 0xcd0f, 0xcd0f, 0xcd0f, 0xcd0e, 0xcd0e, 0xcd0d, 0xcd0d, 
+    0xcd0d, 0xcd0c, 0xcd0c, 0xcd0c, 0xcd0b, 0xcd0b, 0xcd0a, 0xcd0a, 
+    0xcd0a, 0xcd09, 0xcd09, 0xcd08, 0xcd08, 0xcd08, 0xcd07, 0xcd07, 
+    0xcd06, 0xcd06, 0xcd06, 0xcd05, 0xcd05, 0xcd05, 0xcd04, 0xcd04, 
+    0xcd03, 0xcd03, 0xcd03, 0xcd02, 0xcd02, 0xcd01, 0xcd01, 0xcd01, 
+    0xcd00, 0xcd00, 0xcd00, 0xccff, 0xccff, 0xccfe, 0xccfe, 0xccfe, 
+    0xccfd, 0xccfd, 0xccfd, 0xccfc, 0xccfc, 0xccfb, 0xccfb, 0xccfb, 
+    0xccfa, 0xccfa, 0xccfa, 0xccf9, 0xccf9, 0xccf8, 0xccf8, 0xccf8, 
+    0xccf7, 0xccf7, 0xccf7, 0xccf6, 0xccf6, 0xccf5, 0xccf5, 0xccf5, 
+    0xccf4, 0xccf4, 0xccf4, 0xccf3, 0xccf3, 0xccf2, 0xccf2, 0xccf2, 
+    0xccf1, 0xccf1, 0xccf1, 0xccf0, 0xccf0, 0xccef, 0xccef, 0xccef, 
+    0xccee, 0xccee, 0xccee, 0xcced, 0xcced, 0xcced, 0xccec, 0xccec, 
+    0xcceb, 0xcceb, 0xcceb, 0xccea, 0xccea, 0xccea, 0xcce9, 0xcce9, 
+    0xcce9, 0xcce8, 0xcce8, 0xcce7, 0xcce7, 0xcce7, 0xcce6, 0xcce6, 
+    0xcce6, 0xcce5, 0xcce5, 0xcce5, 0xcce4, 0xcce4, 0xcce3, 0xcce3, 
+    0xcce3, 0xcce2, 0xcce2, 0xcce2, 0xcce1, 0xcce1, 0xcce1, 0xcce0, 
+    0xcce0, 0xcce0, 0xccdf, 0xccdf, 0xccde, 0xccde, 0xccde, 0xccdd, 
+    0xccdd, 0xccdd, 0xccdc, 0xccdc, 0xccdc, 0xccdb, 0xccdb, 0xccdb, 
+    0xccda, 0xccda, 0xccd9, 0xccd9, 0xccd9, 0xccd8, 0xccd8, 0xccd8, 
+    0xccd7, 0xccd7, 0xccd7, 0xccd6, 0xccd6, 0xccd6, 0xccd5, 0xccd5, 
+    0xccd5, 0xccd4, 0xccd4, 0xccd3, 0xccd3, 0xccd3, 0xccd2, 0xccd2, 
+    0xccd2, 0xccd1, 0xccd1, 0xccd1, 0xccd0, 0xccd0, 0xccd0, 0xcccf, 
+    0xcccf, 0xcccf, 0xccce, 0xccce, 0xccce, 0xcccd, 0xcccd, 0xcccd, 
+    0xcccc, 0xcccc, 0xcccc, 0xcccb, 0xcccb, 0xcccb, 0xccca, 0xccca, 
+    0xccc9, 0xccc9, 0xccc9, 0xccc8, 0xccc8, 0xccc8, 0xccc7, 0xccc7, 
+    0xccc7, 0xccc6, 0xccc6, 0xccc6, 0xccc5, 0xccc5, 0xccc5, 0xccc4, 
+    0xccc4, 0xccc4, 0xccc3, 0xccc3, 0xccc3, 0xccc2, 0xccc2, 0xccc2, 
+    0xccc1, 0xccc1, 0xccc1, 0xccc0, 0xccc0, 0xccc0, 0xccbf, 0xccbf, 
+    0xccbf, 0xccbe, 0xccbe, 0xccbe, 0xccbd, 0xccbd, 0xccbd, 0xccbc, 
+    0xccbc, 0xccbc, 0xccbb, 0xccbb, 0xccbb, 0xccba, 0xccba, 0xccba, 
+    0xccb9, 0xccb9, 0xccb9, 0xccb8, 0xccb8, 0xccb8, 0xccb7, 0xccb7, 
+    0xccb7, 0xccb6, 0xccb6, 0xccb6, 0xccb5, 0xccb5, 0xccb5, 0xccb4, 
+    0xccb4, 0xccb4, 0xccb3, 0xccb3, 0xccb3, 0xccb2, 0xccb2, 0xccb2, 
+    0xccb1, 0xccb1, 0xccb1, 0xccb0, 0xccb0, 0xccb0, 0xccaf, 0xccaf, 
+    0xccaf, 0xccae, 0xccae, 0xccae, 0xccae, 0xccad, 0xccad, 0xccad, 
+    0xccac, 0xccac, 0xccac, 0xccab, 0xccab, 0xccab, 0xccaa, 0xccaa, 
+    0xccaa, 0xcca9, 0xcca9, 0xcca9, 0xcca8, 0xcca8, 0xcca8, 0xcca7, 
+    0xcca7, 0xcca7, 0xcca6, 0xcca6, 0xcca6, 0xcca5, 0xcca5, 0xcca5, 
+    0xcca5, 0xcca4, 0xcca4, 0xcca4, 0xcca3, 0xcca3, 0xcca3, 0xcca2, 
+    0xcca2, 0xcca2, 0xcca1, 0xcca1, 0xcca1, 0xcca0, 0xcca0, 0xcca0, 
+    0xcc9f, 0xcc9f, 0xcc9f, 0xcc9e, 0xcc9e, 0xcc9e, 0xcc9e, 0xcc9d, 
+    0xcc9d, 0xcc9d, 0xcc9c, 0xcc9c, 0xcc9c, 0xcc9b, 0xcc9b, 0xcc9b, 
+    0xcc9a, 0xcc9a, 0xcc9a, 0xcc99, 0xcc99, 0xcc99, 0xcc99, 0xcc98, 
+    0xcc98, 0xcc98, 0xcc97, 0xcc97, 0xcc97, 0xcc96, 0xcc96, 0xcc96, 
+    0xcc95, 0xcc95, 0xcc95, 0xcc95, 0xcc94, 0xcc94, 0xcc94, 0xcc93, 
+    0xcc93, 0xcc93, 0xcc92, 0xcc92, 0xcc92, 0xcc91, 0xcc91, 0xcc91, 
+    0xcc91, 0xcc90, 0xcc90, 0xcc90, 0xcc8f, 0xcc8f, 0xcc8f, 0xcc8e, 
+    0xcc8e, 0xcc8e, 0xcc8d, 0xcc8d, 0xcc8d, 0xcc8d, 0xcc8c, 0xcc8c, 
+    0xcc8c, 0xcc8b, 0xcc8b, 0xcc8b, 0xcc8a, 0xcc8a, 0xcc8a, 0xcc8a, 
+    0xcc89, 0xcc89, 0xcc89, 0xcc88, 0xcc88, 0xcc88, 0xcc87, 0xcc87, 
+    0xcc87, 0xcc87, 0xcc86, 0xcc86, 0xcc86, 0xcc85, 0xcc85, 0xcc85, 
+    0xcc84, 0xcc84, 0xcc84, 0xcc84, 0xcc83, 0xcc83, 0xcc83, 0xcc82, 
+    0xcc82, 0xcc82, 0xcc81, 0xcc81, 0xcc81, 0xcc81, 0xcc80, 0xcc80, 
+    0xcc80, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7e, 0xcc7e, 0xcc7e, 0xcc7e, 
+    0xcc7d, 0xcc7d, 0xcc7d, 0xcc7c, 0xcc7c, 0xcc7c, 0xcc7c, 0xcc7b, 
+    0xcc7b, 0xcc7b, 0xcc7a, 0xcc7a, 0xcc7a, 0xcc79, 0xcc79, 0xcc79, 
+    0xcc79, 0xcc78, 0xcc78, 0xcc78, 0xcc77, 0xcc77, 0xcc77, 0xcc77, 
+    0xcc76, 0xcc76, 0xcc76, 0xcc75, 0xcc75, 0xcc75, 0xcc75, 0xcc74, 
+    0xcc74, 0xcc74, 0xcc73, 0xcc73, 0xcc73, 0xcc72, 0xcc72, 0xcc72, 
+    0xcc72, 0xcc71, 0xcc71, 0xcc71, 0xcc70, 0xcc70, 0xcc70, 0xcc70, 
+    0xcc6f, 0xcc6f, 0xcc6f, 0xcc6e, 0xcc6e, 0xcc6e, 0xcc6e, 0xcc6d, 
+    0xcc6d, 0xcc6d, 0xcc6c, 0xcc6c, 0xcc6c, 0xcc6c, 0xcc6b, 0xcc6b, 
+    0xcc6b, 0xcc6a, 0xcc6a, 0xcc6a, 0xcc6a, 0xcc69, 0xcc69, 0xcc69, 
+    0xcc68, 0xcc68, 0xcc68, 0xcc68, 0xcc67, 0xcc67, 0xcc67, 0xcc67, 
+    0xcc66, 0xcc66, 0xcc66, 0xcc65, 0xcc65, 0xcc65, 0xcc65, 0xcc64, 
+    0xcc64, 0xcc64, 0xcc63, 0xcc63, 0xcc63, 0xcc63, 0xcc62, 0xcc62, 
+    0xcc62, 0xcc61, 0xcc61, 0xcc61, 0xcc61, 0xcc60, 0xcc60, 0xcc60, 
+    0xcc60, 0xcc5f, 0xcc5f, 0xcc5f, 0xcc5e, 0xcc5e, 0xcc5e, 0xcc5e, 
+    0xcc5d, 0xcc5d, 0xcc5d, 0xcc5c, 0xcc5c, 0xcc5c, 0xcc5c, 0xcc5b, 
+    0xcc5b, 0xcc5b, 0xcc5b, 0xcc5a, 0xcc5a, 0xcc5a, 0xcc59, 0xcc59, 
+    0xcc59, 0xcc59, 0xcc58, 0xcc58, 0xcc58, 0xcc58, 0xcc57, 0xcc57, 
+    0xcc57, 0xcc56, 0xcc56, 0xcc56, 0xcc56, 0xcc55, 0xcc55, 0xcc55, 
+    0xcc54, 0xcc54, 0xcc54, 0xcc54, 0xcc53, 0xcc53, 0xcc53, 0xcc53, 
+    0xcc52, 0xcc52, 0xcc52, 0xcc52, 0xcc51, 0xcc51, 0xcc51, 0xcc50, 
+    0xcc50, 0xcc50, 0xcc50, 0xcc4f, 0xcc4f, 0xcc4f, 0xcc4f, 0xcc4e, 
+    0xcc4e, 0xcc4e, 0xcc4d, 0xcc4d, 0xcc4d, 0xcc4d, 0xcc4c, 0xcc4c, 
+    0xcc4c, 0xcc4c, 0xcc4b, 0xcc4b, 0xcc4b, 0xcc4b, 0xcc4a, 0xcc4a, 
+    0xcc4a, 0xcc49, 0xcc49, 0xcc49, 0xcc49, 0xcc48, 0xcc48, 0xcc48, 
+    0xcc48, 0xcc47, 0xcc47, 0xcc47, 0xcc47, 0xcc46, 0xcc46, 0xcc46, 
+    0xcc45, 0xcc45, 0xcc45, 0xcc45, 0xcc44, 0xcc44, 0xcc44, 0xcc44, 
+    0xcc43, 0xcc43, 0xcc43, 0xcc43, 0xcc42, 0xcc42, 0xcc42, 0xcc42, 
+    0xcc41, 0xcc41, 0xcc41, 0xcc40, 0xcc40, 0xcc40, 0xcc40, 0xcc3f, 
+    0xcc3f, 0xcc3f, 0xcc3f, 0xcc3e, 0xcc3e, 0xcc3e, 0xcc3e, 0xcc3d, 
+    0xcc3d, 0xcc3d, 0xcc3d, 0xcc3c, 0xcc3c, 0xcc3c, 0xcc3c, 0xcc3b, 
+    0xcc3b, 0xcc3b, 0xcc3a, 0xcc3a, 0xcc3a, 0xcc3a, 0xcc39, 0xcc39, 
+    0xcc39, 0xcc39, 0xcc38, 0xcc38, 0xcc38, 0xcc38, 0xcc37, 0xcc37, 
+    0xcc37, 0xcc37, 0xcc36, 0xcc36, 0xcc36, 0xcc36, 0xcc35, 0xcc35, 
+    0xcc35, 0xcc35, 0xcc34, 0xcc34, 0xcc34, 0xcc34, 0xcc33, 0xcc33, 
+    0xcc33, 0xcc33, 0xcc32, 0xcc32, 0xcc32, 0xcc31, 0xcc31, 0xcc31, 
+    0xcc31, 0xcc30, 0xcc30, 0xcc30, 0xcc30, 0xcc2f, 0xcc2f, 0xcc2f, 
+    0xcc2f, 0xcc2e, 0xcc2e, 0xcc2e, 0xcc2e, 0xcc2d, 0xcc2d, 0xcc2d, 
+    0xcc2d, 0xcc2c, 0xcc2c, 0xcc2c, 0xcc2c, 0xcc2b, 0xcc2b, 0xcc2b, 
+    0xcc2b, 0xcc2a, 0xcc2a, 0xcc2a, 0xcc2a, 0xcc29, 0xcc29, 0xcc29, 
+    0xcc29, 0xcc28, 0xcc28, 0xcc27, 0xcc27, 0xcc26, 0xcc26, 0xcc25, 
+    0xcc25, 0xcc24, 0xcc24, 0xcc23, 0xcc23, 0xcc22, 0xcc22, 0xcc21, 
+    0xcc21, 0xcc20, 0xcc20, 0xcc1f, 0xcc1f, 0xcc1e, 0xcc1e, 0xcc1d, 
+    0xcc1d, 0xcc1c, 0xcc1c, 0xcc1b, 0xcc1b, 0xcc1a, 0xcc1a, 0xcc19, 
+    0xcc19, 0xcc18, 0xcc18, 0xcc17, 0xcc17, 0xcc17, 0xcc16, 0xcc16, 
+    0xcc15, 0xcc15, 0xcc14, 0xcc14, 0xcc13, 0xcc13, 0xcc12, 0xcc12, 
+    0xcc11, 0xcc11, 0xcc10, 0xcc10, 0xcc0f, 0xcc0f, 0xcc0e, 0xcc0e, 
+    0xcc0d, 0xcc0d, 0xcc0c, 0xcc0c, 0xcc0c, 0xcc0b, 0xcc0b, 0xcc0a, 
+    0xcc0a, 0xcc09, 0xcc09, 0xcc08, 0xcc08, 0xcc07, 0xcc07, 0xcc06, 
+    0xcc06, 0xcc05, 0xcc05, 0xcc04, 0xcc04, 0xcc04, 0xcc03, 0xcc03, 
+    0xcc02, 0xcc02, 0xcc01, 0xcc01, 0xcc00, 0xcc00, 0xcbff, 0xcbfe, 
+    0xcbfd, 0xcbfc, 0xcbfb, 0xcbfa, 0xcbf9, 0xcbf8, 0xcbf7, 0xcbf6, 
+    0xcbf6, 0xcbf5, 0xcbf4, 0xcbf3, 0xcbf2, 0xcbf1, 0xcbf0, 0xcbef, 
+    0xcbee, 0xcbed, 0xcbec, 0xcbec, 0xcbeb, 0xcbea, 0xcbe9, 0xcbe8, 
+    0xcbe7, 0xcbe6, 0xcbe5, 0xcbe4, 0xcbe3, 0xcbe3, 0xcbe2, 0xcbe1, 
+    0xcbe0, 0xcbdf, 0xcbde, 0xcbdd, 0xcbdc, 0xcbdb, 0xcbdb, 0xcbda, 
+    0xcbd9, 0xcbd8, 0xcbd7, 0xcbd6, 0xcbd5, 0xcbd4, 0xcbd3, 0xcbd3, 
+    0xcbd2, 0xcbd1, 0xcbd0, 0xcbcf, 0xcbce, 0xcbcd, 0xcbcc, 0xcbcb, 
+    0xcbcb, 0xcbca, 0xcbc9, 0xcbc8, 0xcbc7, 0xcbc6, 0xcbc5, 0xcbc4, 
+    0xcbc4, 0xcbc3, 0xcbc2, 0xcbc1, 0xcbc0, 0xcbbf, 0xcbbe, 0xcbbe, 
+    0xcbbd, 0xcbbc, 0xcbbb, 0xcbba, 0xcbb9, 0xcbb8, 0xcbb8, 0xcbb7, 
+    0xcbb6, 0xcbb5, 0xcbb4, 0xcbb3, 0xcbb2, 0xcbb1, 0xcbb1, 0xcbb0, 
+    0xcbaf, 0xcbae, 0xcbad, 0xcbac, 0xcbac, 0xcbab, 0xcbaa, 0xcba9, 
+    0xcba8, 0xcba7, 0xcba6, 0xcba6, 0xcba5, 0xcba4, 0xcba3, 0xcba2, 
+    0xcba1, 0xcba1, 0xcba0, 0xcb9f, 0xcb9e, 0xcb9d, 0xcb9c, 0xcb9b, 
+    0xcb9b, 0xcb9a, 0xcb99, 0xcb98, 0xcb97, 0xcb96, 0xcb96, 0xcb95, 
+    0xcb94, 0xcb93, 0xcb92, 0xcb91, 0xcb91, 0xcb90, 0xcb8f, 0xcb8e, 
+    0xcb8d, 0xcb8d, 0xcb8c, 0xcb8b, 0xcb8a, 0xcb89, 0xcb88, 0xcb88, 
+    0xcb87, 0xcb86, 0xcb85, 0xcb84, 0xcb83, 0xcb83, 0xcb82, 0xcb81, 
+    0xcb80, 0xcb7f, 0xcb7f, 0xcb7e, 0xcb7d, 0xcb7c, 0xcb7b, 0xcb7b, 
+    0xcb7a, 0xcb79, 0xcb78, 0xcb77, 0xcb76, 0xcb76, 0xcb75, 0xcb74, 
+    0xcb73, 0xcb72, 0xcb72, 0xcb71, 0xcb70, 0xcb6f, 0xcb6e, 0xcb6e, 
+    0xcb6d, 0xcb6c, 0xcb6b, 0xcb6a, 0xcb6a, 0xcb69, 0xcb68, 0xcb67, 
+    0xcb66, 0xcb66, 0xcb65, 0xcb64, 0xcb63, 0xcb63, 0xcb62, 0xcb61, 
+    0xcb60, 0xcb5f, 0xcb5f, 0xcb5e, 0xcb5d, 0xcb5c, 0xcb5b, 0xcb5b, 
+    0xcb5a, 0xcb59, 0xcb58, 0xcb57, 0xcb57, 0xcb56, 0xcb55, 0xcb54, 
+    0xcb54, 0xcb53, 0xcb52, 0xcb51, 0xcb50, 0xcb50, 0xcb4f, 0xcb4e, 
+    0xcb4d, 0xcb4d, 0xcb4c, 0xcb4b, 0xcb4a, 0xcb49, 0xcb49, 0xcb48, 
+    0xcb47, 0xcb46, 0xcb46, 0xcb45, 0xcb44, 0xcb43, 0xcb43, 0xcb42, 
+    0xcb41, 0xcb40, 0xcb3f, 0xcb3f, 0xcb3e, 0xcb3d, 0xcb3c, 0xcb3c, 
+    0xcb3b, 0xcb3a, 0xcb39, 0xcb39, 0xcb38, 0xcb37, 0xcb36, 0xcb36, 
+    0xcb35, 0xcb34, 0xcb33, 0xcb33, 0xcb32, 0xcb31, 0xcb30, 0xcb30, 
+    0xcb2f, 0xcb2e, 0xcb2d, 0xcb2d, 0xcb2c, 0xcb2b, 0xcb2a, 0xcb2a, 
+    0xcb29, 0xcb28, 0xcb27, 0xcb27, 0xcb26, 0xcb25, 0xcb24, 0xcb24, 
+    0xcb23, 0xcb22, 0xcb21, 0xcb21, 0xcb20, 0xcb1f, 0xcb1e, 0xcb1e, 
+    0xcb1d, 0xcb1c, 0xcb1b, 0xcb1b, 0xcb1a, 0xcb19, 0xcb18, 0xcb18, 
+    0xcb17, 0xcb16, 0xcb15, 0xcb15, 0xcb14, 0xcb13, 0xcb13, 0xcb12, 
+    0xcb11, 0xcb10, 0xcb10, 0xcb0f, 0xcb0e, 0xcb0d, 0xcb0d, 0xcb0c, 
+    0xcb0b, 0xcb0b, 0xcb0a, 0xcb09, 0xcb08, 0xcb08, 0xcb07, 0xcb06, 
+    0xcb05, 0xcb05, 0xcb04, 0xcb03, 0xcb03, 0xcb02, 0xcb01, 0xcb00, 
+    0xcb00, 0xcaff, 0xcafe, 0xcafe, 0xcafd, 0xcafc, 0xcafb, 0xcafb, 
+    0xcafa, 0xcaf9, 0xcaf9, 0xcaf8, 0xcaf7, 0xcaf6, 0xcaf6, 0xcaf5, 
+    0xcaf4, 0xcaf4, 0xcaf3, 0xcaf2, 0xcaf1, 0xcaf1, 0xcaf0, 0xcaef, 
+    0xcaef, 0xcaee, 0xcaed, 0xcaec, 0xcaec, 0xcaeb, 0xcaea, 0xcaea, 
+    0xcae9, 0xcae8, 0xcae8, 0xcae7, 0xcae6, 0xcae5, 0xcae5, 0xcae4, 
+    0xcae3, 0xcae3, 0xcae2, 0xcae1, 0xcae1, 0xcae0, 0xcadf, 0xcade, 
+    0xcade, 0xcadd, 0xcadc, 0xcadc, 0xcadb, 0xcada, 0xcada, 0xcad9, 
+    0xcad8, 0xcad7, 0xcad7, 0xcad6, 0xcad5, 0xcad5, 0xcad4, 0xcad3, 
+    0xcad3, 0xcad2, 0xcad1, 0xcad1, 0xcad0, 0xcacf, 0xcacf, 0xcace, 
+    0xcacd, 0xcacc, 0xcacc, 0xcacb, 0xcaca, 0xcaca, 0xcac9, 0xcac8, 
+    0xcac8, 0xcac7, 0xcac6, 0xcac6, 0xcac5, 0xcac4, 0xcac4, 0xcac3, 
+    0xcac2, 0xcac2, 0xcac1, 0xcac0, 0xcac0, 0xcabf, 0xcabe, 0xcabe, 
+    0xcabd, 0xcabc, 0xcabc, 0xcabb, 0xcaba, 0xcaba, 0xcab9, 0xcab8, 
+    0xcab7, 0xcab7, 0xcab6, 0xcab5, 0xcab5, 0xcab4, 0xcab3, 0xcab3, 
+    0xcab2, 0xcab1, 0xcab1, 0xcab0, 0xcaaf, 0xcaaf, 0xcaae, 0xcaad, 
+    0xcaad, 0xcaac, 0xcaac, 0xcaab, 0xcaaa, 0xcaaa, 0xcaa9, 0xcaa8, 
+    0xcaa8, 0xcaa7, 0xcaa6, 0xcaa6, 0xcaa5, 0xcaa4, 0xcaa4, 0xcaa3, 
+    0xcaa2, 0xcaa2, 0xcaa1, 0xcaa0, 0xcaa0, 0xca9f, 0xca9e, 0xca9e, 
+    0xca9d, 0xca9c, 0xca9c, 0xca9b, 0xca9a, 0xca9a, 0xca99, 0xca98, 
+    0xca98, 0xca97, 0xca97, 0xca96, 0xca95, 0xca95, 0xca94, 0xca93, 
+    0xca93, 0xca92, 0xca91, 0xca91, 0xca90, 0xca8f, 0xca8f, 0xca8e, 
+    0xca8d, 0xca8d, 0xca8c, 0xca8c, 0xca8b, 0xca8a, 0xca8a, 0xca89, 
+    0xca88, 0xca88, 0xca87, 0xca86, 0xca86, 0xca85, 0xca85, 0xca84, 
+    0xca83, 0xca83, 0xca82, 0xca81, 0xca81, 0xca80, 0xca7f, 0xca7f, 
+    0xca7e, 0xca7e, 0xca7d, 0xca7c, 0xca7c, 0xca7b, 0xca7a, 0xca7a, 
+    0xca79, 0xca78, 0xca78, 0xca77, 0xca77, 0xca76, 0xca75, 0xca75, 
+    0xca74, 0xca73, 0xca73, 0xca72, 0xca72, 0xca71, 0xca70, 0xca70, 
+    0xca6f, 0xca6e, 0xca6e, 0xca6d, 0xca6d, 0xca6c, 0xca6b, 0xca6b, 
+    0xca6a, 0xca69, 0xca69, 0xca68, 0xca68, 0xca67, 0xca66, 0xca66, 
+    0xca65, 0xca65, 0xca64, 0xca63, 0xca63, 0xca62, 0xca61, 0xca61, 
+    0xca60, 0xca60, 0xca5f, 0xca5e, 0xca5e, 0xca5d, 0xca5d, 0xca5c, 
+    0xca5b, 0xca5b, 0xca5a, 0xca59, 0xca59, 0xca58, 0xca58, 0xca57, 
+    0xca56, 0xca56, 0xca55, 0xca55, 0xca54, 0xca53, 0xca53, 0xca52, 
+    0xca52, 0xca51, 0xca50, 0xca50, 0xca4f, 0xca4e, 0xca4e, 0xca4d, 
+    0xca4d, 0xca4c, 0xca4b, 0xca4b, 0xca4a, 0xca4a, 0xca49, 0xca48, 
+    0xca48, 0xca47, 0xca47, 0xca46, 0xca45, 0xca45, 0xca44, 0xca44, 
+    0xca43, 0xca42, 0xca42, 0xca41, 0xca41, 0xca40, 0xca3f, 0xca3f, 
+    0xca3e, 0xca3e, 0xca3d, 0xca3d, 0xca3c, 0xca3b, 0xca3b, 0xca3a, 
+    0xca3a, 0xca39, 0xca38, 0xca38, 0xca37, 0xca37, 0xca36, 0xca35, 
+    0xca35, 0xca34, 0xca34, 0xca33, 0xca32, 0xca32, 0xca31, 0xca31, 
+    0xca30, 0xca30, 0xca2f, 0xca2e, 0xca2e, 0xca2d, 0xca2d, 0xca2c, 
+    0xca2b, 0xca2b, 0xca2a, 0xca2a, 0xca29, 0xca28, 0xca28, 0xca27, 
+    0xca27, 0xca26, 0xca26, 0xca25, 0xca24, 0xca24, 0xca23, 0xca23, 
+    0xca22, 0xca22, 0xca21, 0xca20, 0xca20, 0xca1f, 0xca1f, 0xca1e, 
+    0xca1d, 0xca1d, 0xca1c, 0xca1c, 0xca1b, 0xca1b, 0xca1a, 0xca19, 
+    0xca19, 0xca18, 0xca18, 0xca17, 0xca17, 0xca16, 0xca15, 0xca15, 
+    0xca14, 0xca14, 0xca13, 0xca13, 0xca12, 0xca11, 0xca11, 0xca10, 
+    0xca10, 0xca0f, 0xca0f, 0xca0e, 0xca0d, 0xca0d, 0xca0c, 0xca0c, 
+    0xca0b, 0xca0b, 0xca0a, 0xca0a, 0xca09, 0xca08, 0xca08, 0xca07, 
+    0xca07, 0xca06, 0xca06, 0xca05, 0xca04, 0xca04, 0xca03, 0xca03, 
+    0xca02, 0xca02, 0xca01, 0xca00, 0xca00, 0xc9ff, 0xc9ff, 0xc9fe, 
+    0xc9fe, 0xc9fd, 0xc9fd, 0xc9fc, 0xc9fb, 0xc9fb, 0xc9fa, 0xc9fa, 
+    0xc9f9, 0xc9f9, 0xc9f8, 0xc9f8, 0xc9f7, 0xc9f6, 0xc9f6, 0xc9f5, 
+    0xc9f5, 0xc9f4, 0xc9f4, 0xc9f3, 0xc9f3, 0xc9f2, 0xc9f1, 0xc9f1, 
+    0xc9f0, 0xc9f0, 0xc9ef, 0xc9ef, 0xc9ee, 0xc9ee, 0xc9ed, 0xc9ed, 
+    0xc9ec, 0xc9eb, 0xc9eb, 0xc9ea, 0xc9ea, 0xc9e9, 0xc9e9, 0xc9e8, 
+    0xc9e8, 0xc9e7, 0xc9e6, 0xc9e6, 0xc9e5, 0xc9e5, 0xc9e4, 0xc9e4, 
+    0xc9e3, 0xc9e3, 0xc9e2, 0xc9e2, 0xc9e1, 0xc9e0, 0xc9e0, 0xc9df, 
+    0xc9df, 0xc9de, 0xc9de, 0xc9dd, 0xc9dd, 0xc9dc, 0xc9dc, 0xc9db, 
+    0xc9db, 0xc9da, 0xc9d9, 0xc9d9, 0xc9d8, 0xc9d8, 0xc9d7, 0xc9d7, 
+    0xc9d6, 0xc9d6, 0xc9d5, 0xc9d5, 0xc9d4, 0xc9d4, 0xc9d3, 0xc9d2, 
+    0xc9d2, 0xc9d1, 0xc9d1, 0xc9d0, 0xc9d0, 0xc9cf, 0xc9cf, 0xc9ce, 
+    0xc9ce, 0xc9cd, 0xc9cd, 0xc9cc, 0xc9cc, 0xc9cb, 0xc9ca, 0xc9ca, 
+    0xc9c9, 0xc9c9, 0xc9c8, 0xc9c8, 0xc9c7, 0xc9c7, 0xc9c6, 0xc9c6, 
+    0xc9c5, 0xc9c5, 0xc9c4, 0xc9c4, 0xc9c3, 0xc9c3, 0xc9c2, 0xc9c1, 
+    0xc9c1, 0xc9c0, 0xc9c0, 0xc9bf, 0xc9bf, 0xc9be, 0xc9be, 0xc9bd, 
+    0xc9bd, 0xc9bc, 0xc9bc, 0xc9bb, 0xc9bb, 0xc9ba, 0xc9ba, 0xc9b9, 
+    0xc9b9, 0xc9b8, 0xc9b7, 0xc9b7, 0xc9b6, 0xc9b6, 0xc9b5, 0xc9b5, 
+    0xc9b4, 0xc9b4, 0xc9b3, 0xc9b3, 0xc9b2, 0xc9b2, 0xc9b1, 0xc9b1, 
+    0xc9b0, 0xc9b0, 0xc9af, 0xc9af, 0xc9ae, 0xc9ae, 0xc9ad, 0xc9ad, 
+    0xc9ac, 0xc9ac, 0xc9ab, 0xc9ab, 0xc9aa, 0xc9a9, 0xc9a9, 0xc9a8, 
+    0xc9a8, 0xc9a7, 0xc9a7, 0xc9a6, 0xc9a6, 0xc9a5, 0xc9a5, 0xc9a4, 
+    0xc9a4, 0xc9a3, 0xc9a3, 0xc9a2, 0xc9a2, 0xc9a1, 0xc9a1, 0xc9a0, 
+    0xc9a0, 0xc99f, 0xc99f, 0xc99e, 0xc99e, 0xc99d, 0xc99d, 0xc99c, 
+    0xc99c, 0xc99b, 0xc99b, 0xc99a, 0xc99a, 0xc999, 0xc999, 0xc998, 
+    0xc998, 0xc997, 0xc997, 0xc996, 0xc996, 0xc995, 0xc995, 0xc994, 
+    0xc994, 0xc993, 0xc993, 0xc992, 0xc992, 0xc991, 0xc991, 0xc990, 
+    0xc990, 0xc98f, 0xc98f, 0xc98e, 0xc98e, 0xc98d, 0xc98d, 0xc98c, 
+    0xc98c, 0xc98b, 0xc98a, 0xc989, 0xc988, 0xc987, 0xc986, 0xc985, 
+    0xc984, 0xc983, 0xc982, 0xc981, 0xc980, 0xc97f, 0xc97e, 0xc97d, 
+    0xc97c, 0xc97b, 0xc97a, 0xc979, 0xc978, 0xc977, 0xc976, 0xc975, 
+    0xc974, 0xc973, 0xc972, 0xc971, 0xc970, 0xc96f, 0xc96e, 0xc96d, 
+    0xc96c, 0xc96b, 0xc96a, 0xc969, 0xc968, 0xc967, 0xc966, 0xc965, 
+    0xc964, 0xc963, 0xc962, 0xc961, 0xc960, 0xc960, 0xc95f, 0xc95e, 
+    0xc95d, 0xc95c, 0xc95b, 0xc95a, 0xc959, 0xc958, 0xc957, 0xc956, 
+    0xc955, 0xc954, 0xc953, 0xc952, 0xc951, 0xc950, 0xc94f, 0xc94e, 
+    0xc94d, 0xc94d, 0xc94c, 0xc94b, 0xc94a, 0xc949, 0xc948, 0xc947, 
+    0xc946, 0xc945, 0xc944, 0xc943, 0xc942, 0xc941, 0xc940, 0xc93f, 
+    0xc93f, 0xc93e, 0xc93d, 0xc93c, 0xc93b, 0xc93a, 0xc939, 0xc938, 
+    0xc937, 0xc936, 0xc935, 0xc934, 0xc933, 0xc933, 0xc932, 0xc931, 
+    0xc930, 0xc92f, 0xc92e, 0xc92d, 0xc92c, 0xc92b, 0xc92a, 0xc929, 
+    0xc929, 0xc928, 0xc927, 0xc926, 0xc925, 0xc924, 0xc923, 0xc922, 
+    0xc921, 0xc920, 0xc91f, 0xc91f, 0xc91e, 0xc91d, 0xc91c, 0xc91b, 
+    0xc91a, 0xc919, 0xc918, 0xc917, 0xc917, 0xc916, 0xc915, 0xc914, 
+    0xc913, 0xc912, 0xc911, 0xc910, 0xc90f, 0xc90f, 0xc90e, 0xc90d, 
+    0xc90c, 0xc90b, 0xc90a, 0xc909, 0xc908, 0xc907, 0xc907, 0xc906, 
+    0xc905, 0xc904, 0xc903, 0xc902, 0xc901, 0xc900, 0xc900, 0xc8ff, 
+    0xc8fe, 0xc8fd, 0xc8fc, 0xc8fb, 0xc8fa, 0xc8f9, 0xc8f9, 0xc8f8, 
+    0xc8f7, 0xc8f6, 0xc8f5, 0xc8f4, 0xc8f3, 0xc8f3, 0xc8f2, 0xc8f1, 
+    0xc8f0, 0xc8ef, 0xc8ee, 0xc8ed, 0xc8ed, 0xc8ec, 0xc8eb, 0xc8ea, 
+    0xc8e9, 0xc8e8, 0xc8e7, 0xc8e7, 0xc8e6, 0xc8e5, 0xc8e4, 0xc8e3, 
+    0xc8e2, 0xc8e2, 0xc8e1, 0xc8e0, 0xc8df, 0xc8de, 0xc8dd, 0xc8dc, 
+    0xc8dc, 0xc8db, 0xc8da, 0xc8d9, 0xc8d8, 0xc8d7, 0xc8d7, 0xc8d6, 
+    0xc8d5, 0xc8d4, 0xc8d3, 0xc8d2, 0xc8d2, 0xc8d1, 0xc8d0, 0xc8cf, 
+    0xc8ce, 0xc8cd, 0xc8cd, 0xc8cc, 0xc8cb, 0xc8ca, 0xc8c9, 0xc8c8, 
+    0xc8c8, 0xc8c7, 0xc8c6, 0xc8c5, 0xc8c4, 0xc8c3, 0xc8c3, 0xc8c2, 
+    0xc8c1, 0xc8c0, 0xc8bf, 0xc8bf, 0xc8be, 0xc8bd, 0xc8bc, 0xc8bb, 
+    0xc8ba, 0xc8ba, 0xc8b9, 0xc8b8, 0xc8b7, 0xc8b6, 0xc8b6, 0xc8b5, 
+    0xc8b4, 0xc8b3, 0xc8b2, 0xc8b2, 0xc8b1, 0xc8b0, 0xc8af, 0xc8ae, 
+    0xc8ad, 0xc8ad, 0xc8ac, 0xc8ab, 0xc8aa, 0xc8a9, 0xc8a9, 0xc8a8, 
+    0xc8a7, 0xc8a6, 0xc8a5, 0xc8a5, 0xc8a4, 0xc8a3, 0xc8a2, 0xc8a1, 
+    0xc8a1, 0xc8a0, 0xc89f, 0xc89e, 0xc89e, 0xc89d, 0xc89c, 0xc89b, 
+    0xc89a, 0xc89a, 0xc899, 0xc898, 0xc897, 0xc896, 0xc896, 0xc895, 
+    0xc894, 0xc893, 0xc892, 0xc892, 0xc891, 0xc890, 0xc88f, 0xc88f, 
+    0xc88e, 0xc88d, 0xc88c, 0xc88b, 0xc88b, 0xc88a, 0xc889, 0xc888, 
+    0xc888, 0xc887, 0xc886, 0xc885, 0xc884, 0xc884, 0xc883, 0xc882, 
+    0xc881, 0xc881, 0xc880, 0xc87f, 0xc87e, 0xc87e, 0xc87d, 0xc87c, 
+    0xc87b, 0xc87a, 0xc87a, 0xc879, 0xc878, 0xc877, 0xc877, 0xc876, 
+    0xc875, 0xc874, 0xc874, 0xc873, 0xc872, 0xc871, 0xc871, 0xc870, 
+    0xc86f, 0xc86e, 0xc86e, 0xc86d, 0xc86c, 0xc86b, 0xc86a, 0xc86a, 
+    0xc869, 0xc868, 0xc867, 0xc867, 0xc866, 0xc865, 0xc864, 0xc864, 
+    0xc863, 0xc862, 0xc861, 0xc861, 0xc860, 0xc85f, 0xc85e, 0xc85e, 
+    0xc85d, 0xc85c, 0xc85c, 0xc85b, 0xc85a, 0xc859, 0xc859, 0xc858, 
+    0xc857, 0xc856, 0xc856, 0xc855, 0xc854, 0xc853, 0xc853, 0xc852, 
+    0xc851, 0xc850, 0xc850, 0xc84f, 0xc84e, 0xc84e, 0xc84d, 0xc84c, 
+    0xc84b, 0xc84b, 0xc84a, 0xc849, 0xc848, 0xc848, 0xc847, 0xc846, 
+    0xc845, 0xc845, 0xc844, 0xc843, 0xc843, 0xc842, 0xc841, 0xc840, 
+    0xc840, 0xc83f, 0xc83e, 0xc83d, 0xc83d, 0xc83c, 0xc83b, 0xc83b, 
+    0xc83a, 0xc839, 0xc838, 0xc838, 0xc837, 0xc836, 0xc836, 0xc835, 
+    0xc834, 0xc833, 0xc833, 0xc832, 0xc831, 0xc831, 0xc830, 0xc82f, 
+    0xc82e, 0xc82e, 0xc82d, 0xc82c, 0xc82c, 0xc82b, 0xc82a, 0xc829, 
+    0xc829, 0xc828, 0xc827, 0xc827, 0xc826, 0xc825, 0xc825, 0xc824, 
+    0xc823, 0xc822, 0xc822, 0xc821, 0xc820, 0xc820, 0xc81f, 0xc81e, 
+    0xc81e, 0xc81d, 0xc81c, 0xc81b, 0xc81b, 0xc81a, 0xc819, 0xc819, 
+    0xc818, 0xc817, 0xc817, 0xc816, 0xc815, 0xc814, 0xc814, 0xc813, 
+    0xc812, 0xc812, 0xc811, 0xc810, 0xc810, 0xc80f, 0xc80e, 0xc80e, 
+    0xc80d, 0xc80c, 0xc80c, 0xc80b, 0xc80a, 0xc809, 0xc809, 0xc808, 
+    0xc807, 0xc807, 0xc806, 0xc805, 0xc805, 0xc804, 0xc803, 0xc803, 
+    0xc802, 0xc801, 0xc801, 0xc800, 0xc7fe, 0xc7fd, 0xc7fc, 0xc7fa, 
+    0xc7f9, 0xc7f8, 0xc7f6, 0xc7f5, 0xc7f4, 0xc7f2, 0xc7f1, 0xc7f0, 
+    0xc7ee, 0xc7ed, 0xc7eb, 0xc7ea, 0xc7e9, 0xc7e7, 0xc7e6, 0xc7e5, 
+    0xc7e3, 0xc7e2, 0xc7e1, 0xc7df, 0xc7de, 0xc7dd, 0xc7db, 0xc7da, 
+    0xc7d9, 0xc7d7, 0xc7d6, 0xc7d5, 0xc7d3, 0xc7d2, 0xc7d1, 0xc7cf, 
+    0xc7ce, 0xc7cd, 0xc7cb, 0xc7ca, 0xc7c9, 0xc7c7, 0xc7c6, 0xc7c5, 
+    0xc7c4, 0xc7c2, 0xc7c1, 0xc7c0, 0xc7be, 0xc7bd, 0xc7bc, 0xc7ba, 
+    0xc7b9, 0xc7b8, 0xc7b6, 0xc7b5, 0xc7b4, 0xc7b2, 0xc7b1, 0xc7b0, 
+    0xc7af, 0xc7ad, 0xc7ac, 0xc7ab, 0xc7a9, 0xc7a8, 0xc7a7, 0xc7a5, 
+    0xc7a4, 0xc7a3, 0xc7a1, 0xc7a0, 0xc79f, 0xc79e, 0xc79c, 0xc79b, 
+    0xc79a, 0xc798, 0xc797, 0xc796, 0xc795, 0xc793, 0xc792, 0xc791, 
+    0xc78f, 0xc78e, 0xc78d, 0xc78c, 0xc78a, 0xc789, 0xc788, 0xc786, 
+    0xc785, 0xc784, 0xc783, 0xc781, 0xc780, 0xc77f, 0xc77d, 0xc77c, 
+    0xc77b, 0xc77a, 0xc778, 0xc777, 0xc776, 0xc775, 0xc773, 0xc772, 
+    0xc771, 0xc76f, 0xc76e, 0xc76d, 0xc76c, 0xc76a, 0xc769, 0xc768, 
+    0xc767, 0xc765, 0xc764, 0xc763, 0xc762, 0xc760, 0xc75f, 0xc75e, 
+    0xc75d, 0xc75b, 0xc75a, 0xc759, 0xc758, 0xc756, 0xc755, 0xc754, 
+    0xc753, 0xc751, 0xc750, 0xc74f, 0xc74e, 0xc74c, 0xc74b, 0xc74a, 
+    0xc749, 0xc747, 0xc746, 0xc745, 0xc744, 0xc742, 0xc741, 0xc740, 
+    0xc73f, 0xc73d, 0xc73c, 0xc73b, 0xc73a, 0xc739, 0xc737, 0xc736, 
+    0xc735, 0xc734, 0xc732, 0xc731, 0xc730, 0xc72f, 0xc72d, 0xc72c, 
+    0xc72b, 0xc72a, 0xc729, 0xc727, 0xc726, 0xc725, 0xc724, 0xc722, 
+    0xc721, 0xc720, 0xc71f, 0xc71e, 0xc71c, 0xc71b, 0xc71a, 0xc719, 
+    0xc717, 0xc716, 0xc715, 0xc714, 0xc713, 0xc711, 0xc710, 0xc70f, 
+    0xc70e, 0xc70d, 0xc70b, 0xc70a, 0xc709, 0xc708, 0xc707, 0xc705, 
+    0xc704, 0xc703, 0xc702, 0xc701, 0xc6ff, 0xc6fe, 0xc6fd, 0xc6fc, 
+    0xc6fb, 0xc6f9, 0xc6f8, 0xc6f7, 0xc6f6, 0xc6f5, 0xc6f3, 0xc6f2, 
+    0xc6f1, 0xc6f0, 0xc6ef, 0xc6ed, 0xc6ec, 0xc6eb, 0xc6ea, 0xc6e9, 
+    0xc6e8, 0xc6e6, 0xc6e5, 0xc6e4, 0xc6e3, 0xc6e2, 0xc6e0, 0xc6df, 
+    0xc6de, 0xc6dd, 0xc6dc, 0xc6db, 0xc6d9, 0xc6d8, 0xc6d7, 0xc6d6, 
+    0xc6d5, 0xc6d3, 0xc6d2, 0xc6d1, 0xc6d0, 0xc6cf, 0xc6ce, 0xc6cc, 
+    0xc6cb, 0xc6ca, 0xc6c9, 0xc6c8, 0xc6c7, 0xc6c5, 0xc6c4, 0xc6c3, 
+    0xc6c2, 0xc6c1, 0xc6c0, 0xc6be, 0xc6bd, 0xc6bc, 0xc6bb, 0xc6ba, 
+    0xc6b9, 0xc6b7, 0xc6b6, 0xc6b5, 0xc6b4, 0xc6b3, 0xc6b2, 0xc6b1, 
+    0xc6af, 0xc6ae, 0xc6ad, 0xc6ac, 0xc6ab, 0xc6aa, 0xc6a8, 0xc6a7, 
+    0xc6a6, 0xc6a5, 0xc6a4, 0xc6a3, 0xc6a2, 0xc6a0, 0xc69f, 0xc69e, 
+    0xc69d, 0xc69c, 0xc69b, 0xc69a, 0xc698, 0xc697, 0xc696, 0xc695, 
+    0xc694, 0xc693, 0xc692, 0xc691, 0xc68f, 0xc68e, 0xc68d, 0xc68c, 
+    0xc68b, 0xc68a, 0xc689, 0xc687, 0xc686, 0xc685, 0xc684, 0xc683, 
+    0xc682, 0xc681, 0xc680, 0xc67e, 0xc67d, 0xc67c, 0xc67b, 0xc67a, 
+    0xc679, 0xc678, 0xc677, 0xc675, 0xc674, 0xc673, 0xc672, 0xc671, 
+    0xc670, 0xc66f, 0xc66e, 0xc66c, 0xc66b, 0xc66a, 0xc669, 0xc668, 
+    0xc667, 0xc666, 0xc665, 0xc664, 0xc662, 0xc661, 0xc660, 0xc65f, 
+    0xc65e, 0xc65d, 0xc65c, 0xc65b, 0xc65a, 0xc658, 0xc657, 0xc656, 
+    0xc655, 0xc654, 0xc653, 0xc652, 0xc651, 0xc650, 0xc64f, 0xc64d, 
+    0xc64c, 0xc64b, 0xc64a, 0xc649, 0xc648, 0xc647, 0xc646, 0xc645, 
+    0xc644, 0xc642, 0xc641, 0xc640, 0xc63f, 0xc63e, 0xc63d, 0xc63c, 
+    0xc63b, 0xc63a, 0xc639, 0xc638, 0xc637, 0xc635, 0xc634, 0xc633, 
+    0xc632, 0xc631, 0xc630, 0xc62f, 0xc62e, 0xc62d, 0xc62c, 0xc62b, 
+    0xc62a, 0xc628, 0xc627, 0xc626, 0xc625, 0xc624, 0xc623, 0xc622, 
+    0xc621, 0xc620, 0xc61f, 0xc61e, 0xc61d, 0xc61c, 0xc61a, 0xc619, 
+    0xc618, 0xc617, 0xc616, 0xc615, 0xc614, 0xc613, 0xc612, 0xc611, 
+    0xc610, 0xc60f, 0xc60e, 0xc60d, 0xc60b, 0xc60a, 0xc609, 0xc608, 
+    0xc607, 0xc606, 0xc605, 0xc604, 0xc603, 0xc602, 0xc601, 0xc600, 
+    0xc5ff, 0xc5fe, 0xc5fd, 0xc5fc, 0xc5fb, 0xc5f9, 0xc5f8, 0xc5f7, 
+    0xc5f6, 0xc5f5, 0xc5f4, 0xc5f3, 0xc5f2, 0xc5f1, 0xc5f0, 0xc5ef, 
+    0xc5ee, 0xc5ed, 0xc5ec, 0xc5eb, 0xc5ea, 0xc5e9, 0xc5e8, 0xc5e7, 
+    0xc5e6, 0xc5e4, 0xc5e3, 0xc5e2, 0xc5e1, 0xc5e0, 0xc5df, 0xc5de, 
+    0xc5dd, 0xc5dc, 0xc5db, 0xc5da, 0xc5d9, 0xc5d8, 0xc5d7, 0xc5d6, 
+    0xc5d5, 0xc5d4, 0xc5d3, 0xc5d2, 0xc5d1, 0xc5d0, 0xc5cf, 0xc5ce, 
+    0xc5cd, 0xc5cc, 0xc5cb, 0xc5c9, 0xc5c8, 0xc5c7, 0xc5c6, 0xc5c5, 
+    0xc5c4, 0xc5c3, 0xc5c2, 0xc5c1, 0xc5c0, 0xc5bf, 0xc5be, 0xc5bd, 
+    0xc5bc, 0xc5bb, 0xc5ba, 0xc5b9, 0xc5b8, 0xc5b7, 0xc5b6, 0xc5b5, 
+    0xc5b4, 0xc5b3, 0xc5b2, 0xc5b1, 0xc5b0, 0xc5af, 0xc5ae, 0xc5ad, 
+    0xc5ac, 0xc5ab, 0xc5aa, 0xc5a9, 0xc5a8, 0xc5a7, 0xc5a6, 0xc5a5, 
+    0xc5a4, 0xc5a3, 0xc5a2, 0xc5a1, 0xc5a0, 0xc59f, 0xc59e, 0xc59d, 
+    0xc59c, 0xc59b, 0xc59a, 0xc599, 0xc598, 0xc597, 0xc596, 0xc595, 
+    0xc594, 0xc593, 0xc592, 0xc591, 0xc590, 0xc58f, 0xc58e, 0xc58d, 
+    0xc58c, 0xc58a, 0xc588, 0xc586, 0xc584, 0xc582, 0xc580, 0xc57e, 
+    0xc57c, 0xc57a, 0xc578, 0xc576, 0xc574, 0xc572, 0xc570, 0xc56e, 
+    0xc56c, 0xc56a, 0xc568, 0xc566, 0xc564, 0xc562, 0xc560, 0xc55e, 
+    0xc55c, 0xc55a, 0xc558, 0xc556, 0xc554, 0xc552, 0xc550, 0xc54e, 
+    0xc54d, 0xc54b, 0xc549, 0xc547, 0xc545, 0xc543, 0xc541, 0xc53f, 
+    0xc53d, 0xc53b, 0xc539, 0xc537, 0xc535, 0xc533, 0xc532, 0xc530, 
+    0xc52e, 0xc52c, 0xc52a, 0xc528, 0xc526, 0xc524, 0xc522, 0xc520, 
+    0xc51f, 0xc51d, 0xc51b, 0xc519, 0xc517, 0xc515, 0xc513, 0xc511, 
+    0xc50f, 0xc50e, 0xc50c, 0xc50a, 0xc508, 0xc506, 0xc504, 0xc502, 
+    0xc500, 0xc4ff, 0xc4fd, 0xc4fb, 0xc4f9, 0xc4f7, 0xc4f5, 0xc4f3, 
+    0xc4f2, 0xc4f0, 0xc4ee, 0xc4ec, 0xc4ea, 0xc4e8, 0xc4e6, 0xc4e5, 
+    0xc4e3, 0xc4e1, 0xc4df, 0xc4dd, 0xc4db, 0xc4da, 0xc4d8, 0xc4d6, 
+    0xc4d4, 0xc4d2, 0xc4d0, 0xc4cf, 0xc4cd, 0xc4cb, 0xc4c9, 0xc4c7, 
+    0xc4c5, 0xc4c4, 0xc4c2, 0xc4c0, 0xc4be, 0xc4bc, 0xc4bb, 0xc4b9, 
+    0xc4b7, 0xc4b5, 0xc4b3, 0xc4b2, 0xc4b0, 0xc4ae, 0xc4ac, 0xc4aa, 
+    0xc4a9, 0xc4a7, 0xc4a5, 0xc4a3, 0xc4a1, 0xc4a0, 0xc49e, 0xc49c, 
+    0xc49a, 0xc499, 0xc497, 0xc495, 0xc493, 0xc491, 0xc490, 0xc48e, 
+    0xc48c, 0xc48a, 0xc489, 0xc487, 0xc485, 0xc483, 0xc482, 0xc480, 
+    0xc47e, 0xc47c, 0xc47b, 0xc479, 0xc477, 0xc475, 0xc474, 0xc472, 
+    0xc470, 0xc46e, 0xc46d, 0xc46b, 0xc469, 0xc467, 0xc466, 0xc464, 
+    0xc462, 0xc461, 0xc45f, 0xc45d, 0xc45b, 0xc45a, 0xc458, 0xc456, 
+    0xc454, 0xc453, 0xc451, 0xc44f, 0xc44e, 0xc44c, 0xc44a, 0xc448, 
+    0xc447, 0xc445, 0xc443, 0xc442, 0xc440, 0xc43e, 0xc43d, 0xc43b, 
+    0xc439, 0xc437, 0xc436, 0xc434, 0xc432, 0xc431, 0xc42f, 0xc42d, 
+    0xc42c, 0xc42a, 0xc428, 0xc427, 0xc425, 0xc423, 0xc422, 0xc420, 
+    0xc41e, 0xc41d, 0xc41b, 0xc419, 0xc418, 0xc416, 0xc414, 0xc413, 
+    0xc411, 0xc40f, 0xc40e, 0xc40c, 0xc40a, 0xc409, 0xc407, 0xc405, 
+    0xc404, 0xc402, 0xc400, 0xc3fd, 0xc3fa, 0xc3f7, 0xc3f3, 0xc3f0, 
+    0xc3ed, 0xc3ea, 0xc3e6, 0xc3e3, 0xc3e0, 0xc3dc, 0xc3d9, 0xc3d6, 
+    0xc3d3, 0xc3cf, 0xc3cc, 0xc3c9, 0xc3c6, 0xc3c2, 0xc3bf, 0xc3bc, 
+    0xc3b9, 0xc3b5, 0xc3b2, 0xc3af, 0xc3ac, 0xc3a8, 0xc3a5, 0xc3a2, 
+    0xc39f, 0xc39c, 0xc398, 0xc395, 0xc392, 0xc38f, 0xc38c, 0xc388, 
+    0xc385, 0xc382, 0xc37f, 0xc37c, 0xc378, 0xc375, 0xc372, 0xc36f, 
+    0xc36c, 0xc368, 0xc365, 0xc362, 0xc35f, 0xc35c, 0xc359, 0xc355, 
+    0xc352, 0xc34f, 0xc34c, 0xc349, 0xc346, 0xc342, 0xc33f, 0xc33c, 
+    0xc339, 0xc336, 0xc333, 0xc330, 0xc32d, 0xc329, 0xc326, 0xc323, 
+    0xc320, 0xc31d, 0xc31a, 0xc317, 0xc314, 0xc310, 0xc30d, 0xc30a, 
+    0xc307, 0xc304, 0xc301, 0xc2fe, 0xc2fb, 0xc2f8, 0xc2f5, 0xc2f1, 
+    0xc2ee, 0xc2eb, 0xc2e8, 0xc2e5, 0xc2e2, 0xc2df, 0xc2dc, 0xc2d9, 
+    0xc2d6, 0xc2d3, 0xc2d0, 0xc2cd, 0xc2c9, 0xc2c6, 0xc2c3, 0xc2c0, 
+    0xc2bd, 0xc2ba, 0xc2b7, 0xc2b4, 0xc2b1, 0xc2ae, 0xc2ab, 0xc2a8, 
+    0xc2a5, 0xc2a2, 0xc29f, 0xc29c, 0xc299, 0xc296, 0xc293, 0xc290, 
+    0xc28d, 0xc28a, 0xc287, 0xc284, 0xc281, 0xc27e, 0xc27b, 0xc278, 
+    0xc275, 0xc272, 0xc26f, 0xc26c, 0xc269, 0xc266, 0xc263, 0xc260, 
+    0xc25d, 0xc25a, 0xc257, 0xc254, 0xc251, 0xc24e, 0xc24b, 0xc248, 
+    0xc245, 0xc242, 0xc23f, 0xc23c, 0xc239, 0xc236, 0xc233, 0xc230, 
+    0xc22e, 0xc22b, 0xc228, 0xc225, 0xc222, 0xc21f, 0xc21c, 0xc219, 
+    0xc216, 0xc213, 0xc210, 0xc20d, 0xc20a, 0xc207, 0xc205, 0xc202, 
+    0xc1ff, 0xc1fc, 0xc1f9, 0xc1f6, 0xc1f3, 0xc1f0, 0xc1ed, 0xc1ea, 
+    0xc1e8, 0xc1e5, 0xc1e2, 0xc1df, 0xc1dc, 0xc1d9, 0xc1d6, 0xc1d3, 
+    0xc1d0, 0xc1ce, 0xc1cb, 0xc1c8, 0xc1c5, 0xc1c2, 0xc1bf, 0xc1bc, 
+    0xc1ba, 0xc1b7, 0xc1b4, 0xc1b1, 0xc1ae, 0xc1ab, 0xc1a8, 0xc1a6, 
+    0xc1a3, 0xc1a0, 0xc19d, 0xc19a, 0xc197, 0xc194, 0xc192, 0xc18f, 
+    0xc18c, 0xc189, 0xc186, 0xc184, 0xc181, 0xc17e, 0xc17b, 0xc178, 
+    0xc175, 0xc173, 0xc170, 0xc16d, 0xc16a, 0xc167, 0xc165, 0xc162, 
+    0xc15f, 0xc15c, 0xc159, 0xc157, 0xc154, 0xc151, 0xc14e, 0xc14b, 
+    0xc149, 0xc146, 0xc143, 0xc140, 0xc13e, 0xc13b, 0xc138, 0xc135, 
+    0xc132, 0xc130, 0xc12d, 0xc12a, 0xc127, 0xc125, 0xc122, 0xc11f, 
+    0xc11c, 0xc11a, 0xc117, 0xc114, 0xc111, 0xc10f, 0xc10c, 0xc109, 
+    0xc106, 0xc104, 0xc101, 0xc0fe, 0xc0fb, 0xc0f9, 0xc0f6, 0xc0f3, 
+    0xc0f1, 0xc0ee, 0xc0eb, 0xc0e8, 0xc0e6, 0xc0e3, 0xc0e0, 0xc0de, 
+    0xc0db, 0xc0d8, 0xc0d5, 0xc0d3, 0xc0d0, 0xc0cd, 0xc0cb, 0xc0c8, 
+    0xc0c5, 0xc0c3, 0xc0c0, 0xc0bd, 0xc0ba, 0xc0b8, 0xc0b5, 0xc0b2, 
+    0xc0b0, 0xc0ad, 0xc0aa, 0xc0a8, 0xc0a5, 0xc0a2, 0xc0a0, 0xc09d, 
+    0xc09a, 0xc098, 0xc095, 0xc092, 0xc090, 0xc08d, 0xc08a, 0xc088, 
+    0xc085, 0xc082, 0xc080, 0xc07d, 0xc07a, 0xc078, 0xc075, 0xc073, 
+    0xc070, 0xc06d, 0xc06b, 0xc068, 0xc065, 0xc063, 0xc060, 0xc05d, 
+    0xc05b, 0xc058, 0xc056, 0xc053, 0xc050, 0xc04e, 0xc04b, 0xc049, 
+    0xc046, 0xc043, 0xc041, 0xc03e, 0xc03b, 0xc039, 0xc036, 0xc034, 
+    0xc031, 0xc02e, 0xc02c, 0xc029, 0xc027, 0xc024, 0xc021, 0xc01f, 
+    0xc01c, 0xc01a, 0xc017, 0xc015, 0xc012, 0xc00f, 0xc00d, 0xc00a, 
+    0xc008, 0xc005, 0xc003, 0xc000, 0xbffb, 0xbff6, 0xbff1, 0xbfeb, 
+    0xbfe6, 0xbfe1, 0xbfdc, 0xbfd7, 0xbfd2, 0xbfcd, 0xbfc8, 0xbfc3, 
+    0xbfbd, 0xbfb8, 0xbfb3, 0xbfae, 0xbfa9, 0xbfa4, 0xbf9f, 0xbf9a, 
+    0xbf95, 0xbf90, 0xbf8b, 0xbf86, 0xbf81, 0xbf7b, 0xbf76, 0xbf71, 
+    0xbf6c, 0xbf67, 0xbf62, 0xbf5d, 0xbf58, 0xbf53, 0xbf4e, 0xbf49, 
+    0xbf44, 0xbf3f, 0xbf3a, 0xbf35, 0xbf30, 0xbf2b, 0xbf26, 0xbf21, 
+    0xbf1c, 0xbf17, 0xbf12, 0xbf0d, 0xbf08, 0xbf03, 0xbefe, 0xbef9, 
+    0xbef4, 0xbeef, 0xbeea, 0xbee5, 0xbee0, 0xbedb, 0xbed6, 0xbed1, 
+    0xbecc, 0xbec8, 0xbec3, 0xbebe, 0xbeb9, 0xbeb4, 0xbeaf, 0xbeaa, 
+    0xbea5, 0xbea0, 0xbe9b, 0xbe96, 0xbe91, 0xbe8c, 0xbe87, 0xbe83, 
+    0xbe7e, 0xbe79, 0xbe74, 0xbe6f, 0xbe6a, 0xbe65, 0xbe60, 0xbe5b, 
+    0xbe57, 0xbe52, 0xbe4d, 0xbe48, 0xbe43, 0xbe3e, 0xbe39, 0xbe35, 
+    0xbe30, 0xbe2b, 0xbe26, 0xbe21, 0xbe1c, 0xbe17, 0xbe13, 0xbe0e, 
+    0xbe09, 0xbe04, 0xbdff, 0xbdfa, 0xbdf6, 0xbdf1, 0xbdec, 0xbde7, 
+    0xbde2, 0xbdde, 0xbdd9, 0xbdd4, 0xbdcf, 0xbdca, 0xbdc6, 0xbdc1, 
+    0xbdbc, 0xbdb7, 0xbdb2, 0xbdae, 0xbda9, 0xbda4, 0xbd9f, 0xbd9b, 
+    0xbd96, 0xbd91, 0xbd8c, 0xbd88, 0xbd83, 0xbd7e, 0xbd79, 0xbd75, 
+    0xbd70, 0xbd6b, 0xbd66, 0xbd62, 0xbd5d, 0xbd58, 0xbd53, 0xbd4f, 
+    0xbd4a, 0xbd45, 0xbd41, 0xbd3c, 0xbd37, 0xbd32, 0xbd2e, 0xbd29, 
+    0xbd24, 0xbd20, 0xbd1b, 0xbd16, 0xbd12, 0xbd0d, 0xbd08, 0xbd03, 
+    0xbcff, 0xbcfa, 0xbcf5, 0xbcf1, 0xbcec, 0xbce7, 0xbce3, 0xbcde, 
+    0xbcd9, 0xbcd5, 0xbcd0, 0xbccc, 0xbcc7, 0xbcc2, 0xbcbe, 0xbcb9, 
+    0xbcb4, 0xbcb0, 0xbcab, 0xbca6, 0xbca2, 0xbc9d, 0xbc99, 0xbc94, 
+    0xbc8f, 0xbc8b, 0xbc86, 0xbc82, 0xbc7d, 0xbc78, 0xbc74, 0xbc6f, 
+    0xbc6b, 0xbc66, 0xbc61, 0xbc5d, 0xbc58, 0xbc54, 0xbc4f, 0xbc4a, 
+    0xbc46, 0xbc41, 0xbc3d, 0xbc38, 0xbc34, 0xbc2f, 0xbc2b, 0xbc26, 
+    0xbc21, 0xbc1d, 0xbc18, 0xbc14, 0xbc0f, 0xbc0b, 0xbc06, 0xbc02, 
+    0xbbfa, 0xbbf1, 0xbbe8, 0xbbdf, 0xbbd6, 0xbbcd, 0xbbc4, 0xbbbb, 
+    0xbbb2, 0xbba9, 0xbba0, 0xbb97, 0xbb8e, 0xbb85, 0xbb7c, 0xbb73, 
+    0xbb6a, 0xbb61, 0xbb58, 0xbb4f, 0xbb46, 0xbb3d, 0xbb34, 0xbb2b, 
+    0xbb22, 0xbb19, 0xbb10, 0xbb07, 0xbafe, 0xbaf5, 0xbaed, 0xbae4, 
+    0xbadb, 0xbad2, 0xbac9, 0xbac0, 0xbab7, 0xbaae, 0xbaa5, 0xba9c, 
+    0xba94, 0xba8b, 0xba82, 0xba79, 0xba70, 0xba67, 0xba5f, 0xba56, 
+    0xba4d, 0xba44, 0xba3b, 0xba32, 0xba2a, 0xba21, 0xba18, 0xba0f, 
+    0xba06, 0xb9fe, 0xb9f5, 0xb9ec, 0xb9e3, 0xb9da, 0xb9d2, 0xb9c9, 
+    0xb9c0, 0xb9b7, 0xb9af, 0xb9a6, 0xb99d, 0xb995, 0xb98c, 0xb983, 
+    0xb97a, 0xb972, 0xb969, 0xb960, 0xb958, 0xb94f, 0xb946, 0xb93d, 
+    0xb935, 0xb92c, 0xb923, 0xb91b, 0xb912, 0xb909, 0xb901, 0xb8f8, 
+    0xb8ef, 0xb8e7, 0xb8de, 0xb8d6, 0xb8cd, 0xb8c4, 0xb8bc, 0xb8b3, 
+    0xb8ab, 0xb8a2, 0xb899, 0xb891, 0xb888, 0xb880, 0xb877, 0xb86e, 
+    0xb866, 0xb85d, 0xb855, 0xb84c, 0xb844, 0xb83b, 0xb832, 0xb82a, 
+    0xb821, 0xb819, 0xb810, 0xb808, 0xb7ff, 0xb7ee, 0xb7dd, 0xb7cc, 
+    0xb7bb, 0xb7aa, 0xb799, 0xb788, 0xb777, 0xb766, 0xb755, 0xb744, 
+    0xb733, 0xb722, 0xb711, 0xb700, 0xb6ef, 0xb6de, 0xb6cd, 0xb6bd, 
+    0xb6ac, 0xb69b, 0xb68a, 0xb679, 0xb668, 0xb658, 0xb647, 0xb636, 
+    0xb625, 0xb614, 0xb604, 0xb5f3, 0xb5e2, 0xb5d1, 0xb5c1, 0xb5b0, 
+    0xb59f, 0xb58e, 0xb57e, 0xb56d, 0xb55c, 0xb54c, 0xb53b, 0xb52a, 
+    0xb51a, 0xb509, 0xb4f8, 0xb4e8, 0xb4d7, 0xb4c7, 0xb4b6, 0xb4a5, 
+    0xb495, 0xb484, 0xb474, 0xb463, 0xb452, 0xb442, 0xb431, 0xb421, 
+    0xb410, 0xb400, 0xb3df, 0xb3be, 0xb39d, 0xb37c, 0xb35b, 0xb33a, 
+    0xb319, 0xb2f8, 0xb2d7, 0xb2b6, 0xb295, 0xb275, 0xb254, 0xb233, 
+    0xb212, 0xb1f2, 0xb1d1, 0xb1b0, 0xb18f, 0xb16f, 0xb14e, 0xb12d, 
+    0xb10d, 0xb0ec, 0xb0cb, 0xb0ab, 0xb08a, 0xb06a, 0xb049, 0xb029, 
+    0xb008, 0xafcf, 0xaf8e, 0xaf4d, 0xaf0c, 0xaecb, 0xae8b, 0xae4a, 
+    0xae09, 0xadc8, 0xad88, 0xad47, 0xad06, 0xacc6, 0xac85, 0xac45, 
+    0xac04, 0xab87, 0xab06, 0xaa85, 0xaa05, 0xa984, 0xa903, 0xa883, 
+    0xa802, 0xa703, 0xa602, 0xa502, 0xa401, 0xa201, 0xa001, 0x9c00, 
+    0x0000, 0x1fff, 0x23fe, 0x25fe, 0x27fc, 0x28fd, 0x29fc, 0x2afa, 
+    0x2bf8, 0x2c7b, 0x2cfa, 0x2d78, 0x2df7, 0x2e76, 0x2ef4, 0x2f72, 
+    0x2ff0, 0x3037, 0x3076, 0x30b5, 0x30f4, 0x3132, 0x3171, 0x31b0, 
+    0x31ee, 0x322d, 0x326b, 0x32aa, 0x32e8, 0x3326, 0x3364, 0x33a3, 
+    0x33e1, 0x340f, 0x342e, 0x344d, 0x346c, 0x348b, 0x34aa, 0x34c9, 
+    0x34e8, 0x3506, 0x3525, 0x3544, 0x3563, 0x3581, 0x35a0, 0x35bf, 
+    0x35dd, 0x35fc, 0x361a, 0x3639, 0x3657, 0x3676, 0x3694, 0x36b2, 
+    0x36d1, 0x36ef, 0x370d, 0x372c, 0x374a, 0x3768, 0x3786, 0x37a4, 
+    0x37c3, 0x37e1, 0x37ff, 0x380e, 0x381d, 0x382c, 0x383b, 0x384a, 
+    0x3859, 0x3868, 0x3877, 0x3886, 0x3895, 0x38a4, 0x38b3, 0x38c2, 
+    0x38d0, 0x38df, 0x38ee, 0x38fd, 0x390c, 0x391a, 0x3929, 0x3938, 
+    0x3947, 0x3955, 0x3964, 0x3973, 0x3982, 0x3990, 0x399f, 0x39ae, 
+    0x39bc, 0x39cb, 0x39d9, 0x39e8, 0x39f7, 0x3a05, 0x3a14, 0x3a22, 
+    0x3a31, 0x3a3f, 0x3a4e, 0x3a5c, 0x3a6b, 0x3a79, 0x3a88, 0x3a96, 
+    0x3aa5, 0x3ab3, 0x3ac1, 0x3ad0, 0x3ade, 0x3aed, 0x3afb, 0x3b09, 
+    0x3b18, 0x3b26, 0x3b34, 0x3b42, 0x3b51, 0x3b5f, 0x3b6d, 0x3b7c, 
+    0x3b8a, 0x3b98, 0x3ba6, 0x3bb4, 0x3bc3, 0x3bd1, 0x3bdf, 0x3bed, 
+    0x3bfb, 0x3c05, 0x3c0c, 0x3c13, 0x3c1a, 0x3c21, 0x3c28, 0x3c2f, 
+    0x3c36, 0x3c3d, 0x3c44, 0x3c4b, 0x3c52, 0x3c59, 0x3c60, 0x3c67, 
+    0x3c6e, 0x3c75, 0x3c7c, 0x3c83, 0x3c8a, 0x3c91, 0x3c97, 0x3c9e, 
+    0x3ca5, 0x3cac, 0x3cb3, 0x3cba, 0x3cc1, 0x3cc8, 0x3ccf, 0x3cd6, 
+    0x3cdc, 0x3ce3, 0x3cea, 0x3cf1, 0x3cf8, 0x3cff, 0x3d06, 0x3d0c, 
+    0x3d13, 0x3d1a, 0x3d21, 0x3d28, 0x3d2f, 0x3d35, 0x3d3c, 0x3d43, 
+    0x3d4a, 0x3d51, 0x3d57, 0x3d5e, 0x3d65, 0x3d6c, 0x3d72, 0x3d79, 
+    0x3d80, 0x3d87, 0x3d8d, 0x3d94, 0x3d9b, 0x3da1, 0x3da8, 0x3daf, 
+    0x3db6, 0x3dbc, 0x3dc3, 0x3dca, 0x3dd0, 0x3dd7, 0x3dde, 0x3de4, 
+    0x3deb, 0x3df2, 0x3df8, 0x3dff, 0x3e05, 0x3e0c, 0x3e13, 0x3e19, 
+    0x3e20, 0x3e27, 0x3e2d, 0x3e34, 0x3e3a, 0x3e41, 0x3e47, 0x3e4e, 
+    0x3e55, 0x3e5b, 0x3e62, 0x3e68, 0x3e6f, 0x3e75, 0x3e7c, 0x3e82, 
+    0x3e89, 0x3e8f, 0x3e96, 0x3e9c, 0x3ea3, 0x3ea9, 0x3eb0, 0x3eb6, 
+    0x3ebd, 0x3ec3, 0x3eca, 0x3ed0, 0x3ed7, 0x3edd, 0x3ee4, 0x3eea, 
+    0x3ef1, 0x3ef7, 0x3efe, 0x3f04, 0x3f0a, 0x3f11, 0x3f17, 0x3f1e, 
+    0x3f24, 0x3f2a, 0x3f31, 0x3f37, 0x3f3e, 0x3f44, 0x3f4a, 0x3f51, 
+    0x3f57, 0x3f5d, 0x3f64, 0x3f6a, 0x3f70, 0x3f77, 0x3f7d, 0x3f83, 
+    0x3f8a, 0x3f90, 0x3f96, 0x3f9d, 0x3fa3, 0x3fa9, 0x3fb0, 0x3fb6, 
+    0x3fbc, 0x3fc2, 0x3fc9, 0x3fcf, 0x3fd5, 0x3fdc, 0x3fe2, 0x3fe8, 
+    0x3fee, 0x3ff5, 0x3ffb, 0x4000, 0x4004, 0x4007, 0x400a, 0x400d, 
+    0x4010, 0x4013, 0x4016, 0x4019, 0x401c, 0x4020, 0x4023, 0x4026, 
+    0x4029, 0x402c, 0x402f, 0x4032, 0x4035, 0x4038, 0x403b, 0x403e, 
+    0x4041, 0x4044, 0x4048, 0x404b, 0x404e, 0x4051, 0x4054, 0x4057, 
+    0x405a, 0x405d, 0x4060, 0x4063, 0x4066, 0x4069, 0x406c, 0x406f, 
+    0x4072, 0x4075, 0x4078, 0x407b, 0x407e, 0x4081, 0x4084, 0x4087, 
+    0x408a, 0x408d, 0x4090, 0x4093, 0x4096, 0x4099, 0x409c, 0x409f, 
+    0x40a2, 0x40a5, 0x40a8, 0x40ab, 0x40ae, 0x40b1, 0x40b4, 0x40b7, 
+    0x40ba, 0x40bd, 0x40c0, 0x40c3, 0x40c6, 0x40c9, 0x40cc, 0x40cf, 
+    0x40d2, 0x40d5, 0x40d8, 0x40db, 0x40de, 0x40e1, 0x40e4, 0x40e7, 
+    0x40ea, 0x40ed, 0x40ef, 0x40f2, 0x40f5, 0x40f8, 0x40fb, 0x40fe, 
+    0x4101, 0x4104, 0x4107, 0x410a, 0x410d, 0x4110, 0x4113, 0x4115, 
+    0x4118, 0x411b, 0x411e, 0x4121, 0x4124, 0x4127, 0x412a, 0x412d, 
+    0x4130, 0x4132, 0x4135, 0x4138, 0x413b, 0x413e, 0x4141, 0x4144, 
+    0x4147, 0x414a, 0x414c, 0x414f, 0x4152, 0x4155, 0x4158, 0x415b, 
+    0x415e, 0x4160, 0x4163, 0x4166, 0x4169, 0x416c, 0x416f, 0x4172, 
+    0x4174, 0x4177, 0x417a, 0x417d, 0x4180, 0x4183, 0x4185, 0x4188, 
+    0x418b, 0x418e, 0x4191, 0x4194, 0x4196, 0x4199, 0x419c, 0x419f, 
+    0x41a2, 0x41a5, 0x41a7, 0x41aa, 0x41ad, 0x41b0, 0x41b3, 0x41b5, 
+    0x41b8, 0x41bb, 0x41be, 0x41c1, 0x41c3, 0x41c6, 0x41c9, 0x41cc, 
+    0x41ce, 0x41d1, 0x41d4, 0x41d7, 0x41da, 0x41dc, 0x41df, 0x41e2, 
+    0x41e5, 0x41e7, 0x41ea, 0x41ed, 0x41f0, 0x41f2, 0x41f5, 0x41f8, 
+    0x41fb, 0x41fd, 0x4200, 0x4203, 0x4206, 0x4208, 0x420b, 0x420e, 
+    0x4211, 0x4213, 0x4216, 0x4219, 0x421c, 0x421e, 0x4221, 0x4224, 
+    0x4227, 0x4229, 0x422c, 0x422f, 0x4231, 0x4234, 0x4237, 0x423a, 
+    0x423c, 0x423f, 0x4242, 0x4244, 0x4247, 0x424a, 0x424d, 0x424f, 
+    0x4252, 0x4255, 0x4257, 0x425a, 0x425d, 0x425f, 0x4262, 0x4265, 
+    0x4267, 0x426a, 0x426d, 0x426f, 0x4272, 0x4275, 0x4277, 0x427a, 
+    0x427d, 0x427f, 0x4282, 0x4285, 0x4287, 0x428a, 0x428d, 0x428f, 
+    0x4292, 0x4295, 0x4297, 0x429a, 0x429d, 0x429f, 0x42a2, 0x42a5, 
+    0x42a7, 0x42aa, 0x42ad, 0x42af, 0x42b2, 0x42b4, 0x42b7, 0x42ba, 
+    0x42bc, 0x42bf, 0x42c2, 0x42c4, 0x42c7, 0x42c9, 0x42cc, 0x42cf, 
+    0x42d1, 0x42d4, 0x42d6, 0x42d9, 0x42dc, 0x42de, 0x42e1, 0x42e3, 
+    0x42e6, 0x42e9, 0x42eb, 0x42ee, 0x42f0, 0x42f3, 0x42f6, 0x42f8, 
+    0x42fb, 0x42fd, 0x4300, 0x4303, 0x4305, 0x4308, 0x430a, 0x430d, 
+    0x430f, 0x4312, 0x4315, 0x4317, 0x431a, 0x431c, 0x431f, 0x4321, 
+    0x4324, 0x4327, 0x4329, 0x432c, 0x432e, 0x4331, 0x4333, 0x4336, 
+    0x4338, 0x433b, 0x433e, 0x4340, 0x4343, 0x4345, 0x4348, 0x434a, 
+    0x434d, 0x434f, 0x4352, 0x4354, 0x4357, 0x4359, 0x435c, 0x435e, 
+    0x4361, 0x4363, 0x4366, 0x4369, 0x436b, 0x436e, 0x4370, 0x4373, 
+    0x4375, 0x4378, 0x437a, 0x437d, 0x437f, 0x4382, 0x4384, 0x4387, 
+    0x4389, 0x438c, 0x438e, 0x4391, 0x4393, 0x4396, 0x4398, 0x439b, 
+    0x439d, 0x43a0, 0x43a2, 0x43a5, 0x43a7, 0x43a9, 0x43ac, 0x43ae, 
+    0x43b1, 0x43b3, 0x43b6, 0x43b8, 0x43bb, 0x43bd, 0x43c0, 0x43c2, 
+    0x43c5, 0x43c7, 0x43ca, 0x43cc, 0x43ce, 0x43d1, 0x43d3, 0x43d6, 
+    0x43d8, 0x43db, 0x43dd, 0x43e0, 0x43e2, 0x43e5, 0x43e7, 0x43e9, 
+    0x43ec, 0x43ee, 0x43f1, 0x43f3, 0x43f6, 0x43f8, 0x43fa, 0x43fd, 
+    0x43ff, 0x4401, 0x4402, 0x4403, 0x4404, 0x4406, 0x4407, 0x4408, 
+    0x4409, 0x440b, 0x440c, 0x440d, 0x440e, 0x440f, 0x4411, 0x4412, 
+    0x4413, 0x4414, 0x4415, 0x4417, 0x4418, 0x4419, 0x441a, 0x441b, 
+    0x441d, 0x441e, 0x441f, 0x4420, 0x4421, 0x4423, 0x4424, 0x4425, 
+    0x4426, 0x4427, 0x4428, 0x442a, 0x442b, 0x442c, 0x442d, 0x442e, 
+    0x4430, 0x4431, 0x4432, 0x4433, 0x4434, 0x4436, 0x4437, 0x4438, 
+    0x4439, 0x443a, 0x443b, 0x443d, 0x443e, 0x443f, 0x4440, 0x4441, 
+    0x4442, 0x4444, 0x4445, 0x4446, 0x4447, 0x4448, 0x444a, 0x444b, 
+    0x444c, 0x444d, 0x444e, 0x444f, 0x4451, 0x4452, 0x4453, 0x4454, 
+    0x4455, 0x4456, 0x4458, 0x4459, 0x445a, 0x445b, 0x445c, 0x445d, 
+    0x445e, 0x4460, 0x4461, 0x4462, 0x4463, 0x4464, 0x4465, 0x4467, 
+    0x4468, 0x4469, 0x446a, 0x446b, 0x446c, 0x446d, 0x446f, 0x4470, 
+    0x4471, 0x4472, 0x4473, 0x4474, 0x4476, 0x4477, 0x4478, 0x4479, 
+    0x447a, 0x447b, 0x447c, 0x447e, 0x447f, 0x4480, 0x4481, 0x4482, 
+    0x4483, 0x4484, 0x4485, 0x4487, 0x4488, 0x4489, 0x448a, 0x448b, 
+    0x448c, 0x448d, 0x448f, 0x4490, 0x4491, 0x4492, 0x4493, 0x4494, 
+    0x4495, 0x4496, 0x4498, 0x4499, 0x449a, 0x449b, 0x449c, 0x449d, 
+    0x449e, 0x449f, 0x44a1, 0x44a2, 0x44a3, 0x44a4, 0x44a5, 0x44a6, 
+    0x44a7, 0x44a8, 0x44aa, 0x44ab, 0x44ac, 0x44ad, 0x44ae, 0x44af, 
+    0x44b0, 0x44b1, 0x44b2, 0x44b4, 0x44b5, 0x44b6, 0x44b7, 0x44b8, 
+    0x44b9, 0x44ba, 0x44bb, 0x44bc, 0x44be, 0x44bf, 0x44c0, 0x44c1, 
+    0x44c2, 0x44c3, 0x44c4, 0x44c5, 0x44c6, 0x44c7, 0x44c9, 0x44ca, 
+    0x44cb, 0x44cc, 0x44cd, 0x44ce, 0x44cf, 0x44d0, 0x44d1, 0x44d2, 
+    0x44d4, 0x44d5, 0x44d6, 0x44d7, 0x44d8, 0x44d9, 0x44da, 0x44db, 
+    0x44dc, 0x44dd, 0x44de, 0x44e0, 0x44e1, 0x44e2, 0x44e3, 0x44e4, 
+    0x44e5, 0x44e6, 0x44e7, 0x44e8, 0x44e9, 0x44ea, 0x44eb, 0x44ed, 
+    0x44ee, 0x44ef, 0x44f0, 0x44f1, 0x44f2, 0x44f3, 0x44f4, 0x44f5, 
+    0x44f6, 0x44f7, 0x44f8, 0x44f9, 0x44fb, 0x44fc, 0x44fd, 0x44fe, 
+    0x44ff, 0x4500, 0x4501, 0x4502, 0x4503, 0x4504, 0x4505, 0x4506, 
+    0x4507, 0x4508, 0x450a, 0x450b, 0x450c, 0x450d, 0x450e, 0x450f, 
+    0x4510, 0x4511, 0x4512, 0x4513, 0x4514, 0x4515, 0x4516, 0x4517, 
+    0x4518, 0x4519, 0x451b, 0x451c, 0x451d, 0x451e, 0x451f, 0x4520, 
+    0x4521, 0x4522, 0x4523, 0x4524, 0x4525, 0x4526, 0x4527, 0x4528, 
+    0x4529, 0x452a, 0x452b, 0x452c, 0x452d, 0x452e, 0x4530, 0x4531, 
+    0x4532, 0x4533, 0x4534, 0x4535, 0x4536, 0x4537, 0x4538, 0x4539, 
+    0x453a, 0x453b, 0x453c, 0x453d, 0x453e, 0x453f, 0x4540, 0x4541, 
+    0x4542, 0x4543, 0x4544, 0x4545, 0x4546, 0x4547, 0x4548, 0x454a, 
+    0x454b, 0x454c, 0x454d, 0x454e, 0x454f, 0x4550, 0x4551, 0x4552, 
+    0x4553, 0x4554, 0x4555, 0x4556, 0x4557, 0x4558, 0x4559, 0x455a, 
+    0x455b, 0x455c, 0x455d, 0x455e, 0x455f, 0x4560, 0x4561, 0x4562, 
+    0x4563, 0x4564, 0x4565, 0x4566, 0x4567, 0x4568, 0x4569, 0x456a, 
+    0x456b, 0x456c, 0x456d, 0x456e, 0x456f, 0x4570, 0x4571, 0x4572, 
+    0x4573, 0x4574, 0x4575, 0x4576, 0x4577, 0x4578, 0x4579, 0x457a, 
+    0x457c, 0x457d, 0x457e, 0x457f, 0x4580, 0x4581, 0x4582, 0x4583, 
+    0x4584, 0x4585, 0x4586, 0x4587, 0x4588, 0x4589, 0x458a, 0x458b, 
+    0x458c, 0x458e, 0x4590, 0x4592, 0x4594, 0x4596, 0x4598, 0x459a, 
+    0x459c, 0x459d, 0x459f, 0x45a1, 0x45a3, 0x45a5, 0x45a7, 0x45a9, 
+    0x45ab, 0x45ad, 0x45af, 0x45b1, 0x45b3, 0x45b5, 0x45b7, 0x45b9, 
+    0x45bb, 0x45bd, 0x45bf, 0x45c1, 0x45c3, 0x45c5, 0x45c7, 0x45c9, 
+    0x45cb, 0x45cd, 0x45ce, 0x45d0, 0x45d2, 0x45d4, 0x45d6, 0x45d8, 
+    0x45da, 0x45dc, 0x45de, 0x45e0, 0x45e2, 0x45e4, 0x45e6, 0x45e7, 
+    0x45e9, 0x45eb, 0x45ed, 0x45ef, 0x45f1, 0x45f3, 0x45f5, 0x45f7, 
+    0x45f9, 0x45fb, 0x45fc, 0x45fe, 0x4600, 0x4602, 0x4604, 0x4606, 
+    0x4608, 0x460a, 0x460b, 0x460d, 0x460f, 0x4611, 0x4613, 0x4615, 
+    0x4617, 0x4619, 0x461a, 0x461c, 0x461e, 0x4620, 0x4622, 0x4624, 
+    0x4626, 0x4627, 0x4629, 0x462b, 0x462d, 0x462f, 0x4631, 0x4633, 
+    0x4634, 0x4636, 0x4638, 0x463a, 0x463c, 0x463e, 0x463f, 0x4641, 
+    0x4643, 0x4645, 0x4647, 0x4649, 0x464a, 0x464c, 0x464e, 0x4650, 
+    0x4652, 0x4653, 0x4655, 0x4657, 0x4659, 0x465b, 0x465d, 0x465e, 
+    0x4660, 0x4662, 0x4664, 0x4666, 0x4667, 0x4669, 0x466b, 0x466d, 
+    0x466f, 0x4670, 0x4672, 0x4674, 0x4676, 0x4677, 0x4679, 0x467b, 
+    0x467d, 0x467f, 0x4680, 0x4682, 0x4684, 0x4686, 0x4687, 0x4689, 
+    0x468b, 0x468d, 0x468e, 0x4690, 0x4692, 0x4694, 0x4696, 0x4697, 
+    0x4699, 0x469b, 0x469d, 0x469e, 0x46a0, 0x46a2, 0x46a4, 0x46a5, 
+    0x46a7, 0x46a9, 0x46aa, 0x46ac, 0x46ae, 0x46b0, 0x46b1, 0x46b3, 
+    0x46b5, 0x46b7, 0x46b8, 0x46ba, 0x46bc, 0x46be, 0x46bf, 0x46c1, 
+    0x46c3, 0x46c4, 0x46c6, 0x46c8, 0x46ca, 0x46cb, 0x46cd, 0x46cf, 
+    0x46d0, 0x46d2, 0x46d4, 0x46d6, 0x46d7, 0x46d9, 0x46db, 0x46dc, 
+    0x46de, 0x46e0, 0x46e1, 0x46e3, 0x46e5, 0x46e6, 0x46e8, 0x46ea, 
+    0x46ec, 0x46ed, 0x46ef, 0x46f1, 0x46f2, 0x46f4, 0x46f6, 0x46f7, 
+    0x46f9, 0x46fb, 0x46fc, 0x46fe, 0x4700, 0x4701, 0x4703, 0x4705, 
+    0x4706, 0x4708, 0x470a, 0x470b, 0x470d, 0x470f, 0x4710, 0x4712, 
+    0x4714, 0x4715, 0x4717, 0x4718, 0x471a, 0x471c, 0x471d, 0x471f, 
+    0x4721, 0x4722, 0x4724, 0x4726, 0x4727, 0x4729, 0x472b, 0x472c, 
+    0x472e, 0x472f, 0x4731, 0x4733, 0x4734, 0x4736, 0x4738, 0x4739, 
+    0x473b, 0x473c, 0x473e, 0x4740, 0x4741, 0x4743, 0x4745, 0x4746, 
+    0x4748, 0x4749, 0x474b, 0x474d, 0x474e, 0x4750, 0x4751, 0x4753, 
+    0x4755, 0x4756, 0x4758, 0x4759, 0x475b, 0x475d, 0x475e, 0x4760, 
+    0x4761, 0x4763, 0x4765, 0x4766, 0x4768, 0x4769, 0x476b, 0x476c, 
+    0x476e, 0x4770, 0x4771, 0x4773, 0x4774, 0x4776, 0x4777, 0x4779, 
+    0x477b, 0x477c, 0x477e, 0x477f, 0x4781, 0x4782, 0x4784, 0x4786, 
+    0x4787, 0x4789, 0x478a, 0x478c, 0x478d, 0x478f, 0x4790, 0x4792, 
+    0x4794, 0x4795, 0x4797, 0x4798, 0x479a, 0x479b, 0x479d, 0x479e, 
+    0x47a0, 0x47a2, 0x47a3, 0x47a5, 0x47a6, 0x47a8, 0x47a9, 0x47ab, 
+    0x47ac, 0x47ae, 0x47af, 0x47b1, 0x47b2, 0x47b4, 0x47b5, 0x47b7, 
+    0x47b8, 0x47ba, 0x47bc, 0x47bd, 0x47bf, 0x47c0, 0x47c2, 0x47c3, 
+    0x47c5, 0x47c6, 0x47c8, 0x47c9, 0x47cb, 0x47cc, 0x47ce, 0x47cf, 
+    0x47d1, 0x47d2, 0x47d4, 0x47d5, 0x47d7, 0x47d8, 0x47da, 0x47db, 
+    0x47dd, 0x47de, 0x47e0, 0x47e1, 0x47e3, 0x47e4, 0x47e6, 0x47e7, 
+    0x47e9, 0x47ea, 0x47ec, 0x47ed, 0x47ef, 0x47f0, 0x47f2, 0x47f3, 
+    0x47f5, 0x47f6, 0x47f8, 0x47f9, 0x47fa, 0x47fc, 0x47fd, 0x47ff, 
+    0x4800, 0x4801, 0x4802, 0x4802, 0x4803, 0x4804, 0x4805, 0x4805, 
+    0x4806, 0x4807, 0x4808, 0x4808, 0x4809, 0x480a, 0x480a, 0x480b, 
+    0x480c, 0x480d, 0x480d, 0x480e, 0x480f, 0x4810, 0x4810, 0x4811, 
+    0x4812, 0x4812, 0x4813, 0x4814, 0x4815, 0x4815, 0x4816, 0x4817, 
+    0x4817, 0x4818, 0x4819, 0x481a, 0x481a, 0x481b, 0x481c, 0x481c, 
+    0x481d, 0x481e, 0x481f, 0x481f, 0x4820, 0x4821, 0x4821, 0x4822, 
+    0x4823, 0x4824, 0x4824, 0x4825, 0x4826, 0x4826, 0x4827, 0x4828, 
+    0x4829, 0x4829, 0x482a, 0x482b, 0x482b, 0x482c, 0x482d, 0x482e, 
+    0x482e, 0x482f, 0x4830, 0x4830, 0x4831, 0x4832, 0x4832, 0x4833, 
+    0x4834, 0x4835, 0x4835, 0x4836, 0x4837, 0x4837, 0x4838, 0x4839, 
+    0x4839, 0x483a, 0x483b, 0x483b, 0x483c, 0x483d, 0x483e, 0x483e, 
+    0x483f, 0x4840, 0x4840, 0x4841, 0x4842, 0x4842, 0x4843, 0x4844, 
+    0x4844, 0x4845, 0x4846, 0x4847, 0x4847, 0x4848, 0x4849, 0x4849, 
+    0x484a, 0x484b, 0x484b, 0x484c, 0x484d, 0x484d, 0x484e, 0x484f, 
+    0x484f, 0x4850, 0x4851, 0x4851, 0x4852, 0x4853, 0x4853, 0x4854, 
+    0x4855, 0x4856, 0x4856, 0x4857, 0x4858, 0x4858, 0x4859, 0x485a, 
+    0x485a, 0x485b, 0x485c, 0x485c, 0x485d, 0x485e, 0x485e, 0x485f, 
+    0x4860, 0x4860, 0x4861, 0x4862, 0x4862, 0x4863, 0x4864, 0x4864, 
+    0x4865, 0x4866, 0x4866, 0x4867, 0x4868, 0x4868, 0x4869, 0x486a, 
+    0x486a, 0x486b, 0x486c, 0x486c, 0x486d, 0x486e, 0x486e, 0x486f, 
+    0x4870, 0x4870, 0x4871, 0x4872, 0x4872, 0x4873, 0x4874, 0x4874, 
+    0x4875, 0x4876, 0x4876, 0x4877, 0x4877, 0x4878, 0x4879, 0x4879, 
+    0x487a, 0x487b, 0x487b, 0x487c, 0x487d, 0x487d, 0x487e, 0x487f, 
+    0x487f, 0x4880, 0x4881, 0x4881, 0x4882, 0x4883, 0x4883, 0x4884, 
+    0x4884, 0x4885, 0x4886, 0x4886, 0x4887, 0x4888, 0x4888, 0x4889, 
+    0x488a, 0x488a, 0x488b, 0x488c, 0x488c, 0x488d, 0x488d, 0x488e, 
+    0x488f, 0x488f, 0x4890, 0x4891, 0x4891, 0x4892, 0x4893, 0x4893, 
+    0x4894, 0x4895, 0x4895, 0x4896, 0x4896, 0x4897, 0x4898, 0x4898, 
+    0x4899, 0x489a, 0x489a, 0x489b, 0x489c, 0x489c, 0x489d, 0x489d, 
+    0x489e, 0x489f, 0x489f, 0x48a0, 0x48a1, 0x48a1, 0x48a2, 0x48a2, 
+    0x48a3, 0x48a4, 0x48a4, 0x48a5, 0x48a6, 0x48a6, 0x48a7, 0x48a7, 
+    0x48a8, 0x48a9, 0x48a9, 0x48aa, 0x48ab, 0x48ab, 0x48ac, 0x48ac, 
+    0x48ad, 0x48ae, 0x48ae, 0x48af, 0x48b0, 0x48b0, 0x48b1, 0x48b1, 
+    0x48b2, 0x48b3, 0x48b3, 0x48b4, 0x48b4, 0x48b5, 0x48b6, 0x48b6, 
+    0x48b7, 0x48b8, 0x48b8, 0x48b9, 0x48b9, 0x48ba, 0x48bb, 0x48bb, 
+    0x48bc, 0x48bc, 0x48bd, 0x48be, 0x48be, 0x48bf, 0x48c0, 0x48c0, 
+    0x48c1, 0x48c1, 0x48c2, 0x48c3, 0x48c3, 0x48c4, 0x48c4, 0x48c5, 
+    0x48c6, 0x48c6, 0x48c7, 0x48c7, 0x48c8, 0x48c9, 0x48c9, 0x48ca, 
+    0x48ca, 0x48cb, 0x48cc, 0x48cc, 0x48cd, 0x48cd, 0x48ce, 0x48cf, 
+    0x48cf, 0x48d0, 0x48d0, 0x48d1, 0x48d2, 0x48d2, 0x48d3, 0x48d3, 
+    0x48d4, 0x48d5, 0x48d5, 0x48d6, 0x48d6, 0x48d7, 0x48d8, 0x48d8, 
+    0x48d9, 0x48d9, 0x48da, 0x48db, 0x48db, 0x48dc, 0x48dc, 0x48dd, 
+    0x48de, 0x48de, 0x48df, 0x48df, 0x48e0, 0x48e1, 0x48e1, 0x48e2, 
+    0x48e2, 0x48e3, 0x48e3, 0x48e4, 0x48e5, 0x48e5, 0x48e6, 0x48e6, 
+    0x48e7, 0x48e8, 0x48e8, 0x48e9, 0x48e9, 0x48ea, 0x48eb, 0x48eb, 
+    0x48ec, 0x48ec, 0x48ed, 0x48ed, 0x48ee, 0x48ef, 0x48ef, 0x48f0, 
+    0x48f0, 0x48f1, 0x48f2, 0x48f2, 0x48f3, 0x48f3, 0x48f4, 0x48f4, 
+    0x48f5, 0x48f6, 0x48f6, 0x48f7, 0x48f7, 0x48f8, 0x48f8, 0x48f9, 
+    0x48fa, 0x48fa, 0x48fb, 0x48fb, 0x48fc, 0x48fd, 0x48fd, 0x48fe, 
+    0x48fe, 0x48ff, 0x48ff, 0x4900, 0x4901, 0x4901, 0x4902, 0x4902, 
+    0x4903, 0x4903, 0x4904, 0x4905, 0x4905, 0x4906, 0x4906, 0x4907, 
+    0x4907, 0x4908, 0x4909, 0x4909, 0x490a, 0x490a, 0x490b, 0x490b, 
+    0x490c, 0x490c, 0x490d, 0x490e, 0x490e, 0x490f, 0x490f, 0x4910, 
+    0x4910, 0x4911, 0x4912, 0x4912, 0x4913, 0x4913, 0x4914, 0x4914, 
+    0x4915, 0x4916, 0x4916, 0x4917, 0x4917, 0x4918, 0x4918, 0x4919, 
+    0x4919, 0x491a, 0x491b, 0x491b, 0x491c, 0x491c, 0x491d, 0x491d, 
+    0x491e, 0x491e, 0x491f, 0x4920, 0x4920, 0x4921, 0x4921, 0x4922, 
+    0x4922, 0x4923, 0x4923, 0x4924, 0x4925, 0x4925, 0x4926, 0x4926, 
+    0x4927, 0x4927, 0x4928, 0x4928, 0x4929, 0x492a, 0x492a, 0x492b, 
+    0x492b, 0x492c, 0x492c, 0x492d, 0x492d, 0x492e, 0x492e, 0x492f, 
+    0x4930, 0x4930, 0x4931, 0x4931, 0x4932, 0x4932, 0x4933, 0x4933, 
+    0x4934, 0x4934, 0x4935, 0x4936, 0x4936, 0x4937, 0x4937, 0x4938, 
+    0x4938, 0x4939, 0x4939, 0x493a, 0x493a, 0x493b, 0x493c, 0x493c, 
+    0x493d, 0x493d, 0x493e, 0x493e, 0x493f, 0x493f, 0x4940, 0x4940, 
+    0x4941, 0x4941, 0x4942, 0x4943, 0x4943, 0x4944, 0x4944, 0x4945, 
+    0x4945, 0x4946, 0x4946, 0x4947, 0x4947, 0x4948, 0x4948, 0x4949, 
+    0x4949, 0x494a, 0x494b, 0x494b, 0x494c, 0x494c, 0x494d, 0x494d, 
+    0x494e, 0x494e, 0x494f, 0x494f, 0x4950, 0x4950, 0x4951, 0x4951, 
+    0x4952, 0x4953, 0x4953, 0x4954, 0x4954, 0x4955, 0x4955, 0x4956, 
+    0x4956, 0x4957, 0x4957, 0x4958, 0x4958, 0x4959, 0x4959, 0x495a, 
+    0x495a, 0x495b, 0x495b, 0x495c, 0x495d, 0x495d, 0x495e, 0x495e, 
+    0x495f, 0x495f, 0x4960, 0x4960, 0x4961, 0x4961, 0x4962, 0x4962, 
+    0x4963, 0x4963, 0x4964, 0x4964, 0x4965, 0x4965, 0x4966, 0x4966, 
+    0x4967, 0x4967, 0x4968, 0x4968, 0x4969, 0x496a, 0x496a, 0x496b, 
+    0x496b, 0x496c, 0x496c, 0x496d, 0x496d, 0x496e, 0x496e, 0x496f, 
+    0x496f, 0x4970, 0x4970, 0x4971, 0x4971, 0x4972, 0x4972, 0x4973, 
+    0x4973, 0x4974, 0x4974, 0x4975, 0x4975, 0x4976, 0x4976, 0x4977, 
+    0x4977, 0x4978, 0x4978, 0x4979, 0x4979, 0x497a, 0x497a, 0x497b, 
+    0x497b, 0x497c, 0x497c, 0x497d, 0x497d, 0x497e, 0x497e, 0x497f, 
+    0x497f, 0x4980, 0x4981, 0x4981, 0x4982, 0x4982, 0x4983, 0x4983, 
+    0x4984, 0x4984, 0x4985, 0x4985, 0x4986, 0x4986, 0x4987, 0x4987, 
+    0x4988, 0x4988, 0x4989, 0x4989, 0x498a, 0x498a, 0x498b, 0x498b, 
+    0x498c, 0x498d, 0x498e, 0x498f, 0x4990, 0x4991, 0x4992, 0x4993, 
+    0x4994, 0x4995, 0x4996, 0x4997, 0x4997, 0x4998, 0x4999, 0x499a, 
+    0x499b, 0x499c, 0x499d, 0x499e, 0x499f, 0x49a0, 0x49a1, 0x49a2, 
+    0x49a3, 0x49a4, 0x49a5, 0x49a6, 0x49a7, 0x49a8, 0x49a9, 0x49aa, 
+    0x49ab, 0x49ac, 0x49ad, 0x49ae, 0x49af, 0x49b0, 0x49b1, 0x49b2, 
+    0x49b3, 0x49b4, 0x49b5, 0x49b6, 0x49b7, 0x49b8, 0x49b9, 0x49ba, 
+    0x49ba, 0x49bb, 0x49bc, 0x49bd, 0x49be, 0x49bf, 0x49c0, 0x49c1, 
+    0x49c2, 0x49c3, 0x49c4, 0x49c5, 0x49c6, 0x49c7, 0x49c8, 0x49c9, 
+    0x49ca, 0x49cb, 0x49cc, 0x49cc, 0x49cd, 0x49ce, 0x49cf, 0x49d0, 
+    0x49d1, 0x49d2, 0x49d3, 0x49d4, 0x49d5, 0x49d6, 0x49d7, 0x49d8, 
+    0x49d9, 0x49da, 0x49da, 0x49db, 0x49dc, 0x49dd, 0x49de, 0x49df, 
+    0x49e0, 0x49e1, 0x49e2, 0x49e3, 0x49e4, 0x49e5, 0x49e5, 0x49e6, 
+    0x49e7, 0x49e8, 0x49e9, 0x49ea, 0x49eb, 0x49ec, 0x49ed, 0x49ee, 
+    0x49ef, 0x49f0, 0x49f0, 0x49f1, 0x49f2, 0x49f3, 0x49f4, 0x49f5, 
+    0x49f6, 0x49f7, 0x49f8, 0x49f9, 0x49f9, 0x49fa, 0x49fb, 0x49fc, 
+    0x49fd, 0x49fe, 0x49ff, 0x4a00, 0x4a01, 0x4a02, 0x4a02, 0x4a03, 
+    0x4a04, 0x4a05, 0x4a06, 0x4a07, 0x4a08, 0x4a09, 0x4a09, 0x4a0a, 
+    0x4a0b, 0x4a0c, 0x4a0d, 0x4a0e, 0x4a0f, 0x4a10, 0x4a11, 0x4a11, 
+    0x4a12, 0x4a13, 0x4a14, 0x4a15, 0x4a16, 0x4a17, 0x4a18, 0x4a18, 
+    0x4a19, 0x4a1a, 0x4a1b, 0x4a1c, 0x4a1d, 0x4a1e, 0x4a1f, 0x4a1f, 
+    0x4a20, 0x4a21, 0x4a22, 0x4a23, 0x4a24, 0x4a25, 0x4a25, 0x4a26, 
+    0x4a27, 0x4a28, 0x4a29, 0x4a2a, 0x4a2b, 0x4a2b, 0x4a2c, 0x4a2d, 
+    0x4a2e, 0x4a2f, 0x4a30, 0x4a31, 0x4a31, 0x4a32, 0x4a33, 0x4a34, 
+    0x4a35, 0x4a36, 0x4a36, 0x4a37, 0x4a38, 0x4a39, 0x4a3a, 0x4a3b, 
+    0x4a3c, 0x4a3c, 0x4a3d, 0x4a3e, 0x4a3f, 0x4a40, 0x4a41, 0x4a41, 
+    0x4a42, 0x4a43, 0x4a44, 0x4a45, 0x4a46, 0x4a46, 0x4a47, 0x4a48, 
+    0x4a49, 0x4a4a, 0x4a4b, 0x4a4b, 0x4a4c, 0x4a4d, 0x4a4e, 0x4a4f, 
+    0x4a50, 0x4a50, 0x4a51, 0x4a52, 0x4a53, 0x4a54, 0x4a54, 0x4a55, 
+    0x4a56, 0x4a57, 0x4a58, 0x4a59, 0x4a59, 0x4a5a, 0x4a5b, 0x4a5c, 
+    0x4a5d, 0x4a5d, 0x4a5e, 0x4a5f, 0x4a60, 0x4a61, 0x4a62, 0x4a62, 
+    0x4a63, 0x4a64, 0x4a65, 0x4a66, 0x4a66, 0x4a67, 0x4a68, 0x4a69, 
+    0x4a6a, 0x4a6a, 0x4a6b, 0x4a6c, 0x4a6d, 0x4a6e, 0x4a6e, 0x4a6f, 
+    0x4a70, 0x4a71, 0x4a72, 0x4a72, 0x4a73, 0x4a74, 0x4a75, 0x4a76, 
+    0x4a76, 0x4a77, 0x4a78, 0x4a79, 0x4a7a, 0x4a7a, 0x4a7b, 0x4a7c, 
+    0x4a7d, 0x4a7e, 0x4a7e, 0x4a7f, 0x4a80, 0x4a81, 0x4a82, 0x4a82, 
+    0x4a83, 0x4a84, 0x4a85, 0x4a85, 0x4a86, 0x4a87, 0x4a88, 0x4a89, 
+    0x4a89, 0x4a8a, 0x4a8b, 0x4a8c, 0x4a8c, 0x4a8d, 0x4a8e, 0x4a8f, 
+    0x4a90, 0x4a90, 0x4a91, 0x4a92, 0x4a93, 0x4a93, 0x4a94, 0x4a95, 
+    0x4a96, 0x4a97, 0x4a97, 0x4a98, 0x4a99, 0x4a9a, 0x4a9a, 0x4a9b, 
+    0x4a9c, 0x4a9d, 0x4a9d, 0x4a9e, 0x4a9f, 0x4aa0, 0x4aa1, 0x4aa1, 
+    0x4aa2, 0x4aa3, 0x4aa4, 0x4aa4, 0x4aa5, 0x4aa6, 0x4aa7, 0x4aa7, 
+    0x4aa8, 0x4aa9, 0x4aaa, 0x4aaa, 0x4aab, 0x4aac, 0x4aad, 0x4aad, 
+    0x4aae, 0x4aaf, 0x4ab0, 0x4ab0, 0x4ab1, 0x4ab2, 0x4ab3, 0x4ab3, 
+    0x4ab4, 0x4ab5, 0x4ab6, 0x4ab6, 0x4ab7, 0x4ab8, 0x4ab9, 0x4ab9, 
+    0x4aba, 0x4abb, 0x4abc, 0x4abc, 0x4abd, 0x4abe, 0x4abf, 0x4abf, 
+    0x4ac0, 0x4ac1, 0x4ac2, 0x4ac2, 0x4ac3, 0x4ac4, 0x4ac4, 0x4ac5, 
+    0x4ac6, 0x4ac7, 0x4ac7, 0x4ac8, 0x4ac9, 0x4aca, 0x4aca, 0x4acb, 
+    0x4acc, 0x4acd, 0x4acd, 0x4ace, 0x4acf, 0x4acf, 0x4ad0, 0x4ad1, 
+    0x4ad2, 0x4ad2, 0x4ad3, 0x4ad4, 0x4ad5, 0x4ad5, 0x4ad6, 0x4ad7, 
+    0x4ad7, 0x4ad8, 0x4ad9, 0x4ada, 0x4ada, 0x4adb, 0x4adc, 0x4add, 
+    0x4add, 0x4ade, 0x4adf, 0x4adf, 0x4ae0, 0x4ae1, 0x4ae2, 0x4ae2, 
+    0x4ae3, 0x4ae4, 0x4ae4, 0x4ae5, 0x4ae6, 0x4ae7, 0x4ae7, 0x4ae8, 
+    0x4ae9, 0x4ae9, 0x4aea, 0x4aeb, 0x4aec, 0x4aec, 0x4aed, 0x4aee, 
+    0x4aee, 0x4aef, 0x4af0, 0x4af0, 0x4af1, 0x4af2, 0x4af3, 0x4af3, 
+    0x4af4, 0x4af5, 0x4af5, 0x4af6, 0x4af7, 0x4af7, 0x4af8, 0x4af9, 
+    0x4afa, 0x4afa, 0x4afb, 0x4afc, 0x4afc, 0x4afd, 0x4afe, 0x4afe, 
+    0x4aff, 0x4b00, 0x4b01, 0x4b01, 0x4b02, 0x4b03, 0x4b03, 0x4b04, 
+    0x4b05, 0x4b05, 0x4b06, 0x4b07, 0x4b07, 0x4b08, 0x4b09, 0x4b0a, 
+    0x4b0a, 0x4b0b, 0x4b0c, 0x4b0c, 0x4b0d, 0x4b0e, 0x4b0e, 0x4b0f, 
+    0x4b10, 0x4b10, 0x4b11, 0x4b12, 0x4b12, 0x4b13, 0x4b14, 0x4b15, 
+    0x4b15, 0x4b16, 0x4b17, 0x4b17, 0x4b18, 0x4b19, 0x4b19, 0x4b1a, 
+    0x4b1b, 0x4b1b, 0x4b1c, 0x4b1d, 0x4b1d, 0x4b1e, 0x4b1f, 0x4b1f, 
+    0x4b20, 0x4b21, 0x4b21, 0x4b22, 0x4b23, 0x4b23, 0x4b24, 0x4b25, 
+    0x4b25, 0x4b26, 0x4b27, 0x4b27, 0x4b28, 0x4b29, 0x4b29, 0x4b2a, 
+    0x4b2b, 0x4b2b, 0x4b2c, 0x4b2d, 0x4b2d, 0x4b2e, 0x4b2f, 0x4b2f, 
+    0x4b30, 0x4b31, 0x4b31, 0x4b32, 0x4b33, 0x4b33, 0x4b34, 0x4b35, 
+    0x4b35, 0x4b36, 0x4b37, 0x4b37, 0x4b38, 0x4b39, 0x4b39, 0x4b3a, 
+    0x4b3b, 0x4b3b, 0x4b3c, 0x4b3d, 0x4b3d, 0x4b3e, 0x4b3f, 0x4b3f, 
+    0x4b40, 0x4b41, 0x4b41, 0x4b42, 0x4b42, 0x4b43, 0x4b44, 0x4b44, 
+    0x4b45, 0x4b46, 0x4b46, 0x4b47, 0x4b48, 0x4b48, 0x4b49, 0x4b4a, 
+    0x4b4a, 0x4b4b, 0x4b4c, 0x4b4c, 0x4b4d, 0x4b4d, 0x4b4e, 0x4b4f, 
+    0x4b4f, 0x4b50, 0x4b51, 0x4b51, 0x4b52, 0x4b53, 0x4b53, 0x4b54, 
+    0x4b55, 0x4b55, 0x4b56, 0x4b56, 0x4b57, 0x4b58, 0x4b58, 0x4b59, 
+    0x4b5a, 0x4b5a, 0x4b5b, 0x4b5c, 0x4b5c, 0x4b5d, 0x4b5d, 0x4b5e, 
+    0x4b5f, 0x4b5f, 0x4b60, 0x4b61, 0x4b61, 0x4b62, 0x4b63, 0x4b63, 
+    0x4b64, 0x4b64, 0x4b65, 0x4b66, 0x4b66, 0x4b67, 0x4b68, 0x4b68, 
+    0x4b69, 0x4b69, 0x4b6a, 0x4b6b, 0x4b6b, 0x4b6c, 0x4b6d, 0x4b6d, 
+    0x4b6e, 0x4b6e, 0x4b6f, 0x4b70, 0x4b70, 0x4b71, 0x4b72, 0x4b72, 
+    0x4b73, 0x4b73, 0x4b74, 0x4b75, 0x4b75, 0x4b76, 0x4b77, 0x4b77, 
+    0x4b78, 0x4b78, 0x4b79, 0x4b7a, 0x4b7a, 0x4b7b, 0x4b7b, 0x4b7c, 
+    0x4b7d, 0x4b7d, 0x4b7e, 0x4b7f, 0x4b7f, 0x4b80, 0x4b80, 0x4b81, 
+    0x4b82, 0x4b82, 0x4b83, 0x4b83, 0x4b84, 0x4b85, 0x4b85, 0x4b86, 
+    0x4b87, 0x4b87, 0x4b88, 0x4b88, 0x4b89, 0x4b8a, 0x4b8a, 0x4b8b, 
+    0x4b8b, 0x4b8c, 0x4b8d, 0x4b8d, 0x4b8e, 0x4b8e, 0x4b8f, 0x4b90, 
+    0x4b90, 0x4b91, 0x4b91, 0x4b92, 0x4b93, 0x4b93, 0x4b94, 0x4b94, 
+    0x4b95, 0x4b96, 0x4b96, 0x4b97, 0x4b97, 0x4b98, 0x4b99, 0x4b99, 
+    0x4b9a, 0x4b9a, 0x4b9b, 0x4b9c, 0x4b9c, 0x4b9d, 0x4b9d, 0x4b9e, 
+    0x4b9f, 0x4b9f, 0x4ba0, 0x4ba0, 0x4ba1, 0x4ba2, 0x4ba2, 0x4ba3, 
+    0x4ba3, 0x4ba4, 0x4ba5, 0x4ba5, 0x4ba6, 0x4ba6, 0x4ba7, 0x4ba8, 
+    0x4ba8, 0x4ba9, 0x4ba9, 0x4baa, 0x4baa, 0x4bab, 0x4bac, 0x4bac, 
+    0x4bad, 0x4bad, 0x4bae, 0x4baf, 0x4baf, 0x4bb0, 0x4bb0, 0x4bb1, 
+    0x4bb1, 0x4bb2, 0x4bb3, 0x4bb3, 0x4bb4, 0x4bb4, 0x4bb5, 0x4bb6, 
+    0x4bb6, 0x4bb7, 0x4bb7, 0x4bb8, 0x4bb8, 0x4bb9, 0x4bba, 0x4bba, 
+    0x4bbb, 0x4bbb, 0x4bbc, 0x4bbd, 0x4bbd, 0x4bbe, 0x4bbe, 0x4bbf, 
+    0x4bbf, 0x4bc0, 0x4bc1, 0x4bc1, 0x4bc2, 0x4bc2, 0x4bc3, 0x4bc3, 
+    0x4bc4, 0x4bc5, 0x4bc5, 0x4bc6, 0x4bc6, 0x4bc7, 0x4bc7, 0x4bc8, 
+    0x4bc9, 0x4bc9, 0x4bca, 0x4bca, 0x4bcb, 0x4bcb, 0x4bcc, 0x4bcd, 
+    0x4bcd, 0x4bce, 0x4bce, 0x4bcf, 0x4bcf, 0x4bd0, 0x4bd1, 0x4bd1, 
+    0x4bd2, 0x4bd2, 0x4bd3, 0x4bd3, 0x4bd4, 0x4bd5, 0x4bd5, 0x4bd6, 
+    0x4bd6, 0x4bd7, 0x4bd7, 0x4bd8, 0x4bd8, 0x4bd9, 0x4bda, 0x4bda, 
+    0x4bdb, 0x4bdb, 0x4bdc, 0x4bdc, 0x4bdd, 0x4bde, 0x4bde, 0x4bdf, 
+    0x4bdf, 0x4be0, 0x4be0, 0x4be1, 0x4be1, 0x4be2, 0x4be3, 0x4be3, 
+    0x4be4, 0x4be4, 0x4be5, 0x4be5, 0x4be6, 0x4be6, 0x4be7, 0x4be8, 
+    0x4be8, 0x4be9, 0x4be9, 0x4bea, 0x4bea, 0x4beb, 0x4beb, 0x4bec, 
+    0x4bed, 0x4bed, 0x4bee, 0x4bee, 0x4bef, 0x4bef, 0x4bf0, 0x4bf0, 
+    0x4bf1, 0x4bf1, 0x4bf2, 0x4bf3, 0x4bf3, 0x4bf4, 0x4bf4, 0x4bf5, 
+    0x4bf5, 0x4bf6, 0x4bf6, 0x4bf7, 0x4bf8, 0x4bf8, 0x4bf9, 0x4bf9, 
+    0x4bfa, 0x4bfa, 0x4bfb, 0x4bfb, 0x4bfc, 0x4bfc, 0x4bfd, 0x4bfe, 
+    0x4bfe, 0x4bff, 0x4bff, 0x4c00, 0x4c00, 0x4c00, 0x4c01, 0x4c01, 
+    0x4c01, 0x4c01, 0x4c02, 0x4c02, 0x4c02, 0x4c03, 0x4c03, 0x4c03, 
+    0x4c03, 0x4c04, 0x4c04, 0x4c04, 0x4c04, 0x4c05, 0x4c05, 0x4c05, 
+    0x4c05, 0x4c06, 0x4c06, 0x4c06, 0x4c07, 0x4c07, 0x4c07, 0x4c07, 
+    0x4c08, 0x4c08, 0x4c08, 0x4c08, 0x4c09, 0x4c09, 0x4c09, 0x4c09, 
+    0x4c0a, 0x4c0a, 0x4c0a, 0x4c0b, 0x4c0b, 0x4c0b, 0x4c0b, 0x4c0c, 
+    0x4c0c, 0x4c0c, 0x4c0c, 0x4c0d, 0x4c0d, 0x4c0d, 0x4c0d, 0x4c0e, 
+    0x4c0e, 0x4c0e, 0x4c0f, 0x4c0f, 0x4c0f, 0x4c0f, 0x4c10, 0x4c10, 
+    0x4c10, 0x4c10, 0x4c11, 0x4c11, 0x4c11, 0x4c11, 0x4c12, 0x4c12, 
+    0x4c12, 0x4c12, 0x4c13, 0x4c13, 0x4c13, 0x4c13, 0x4c14, 0x4c14, 
+    0x4c14, 0x4c15, 0x4c15, 0x4c15, 0x4c15, 0x4c16, 0x4c16, 0x4c16, 
+    0x4c16, 0x4c17, 0x4c17, 0x4c17, 0x4c17, 0x4c18, 0x4c18, 0x4c18, 
+    0x4c18, 0x4c19, 0x4c19, 0x4c19, 0x4c19, 0x4c1a, 0x4c1a, 0x4c1a, 
+    0x4c1a, 0x4c1b, 0x4c1b, 0x4c1b, 0x4c1c, 0x4c1c, 0x4c1c, 0x4c1c, 
+    0x4c1d, 0x4c1d, 0x4c1d, 0x4c1d, 0x4c1e, 0x4c1e, 0x4c1e, 0x4c1e, 
+    0x4c1f, 0x4c1f, 0x4c1f, 0x4c1f, 0x4c20, 0x4c20, 0x4c20, 0x4c20, 
+    0x4c21, 0x4c21, 0x4c21, 0x4c21, 0x4c22, 0x4c22, 0x4c22, 0x4c22, 
+    0x4c23, 0x4c23, 0x4c23, 0x4c23, 0x4c24, 0x4c24, 0x4c24, 0x4c24, 
+    0x4c25, 0x4c25, 0x4c25, 0x4c25, 0x4c26, 0x4c26, 0x4c26, 0x4c26, 
+    0x4c27, 0x4c27, 0x4c27, 0x4c27, 0x4c28, 0x4c28, 0x4c28, 0x4c28, 
+    0x4c29, 0x4c29, 0x4c2a, 0x4c2a, 0x4c2b, 0x4c2b, 0x4c2c, 0x4c2c, 
+    0x4c2d, 0x4c2d, 0x4c2e, 0x4c2e, 0x4c2f, 0x4c2f, 0x4c30, 0x4c30, 
+    0x4c31, 0x4c31, 0x4c32, 0x4c32, 0x4c33, 0x4c33, 0x4c34, 0x4c34, 
+    0x4c35, 0x4c35, 0x4c36, 0x4c36, 0x4c36, 0x4c37, 0x4c37, 0x4c38, 
+    0x4c38, 0x4c39, 0x4c39, 0x4c3a, 0x4c3a, 0x4c3b, 0x4c3b, 0x4c3c, 
+    0x4c3c, 0x4c3d, 0x4c3d, 0x4c3e, 0x4c3e, 0x4c3f, 0x4c3f, 0x4c40, 
+    0x4c40, 0x4c41, 0x4c41, 0x4c42, 0x4c42, 0x4c43, 0x4c43, 0x4c43, 
+    0x4c44, 0x4c44, 0x4c45, 0x4c45, 0x4c46, 0x4c46, 0x4c47, 0x4c47, 
+    0x4c48, 0x4c48, 0x4c49, 0x4c49, 0x4c4a, 0x4c4a, 0x4c4b, 0x4c4b, 
+    0x4c4b, 0x4c4c, 0x4c4c, 0x4c4d, 0x4c4d, 0x4c4e, 0x4c4e, 0x4c4f, 
+    0x4c4f, 0x4c50, 0x4c50, 0x4c51, 0x4c51, 0x4c52, 0x4c52, 0x4c52, 
+    0x4c53, 0x4c53, 0x4c54, 0x4c54, 0x4c55, 0x4c55, 0x4c56, 0x4c56, 
+    0x4c57, 0x4c57, 0x4c57, 0x4c58, 0x4c58, 0x4c59, 0x4c59, 0x4c5a, 
+    0x4c5a, 0x4c5b, 0x4c5b, 0x4c5c, 0x4c5c, 0x4c5c, 0x4c5d, 0x4c5d, 
+    0x4c5e, 0x4c5e, 0x4c5f, 0x4c5f, 0x4c60, 0x4c60, 0x4c61, 0x4c61, 
+    0x4c61, 0x4c62, 0x4c62, 0x4c63, 0x4c63, 0x4c64, 0x4c64, 0x4c65, 
+    0x4c65, 0x4c65, 0x4c66, 0x4c66, 0x4c67, 0x4c67, 0x4c68, 0x4c68, 
+    0x4c69, 0x4c69, 0x4c69, 0x4c6a, 0x4c6a, 0x4c6b, 0x4c6b, 0x4c6c, 
+    0x4c6c, 0x4c6c, 0x4c6d, 0x4c6d, 0x4c6e, 0x4c6e, 0x4c6f, 0x4c6f, 
+    0x4c70, 0x4c70, 0x4c70, 0x4c71, 0x4c71, 0x4c72, 0x4c72, 0x4c73, 
+    0x4c73, 0x4c73, 0x4c74, 0x4c74, 0x4c75, 0x4c75, 0x4c76, 0x4c76, 
+    0x4c76, 0x4c77, 0x4c77, 0x4c78, 0x4c78, 0x4c79, 0x4c79, 0x4c79, 
+    0x4c7a, 0x4c7a, 0x4c7b, 0x4c7b, 0x4c7c, 0x4c7c, 0x4c7c, 0x4c7d, 
+    0x4c7d, 0x4c7e, 0x4c7e, 0x4c7f, 0x4c7f, 0x4c7f, 0x4c80, 0x4c80, 
+    0x4c81, 0x4c81, 0x4c82, 0x4c82, 0x4c82, 0x4c83, 0x4c83, 0x4c84, 
+    0x4c84, 0x4c84, 0x4c85, 0x4c85, 0x4c86, 0x4c86, 0x4c87, 0x4c87, 
+    0x4c87, 0x4c88, 0x4c88, 0x4c89, 0x4c89, 0x4c89, 0x4c8a, 0x4c8a, 
+    0x4c8b, 0x4c8b, 0x4c8b, 0x4c8c, 0x4c8c, 0x4c8d, 0x4c8d, 0x4c8e, 
+    0x4c8e, 0x4c8e, 0x4c8f, 0x4c8f, 0x4c90, 0x4c90, 0x4c90, 0x4c91, 
+    0x4c91, 0x4c92, 0x4c92, 0x4c92, 0x4c93, 0x4c93, 0x4c94, 0x4c94, 
+    0x4c94, 0x4c95, 0x4c95, 0x4c96, 0x4c96, 0x4c97, 0x4c97, 0x4c97, 
+    0x4c98, 0x4c98, 0x4c99, 0x4c99, 0x4c99, 0x4c9a, 0x4c9a, 0x4c9b, 
+    0x4c9b, 0x4c9b, 0x4c9c, 0x4c9c, 0x4c9d, 0x4c9d, 0x4c9d, 0x4c9e, 
+    0x4c9e, 0x4c9f, 0x4c9f, 0x4c9f, 0x4ca0, 0x4ca0, 0x4ca0, 0x4ca1, 
+    0x4ca1, 0x4ca2, 0x4ca2, 0x4ca2, 0x4ca3, 0x4ca3, 0x4ca4, 0x4ca4, 
+    0x4ca4, 0x4ca5, 0x4ca5, 0x4ca6, 0x4ca6, 0x4ca6, 0x4ca7, 0x4ca7, 
+    0x4ca8, 0x4ca8, 0x4ca8, 0x4ca9, 0x4ca9, 0x4caa, 0x4caa, 0x4caa, 
+    0x4cab, 0x4cab, 0x4cab, 0x4cac, 0x4cac, 0x4cad, 0x4cad, 0x4cad, 
+    0x4cae, 0x4cae, 0x4caf, 0x4caf, 0x4caf, 0x4cb0, 0x4cb0, 0x4cb0, 
+    0x4cb1, 0x4cb1, 0x4cb2, 0x4cb2, 0x4cb2, 0x4cb3, 0x4cb3, 0x4cb4, 
+    0x4cb4, 0x4cb4, 0x4cb5, 0x4cb5, 0x4cb5, 0x4cb6, 0x4cb6, 0x4cb7, 
+    0x4cb7, 0x4cb7, 0x4cb8, 0x4cb8, 0x4cb8, 0x4cb9, 0x4cb9, 0x4cba, 
+    0x4cba, 0x4cba, 0x4cbb, 0x4cbb, 0x4cbb, 0x4cbc, 0x4cbc, 0x4cbd, 
+    0x4cbd, 0x4cbd, 0x4cbe, 0x4cbe, 0x4cbe, 0x4cbf, 0x4cbf, 0x4cc0, 
+    0x4cc0, 0x4cc0, 0x4cc1, 0x4cc1, 0x4cc1, 0x4cc2, 0x4cc2, 0x4cc3, 
+    0x4cc3, 0x4cc3, 0x4cc4, 0x4cc4, 0x4cc4, 0x4cc5, 0x4cc5, 0x4cc6, 
+    0x4cc6, 0x4cc6, 0x4cc7, 0x4cc7, 0x4cc7, 0x4cc8, 0x4cc8, 0x4cc8, 
+    0x4cc9, 0x4cc9, 0x4cca, 0x4cca, 0x4cca, 0x4ccb, 0x4ccb, 0x4ccb, 
+    0x4ccc, 0x4ccc, 0x4ccc, 0x4ccd, 0x4ccd, 0x4cce, 0x4cce, 0x4cce, 
+    0x4ccf, 0x4ccf, 0x4ccf, 0x4cd0, 0x4cd0, 0x4cd0, 0x4cd1, 0x4cd1, 
+    0x4cd2, 0x4cd2, 0x4cd2, 0x4cd3, 0x4cd3, 0x4cd3, 0x4cd4, 0x4cd4, 
+    0x4cd4, 0x4cd5, 0x4cd5, 0x4cd5, 0x4cd6, 0x4cd6, 0x4cd7, 0x4cd7, 
+    0x4cd7, 0x4cd8, 0x4cd8, 0x4cd8, 0x4cd9, 0x4cd9, 0x4cd9, 0x4cda, 
+    0x4cda, 0x4cda, 0x4cdb, 0x4cdb, 0x4cdb, 0x4cdc, 0x4cdc, 0x4cdd, 
+    0x4cdd, 0x4cdd, 0x4cde, 0x4cde, 0x4cde, 0x4cdf, 0x4cdf, 0x4cdf, 
+    0x4ce0, 0x4ce0, 0x4ce0, 0x4ce1, 0x4ce1, 0x4ce1, 0x4ce2, 0x4ce2, 
+    0x4ce2, 0x4ce3, 0x4ce3, 0x4ce4, 0x4ce4, 0x4ce4, 0x4ce5, 0x4ce5, 
+    0x4ce5, 0x4ce6, 0x4ce6, 0x4ce6, 0x4ce7, 0x4ce7, 0x4ce7, 0x4ce8, 
+    0x4ce8, 0x4ce8, 0x4ce9, 0x4ce9, 0x4ce9, 0x4cea, 0x4cea, 0x4cea, 
+    0x4ceb, 0x4ceb, 0x4ceb, 0x4cec, 0x4cec, 0x4cec, 0x4ced, 0x4ced, 
+    0x4ced, 0x4cee, 0x4cee, 0x4cef, 0x4cef, 0x4cef, 0x4cf0, 0x4cf0, 
+    0x4cf0, 0x4cf1, 0x4cf1, 0x4cf1, 0x4cf2, 0x4cf2, 0x4cf2, 0x4cf3, 
+    0x4cf3, 0x4cf3, 0x4cf4, 0x4cf4, 0x4cf4, 0x4cf5, 0x4cf5, 0x4cf5, 
+    0x4cf6, 0x4cf6, 0x4cf6, 0x4cf7, 0x4cf7, 0x4cf7, 0x4cf8, 0x4cf8, 
+    0x4cf8, 0x4cf9, 0x4cf9, 0x4cf9, 0x4cfa, 0x4cfa, 0x4cfa, 0x4cfb, 
+    0x4cfb, 0x4cfb, 0x4cfc, 0x4cfc, 0x4cfc, 0x4cfd, 0x4cfd, 0x4cfd, 
+    0x4cfe, 0x4cfe, 0x4cfe, 0x4cff, 0x4cff, 0x4cff, 0x4d00, 0x4d00, 
+    0x4d00, 0x4d01, 0x4d01, 0x4d01, 0x4d02, 0x4d02, 0x4d02, 0x4d03, 
+    0x4d03, 0x4d03, 0x4d03, 0x4d04, 0x4d04, 0x4d04, 0x4d05, 0x4d05, 
+    0x4d05, 0x4d06, 0x4d06, 0x4d06, 0x4d07, 0x4d07, 0x4d07, 0x4d08, 
+    0x4d08, 0x4d08, 0x4d09, 0x4d09, 0x4d09, 0x4d0a, 0x4d0a, 0x4d0a, 
+    0x4d0b, 0x4d0b, 0x4d0b, 0x4d0c, 0x4d0c, 0x4d0c, 0x4d0d, 0x4d0d, 
+    0x4d0d, 0x4d0d, 0x4d0e, 0x4d0e, 0x4d0e, 0x4d0f, 0x4d0f, 0x4d0f, 
+    0x4d10, 0x4d10, 0x4d10, 0x4d11, 0x4d11, 0x4d11, 0x4d12, 0x4d12, 
+    0x4d12, 0x4d13, 0x4d13, 0x4d13, 0x4d14, 0x4d14, 0x4d14, 0x4d14, 
+    0x4d15, 0x4d15, 0x4d15, 0x4d16, 0x4d16, 0x4d16, 0x4d17, 0x4d17, 
+    0x4d17, 0x4d18, 0x4d18, 0x4d18, 0x4d19, 0x4d19, 0x4d19, 0x4d1a, 
+    0x4d1a, 0x4d1a, 0x4d1a, 0x4d1b, 0x4d1b, 0x4d1b, 0x4d1c, 0x4d1c, 
+    0x4d1c, 0x4d1d, 0x4d1d, 0x4d1d, 0x4d1e, 0x4d1e, 0x4d1e, 0x4d1e, 
+    0x4d1f, 0x4d1f, 0x4d1f, 0x4d20, 0x4d20, 0x4d20, 0x4d21, 0x4d21, 
+    0x4d21, 0x4d22, 0x4d22, 0x4d22, 0x4d22, 0x4d23, 0x4d23, 0x4d23, 
+    0x4d24, 0x4d24, 0x4d24, 0x4d25, 0x4d25, 0x4d25, 0x4d26, 0x4d26, 
+    0x4d26, 0x4d26, 0x4d27, 0x4d27, 0x4d27, 0x4d28, 0x4d28, 0x4d28, 
+    0x4d29, 0x4d29, 0x4d29, 0x4d29, 0x4d2a, 0x4d2a, 0x4d2a, 0x4d2b, 
+    0x4d2b, 0x4d2b, 0x4d2c, 0x4d2c, 0x4d2c, 0x4d2d, 0x4d2d, 0x4d2d, 
+    0x4d2d, 0x4d2e, 0x4d2e, 0x4d2e, 0x4d2f, 0x4d2f, 0x4d2f, 0x4d30, 
+    0x4d30, 0x4d30, 0x4d30, 0x4d31, 0x4d31, 0x4d31, 0x4d32, 0x4d32, 
+    0x4d32, 0x4d32, 0x4d33, 0x4d33, 0x4d33, 0x4d34, 0x4d34, 0x4d34, 
+    0x4d35, 0x4d35, 0x4d35, 0x4d35, 0x4d36, 0x4d36, 0x4d36, 0x4d37, 
+    0x4d37, 0x4d37, 0x4d38, 0x4d38, 0x4d38, 0x4d38, 0x4d39, 0x4d39, 
+    0x4d39, 0x4d3a, 0x4d3a, 0x4d3a, 0x4d3a, 0x4d3b, 0x4d3b, 0x4d3b, 
+    0x4d3c, 0x4d3c, 0x4d3c, 0x4d3d, 0x4d3d, 0x4d3d, 0x4d3d, 0x4d3e, 
+    0x4d3e, 0x4d3e, 0x4d3f, 0x4d3f, 0x4d3f, 0x4d3f, 0x4d40, 0x4d40, 
+    0x4d40, 0x4d41, 0x4d41, 0x4d41, 0x4d41, 0x4d42, 0x4d42, 0x4d42, 
+    0x4d43, 0x4d43, 0x4d43, 0x4d43, 0x4d44, 0x4d44, 0x4d44, 0x4d45, 
+    0x4d45, 0x4d45, 0x4d45, 0x4d46, 0x4d46, 0x4d46, 0x4d47, 0x4d47, 
+    0x4d47, 0x4d47, 0x4d48, 0x4d48, 0x4d48, 0x4d49, 0x4d49, 0x4d49, 
+    0x4d49, 0x4d4a, 0x4d4a, 0x4d4a, 0x4d4b, 0x4d4b, 0x4d4b, 0x4d4b, 
+    0x4d4c, 0x4d4c, 0x4d4c, 0x4d4d, 0x4d4d, 0x4d4d, 0x4d4d, 0x4d4e, 
+    0x4d4e, 0x4d4e, 0x4d4f, 0x4d4f, 0x4d4f, 0x4d4f, 0x4d50, 0x4d50, 
+    0x4d50, 0x4d51, 0x4d51, 0x4d51, 0x4d51, 0x4d52, 0x4d52, 0x4d52, 
+    0x4d53, 0x4d53, 0x4d53, 0x4d53, 0x4d54, 0x4d54, 0x4d54, 0x4d54, 
+    0x4d55, 0x4d55, 0x4d55, 0x4d56, 0x4d56, 0x4d56, 0x4d56, 0x4d57, 
+    0x4d57, 0x4d57, 0x4d58, 0x4d58, 0x4d58, 0x4d58, 0x4d59, 0x4d59, 
+    0x4d59, 0x4d59, 0x4d5a, 0x4d5a, 0x4d5a, 0x4d5b, 0x4d5b, 0x4d5b, 
+    0x4d5b, 0x4d5c, 0x4d5c, 0x4d5c, 0x4d5c, 0x4d5d, 0x4d5d, 0x4d5d, 
+    0x4d5e, 0x4d5e, 0x4d5e, 0x4d5e, 0x4d5f, 0x4d5f, 0x4d5f, 0x4d5f, 
+    0x4d60, 0x4d60, 0x4d60, 0x4d61, 0x4d61, 0x4d61, 0x4d61, 0x4d62, 
+    0x4d62, 0x4d62, 0x4d62, 0x4d63, 0x4d63, 0x4d63, 0x4d64, 0x4d64, 
+    0x4d64, 0x4d64, 0x4d65, 0x4d65, 0x4d65, 0x4d65, 0x4d66, 0x4d66, 
+    0x4d66, 0x4d67, 0x4d67, 0x4d67, 0x4d67, 0x4d68, 0x4d68, 0x4d68, 
+    0x4d68, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, 
+    0x4d6b, 0x4d6b, 0x4d6b, 0x4d6b, 0x4d6c, 0x4d6c, 0x4d6c, 0x4d6c, 
+    0x4d6d, 0x4d6d, 0x4d6d, 0x4d6d, 0x4d6e, 0x4d6e, 0x4d6e, 0x4d6f, 
+    0x4d6f, 0x4d6f, 0x4d6f, 0x4d70, 0x4d70, 0x4d70, 0x4d70, 0x4d71, 
+    0x4d71, 0x4d71, 0x4d71, 0x4d72, 0x4d72, 0x4d72, 0x4d72, 0x4d73, 
+    0x4d73, 0x4d73, 0x4d74, 0x4d74, 0x4d74, 0x4d74, 0x4d75, 0x4d75, 
+    0x4d75, 0x4d75, 0x4d76, 0x4d76, 0x4d76, 0x4d76, 0x4d77, 0x4d77, 
+    0x4d77, 0x4d77, 0x4d78, 0x4d78, 0x4d78, 0x4d78, 0x4d79, 0x4d79, 
+    0x4d79, 0x4d7a, 0x4d7a, 0x4d7a, 0x4d7a, 0x4d7b, 0x4d7b, 0x4d7b, 
+    0x4d7b, 0x4d7c, 0x4d7c, 0x4d7c, 0x4d7c, 0x4d7d, 0x4d7d, 0x4d7d, 
+    0x4d7d, 0x4d7e, 0x4d7e, 0x4d7e, 0x4d7e, 0x4d7f, 0x4d7f, 0x4d7f, 
+    0x4d7f, 0x4d80, 0x4d80, 0x4d80, 0x4d80, 0x4d81, 0x4d81, 0x4d81, 
+    0x4d81, 0x4d82, 0x4d82, 0x4d82, 0x4d82, 0x4d83, 0x4d83, 0x4d83, 
+    0x4d84, 0x4d84, 0x4d84, 0x4d84, 0x4d85, 0x4d85, 0x4d85, 0x4d85, 
+    0x4d86, 0x4d86, 0x4d86, 0x4d86, 0x4d87, 0x4d87, 0x4d87, 0x4d87, 
+    0x4d88, 0x4d88, 0x4d88, 0x4d88, 0x4d89, 0x4d89, 0x4d89, 0x4d89, 
+    0x4d8a, 0x4d8a, 0x4d8a, 0x4d8a, 0x4d8b, 0x4d8b, 0x4d8b, 0x4d8b, 
+    0x4d8c, 0x4d8c, 0x4d8d, 0x4d8d, 0x4d8e, 0x4d8e, 0x4d8f, 0x4d8f, 
+    0x4d90, 0x4d90, 0x4d91, 0x4d91, 0x4d92, 0x4d92, 0x4d93, 0x4d93, 
+    0x4d94, 0x4d94, 0x4d94, 0x4d95, 0x4d95, 0x4d96, 0x4d96, 0x4d97, 
+    0x4d97, 0x4d98, 0x4d98, 0x4d99, 0x4d99, 0x4d9a, 0x4d9a, 0x4d9b, 
+    0x4d9b, 0x4d9c, 0x4d9c, 0x4d9d, 0x4d9d, 0x4d9e, 0x4d9e, 0x4d9f, 
+    0x4d9f, 0x4da0, 0x4da0, 0x4da1, 0x4da1, 0x4da2, 0x4da2, 0x4da3, 
+    0x4da3, 0x4da3, 0x4da4, 0x4da4, 0x4da5, 0x4da5, 0x4da6, 0x4da6, 
+    0x4da7, 0x4da7, 0x4da8, 0x4da8, 0x4da9, 0x4da9, 0x4daa, 0x4daa, 
+    0x4dab, 0x4dab, 0x4dac, 0x4dac, 0x4dac, 0x4dad, 0x4dad, 0x4dae, 
+    0x4dae, 0x4daf, 0x4daf, 0x4db0, 0x4db0, 0x4db1, 0x4db1, 0x4db2, 
+    0x4db2, 0x4db3, 0x4db3, 0x4db3, 0x4db4, 0x4db4, 0x4db5, 0x4db5, 
+    0x4db6, 0x4db6, 0x4db7, 0x4db7, 0x4db8, 0x4db8, 0x4db9, 0x4db9, 
+    0x4db9, 0x4dba, 0x4dba, 0x4dbb, 0x4dbb, 0x4dbc, 0x4dbc, 0x4dbd, 
+    0x4dbd, 0x4dbe, 0x4dbe, 0x4dbe, 0x4dbf, 0x4dbf, 0x4dc0, 0x4dc0, 
+    0x4dc1, 0x4dc1, 0x4dc2, 0x4dc2, 0x4dc3, 0x4dc3, 0x4dc3, 0x4dc4, 
+    0x4dc4, 0x4dc5, 0x4dc5, 0x4dc6, 0x4dc6, 0x4dc7, 0x4dc7, 0x4dc7, 
+    0x4dc8, 0x4dc8, 0x4dc9, 0x4dc9, 0x4dca, 0x4dca, 0x4dcb, 0x4dcb, 
+    0x4dcb, 0x4dcc, 0x4dcc, 0x4dcd, 0x4dcd, 0x4dce, 0x4dce, 0x4dce, 
+    0x4dcf, 0x4dcf, 0x4dd0, 0x4dd0, 0x4dd1, 0x4dd1, 0x4dd2, 0x4dd2, 
+    0x4dd2, 0x4dd3, 0x4dd3, 0x4dd4, 0x4dd4, 0x4dd5, 0x4dd5, 0x4dd5, 
+    0x4dd6, 0x4dd6, 0x4dd7, 0x4dd7, 0x4dd8, 0x4dd8, 0x4dd8, 0x4dd9, 
+    0x4dd9, 0x4dda, 0x4dda, 0x4ddb, 0x4ddb, 0x4ddb, 0x4ddc, 0x4ddc, 
+    0x4ddd, 0x4ddd, 0x4dde, 0x4dde, 0x4dde, 0x4ddf, 0x4ddf, 0x4de0, 
+    0x4de0, 0x4de1, 0x4de1, 0x4de1, 0x4de2, 0x4de2, 0x4de3, 0x4de3, 
+    0x4de4, 0x4de4, 0x4de4, 0x4de5, 0x4de5, 0x4de6, 0x4de6, 0x4de6, 
+    0x4de7, 0x4de7, 0x4de8, 0x4de8, 0x4de9, 0x4de9, 0x4de9, 0x4dea, 
+    0x4dea, 0x4deb, 0x4deb, 0x4deb, 0x4dec, 0x4dec, 0x4ded, 0x4ded, 
+    0x4dee, 0x4dee, 0x4dee, 0x4def, 0x4def, 0x4df0, 0x4df0, 0x4df0, 
+    0x4df1, 0x4df1, 0x4df2, 0x4df2, 0x4df2, 0x4df3, 0x4df3, 0x4df4, 
+    0x4df4, 0x4df5, 0x4df5, 0x4df5, 0x4df6, 0x4df6, 0x4df7, 0x4df7, 
+    0x4df7, 0x4df8, 0x4df8, 0x4df9, 0x4df9, 0x4df9, 0x4dfa, 0x4dfa, 
+    0x4dfb, 0x4dfb, 0x4dfb, 0x4dfc, 0x4dfc, 0x4dfd, 0x4dfd, 0x4dfd, 
+    0x4dfe, 0x4dfe, 0x4dff, 0x4dff, 0x4dff, 0x4e00, 0x4e00, 0x4e01, 
+    0x4e01, 0x4e01, 0x4e02, 0x4e02, 0x4e03, 0x4e03, 0x4e03, 0x4e04, 
+    0x4e04, 0x4e05, 0x4e05, 0x4e05, 0x4e06, 0x4e06, 0x4e07, 0x4e07, 
+    0x4e07, 0x4e08, 0x4e08, 0x4e09, 0x4e09, 0x4e09, 0x4e0a, 0x4e0a, 
+    0x4e0a, 0x4e0b, 0x4e0b, 0x4e0c, 0x4e0c, 0x4e0c, 0x4e0d, 0x4e0d, 
+    0x4e0e, 0x4e0e, 0x4e0e, 0x4e0f, 0x4e0f, 0x4e10, 0x4e10, 0x4e10, 
+    0x4e11, 0x4e11, 0x4e11, 0x4e12, 0x4e12, 0x4e13, 0x4e13, 0x4e13, 
+    0x4e14, 0x4e14, 0x4e15, 0x4e15, 0x4e15, 0x4e16, 0x4e16, 0x4e16, 
+    0x4e17, 0x4e17, 0x4e18, 0x4e18, 0x4e18, 0x4e19, 0x4e19, 0x4e19, 
+    0x4e1a, 0x4e1a, 0x4e1b, 0x4e1b, 0x4e1b, 0x4e1c, 0x4e1c, 0x4e1c, 
+    0x4e1d, 0x4e1d, 0x4e1e, 0x4e1e, 0x4e1e, 0x4e1f, 0x4e1f, 0x4e1f, 
+    0x4e20, 0x4e20, 0x4e21, 0x4e21, 0x4e21, 0x4e22, 0x4e22, 0x4e22, 
+    0x4e23, 0x4e23, 0x4e24, 0x4e24, 0x4e24, 0x4e25, 0x4e25, 0x4e25, 
+    0x4e26, 0x4e26, 0x4e27, 0x4e27, 0x4e27, 0x4e28, 0x4e28, 0x4e28, 
+    0x4e29, 0x4e29, 0x4e29, 0x4e2a, 0x4e2a, 0x4e2b, 0x4e2b, 0x4e2b, 
+    0x4e2c, 0x4e2c, 0x4e2c, 0x4e2d, 0x4e2d, 0x4e2e, 0x4e2e, 0x4e2e, 
+    0x4e2f, 0x4e2f, 0x4e2f, 0x4e30, 0x4e30, 0x4e30, 0x4e31, 0x4e31, 
+    0x4e32, 0x4e32, 0x4e32, 0x4e33, 0x4e33, 0x4e33, 0x4e34, 0x4e34, 
+    0x4e34, 0x4e35, 0x4e35, 0x4e35, 0x4e36, 0x4e36, 0x4e37, 0x4e37, 
+    0x4e37, 0x4e38, 0x4e38, 0x4e38, 0x4e39, 0x4e39, 0x4e39, 0x4e3a, 
+    0x4e3a, 0x4e3a, 0x4e3b, 0x4e3b, 0x4e3c, 0x4e3c, 0x4e3c, 0x4e3d, 
+    0x4e3d, 0x4e3d, 0x4e3e, 0x4e3e, 0x4e3e, 0x4e3f, 0x4e3f, 0x4e3f, 
+    0x4e40, 0x4e40, 0x4e40, 0x4e41, 0x4e41, 0x4e42, 0x4e42, 0x4e42, 
+    0x4e43, 0x4e43, 0x4e43, 0x4e44, 0x4e44, 0x4e44, 0x4e45, 0x4e45, 
+    0x4e45, 0x4e46, 0x4e46, 0x4e46, 0x4e47, 0x4e47, 0x4e47, 0x4e48, 
+    0x4e48, 0x4e48, 0x4e49, 0x4e49, 0x4e4a, 0x4e4a, 0x4e4a, 0x4e4b, 
+    0x4e4b, 0x4e4b, 0x4e4c, 0x4e4c, 0x4e4c, 0x4e4d, 0x4e4d, 0x4e4d, 
+    0x4e4e, 0x4e4e, 0x4e4e, 0x4e4f, 0x4e4f, 0x4e4f, 0x4e50, 0x4e50, 
+    0x4e50, 0x4e51, 0x4e51, 0x4e51, 0x4e52, 0x4e52, 0x4e52, 0x4e53, 
+    0x4e53, 0x4e53, 0x4e54, 0x4e54, 0x4e54, 0x4e55, 0x4e55, 0x4e55, 
+    0x4e56, 0x4e56, 0x4e56, 0x4e57, 0x4e57, 0x4e57, 0x4e58, 0x4e58, 
+    0x4e58, 0x4e59, 0x4e59, 0x4e59, 0x4e5a, 0x4e5a, 0x4e5a, 0x4e5b, 
+    0x4e5b, 0x4e5b, 0x4e5c, 0x4e5c, 0x4e5c, 0x4e5d, 0x4e5d, 0x4e5d, 
+    0x4e5e, 0x4e5e, 0x4e5e, 0x4e5f, 0x4e5f, 0x4e5f, 0x4e60, 0x4e60, 
+    0x4e60, 0x4e61, 0x4e61, 0x4e61, 0x4e62, 0x4e62, 0x4e62, 0x4e63, 
+    0x4e63, 0x4e63, 0x4e64, 0x4e64, 0x4e64, 0x4e65, 0x4e65, 0x4e65, 
+    0x4e66, 0x4e66, 0x4e66, 0x4e67, 0x4e67, 0x4e67, 0x4e68, 0x4e68, 
+    0x4e68, 0x4e69, 0x4e69, 0x4e69, 0x4e6a, 0x4e6a, 0x4e6a, 0x4e6b, 
+    0x4e6b, 0x4e6b, 0x4e6c, 0x4e6c, 0x4e6c, 0x4e6d, 0x4e6d, 0x4e6d, 
+    0x4e6d, 0x4e6e, 0x4e6e, 0x4e6e, 0x4e6f, 0x4e6f, 0x4e6f, 0x4e70, 
+    0x4e70, 0x4e70, 0x4e71, 0x4e71, 0x4e71, 0x4e72, 0x4e72, 0x4e72, 
+    0x4e73, 0x4e73, 0x4e73, 0x4e74, 0x4e74, 0x4e74, 0x4e75, 0x4e75, 
+    0x4e75, 0x4e75, 0x4e76, 0x4e76, 0x4e76, 0x4e77, 0x4e77, 0x4e77, 
+    0x4e78, 0x4e78, 0x4e78, 0x4e79, 0x4e79, 0x4e79, 0x4e7a, 0x4e7a, 
+    0x4e7a, 0x4e7b, 0x4e7b, 0x4e7b, 0x4e7b, 0x4e7c, 0x4e7c, 0x4e7c, 
+    0x4e7d, 0x4e7d, 0x4e7d, 0x4e7e, 0x4e7e, 0x4e7e, 0x4e7f, 0x4e7f, 
+    0x4e7f, 0x4e80, 0x4e80, 0x4e80, 0x4e80, 0x4e81, 0x4e81, 0x4e81, 
+    0x4e82, 0x4e82, 0x4e82, 0x4e83, 0x4e83, 0x4e83, 0x4e84, 0x4e84, 
+    0x4e84, 0x4e84, 0x4e85, 0x4e85, 0x4e85, 0x4e86, 0x4e86, 0x4e86, 
+    0x4e87, 0x4e87, 0x4e87, 0x4e88, 0x4e88, 0x4e88, 0x4e88, 0x4e89, 
+    0x4e89, 0x4e89, 0x4e8a, 0x4e8a, 0x4e8a, 0x4e8b, 0x4e8b, 0x4e8b, 
+    0x4e8b, 0x4e8c, 0x4e8c, 0x4e8c, 0x4e8d, 0x4e8d, 0x4e8d, 0x4e8e, 
+    0x4e8e, 0x4e8e, 0x4e8f, 0x4e8f, 0x4e8f, 0x4e8f, 0x4e90, 0x4e90, 
+    0x4e90, 0x4e91, 0x4e91, 0x4e91, 0x4e92, 0x4e92, 0x4e92, 0x4e92, 
+    0x4e93, 0x4e93, 0x4e93, 0x4e94, 0x4e94, 0x4e94, 0x4e94, 0x4e95, 
+    0x4e95, 0x4e95, 0x4e96, 0x4e96, 0x4e96, 0x4e97, 0x4e97, 0x4e97, 
+    0x4e97, 0x4e98, 0x4e98, 0x4e98, 0x4e99, 0x4e99, 0x4e99, 0x4e9a, 
+    0x4e9a, 0x4e9a, 0x4e9a, 0x4e9b, 0x4e9b, 0x4e9b, 0x4e9c, 0x4e9c, 
+    0x4e9c, 0x4e9c, 0x4e9d, 0x4e9d, 0x4e9d, 0x4e9e, 0x4e9e, 0x4e9e, 
+    0x4e9f, 0x4e9f, 0x4e9f, 0x4e9f, 0x4ea0, 0x4ea0, 0x4ea0, 0x4ea1, 
+    0x4ea1, 0x4ea1, 0x4ea1, 0x4ea2, 0x4ea2, 0x4ea2, 0x4ea3, 0x4ea3, 
+    0x4ea3, 0x4ea3, 0x4ea4, 0x4ea4, 0x4ea4, 0x4ea5, 0x4ea5, 0x4ea5, 
+    0x4ea5, 0x4ea6, 0x4ea6, 0x4ea6, 0x4ea7, 0x4ea7, 0x4ea7, 0x4ea8, 
+    0x4ea8, 0x4ea8, 0x4ea8, 0x4ea9, 0x4ea9, 0x4ea9, 0x4eaa, 0x4eaa, 
+    0x4eaa, 0x4eaa, 0x4eab, 0x4eab, 0x4eab, 0x4eac, 0x4eac, 0x4eac, 
+    0x4eac, 0x4ead, 0x4ead, 0x4ead, 0x4eae, 0x4eae, 0x4eae, 0x4eae, 
+    0x4eaf, 0x4eaf, 0x4eaf, 0x4eaf, 0x4eb0, 0x4eb0, 0x4eb0, 0x4eb1, 
+    0x4eb1, 0x4eb1, 0x4eb1, 0x4eb2, 0x4eb2, 0x4eb2, 0x4eb3, 0x4eb3, 
+    0x4eb3, 0x4eb3, 0x4eb4, 0x4eb4, 0x4eb4, 0x4eb5, 0x4eb5, 0x4eb5, 
+    0x4eb5, 0x4eb6, 0x4eb6, 0x4eb6, 0x4eb7, 0x4eb7, 0x4eb7, 0x4eb7, 
+    0x4eb8, 0x4eb8, 0x4eb8, 0x4eb8, 0x4eb9, 0x4eb9, 0x4eb9, 0x4eba, 
+    0x4eba, 0x4eba, 0x4eba, 0x4ebb, 0x4ebb, 0x4ebb, 0x4ebc, 0x4ebc, 
+    0x4ebc, 0x4ebc, 0x4ebd, 0x4ebd, 0x4ebd, 0x4ebd, 0x4ebe, 0x4ebe, 
+    0x4ebe, 0x4ebf, 0x4ebf, 0x4ebf, 0x4ebf, 0x4ec0, 0x4ec0, 0x4ec0, 
+    0x4ec0, 0x4ec1, 0x4ec1, 0x4ec1, 0x4ec2, 0x4ec2, 0x4ec2, 0x4ec2, 
+    0x4ec3, 0x4ec3, 0x4ec3, 0x4ec3, 0x4ec4, 0x4ec4, 0x4ec4, 0x4ec5, 
+    0x4ec5, 0x4ec5, 0x4ec5, 0x4ec6, 0x4ec6, 0x4ec6, 0x4ec6, 0x4ec7, 
+    0x4ec7, 0x4ec7, 0x4ec8, 0x4ec8, 0x4ec8, 0x4ec8, 0x4ec9, 0x4ec9, 
+    0x4ec9, 0x4ec9, 0x4eca, 0x4eca, 0x4eca, 0x4eca, 0x4ecb, 0x4ecb, 
+    0x4ecb, 0x4ecc, 0x4ecc, 0x4ecc, 0x4ecc, 0x4ecd, 0x4ecd, 0x4ecd, 
+    0x4ecd, 0x4ece, 0x4ece, 0x4ece, 0x4ece, 0x4ecf, 0x4ecf, 0x4ecf, 
+    0x4ed0, 0x4ed0, 0x4ed0, 0x4ed0, 0x4ed1, 0x4ed1, 0x4ed1, 0x4ed1, 
+    0x4ed2, 0x4ed2, 0x4ed2, 0x4ed2, 0x4ed3, 0x4ed3, 0x4ed3, 0x4ed4, 
+    0x4ed4, 0x4ed4, 0x4ed4, 0x4ed5, 0x4ed5, 0x4ed5, 0x4ed5, 0x4ed6, 
+    0x4ed6, 0x4ed6, 0x4ed6, 0x4ed7, 0x4ed7, 0x4ed7, 0x4ed7, 0x4ed8, 
+    0x4ed8, 0x4ed8, 0x4ed8, 0x4ed9, 0x4ed9, 0x4ed9, 0x4eda, 0x4eda, 
+    0x4eda, 0x4eda, 0x4edb, 0x4edb, 0x4edb, 0x4edb, 0x4edc, 0x4edc, 
+    0x4edc, 0x4edc, 0x4edd, 0x4edd, 0x4edd, 0x4edd, 0x4ede, 0x4ede, 
+    0x4ede, 0x4ede, 0x4edf, 0x4edf, 0x4edf, 0x4edf, 0x4ee0, 0x4ee0, 
+    0x4ee0, 0x4ee1, 0x4ee1, 0x4ee1, 0x4ee1, 0x4ee2, 0x4ee2, 0x4ee2, 
+    0x4ee2, 0x4ee3, 0x4ee3, 0x4ee3, 0x4ee3, 0x4ee4, 0x4ee4, 0x4ee4, 
+    0x4ee4, 0x4ee5, 0x4ee5, 0x4ee5, 0x4ee5, 0x4ee6, 0x4ee6, 0x4ee6, 
+    0x4ee6, 0x4ee7, 0x4ee7, 0x4ee7, 0x4ee7, 0x4ee8, 0x4ee8, 0x4ee8, 
+    0x4ee8, 0x4ee9, 0x4ee9, 0x4ee9, 0x4ee9, 0x4eea, 0x4eea, 0x4eea, 
+    0x4eea, 0x4eeb, 0x4eeb, 0x4eeb, 0x4eeb, 0x4eec, 0x4eec, 0x4eec, 
+    0x4eec, 0x4eed, 0x4eed, 0x4eed, 0x4eed, 0x4eee, 0x4eee, 0x4eee, 
+    0x4eee, 0x4eef, 0x4eef, 0x4ef0, 0x4ef0, 0x4ef1, 0x4ef1, 0x4ef2, 
+    0x4ef2, 0x4ef3, 0x4ef3, 0x4ef4, 0x4ef4, 0x4ef5, 0x4ef5, 0x4ef6, 
+    0x4ef6, 0x4ef7, 0x4ef7, 0x4ef8, 0x4ef8, 0x4ef9, 0x4ef9, 0x4efa, 
+    0x4efa, 0x4efb, 0x4efb, 0x4efc, 0x4efc, 0x4efd, 0x4efd, 0x4efe, 
+    0x4efe, 0x4eff, 0x4eff, 0x4f00, 0x4f00, 0x4f01, 0x4f01, 0x4f02, 
+    0x4f02, 0x4f03, 0x4f03, 0x4f04, 0x4f04, 0x4f04, 0x4f05, 0x4f05, 
+    0x4f06, 0x4f06, 0x4f07, 0x4f07, 0x4f08, 0x4f08, 0x4f09, 0x4f09, 
+    0x4f0a, 0x4f0a, 0x4f0b, 0x4f0b, 0x4f0c, 0x4f0c, 0x4f0d, 0x4f0d, 
+    0x4f0d, 0x4f0e, 0x4f0e, 0x4f0f, 0x4f0f, 0x4f10, 0x4f10, 0x4f11, 
+    0x4f11, 0x4f12, 0x4f12, 0x4f13, 0x4f13, 0x4f14, 0x4f14, 0x4f15, 
+    0x4f15, 0x4f15, 0x4f16, 0x4f16, 0x4f17, 0x4f17, 0x4f18, 0x4f18, 
+    0x4f19, 0x4f19, 0x4f1a, 0x4f1a, 0x4f1b, 0x4f1b, 0x4f1b, 0x4f1c, 
+    0x4f1c, 0x4f1d, 0x4f1d, 0x4f1e, 0x4f1e, 0x4f1f, 0x4f1f, 0x4f20, 
+    0x4f20, 0x4f20, 0x4f21, 0x4f21, 0x4f22, 0x4f22, 0x4f23, 0x4f23, 
+    0x4f24, 0x4f24, 0x4f25, 0x4f25, 0x4f25, 0x4f26, 0x4f26, 0x4f27, 
+    0x4f27, 0x4f28, 0x4f28, 0x4f29, 0x4f29, 0x4f29, 0x4f2a, 0x4f2a, 
+    0x4f2b, 0x4f2b, 0x4f2c, 0x4f2c, 0x4f2d, 0x4f2d, 0x4f2d, 0x4f2e, 
+    0x4f2e, 0x4f2f, 0x4f2f, 0x4f30, 0x4f30, 0x4f31, 0x4f31, 0x4f31, 
+    0x4f32, 0x4f32, 0x4f33, 0x4f33, 0x4f34, 0x4f34, 0x4f34, 0x4f35, 
+    0x4f35, 0x4f36, 0x4f36, 0x4f37, 0x4f37, 0x4f37, 0x4f38, 0x4f38, 
+    0x4f39, 0x4f39, 0x4f3a, 0x4f3a, 0x4f3b, 0x4f3b, 0x4f3b, 0x4f3c, 
+    0x4f3c, 0x4f3d, 0x4f3d, 0x4f3e, 0x4f3e, 0x4f3e, 0x4f3f, 0x4f3f, 
+    0x4f40, 0x4f40, 0x4f41, 0x4f41, 0x4f41, 0x4f42, 0x4f42, 0x4f43, 
+    0x4f43, 0x4f43, 0x4f44, 0x4f44, 0x4f45, 0x4f45, 0x4f46, 0x4f46, 
+    0x4f46, 0x4f47, 0x4f47, 0x4f48, 0x4f48, 0x4f49, 0x4f49, 0x4f49, 
+    0x4f4a, 0x4f4a, 0x4f4b, 0x4f4b, 0x4f4b, 0x4f4c, 0x4f4c, 0x4f4d, 
+    0x4f4d, 0x4f4e, 0x4f4e, 0x4f4e, 0x4f4f, 0x4f4f, 0x4f50, 0x4f50, 
+    0x4f50, 0x4f51, 0x4f51, 0x4f52, 0x4f52, 0x4f53, 0x4f53, 0x4f53, 
+    0x4f54, 0x4f54, 0x4f55, 0x4f55, 0x4f55, 0x4f56, 0x4f56, 0x4f57, 
+    0x4f57, 0x4f57, 0x4f58, 0x4f58, 0x4f59, 0x4f59, 0x4f59, 0x4f5a, 
+    0x4f5a, 0x4f5b, 0x4f5b, 0x4f5b, 0x4f5c, 0x4f5c, 0x4f5d, 0x4f5d, 
+    0x4f5d, 0x4f5e, 0x4f5e, 0x4f5f, 0x4f5f, 0x4f60, 0x4f60, 0x4f60, 
+    0x4f61, 0x4f61, 0x4f62, 0x4f62, 0x4f62, 0x4f63, 0x4f63, 0x4f63, 
+    0x4f64, 0x4f64, 0x4f65, 0x4f65, 0x4f65, 0x4f66, 0x4f66, 0x4f67, 
+    0x4f67, 0x4f67, 0x4f68, 0x4f68, 0x4f69, 0x4f69, 0x4f69, 0x4f6a, 
+    0x4f6a, 0x4f6b, 0x4f6b, 0x4f6b, 0x4f6c, 0x4f6c, 0x4f6d, 0x4f6d, 
+    0x4f6d, 0x4f6e, 0x4f6e, 0x4f6f, 0x4f6f, 0x4f6f, 0x4f70, 0x4f70, 
+    0x4f70, 0x4f71, 0x4f71, 0x4f72, 0x4f72, 0x4f72, 0x4f73, 0x4f73, 
+    0x4f74, 0x4f74, 0x4f74, 0x4f75, 0x4f75, 0x4f75, 0x4f76, 0x4f76, 
+    0x4f77, 0x4f77, 0x4f77, 0x4f78, 0x4f78, 0x4f79, 0x4f79, 0x4f79, 
+    0x4f7a, 0x4f7a, 0x4f7a, 0x4f7b, 0x4f7b, 0x4f7c, 0x4f7c, 0x4f7c, 
+    0x4f7d, 0x4f7d, 0x4f7d, 0x4f7e, 0x4f7e, 0x4f7f, 0x4f7f, 0x4f7f, 
+    0x4f80, 0x4f80, 0x4f80, 0x4f81, 0x4f81, 0x4f82, 0x4f82, 0x4f82, 
+    0x4f83, 0x4f83, 0x4f83, 0x4f84, 0x4f84, 0x4f85, 0x4f85, 0x4f85, 
+    0x4f86, 0x4f86, 0x4f86, 0x4f87, 0x4f87, 0x4f88, 0x4f88, 0x4f88, 
+    0x4f89, 0x4f89, 0x4f89, 0x4f8a, 0x4f8a, 0x4f8b, 0x4f8b, 0x4f8b, 
+    0x4f8c, 0x4f8c, 0x4f8c, 0x4f8d, 0x4f8d, 0x4f8d, 0x4f8e, 0x4f8e, 
+    0x4f8f, 0x4f8f, 0x4f8f, 0x4f90, 0x4f90, 0x4f90, 0x4f91, 0x4f91, 
+    0x4f92, 0x4f92, 0x4f92, 0x4f93, 0x4f93, 0x4f93, 0x4f94, 0x4f94, 
+    0x4f94, 0x4f95, 0x4f95, 0x4f95, 0x4f96, 0x4f96, 0x4f97, 0x4f97, 
+    0x4f97, 0x4f98, 0x4f98, 0x4f98, 0x4f99, 0x4f99, 0x4f99, 0x4f9a, 
+    0x4f9a, 0x4f9b, 0x4f9b, 0x4f9b, 0x4f9c, 0x4f9c, 0x4f9c, 0x4f9d, 
+    0x4f9d, 0x4f9d, 0x4f9e, 0x4f9e, 0x4f9e, 0x4f9f, 0x4f9f, 0x4f9f, 
+    0x4fa0, 0x4fa0, 0x4fa1, 0x4fa1, 0x4fa1, 0x4fa2, 0x4fa2, 0x4fa2, 
+    0x4fa3, 0x4fa3, 0x4fa3, 0x4fa4, 0x4fa4, 0x4fa4, 0x4fa5, 0x4fa5, 
+    0x4fa5, 0x4fa6, 0x4fa6, 0x4fa7, 0x4fa7, 0x4fa7, 0x4fa8, 0x4fa8, 
+    0x4fa8, 0x4fa9, 0x4fa9, 0x4fa9, 0x4faa, 0x4faa, 0x4faa, 0x4fab, 
+    0x4fab, 0x4fab, 0x4fac, 0x4fac, 0x4fac, 0x4fad, 0x4fad, 0x4fad, 
+    0x4fae, 0x4fae, 0x4fae, 0x4faf, 0x4faf, 0x4fb0, 0x4fb0, 0x4fb0, 
+    0x4fb1, 0x4fb1, 0x4fb1, 0x4fb2, 0x4fb2, 0x4fb2, 0x4fb3, 0x4fb3, 
+    0x4fb3, 0x4fb4, 0x4fb4, 0x4fb4, 0x4fb5, 0x4fb5, 0x4fb5, 0x4fb6, 
+    0x4fb6, 0x4fb6, 0x4fb7, 0x4fb7, 0x4fb7, 0x4fb8, 0x4fb8, 0x4fb8, 
+    0x4fb9, 0x4fb9, 0x4fb9, 0x4fba, 0x4fba, 0x4fba, 0x4fbb, 0x4fbb, 
+    0x4fbb, 0x4fbc, 0x4fbc, 0x4fbc, 0x4fbd, 0x4fbd, 0x4fbd, 0x4fbe, 
+    0x4fbe, 0x4fbe, 0x4fbf, 0x4fbf, 0x4fbf, 0x4fc0, 0x4fc0, 0x4fc0, 
+    0x4fc1, 0x4fc1, 0x4fc1, 0x4fc2, 0x4fc2, 0x4fc2, 0x4fc3, 0x4fc3, 
+    0x4fc3, 0x4fc4, 0x4fc4, 0x4fc4, 0x4fc5, 0x4fc5, 0x4fc5, 0x4fc6, 
+    0x4fc6, 0x4fc6, 0x4fc7, 0x4fc7, 0x4fc7, 0x4fc8, 0x4fc8, 0x4fc8, 
+    0x4fc9, 0x4fc9, 0x4fc9, 0x4fca, 0x4fca, 0x4fca, 0x4fcb, 0x4fcb, 
+    0x4fcb, 0x4fcc, 0x4fcc, 0x4fcc, 0x4fcd, 0x4fcd, 0x4fcd, 0x4fcd, 
+    0x4fce, 0x4fce, 0x4fce, 0x4fcf, 0x4fcf, 0x4fcf, 0x4fd0, 0x4fd0, 
+    0x4fd0, 0x4fd1, 0x4fd1, 0x4fd1, 0x4fd2, 0x4fd2, 0x4fd2, 0x4fd3, 
+    0x4fd3, 0x4fd3, 0x4fd4, 0x4fd4, 0x4fd4, 0x4fd5, 0x4fd5, 0x4fd5, 
+    0x4fd6, 0x4fd6, 0x4fd6, 0x4fd6, 0x4fd7, 0x4fd7, 0x4fd7, 0x4fd8, 
+    0x4fd8, 0x4fd8, 0x4fd9, 0x4fd9, 0x4fd9, 0x4fda, 0x4fda, 0x4fda, 
+    0x4fdb, 0x4fdb, 0x4fdb, 0x4fdc, 0x4fdc, 0x4fdc, 0x4fdc, 0x4fdd, 
+    0x4fdd, 0x4fdd, 0x4fde, 0x4fde, 0x4fde, 0x4fdf, 0x4fdf, 0x4fdf, 
+    0x4fe0, 0x4fe0, 0x4fe0, 0x4fe1, 0x4fe1, 0x4fe1, 0x4fe1, 0x4fe2, 
+    0x4fe2, 0x4fe2, 0x4fe3, 0x4fe3, 0x4fe3, 0x4fe4, 0x4fe4, 0x4fe4, 
+    0x4fe5, 0x4fe5, 0x4fe5, 0x4fe5, 0x4fe6, 0x4fe6, 0x4fe6, 0x4fe7, 
+    0x4fe7, 0x4fe7, 0x4fe8, 0x4fe8, 0x4fe8, 0x4fe9, 0x4fe9, 0x4fe9, 
+    0x4fe9, 0x4fea, 0x4fea, 0x4fea, 0x4feb, 0x4feb, 0x4feb, 0x4fec, 
+    0x4fec, 0x4fec, 0x4fed, 0x4fed, 0x4fed, 0x4fed, 0x4fee, 0x4fee, 
+    0x4fee, 0x4fef, 0x4fef, 0x4fef, 0x4ff0, 0x4ff0, 0x4ff0, 0x4ff0, 
+    0x4ff1, 0x4ff1, 0x4ff1, 0x4ff2, 0x4ff2, 0x4ff2, 0x4ff3, 0x4ff3, 
+    0x4ff3, 0x4ff3, 0x4ff4, 0x4ff4, 0x4ff4, 0x4ff5, 0x4ff5, 0x4ff5, 
+    0x4ff6, 0x4ff6, 0x4ff6, 0x4ff6, 0x4ff7, 0x4ff7, 0x4ff7, 0x4ff8, 
+    0x4ff8, 0x4ff8, 0x4ff9, 0x4ff9, 0x4ff9, 0x4ff9, 0x4ffa, 0x4ffa, 
+    0x4ffa, 0x4ffb, 0x4ffb, 0x4ffb, 0x4ffc, 0x4ffc, 0x4ffc, 0x4ffc, 
+    0x4ffd, 0x4ffd, 0x4ffd, 0x4ffe, 0x4ffe, 0x4ffe, 0x4ffe, 0x4fff, 
+    0x4fff, 0x4fff, 0x5000, 0x5000, 0x5000, 0x5000, 0x5000, 0x5001, 
+    0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5002, 0x5002, 
+    0x5002, 0x5002, 0x5002, 0x5002, 0x5002, 0x5003, 0x5003, 0x5003, 
+    0x5003, 0x5003, 0x5003, 0x5003, 0x5004, 0x5004, 0x5004, 0x5004, 
+    0x5004, 0x5004, 0x5004, 0x5005, 0x5005, 0x5005, 0x5005, 0x5005, 
+    0x5005, 0x5005, 0x5006, 0x5006, 0x5006, 0x5006, 0x5006, 0x5006, 
+    0x5006, 0x5007, 0x5007, 0x5007, 0x5007, 0x5007, 0x5007, 0x5007, 
+    0x5008, 0x5008, 0x5008, 0x5008, 0x5008, 0x5008, 0x5008, 0x5009, 
+    0x5009, 0x5009, 0x5009, 0x5009, 0x5009, 0x5009, 0x500a, 0x500a, 
+    0x500a, 0x500a, 0x500a, 0x500a, 0x500a, 0x500b, 0x500b, 0x500b, 
+    0x500b, 0x500b, 0x500b, 0x500b, 0x500c, 0x500c, 0x500c, 0x500c, 
+    0x500c, 0x500c, 0x500c, 0x500d, 0x500d, 0x500d, 0x500d, 0x500d, 
+    0x500d, 0x500d, 0x500e, 0x500e, 0x500e, 0x500e, 0x500e, 0x500e, 
+    0x500e, 0x500f, 0x500f, 0x500f, 0x500f, 0x500f, 0x500f, 0x500f, 
+    0x500f, 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 
+    0x5011, 0x5011, 0x5011, 0x5011, 0x5011, 0x5011, 0x5011, 0x5012, 
+    0x5012, 0x5012, 0x5012, 0x5012, 0x5012, 0x5012, 0x5012, 0x5013, 
+    0x5013, 0x5013, 0x5013, 0x5013, 0x5013, 0x5013, 0x5014, 0x5014, 
+    0x5014, 0x5014, 0x5014, 0x5014, 0x5014, 0x5015, 0x5015, 0x5015, 
+    0x5015, 0x5015, 0x5015, 0x5015, 0x5015, 0x5016, 0x5016, 0x5016, 
+    0x5016, 0x5016, 0x5016, 0x5016, 0x5017, 0x5017, 0x5017, 0x5017, 
+    0x5017, 0x5017, 0x5017, 0x5017, 0x5018, 0x5018, 0x5018, 0x5018, 
+    0x5018, 0x5018, 0x5018, 0x5019, 0x5019, 0x5019, 0x5019, 0x5019, 
+    0x5019, 0x5019, 0x5019, 0x501a, 0x501a, 0x501a, 0x501a, 0x501a, 
+    0x501a, 0x501a, 0x501b, 0x501b, 0x501b, 0x501b, 0x501b, 0x501b, 
+    0x501b, 0x501b, 0x501c, 0x501c, 0x501c, 0x501c, 0x501c, 0x501c, 
+    0x501c, 0x501d, 0x501d, 0x501d, 0x501d, 0x501d, 0x501d, 0x501d, 
+    0x501d, 0x501e, 0x501e, 0x501e, 0x501e, 0x501e, 0x501e, 0x501e, 
+    0x501e, 0x501f, 0x501f, 0x501f, 0x501f, 0x501f, 0x501f, 0x501f, 
+    0x5020, 0x5020, 0x5020, 0x5020, 0x5020, 0x5020, 0x5020, 0x5020, 
+    0x5021, 0x5021, 0x5021, 0x5021, 0x5021, 0x5021, 0x5021, 0x5021, 
+    0x5022, 0x5022, 0x5022, 0x5022, 0x5022, 0x5022, 0x5022, 0x5022, 
+    0x5023, 0x5023, 0x5023, 0x5023, 0x5023, 0x5023, 0x5023, 0x5023, 
+    0x5024, 0x5024, 0x5024, 0x5024, 0x5024, 0x5024, 0x5024, 0x5025, 
+    0x5025, 0x5025, 0x5025, 0x5025, 0x5025, 0x5025, 0x5025, 0x5026, 
+    0x5026, 0x5026, 0x5026, 0x5026, 0x5026, 0x5026, 0x5026, 0x5027, 
+    0x5027, 0x5027, 0x5027, 0x5027, 0x5027, 0x5027, 0x5027, 0x5028, 
+    0x5028, 0x5028, 0x5028, 0x5028, 0x5028, 0x5028, 0x5028, 0x5029, 
+    0x5029, 0x5029, 0x5029, 0x5029, 0x502a, 0x502a, 0x502a, 0x502a, 
+    0x502b, 0x502b, 0x502b, 0x502b, 0x502c, 0x502c, 0x502c, 0x502c, 
+    0x502d, 0x502d, 0x502d, 0x502d, 0x502e, 0x502e, 0x502e, 0x502e, 
+    0x502f, 0x502f, 0x502f, 0x502f, 0x5030, 0x5030, 0x5030, 0x5030, 
+    0x5031, 0x5031, 0x5031, 0x5031, 0x5032, 0x5032, 0x5032, 0x5032, 
+    0x5032, 0x5033, 0x5033, 0x5033, 0x5033, 0x5034, 0x5034, 0x5034, 
+    0x5034, 0x5035, 0x5035, 0x5035, 0x5035, 0x5036, 0x5036, 0x5036, 
+    0x5036, 0x5037, 0x5037, 0x5037, 0x5037, 0x5037, 0x5038, 0x5038, 
+    0x5038, 0x5038, 0x5039, 0x5039, 0x5039, 0x5039, 0x503a, 0x503a, 
+    0x503a, 0x503a, 0x503b, 0x503b, 0x503b, 0x503b, 0x503b, 0x503c, 
+    0x503c, 0x503c, 0x503c, 0x503d, 0x503d, 0x503d, 0x503d, 0x503e, 
+    0x503e, 0x503e, 0x503e, 0x503e, 0x503f, 0x503f, 0x503f, 0x503f, 
+    0x5040, 0x5040, 0x5040, 0x5040, 0x5041, 0x5041, 0x5041, 0x5041, 
+    0x5041, 0x5042, 0x5042, 0x5042, 0x5042, 0x5043, 0x5043, 0x5043, 
+    0x5043, 0x5043, 0x5044, 0x5044, 0x5044, 0x5044, 0x5045, 0x5045, 
+    0x5045, 0x5045, 0x5045, 0x5046, 0x5046, 0x5046, 0x5046, 0x5047, 
+    0x5047, 0x5047, 0x5047, 0x5047, 0x5048, 0x5048, 0x5048, 0x5048, 
+    0x5049, 0x5049, 0x5049, 0x5049, 0x5049, 0x504a, 0x504a, 0x504a, 
+    0x504a, 0x504b, 0x504b, 0x504b, 0x504b, 0x504b, 0x504c, 0x504c, 
+    0x504c, 0x504c, 0x504d, 0x504d, 0x504d, 0x504d, 0x504d, 0x504e, 
+    0x504e, 0x504e, 0x504e, 0x504e, 0x504f, 0x504f, 0x504f, 0x504f, 
+    0x5050, 0x5050, 0x5050, 0x5050, 0x5050, 0x5051, 0x5051, 0x5051, 
+    0x5051, 0x5051, 0x5052, 0x5052, 0x5052, 0x5052, 0x5053, 0x5053, 
+    0x5053, 0x5053, 0x5053, 0x5054, 0x5054, 0x5054, 0x5054, 0x5054, 
+    0x5055, 0x5055, 0x5055, 0x5055, 0x5056, 0x5056, 0x5056, 0x5056, 
+    0x5056, 0x5057, 0x5057, 0x5057, 0x5057, 0x5057, 0x5058, 0x5058, 
+    0x5058, 0x5058, 0x5058, 0x5059, 0x5059, 0x5059, 0x5059, 0x5059, 
+    0x505a, 0x505a, 0x505a, 0x505a, 0x505a, 0x505b, 0x505b, 0x505b, 
+    0x505b, 0x505c, 0x505c, 0x505c, 0x505c, 0x505c, 0x505d, 0x505d, 
+    0x505d, 0x505d, 0x505d, 0x505e, 0x505e, 0x505e, 0x505e, 0x505e, 
+    0x505f, 0x505f, 0x505f, 0x505f, 0x505f, 0x5060, 0x5060, 0x5060, 
+    0x5060, 0x5060, 0x5061, 0x5061, 0x5061, 0x5061, 0x5061, 0x5062, 
+    0x5062, 0x5062, 0x5062, 0x5062, 0x5063, 0x5063, 0x5063, 0x5063, 
+    0x5063, 0x5064, 0x5064, 0x5064, 0x5064, 0x5064, 0x5065, 0x5065, 
+    0x5065, 0x5065, 0x5065, 0x5066, 0x5066, 0x5066, 0x5066, 0x5066, 
+    0x5067, 0x5067, 0x5067, 0x5067, 0x5067, 0x5068, 0x5068, 0x5068, 
+    0x5068, 0x5068, 0x5069, 0x5069, 0x5069, 0x5069, 0x5069, 0x5069, 
+    0x506a, 0x506a, 0x506a, 0x506a, 0x506a, 0x506b, 0x506b, 0x506b, 
+    0x506b, 0x506b, 0x506c, 0x506c, 0x506c, 0x506c, 0x506c, 0x506d, 
+    0x506d, 0x506d, 0x506d, 0x506d, 0x506e, 0x506e, 0x506e, 0x506e, 
+    0x506e, 0x506e, 0x506f, 0x506f, 0x506f, 0x506f, 0x506f, 0x5070, 
+    0x5070, 0x5070, 0x5070, 0x5070, 0x5071, 0x5071, 0x5071, 0x5071, 
+    0x5071, 0x5072, 0x5072, 0x5072, 0x5072, 0x5072, 0x5072, 0x5073, 
+    0x5073, 0x5073, 0x5073, 0x5073, 0x5074, 0x5074, 0x5074, 0x5074, 
+    0x5074, 0x5074, 0x5075, 0x5075, 0x5075, 0x5075, 0x5075, 0x5076, 
+    0x5076, 0x5076, 0x5076, 0x5076, 0x5077, 0x5077, 0x5077, 0x5077, 
+    0x5077, 0x5077, 0x5078, 0x5078, 0x5078, 0x5078, 0x5078, 0x5079, 
+    0x5079, 0x5079, 0x5079, 0x5079, 0x5079, 0x507a, 0x507a, 0x507a, 
+    0x507a, 0x507a, 0x507b, 0x507b, 0x507b, 0x507b, 0x507b, 0x507b, 
+    0x507c, 0x507c, 0x507c, 0x507c, 0x507c, 0x507d, 0x507d, 0x507d, 
+    0x507d, 0x507d, 0x507d, 0x507e, 0x507e, 0x507e, 0x507e, 0x507e, 
+    0x507f, 0x507f, 0x507f, 0x507f, 0x507f, 0x507f, 0x5080, 0x5080, 
+    0x5080, 0x5080, 0x5080, 0x5080, 0x5081, 0x5081, 0x5081, 0x5081, 
+    0x5081, 0x5082, 0x5082, 0x5082, 0x5082, 0x5082, 0x5082, 0x5083, 
+    0x5083, 0x5083, 0x5083, 0x5083, 0x5083, 0x5084, 0x5084, 0x5084, 
+    0x5084, 0x5084, 0x5085, 0x5085, 0x5085, 0x5085, 0x5085, 0x5085, 
+    0x5086, 0x5086, 0x5086, 0x5086, 0x5086, 0x5086, 0x5087, 0x5087, 
+    0x5087, 0x5087, 0x5087, 0x5087, 0x5088, 0x5088, 0x5088, 0x5088, 
+    0x5088, 0x5089, 0x5089, 0x5089, 0x5089, 0x5089, 0x5089, 0x508a, 
+    0x508a, 0x508a, 0x508a, 0x508a, 0x508a, 0x508b, 0x508b, 0x508b, 
+    0x508b, 0x508b, 0x508b, 0x508c, 0x508c, 0x508c, 0x508c, 0x508c, 
+    0x508c, 0x508d, 0x508d, 0x508d, 0x508d, 0x508d, 0x508d, 0x508e, 
+    0x508e, 0x508e, 0x508e, 0x508e, 0x508e, 0x508f, 0x508f, 0x508f, 
+    0x508f, 0x508f, 0x508f, 0x5090, 0x5090, 0x5090, 0x5090, 0x5090, 
+    0x5090, 0x5091, 0x5091, 0x5091, 0x5091, 0x5091, 0x5091, 0x5092, 
+    0x5092, 0x5092, 0x5092, 0x5092, 0x5092, 0x5093, 0x5093, 0x5093, 
+    0x5093, 0x5093, 0x5093, 0x5094, 0x5094, 0x5094, 0x5094, 0x5094, 
+    0x5094, 0x5095, 0x5095, 0x5095, 0x5095, 0x5095, 0x5095, 0x5096, 
+    0x5096, 0x5096, 0x5096, 0x5096, 0x5096, 0x5097, 0x5097, 0x5097, 
+    0x5097, 0x5097, 0x5097, 0x5098, 0x5098, 0x5098, 0x5098, 0x5098, 
+    0x5098, 0x5099, 0x5099, 0x5099, 0x5099, 0x5099, 0x5099, 0x5099, 
+    0x509a, 0x509a, 0x509a, 0x509a, 0x509a, 0x509a, 0x509b, 0x509b, 
+    0x509b, 0x509b, 0x509b, 0x509b, 0x509c, 0x509c, 0x509c, 0x509c, 
+    0x509c, 0x509c, 0x509d, 0x509d, 0x509d, 0x509d, 0x509d, 0x509d, 
+    0x509d, 0x509e, 0x509e, 0x509e, 0x509e, 0x509e, 0x509e, 0x509f, 
+    0x509f, 0x509f, 0x509f, 0x509f, 0x509f, 0x50a0, 0x50a0, 0x50a0, 
+    0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x50a1, 0x50a1, 0x50a1, 0x50a1, 
+    0x50a1, 0x50a1, 0x50a2, 0x50a2, 0x50a2, 0x50a2, 0x50a2, 0x50a2, 
+    0x50a2, 0x50a3, 0x50a3, 0x50a3, 0x50a3, 0x50a3, 0x50a3, 0x50a4, 
+    0x50a4, 0x50a4, 0x50a4, 0x50a4, 0x50a4, 0x50a5, 0x50a5, 0x50a5, 
+    0x50a5, 0x50a5, 0x50a5, 0x50a5, 0x50a6, 0x50a6, 0x50a6, 0x50a6, 
+    0x50a6, 0x50a6, 0x50a6, 0x50a7, 0x50a7, 0x50a7, 0x50a7, 0x50a7, 
+    0x50a7, 0x50a8, 0x50a8, 0x50a8, 0x50a8, 0x50a8, 0x50a8, 0x50a8, 
+    0x50a9, 0x50a9, 0x50a9, 0x50a9, 0x50a9, 0x50a9, 0x50aa, 0x50aa, 
+    0x50aa, 0x50aa, 0x50aa, 0x50aa, 0x50aa, 0x50ab, 0x50ab, 0x50ab, 
+    0x50ab, 0x50ab, 0x50ab, 0x50ab, 0x50ac, 0x50ac, 0x50ac, 0x50ac, 
+    0x50ac, 0x50ac, 0x50ad, 0x50ad, 0x50ad, 0x50ad, 0x50ad, 0x50ad, 
+    0x50ad, 0x50ae, 0x50ae, 0x50ae, 0x50ae, 0x50ae, 0x50ae, 0x50ae, 
+    0x50af, 0x50af, 0x50af, 0x50af, 0x50af, 0x50af, 0x50b0, 0x50b0, 
+    0x50b0, 0x50b0, 0x50b0, 0x50b0, 0x50b0, 0x50b1, 0x50b1, 0x50b1, 
+    0x50b1, 0x50b1, 0x50b1, 0x50b1, 0x50b2, 0x50b2, 0x50b2, 0x50b2, 
+    0x50b2, 0x50b2, 0x50b2, 0x50b3, 0x50b3, 0x50b3, 0x50b3, 0x50b3, 
+    0x50b3, 0x50b3, 0x50b4, 0x50b4, 0x50b4, 0x50b4, 0x50b4, 0x50b4, 
+    0x50b4, 0x50b5, 0x50b5, 0x50b5, 0x50b5, 0x50b5, 0x50b5, 0x50b5, 
+    0x50b6, 0x50b6, 0x50b6, 0x50b6, 0x50b6, 0x50b6, 0x50b7, 0x50b7, 
+    0x50b7, 0x50b7, 0x50b7, 0x50b7, 0x50b7, 0x50b8, 0x50b8, 0x50b8, 
+    0x50b8, 0x50b8, 0x50b8, 0x50b8, 0x50b9, 0x50b9, 0x50b9, 0x50b9, 
+    0x50b9, 0x50b9, 0x50b9, 0x50ba, 0x50ba, 0x50ba, 0x50ba, 0x50ba, 
+    0x50ba, 0x50ba, 0x50ba, 0x50bb, 0x50bb, 0x50bb, 0x50bb, 0x50bb, 
+    0x50bb, 0x50bb, 0x50bc, 0x50bc, 0x50bc, 0x50bc, 0x50bc, 0x50bc, 
+    0x50bc, 0x50bd, 0x50bd, 0x50bd, 0x50bd, 0x50bd, 0x50bd, 0x50bd, 
+    0x50be, 0x50be, 0x50be, 0x50be, 0x50be, 0x50be, 0x50be, 0x50bf, 
+    0x50bf, 0x50bf, 0x50bf, 0x50bf, 0x50bf, 0x50bf, 0x50c0, 0x50c0, 
+    0x50c0, 0x50c0, 0x50c0, 0x50c0, 0x50c0, 0x50c1, 0x50c1, 0x50c1, 
+    0x50c1, 0x50c1, 0x50c1, 0x50c1, 0x50c1, 0x50c2, 0x50c2, 0x50c2, 
+    0x50c2, 0x50c2, 0x50c2, 0x50c2, 0x50c3, 0x50c3, 0x50c3, 0x50c3, 
+    0x50c3, 0x50c3, 0x50c3, 0x50c4, 0x50c4, 0x50c4, 0x50c4, 0x50c4, 
+    0x50c4, 0x50c4, 0x50c4, 0x50c5, 0x50c5, 0x50c5, 0x50c5, 0x50c5, 
+    0x50c5, 0x50c5, 0x50c6, 0x50c6, 0x50c6, 0x50c6, 0x50c6, 0x50c6, 
+    0x50c6, 0x50c7, 0x50c7, 0x50c7, 0x50c7, 0x50c7, 0x50c7, 0x50c7, 
+    0x50c7, 0x50c8, 0x50c8, 0x50c8, 0x50c8, 0x50c8, 0x50c8, 0x50c8, 
+    0x50c9, 0x50c9, 0x50c9, 0x50c9, 0x50c9, 0x50c9, 0x50c9, 0x50c9, 
+    0x50ca, 0x50ca, 0x50ca, 0x50ca, 0x50ca, 0x50ca, 0x50ca, 0x50cb, 
+    0x50cb, 0x50cb, 0x50cb, 0x50cb, 0x50cb, 0x50cb, 0x50cb, 0x50cc, 
+    0x50cc, 0x50cc, 0x50cc, 0x50cc, 0x50cc, 0x50cc, 0x50cd, 0x50cd, 
+    0x50cd, 0x50cd, 0x50cd, 0x50cd, 0x50cd, 0x50cd, 0x50ce, 0x50ce, 
+    0x50ce, 0x50ce, 0x50ce, 0x50ce, 0x50ce, 0x50ce, 0x50cf, 0x50cf, 
+    0x50cf, 0x50cf, 0x50cf, 0x50cf, 0x50cf, 0x50d0, 0x50d0, 0x50d0, 
+    0x50d0, 0x50d0, 0x50d0, 0x50d0, 0x50d0, 0x50d1, 0x50d1, 0x50d1, 
+    0x50d1, 0x50d1, 0x50d1, 0x50d1, 0x50d1, 0x50d2, 0x50d2, 0x50d2, 
+    0x50d2, 0x50d2, 0x50d2, 0x50d2, 0x50d3, 0x50d3, 0x50d3, 0x50d3, 
+    0x50d3, 0x50d3, 0x50d3, 0x50d3, 0x50d4, 0x50d4, 0x50d4, 0x50d4, 
+    0x50d4, 0x50d4, 0x50d4, 0x50d4, 0x50d5, 0x50d5, 0x50d5, 0x50d5, 
+    0x50d5, 0x50d5, 0x50d5, 0x50d5, 0x50d6, 0x50d6, 0x50d6, 0x50d6, 
+    0x50d6, 0x50d6, 0x50d6, 0x50d6, 0x50d7, 0x50d7, 0x50d7, 0x50d7, 
+    0x50d7, 0x50d7, 0x50d7, 0x50d7, 0x50d8, 0x50d8, 0x50d8, 0x50d8, 
+    0x50d8, 0x50d8, 0x50d8, 0x50d8, 0x50d9, 0x50d9, 0x50d9, 0x50d9, 
+    0x50d9, 0x50d9, 0x50d9, 0x50d9, 0x50da, 0x50da, 0x50da, 0x50da, 
+    0x50da, 0x50da, 0x50db, 0x50db, 0x50db, 0x50db, 0x50dc, 0x50dc, 
+    0x50dc, 0x50dc, 0x50dd, 0x50dd, 0x50dd, 0x50dd, 0x50de, 0x50de, 
+    0x50de, 0x50de, 0x50df, 0x50df, 0x50df, 0x50df, 0x50e0, 0x50e0, 
+    0x50e0, 0x50e0, 0x50e1, 0x50e1, 0x50e1, 0x50e1, 0x50e2, 0x50e2, 
+    0x50e2, 0x50e2, 0x50e2, 0x50e3, 0x50e3, 0x50e3, 0x50e3, 0x50e4, 
+    0x50e4, 0x50e4, 0x50e4, 0x50e5, 0x50e5, 0x50e5, 0x50e5, 0x50e6, 
+    0x50e6, 0x50e6, 0x50e6, 0x50e7, 0x50e7, 0x50e7, 0x50e7, 0x50e8, 
+    0x50e8, 0x50e8, 0x50e8, 0x50e8, 0x50e9, 0x50e9, 0x50e9, 0x50e9, 
+    0x50ea, 0x50ea, 0x50ea, 0x50ea, 0x50eb, 0x50eb, 0x50eb, 0x50eb, 
+    0x50ec, 0x50ec, 0x50ec, 0x50ec, 0x50ec, 0x50ed, 0x50ed, 0x50ed, 
+    0x50ed, 0x50ee, 0x50ee, 0x50ee, 0x50ee, 0x50ef, 0x50ef, 0x50ef, 
+    0x50ef, 0x50ef, 0x50f0, 0x50f0, 0x50f0, 0x50f0, 0x50f1, 0x50f1, 
+    0x50f1, 0x50f1, 0x50f2, 0x50f2, 0x50f2, 0x50f2, 0x50f2, 0x50f3, 
+    0x50f3, 0x50f3, 0x50f3, 0x50f4, 0x50f4, 0x50f4, 0x50f4, 0x50f4, 
+    0x50f5, 0x50f5, 0x50f5, 0x50f5, 0x50f6, 0x50f6, 0x50f6, 0x50f6, 
+    0x50f6, 0x50f7, 0x50f7, 0x50f7, 0x50f7, 0x50f8, 0x50f8, 0x50f8, 
+    0x50f8, 0x50f8, 0x50f9, 0x50f9, 0x50f9, 0x50f9, 0x50fa, 0x50fa, 
+    0x50fa, 0x50fa, 0x50fa, 0x50fb, 0x50fb, 0x50fb, 0x50fb, 0x50fc, 
+    0x50fc, 0x50fc, 0x50fc, 0x50fc, 0x50fd, 0x50fd, 0x50fd, 0x50fd, 
+    0x50fe, 0x50fe, 0x50fe, 0x50fe, 0x50fe, 0x50ff, 0x50ff, 0x50ff, 
+    0x50ff, 0x5100, 0x5100, 0x5100, 0x5100, 0x5100, 0x5101, 0x5101, 
+    0x5101, 0x5101, 0x5101, 0x5102, 0x5102, 0x5102, 0x5102, 0x5103, 
+    0x5103, 0x5103, 0x5103, 0x5103, 0x5104, 0x5104, 0x5104, 0x5104, 
+    0x5104, 0x5105, 0x5105, 0x5105, 0x5105, 0x5105, 0x5106, 0x5106, 
+    0x5106, 0x5106, 0x5107, 0x5107, 0x5107, 0x5107, 0x5107, 0x5108, 
+    0x5108, 0x5108, 0x5108, 0x5108, 0x5109, 0x5109, 0x5109, 0x5109, 
+    0x5109, 0x510a, 0x510a, 0x510a, 0x510a, 0x510a, 0x510b, 0x510b, 
+    0x510b, 0x510b, 0x510c, 0x510c, 0x510c, 0x510c, 0x510c, 0x510d, 
+    0x510d, 0x510d, 0x510d, 0x510d, 0x510e, 0x510e, 0x510e, 0x510e, 
+    0x510e, 0x510f, 0x510f, 0x510f, 0x510f, 0x510f, 0x5110, 0x5110, 
+    0x5110, 0x5110, 0x5110, 0x5111, 0x5111, 0x5111, 0x5111, 0x5111, 
+    0x5112, 0x5112, 0x5112, 0x5112, 0x5112, 0x5113, 0x5113, 0x5113, 
+    0x5113, 0x5113, 0x5114, 0x5114, 0x5114, 0x5114, 0x5114, 0x5115, 
+    0x5115, 0x5115, 0x5115, 0x5115, 0x5116, 0x5116, 0x5116, 0x5116, 
+    0x5116, 0x5117, 0x5117, 0x5117, 0x5117, 0x5117, 0x5118, 0x5118, 
+    0x5118, 0x5118, 0x5118, 0x5119, 0x5119, 0x5119, 0x5119, 0x5119, 
+    0x511a, 0x511a, 0x511a, 0x511a, 0x511a, 0x511b, 0x511b, 0x511b, 
+    0x511b, 0x511b, 0x511c, 0x511c, 0x511c, 0x511c, 0x511c, 0x511c, 
+    0x511d, 0x511d, 0x511d, 0x511d, 0x511d, 0x511e, 0x511e, 0x511e, 
+    0x511e, 0x511e, 0x511f, 0x511f, 0x511f, 0x511f, 0x511f, 0x5120, 
+    0x5120, 0x5120, 0x5120, 0x5120, 0x5120, 0x5121, 0x5121, 0x5121, 
+    0x5121, 0x5121, 0x5122, 0x5122, 0x5122, 0x5122, 0x5122, 0x5123, 
+    0x5123, 0x5123, 0x5123, 0x5123, 0x5124, 0x5124, 0x5124, 0x5124, 
+    0x5124, 0x5124, 0x5125, 0x5125, 0x5125, 0x5125, 0x5125, 0x5126, 
+    0x5126, 0x5126, 0x5126, 0x5126, 0x5127, 0x5127, 0x5127, 0x5127, 
+    0x5127, 0x5127, 0x5128, 0x5128, 0x5128, 0x5128, 0x5128, 0x5129, 
+    0x5129, 0x5129, 0x5129, 0x5129, 0x5129, 0x512a, 0x512a, 0x512a, 
+    0x512a, 0x512a, 0x512b, 0x512b, 0x512b, 0x512b, 0x512b, 0x512b, 
+    0x512c, 0x512c, 0x512c, 0x512c, 0x512c, 0x512d, 0x512d, 0x512d, 
+    0x512d, 0x512d, 0x512d, 0x512e, 0x512e, 0x512e, 0x512e, 0x512e, 
+    0x512f, 0x512f, 0x512f, 0x512f, 0x512f, 0x512f, 0x5130, 0x5130, 
+    0x5130, 0x5130, 0x5130, 0x5131, 0x5131, 0x5131, 0x5131, 0x5131, 
+    0x5131, 0x5132, 0x5132, 0x5132, 0x5132, 0x5132, 0x5132, 0x5133, 
+    0x5133, 0x5133, 0x5133, 0x5133, 0x5134, 0x5134, 0x5134, 0x5134, 
+    0x5134, 0x5134, 0x5135, 0x5135, 0x5135, 0x5135, 0x5135, 0x5135, 
+    0x5136, 0x5136, 0x5136, 0x5136, 0x5136, 0x5137, 0x5137, 0x5137, 
+    0x5137, 0x5137, 0x5137, 0x5138, 0x5138, 0x5138, 0x5138, 0x5138, 
+    0x5138, 0x5139, 0x5139, 0x5139, 0x5139, 0x5139, 0x5139, 0x513a, 
+    0x513a, 0x513a, 0x513a, 0x513a, 0x513a, 0x513b, 0x513b, 0x513b, 
+    0x513b, 0x513b, 0x513c, 0x513c, 0x513c, 0x513c, 0x513c, 0x513c, 
+    0x513d, 0x513d, 0x513d, 0x513d, 0x513d, 0x513d, 0x513e, 0x513e, 
+    0x513e, 0x513e, 0x513e, 0x513e, 0x513f, 0x513f, 0x513f, 0x513f, 
+    0x513f, 0x513f, 0x5140, 0x5140, 0x5140, 0x5140, 0x5140, 0x5140, 
+    0x5141, 0x5141, 0x5141, 0x5141, 0x5141, 0x5141, 0x5142, 0x5142, 
+    0x5142, 0x5142, 0x5142, 0x5142, 0x5143, 0x5143, 0x5143, 0x5143, 
+    0x5143, 0x5143, 0x5144, 0x5144, 0x5144, 0x5144, 0x5144, 0x5144, 
+    0x5145, 0x5145, 0x5145, 0x5145, 0x5145, 0x5145, 0x5146, 0x5146, 
+    0x5146, 0x5146, 0x5146, 0x5146, 0x5147, 0x5147, 0x5147, 0x5147, 
+    0x5147, 0x5147, 0x5148, 0x5148, 0x5148, 0x5148, 0x5148, 0x5148, 
+    0x5149, 0x5149, 0x5149, 0x5149, 0x5149, 0x5149, 0x5149, 0x514a, 
+    0x514a, 0x514a, 0x514a, 0x514a, 0x514a, 0x514b, 0x514b, 0x514b, 
+    0x514b, 0x514b, 0x514b, 0x514c, 0x514c, 0x514c, 0x514c, 0x514c, 
+    0x514c, 0x514d, 0x514d, 0x514d, 0x514d, 0x514d, 0x514d, 0x514d, 
+    0x514e, 0x514e, 0x514e, 0x514e, 0x514e, 0x514e, 0x514f, 0x514f, 
+    0x514f, 0x514f, 0x514f, 0x514f, 0x5150, 0x5150, 0x5150, 0x5150, 
+    0x5150, 0x5150, 0x5150, 0x5151, 0x5151, 0x5151, 0x5151, 0x5151, 
+    0x5151, 0x5152, 0x5152, 0x5152, 0x5152, 0x5152, 0x5152, 0x5153, 
+    0x5153, 0x5153, 0x5153, 0x5153, 0x5153, 0x5153, 0x5154, 0x5154, 
+    0x5154, 0x5154, 0x5154, 0x5154, 0x5155, 0x5155, 0x5155, 0x5155, 
+    0x5155, 0x5155, 0x5155, 0x5156, 0x5156, 0x5156, 0x5156, 0x5156, 
+    0x5156, 0x5157, 0x5157, 0x5157, 0x5157, 0x5157, 0x5157, 0x5157, 
+    0x5158, 0x5158, 0x5158, 0x5158, 0x5158, 0x5158, 0x5159, 0x5159, 
+    0x5159, 0x5159, 0x5159, 0x5159, 0x5159, 0x515a, 0x515a, 0x515a, 
+    0x515a, 0x515a, 0x515a, 0x515b, 0x515b, 0x515b, 0x515b, 0x515b, 
+    0x515b, 0x515b, 0x515c, 0x515c, 0x515c, 0x515c, 0x515c, 0x515c, 
+    0x515c, 0x515d, 0x515d, 0x515d, 0x515d, 0x515d, 0x515d, 0x515e, 
+    0x515e, 0x515e, 0x515e, 0x515e, 0x515e, 0x515e, 0x515f, 0x515f, 
+    0x515f, 0x515f, 0x515f, 0x515f, 0x515f, 0x5160, 0x5160, 0x5160, 
+    0x5160, 0x5160, 0x5160, 0x5161, 0x5161, 0x5161, 0x5161, 0x5161, 
+    0x5161, 0x5161, 0x5162, 0x5162, 0x5162, 0x5162, 0x5162, 0x5162, 
+    0x5162, 0x5163, 0x5163, 0x5163, 0x5163, 0x5163, 0x5163, 0x5163, 
+    0x5164, 0x5164, 0x5164, 0x5164, 0x5164, 0x5164, 0x5164, 0x5165, 
+    0x5165, 0x5165, 0x5165, 0x5165, 0x5165, 0x5165, 0x5166, 0x5166, 
+    0x5166, 0x5166, 0x5166, 0x5166, 0x5167, 0x5167, 0x5167, 0x5167, 
+    0x5167, 0x5167, 0x5167, 0x5168, 0x5168, 0x5168, 0x5168, 0x5168, 
+    0x5168, 0x5168, 0x5169, 0x5169, 0x5169, 0x5169, 0x5169, 0x5169, 
+    0x5169, 0x516a, 0x516a, 0x516a, 0x516a, 0x516a, 0x516a, 0x516a, 
+    0x516b, 0x516b, 0x516b, 0x516b, 0x516b, 0x516b, 0x516b, 0x516c, 
+    0x516c, 0x516c, 0x516c, 0x516c, 0x516c, 0x516c, 0x516d, 0x516d, 
+    0x516d, 0x516d, 0x516d, 0x516d, 0x516d, 0x516d, 0x516e, 0x516e, 
+    0x516e, 0x516e, 0x516e, 0x516e, 0x516e, 0x516f, 0x516f, 0x516f, 
+    0x516f, 0x516f, 0x516f, 0x516f, 0x5170, 0x5170, 0x5170, 0x5170, 
+    0x5170, 0x5170, 0x5170, 0x5171, 0x5171, 0x5171, 0x5171, 0x5171, 
+    0x5171, 0x5171, 0x5172, 0x5172, 0x5172, 0x5172, 0x5172, 0x5172, 
+    0x5172, 0x5173, 0x5173, 0x5173, 0x5173, 0x5173, 0x5173, 0x5173, 
+    0x5173, 0x5174, 0x5174, 0x5174, 0x5174, 0x5174, 0x5174, 0x5174, 
+    0x5175, 0x5175, 0x5175, 0x5175, 0x5175, 0x5175, 0x5175, 0x5176, 
+    0x5176, 0x5176, 0x5176, 0x5176, 0x5176, 0x5176, 0x5176, 0x5177, 
+    0x5177, 0x5177, 0x5177, 0x5177, 0x5177, 0x5177, 0x5178, 0x5178, 
+    0x5178, 0x5178, 0x5178, 0x5178, 0x5178, 0x5178, 0x5179, 0x5179, 
+    0x5179, 0x5179, 0x5179, 0x5179, 0x5179, 0x517a, 0x517a, 0x517a, 
+    0x517a, 0x517a, 0x517a, 0x517a, 0x517b, 0x517b, 0x517b, 0x517b, 
+    0x517b, 0x517b, 0x517b, 0x517b, 0x517c, 0x517c, 0x517c, 0x517c, 
+    0x517c, 0x517c, 0x517c, 0x517d, 0x517d, 0x517d, 0x517d, 0x517d, 
+    0x517d, 0x517d, 0x517d, 0x517e, 0x517e, 0x517e, 0x517e, 0x517e, 
+    0x517e, 0x517e, 0x517e, 0x517f, 0x517f, 0x517f, 0x517f, 0x517f, 
+    0x517f, 0x517f, 0x5180, 0x5180, 0x5180, 0x5180, 0x5180, 0x5180, 
+    0x5180, 0x5180, 0x5181, 0x5181, 0x5181, 0x5181, 0x5181, 0x5181, 
+    0x5181, 0x5181, 0x5182, 0x5182, 0x5182, 0x5182, 0x5182, 0x5182, 
+    0x5182, 0x5183, 0x5183, 0x5183, 0x5183, 0x5183, 0x5183, 0x5183, 
+    0x5183, 0x5184, 0x5184, 0x5184, 0x5184, 0x5184, 0x5184, 0x5184, 
+    0x5184, 0x5185, 0x5185, 0x5185, 0x5185, 0x5185, 0x5185, 0x5185, 
+    0x5185, 0x5186, 0x5186, 0x5186, 0x5186, 0x5186, 0x5186, 0x5186, 
+    0x5187, 0x5187, 0x5187, 0x5187, 0x5187, 0x5187, 0x5187, 0x5187, 
+    0x5188, 0x5188, 0x5188, 0x5188, 0x5188, 0x5188, 0x5188, 0x5188, 
+    0x5189, 0x5189, 0x5189, 0x5189, 0x5189, 0x5189, 0x5189, 0x5189, 
+    0x518a, 0x518a, 0x518a, 0x518a, 0x518a, 0x518a, 0x518a, 0x518a, 
+    0x518b, 0x518b, 0x518b, 0x518b, 0x518b, 0x518b, 0x518b, 0x518b, 
+    0x518c, 0x518c, 0x518c, 0x518c, 0x518d, 0x518d, 0x518d, 0x518d, 
+    0x518e, 0x518e, 0x518e, 0x518e, 0x518f, 0x518f, 0x518f, 0x518f, 
+    0x5190, 0x5190, 0x5190, 0x5190, 0x5191, 0x5191, 0x5191, 0x5191, 
+    0x5191, 0x5192, 0x5192, 0x5192, 0x5192, 0x5193, 0x5193, 0x5193, 
+    0x5193, 0x5194, 0x5194, 0x5194, 0x5194, 0x5195, 0x5195, 0x5195, 
+    0x5195, 0x5196, 0x5196, 0x5196, 0x5196, 0x5197, 0x5197, 0x5197, 
+    0x5197, 0x5198, 0x5198, 0x5198, 0x5198, 0x5198, 0x5199, 0x5199, 
+    0x5199, 0x5199, 0x519a, 0x519a, 0x519a, 0x519a, 0x519b, 0x519b, 
+    0x519b, 0x519b, 0x519c, 0x519c, 0x519c, 0x519c, 0x519c, 0x519d, 
+    0x519d, 0x519d, 0x519d, 0x519e, 0x519e, 0x519e, 0x519e, 0x519f, 
+    0x519f, 0x519f, 0x519f, 0x51a0, 0x51a0, 0x51a0, 0x51a0, 0x51a0, 
+    0x51a1, 0x51a1, 0x51a1, 0x51a1, 0x51a2, 0x51a2, 0x51a2, 0x51a2, 
+    0x51a3, 0x51a3, 0x51a3, 0x51a3, 0x51a3, 0x51a4, 0x51a4, 0x51a4, 
+    0x51a4, 0x51a5, 0x51a5, 0x51a5, 0x51a5, 0x51a5, 0x51a6, 0x51a6, 
+    0x51a6, 0x51a6, 0x51a7, 0x51a7, 0x51a7, 0x51a7, 0x51a7, 0x51a8, 
+    0x51a8, 0x51a8, 0x51a8, 0x51a9, 0x51a9, 0x51a9, 0x51a9, 0x51a9, 
+    0x51aa, 0x51aa, 0x51aa, 0x51aa, 0x51ab, 0x51ab, 0x51ab, 0x51ab, 
+    0x51ab, 0x51ac, 0x51ac, 0x51ac, 0x51ac, 0x51ad, 0x51ad, 0x51ad, 
+    0x51ad, 0x51ad, 0x51ae, 0x51ae, 0x51ae, 0x51ae, 0x51af, 0x51af, 
+    0x51af, 0x51af, 0x51af, 0x51b0, 0x51b0, 0x51b0, 0x51b0, 0x51b1, 
+    0x51b1, 0x51b1, 0x51b1, 0x51b1, 0x51b2, 0x51b2, 0x51b2, 0x51b2, 
+    0x51b2, 0x51b3, 0x51b3, 0x51b3, 0x51b3, 0x51b4, 0x51b4, 0x51b4, 
+    0x51b4, 0x51b4, 0x51b5, 0x51b5, 0x51b5, 0x51b5, 0x51b5, 0x51b6, 
+    0x51b6, 0x51b6, 0x51b6, 0x51b7, 0x51b7, 0x51b7, 0x51b7, 0x51b7, 
+    0x51b8, 0x51b8, 0x51b8, 0x51b8, 0x51b8, 0x51b9, 0x51b9, 0x51b9, 
+    0x51b9, 0x51b9, 0x51ba, 0x51ba, 0x51ba, 0x51ba, 0x51ba, 0x51bb, 
+    0x51bb, 0x51bb, 0x51bb, 0x51bc, 0x51bc, 0x51bc, 0x51bc, 0x51bc, 
+    0x51bd, 0x51bd, 0x51bd, 0x51bd, 0x51bd, 0x51be, 0x51be, 0x51be, 
+    0x51be, 0x51be, 0x51bf, 0x51bf, 0x51bf, 0x51bf, 0x51bf, 0x51c0, 
+    0x51c0, 0x51c0, 0x51c0, 0x51c0, 0x51c1, 0x51c1, 0x51c1, 0x51c1, 
+    0x51c1, 0x51c2, 0x51c2, 0x51c2, 0x51c2, 0x51c2, 0x51c3, 0x51c3, 
+    0x51c3, 0x51c3, 0x51c3, 0x51c4, 0x51c4, 0x51c4, 0x51c4, 0x51c4, 
+    0x51c5, 0x51c5, 0x51c5, 0x51c5, 0x51c5, 0x51c6, 0x51c6, 0x51c6, 
+    0x51c6, 0x51c6, 0x51c7, 0x51c7, 0x51c7, 0x51c7, 0x51c7, 0x51c8, 
+    0x51c8, 0x51c8, 0x51c8, 0x51c8, 0x51c9, 0x51c9, 0x51c9, 0x51c9, 
+    0x51c9, 0x51ca, 0x51ca, 0x51ca, 0x51ca, 0x51ca, 0x51cb, 0x51cb, 
+    0x51cb, 0x51cb, 0x51cb, 0x51cc, 0x51cc, 0x51cc, 0x51cc, 0x51cc, 
+    0x51cd, 0x51cd, 0x51cd, 0x51cd, 0x51cd, 0x51ce, 0x51ce, 0x51ce, 
+    0x51ce, 0x51ce, 0x51ce, 0x51cf, 0x51cf, 0x51cf, 0x51cf, 0x51cf, 
+    0x51d0, 0x51d0, 0x51d0, 0x51d0, 0x51d0, 0x51d1, 0x51d1, 0x51d1, 
+    0x51d1, 0x51d1, 0x51d2, 0x51d2, 0x51d2, 0x51d2, 0x51d2, 0x51d3, 
+    0x51d3, 0x51d3, 0x51d3, 0x51d3, 0x51d3, 0x51d4, 0x51d4, 0x51d4, 
+    0x51d4, 0x51d4, 0x51d5, 0x51d5, 0x51d5, 0x51d5, 0x51d5, 0x51d6, 
+    0x51d6, 0x51d6, 0x51d6, 0x51d6, 0x51d6, 0x51d7, 0x51d7, 0x51d7, 
+    0x51d7, 0x51d7, 0x51d8, 0x51d8, 0x51d8, 0x51d8, 0x51d8, 0x51d9, 
+    0x51d9, 0x51d9, 0x51d9, 0x51d9, 0x51d9, 0x51da, 0x51da, 0x51da, 
+    0x51da, 0x51da, 0x51db, 0x51db, 0x51db, 0x51db, 0x51db, 0x51db, 
+    0x51dc, 0x51dc, 0x51dc, 0x51dc, 0x51dc, 0x51dd, 0x51dd, 0x51dd, 
+    0x51dd, 0x51dd, 0x51dd, 0x51de, 0x51de, 0x51de, 0x51de, 0x51de, 
+    0x51df, 0x51df, 0x51df, 0x51df, 0x51df, 0x51df, 0x51e0, 0x51e0, 
+    0x51e0, 0x51e0, 0x51e0, 0x51e1, 0x51e1, 0x51e1, 0x51e1, 0x51e1, 
+    0x51e1, 0x51e2, 0x51e2, 0x51e2, 0x51e2, 0x51e2, 0x51e2, 0x51e3, 
+    0x51e3, 0x51e3, 0x51e3, 0x51e3, 0x51e4, 0x51e4, 0x51e4, 0x51e4, 
+    0x51e4, 0x51e4, 0x51e5, 0x51e5, 0x51e5, 0x51e5, 0x51e5, 0x51e5, 
+    0x51e6, 0x51e6, 0x51e6, 0x51e6, 0x51e6, 0x51e7, 0x51e7, 0x51e7, 
+    0x51e7, 0x51e7, 0x51e7, 0x51e8, 0x51e8, 0x51e8, 0x51e8, 0x51e8, 
+    0x51e8, 0x51e9, 0x51e9, 0x51e9, 0x51e9, 0x51e9, 0x51ea, 0x51ea, 
+    0x51ea, 0x51ea, 0x51ea, 0x51ea, 0x51eb, 0x51eb, 0x51eb, 0x51eb, 
+    0x51eb, 0x51eb, 0x51ec, 0x51ec, 0x51ec, 0x51ec, 0x51ec, 0x51ec, 
+    0x51ed, 0x51ed, 0x51ed, 0x51ed, 0x51ed, 0x51ed, 0x51ee, 0x51ee, 
+    0x51ee, 0x51ee, 0x51ee, 0x51ee, 0x51ef, 0x51ef, 0x51ef, 0x51ef, 
+    0x51ef, 0x51f0, 0x51f0, 0x51f0, 0x51f0, 0x51f0, 0x51f0, 0x51f1, 
+    0x51f1, 0x51f1, 0x51f1, 0x51f1, 0x51f1, 0x51f2, 0x51f2, 0x51f2, 
+    0x51f2, 0x51f2, 0x51f2, 0x51f3, 0x51f3, 0x51f3, 0x51f3, 0x51f3, 
+    0x51f3, 0x51f4, 0x51f4, 0x51f4, 0x51f4, 0x51f4, 0x51f4, 0x51f5, 
+    0x51f5, 0x51f5, 0x51f5, 0x51f5, 0x51f5, 0x51f6, 0x51f6, 0x51f6, 
+    0x51f6, 0x51f6, 0x51f6, 0x51f7, 0x51f7, 0x51f7, 0x51f7, 0x51f7, 
+    0x51f7, 0x51f7, 0x51f8, 0x51f8, 0x51f8, 0x51f8, 0x51f8, 0x51f8, 
+    0x51f9, 0x51f9, 0x51f9, 0x51f9, 0x51f9, 0x51f9, 0x51fa, 0x51fa, 
+    0x51fa, 0x51fa, 0x51fa, 0x51fa, 0x51fb, 0x51fb, 0x51fb, 0x51fb, 
+    0x51fb, 0x51fb, 0x51fc, 0x51fc, 0x51fc, 0x51fc, 0x51fc, 0x51fc, 
+    0x51fd, 0x51fd, 0x51fd, 0x51fd, 0x51fd, 0x51fd, 0x51fd, 0x51fe, 
+    0x51fe, 0x51fe, 0x51fe, 0x51fe, 0x51fe, 0x51ff, 0x51ff, 0x51ff, 
+    0x51ff, 0x51ff, 0x51ff, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 
+    0x5200, 0x5201, 0x5201, 0x5201, 0x5201, 0x5201, 0x5201, 0x5201, 
+    0x5202, 0x5202, 0x5202, 0x5202, 0x5202, 0x5202, 0x5203, 0x5203, 
+    0x5203, 0x5203, 0x5203, 0x5203, 0x5204, 0x5204, 0x5204, 0x5204, 
+    0x5204, 0x5204, 0x5204, 0x5205, 0x5205, 0x5205, 0x5205, 0x5205, 
+    0x5205, 0x5206, 0x5206, 0x5206, 0x5206, 0x5206, 0x5206, 0x5206, 
+    0x5207, 0x5207, 0x5207, 0x5207, 0x5207, 0x5207, 0x5208, 0x5208, 
+    0x5208, 0x5208, 0x5208, 0x5208, 0x5208, 0x5209, 0x5209, 0x5209, 
+    0x5209, 0x5209, 0x5209, 0x520a, 0x520a, 0x520a, 0x520a, 0x520a, 
+    0x520a, 0x520a, 0x520b, 0x520b, 0x520b, 0x520b, 0x520b, 0x520b, 
+    0x520c, 0x520c, 0x520c, 0x520c, 0x520c, 0x520c, 0x520c, 0x520d, 
+    0x520d, 0x520d, 0x520d, 0x520d, 0x520d, 0x520d, 0x520e, 0x520e, 
+    0x520e, 0x520e, 0x520e, 0x520e, 0x520f, 0x520f, 0x520f, 0x520f, 
+    0x520f, 0x520f, 0x520f, 0x5210, 0x5210, 0x5210, 0x5210, 0x5210, 
+    0x5210, 0x5210, 0x5211, 0x5211, 0x5211, 0x5211, 0x5211, 0x5211, 
+    0x5212, 0x5212, 0x5212, 0x5212, 0x5212, 0x5212, 0x5212, 0x5213, 
+    0x5213, 0x5213, 0x5213, 0x5213, 0x5213, 0x5213, 0x5214, 0x5214, 
+    0x5214, 0x5214, 0x5214, 0x5214, 0x5214, 0x5215, 0x5215, 0x5215, 
+    0x5215, 0x5215, 0x5215, 0x5215, 0x5216, 0x5216, 0x5216, 0x5216, 
+    0x5216, 0x5216, 0x5217, 0x5217, 0x5217, 0x5217, 0x5217, 0x5217, 
+    0x5217, 0x5218, 0x5218, 0x5218, 0x5218, 0x5218, 0x5218, 0x5218, 
+    0x5219, 0x5219, 0x5219, 0x5219, 0x5219, 0x5219, 0x5219, 0x521a, 
+    0x521a, 0x521a, 0x521a, 0x521a, 0x521a, 0x521a, 0x521b, 0x521b, 
+    0x521b, 0x521b, 0x521b, 0x521b, 0x521b, 0x521c, 0x521c, 0x521c, 
+    0x521c, 0x521c, 0x521c, 0x521c, 0x521d, 0x521d, 0x521d, 0x521d, 
+    0x521d, 0x521d, 0x521d, 0x521e, 0x521e, 0x521e, 0x521e, 0x521e, 
+    0x521e, 0x521e, 0x521f, 0x521f, 0x521f, 0x521f, 0x521f, 0x521f, 
+    0x521f, 0x521f, 0x5220, 0x5220, 0x5220, 0x5220, 0x5220, 0x5220, 
+    0x5220, 0x5221, 0x5221, 0x5221, 0x5221, 0x5221, 0x5221, 0x5221, 
+    0x5222, 0x5222, 0x5222, 0x5222, 0x5222, 0x5222, 0x5222, 0x5223, 
+    0x5223, 0x5223, 0x5223, 0x5223, 0x5223, 0x5223, 0x5224, 0x5224, 
+    0x5224, 0x5224, 0x5224, 0x5224, 0x5224, 0x5224, 0x5225, 0x5225, 
+    0x5225, 0x5225, 0x5225, 0x5225, 0x5225, 0x5226, 0x5226, 0x5226, 
+    0x5226, 0x5226, 0x5226, 0x5226, 0x5227, 0x5227, 0x5227, 0x5227, 
+    0x5227, 0x5227, 0x5227, 0x5228, 0x5228, 0x5228, 0x5228, 0x5228, 
+    0x5228, 0x5228, 0x5228, 0x5229, 0x5229, 0x5229, 0x5229, 0x5229, 
+    0x5229, 0x5229, 0x522a, 0x522a, 0x522a, 0x522a, 0x522a, 0x522a, 
+    0x522a, 0x522a, 0x522b, 0x522b, 0x522b, 0x522b, 0x522b, 0x522b, 
+    0x522b, 0x522c, 0x522c, 0x522c, 0x522c, 0x522c, 0x522c, 0x522c, 
+    0x522c, 0x522d, 0x522d, 0x522d, 0x522d, 0x522d, 0x522d, 0x522d, 
+    0x522e, 0x522e, 0x522e, 0x522e, 0x522e, 0x522e, 0x522e, 0x522e, 
+    0x522f, 0x522f, 0x522f, 0x522f, 0x522f, 0x522f, 0x522f, 0x5230, 
+    0x5230, 0x5230, 0x5230, 0x5230, 0x5230, 0x5230, 0x5230, 0x5231, 
+    0x5231, 0x5231, 0x5231, 0x5231, 0x5231, 0x5231, 0x5232, 0x5232, 
+    0x5232, 0x5232, 0x5232, 0x5232, 0x5232, 0x5232, 0x5233, 0x5233, 
+    0x5233, 0x5233, 0x5233, 0x5233, 0x5233, 0x5233, 0x5234, 0x5234, 
+    0x5234, 0x5234, 0x5234, 0x5234, 0x5234, 0x5234, 0x5235, 0x5235, 
+    0x5235, 0x5235, 0x5235, 0x5235, 0x5235, 0x5236, 0x5236, 0x5236, 
+    0x5236, 0x5236, 0x5236, 0x5236, 0x5236, 0x5237, 0x5237, 0x5237, 
+    0x5237, 0x5237, 0x5237, 0x5237, 0x5237, 0x5238, 0x5238, 0x5238, 
+    0x5238, 0x5238, 0x5238, 0x5238, 0x5238, 0x5239, 0x5239, 0x5239, 
+    0x5239, 0x5239, 0x5239, 0x5239, 0x5239, 0x523a, 0x523a, 0x523a, 
+    0x523a, 0x523a, 0x523a, 0x523a, 0x523a, 0x523b, 0x523b, 0x523b, 
+    0x523b, 0x523b, 0x523b, 0x523b, 0x523c, 0x523c, 0x523c, 0x523c, 
+    0x523c, 0x523c, 0x523c, 0x523c, 0x523d, 0x523d, 0x523d, 0x523d, 
+    0x523d, 0x523d, 0x523e, 0x523e, 0x523e, 0x523e, 0x523f, 0x523f, 
+    0x523f, 0x523f, 0x523f, 0x5240, 0x5240, 0x5240, 0x5240, 0x5241, 
+    0x5241, 0x5241, 0x5241, 0x5242, 0x5242, 0x5242, 0x5242, 0x5243, 
+    0x5243, 0x5243, 0x5243, 0x5244, 0x5244, 0x5244, 0x5244, 0x5245, 
+    0x5245, 0x5245, 0x5245, 0x5246, 0x5246, 0x5246, 0x5246, 0x5247, 
+    0x5247, 0x5247, 0x5247, 0x5248, 0x5248, 0x5248, 0x5248, 0x5248, 
+    0x5249, 0x5249, 0x5249, 0x5249, 0x524a, 0x524a, 0x524a, 0x524a, 
+    0x524b, 0x524b, 0x524b, 0x524b, 0x524c, 0x524c, 0x524c, 0x524c, 
+    0x524d, 0x524d, 0x524d, 0x524d, 0x524d, 0x524e, 0x524e, 0x524e, 
+    0x524e, 0x524f, 0x524f, 0x524f, 0x524f, 0x5250, 0x5250, 0x5250, 
+    0x5250, 0x5251, 0x5251, 0x5251, 0x5251, 0x5251, 0x5252, 0x5252, 
+    0x5252, 0x5252, 0x5253, 0x5253, 0x5253, 0x5253, 0x5253, 0x5254, 
+    0x5254, 0x5254, 0x5254, 0x5255, 0x5255, 0x5255, 0x5255, 0x5256, 
+    0x5256, 0x5256, 0x5256, 0x5256, 0x5257, 0x5257, 0x5257, 0x5257, 
+    0x5258, 0x5258, 0x5258, 0x5258, 0x5258, 0x5259, 0x5259, 0x5259, 
+    0x5259, 0x525a, 0x525a, 0x525a, 0x525a, 0x525a, 0x525b, 0x525b, 
+    0x525b, 0x525b, 0x525c, 0x525c, 0x525c, 0x525c, 0x525c, 0x525d, 
+    0x525d, 0x525d, 0x525d, 0x525e, 0x525e, 0x525e, 0x525e, 0x525e, 
+    0x525f, 0x525f, 0x525f, 0x525f, 0x5260, 0x5260, 0x5260, 0x5260, 
+    0x5260, 0x5261, 0x5261, 0x5261, 0x5261, 0x5262, 0x5262, 0x5262, 
+    0x5262, 0x5262, 0x5263, 0x5263, 0x5263, 0x5263, 0x5263, 0x5264, 
+    0x5264, 0x5264, 0x5264, 0x5265, 0x5265, 0x5265, 0x5265, 0x5265, 
+    0x5266, 0x5266, 0x5266, 0x5266, 0x5266, 0x5267, 0x5267, 0x5267, 
+    0x5267, 0x5268, 0x5268, 0x5268, 0x5268, 0x5268, 0x5269, 0x5269, 
+    0x5269, 0x5269, 0x5269, 0x526a, 0x526a, 0x526a, 0x526a, 0x526a, 
+    0x526b, 0x526b, 0x526b, 0x526b, 0x526c, 0x526c, 0x526c, 0x526c, 
+    0x526c, 0x526d, 0x526d, 0x526d, 0x526d, 0x526d, 0x526e, 0x526e, 
+    0x526e, 0x526e, 0x526e, 0x526f, 0x526f, 0x526f, 0x526f, 0x526f, 
+    0x5270, 0x5270, 0x5270, 0x5270, 0x5270, 0x5271, 0x5271, 0x5271, 
+    0x5271, 0x5271, 0x5272, 0x5272, 0x5272, 0x5272, 0x5273, 0x5273, 
+    0x5273, 0x5273, 0x5273, 0x5274, 0x5274, 0x5274, 0x5274, 0x5274, 
+    0x5275, 0x5275, 0x5275, 0x5275, 0x5275, 0x5276, 0x5276, 0x5276, 
+    0x5276, 0x5276, 0x5277, 0x5277, 0x5277, 0x5277, 0x5277, 0x5278, 
+    0x5278, 0x5278, 0x5278, 0x5278, 0x5279, 0x5279, 0x5279, 0x5279, 
+    0x5279, 0x527a, 0x527a, 0x527a, 0x527a, 0x527a, 0x527a, 0x527b, 
+    0x527b, 0x527b, 0x527b, 0x527b, 0x527c, 0x527c, 0x527c, 0x527c, 
+    0x527c, 0x527d, 0x527d, 0x527d, 0x527d, 0x527d, 0x527e, 0x527e, 
+    0x527e, 0x527e, 0x527e, 0x527f, 0x527f, 0x527f, 0x527f, 0x527f, 
+    0x5280, 0x5280, 0x5280, 0x5280, 0x5280, 0x5281, 0x5281, 0x5281, 
+    0x5281, 0x5281, 0x5281, 0x5282, 0x5282, 0x5282, 0x5282, 0x5282, 
+    0x5283, 0x5283, 0x5283, 0x5283, 0x5283, 0x5284, 0x5284, 0x5284, 
+    0x5284, 0x5284, 0x5285, 0x5285, 0x5285, 0x5285, 0x5285, 0x5285, 
+    0x5286, 0x5286, 0x5286, 0x5286, 0x5286, 0x5287, 0x5287, 0x5287, 
+    0x5287, 0x5287, 0x5288, 0x5288, 0x5288, 0x5288, 0x5288, 0x5288, 
+    0x5289, 0x5289, 0x5289, 0x5289, 0x5289, 0x528a, 0x528a, 0x528a, 
+    0x528a, 0x528a, 0x528b, 0x528b, 0x528b, 0x528b, 0x528b, 0x528b, 
+    0x528c, 0x528c, 0x528c, 0x528c, 0x528c, 0x528d, 0x528d, 0x528d, 
+    0x528d, 0x528d, 0x528d, 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, 
+    0x528f, 0x528f, 0x528f, 0x528f, 0x528f, 0x528f, 0x5290, 0x5290, 
+    0x5290, 0x5290, 0x5290, 0x5291, 0x5291, 0x5291, 0x5291, 0x5291, 
+    0x5291, 0x5292, 0x5292, 0x5292, 0x5292, 0x5292, 0x5293, 0x5293, 
+    0x5293, 0x5293, 0x5293, 0x5293, 0x5294, 0x5294, 0x5294, 0x5294, 
+    0x5294, 0x5294, 0x5295, 0x5295, 0x5295, 0x5295, 0x5295, 0x5296, 
+    0x5296, 0x5296, 0x5296, 0x5296, 0x5296, 0x5297, 0x5297, 0x5297, 
+    0x5297, 0x5297, 0x5297, 0x5298, 0x5298, 0x5298, 0x5298, 0x5298, 
+    0x5299, 0x5299, 0x5299, 0x5299, 0x5299, 0x5299, 0x529a, 0x529a, 
+    0x529a, 0x529a, 0x529a, 0x529a, 0x529b, 0x529b, 0x529b, 0x529b, 
+    0x529b, 0x529b, 0x529c, 0x529c, 0x529c, 0x529c, 0x529c, 0x529d, 
+    0x529d, 0x529d, 0x529d, 0x529d, 0x529d, 0x529e, 0x529e, 0x529e, 
+    0x529e, 0x529e, 0x529e, 0x529f, 0x529f, 0x529f, 0x529f, 0x529f, 
+    0x529f, 0x52a0, 0x52a0, 0x52a0, 0x52a0, 0x52a0, 0x52a0, 0x52a1, 
+    0x52a1, 0x52a1, 0x52a1, 0x52a1, 0x52a1, 0x52a2, 0x52a2, 0x52a2, 
+    0x52a2, 0x52a2, 0x52a2, 0x52a3, 0x52a3, 0x52a3, 0x52a3, 0x52a3, 
+    0x52a3, 0x52a4, 0x52a4, 0x52a4, 0x52a4, 0x52a4, 0x52a4, 0x52a5, 
+    0x52a5, 0x52a5, 0x52a5, 0x52a5, 0x52a5, 0x52a6, 0x52a6, 0x52a6, 
+    0x52a6, 0x52a6, 0x52a6, 0x52a7, 0x52a7, 0x52a7, 0x52a7, 0x52a7, 
+    0x52a7, 0x52a8, 0x52a8, 0x52a8, 0x52a8, 0x52a8, 0x52a8, 0x52a9, 
+    0x52a9, 0x52a9, 0x52a9, 0x52a9, 0x52a9, 0x52aa, 0x52aa, 0x52aa, 
+    0x52aa, 0x52aa, 0x52aa, 0x52ab, 0x52ab, 0x52ab, 0x52ab, 0x52ab, 
+    0x52ab, 0x52ac, 0x52ac, 0x52ac, 0x52ac, 0x52ac, 0x52ac, 0x52ad, 
+    0x52ad, 0x52ad, 0x52ad, 0x52ad, 0x52ad, 0x52ad, 0x52ae, 0x52ae, 
+    0x52ae, 0x52ae, 0x52ae, 0x52ae, 0x52af, 0x52af, 0x52af, 0x52af, 
+    0x52af, 0x52af, 0x52b0, 0x52b0, 0x52b0, 0x52b0, 0x52b0, 0x52b0, 
+    0x52b1, 0x52b1, 0x52b1, 0x52b1, 0x52b1, 0x52b1, 0x52b1, 0x52b2, 
+    0x52b2, 0x52b2, 0x52b2, 0x52b2, 0x52b2, 0x52b3, 0x52b3, 0x52b3, 
+    0x52b3, 0x52b3, 0x52b3, 0x52b4, 0x52b4, 0x52b4, 0x52b4, 0x52b4, 
+    0x52b4, 0x52b4, 0x52b5, 0x52b5, 0x52b5, 0x52b5, 0x52b5, 0x52b5, 
+    0x52b6, 0x52b6, 0x52b6, 0x52b6, 0x52b6, 0x52b6, 0x52b7, 0x52b7, 
+    0x52b7, 0x52b7, 0x52b7, 0x52b7, 0x52b7, 0x52b8, 0x52b8, 0x52b8, 
+    0x52b8, 0x52b8, 0x52b8, 0x52b9, 0x52b9, 0x52b9, 0x52b9, 0x52b9, 
+    0x52b9, 0x52b9, 0x52ba, 0x52ba, 0x52ba, 0x52ba, 0x52ba, 0x52ba, 
+    0x52bb, 0x52bb, 0x52bb, 0x52bb, 0x52bb, 0x52bb, 0x52bb, 0x52bc, 
+    0x52bc, 0x52bc, 0x52bc, 0x52bc, 0x52bc, 0x52bd, 0x52bd, 0x52bd, 
+    0x52bd, 0x52bd, 0x52bd, 0x52bd, 0x52be, 0x52be, 0x52be, 0x52be, 
+    0x52be, 0x52be, 0x52be, 0x52bf, 0x52bf, 0x52bf, 0x52bf, 0x52bf, 
+    0x52bf, 0x52c0, 0x52c0, 0x52c0, 0x52c0, 0x52c0, 0x52c0, 0x52c0, 
+    0x52c1, 0x52c1, 0x52c1, 0x52c1, 0x52c1, 0x52c1, 0x52c1, 0x52c2, 
+    0x52c2, 0x52c2, 0x52c2, 0x52c2, 0x52c2, 0x52c3, 0x52c3, 0x52c3, 
+    0x52c3, 0x52c3, 0x52c3, 0x52c3, 0x52c4, 0x52c4, 0x52c4, 0x52c4, 
+    0x52c4, 0x52c4, 0x52c4, 0x52c5, 0x52c5, 0x52c5, 0x52c5, 0x52c5, 
+    0x52c5, 0x52c5, 0x52c6, 0x52c6, 0x52c6, 0x52c6, 0x52c6, 0x52c6, 
+    0x52c6, 0x52c7, 0x52c7, 0x52c7, 0x52c7, 0x52c7, 0x52c7, 0x52c8, 
+    0x52c8, 0x52c8, 0x52c8, 0x52c8, 0x52c8, 0x52c8, 0x52c9, 0x52c9, 
+    0x52c9, 0x52c9, 0x52c9, 0x52c9, 0x52c9, 0x52ca, 0x52ca, 0x52ca, 
+    0x52ca, 0x52ca, 0x52ca, 0x52ca, 0x52cb, 0x52cb, 0x52cb, 0x52cb, 
+    0x52cb, 0x52cb, 0x52cb, 0x52cc, 0x52cc, 0x52cc, 0x52cc, 0x52cc, 
+    0x52cc, 0x52cc, 0x52cd, 0x52cd, 0x52cd, 0x52cd, 0x52cd, 0x52cd, 
+    0x52cd, 0x52ce, 0x52ce, 0x52ce, 0x52ce, 0x52ce, 0x52ce, 0x52ce, 
+    0x52cf, 0x52cf, 0x52cf, 0x52cf, 0x52cf, 0x52cf, 0x52cf, 0x52d0, 
+    0x52d0, 0x52d0, 0x52d0, 0x52d0, 0x52d0, 0x52d0, 0x52d1, 0x52d1, 
+    0x52d1, 0x52d1, 0x52d1, 0x52d1, 0x52d1, 0x52d2, 0x52d2, 0x52d2, 
+    0x52d2, 0x52d2, 0x52d2, 0x52d2, 0x52d2, 0x52d3, 0x52d3, 0x52d3, 
+    0x52d3, 0x52d3, 0x52d3, 0x52d3, 0x52d4, 0x52d4, 0x52d4, 0x52d4, 
+    0x52d4, 0x52d4, 0x52d4, 0x52d5, 0x52d5, 0x52d5, 0x52d5, 0x52d5, 
+    0x52d5, 0x52d5, 0x52d6, 0x52d6, 0x52d6, 0x52d6, 0x52d6, 0x52d6, 
+    0x52d6, 0x52d6, 0x52d7, 0x52d7, 0x52d7, 0x52d7, 0x52d7, 0x52d7, 
+    0x52d7, 0x52d8, 0x52d8, 0x52d8, 0x52d8, 0x52d8, 0x52d8, 0x52d8, 
+    0x52d9, 0x52d9, 0x52d9, 0x52d9, 0x52d9, 0x52d9, 0x52d9, 0x52d9, 
+    0x52da, 0x52da, 0x52da, 0x52da, 0x52da, 0x52da, 0x52da, 0x52db, 
+    0x52db, 0x52db, 0x52db, 0x52db, 0x52db, 0x52db, 0x52dc, 0x52dc, 
+    0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dd, 0x52dd, 
+    0x52dd, 0x52dd, 0x52dd, 0x52dd, 0x52dd, 0x52de, 0x52de, 0x52de, 
+    0x52de, 0x52de, 0x52de, 0x52de, 0x52de, 0x52df, 0x52df, 0x52df, 
+    0x52df, 0x52df, 0x52df, 0x52df, 0x52e0, 0x52e0, 0x52e0, 0x52e0, 
+    0x52e0, 0x52e0, 0x52e0, 0x52e0, 0x52e1, 0x52e1, 0x52e1, 0x52e1, 
+    0x52e1, 0x52e1, 0x52e1, 0x52e2, 0x52e2, 0x52e2, 0x52e2, 0x52e2, 
+    0x52e2, 0x52e2, 0x52e2, 0x52e3, 0x52e3, 0x52e3, 0x52e3, 0x52e3, 
+    0x52e3, 0x52e3, 0x52e3, 0x52e4, 0x52e4, 0x52e4, 0x52e4, 0x52e4, 
+    0x52e4, 0x52e4, 0x52e5, 0x52e5, 0x52e5, 0x52e5, 0x52e5, 0x52e5, 
+    0x52e5, 0x52e5, 0x52e6, 0x52e6, 0x52e6, 0x52e6, 0x52e6, 0x52e6, 
+    0x52e6, 0x52e6, 0x52e7, 0x52e7, 0x52e7, 0x52e7, 0x52e7, 0x52e7, 
+    0x52e7, 0x52e7, 0x52e8, 0x52e8, 0x52e8, 0x52e8, 0x52e8, 0x52e8, 
+    0x52e8, 0x52e9, 0x52e9, 0x52e9, 0x52e9, 0x52e9, 0x52e9, 0x52e9, 
+    0x52e9, 0x52ea, 0x52ea, 0x52ea, 0x52ea, 0x52ea, 0x52ea, 0x52ea, 
+    0x52ea, 0x52eb, 0x52eb, 0x52eb, 0x52eb, 0x52eb, 0x52eb, 0x52eb, 
+    0x52eb, 0x52ec, 0x52ec, 0x52ec, 0x52ec, 0x52ec, 0x52ec, 0x52ec, 
+    0x52ec, 0x52ed, 0x52ed, 0x52ed, 0x52ed, 0x52ed, 0x52ed, 0x52ed, 
+    0x52ed, 0x52ee, 0x52ee, 0x52ee, 0x52ee, 0x52ee, 0x52ee, 0x52ee, 
+    0x52ee, 0x52ef, 0x52ef, 0x52ef, 0x52ef, 0x52f0, 0x52f0, 0x52f0, 
+    0x52f0, 0x52f1, 0x52f1, 0x52f1, 0x52f1, 0x52f2, 0x52f2, 0x52f2, 
+    0x52f2, 0x52f3, 0x52f3, 0x52f3, 0x52f3, 0x52f4, 0x52f4, 0x52f4, 
+    0x52f4, 0x52f5, 0x52f5, 0x52f5, 0x52f5, 0x52f6, 0x52f6, 0x52f6, 
+    0x52f6, 0x52f7, 0x52f7, 0x52f7, 0x52f7, 0x52f8, 0x52f8, 0x52f8, 
+    0x52f8, 0x52f9, 0x52f9, 0x52f9, 0x52f9, 0x52f9, 0x52fa, 0x52fa, 
+    0x52fa, 0x52fa, 0x52fb, 0x52fb, 0x52fb, 0x52fb, 0x52fc, 0x52fc, 
+    0x52fc, 0x52fc, 0x52fd, 0x52fd, 0x52fd, 0x52fd, 0x52fe, 0x52fe, 
+    0x52fe, 0x52fe, 0x52fe, 0x52ff, 0x52ff, 0x52ff, 0x52ff, 0x5300, 
+    0x5300, 0x5300, 0x5300, 0x5301, 0x5301, 0x5301, 0x5301, 0x5301, 
+    0x5302, 0x5302, 0x5302, 0x5302, 0x5303, 0x5303, 0x5303, 0x5303, 
+    0x5304, 0x5304, 0x5304, 0x5304, 0x5304, 0x5305, 0x5305, 0x5305, 
+    0x5305, 0x5306, 0x5306, 0x5306, 0x5306, 0x5307, 0x5307, 0x5307, 
+    0x5307, 0x5307, 0x5308, 0x5308, 0x5308, 0x5308, 0x5309, 0x5309, 
+    0x5309, 0x5309, 0x5309, 0x530a, 0x530a, 0x530a, 0x530a, 0x530b, 
+    0x530b, 0x530b, 0x530b, 0x530b, 0x530c, 0x530c, 0x530c, 0x530c, 
+    0x530d, 0x530d, 0x530d, 0x530d, 0x530d, 0x530e, 0x530e, 0x530e, 
+    0x530e, 0x530f, 0x530f, 0x530f, 0x530f, 0x530f, 0x5310, 0x5310, 
+    0x5310, 0x5310, 0x5311, 0x5311, 0x5311, 0x5311, 0x5311, 0x5312, 
+    0x5312, 0x5312, 0x5312, 0x5313, 0x5313, 0x5313, 0x5313, 0x5313, 
+    0x5314, 0x5314, 0x5314, 0x5314, 0x5314, 0x5315, 0x5315, 0x5315, 
+    0x5315, 0x5316, 0x5316, 0x5316, 0x5316, 0x5316, 0x5317, 0x5317, 
+    0x5317, 0x5317, 0x5317, 0x5318, 0x5318, 0x5318, 0x5318, 0x5319, 
+    0x5319, 0x5319, 0x5319, 0x5319, 0x531a, 0x531a, 0x531a, 0x531a, 
+    0x531a, 0x531b, 0x531b, 0x531b, 0x531b, 0x531c, 0x531c, 0x531c, 
+    0x531c, 0x531c, 0x531d, 0x531d, 0x531d, 0x531d, 0x531d, 0x531e, 
+    0x531e, 0x531e, 0x531e, 0x531e, 0x531f, 0x531f, 0x531f, 0x531f, 
+    0x531f, 0x5320, 0x5320, 0x5320, 0x5320, 0x5320, 0x5321, 0x5321, 
+    0x5321, 0x5321, 0x5322, 0x5322, 0x5322, 0x5322, 0x5322, 0x5323, 
+    0x5323, 0x5323, 0x5323, 0x5323, 0x5324, 0x5324, 0x5324, 0x5324, 
+    0x5324, 0x5325, 0x5325, 0x5325, 0x5325, 0x5325, 0x5326, 0x5326, 
+    0x5326, 0x5326, 0x5326, 0x5327, 0x5327, 0x5327, 0x5327, 0x5327, 
+    0x5328, 0x5328, 0x5328, 0x5328, 0x5328, 0x5329, 0x5329, 0x5329, 
+    0x5329, 0x5329, 0x532a, 0x532a, 0x532a, 0x532a, 0x532a, 0x532b, 
+    0x532b, 0x532b, 0x532b, 0x532b, 0x532c, 0x532c, 0x532c, 0x532c, 
+    0x532c, 0x532d, 0x532d, 0x532d, 0x532d, 0x532d, 0x532e, 0x532e, 
+    0x532e, 0x532e, 0x532e, 0x532e, 0x532f, 0x532f, 0x532f, 0x532f, 
+    0x532f, 0x5330, 0x5330, 0x5330, 0x5330, 0x5330, 0x5331, 0x5331, 
+    0x5331, 0x5331, 0x5331, 0x5332, 0x5332, 0x5332, 0x5332, 0x5332, 
+    0x5333, 0x5333, 0x5333, 0x5333, 0x5333, 0x5333, 0x5334, 0x5334, 
+    0x5334, 0x5334, 0x5334, 0x5335, 0x5335, 0x5335, 0x5335, 0x5335, 
+    0x5336, 0x5336, 0x5336, 0x5336, 0x5336, 0x5337, 0x5337, 0x5337, 
+    0x5337, 0x5337, 0x5337, 0x5338, 0x5338, 0x5338, 0x5338, 0x5338, 
+    0x5339, 0x5339, 0x5339, 0x5339, 0x5339, 0x533a, 0x533a, 0x533a, 
+    0x533a, 0x533a, 0x533a, 0x533b, 0x533b, 0x533b, 0x533b, 0x533b, 
+    0x533c, 0x533c, 0x533c, 0x533c, 0x533c, 0x533d, 0x533d, 0x533d, 
+    0x533d, 0x533d, 0x533d, 0x533e, 0x533e, 0x533e, 0x533e, 0x533e, 
+    0x533f, 0x533f, 0x533f, 0x533f, 0x533f, 0x533f, 0x5340, 0x5340, 
+    0x5340, 0x5340, 0x5340, 0x5341, 0x5341, 0x5341, 0x5341, 0x5341, 
+    0x5341, 0x5342, 0x5342, 0x5342, 0x5342, 0x5342, 0x5343, 0x5343, 
+    0x5343, 0x5343, 0x5343, 0x5343, 0x5344, 0x5344, 0x5344, 0x5344, 
+    0x5344, 0x5344, 0x5345, 0x5345, 0x5345, 0x5345, 0x5345, 0x5346, 
+    0x5346, 0x5346, 0x5346, 0x5346, 0x5346, 0x5347, 0x5347, 0x5347, 
+    0x5347, 0x5347, 0x5348, 0x5348, 0x5348, 0x5348, 0x5348, 0x5348, 
+    0x5349, 0x5349, 0x5349, 0x5349, 0x5349, 0x5349, 0x534a, 0x534a, 
+    0x534a, 0x534a, 0x534a, 0x534a, 0x534b, 0x534b, 0x534b, 0x534b, 
+    0x534b, 0x534c, 0x534c, 0x534c, 0x534c, 0x534c, 0x534c, 0x534d, 
+    0x534d, 0x534d, 0x534d, 0x534d, 0x534d, 0x534e, 0x534e, 0x534e, 
+    0x534e, 0x534e, 0x534e, 0x534f, 0x534f, 0x534f, 0x534f, 0x534f, 
+    0x5350, 0x5350, 0x5350, 0x5350, 0x5350, 0x5350, 0x5351, 0x5351, 
+    0x5351, 0x5351, 0x5351, 0x5351, 0x5352, 0x5352, 0x5352, 0x5352, 
+    0x5352, 0x5352, 0x5353, 0x5353, 0x5353, 0x5353, 0x5353, 0x5353, 
+    0x5354, 0x5354, 0x5354, 0x5354, 0x5354, 0x5354, 0x5355, 0x5355, 
+    0x5355, 0x5355, 0x5355, 0x5355, 0x5356, 0x5356, 0x5356, 0x5356, 
+    0x5356, 0x5356, 0x5357, 0x5357, 0x5357, 0x5357, 0x5357, 0x5357, 
+    0x5358, 0x5358, 0x5358, 0x5358, 0x5358, 0x5358, 0x5359, 0x5359, 
+    0x5359, 0x5359, 0x5359, 0x5359, 0x535a, 0x535a, 0x535a, 0x535a, 
+    0x535a, 0x535a, 0x535b, 0x535b, 0x535b, 0x535b, 0x535b, 0x535b, 
+    0x535c, 0x535c, 0x535c, 0x535c, 0x535c, 0x535c, 0x535d, 0x535d, 
+    0x535d, 0x535d, 0x535d, 0x535d, 0x535d, 0x535e, 0x535e, 0x535e, 
+    0x535e, 0x535e, 0x535e, 0x535f, 0x535f, 0x535f, 0x535f, 0x535f, 
+    0x535f, 0x5360, 0x5360, 0x5360, 0x5360, 0x5360, 0x5360, 0x5361, 
+    0x5361, 0x5361, 0x5361, 0x5361, 0x5361, 0x5362, 0x5362, 0x5362, 
+    0x5362, 0x5362, 0x5362, 0x5362, 0x5363, 0x5363, 0x5363, 0x5363, 
+    0x5363, 0x5363, 0x5364, 0x5364, 0x5364, 0x5364, 0x5364, 0x5364, 
+    0x5365, 0x5365, 0x5365, 0x5365, 0x5365, 0x5365, 0x5365, 0x5366, 
+    0x5366, 0x5366, 0x5366, 0x5366, 0x5366, 0x5367, 0x5367, 0x5367, 
+    0x5367, 0x5367, 0x5367, 0x5367, 0x5368, 0x5368, 0x5368, 0x5368, 
+    0x5368, 0x5368, 0x5369, 0x5369, 0x5369, 0x5369, 0x5369, 0x5369, 
+    0x536a, 0x536a, 0x536a, 0x536a, 0x536a, 0x536a, 0x536a, 0x536b, 
+    0x536b, 0x536b, 0x536b, 0x536b, 0x536b, 0x536c, 0x536c, 0x536c, 
+    0x536c, 0x536c, 0x536c, 0x536c, 0x536d, 0x536d, 0x536d, 0x536d, 
+    0x536d, 0x536d, 0x536e, 0x536e, 0x536e, 0x536e, 0x536e, 0x536e, 
+    0x536e, 0x536f, 0x536f, 0x536f, 0x536f, 0x536f, 0x536f, 0x536f, 
+    0x5370, 0x5370, 0x5370, 0x5370, 0x5370, 0x5370, 0x5371, 0x5371, 
+    0x5371, 0x5371, 0x5371, 0x5371, 0x5371, 0x5372, 0x5372, 0x5372, 
+    0x5372, 0x5372, 0x5372, 0x5372, 0x5373, 0x5373, 0x5373, 0x5373, 
+    0x5373, 0x5373, 0x5374, 0x5374, 0x5374, 0x5374, 0x5374, 0x5374, 
+    0x5374, 0x5375, 0x5375, 0x5375, 0x5375, 0x5375, 0x5375, 0x5375, 
+    0x5376, 0x5376, 0x5376, 0x5376, 0x5376, 0x5376, 0x5376, 0x5377, 
+    0x5377, 0x5377, 0x5377, 0x5377, 0x5377, 0x5378, 0x5378, 0x5378, 
+    0x5378, 0x5378, 0x5378, 0x5378, 0x5379, 0x5379, 0x5379, 0x5379, 
+    0x5379, 0x5379, 0x5379, 0x537a, 0x537a, 0x537a, 0x537a, 0x537a, 
+    0x537a, 0x537a, 0x537b, 0x537b, 0x537b, 0x537b, 0x537b, 0x537b, 
+    0x537b, 0x537c, 0x537c, 0x537c, 0x537c, 0x537c, 0x537c, 0x537c, 
+    0x537d, 0x537d, 0x537d, 0x537d, 0x537d, 0x537d, 0x537d, 0x537e, 
+    0x537e, 0x537e, 0x537e, 0x537e, 0x537e, 0x537e, 0x537f, 0x537f, 
+    0x537f, 0x537f, 0x537f, 0x537f, 0x537f, 0x5380, 0x5380, 0x5380, 
+    0x5380, 0x5380, 0x5380, 0x5380, 0x5381, 0x5381, 0x5381, 0x5381, 
+    0x5381, 0x5381, 0x5381, 0x5382, 0x5382, 0x5382, 0x5382, 0x5382, 
+    0x5382, 0x5382, 0x5383, 0x5383, 0x5383, 0x5383, 0x5383, 0x5383, 
+    0x5383, 0x5384, 0x5384, 0x5384, 0x5384, 0x5384, 0x5384, 0x5384, 
+    0x5384, 0x5385, 0x5385, 0x5385, 0x5385, 0x5385, 0x5385, 0x5385, 
+    0x5386, 0x5386, 0x5386, 0x5386, 0x5386, 0x5386, 0x5386, 0x5387, 
+    0x5387, 0x5387, 0x5387, 0x5387, 0x5387, 0x5387, 0x5388, 0x5388, 
+    0x5388, 0x5388, 0x5388, 0x5388, 0x5388, 0x5388, 0x5389, 0x5389, 
+    0x5389, 0x5389, 0x5389, 0x5389, 0x5389, 0x538a, 0x538a, 0x538a, 
+    0x538a, 0x538a, 0x538a, 0x538a, 0x538b, 0x538b, 0x538b, 0x538b, 
+    0x538b, 0x538b, 0x538b, 0x538b, 0x538c, 0x538c, 0x538c, 0x538c, 
+    0x538c, 0x538c, 0x538c, 0x538d, 0x538d, 0x538d, 0x538d, 0x538d, 
+    0x538d, 0x538d, 0x538e, 0x538e, 0x538e, 0x538e, 0x538e, 0x538e, 
+    0x538e, 0x538e, 0x538f, 0x538f, 0x538f, 0x538f, 0x538f, 0x538f, 
+    0x538f, 0x5390, 0x5390, 0x5390, 0x5390, 0x5390, 0x5390, 0x5390, 
+    0x5390, 0x5391, 0x5391, 0x5391, 0x5391, 0x5391, 0x5391, 0x5391, 
+    0x5392, 0x5392, 0x5392, 0x5392, 0x5392, 0x5392, 0x5392, 0x5392, 
+    0x5393, 0x5393, 0x5393, 0x5393, 0x5393, 0x5393, 0x5393, 0x5393, 
+    0x5394, 0x5394, 0x5394, 0x5394, 0x5394, 0x5394, 0x5394, 0x5395, 
+    0x5395, 0x5395, 0x5395, 0x5395, 0x5395, 0x5395, 0x5395, 0x5396, 
+    0x5396, 0x5396, 0x5396, 0x5396, 0x5396, 0x5396, 0x5396, 0x5397, 
+    0x5397, 0x5397, 0x5397, 0x5397, 0x5397, 0x5397, 0x5398, 0x5398, 
+    0x5398, 0x5398, 0x5398, 0x5398, 0x5398, 0x5398, 0x5399, 0x5399, 
+    0x5399, 0x5399, 0x5399, 0x5399, 0x5399, 0x5399, 0x539a, 0x539a, 
+    0x539a, 0x539a, 0x539a, 0x539a, 0x539a, 0x539a, 0x539b, 0x539b, 
+    0x539b, 0x539b, 0x539b, 0x539b, 0x539b, 0x539b, 0x539c, 0x539c, 
+    0x539c, 0x539c, 0x539c, 0x539c, 0x539c, 0x539d, 0x539d, 0x539d, 
+    0x539d, 0x539d, 0x539d, 0x539d, 0x539d, 0x539e, 0x539e, 0x539e, 
+    0x539e, 0x539e, 0x539e, 0x539e, 0x539e, 0x539f, 0x539f, 0x539f, 
+    0x539f, 0x539f, 0x539f, 0x539f, 0x539f, 0x53a0, 0x53a0, 0x53a0, 
+    0x53a0, 0x53a0, 0x53a0, 0x53a1, 0x53a1, 0x53a1, 0x53a1, 0x53a2, 
+    0x53a2, 0x53a2, 0x53a2, 0x53a3, 0x53a3, 0x53a3, 0x53a3, 0x53a4, 
+    0x53a4, 0x53a4, 0x53a4, 0x53a5, 0x53a5, 0x53a5, 0x53a5, 0x53a6, 
+    0x53a6, 0x53a6, 0x53a6, 0x53a7, 0x53a7, 0x53a7, 0x53a7, 0x53a8, 
+    0x53a8, 0x53a8, 0x53a8, 0x53a9, 0x53a9, 0x53a9, 0x53a9, 0x53a9, 
+    0x53aa, 0x53aa, 0x53aa, 0x53aa, 0x53ab, 0x53ab, 0x53ab, 0x53ab, 
+    0x53ac, 0x53ac, 0x53ac, 0x53ac, 0x53ad, 0x53ad, 0x53ad, 0x53ad, 
+    0x53ae, 0x53ae, 0x53ae, 0x53ae, 0x53ae, 0x53af, 0x53af, 0x53af, 
+    0x53af, 0x53b0, 0x53b0, 0x53b0, 0x53b0, 0x53b1, 0x53b1, 0x53b1, 
+    0x53b1, 0x53b2, 0x53b2, 0x53b2, 0x53b2, 0x53b2, 0x53b3, 0x53b3, 
+    0x53b3, 0x53b3, 0x53b4, 0x53b4, 0x53b4, 0x53b4, 0x53b5, 0x53b5, 
+    0x53b5, 0x53b5, 0x53b5, 0x53b6, 0x53b6, 0x53b6, 0x53b6, 0x53b7, 
+    0x53b7, 0x53b7, 0x53b7, 0x53b8, 0x53b8, 0x53b8, 0x53b8, 0x53b8, 
+    0x53b9, 0x53b9, 0x53b9, 0x53b9, 0x53ba, 0x53ba, 0x53ba, 0x53ba, 
+    0x53ba, 0x53bb, 0x53bb, 0x53bb, 0x53bb, 0x53bc, 0x53bc, 0x53bc, 
+    0x53bc, 0x53bc, 0x53bd, 0x53bd, 0x53bd, 0x53bd, 0x53be, 0x53be, 
+    0x53be, 0x53be, 0x53be, 0x53bf, 0x53bf, 0x53bf, 0x53bf, 0x53c0, 
+    0x53c0, 0x53c0, 0x53c0, 0x53c0, 0x53c1, 0x53c1, 0x53c1, 0x53c1, 
+    0x53c2, 0x53c2, 0x53c2, 0x53c2, 0x53c2, 0x53c3, 0x53c3, 0x53c3, 
+    0x53c3, 0x53c4, 0x53c4, 0x53c4, 0x53c4, 0x53c4, 0x53c5, 0x53c5, 
+    0x53c5, 0x53c5, 0x53c6, 0x53c6, 0x53c6, 0x53c6, 0x53c6, 0x53c7, 
+    0x53c7, 0x53c7, 0x53c7, 0x53c7, 0x53c8, 0x53c8, 0x53c8, 0x53c8, 
+    0x53c9, 0x53c9, 0x53c9, 0x53c9, 0x53c9, 0x53ca, 0x53ca, 0x53ca, 
+    0x53ca, 0x53ca, 0x53cb, 0x53cb, 0x53cb, 0x53cb, 0x53cb, 0x53cc, 
+    0x53cc, 0x53cc, 0x53cc, 0x53cd, 0x53cd, 0x53cd, 0x53cd, 0x53cd, 
+    0x53ce, 0x53ce, 0x53ce, 0x53ce, 0x53ce, 0x53cf, 0x53cf, 0x53cf, 
+    0x53cf, 0x53cf, 0x53d0, 0x53d0, 0x53d0, 0x53d0, 0x53d0, 0x53d1, 
+    0x53d1, 0x53d1, 0x53d1, 0x53d2, 0x53d2, 0x53d2, 0x53d2, 0x53d2, 
+    0x53d3, 0x53d3, 0x53d3, 0x53d3, 0x53d3, 0x53d4, 0x53d4, 0x53d4, 
+    0x53d4, 0x53d4, 0x53d5, 0x53d5, 0x53d5, 0x53d5, 0x53d5, 0x53d6, 
+    0x53d6, 0x53d6, 0x53d6, 0x53d6, 0x53d7, 0x53d7, 0x53d7, 0x53d7, 
+    0x53d7, 0x53d8, 0x53d8, 0x53d8, 0x53d8, 0x53d8, 0x53d9, 0x53d9, 
+    0x53d9, 0x53d9, 0x53d9, 0x53da, 0x53da, 0x53da, 0x53da, 0x53da, 
+    0x53db, 0x53db, 0x53db, 0x53db, 0x53db, 0x53dc, 0x53dc, 0x53dc, 
+    0x53dc, 0x53dc, 0x53dd, 0x53dd, 0x53dd, 0x53dd, 0x53dd, 0x53de, 
+    0x53de, 0x53de, 0x53de, 0x53de, 0x53df, 0x53df, 0x53df, 0x53df, 
+    0x53df, 0x53e0, 0x53e0, 0x53e0, 0x53e0, 0x53e0, 0x53e1, 0x53e1, 
+    0x53e1, 0x53e1, 0x53e1, 0x53e1, 0x53e2, 0x53e2, 0x53e2, 0x53e2, 
+    0x53e2, 0x53e3, 0x53e3, 0x53e3, 0x53e3, 0x53e3, 0x53e4, 0x53e4, 
+    0x53e4, 0x53e4, 0x53e4, 0x53e5, 0x53e5, 0x53e5, 0x53e5, 0x53e5, 
+    0x53e6, 0x53e6, 0x53e6, 0x53e6, 0x53e6, 0x53e6, 0x53e7, 0x53e7, 
+    0x53e7, 0x53e7, 0x53e7, 0x53e8, 0x53e8, 0x53e8, 0x53e8, 0x53e8, 
+    0x53e9, 0x53e9, 0x53e9, 0x53e9, 0x53e9, 0x53e9, 0x53ea, 0x53ea, 
+    0x53ea, 0x53ea, 0x53ea, 0x53eb, 0x53eb, 0x53eb, 0x53eb, 0x53eb, 
+    0x53ec, 0x53ec, 0x53ec, 0x53ec, 0x53ec, 0x53ec, 0x53ed, 0x53ed, 
+    0x53ed, 0x53ed, 0x53ed, 0x53ee, 0x53ee, 0x53ee, 0x53ee, 0x53ee, 
+    0x53ef, 0x53ef, 0x53ef, 0x53ef, 0x53ef, 0x53ef, 0x53f0, 0x53f0, 
+    0x53f0, 0x53f0, 0x53f0, 0x53f1, 0x53f1, 0x53f1, 0x53f1, 0x53f1, 
+    0x53f1, 0x53f2, 0x53f2, 0x53f2, 0x53f2, 0x53f2, 0x53f3, 0x53f3, 
+    0x53f3, 0x53f3, 0x53f3, 0x53f3, 0x53f4, 0x53f4, 0x53f4, 0x53f4, 
+    0x53f4, 0x53f4, 0x53f5, 0x53f5, 0x53f5, 0x53f5, 0x53f5, 0x53f6, 
+    0x53f6, 0x53f6, 0x53f6, 0x53f6, 0x53f6, 0x53f7, 0x53f7, 0x53f7, 
+    0x53f7, 0x53f7, 0x53f8, 0x53f8, 0x53f8, 0x53f8, 0x53f8, 0x53f8, 
+    0x53f9, 0x53f9, 0x53f9, 0x53f9, 0x53f9, 0x53f9, 0x53fa, 0x53fa, 
+    0x53fa, 0x53fa, 0x53fa, 0x53fb, 0x53fb, 0x53fb, 0x53fb, 0x53fb, 
+    0x53fb, 0x53fc, 0x53fc, 0x53fc, 0x53fc, 0x53fc, 0x53fc, 0x53fd, 
+    0x53fd, 0x53fd, 0x53fd, 0x53fd, 0x53fe, 0x53fe, 0x53fe, 0x53fe, 
+    0x53fe, 0x53fe, 0x53ff, 0x53ff, 0x53ff, 0x53ff, 0x53ff, 0x53ff, 
+    0x5400, 0x5400, 0x5400, 0x5400, 0x5400, 0x5400, 0x5400, 0x5400, 
+    0x5400, 0x5401, 0x5401, 0x5401, 0x5401, 0x5401, 0x5401, 0x5401, 
+    0x5401, 0x5401, 0x5401, 0x5401, 0x5401, 0x5402, 0x5402, 0x5402, 
+    0x5402, 0x5402, 0x5402, 0x5402, 0x5402, 0x5402, 0x5402, 0x5402, 
+    0x5403, 0x5403, 0x5403, 0x5403, 0x5403, 0x5403, 0x5403, 0x5403, 
+    0x5403, 0x5403, 0x5403, 0x5403, 0x5404, 0x5404, 0x5404, 0x5404, 
+    0x5404, 0x5404, 0x5404, 0x5404, 0x5404, 0x5404, 0x5404, 0x5404, 
+    0x5405, 0x5405, 0x5405, 0x5405, 0x5405, 0x5405, 0x5405, 0x5405, 
+    0x5405, 0x5405, 0x5405, 0x5405, 0x5406, 0x5406, 0x5406, 0x5406, 
+    0x5406, 0x5406, 0x5406, 0x5406, 0x5406, 0x5406, 0x5406, 0x5406, 
+    0x5406, 0x5407, 0x5407, 0x5407, 0x5407, 0x5407, 0x5407, 0x5407, 
+    0x5407, 0x5407, 0x5407, 0x5407, 0x5407, 0x5408, 0x5408, 0x5408, 
+    0x5408, 0x5408, 0x5408, 0x5408, 0x5408, 0x5408, 0x5408, 0x5408, 
+    0x5408, 0x5409, 0x5409, 0x5409, 0x5409, 0x5409, 0x5409, 0x5409, 
+    0x5409, 0x5409, 0x5409, 0x5409, 0x5409, 0x5409, 0x540a, 0x540a, 
+    0x540a, 0x540a, 0x540a, 0x540a, 0x540a, 0x540a, 0x540a, 0x540a, 
+    0x540a, 0x540a, 0x540b, 0x540b, 0x540b, 0x540b, 0x540b, 0x540b, 
+    0x540b, 0x540b, 0x540b, 0x540b, 0x540b, 0x540b, 0x540b, 0x540c, 
+    0x540c, 0x540c, 0x540c, 0x540c, 0x540c, 0x540c, 0x540c, 0x540c, 
+    0x540c, 0x540c, 0x540c, 0x540c, 0x540d, 0x540d, 0x540d, 0x540d, 
+    0x540d, 0x540d, 0x540d, 0x540d, 0x540d, 0x540d, 0x540d, 0x540d, 
+    0x540d, 0x540e, 0x540e, 0x540e, 0x540e, 0x540e, 0x540e, 0x540e, 
+    0x540e, 0x540e, 0x540e, 0x540e, 0x540e, 0x540e, 0x540f, 0x540f, 
+    0x540f, 0x540f, 0x540f, 0x540f, 0x540f, 0x540f, 0x540f, 0x540f, 
+    0x540f, 0x540f, 0x540f, 0x5410, 0x5410, 0x5410, 0x5410, 0x5410, 
+    0x5410, 0x5410, 0x5410, 0x5410, 0x5410, 0x5410, 0x5410, 0x5410, 
+    0x5411, 0x5411, 0x5411, 0x5411, 0x5411, 0x5411, 0x5411, 0x5411, 
+    0x5411, 0x5411, 0x5411, 0x5411, 0x5411, 0x5412, 0x5412, 0x5412, 
+    0x5412, 0x5412, 0x5412, 0x5412, 0x5412, 0x5412, 0x5412, 0x5412, 
+    0x5412, 0x5412, 0x5412, 0x5413, 0x5413, 0x5413, 0x5413, 0x5413, 
+    0x5413, 0x5413, 0x5413, 0x5413, 0x5413, 0x5413, 0x5413, 0x5413, 
+    0x5414, 0x5414, 0x5414, 0x5414, 0x5414, 0x5414, 0x5414, 0x5414, 
+    0x5414, 0x5414, 0x5414, 0x5414, 0x5414, 0x5414, 0x5415, 0x5415, 
+    0x5415, 0x5415, 0x5415, 0x5415, 0x5415, 0x5415, 0x5415, 0x5415, 
+    0x5415, 0x5415, 0x5415, 0x5415, 0x5416, 0x5416, 0x5416, 0x5416, 
+    0x5416, 0x5416, 0x5416, 0x5416, 0x5416, 0x5416, 0x5416, 0x5416, 
+    0x5416, 0x5417, 0x5417, 0x5417, 0x5417, 0x5417, 0x5417, 0x5417, 
+    0x5417, 0x5417, 0x5417, 0x5417, 0x5417, 0x5417, 0x5417, 0x5418, 
+    0x5418, 0x5418, 0x5418, 0x5418, 0x5418, 0x5418, 0x5418, 0x5418, 
+    0x5418, 0x5418, 0x5418, 0x5418, 0x5418, 0x5419, 0x5419, 0x5419, 
+    0x5419, 0x5419, 0x5419, 0x5419, 0x5419, 0x5419, 0x5419, 0x5419, 
+    0x5419, 0x5419, 0x5419, 0x5419, 0x541a, 0x541a, 0x541a, 0x541a, 
+    0x541a, 0x541a, 0x541a, 0x541a, 0x541a, 0x541a, 0x541a, 0x541a, 
+    0x541a, 0x541a, 0x541b, 0x541b, 0x541b, 0x541b, 0x541b, 0x541b, 
+    0x541b, 0x541b, 0x541b, 0x541b, 0x541b, 0x541b, 0x541b, 0x541b, 
+    0x541c, 0x541c, 0x541c, 0x541c, 0x541c, 0x541c, 0x541c, 0x541c, 
+    0x541c, 0x541c, 0x541c, 0x541c, 0x541c, 0x541c, 0x541c, 0x541d, 
+    0x541d, 0x541d, 0x541d, 0x541d, 0x541d, 0x541d, 0x541d, 0x541d, 
+    0x541d, 0x541d, 0x541d, 0x541d, 0x541d, 0x541e, 0x541e, 0x541e, 
+    0x541e, 0x541e, 0x541e, 0x541e, 0x541e, 0x541e, 0x541e, 0x541e, 
+    0x541e, 0x541e, 0x541e, 0x541e, 0x541f, 0x541f, 0x541f, 0x541f, 
+    0x541f, 0x541f, 0x541f, 0x541f, 0x541f, 0x541f, 0x541f, 0x541f, 
+    0x541f, 0x541f, 0x541f, 0x5420, 0x5420, 0x5420, 0x5420, 0x5420, 
+    0x5420, 0x5420, 0x5420, 0x5420, 0x5420, 0x5420, 0x5420, 0x5420, 
+    0x5420, 0x5420, 0x5421, 0x5421, 0x5421, 0x5421, 0x5421, 0x5421, 
+    0x5421, 0x5421, 0x5421, 0x5421, 0x5421, 0x5421, 0x5421, 0x5421, 
+    0x5421, 0x5422, 0x5422, 0x5422, 0x5422, 0x5422, 0x5422, 0x5422, 
+    0x5422, 0x5422, 0x5422, 0x5422, 0x5422, 0x5422, 0x5422, 0x5422, 
+    0x5423, 0x5423, 0x5423, 0x5423, 0x5423, 0x5423, 0x5423, 0x5423, 
+    0x5423, 0x5423, 0x5423, 0x5423, 0x5423, 0x5423, 0x5423, 0x5424, 
+    0x5424, 0x5424, 0x5424, 0x5424, 0x5424, 0x5424, 0x5424, 0x5424, 
+    0x5424, 0x5424, 0x5424, 0x5424, 0x5424, 0x5424, 0x5424, 0x5425, 
+    0x5425, 0x5425, 0x5425, 0x5425, 0x5425, 0x5425, 0x5425, 0x5425, 
+    0x5425, 0x5425, 0x5425, 0x5425, 0x5425, 0x5425, 0x5426, 0x5426, 
+    0x5426, 0x5426, 0x5426, 0x5426, 0x5426, 0x5426, 0x5426, 0x5426, 
+    0x5426, 0x5426, 0x5426, 0x5426, 0x5426, 0x5426, 0x5427, 0x5427, 
+    0x5427, 0x5427, 0x5427, 0x5427, 0x5427, 0x5427, 0x5427, 0x5427, 
+    0x5427, 0x5427, 0x5427, 0x5427, 0x5427, 0x5427, 0x5428, 0x5428, 
+    0x5428, 0x5428, 0x5428, 0x5428, 0x5428, 0x5428, 0x5428, 0x5428, 
+    0x5428, 0x5428, 0x5428, 0x5428, 0x5428, 0x5428, 0x5429, 0x5429, 
+    0x5429, 0x5429, 0x5429, 0x5429, 0x5429, 0x5429, 0x5429, 0x542a, 
+    0x542a, 0x542a, 0x542a, 0x542a, 0x542a, 0x542a, 0x542a, 0x542b, 
+    0x542b, 0x542b, 0x542b, 0x542b, 0x542b, 0x542b, 0x542b, 0x542c, 
+    0x542c, 0x542c, 0x542c, 0x542c, 0x542c, 0x542c, 0x542c, 0x542c, 
+    0x542d, 0x542d, 0x542d, 0x542d, 0x542d, 0x542d, 0x542d, 0x542d, 
+    0x542e, 0x542e, 0x542e, 0x542e, 0x542e, 0x542e, 0x542e, 0x542e, 
+    0x542f, 0x542f, 0x542f, 0x542f, 0x542f, 0x542f, 0x542f, 0x542f, 
+    0x542f, 0x5430, 0x5430, 0x5430, 0x5430, 0x5430, 0x5430, 0x5430, 
+    0x5430, 0x5431, 0x5431, 0x5431, 0x5431, 0x5431, 0x5431, 0x5431, 
+    0x5431, 0x5431, 0x5432, 0x5432, 0x5432, 0x5432, 0x5432, 0x5432, 
+    0x5432, 0x5432, 0x5433, 0x5433, 0x5433, 0x5433, 0x5433, 0x5433, 
+    0x5433, 0x5433, 0x5433, 0x5434, 0x5434, 0x5434, 0x5434, 0x5434, 
+    0x5434, 0x5434, 0x5434, 0x5434, 0x5435, 0x5435, 0x5435, 0x5435, 
+    0x5435, 0x5435, 0x5435, 0x5435, 0x5436, 0x5436, 0x5436, 0x5436, 
+    0x5436, 0x5436, 0x5436, 0x5436, 0x5436, 0x5437, 0x5437, 0x5437, 
+    0x5437, 0x5437, 0x5437, 0x5437, 0x5437, 0x5437, 0x5438, 0x5438, 
+    0x5438, 0x5438, 0x5438, 0x5438, 0x5438, 0x5438, 0x5438, 0x5439, 
+    0x5439, 0x5439, 0x5439, 0x5439, 0x5439, 0x5439, 0x5439, 0x5439, 
+    0x543a, 0x543a, 0x543a, 0x543a, 0x543a, 0x543a, 0x543a, 0x543a, 
+    0x543a, 0x543a, 0x543b, 0x543b, 0x543b, 0x543b, 0x543b, 0x543b, 
+    0x543b, 0x543b, 0x543b, 0x543c, 0x543c, 0x543c, 0x543c, 0x543c, 
+    0x543c, 0x543c, 0x543c, 0x543c, 0x543d, 0x543d, 0x543d, 0x543d, 
+    0x543d, 0x543d, 0x543d, 0x543d, 0x543d, 0x543e, 0x543e, 0x543e, 
+    0x543e, 0x543e, 0x543e, 0x543e, 0x543e, 0x543e, 0x543e, 0x543f, 
+    0x543f, 0x543f, 0x543f, 0x543f, 0x543f, 0x543f, 0x543f, 0x543f, 
+    0x5440, 0x5440, 0x5440, 0x5440, 0x5440, 0x5440, 0x5440, 0x5440, 
+    0x5440, 0x5440, 0x5441, 0x5441, 0x5441, 0x5441, 0x5441, 0x5441, 
+    0x5441, 0x5441, 0x5441, 0x5441, 0x5442, 0x5442, 0x5442, 0x5442, 
+    0x5442, 0x5442, 0x5442, 0x5442, 0x5442, 0x5443, 0x5443, 0x5443, 
+    0x5443, 0x5443, 0x5443, 0x5443, 0x5443, 0x5443, 0x5443, 0x5444, 
+    0x5444, 0x5444, 0x5444, 0x5444, 0x5444, 0x5444, 0x5444, 0x5444, 
+    0x5444, 0x5445, 0x5445, 0x5445, 0x5445, 0x5445, 0x5445, 0x5445, 
+    0x5445, 0x5445, 0x5445, 0x5446, 0x5446, 0x5446, 0x5446, 0x5446, 
+    0x5446, 0x5446, 0x5446, 0x5446, 0x5446, 0x5447, 0x5447, 0x5447, 
+    0x5447, 0x5447, 0x5447, 0x5447, 0x5447, 0x5447, 0x5447, 0x5448, 
+    0x5448, 0x5448, 0x5448, 0x5448, 0x5448, 0x5448, 0x5448, 0x5448, 
+    0x5448, 0x5448, 0x5449, 0x5449, 0x5449, 0x5449, 0x5449, 0x5449, 
+    0x5449, 0x5449, 0x5449, 0x5449, 0x544a, 0x544a, 0x544a, 0x544a, 
+    0x544a, 0x544a, 0x544a, 0x544a, 0x544a, 0x544a, 0x544b, 0x544b, 
+    0x544b, 0x544b, 0x544b, 0x544b, 0x544b, 0x544b, 0x544b, 0x544b, 
+    0x544b, 0x544c, 0x544c, 0x544c, 0x544c, 0x544c, 0x544c, 0x544c, 
+    0x544c, 0x544c, 0x544c, 0x544d, 0x544d, 0x544d, 0x544d, 0x544d, 
+    0x544d, 0x544d, 0x544d, 0x544d, 0x544d, 0x544d, 0x544e, 0x544e, 
+    0x544e, 0x544e, 0x544e, 0x544e, 0x544e, 0x544e, 0x544e, 0x544e, 
+    0x544e, 0x544f, 0x544f, 0x544f, 0x544f, 0x544f, 0x544f, 0x544f, 
+    0x544f, 0x544f, 0x544f, 0x5450, 0x5450, 0x5450, 0x5450, 0x5450, 
+    0x5450, 0x5450, 0x5450, 0x5450, 0x5450, 0x5450, 0x5451, 0x5451, 
+    0x5451, 0x5451, 0x5451, 0x5451, 0x5451, 0x5451, 0x5451, 0x5451, 
+    0x5451, 0x5452, 0x5452, 0x5452, 0x5452, 0x5452, 0x5452, 0x5452, 
+    0x5452, 0x5452, 0x5452, 0x5452, 0x5453, 0x5453, 0x5453, 0x5453, 
+    0x5453, 0x5453, 0x5453, 0x5453, 0x5453, 0x5453, 0x5453, 0x5454, 
+    0x5454, 0x5454, 0x5454, 0x5454, 0x5454, 0x5454, 0x5454, 0x5454, 
+    0x5454, 0x5454, 0x5454, 0x5455, 0x5455, 0x5455, 0x5455, 0x5455, 
+    0x5455, 0x5455, 0x5455, 0x5455, 0x5455, 0x5455, 0x5456, 0x5456, 
+    0x5456, 0x5456, 0x5456, 0x5456, 0x5456, 0x5456, 0x5456, 0x5456, 
+    0x5456, 0x5457, 0x5457, 0x5457, 0x5457, 0x5457, 0x5457, 0x5457, 
+    0x5457, 0x5457, 0x5457, 0x5457, 0x5457, 0x5458, 0x5458, 0x5458, 
+    0x5458, 0x5458, 0x5458, 0x5458, 0x5458, 0x5458, 0x5458, 0x5458, 
+    0x5459, 0x5459, 0x5459, 0x5459, 0x5459, 0x5459, 0x5459, 0x5459, 
+    0x5459, 0x5459, 0x5459, 0x5459, 0x545a, 0x545a, 0x545a, 0x545a, 
+    0x545a, 0x545a, 0x545a, 0x545a, 0x545a, 0x545a, 0x545a, 0x545a, 
+    0x545b, 0x545b, 0x545b, 0x545b, 0x545b, 0x545b, 0x545b, 0x545b, 
+    0x545b, 0x545b, 0x545b, 0x545b, 0x545c, 0x545c, 0x545c, 0x545c, 
+    0x545c, 0x545c, 0x545c, 0x545c, 0x545c, 0x545c, 0x545c, 0x545c, 
+    0x545d, 0x545d, 0x545d, 0x545d, 0x545d, 0x545d, 0x545d, 0x545d, 
+    0x545d, 0x545d, 0x545d, 0x545d, 0x545e, 0x545e, 0x545e, 0x545e, 
+    0x545e, 0x545e, 0x545e, 0x545e, 0x545e, 0x545e, 0x545e, 0x545e, 
+    0x545f, 0x545f, 0x545f, 0x545f, 0x545f, 0x545f, 0x545f, 0x545f, 
+    0x545f, 0x545f, 0x545f, 0x545f, 0x5460, 0x5460, 0x5460, 0x5460, 
+    0x5460, 0x5460, 0x5460, 0x5460, 0x5460, 0x5460, 0x5460, 0x5460, 
+    0x5461, 0x5461, 0x5461, 0x5461, 0x5461, 0x5461, 0x5461, 0x5461, 
+    0x5461, 0x5461, 0x5461, 0x5461, 0x5461, 0x5462, 0x5462, 0x5462, 
+    0x5462, 0x5462, 0x5462, 0x5462, 0x5462, 0x5462, 0x5462, 0x5462, 
+    0x5462, 0x5463, 0x5463, 0x5463, 0x5463, 0x5463, 0x5463, 0x5463, 
+    0x5463, 0x5463, 0x5463, 0x5463, 0x5463, 0x5463, 0x5464, 0x5464, 
+    0x5464, 0x5464, 0x5464, 0x5464, 0x5464, 0x5464, 0x5464, 0x5464, 
+    0x5464, 0x5464, 0x5464, 0x5465, 0x5465, 0x5465, 0x5465, 0x5465, 
+    0x5465, 0x5465, 0x5465, 0x5465, 0x5465, 0x5465, 0x5465, 0x5466, 
+    0x5466, 0x5466, 0x5466, 0x5466, 0x5466, 0x5466, 0x5466, 0x5466, 
+    0x5466, 0x5466, 0x5466, 0x5466, 0x5467, 0x5467, 0x5467, 0x5467, 
+    0x5467, 0x5467, 0x5467, 0x5467, 0x5467, 0x5467, 0x5467, 0x5467, 
+    0x5467, 0x5468, 0x5468, 0x5468, 0x5468, 0x5468, 0x5468, 0x5468, 
+    0x5468, 0x5468, 0x5468, 0x5468, 0x5468, 0x5468, 0x5469, 0x5469, 
+    0x5469, 0x5469, 0x5469, 0x5469, 0x5469, 0x5469, 0x5469, 0x5469, 
+    0x5469, 0x5469, 0x5469, 0x5469, 0x546a, 0x546a, 0x546a, 0x546a, 
+    0x546a, 0x546a, 0x546a, 0x546a, 0x546a, 0x546a, 0x546a, 0x546a, 
+    0x546a, 0x546b, 0x546b, 0x546b, 0x546b, 0x546b, 0x546b, 0x546b, 
+    0x546b, 0x546b, 0x546b, 0x546b, 0x546b, 0x546b, 0x546c, 0x546c, 
+    0x546c, 0x546c, 0x546c, 0x546c, 0x546c, 0x546c, 0x546c, 0x546c, 
+    0x546c, 0x546c, 0x546c, 0x546c, 0x546d, 0x546d, 0x546d, 0x546d, 
+    0x546d, 0x546d, 0x546d, 0x546d, 0x546d, 0x546d, 0x546d, 0x546d, 
+    0x546d, 0x546d, 0x546e, 0x546e, 0x546e, 0x546e, 0x546e, 0x546e, 
+    0x546e, 0x546e, 0x546e, 0x546e, 0x546e, 0x546e, 0x546e, 0x546f, 
+    0x546f, 0x546f, 0x546f, 0x546f, 0x546f, 0x546f, 0x546f, 0x546f, 
+    0x546f, 0x546f, 0x546f, 0x546f, 0x546f, 0x5470, 0x5470, 0x5470, 
+    0x5470, 0x5470, 0x5470, 0x5470, 0x5470, 0x5470, 0x5470, 0x5470, 
+    0x5470, 0x5470, 0x5470, 0x5471, 0x5471, 0x5471, 0x5471, 0x5471, 
+    0x5471, 0x5471, 0x5471, 0x5471, 0x5471, 0x5471, 0x5471, 0x5471, 
+    0x5471, 0x5472, 0x5472, 0x5472, 0x5472, 0x5472, 0x5472, 0x5472, 
+    0x5472, 0x5472, 0x5472, 0x5472, 0x5472, 0x5472, 0x5472, 0x5473, 
+    0x5473, 0x5473, 0x5473, 0x5473, 0x5473, 0x5473, 0x5473, 0x5473, 
+    0x5473, 0x5473, 0x5473, 0x5473, 0x5473, 0x5473, 0x5474, 0x5474, 
+    0x5474, 0x5474, 0x5474, 0x5474, 0x5474, 0x5474, 0x5474, 0x5474, 
+    0x5474, 0x5474, 0x5474, 0x5474, 0x5475, 0x5475, 0x5475, 0x5475, 
+    0x5475, 0x5475, 0x5475, 0x5475, 0x5475, 0x5475, 0x5475, 0x5475, 
+    0x5475, 0x5475, 0x5475, 0x5476, 0x5476, 0x5476, 0x5476, 0x5476, 
+    0x5476, 0x5476, 0x5476, 0x5476, 0x5476, 0x5476, 0x5476, 0x5476, 
+    0x5476, 0x5477, 0x5477, 0x5477, 0x5477, 0x5477, 0x5477, 0x5477, 
+    0x5477, 0x5477, 0x5477, 0x5477, 0x5477, 0x5477, 0x5477, 0x5477, 
+    0x5478, 0x5478, 0x5478, 0x5478, 0x5478, 0x5478, 0x5478, 0x5478, 
+    0x5478, 0x5478, 0x5478, 0x5478, 0x5478, 0x5478, 0x5478, 0x5479, 
+    0x5479, 0x5479, 0x5479, 0x5479, 0x5479, 0x5479, 0x5479, 0x5479, 
+    0x5479, 0x5479, 0x5479, 0x5479, 0x5479, 0x5479, 0x547a, 0x547a, 
+    0x547a, 0x547a, 0x547a, 0x547a, 0x547a, 0x547a, 0x547a, 0x547a, 
+    0x547a, 0x547a, 0x547a, 0x547a, 0x547a, 0x547b, 0x547b, 0x547b, 
+    0x547b, 0x547b, 0x547b, 0x547b, 0x547b, 0x547b, 0x547b, 0x547b, 
+    0x547b, 0x547b, 0x547b, 0x547b, 0x547c, 0x547c, 0x547c, 0x547c, 
+    0x547c, 0x547c, 0x547c, 0x547c, 0x547c, 0x547c, 0x547c, 0x547c, 
+    0x547c, 0x547c, 0x547c, 0x547c, 0x547d, 0x547d, 0x547d, 0x547d, 
+    0x547d, 0x547d, 0x547d, 0x547d, 0x547d, 0x547d, 0x547d, 0x547d, 
+    0x547d, 0x547d, 0x547d, 0x547e, 0x547e, 0x547e, 0x547e, 0x547e, 
+    0x547e, 0x547e, 0x547e, 0x547e, 0x547e, 0x547e, 0x547e, 0x547e, 
+    0x547e, 0x547e, 0x547e, 0x547f, 0x547f, 0x547f, 0x547f, 0x547f, 
+    0x547f, 0x547f, 0x547f, 0x547f, 0x547f, 0x547f, 0x547f, 0x547f, 
+    0x547f, 0x547f, 0x5480, 0x5480, 0x5480, 0x5480, 0x5480, 0x5480, 
+    0x5480, 0x5480, 0x5480, 0x5480, 0x5480, 0x5480, 0x5480, 0x5480, 
+    0x5480, 0x5480, 0x5481, 0x5481, 0x5481, 0x5481, 0x5481, 0x5481, 
+    0x5481, 0x5481, 0x5481, 0x5481, 0x5481, 0x5481, 0x5481, 0x5481, 
+    0x5481, 0x5482, 0x5482, 0x5482, 0x5482, 0x5482, 0x5482, 0x5482, 
+    0x5482, 0x5483, 0x5483, 0x5483, 0x5483, 0x5483, 0x5483, 0x5483, 
+    0x5483, 0x5484, 0x5484, 0x5484, 0x5484, 0x5484, 0x5484, 0x5484, 
+    0x5484, 0x5484, 0x5485, 0x5485, 0x5485, 0x5485, 0x5485, 0x5485, 
+    0x5485, 0x5485, 0x5486, 0x5486, 0x5486, 0x5486, 0x5486, 0x5486, 
+    0x5486, 0x5486, 0x5487, 0x5487, 0x5487, 0x5487, 0x5487, 0x5487, 
+    0x5487, 0x5487, 0x5487, 0x5488, 0x5488, 0x5488, 0x5488, 0x5488, 
+    0x5488, 0x5488, 0x5488, 0x5489, 0x5489, 0x5489, 0x5489, 0x5489, 
+    0x5489, 0x5489, 0x5489, 0x548a, 0x548a, 0x548a, 0x548a, 0x548a, 
+    0x548a, 0x548a, 0x548a, 0x548a, 0x548b, 0x548b, 0x548b, 0x548b, 
+    0x548b, 0x548b, 0x548b, 0x548b, 0x548b, 0x548c, 0x548c, 0x548c, 
+    0x548c, 0x548c, 0x548c, 0x548c, 0x548c, 0x548d, 0x548d, 0x548d, 
+    0x548d, 0x548d, 0x548d, 0x548d, 0x548d, 0x548d, 0x548e, 0x548e, 
+    0x548e, 0x548e, 0x548e, 0x548e, 0x548e, 0x548e, 0x548e, 0x548f, 
+    0x548f, 0x548f, 0x548f, 0x548f, 0x548f, 0x548f, 0x548f, 0x548f, 
+    0x5490, 0x5490, 0x5490, 0x5490, 0x5490, 0x5490, 0x5490, 0x5490, 
+    0x5490, 0x5491, 0x5491, 0x5491, 0x5491, 0x5491, 0x5491, 0x5491, 
+    0x5491, 0x5491, 0x5492, 0x5492, 0x5492, 0x5492, 0x5492, 0x5492, 
+    0x5492, 0x5492, 0x5492, 0x5493, 0x5493, 0x5493, 0x5493, 0x5493, 
+    0x5493, 0x5493, 0x5493, 0x5493, 0x5494, 0x5494, 0x5494, 0x5494, 
+    0x5494, 0x5494, 0x5494, 0x5494, 0x5494, 0x5495, 0x5495, 0x5495, 
+    0x5495, 0x5495, 0x5495, 0x5495, 0x5495, 0x5495, 0x5495, 0x5496, 
+    0x5496, 0x5496, 0x5496, 0x5496, 0x5496, 0x5496, 0x5496, 0x5496, 
+    0x5497, 0x5497, 0x5497, 0x5497, 0x5497, 0x5497, 0x5497, 0x5497, 
+    0x5497, 0x5497, 0x5498, 0x5498, 0x5498, 0x5498, 0x5498, 0x5498, 
+    0x5498, 0x5498, 0x5498, 0x5499, 0x5499, 0x5499, 0x5499, 0x5499, 
+    0x5499, 0x5499, 0x5499, 0x5499, 0x5499, 0x549a, 0x549a, 0x549a, 
+    0x549a, 0x549a, 0x549a, 0x549a, 0x549a, 0x549a, 0x549b, 0x549b, 
+    0x549b, 0x549b, 0x549b, 0x549b, 0x549b, 0x549b, 0x549b, 0x549b, 
+    0x549c, 0x549c, 0x549c, 0x549c, 0x549c, 0x549c, 0x549c, 0x549c, 
+    0x549c, 0x549c, 0x549d, 0x549d, 0x549d, 0x549d, 0x549d, 0x549d, 
+    0x549d, 0x549d, 0x549d, 0x549d, 0x549e, 0x549e, 0x549e, 0x549e, 
+    0x549e, 0x549e, 0x549e, 0x549e, 0x549e, 0x549e, 0x549f, 0x549f, 
+    0x549f, 0x549f, 0x549f, 0x549f, 0x549f, 0x549f, 0x549f, 0x549f, 
+    0x54a0, 0x54a0, 0x54a0, 0x54a0, 0x54a0, 0x54a0, 0x54a0, 0x54a0, 
+    0x54a0, 0x54a0, 0x54a1, 0x54a1, 0x54a1, 0x54a1, 0x54a1, 0x54a1, 
+    0x54a1, 0x54a1, 0x54a1, 0x54a1, 0x54a2, 0x54a2, 0x54a2, 0x54a2, 
+    0x54a2, 0x54a2, 0x54a2, 0x54a2, 0x54a2, 0x54a2, 0x54a2, 0x54a3, 
+    0x54a3, 0x54a3, 0x54a3, 0x54a3, 0x54a3, 0x54a3, 0x54a3, 0x54a3, 
+    0x54a3, 0x54a4, 0x54a4, 0x54a4, 0x54a4, 0x54a4, 0x54a4, 0x54a4, 
+    0x54a4, 0x54a4, 0x54a4, 0x54a4, 0x54a5, 0x54a5, 0x54a5, 0x54a5, 
+    0x54a5, 0x54a5, 0x54a5, 0x54a5, 0x54a5, 0x54a5, 0x54a6, 0x54a6, 
+    0x54a6, 0x54a6, 0x54a6, 0x54a6, 0x54a6, 0x54a6, 0x54a6, 0x54a6, 
+    0x54a6, 0x54a7, 0x54a7, 0x54a7, 0x54a7, 0x54a7, 0x54a7, 0x54a7, 
+    0x54a7, 0x54a7, 0x54a7, 0x54a7, 0x54a8, 0x54a8, 0x54a8, 0x54a8, 
+    0x54a8, 0x54a8, 0x54a8, 0x54a8, 0x54a8, 0x54a8, 0x54a9, 0x54a9, 
+    0x54a9, 0x54a9, 0x54a9, 0x54a9, 0x54a9, 0x54a9, 0x54a9, 0x54a9, 
+    0x54a9, 0x54aa, 0x54aa, 0x54aa, 0x54aa, 0x54aa, 0x54aa, 0x54aa, 
+    0x54aa, 0x54aa, 0x54aa, 0x54aa, 0x54ab, 0x54ab, 0x54ab, 0x54ab, 
+    0x54ab, 0x54ab, 0x54ab, 0x54ab, 0x54ab, 0x54ab, 0x54ab, 0x54ac, 
+    0x54ac, 0x54ac, 0x54ac, 0x54ac, 0x54ac, 0x54ac, 0x54ac, 0x54ac, 
+    0x54ac, 0x54ac, 0x54ad, 0x54ad, 0x54ad, 0x54ad, 0x54ad, 0x54ad, 
+    0x54ad, 0x54ad, 0x54ad, 0x54ad, 0x54ad, 0x54ad, 0x54ae, 0x54ae, 
+    0x54ae, 0x54ae, 0x54ae, 0x54ae, 0x54ae, 0x54ae, 0x54ae, 0x54ae, 
+    0x54ae, 0x54af, 0x54af, 0x54af, 0x54af, 0x54af, 0x54af, 0x54af, 
+    0x54af, 0x54af, 0x54af, 0x54af, 0x54b0, 0x54b0, 0x54b0, 0x54b0, 
+    0x54b0, 0x54b0, 0x54b0, 0x54b0, 0x54b0, 0x54b0, 0x54b0, 0x54b0, 
+    0x54b1, 0x54b1, 0x54b1, 0x54b1, 0x54b1, 0x54b1, 0x54b1, 0x54b1, 
+    0x54b1, 0x54b1, 0x54b1, 0x54b1, 0x54b2, 0x54b2, 0x54b2, 0x54b2, 
+    0x54b2, 0x54b2, 0x54b2, 0x54b2, 0x54b2, 0x54b2, 0x54b2, 0x54b3, 
+    0x54b3, 0x54b3, 0x54b3, 0x54b3, 0x54b3, 0x54b3, 0x54b3, 0x54b3, 
+    0x54b3, 0x54b3, 0x54b3, 0x54b4, 0x54b4, 0x54b4, 0x54b4, 0x54b4, 
+    0x54b4, 0x54b4, 0x54b4, 0x54b4, 0x54b4, 0x54b4, 0x54b4, 0x54b5, 
+    0x54b5, 0x54b5, 0x54b5, 0x54b5, 0x54b5, 0x54b5, 0x54b5, 0x54b5, 
+    0x54b5, 0x54b5, 0x54b5, 0x54b6, 0x54b6, 0x54b6, 0x54b6, 0x54b6, 
+    0x54b6, 0x54b6, 0x54b6, 0x54b6, 0x54b6, 0x54b6, 0x54b6, 0x54b7, 
+    0x54b7, 0x54b7, 0x54b7, 0x54b7, 0x54b7, 0x54b7, 0x54b7, 0x54b7, 
+    0x54b7, 0x54b7, 0x54b7, 0x54b8, 0x54b8, 0x54b8, 0x54b8, 0x54b8, 
+    0x54b8, 0x54b8, 0x54b8, 0x54b8, 0x54b8, 0x54b8, 0x54b8, 0x54b9, 
+    0x54b9, 0x54b9, 0x54b9, 0x54b9, 0x54b9, 0x54b9, 0x54b9, 0x54b9, 
+    0x54b9, 0x54b9, 0x54b9, 0x54b9, 0x54ba, 0x54ba, 0x54ba, 0x54ba, 
+    0x54ba, 0x54ba, 0x54ba, 0x54ba, 0x54ba, 0x54ba, 0x54ba, 0x54ba, 
+    0x54bb, 0x54bb, 0x54bb, 0x54bb, 0x54bb, 0x54bb, 0x54bb, 0x54bb, 
+    0x54bb, 0x54bb, 0x54bb, 0x54bb, 0x54bb, 0x54bc, 0x54bc, 0x54bc, 
+    0x54bc, 0x54bc, 0x54bc, 0x54bc, 0x54bc, 0x54bc, 0x54bc, 0x54bc, 
+    0x54bc, 0x54bd, 0x54bd, 0x54bd, 0x54bd, 0x54bd, 0x54bd, 0x54bd, 
+    0x54bd, 0x54bd, 0x54bd, 0x54bd, 0x54bd, 0x54bd, 0x54be, 0x54be, 
+    0x54be, 0x54be, 0x54be, 0x54be, 0x54be, 0x54be, 0x54be, 0x54be, 
+    0x54be, 0x54be, 0x54be, 0x54bf, 0x54bf, 0x54bf, 0x54bf, 0x54bf, 
+    0x54bf, 0x54bf, 0x54bf, 0x54bf, 0x54bf, 0x54bf, 0x54bf, 0x54bf, 
+    0x54c0, 0x54c0, 0x54c0, 0x54c0, 0x54c0, 0x54c0, 0x54c0, 0x54c0, 
+    0x54c0, 0x54c0, 0x54c0, 0x54c0, 0x54c0, 0x54c1, 0x54c1, 0x54c1, 
+    0x54c1, 0x54c1, 0x54c1, 0x54c1, 0x54c1, 0x54c1, 0x54c1, 0x54c1, 
+    0x54c1, 0x54c1, 0x54c2, 0x54c2, 0x54c2, 0x54c2, 0x54c2, 0x54c2, 
+    0x54c2, 0x54c2, 0x54c2, 0x54c2, 0x54c2, 0x54c2, 0x54c2, 0x54c3, 
+    0x54c3, 0x54c3, 0x54c3, 0x54c3, 0x54c3, 0x54c3, 0x54c3, 0x54c3, 
+    0x54c3, 0x54c3, 0x54c3, 0x54c3, 0x54c3, 0x54c4, 0x54c4, 0x54c4, 
+    0x54c4, 0x54c4, 0x54c4, 0x54c4, 0x54c4, 0x54c4, 0x54c4, 0x54c4, 
+    0x54c4, 0x54c4, 0x54c5, 0x54c5, 0x54c5, 0x54c5, 0x54c5, 0x54c5, 
+    0x54c5, 0x54c5, 0x54c5, 0x54c5, 0x54c5, 0x54c5, 0x54c5, 0x54c5, 
+    0x54c6, 0x54c6, 0x54c6, 0x54c6, 0x54c6, 0x54c6, 0x54c6, 0x54c6, 
+    0x54c6, 0x54c6, 0x54c6, 0x54c6, 0x54c6, 0x54c7, 0x54c7, 0x54c7, 
+    0x54c7, 0x54c7, 0x54c7, 0x54c7, 0x54c7, 0x54c7, 0x54c7, 0x54c7, 
+    0x54c7, 0x54c7, 0x54c7, 0x54c8, 0x54c8, 0x54c8, 0x54c8, 0x54c8, 
+    0x54c8, 0x54c8, 0x54c8, 0x54c8, 0x54c8, 0x54c8, 0x54c8, 0x54c8, 
+    0x54c8, 0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54c9, 
+    0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54ca, 
+    0x54ca, 0x54ca, 0x54ca, 0x54ca, 0x54ca, 0x54ca, 0x54ca, 0x54ca, 
+    0x54ca, 0x54ca, 0x54ca, 0x54ca, 0x54ca, 0x54cb, 0x54cb, 0x54cb, 
+    0x54cb, 0x54cb, 0x54cb, 0x54cb, 0x54cb, 0x54cb, 0x54cb, 0x54cb, 
+    0x54cb, 0x54cb, 0x54cb, 0x54cc, 0x54cc, 0x54cc, 0x54cc, 0x54cc, 
+    0x54cc, 0x54cc, 0x54cc, 0x54cc, 0x54cc, 0x54cc, 0x54cc, 0x54cc, 
+    0x54cc, 0x54cc, 0x54cd, 0x54cd, 0x54cd, 0x54cd, 0x54cd, 0x54cd, 
+    0x54cd, 0x54cd, 0x54cd, 0x54cd, 0x54cd, 0x54cd, 0x54cd, 0x54cd, 
+    0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, 
+    0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54cf, 
+    0x54cf, 0x54cf, 0x54cf, 0x54cf, 0x54cf, 0x54cf, 0x54cf, 0x54cf, 
+    0x54cf, 0x54cf, 0x54cf, 0x54cf, 0x54cf, 0x54d0, 0x54d0, 0x54d0, 
+    0x54d0, 0x54d0, 0x54d0, 0x54d0, 0x54d0, 0x54d0, 0x54d0, 0x54d0, 
+    0x54d0, 0x54d0, 0x54d0, 0x54d0, 0x54d1, 0x54d1, 0x54d1, 0x54d1, 
+    0x54d1, 0x54d1, 0x54d1, 0x54d1, 0x54d1, 0x54d1, 0x54d1, 0x54d1, 
+    0x54d1, 0x54d1, 0x54d1, 0x54d2, 0x54d2, 0x54d2, 0x54d2, 0x54d2, 
+    0x54d2, 0x54d2, 0x54d2, 0x54d2, 0x54d2, 0x54d2, 0x54d2, 0x54d2, 
+    0x54d2, 0x54d2, 0x54d3, 0x54d3, 0x54d3, 0x54d3, 0x54d3, 0x54d3, 
+    0x54d3, 0x54d3, 0x54d3, 0x54d3, 0x54d3, 0x54d3, 0x54d3, 0x54d3, 
+    0x54d3, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 
+    0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 
+    0x54d4, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 
+    0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 
+    0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, 
+    0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d7, 
+    0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, 
+    0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d8, 
+    0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, 
+    0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d9, 
+    0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, 
+    0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54da, 
+    0x54da, 0x54da, 0x54da, 0x54da, 0x54da, 0x54da, 0x54da, 0x54da, 
+    0x54da, 0x54da, 0x54da, 0x54da, 0x54db, 0x54db, 0x54db, 0x54db, 
+    0x54db, 0x54db, 0x54db, 0x54db, 0x54dc, 0x54dc, 0x54dc, 0x54dc, 
+    0x54dc, 0x54dc, 0x54dc, 0x54dc, 0x54dd, 0x54dd, 0x54dd, 0x54dd, 
+    0x54dd, 0x54dd, 0x54dd, 0x54dd, 0x54de, 0x54de, 0x54de, 0x54de, 
+    0x54de, 0x54de, 0x54de, 0x54de, 0x54df, 0x54df, 0x54df, 0x54df, 
+    0x54df, 0x54df, 0x54df, 0x54df, 0x54e0, 0x54e0, 0x54e0, 0x54e0, 
+    0x54e0, 0x54e0, 0x54e0, 0x54e0, 0x54e0, 0x54e1, 0x54e1, 0x54e1, 
+    0x54e1, 0x54e1, 0x54e1, 0x54e1, 0x54e1, 0x54e2, 0x54e2, 0x54e2, 
+    0x54e2, 0x54e2, 0x54e2, 0x54e2, 0x54e2, 0x54e2, 0x54e3, 0x54e3, 
+    0x54e3, 0x54e3, 0x54e3, 0x54e3, 0x54e3, 0x54e3, 0x54e4, 0x54e4, 
+    0x54e4, 0x54e4, 0x54e4, 0x54e4, 0x54e4, 0x54e4, 0x54e4, 0x54e5, 
+    0x54e5, 0x54e5, 0x54e5, 0x54e5, 0x54e5, 0x54e5, 0x54e5, 0x54e5, 
+    0x54e6, 0x54e6, 0x54e6, 0x54e6, 0x54e6, 0x54e6, 0x54e6, 0x54e6, 
+    0x54e7, 0x54e7, 0x54e7, 0x54e7, 0x54e7, 0x54e7, 0x54e7, 0x54e7, 
+    0x54e7, 0x54e8, 0x54e8, 0x54e8, 0x54e8, 0x54e8, 0x54e8, 0x54e8, 
+    0x54e8, 0x54e8, 0x54e9, 0x54e9, 0x54e9, 0x54e9, 0x54e9, 0x54e9, 
+    0x54e9, 0x54e9, 0x54e9, 0x54ea, 0x54ea, 0x54ea, 0x54ea, 0x54ea, 
+    0x54ea, 0x54ea, 0x54ea, 0x54ea, 0x54eb, 0x54eb, 0x54eb, 0x54eb, 
+    0x54eb, 0x54eb, 0x54eb, 0x54eb, 0x54eb, 0x54ec, 0x54ec, 0x54ec, 
+    0x54ec, 0x54ec, 0x54ec, 0x54ec, 0x54ec, 0x54ec, 0x54ec, 0x54ed, 
+    0x54ed, 0x54ed, 0x54ed, 0x54ed, 0x54ed, 0x54ed, 0x54ed, 0x54ed, 
+    0x54ee, 0x54ee, 0x54ee, 0x54ee, 0x54ee, 0x54ee, 0x54ee, 0x54ee, 
+    0x54ee, 0x54ef, 0x54ef, 0x54ef, 0x54ef, 0x54ef, 0x54ef, 0x54ef, 
+    0x54ef, 0x54ef, 0x54ef, 0x54f0, 0x54f0, 0x54f0, 0x54f0, 0x54f0, 
+    0x54f0, 0x54f0, 0x54f0, 0x54f0, 0x54f1, 0x54f1, 0x54f1, 0x54f1, 
+    0x54f1, 0x54f1, 0x54f1, 0x54f1, 0x54f1, 0x54f1, 0x54f2, 0x54f2, 
+    0x54f2, 0x54f2, 0x54f2, 0x54f2, 0x54f2, 0x54f2, 0x54f2, 0x54f3, 
+    0x54f3, 0x54f3, 0x54f3, 0x54f3, 0x54f3, 0x54f3, 0x54f3, 0x54f3, 
+    0x54f3, 0x54f4, 0x54f4, 0x54f4, 0x54f4, 0x54f4, 0x54f4, 0x54f4, 
+    0x54f4, 0x54f4, 0x54f4, 0x54f5, 0x54f5, 0x54f5, 0x54f5, 0x54f5, 
+    0x54f5, 0x54f5, 0x54f5, 0x54f5, 0x54f5, 0x54f6, 0x54f6, 0x54f6, 
+    0x54f6, 0x54f6, 0x54f6, 0x54f6, 0x54f6, 0x54f6, 0x54f6, 0x54f7, 
+    0x54f7, 0x54f7, 0x54f7, 0x54f7, 0x54f7, 0x54f7, 0x54f7, 0x54f7, 
+    0x54f7, 0x54f8, 0x54f8, 0x54f8, 0x54f8, 0x54f8, 0x54f8, 0x54f8, 
+    0x54f8, 0x54f8, 0x54f8, 0x54f9, 0x54f9, 0x54f9, 0x54f9, 0x54f9, 
+    0x54f9, 0x54f9, 0x54f9, 0x54f9, 0x54f9, 0x54fa, 0x54fa, 0x54fa, 
+    0x54fa, 0x54fa, 0x54fa, 0x54fa, 0x54fa, 0x54fa, 0x54fa, 0x54fb, 
+    0x54fb, 0x54fb, 0x54fb, 0x54fb, 0x54fb, 0x54fb, 0x54fb, 0x54fb, 
+    0x54fb, 0x54fb, 0x54fc, 0x54fc, 0x54fc, 0x54fc, 0x54fc, 0x54fc, 
+    0x54fc, 0x54fc, 0x54fc, 0x54fc, 0x54fd, 0x54fd, 0x54fd, 0x54fd, 
+    0x54fd, 0x54fd, 0x54fd, 0x54fd, 0x54fd, 0x54fd, 0x54fd, 0x54fe, 
+    0x54fe, 0x54fe, 0x54fe, 0x54fe, 0x54fe, 0x54fe, 0x54fe, 0x54fe, 
+    0x54fe, 0x54ff, 0x54ff, 0x54ff, 0x54ff, 0x54ff, 0x54ff, 0x54ff, 
+    0x54ff, 0x54ff, 0x54ff, 0x54ff, 0x5500, 0x5500, 0x5500, 0x5500, 
+    0x5500, 0x5500, 0x5500, 0x5500, 0x5500, 0x5500, 0x5500, 0x5501, 
+    0x5501, 0x5501, 0x5501, 0x5501, 0x5501, 0x5501, 0x5501, 0x5501, 
+    0x5501, 0x5502, 0x5502, 0x5502, 0x5502, 0x5502, 0x5502, 0x5502, 
+    0x5502, 0x5502, 0x5502, 0x5502, 0x5503, 0x5503, 0x5503, 0x5503, 
+    0x5503, 0x5503, 0x5503, 0x5503, 0x5503, 0x5503, 0x5503, 0x5504, 
+    0x5504, 0x5504, 0x5504, 0x5504, 0x5504, 0x5504, 0x5504, 0x5504, 
+    0x5504, 0x5504, 0x5505, 0x5505, 0x5505, 0x5505, 0x5505, 0x5505, 
+    0x5505, 0x5505, 0x5505, 0x5505, 0x5505, 0x5505, 0x5506, 0x5506, 
+    0x5506, 0x5506, 0x5506, 0x5506, 0x5506, 0x5506, 0x5506, 0x5506, 
+    0x5506, 0x5507, 0x5507, 0x5507, 0x5507, 0x5507, 0x5507, 0x5507, 
+    0x5507, 0x5507, 0x5507, 0x5507, 0x5508, 0x5508, 0x5508, 0x5508, 
+    0x5508, 0x5508, 0x5508, 0x5508, 0x5508, 0x5508, 0x5508, 0x5508, 
+    0x5509, 0x5509, 0x5509, 0x5509, 0x5509, 0x5509, 0x5509, 0x5509, 
+    0x5509, 0x5509, 0x5509, 0x550a, 0x550a, 0x550a, 0x550a, 0x550a, 
+    0x550a, 0x550a, 0x550a, 0x550a, 0x550a, 0x550a, 0x550a, 0x550b, 
+    0x550b, 0x550b, 0x550b, 0x550b, 0x550b, 0x550b, 0x550b, 0x550b, 
+    0x550b, 0x550b, 0x550b, 0x550c, 0x550c, 0x550c, 0x550c, 0x550c, 
+    0x550c, 0x550c, 0x550c, 0x550c, 0x550c, 0x550c, 0x550d, 0x550d, 
+    0x550d, 0x550d, 0x550d, 0x550d, 0x550d, 0x550d, 0x550d, 0x550d, 
+    0x550d, 0x550d, 0x550e, 0x550e, 0x550e, 0x550e, 0x550e, 0x550e, 
+    0x550e, 0x550e, 0x550e, 0x550e, 0x550e, 0x550e, 0x550f, 0x550f, 
+    0x550f, 0x550f, 0x550f, 0x550f, 0x550f, 0x550f, 0x550f, 0x550f, 
+    0x550f, 0x550f, 0x5510, 0x5510, 0x5510, 0x5510, 0x5510, 0x5510, 
+    0x5510, 0x5510, 0x5510, 0x5510, 0x5510, 0x5510, 0x5510, 0x5511, 
+    0x5511, 0x5511, 0x5511, 0x5511, 0x5511, 0x5511, 0x5511, 0x5511, 
+    0x5511, 0x5511, 0x5511, 0x5512, 0x5512, 0x5512, 0x5512, 0x5512, 
+    0x5512, 0x5512, 0x5512, 0x5512, 0x5512, 0x5512, 0x5512, 0x5513, 
+    0x5513, 0x5513, 0x5513, 0x5513, 0x5513, 0x5513, 0x5513, 0x5513, 
+    0x5513, 0x5513, 0x5513, 0x5513, 0x5514, 0x5514, 0x5514, 0x5514, 
+    0x5514, 0x5514, 0x5514, 0x5514, 0x5514, 0x5514, 0x5514, 0x5514, 
+    0x5515, 0x5515, 0x5515, 0x5515, 0x5515, 0x5515, 0x5515, 0x5515, 
+    0x5515, 0x5515, 0x5515, 0x5515, 0x5515, 0x5516, 0x5516, 0x5516, 
+    0x5516, 0x5516, 0x5516, 0x5516, 0x5516, 0x5516, 0x5516, 0x5516, 
+    0x5516, 0x5516, 0x5517, 0x5517, 0x5517, 0x5517, 0x5517, 0x5517, 
+    0x5517, 0x5517, 0x5517, 0x5517, 0x5517, 0x5517, 0x5517, 0x5518, 
+    0x5518, 0x5518, 0x5518, 0x5518, 0x5518, 0x5518, 0x5518, 0x5518, 
+    0x5518, 0x5518, 0x5518, 0x5518, 0x5519, 0x5519, 0x5519, 0x5519, 
+    0x5519, 0x5519, 0x5519, 0x5519, 0x5519, 0x5519, 0x5519, 0x5519, 
+    0x5519, 0x551a, 0x551a, 0x551a, 0x551a, 0x551a, 0x551a, 0x551a, 
+    0x551a, 0x551a, 0x551a, 0x551a, 0x551a, 0x551a, 0x551b, 0x551b, 
+    0x551b, 0x551b, 0x551b, 0x551b, 0x551b, 0x551b, 0x551b, 0x551b, 
+    0x551b, 0x551b, 0x551b, 0x551c, 0x551c, 0x551c, 0x551c, 0x551c, 
+    0x551c, 0x551c, 0x551c, 0x551c, 0x551c, 0x551c, 0x551c, 0x551c, 
+    0x551d, 0x551d, 0x551d, 0x551d, 0x551d, 0x551d, 0x551d, 0x551d, 
+    0x551d, 0x551d, 0x551d, 0x551d, 0x551d, 0x551d, 0x551e, 0x551e, 
+    0x551e, 0x551e, 0x551e, 0x551e, 0x551e, 0x551e, 0x551e, 0x551e, 
+    0x551e, 0x551e, 0x551e, 0x551e, 0x551f, 0x551f, 0x551f, 0x551f, 
+    0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 
+    0x551f, 0x5520, 0x5520, 0x5520, 0x5520, 0x5520, 0x5520, 0x5520, 
+    0x5520, 0x5520, 0x5520, 0x5520, 0x5520, 0x5520, 0x5520, 0x5521, 
+    0x5521, 0x5521, 0x5521, 0x5521, 0x5521, 0x5521, 0x5521, 0x5521, 
+    0x5521, 0x5521, 0x5521, 0x5521, 0x5521, 0x5522, 0x5522, 0x5522, 
+    0x5522, 0x5522, 0x5522, 0x5522, 0x5522, 0x5522, 0x5522, 0x5522, 
+    0x5522, 0x5522, 0x5522, 0x5523, 0x5523, 0x5523, 0x5523, 0x5523, 
+    0x5523, 0x5523, 0x5523, 0x5523, 0x5523, 0x5523, 0x5523, 0x5523, 
+    0x5523, 0x5524, 0x5524, 0x5524, 0x5524, 0x5524, 0x5524, 0x5524, 
+    0x5524, 0x5524, 0x5524, 0x5524, 0x5524, 0x5524, 0x5524, 0x5525, 
+    0x5525, 0x5525, 0x5525, 0x5525, 0x5525, 0x5525, 0x5525, 0x5525, 
+    0x5525, 0x5525, 0x5525, 0x5525, 0x5525, 0x5525, 0x5526, 0x5526, 
+    0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 
+    0x5526, 0x5526, 0x5526, 0x5526, 0x5527, 0x5527, 0x5527, 0x5527, 
+    0x5527, 0x5527, 0x5527, 0x5527, 0x5527, 0x5527, 0x5527, 0x5527, 
+    0x5527, 0x5527, 0x5527, 0x5528, 0x5528, 0x5528, 0x5528, 0x5528, 
+    0x5528, 0x5528, 0x5528, 0x5528, 0x5528, 0x5528, 0x5528, 0x5528, 
+    0x5528, 0x5528, 0x5529, 0x5529, 0x5529, 0x5529, 0x5529, 0x5529, 
+    0x5529, 0x5529, 0x5529, 0x5529, 0x5529, 0x5529, 0x5529, 0x5529, 
+    0x552a, 0x552a, 0x552a, 0x552a, 0x552a, 0x552a, 0x552a, 0x552a, 
+    0x552a, 0x552a, 0x552a, 0x552a, 0x552a, 0x552a, 0x552a, 0x552b, 
+    0x552b, 0x552b, 0x552b, 0x552b, 0x552b, 0x552b, 0x552b, 0x552b, 
+    0x552b, 0x552b, 0x552b, 0x552b, 0x552b, 0x552b, 0x552c, 0x552c, 
+    0x552c, 0x552c, 0x552c, 0x552c, 0x552c, 0x552c, 0x552c, 0x552c, 
+    0x552c, 0x552c, 0x552c, 0x552c, 0x552c, 0x552d, 0x552d, 0x552d, 
+    0x552d, 0x552d, 0x552d, 0x552d, 0x552d, 0x552d, 0x552d, 0x552d, 
+    0x552d, 0x552d, 0x552d, 0x552d, 0x552d, 0x552e, 0x552e, 0x552e, 
+    0x552e, 0x552e, 0x552e, 0x552e, 0x552e, 0x552e, 0x552e, 0x552e, 
+    0x552e, 0x552e, 0x552e, 0x552e, 0x552f, 0x552f, 0x552f, 0x552f, 
+    0x552f, 0x552f, 0x552f, 0x552f, 0x552f, 0x552f, 0x552f, 0x552f, 
+    0x552f, 0x552f, 0x552f, 0x552f, 0x5530, 0x5530, 0x5530, 0x5530, 
+    0x5530, 0x5530, 0x5530, 0x5530, 0x5530, 0x5530, 0x5530, 0x5530, 
+    0x5530, 0x5530, 0x5530, 0x5531, 0x5531, 0x5531, 0x5531, 0x5531, 
+    0x5531, 0x5531, 0x5531, 0x5531, 0x5531, 0x5531, 0x5531, 0x5531, 
+    0x5531, 0x5531, 0x5531, 0x5532, 0x5532, 0x5532, 0x5532, 0x5532, 
+    0x5532, 0x5532, 0x5532, 0x5532, 0x5532, 0x5532, 0x5532, 0x5532, 
+    0x5532, 0x5532, 0x5532, 0x5533, 0x5533, 0x5533, 0x5533, 0x5533, 
+    0x5533, 0x5533, 0x5533, 0x5533, 0x5533, 0x5533, 0x5534, 0x5534, 
+    0x5534, 0x5534, 0x5534, 0x5534, 0x5534, 0x5534, 0x5535, 0x5535, 
+    0x5535, 0x5535, 0x5535, 0x5535, 0x5535, 0x5535, 0x5536, 0x5536, 
+    0x5536, 0x5536, 0x5536, 0x5536, 0x5536, 0x5536, 0x5537, 0x5537, 
+    0x5537, 0x5537, 0x5537, 0x5537, 0x5537, 0x5537, 0x5538, 0x5538, 
+    0x5538, 0x5538, 0x5538, 0x5538, 0x5538, 0x5538, 0x5538, 0x5539, 
+    0x5539, 0x5539, 0x5539, 0x5539, 0x5539, 0x5539, 0x5539, 0x553a, 
+    0x553a, 0x553a, 0x553a, 0x553a, 0x553a, 0x553a, 0x553a, 0x553a, 
+    0x553b, 0x553b, 0x553b, 0x553b, 0x553b, 0x553b, 0x553b, 0x553b, 
+    0x553c, 0x553c, 0x553c, 0x553c, 0x553c, 0x553c, 0x553c, 0x553c, 
+    0x553c, 0x553d, 0x553d, 0x553d, 0x553d, 0x553d, 0x553d, 0x553d, 
+    0x553d, 0x553e, 0x553e, 0x553e, 0x553e, 0x553e, 0x553e, 0x553e, 
+    0x553e, 0x553e, 0x553f, 0x553f, 0x553f, 0x553f, 0x553f, 0x553f, 
+    0x553f, 0x553f, 0x553f, 0x5540, 0x5540, 0x5540, 0x5540, 0x5540, 
+    0x5540, 0x5540, 0x5540, 0x5540, 0x5541, 0x5541, 0x5541, 0x5541, 
+    0x5541, 0x5541, 0x5541, 0x5541, 0x5541, 0x5542, 0x5542, 0x5542, 
+    0x5542, 0x5542, 0x5542, 0x5542, 0x5542, 0x5542, 0x5543, 0x5543, 
+    0x5543, 0x5543, 0x5543, 0x5543, 0x5543, 0x5543, 0x5543, 0x5544, 
+    0x5544, 0x5544, 0x5544, 0x5544, 0x5544, 0x5544, 0x5544, 0x5544, 
+    0x5545, 0x5545, 0x5545, 0x5545, 0x5545, 0x5545, 0x5545, 0x5545, 
+    0x5545, 0x5546, 0x5546, 0x5546, 0x5546, 0x5546, 0x5546, 0x5546, 
+    0x5546, 0x5546, 0x5547, 0x5547, 0x5547, 0x5547, 0x5547, 0x5547, 
+    0x5547, 0x5547, 0x5547, 0x5547, 0x5548, 0x5548, 0x5548, 0x5548, 
+    0x5548, 0x5548, 0x5548, 0x5548, 0x5548, 0x5549, 0x5549, 0x5549, 
+    0x5549, 0x5549, 0x5549, 0x5549, 0x5549, 0x5549, 0x5549, 0x554a, 
+    0x554a, 0x554a, 0x554a, 0x554a, 0x554a, 0x554a, 0x554a, 0x554a, 
+    0x554b, 0x554b, 0x554b, 0x554b, 0x554b, 0x554b, 0x554b, 0x554b, 
+    0x554b, 0x554b, 0x554c, 0x554c, 0x554c, 0x554c, 0x554c, 0x554c, 
+    0x554c, 0x554c, 0x554c, 0x554c, 0x554d, 0x554d, 0x554d, 0x554d, 
+    0x554d, 0x554d, 0x554d, 0x554d, 0x554d, 0x554d, 0x554e, 0x554e, 
+    0x554e, 0x554e, 0x554e, 0x554e, 0x554e, 0x554e, 0x554e, 0x554f, 
+    0x554f, 0x554f, 0x554f, 0x554f, 0x554f, 0x554f, 0x554f, 0x554f, 
+    0x554f, 0x5550, 0x5550, 0x5550, 0x5550, 0x5550, 0x5550, 0x5550, 
+    0x5550, 0x5550, 0x5550, 0x5551, 0x5551, 0x5551, 0x5551, 0x5551, 
+    0x5551, 0x5551, 0x5551, 0x5551, 0x5551, 0x5551, 0x5552, 0x5552, 
+    0x5552, 0x5552, 0x5552, 0x5552, 0x5552, 0x5552, 0x5552, 0x5552, 
+    0x5553, 0x5553, 0x5553, 0x5553, 0x5553, 0x5553, 0x5553, 0x5553, 
+    0x5553, 0x5553, 0x5554, 0x5554, 0x5554, 0x5554, 0x5554, 0x5554, 
+    0x5554, 0x5554, 0x5554, 0x5554, 0x5555, 0x5555, 0x5555, 0x5555, 
+    0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5556, 
+    0x5556, 0x5556, 0x5556, 0x5556, 0x5556, 0x5556, 0x5556, 0x5556, 
+    0x5556, 0x5557, 0x5557, 0x5557, 0x5557, 0x5557, 0x5557, 0x5557, 
+    0x5557, 0x5557, 0x5557, 0x5557, 0x5558, 0x5558, 0x5558, 0x5558, 
+    0x5558, 0x5558, 0x5558, 0x5558, 0x5558, 0x5558, 0x5558, 0x5559, 
+    0x5559, 0x5559, 0x5559, 0x5559, 0x5559, 0x5559, 0x5559, 0x5559, 
+    0x5559, 0x5559, 0x555a, 0x555a, 0x555a, 0x555a, 0x555a, 0x555a, 
+    0x555a, 0x555a, 0x555a, 0x555a, 0x555b, 0x555b, 0x555b, 0x555b, 
+    0x555b, 0x555b, 0x555b, 0x555b, 0x555b, 0x555b, 0x555b, 0x555c, 
+    0x555c, 0x555c, 0x555c, 0x555c, 0x555c, 0x555c, 0x555c, 0x555c, 
+    0x555c, 0x555c, 0x555d, 0x555d, 0x555d, 0x555d, 0x555d, 0x555d, 
+    0x555d, 0x555d, 0x555d, 0x555d, 0x555d, 0x555d, 0x555e, 0x555e, 
+    0x555e, 0x555e, 0x555e, 0x555e, 0x555e, 0x555e, 0x555e, 0x555e, 
+    0x555e, 0x555f, 0x555f, 0x555f, 0x555f, 0x555f, 0x555f, 0x555f, 
+    0x555f, 0x555f, 0x555f, 0x555f, 0x5560, 0x5560, 0x5560, 0x5560, 
+    0x5560, 0x5560, 0x5560, 0x5560, 0x5560, 0x5560, 0x5560, 0x5561, 
+    0x5561, 0x5561, 0x5561, 0x5561, 0x5561, 0x5561, 0x5561, 0x5561, 
+    0x5561, 0x5561, 0x5561, 0x5562, 0x5562, 0x5562, 0x5562, 0x5562, 
+    0x5562, 0x5562, 0x5562, 0x5562, 0x5562, 0x5562, 0x5563, 0x5563, 
+    0x5563, 0x5563, 0x5563, 0x5563, 0x5563, 0x5563, 0x5563, 0x5563, 
+    0x5563, 0x5563, 0x5564, 0x5564, 0x5564, 0x5564, 0x5564, 0x5564, 
+    0x5564, 0x5564, 0x5564, 0x5564, 0x5564, 0x5564, 0x5565, 0x5565, 
+    0x5565, 0x5565, 0x5565, 0x5565, 0x5565, 0x5565, 0x5565, 0x5565, 
+    0x5565, 0x5565, 0x5566, 0x5566, 0x5566, 0x5566, 0x5566, 0x5566, 
+    0x5566, 0x5566, 0x5566, 0x5566, 0x5566, 0x5566, 0x5567, 0x5567, 
+    0x5567, 0x5567, 0x5567, 0x5567, 0x5567, 0x5567, 0x5567, 0x5567, 
+    0x5567, 0x5567, 0x5568, 0x5568, 0x5568, 0x5568, 0x5568, 0x5568, 
+    0x5568, 0x5568, 0x5568, 0x5568, 0x5568, 0x5568, 0x5569, 0x5569, 
+    0x5569, 0x5569, 0x5569, 0x5569, 0x5569, 0x5569, 0x5569, 0x5569, 
+    0x5569, 0x5569, 0x556a, 0x556a, 0x556a, 0x556a, 0x556a, 0x556a, 
+    0x556a, 0x556a, 0x556a, 0x556a, 0x556a, 0x556a, 0x556b, 0x556b, 
+    0x556b, 0x556b, 0x556b, 0x556b, 0x556b, 0x556b, 0x556b, 0x556b, 
+    0x556b, 0x556b, 0x556b, 0x556c, 0x556c, 0x556c, 0x556c, 0x556c, 
+    0x556c, 0x556c, 0x556c, 0x556c, 0x556c, 0x556c, 0x556c, 0x556d, 
+    0x556d, 0x556d, 0x556d, 0x556d, 0x556d, 0x556d, 0x556d, 0x556d, 
+    0x556d, 0x556d, 0x556d, 0x556d, 0x556e, 0x556e, 0x556e, 0x556e, 
+    0x556e, 0x556e, 0x556e, 0x556e, 0x556e, 0x556e, 0x556e, 0x556e, 
+    0x556f, 0x556f, 0x556f, 0x556f, 0x556f, 0x556f, 0x556f, 0x556f, 
+    0x556f, 0x556f, 0x556f, 0x556f, 0x556f, 0x5570, 0x5570, 0x5570, 
+    0x5570, 0x5570, 0x5570, 0x5570, 0x5570, 0x5570, 0x5570, 0x5570, 
+    0x5570, 0x5570, 0x5571, 0x5571, 0x5571, 0x5571, 0x5571, 0x5571, 
+    0x5571, 0x5571, 0x5571, 0x5571, 0x5571, 0x5571, 0x5571, 0x5572, 
+    0x5572, 0x5572, 0x5572, 0x5572, 0x5572, 0x5572, 0x5572, 0x5572, 
+    0x5572, 0x5572, 0x5572, 0x5572, 0x5573, 0x5573, 0x5573, 0x5573, 
+    0x5573, 0x5573, 0x5573, 0x5573, 0x5573, 0x5573, 0x5573, 0x5573, 
+    0x5573, 0x5574, 0x5574, 0x5574, 0x5574, 0x5574, 0x5574, 0x5574, 
+    0x5574, 0x5574, 0x5574, 0x5574, 0x5574, 0x5574, 0x5574, 0x5575, 
+    0x5575, 0x5575, 0x5575, 0x5575, 0x5575, 0x5575, 0x5575, 0x5575, 
+    0x5575, 0x5575, 0x5575, 0x5575, 0x5576, 0x5576, 0x5576, 0x5576, 
+    0x5576, 0x5576, 0x5576, 0x5576, 0x5576, 0x5576, 0x5576, 0x5576, 
+    0x5576, 0x5576, 0x5577, 0x5577, 0x5577, 0x5577, 0x5577, 0x5577, 
+    0x5577, 0x5577, 0x5577, 0x5577, 0x5577, 0x5577, 0x5577, 0x5578, 
+    0x5578, 0x5578, 0x5578, 0x5578, 0x5578, 0x5578, 0x5578, 0x5578, 
+    0x5578, 0x5578, 0x5578, 0x5578, 0x5578, 0x5579, 0x5579, 0x5579, 
+    0x5579, 0x5579, 0x5579, 0x5579, 0x5579, 0x5579, 0x5579, 0x5579, 
+    0x5579, 0x5579, 0x5579, 0x557a, 0x557a, 0x557a, 0x557a, 0x557a, 
+    0x557a, 0x557a, 0x557a, 0x557a, 0x557a, 0x557a, 0x557a, 0x557a, 
+    0x557a, 0x557b, 0x557b, 0x557b, 0x557b, 0x557b, 0x557b, 0x557b, 
+    0x557b, 0x557b, 0x557b, 0x557b, 0x557b, 0x557b, 0x557b, 0x557c, 
+    0x557c, 0x557c, 0x557c, 0x557c, 0x557c, 0x557c, 0x557c, 0x557c, 
+    0x557c, 0x557c, 0x557c, 0x557c, 0x557c, 0x557d, 0x557d, 0x557d, 
+    0x557d, 0x557d, 0x557d, 0x557d, 0x557d, 0x557d, 0x557d, 0x557d, 
+    0x557d, 0x557d, 0x557d, 0x557e, 0x557e, 0x557e, 0x557e, 0x557e, 
+    0x557e, 0x557e, 0x557e, 0x557e, 0x557e, 0x557e, 0x557e, 0x557e, 
+    0x557e, 0x557e, 0x557f, 0x557f, 0x557f, 0x557f, 0x557f, 0x557f, 
+    0x557f, 0x557f, 0x557f, 0x557f, 0x557f, 0x557f, 0x557f, 0x557f, 
+    0x5580, 0x5580, 0x5580, 0x5580, 0x5580, 0x5580, 0x5580, 0x5580, 
+    0x5580, 0x5580, 0x5580, 0x5580, 0x5580, 0x5580, 0x5580, 0x5581, 
+    0x5581, 0x5581, 0x5581, 0x5581, 0x5581, 0x5581, 0x5581, 0x5581, 
+    0x5581, 0x5581, 0x5581, 0x5581, 0x5581, 0x5581, 0x5582, 0x5582, 
+    0x5582, 0x5582, 0x5582, 0x5582, 0x5582, 0x5582, 0x5582, 0x5582, 
+    0x5582, 0x5582, 0x5582, 0x5582, 0x5583, 0x5583, 0x5583, 0x5583, 
+    0x5583, 0x5583, 0x5583, 0x5583, 0x5583, 0x5583, 0x5583, 0x5583, 
+    0x5583, 0x5583, 0x5583, 0x5584, 0x5584, 0x5584, 0x5584, 0x5584, 
+    0x5584, 0x5584, 0x5584, 0x5584, 0x5584, 0x5584, 0x5584, 0x5584, 
+    0x5584, 0x5584, 0x5584, 0x5585, 0x5585, 0x5585, 0x5585, 0x5585, 
+    0x5585, 0x5585, 0x5585, 0x5585, 0x5585, 0x5585, 0x5585, 0x5585, 
+    0x5585, 0x5585, 0x5586, 0x5586, 0x5586, 0x5586, 0x5586, 0x5586, 
+    0x5586, 0x5586, 0x5586, 0x5586, 0x5586, 0x5586, 0x5586, 0x5586, 
+    0x5586, 0x5587, 0x5587, 0x5587, 0x5587, 0x5587, 0x5587, 0x5587, 
+    0x5587, 0x5587, 0x5587, 0x5587, 0x5587, 0x5587, 0x5587, 0x5587, 
+    0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 
+    0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 
+    0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 
+    0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 
+    0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 
+    0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 
+    0x558b, 0x558b, 0x558b, 0x558b, 0x558b, 0x558b, 0x558b, 0x558b, 
+    0x558b, 0x558b, 0x558b, 0x558b, 0x558b, 0x558b, 0x558b, 0x558c, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0xfc00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+};
diff --git a/3rdparty/openexr/IlmThread/IlmThread.cpp b/3rdparty/openexr/IlmThread/IlmThread.cpp
new file mode 100644 (file)
index 0000000..fdcf665
--- /dev/null
@@ -0,0 +1,80 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class Thread -- dummy implementation for
+//     platforms that do not support threading
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmBaseConfig.h"
+
+#if !defined (_WIN32) && !defined(_WIN64) && !(HAVE_PTHREAD)
+
+#include "IlmThread.h"
+#include "Iex.h"
+
+namespace IlmThread {
+
+
+bool
+supportsThreads ()
+{
+    return false;
+}
+
+
+Thread::Thread ()
+{
+    throw Iex::NoImplExc ("Threads not supported on this platform.");
+}
+
+
+Thread::~Thread ()
+{
+    throw Iex::NoImplExc ("Threads not supported on this platform.");
+}
+
+
+void
+Thread::start ()
+{
+    throw Iex::NoImplExc ("Threads not supported on this platform.");
+}
+
+
+} // namespace IlmThread
+
+#endif
diff --git a/3rdparty/openexr/IlmThread/IlmThread.h b/3rdparty/openexr/IlmThread/IlmThread.h
new file mode 100644 (file)
index 0000000..e5ca595
--- /dev/null
@@ -0,0 +1,151 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_ILM_THREAD_H
+#define INCLUDED_ILM_THREAD_H
+
+//-----------------------------------------------------------------------------
+//
+//     class Thread
+//
+//     Class Thread is a portable interface to a system-dependent thread
+//     primitive.  In order to make a thread actually do something useful,
+//     you must derive a subclass from class Thread and implement the
+//     run() function.  If the operating system supports threading then
+//     the run() function will be executed int a new thread.
+//
+//     The actual creation of the thread is done by the start() routine
+//     which then calls the run() function.  In general the start()
+//     routine should be called from the constructor of the derived class.
+//
+//     The base-class thread destructor will join/destroy the thread.
+//
+//     IMPORTANT: Due to the mechanisms that encapsulate the low-level
+//     threading primitives in a C++ class there is a race condition
+//     with code resembling the following:
+//
+//         {
+//             WorkerThread myThread;
+//         } // myThread goes out of scope, is destroyed
+//           // and the thread is joined
+//
+//     The race is between the parent thread joining the child thread
+//     in the destructor of myThread, and the run() function in the
+//     child thread.  If the destructor gets executed first then run()
+//     will be called with an invalid "this" pointer.
+//
+//     This issue can be fixed by using a Semaphore to keep track of
+//     whether the run() function has already been called.  You can
+//     include a Semaphore member variable within your derived class
+//     which you post() on in the run() function, and wait() on in the
+//     destructor before the thread is joined.  Alternatively you could
+//     do something like this:
+//
+//         Semaphore runStarted;
+//
+//         void WorkerThread::run ()
+//         {
+//             runStarted.post()
+//             // do some work
+//             ...
+//         }
+//
+//         {
+//             WorkerThread myThread;
+//             runStarted.wait ();    // ensure that we have started
+//                                    // the run function
+//         } // myThread goes out of scope, is destroyed
+//           // and the thread is joined
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmBaseConfig.h"
+
+#if defined _WIN32 || defined _WIN64
+    #ifdef NOMINMAX
+        #undef NOMINMAX
+    #endif
+    #define NOMINMAX
+    #include <windows.h>
+    #include <process.h>
+#elif HAVE_PTHREAD
+    #include <pthread.h>
+#endif
+
+#if defined(OPENEXR_DLL) && !defined(ZENO_STATIC)
+    #ifdef ILMTHREAD_EXPORTS
+       #define ILMTHREAD_EXPORT __declspec(dllexport)
+    #else
+       #define ILMTHREAD_EXPORT __declspec(dllimport)
+    #endif
+#else
+    #define ILMTHREAD_EXPORT 
+#endif
+
+namespace IlmThread {
+
+//
+// Query function to determine if the current platform supports
+// threads AND this library was compiled with threading enabled.
+//
+
+ILMTHREAD_EXPORT bool supportsThreads ();
+
+
+class ILMTHREAD_EXPORT Thread
+{
+  public:
+
+    Thread ();
+    virtual ~Thread ();
+
+    void               start ();
+    virtual void       run () = 0;
+    
+  private:
+
+    #if defined _WIN32 || defined _WIN64
+       HANDLE _thread;
+    #elif HAVE_PTHREAD
+       pthread_t _thread;
+    #endif
+
+    void operator = (const Thread& t); // not implemented
+    Thread (const Thread& t);          // not implemented
+};
+
+
+} // namespace IlmThread
+
+#endif
diff --git a/3rdparty/openexr/IlmThread/IlmThreadMutex.cpp b/3rdparty/openexr/IlmThread/IlmThreadMutex.cpp
new file mode 100644 (file)
index 0000000..dfca7f1
--- /dev/null
@@ -0,0 +1,59 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class Mutex, class Lock -- dummy implementation
+//     for platforms that do not support threading
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmBaseConfig.h"
+
+#if !defined (_WIN32) && !(_WIN64) && !(HAVE_PTHREAD)
+
+#include "IlmThreadMutex.h"
+
+namespace IlmThread {
+
+
+Mutex::Mutex () {}
+Mutex::~Mutex () {}
+void Mutex::lock () const {}
+void Mutex::unlock () const {}
+
+
+} // namespace IlmThread
+
+#endif
diff --git a/3rdparty/openexr/IlmThread/IlmThreadMutex.h b/3rdparty/openexr/IlmThread/IlmThreadMutex.h
new file mode 100644 (file)
index 0000000..354282b
--- /dev/null
@@ -0,0 +1,158 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_ILM_THREAD_MUTEX_H
+#define INCLUDED_ILM_THREAD_MUTEX_H
+
+//-----------------------------------------------------------------------------
+//
+//     class Mutex, class Lock
+//
+//     Class Mutex is a wrapper for a system-dependent mutual exclusion
+//     mechanism.  Actual locking and unlocking of a Mutex object must
+//     be performed using an instance of a Lock (defined below).
+//
+//     Class lock provides safe locking and unlocking of mutexes even in
+//     the presence of C++ exceptions.  Constructing a Lock object locks
+//     the mutex; destroying the Lock unlocks the mutex.
+//
+//     Lock objects are not themselves thread-safe.  You should never
+//     share a Lock object among multiple threads.
+//
+//     Typical usage:
+//    
+//         Mutex mtx;  // Create a Mutex object that is visible
+//                     //to multiple threads
+//
+//         ...         // create some threads
+//
+//         // Then, within each thread, construct a critical section like so:
+//
+//         {
+//             Lock lock (mtx);        // Lock constructor locks the mutex
+//             ...                     // do some computation on shared data
+//         }                           // leaving the block unlocks the mutex
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmBaseConfig.h"
+
+#if defined _WIN32 || defined _WIN64
+    #ifdef NOMINMAX
+        #undef NOMINMAX
+    #endif
+    #define NOMINMAX
+    #include <windows.h>
+#elif HAVE_PTHREAD
+    #include <pthread.h>
+#endif
+
+namespace IlmThread {
+
+class Lock;
+
+
+class Mutex
+{
+  public:
+
+    Mutex ();
+    virtual ~Mutex ();
+
+  private:
+
+    void       lock () const;
+    void       unlock () const;
+
+    #if defined _WIN32 || defined _WIN64
+       mutable CRITICAL_SECTION _mutex;
+    #elif HAVE_PTHREAD
+       mutable pthread_mutex_t _mutex;
+    #endif
+
+    void operator = (const Mutex& M);  // not implemented
+    Mutex (const Mutex& M);            // not implemented
+    
+    friend class Lock;
+};
+
+
+class Lock
+{
+  public:
+
+    Lock (const Mutex& m, bool autoLock = true):
+       _mutex (m),
+       _locked (false)
+    {
+        if (autoLock)
+        {
+            _mutex.lock();
+            _locked = true;
+        }
+    }
+    
+    ~Lock ()
+    {
+        if (_locked)
+            _mutex.unlock();
+    }
+    
+    void acquire ()
+    {
+        _mutex.lock();
+        _locked = true;
+    }
+    
+    void release ()
+    {
+        _mutex.unlock();
+        _locked = false;
+    }
+    
+    bool locked ()
+    {
+        return _locked;
+    }
+
+  private:
+
+    const Mutex &      _mutex;
+    bool               _locked;
+};
+
+
+} // namespace IlmThread
+
+#endif
diff --git a/3rdparty/openexr/IlmThread/IlmThreadMutexPosix.cpp b/3rdparty/openexr/IlmThread/IlmThreadMutexPosix.cpp
new file mode 100644 (file)
index 0000000..5f72c10
--- /dev/null
@@ -0,0 +1,85 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class Mutex -- implementation for
+//     platforms that support Posix threads
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmBaseConfig.h"
+
+#if HAVE_PTHREAD
+
+#include "IlmThreadMutex.h"
+#include "Iex.h"
+#include <assert.h>
+
+namespace IlmThread {
+
+
+Mutex::Mutex ()
+{
+    if (int error = ::pthread_mutex_init (&_mutex, 0))
+        Iex::throwErrnoExc ("Cannot initialize mutex (%T).", error);
+}
+
+
+Mutex::~Mutex ()
+{
+    int error = ::pthread_mutex_destroy (&_mutex);
+    assert (error == 0);
+}
+
+
+void
+Mutex::lock () const
+{
+    if (int error = ::pthread_mutex_lock (&_mutex))
+        Iex::throwErrnoExc ("Cannot lock mutex (%T).", error);
+}
+
+
+void
+Mutex::unlock () const
+{
+    if (int error = ::pthread_mutex_unlock (&_mutex))
+        Iex::throwErrnoExc ("Cannot unlock mutex (%T).", error);
+}
+
+
+} // namespace IlmThread
+
+#endif
diff --git a/3rdparty/openexr/IlmThread/IlmThreadMutexWin32.cpp b/3rdparty/openexr/IlmThread/IlmThreadMutexWin32.cpp
new file mode 100644 (file)
index 0000000..1a34c7e
--- /dev/null
@@ -0,0 +1,73 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class Mutex -- implementation for Windows
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmThreadMutex.h"
+#include "Iex.h"
+
+namespace IlmThread {
+
+
+Mutex::Mutex ()
+{
+    ::InitializeCriticalSection (&_mutex);
+}
+
+
+Mutex::~Mutex ()
+{
+    ::DeleteCriticalSection (&_mutex);
+}
+
+
+void
+Mutex::lock () const
+{
+    ::EnterCriticalSection (&_mutex);
+}
+
+
+void
+Mutex::unlock () const
+{
+    ::LeaveCriticalSection (&_mutex);
+}
+
+
+} // namespace IlmThread
diff --git a/3rdparty/openexr/IlmThread/IlmThreadPool.cpp b/3rdparty/openexr/IlmThread/IlmThreadPool.cpp
new file mode 100644 (file)
index 0000000..68f2d03
--- /dev/null
@@ -0,0 +1,456 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class Task, class ThreadPool, class TaskGroup
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmThread.h"
+#include "IlmThreadMutex.h"
+#include "IlmThreadSemaphore.h"
+#include "IlmThreadPool.h"
+#include "Iex.h"
+#include <list>
+
+using namespace std;
+
+namespace IlmThread {
+namespace {
+
+class WorkerThread: public Thread
+{
+  public:
+
+    WorkerThread (ThreadPool::Data* data);
+
+    virtual void       run ();
+    
+  private:
+
+    ThreadPool::Data * _data;
+};
+
+} //namespace
+
+
+struct TaskGroup::Data
+{
+     Data ();
+    ~Data ();
+    
+    void       addTask () ;
+    void       removeTask ();
+    
+    Semaphore  isEmpty;        // used to signal that the taskgroup is empty
+    int                numPending;     // number of pending tasks to still execute
+};
+
+
+struct ThreadPool::Data
+{
+     Data ();
+    ~Data();
+    
+    void       finish ();
+    bool       stopped () const;
+    void       stop ();
+
+    Semaphore taskSemaphore;        // threads wait on this for ready tasks
+    Mutex taskMutex;                // mutual exclusion for the tasks list
+    list<Task*> tasks;              // the list of tasks to execute
+    size_t numTasks;                // fast access to list size
+                                    //   (list::size() can be O(n))
+
+    Semaphore threadSemaphore;      // signaled when a thread starts executing
+    Mutex threadMutex;              // mutual exclusion for threads list
+    list<WorkerThread*> threads;    // the list of all threads
+    size_t numThreads;              // fast access to list size
+    
+    bool stopping;                  // flag indicating whether to stop threads
+    Mutex stopMutex;                // mutual exclusion for stopping flag
+};
+
+
+
+//
+// class WorkerThread
+//
+
+WorkerThread::WorkerThread (ThreadPool::Data* data):
+    _data (data)
+{
+    start();
+}
+
+
+void
+WorkerThread::run ()
+{
+    //
+    // Signal that the thread has started executing
+    //
+
+    _data->threadSemaphore.post();
+
+    while (true)
+    {
+       //
+        // Wait for a task to become available
+       //
+
+        _data->taskSemaphore.wait();
+
+        {
+            Lock taskLock (_data->taskMutex);
+    
+           //
+            // If there is a task pending, pop off the next task in the FIFO
+           //
+
+            if (_data->numTasks > 0)
+            {
+                Task* task = _data->tasks.front();
+               TaskGroup* taskGroup = task->group();
+                _data->tasks.pop_front();
+                _data->numTasks--;
+
+                taskLock.release();
+                task->execute();
+                taskLock.acquire();
+
+                delete task;
+                taskGroup->_data->removeTask();
+            }
+            else if (_data->stopped())
+           {
+                break;
+           }
+        }
+    }
+}
+
+
+//
+// struct TaskGroup::Data
+//
+
+TaskGroup::Data::Data (): isEmpty (1), numPending (0)
+{
+    // empty
+}
+
+
+TaskGroup::Data::~Data ()
+{
+    //
+    // A TaskGroup acts like an "inverted" semaphore: if the count
+    // is above 0 then waiting on the taskgroup will block.  This
+    // destructor waits until the taskgroup is empty before returning.
+    //
+
+    isEmpty.wait ();
+}
+
+
+void
+TaskGroup::Data::addTask () 
+{
+    //
+    // Any access to the taskgroup is protected by a mutex that is
+    // held by the threadpool.  Therefore it is safe to access
+    // numPending before we wait on the semaphore.
+    //
+
+    if (numPending++ == 0)
+       isEmpty.wait ();
+}
+
+
+void
+TaskGroup::Data::removeTask ()
+{
+    if (--numPending == 0)
+       isEmpty.post ();
+}
+    
+
+//
+// struct ThreadPool::Data
+//
+
+ThreadPool::Data::Data (): numTasks (0), numThreads (0), stopping (false)
+{
+    // empty
+}
+
+
+ThreadPool::Data::~Data()
+{
+    Lock lock (threadMutex);
+    finish ();
+}
+
+
+void
+ThreadPool::Data::finish ()
+{
+    stop();
+
+    //
+    // Signal enough times to allow all threads to stop.
+    //
+    // Wait until all threads have started their run functions.
+    // If we do not wait before we destroy the threads then it's
+    // possible that the threads have not yet called their run
+    // functions.
+    // If this happens then the run function will be called off
+    // of an invalid object and we will crash, most likely with
+    // an error like: "pure virtual method called"
+    //
+
+    for (size_t i = 0; i < numThreads; i++)
+    {
+       taskSemaphore.post();
+       threadSemaphore.wait();
+    }
+
+    //
+    // Join all the threads
+    //
+
+    for (list<WorkerThread*>::iterator i = threads.begin();
+        i != threads.end();
+        ++i)
+    {
+       delete (*i);
+    }
+
+    Lock lock1 (taskMutex);
+    Lock lock2 (stopMutex);
+    threads.clear();
+    tasks.clear();
+    numThreads = 0;
+    numTasks = 0;
+    stopping = false;
+}
+
+
+bool
+ThreadPool::Data::stopped () const
+{
+    Lock lock (stopMutex);
+    return stopping;
+}
+
+
+void
+ThreadPool::Data::stop ()
+{
+    Lock lock (stopMutex);
+    stopping = true;
+}
+
+
+//
+// class Task
+//
+
+Task::Task (TaskGroup* g): _group(g)
+{
+    // empty
+}
+
+
+Task::~Task()
+{
+    // empty
+}
+
+
+TaskGroup*
+Task::group ()
+{
+    return _group;
+}
+
+
+TaskGroup::TaskGroup ():
+    _data (new Data())
+{
+    // empty
+}
+
+
+TaskGroup::~TaskGroup ()
+{
+    delete _data;
+}
+
+
+//
+// class ThreadPool
+//
+
+ThreadPool::ThreadPool (unsigned nthreads):
+    _data (new Data())
+{
+    setNumThreads (nthreads);
+}
+
+
+ThreadPool::~ThreadPool ()
+{
+    delete _data;
+}
+
+
+int
+ThreadPool::numThreads () const
+{
+    Lock lock (_data->threadMutex);
+    return _data->numThreads;
+}
+
+
+void
+ThreadPool::setNumThreads (int count)
+{
+    if (count < 0)
+        throw Iex::ArgExc ("Attempt to set the number of threads "
+                          "in a thread pool to a negative value.");
+
+    //
+    // Lock access to thread list and size
+    //
+
+    Lock lock (_data->threadMutex);
+
+    if ((size_t)count > _data->numThreads)
+    {
+       //
+        // Add more threads
+       //
+
+        while (_data->numThreads < (size_t)count)
+        {
+            _data->threads.push_back (new WorkerThread (_data));
+            _data->numThreads++;
+        }
+    }
+    else if ((size_t)count < _data->numThreads)
+    {
+       //
+       // Wait until all existing threads are finished processing,
+       // then delete all threads.
+       //
+
+        _data->finish ();
+
+       //
+        // Add in new threads
+       //
+
+        while (_data->numThreads < (size_t)count)
+        {
+            _data->threads.push_back (new WorkerThread (_data));
+            _data->numThreads++;
+        }
+    }
+}
+
+
+void
+ThreadPool::addTask (Task* task) 
+{
+    //
+    // Lock the threads, needed to access numThreads
+    //
+
+    Lock lock (_data->threadMutex);
+
+    if (_data->numThreads == 0)
+    {
+        task->execute ();
+        delete task;
+    }
+    else
+    {
+       //
+        // Get exclusive access to the tasks queue
+       //
+
+        {
+            Lock taskLock (_data->taskMutex);
+
+           //
+            // Push the new task into the FIFO
+           //
+
+            _data->tasks.push_back (task);
+            _data->numTasks++;
+            task->group()->_data->addTask();
+        }
+        
+       //
+        // Signal that we have a new task to process
+       //
+
+        _data->taskSemaphore.post ();
+    }
+}
+
+
+ThreadPool&
+ThreadPool::globalThreadPool ()
+{
+    //
+    // The global thread pool
+    //
+    
+    static ThreadPool gThreadPool (0);
+
+    return gThreadPool;
+}
+
+
+void
+ThreadPool::addGlobalTask (Task* task)
+{
+    globalThreadPool().addTask (task);
+}
+
+
+} // namespace IlmThread
diff --git a/3rdparty/openexr/IlmThread/IlmThreadPool.h b/3rdparty/openexr/IlmThread/IlmThreadPool.h
new file mode 100644 (file)
index 0000000..7ea91d3
--- /dev/null
@@ -0,0 +1,156 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_ILM_THREAD_POOL_H
+#define INCLUDED_ILM_THREAD_POOL_H
+
+//-----------------------------------------------------------------------------
+//
+//     class Task, class ThreadPool, class TaskGroup
+//
+//     Class ThreadPool manages a set of worker threads and accepts
+//     tasks for processing.  Tasks added to the thread pool are
+//     executed concurrently by the worker threads.  
+//     
+//     Class Thread provides an abstract interface for a task which
+//     a ThreadPool works on.  Derived classes need to implement the
+//     execute() function which performs the actual task.
+//
+//     Class TaskTroup allows synchronization on the completion of a set
+//     of tasks.  Every task that is added to a ThreadPool belongs to a
+//     single TaskGroup.  The destructor of the TaskGroup waits for all
+//     tasks in the group to finish.
+//
+//     Note: if you plan to use the ThreadPool interface in your own
+//     applications note that the implementation of the ThreadPool calls
+//     operator delete on tasks as they complete.  If you define a custom
+//     operator new for your tasks, for instance to use a custom heap,
+//     then you must also write an appropriate operator delete.
+//
+//-----------------------------------------------------------------------------
+
+namespace IlmThread {
+
+class TaskGroup;
+class Task;
+
+
+class ThreadPool  
+{
+  public:
+
+    //-------------------------------------------------------
+    // Constructor -- creates numThreads worker threads which
+    // wait until a task is available. 
+    //-------------------------------------------------------
+
+    ThreadPool (unsigned numThreads = 0);
+    
+    
+    //-----------------------------------------------------------
+    // Destructor -- waits for all tasks to complete, joins all
+    // the threads to the calling thread, and then destroys them.
+    //-----------------------------------------------------------
+
+    virtual ~ThreadPool ();
+    
+
+    //--------------------------------------------------------
+    // Query and set the number of worker threads in the pool.
+    //
+    // Warning: never call setNumThreads from within a worker
+    // thread as this will almost certainly cause a deadlock
+    // or crash.
+    //--------------------------------------------------------
+    
+    int                numThreads () const;
+    void       setNumThreads (int count);
+    
+    
+    //------------------------------------------------------------
+    // Add a task for processing.  The ThreadPool can handle any
+    // number of tasks regardless of the number of worker threads.
+    // The tasks are first added onto a queue, and are executed
+    // by threads as they become available, in FIFO order.
+    //------------------------------------------------------------
+
+    void addTask (Task* task);
+    
+
+    //-------------------------------------------
+    // Access functions for the global threadpool
+    //-------------------------------------------
+    
+    static ThreadPool& globalThreadPool ();
+    static void                addGlobalTask (Task* task);
+
+    struct Data;
+
+  protected:
+
+    Data *             _data;
+};
+
+
+class Task
+{
+  public:
+
+    Task (TaskGroup* g);
+    virtual ~Task ();
+
+    virtual void       execute () = 0;
+    TaskGroup *                group();
+
+  protected:
+
+    TaskGroup *                _group;
+};
+
+
+class TaskGroup
+{
+  public:
+
+     TaskGroup();
+    ~TaskGroup();
+
+    struct Data;
+    Data* const                _data;
+};
+
+
+} // namespace IlmThread
+
+#endif
diff --git a/3rdparty/openexr/IlmThread/IlmThreadPosix.cpp b/3rdparty/openexr/IlmThread/IlmThreadPosix.cpp
new file mode 100644 (file)
index 0000000..1fe74f7
--- /dev/null
@@ -0,0 +1,98 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class Thread -- implementation for
+//     platforms that support Posix threads
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmBaseConfig.h"
+
+#if HAVE_PTHREAD
+
+#include "IlmThread.h"
+#include "Iex.h"
+#include <assert.h>
+
+extern "C"
+{
+    typedef void * (* Start) (void *);
+}
+
+namespace IlmThread {
+
+
+bool
+supportsThreads ()
+{
+    return true;
+}
+
+namespace {
+
+void
+threadLoop (void * t)
+{
+    return (reinterpret_cast<Thread*>(t))->run();
+}
+
+} // namespace
+
+
+Thread::Thread ()
+{
+    // empty
+}
+
+
+Thread::~Thread ()
+{
+    int error = ::pthread_join (_thread, 0);
+    assert (error == 0);
+}
+
+
+void
+Thread::start ()
+{
+    if (int error = ::pthread_create (&_thread, 0, Start (threadLoop), this))
+       Iex::throwErrnoExc ("Cannot create new thread (%T).", error);
+}
+
+
+} // namespace IlmThread
+
+#endif
diff --git a/3rdparty/openexr/IlmThread/IlmThreadSemaphore.cpp b/3rdparty/openexr/IlmThread/IlmThreadSemaphore.cpp
new file mode 100644 (file)
index 0000000..2daef64
--- /dev/null
@@ -0,0 +1,60 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class Semaphore -- dummy implementation for
+//     for platforms that do not support threading
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmBaseConfig.h"
+
+#if !defined (_WIN32) && !(_WIN64) && !(HAVE_PTHREAD)
+#include "IlmThreadSemaphore.h"
+
+namespace IlmThread {
+
+
+Semaphore::Semaphore (unsigned int value) {}
+Semaphore::~Semaphore () {}
+void Semaphore::wait () {}
+bool Semaphore::tryWait () {return true;}
+void Semaphore::post () {}
+int Semaphore::value () const {return 0;}
+
+
+} // namespace IlmThread
+
+#endif
diff --git a/3rdparty/openexr/IlmThread/IlmThreadSemaphore.h b/3rdparty/openexr/IlmThread/IlmThreadSemaphore.h
new file mode 100644 (file)
index 0000000..a9ba60a
--- /dev/null
@@ -0,0 +1,110 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_ILM_THREAD_SEMAPHORE_H
+#define INCLUDED_ILM_THREAD_SEMAPHORE_H
+
+//-----------------------------------------------------------------------------
+//
+//     class Semaphore -- a wrapper class for
+//     system-dependent counting semaphores
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmBaseConfig.h"
+
+#if defined _WIN32 || defined _WIN64
+    #ifdef NOMINMAX
+        #undef NOMINMAX
+    #endif
+    #define NOMINMAX
+    #include <windows.h>
+#elif HAVE_PTHREAD && !HAVE_POSIX_SEMAPHORES
+    #include <pthread.h>
+#elif HAVE_PTHREAD && HAVE_POSIX_SEMAPHORES
+    #include <semaphore.h>
+#endif
+
+namespace IlmThread {
+
+
+class Semaphore
+{
+  public:
+
+    Semaphore (unsigned int value = 0);
+    virtual ~Semaphore();
+
+    void       wait();
+    bool       tryWait();
+    void       post();
+    int                value() const;
+
+  private:
+
+    #if defined _WIN32 || defined _WIN64
+
+       mutable HANDLE _semaphore;
+
+    #elif HAVE_PTHREAD && !HAVE_POSIX_SEMAPHORES
+
+       //
+       // If the platform has Posix threads but no semapohores,
+       // then we implement them ourselves using condition variables
+       //
+
+       struct sema_t
+       {
+           unsigned int count;
+           unsigned long numWaiting;
+           pthread_mutex_t mutex;
+           pthread_cond_t nonZero;
+       };
+
+       mutable sema_t _semaphore;
+
+    #elif HAVE_PTHREAD && HAVE_POSIX_SEMAPHORES
+
+       mutable sem_t _semaphore;
+
+    #endif
+
+    void operator = (const Semaphore& s);      // not implemented
+    Semaphore (const Semaphore& s);            // not implemented
+};
+
+
+} // namespace IlmThread
+
+#endif
diff --git a/3rdparty/openexr/IlmThread/IlmThreadSemaphorePosix.cpp b/3rdparty/openexr/IlmThread/IlmThreadSemaphorePosix.cpp
new file mode 100644 (file)
index 0000000..b5e206e
--- /dev/null
@@ -0,0 +1,103 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class Semaphore -- implementation for platforms
+//     that support Posix threads and Posix semaphores
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmBaseConfig.h"
+
+#if HAVE_PTHREAD && HAVE_POSIX_SEMAPHORES
+
+#include "IlmThreadSemaphore.h"
+#include "Iex.h"
+#include <assert.h>
+
+namespace IlmThread {
+
+
+Semaphore::Semaphore (unsigned int value)
+{
+    if (::sem_init (&_semaphore, 0, value))
+       Iex::throwErrnoExc ("Cannot initialize semaphore (%T).");
+}
+
+
+Semaphore::~Semaphore ()
+{
+    int error = ::sem_destroy (&_semaphore);
+    assert (error == 0);
+}
+
+
+void
+Semaphore::wait ()
+{
+    ::sem_wait (&_semaphore);
+}
+
+
+bool
+Semaphore::tryWait ()
+{
+    return sem_trywait (&_semaphore) == 0;
+}
+
+
+void
+Semaphore::post ()
+{
+    if (::sem_post (&_semaphore))
+        Iex::throwErrnoExc ("Post operation on semaphore failed (%T).");
+}
+
+
+int
+Semaphore::value () const
+{
+    int value;
+
+    if (::sem_getvalue (&_semaphore, &value))
+        Iex::throwErrnoExc ("Cannot read semaphore value (%T).");
+
+    return value;
+}
+
+
+} // namespace IlmThread
+
+#endif
diff --git a/3rdparty/openexr/IlmThread/IlmThreadSemaphorePosixCompat.cpp b/3rdparty/openexr/IlmThread/IlmThreadSemaphorePosixCompat.cpp
new file mode 100644 (file)
index 0000000..33f2a5b
--- /dev/null
@@ -0,0 +1,155 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class Semaphore -- implementation for for platforms that do
+//     support Posix threads but do not support Posix semaphores,
+//     for example, OS X
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmBaseConfig.h"
+
+#if HAVE_PTHREAD && !HAVE_POSIX_SEMAPHORES
+
+#include "IlmThreadSemaphore.h"
+#include "Iex.h"
+#include <assert.h>
+
+namespace IlmThread {
+
+
+Semaphore::Semaphore (unsigned int value)
+{
+    if (int error = ::pthread_mutex_init (&_semaphore.mutex, 0))
+        Iex::throwErrnoExc ("Cannot initialize mutex (%T).", error);
+
+    if (int error = ::pthread_cond_init (&_semaphore.nonZero, 0))
+        Iex::throwErrnoExc ("Cannot initialize condition variable (%T).",
+                            error);
+
+    _semaphore.count = value;
+    _semaphore.numWaiting = 0;
+}
+
+
+Semaphore::~Semaphore ()
+{
+    int error = ::pthread_cond_destroy (&_semaphore.nonZero);
+    assert (error == 0);
+    error = ::pthread_mutex_destroy (&_semaphore.mutex);
+    assert (error == 0);
+}
+
+
+void
+Semaphore::wait ()
+{
+    ::pthread_mutex_lock (&_semaphore.mutex);
+
+    _semaphore.numWaiting++;
+
+    while (_semaphore.count == 0)
+    {
+        if (int error = ::pthread_cond_wait (&_semaphore.nonZero,
+                                             &_semaphore.mutex))
+       {
+            ::pthread_mutex_unlock (&_semaphore.mutex);
+
+            Iex::throwErrnoExc ("Cannot wait on condition variable (%T).",
+                                error);
+       }
+    }
+
+    _semaphore.numWaiting--;
+    _semaphore.count--;
+
+    ::pthread_mutex_unlock (&_semaphore.mutex);
+}
+
+
+bool
+Semaphore::tryWait ()
+{
+    ::pthread_mutex_lock (&_semaphore.mutex);
+    
+    if (_semaphore.count == 0)
+    {
+        ::pthread_mutex_unlock (&_semaphore.mutex);
+        return false;
+    }
+    else
+    {
+        _semaphore.count--;
+        ::pthread_mutex_unlock (&_semaphore.mutex);
+        return true;
+    }
+}
+
+
+void
+Semaphore::post ()
+{
+    ::pthread_mutex_lock (&_semaphore.mutex);
+
+    if (_semaphore.numWaiting > 0)
+    {
+        if (int error = ::pthread_cond_signal (&_semaphore.nonZero))
+       {
+            ::pthread_mutex_unlock (&_semaphore.mutex);
+
+            Iex::throwErrnoExc ("Cannot signal condition variable (%T).",
+                                error);
+       }
+    }
+
+    _semaphore.count++;
+    ::pthread_mutex_unlock (&_semaphore.mutex);
+}
+
+
+int
+Semaphore::value () const
+{
+    ::pthread_mutex_lock (&_semaphore.mutex);
+    int value = _semaphore.count;
+    ::pthread_mutex_unlock (&_semaphore.mutex);
+    return value;
+}
+
+
+} // namespace IlmThread
+
+#endif
diff --git a/3rdparty/openexr/IlmThread/IlmThreadSemaphoreWin32.cpp b/3rdparty/openexr/IlmThread/IlmThreadSemaphoreWin32.cpp
new file mode 100644 (file)
index 0000000..19cd625
--- /dev/null
@@ -0,0 +1,146 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class Semaphore -- implementation for Windows
+//
+//-----------------------------------------------------------------------------
+
+#include "IlmThreadSemaphore.h"
+#include "Iex.h"
+#include <string>
+#include <assert.h>
+#include <iostream>
+
+namespace IlmThread {
+
+using namespace Iex;
+
+namespace {
+
+std::string
+errorString ()
+{
+    LPSTR messageBuffer;
+    DWORD bufferLength;
+    std::string message;
+
+    //
+    // Call FormatMessage() to allow for message 
+    // text to be acquired from the system.
+    //
+
+    if (bufferLength = FormatMessageA (FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                                      FORMAT_MESSAGE_IGNORE_INSERTS |
+                                      FORMAT_MESSAGE_FROM_SYSTEM,
+                                      0,
+                                      GetLastError (),
+                                      MAKELANGID (LANG_NEUTRAL,
+                                                  SUBLANG_DEFAULT),
+                                      (LPSTR) &messageBuffer,
+                                      0,
+                                      NULL))
+    {
+       message = messageBuffer;
+        LocalFree (messageBuffer);
+    }
+
+    return message;
+}
+
+} // namespace
+
+
+Semaphore::Semaphore (unsigned int value)
+{
+    if ((_semaphore = ::CreateSemaphore (0, value, 0x7fffffff, 0)) == 0)
+    {
+       THROW (LogicExc, "Could not create semaphore "
+                        "(" << errorString() << ").");
+    }
+}
+
+
+Semaphore::~Semaphore()
+{
+    bool ok = ::CloseHandle (_semaphore) != FALSE;
+    assert (ok);
+}
+
+
+void
+Semaphore::wait()
+{
+    if (::WaitForSingleObject (_semaphore, INFINITE) != WAIT_OBJECT_0)
+    {
+       THROW (LogicExc, "Could not wait on semaphore "
+                        "(" << errorString() << ").");
+    }
+}
+
+
+bool
+Semaphore::tryWait()
+{
+    return ::WaitForSingleObject (_semaphore, 0) == WAIT_OBJECT_0;
+}
+
+
+void
+Semaphore::post()
+{
+    if (!::ReleaseSemaphore (_semaphore, 1, 0))
+    {
+       THROW (LogicExc, "Could not post on semaphore "
+                        "(" << errorString() << ").");
+    }
+}
+
+
+int
+Semaphore::value() const
+{
+    LONG v = -1;
+
+    if (!::ReleaseSemaphore (_semaphore, 0, &v) || v < 0)
+    {
+       THROW (LogicExc, "Could not get value of semaphore "
+                        "(" << errorString () << ").");
+    }
+
+    return v;
+}
+
+} // namespace IlmThread
diff --git a/3rdparty/openexr/IlmThread/IlmThreadWin32.cpp b/3rdparty/openexr/IlmThread/IlmThreadWin32.cpp
new file mode 100644 (file)
index 0000000..cd54759
--- /dev/null
@@ -0,0 +1,95 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     class Thread -- implementation for Windows
+//
+//-----------------------------------------------------------------------------
+
+
+#include "IlmThread.h"
+#include "Iex.h"
+#include <iostream>
+#include <assert.h>
+
+namespace IlmThread {
+
+
+bool
+supportsThreads ()
+{
+    return true;
+}
+
+namespace {
+
+unsigned __stdcall
+threadLoop (void * t)
+{
+    reinterpret_cast<Thread*>(t)->run();
+    _endthreadex (0);
+    return 0;
+}
+
+} // namespace
+
+
+Thread::Thread ()
+{
+    // empty
+}
+
+
+Thread::~Thread ()
+{
+    DWORD status = ::WaitForSingleObject (_thread, INFINITE);
+    assert (status ==  WAIT_OBJECT_0);
+    bool ok = ::CloseHandle (_thread) != FALSE;
+    assert (ok);
+}
+
+
+void
+Thread::start ()
+{
+    unsigned id;
+    _thread = (HANDLE)::_beginthreadex (0, 0, &threadLoop, this, 0, &id);
+
+    if (_thread == 0)
+       Iex::throwErrnoExc ("Cannot create new thread (%T).");
+}
+
+
+} // namespace IlmThread
diff --git a/3rdparty/openexr/Imath/ImathBox.cpp b/3rdparty/openexr/Imath/ImathBox.cpp
new file mode 100644 (file)
index 0000000..07bddfd
--- /dev/null
@@ -0,0 +1,37 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+//
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+#include "ImathBox.h"
+
+// this file is necessary for template instantiation on windows
diff --git a/3rdparty/openexr/Imath/ImathBox.h b/3rdparty/openexr/Imath/ImathBox.h
new file mode 100644 (file)
index 0000000..7dc4eb7
--- /dev/null
@@ -0,0 +1,850 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHBOX_H
+#define INCLUDED_IMATHBOX_H
+
+//-------------------------------------------------------------------
+//
+//     class Imath::Box<class T>
+//     --------------------------------
+//
+//     This class imposes the following requirements on its 
+//     parameter class:
+//     
+//     1) The class T must implement these operators:
+//                     + - < > <= >= = 
+//        with the signature (T,T) and the expected 
+//        return values for a numeric type. 
+//
+//     2) The class T must implement operator=
+//        with the signature (T,float and/or double)
+//
+//     3) The class T must have a constructor which takes
+//        a float (and/or double) for use in initializing the box.
+//
+//     4) The class T must have a function T::dimensions()
+//        which returns the number of dimensions in the class
+//        (since its assumed its a vector) -- preferably, this
+//        returns a constant expression.
+//
+//-------------------------------------------------------------------
+
+#include "ImathVec.h"
+
+namespace Imath {
+
+
+template <class T>     
+class Box
+{
+  public:
+
+    //-------------------------
+    //  Data Members are public
+    //-------------------------
+
+    T                          min;
+    T                          max;
+
+    //-----------------------------------------------------
+    // Constructors - an "empty" box is created by default
+    //-----------------------------------------------------
+
+    Box (); 
+    Box (const T &point);
+    Box (const T &minT, const T &maxT);
+
+    //--------------------
+    //  Operators:  ==, !=
+    //--------------------
+    
+    bool               operator == (const Box<T> &src) const;
+    bool               operator != (const Box<T> &src) const;
+
+    //------------------
+    // Box manipulation
+    //------------------
+
+    void               makeEmpty ();
+    void               extendBy (const T &point);
+    void               extendBy (const Box<T> &box);
+    void               makeInfinite ();    
+
+    //---------------------------------------------------
+    // Query functions - these compute results each time
+    //---------------------------------------------------
+
+    T                  size () const;
+    T                  center () const;
+    bool               intersects (const T &point) const;
+    bool               intersects (const Box<T> &box) const;
+
+    unsigned int       majorAxis () const;
+
+    //----------------
+    // Classification
+    //----------------
+
+    bool               isEmpty () const;
+    bool               hasVolume () const;
+    bool               isInfinite () const;
+};
+
+
+//--------------------
+// Convenient typedefs
+//--------------------
+
+typedef Box <V2s> Box2s;
+typedef Box <V2i> Box2i;
+typedef Box <V2f> Box2f;
+typedef Box <V2d> Box2d;
+typedef Box <V3s> Box3s;
+typedef Box <V3i> Box3i;
+typedef Box <V3f> Box3f;
+typedef Box <V3d> Box3d;
+
+
+//----------------
+//  Implementation
+
+
+template <class T>
+inline Box<T>::Box()
+{
+    makeEmpty();
+}
+
+
+template <class T>
+inline Box<T>::Box (const T &point)
+{
+    min = point;
+    max = point;
+}
+
+
+template <class T>
+inline Box<T>::Box (const T &minT, const T &maxT)
+{
+    min = minT;
+    max = maxT;
+}
+
+
+template <class T>
+inline bool
+Box<T>::operator == (const Box<T> &src) const
+{
+    return (min == src.min && max == src.max);
+}
+
+
+template <class T>
+inline bool
+Box<T>::operator != (const Box<T> &src) const
+{
+    return (min != src.min || max != src.max);
+}
+
+
+template <class T>
+inline void Box<T>::makeEmpty()
+{
+    min = T(T::baseTypeMax());
+    max = T(T::baseTypeMin());
+}
+
+template <class T>
+inline void Box<T>::makeInfinite()
+{
+    min = T(T::baseTypeMin());
+    max = T(T::baseTypeMax());
+}
+
+
+template <class T>
+inline void
+Box<T>::extendBy(const T &point)
+{
+    for (unsigned int i = 0; i < min.dimensions(); i++)
+    {
+       if (point[i] < min[i])
+           min[i] = point[i];
+
+       if (point[i] > max[i])
+           max[i] = point[i];
+    }
+}
+
+
+template <class T>
+inline void
+Box<T>::extendBy(const Box<T> &box)
+{
+    for (unsigned int i = 0; i < min.dimensions(); i++)
+    {
+       if (box.min[i] < min[i])
+           min[i] = box.min[i];
+
+       if (box.max[i] > max[i])
+           max[i] = box.max[i];
+    }
+}
+
+
+template <class T>
+inline bool
+Box<T>::intersects(const T &point) const
+{
+    for (unsigned int i = 0; i < min.dimensions(); i++)
+    {
+        if (point[i] < min[i] || point[i] > max[i])
+           return false;
+    }
+
+    return true;
+}
+
+
+template <class T>
+inline bool
+Box<T>::intersects(const Box<T> &box) const
+{
+    for (unsigned int i = 0; i < min.dimensions(); i++)
+    {
+        if (box.max[i] < min[i] || box.min[i] > max[i])
+           return false;
+    }
+
+    return true;
+}
+
+
+template <class T> 
+inline T
+Box<T>::size() const 
+{ 
+    if (isEmpty())
+       return T (0);
+
+    return max - min;
+}
+
+
+template <class T> 
+inline T
+Box<T>::center() const 
+{ 
+    return (max + min) / 2;
+}
+
+
+template <class T>
+inline bool
+Box<T>::isEmpty() const
+{
+    for (unsigned int i = 0; i < min.dimensions(); i++)
+    {
+        if (max[i] < min[i])
+           return true;
+    }
+
+    return false;
+}
+
+template <class T>
+inline bool
+Box<T>::isInfinite() const
+{
+    for (unsigned int i = 0; i < min.dimensions(); i++)
+    {
+        if (min[i] != T::baseTypeMin() || max[i] != T::baseTypeMax())
+           return false;
+    }
+
+    return true;
+}
+
+
+template <class T>
+inline bool
+Box<T>::hasVolume() const
+{
+    for (unsigned int i = 0; i < min.dimensions(); i++)
+    {
+        if (max[i] <= min[i])
+           return false;
+    }
+
+    return true;
+}
+
+
+template<class T>
+inline unsigned int
+Box<T>::majorAxis() const
+{
+    unsigned int major = 0;
+    T s = size();
+
+    for (unsigned int i = 1; i < min.dimensions(); i++)
+    {
+       if (s[i] > s[major])
+           major = i;
+    }
+
+    return major;
+}
+
+//-------------------------------------------------------------------
+//
+//  Partial class specializations for Imath::Vec2<T> and Imath::Vec3<T>
+//
+//-------------------------------------------------------------------
+
+template <typename T> class Box;
+
+template <class T>
+class Box<Vec2<T> >
+{
+  public:
+
+    //-------------------------
+    //  Data Members are public
+    //-------------------------
+
+    Vec2<T>            min;
+    Vec2<T>            max;
+
+    //-----------------------------------------------------
+    //  Constructors - an "empty" box is created by default
+    //-----------------------------------------------------
+
+    Box(); 
+    Box (const Vec2<T> &point);
+    Box (const Vec2<T> &minT, const Vec2<T> &maxT);
+
+    //--------------------
+    //  Operators:  ==, !=
+    //--------------------
+
+    bool               operator == (const Box<Vec2<T> > &src) const;
+    bool               operator != (const Box<Vec2<T> > &src) const;
+
+    //------------------
+    //  Box manipulation
+    //------------------
+
+    void               makeEmpty();
+    void               extendBy (const Vec2<T> &point);
+    void               extendBy (const Box<Vec2<T> > &box);
+    void               makeInfinite();
+
+    //---------------------------------------------------
+    //  Query functions - these compute results each time
+    //---------------------------------------------------
+
+    Vec2<T>            size() const;
+    Vec2<T>            center() const;
+    bool               intersects (const Vec2<T> &point) const;
+    bool               intersects (const Box<Vec2<T> > &box) const;
+
+    unsigned int       majorAxis() const;
+
+    //----------------
+    //  Classification
+    //----------------
+
+    bool               isEmpty() const;
+    bool               hasVolume() const;
+    bool               isInfinite() const;
+};
+
+
+//----------------
+//  Implementation
+
+template <class T>
+inline Box<Vec2<T> >::Box()
+{
+    makeEmpty();
+}
+
+
+template <class T>
+inline Box<Vec2<T> >::Box (const Vec2<T> &point)
+{
+    min = point;
+    max = point;
+}
+
+
+template <class T>
+inline Box<Vec2<T> >::Box (const Vec2<T> &minT, const Vec2<T> &maxT)
+{
+    min = minT;
+    max = maxT;
+}
+
+
+template <class T>
+inline bool
+Box<Vec2<T> >::operator ==  (const Box<Vec2<T> > &src) const
+{
+    return (min == src.min && max == src.max);
+}
+
+
+template <class T>
+inline bool
+Box<Vec2<T> >::operator != (const Box<Vec2<T> > &src) const
+{
+    return (min != src.min || max != src.max);
+}
+
+
+template <class T>
+inline void Box<Vec2<T> >::makeEmpty()
+{
+    min = Vec2<T>(Vec2<T>::baseTypeMax());
+    max = Vec2<T>(Vec2<T>::baseTypeMin());
+}
+
+template <class T>
+inline void Box<Vec2<T> >::makeInfinite()
+{
+    min = Vec2<T>(Vec2<T>::baseTypeMin());
+    max = Vec2<T>(Vec2<T>::baseTypeMax());
+}
+
+
+template <class T>
+inline void
+Box<Vec2<T> >::extendBy (const Vec2<T> &point)
+{
+    if (point[0] < min[0])
+        min[0] = point[0];
+
+    if (point[0] > max[0])
+        max[0] = point[0];
+
+    if (point[1] < min[1])
+        min[1] = point[1];
+
+    if (point[1] > max[1])
+        max[1] = point[1];
+}
+
+
+template <class T>
+inline void
+Box<Vec2<T> >::extendBy (const Box<Vec2<T> > &box)
+{
+    if (box.min[0] < min[0])
+        min[0] = box.min[0];
+
+    if (box.max[0] > max[0])
+        max[0] = box.max[0];
+
+    if (box.min[1] < min[1])
+        min[1] = box.min[1];
+
+    if (box.max[1] > max[1])
+        max[1] = box.max[1];
+}
+
+
+template <class T>
+inline bool
+Box<Vec2<T> >::intersects (const Vec2<T> &point) const
+{
+    if (point[0] < min[0] || point[0] > max[0] ||
+        point[1] < min[1] || point[1] > max[1])
+        return false;
+
+    return true;
+}
+
+
+template <class T>
+inline bool
+Box<Vec2<T> >::intersects (const Box<Vec2<T> > &box) const
+{
+    if (box.max[0] < min[0] || box.min[0] > max[0] ||
+        box.max[1] < min[1] || box.min[1] > max[1])
+        return false;
+
+    return true;
+}
+
+
+template <class T> 
+inline Vec2<T>
+Box<Vec2<T> >::size() const 
+{ 
+    if (isEmpty())
+        return Vec2<T> (0);
+
+    return max - min;
+}
+
+
+template <class T> 
+inline Vec2<T>
+Box<Vec2<T> >::center() const 
+{ 
+    return (max + min) / 2;
+}
+
+
+template <class T>
+inline bool
+Box<Vec2<T> >::isEmpty() const
+{
+    if (max[0] < min[0] ||
+        max[1] < min[1])
+        return true;
+
+    return false;
+}
+
+template <class T>
+inline bool
+Box<Vec2<T> > ::isInfinite() const
+{
+    if (min[0] != limits<T>::min() || max[0] != limits<T>::max() ||
+        min[1] != limits<T>::min() || max[1] != limits<T>::max())
+        return false;
+    
+    return true;
+}
+
+
+template <class T>
+inline bool
+Box<Vec2<T> >::hasVolume() const
+{
+    if (max[0] <= min[0] ||
+        max[1] <= min[1])
+        return false;
+
+    return true;
+}
+
+
+template <class T>
+inline unsigned int
+Box<Vec2<T> >::majorAxis() const
+{
+    unsigned int major = 0;
+    Vec2<T>     s     = size();
+
+    if (s[1] > s[major])
+        major = 1;
+
+    return major;
+}
+
+
+template <class T>
+class Box<Vec3<T> >
+{
+  public:
+
+    //-------------------------
+    //  Data Members are public
+    //-------------------------
+
+    Vec3<T>                    min;
+    Vec3<T>                    max;
+
+    //-----------------------------------------------------
+    //  Constructors - an "empty" box is created by default
+    //-----------------------------------------------------
+
+    Box(); 
+    Box (const Vec3<T> &point);
+    Box (const Vec3<T> &minT, const Vec3<T> &maxT);
+
+    //--------------------
+    //  Operators:  ==, !=
+    //--------------------
+
+    bool               operator == (const Box<Vec3<T> > &src) const;
+    bool               operator != (const Box<Vec3<T> > &src) const;
+
+    //------------------
+    //  Box manipulation
+    //------------------
+
+    void               makeEmpty();
+    void               extendBy (const Vec3<T> &point);
+    void               extendBy (const Box<Vec3<T> > &box);
+    void               makeInfinite ();
+
+    //---------------------------------------------------
+    //  Query functions - these compute results each time
+    //---------------------------------------------------
+
+    Vec3<T>            size() const;
+    Vec3<T>            center() const;
+    bool               intersects (const Vec3<T> &point) const;
+    bool               intersects (const Box<Vec3<T> > &box) const;
+
+    unsigned int       majorAxis() const;
+
+    //----------------
+    //  Classification
+    //----------------
+
+    bool               isEmpty() const;
+    bool               hasVolume() const;
+    bool               isInfinite() const;
+};
+
+
+//----------------
+//  Implementation
+
+
+template <class T>
+inline Box<Vec3<T> >::Box()
+{
+    makeEmpty();
+}
+
+
+template <class T>
+inline Box<Vec3<T> >::Box (const Vec3<T> &point)
+{
+    min = point;
+    max = point;
+}
+
+
+template <class T>
+inline Box<Vec3<T> >::Box (const Vec3<T> &minT, const Vec3<T> &maxT)
+{
+    min = minT;
+    max = maxT;
+}
+
+
+template <class T>
+inline bool
+Box<Vec3<T> >::operator == (const Box<Vec3<T> > &src) const
+{
+    return (min == src.min && max == src.max);
+}
+
+
+template <class T>
+inline bool
+Box<Vec3<T> >::operator != (const Box<Vec3<T> > &src) const
+{
+    return (min != src.min || max != src.max);
+}
+
+
+template <class T>
+inline void Box<Vec3<T> >::makeEmpty()
+{
+    min = Vec3<T>(Vec3<T>::baseTypeMax());
+    max = Vec3<T>(Vec3<T>::baseTypeMin());
+}
+
+template <class T>
+inline void Box<Vec3<T> >::makeInfinite()
+{
+    min = Vec3<T>(Vec3<T>::baseTypeMin());
+    max = Vec3<T>(Vec3<T>::baseTypeMax());
+}
+
+
+template <class T>
+inline void
+Box<Vec3<T> >::extendBy (const Vec3<T> &point)
+{
+    if (point[0] < min[0])
+        min[0] = point[0];
+
+    if (point[0] > max[0])
+        max[0] = point[0];
+
+    if (point[1] < min[1])
+        min[1] = point[1];
+
+    if (point[1] > max[1])
+        max[1] = point[1];
+
+    if (point[2] < min[2])
+        min[2] = point[2];
+
+    if (point[2] > max[2])
+        max[2] = point[2];
+}
+
+
+template <class T>
+inline void
+Box<Vec3<T> >::extendBy (const Box<Vec3<T> > &box)
+{
+    if (box.min[0] < min[0])
+        min[0] = box.min[0];
+
+    if (box.max[0] > max[0])
+        max[0] = box.max[0];
+
+    if (box.min[1] < min[1])
+        min[1] = box.min[1];
+
+    if (box.max[1] > max[1])
+        max[1] = box.max[1];
+
+    if (box.min[2] < min[2])
+        min[2] = box.min[2];
+
+    if (box.max[2] > max[2])
+        max[2] = box.max[2];
+}
+
+
+template <class T>
+inline bool
+Box<Vec3<T> >::intersects (const Vec3<T> &point) const
+{
+    if (point[0] < min[0] || point[0] > max[0] ||
+        point[1] < min[1] || point[1] > max[1] ||
+        point[2] < min[2] || point[2] > max[2])
+        return false;
+
+    return true;
+}
+
+
+template <class T>
+inline bool
+Box<Vec3<T> >::intersects (const Box<Vec3<T> > &box) const
+{
+    if (box.max[0] < min[0] || box.min[0] > max[0] ||
+        box.max[1] < min[1] || box.min[1] > max[1] ||
+        box.max[2] < min[2] || box.min[2] > max[2])
+        return false;
+
+    return true;
+}
+
+
+template <class T> 
+inline Vec3<T>
+Box<Vec3<T> >::size() const 
+{ 
+    if (isEmpty())
+        return Vec3<T> (0);
+
+    return max - min;
+}
+
+
+template <class T> 
+inline Vec3<T>
+Box<Vec3<T> >::center() const 
+{ 
+    return (max + min) / 2;
+}
+
+
+template <class T>
+inline bool
+Box<Vec3<T> >::isEmpty() const
+{
+    if (max[0] < min[0] ||
+        max[1] < min[1] ||
+        max[2] < min[2])
+        return true;
+
+    return false;
+}
+
+template <class T>
+inline bool
+Box<Vec3<T> >::isInfinite() const
+{
+    if (min[0] != limits<T>::min() || max[0] != limits<T>::max() ||
+        min[1] != limits<T>::min() || max[1] != limits<T>::max() ||
+        min[2] != limits<T>::min() || max[2] != limits<T>::max())
+        return false;
+    
+    return true;
+}
+
+
+template <class T>
+inline bool
+Box<Vec3<T> >::hasVolume() const
+{
+    if (max[0] <= min[0] ||
+        max[1] <= min[1] ||
+        max[2] <= min[2])
+        return false;
+
+    return true;
+}
+
+
+template <class T>
+inline unsigned int
+Box<Vec3<T> >::majorAxis() const
+{
+    unsigned int major = 0;
+    Vec3<T>     s     = size();
+
+    if (s[1] > s[major])
+        major = 1;
+
+    if (s[2] > s[major])
+        major = 2;
+
+    return major;
+}
+
+
+
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathBoxAlgo.h b/3rdparty/openexr/Imath/ImathBoxAlgo.h
new file mode 100644 (file)
index 0000000..3d6e4e0
--- /dev/null
@@ -0,0 +1,1015 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002-2010, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHBOXALGO_H
+#define INCLUDED_IMATHBOXALGO_H
+
+
+//---------------------------------------------------------------------------
+//
+//     This file contains algorithms applied to or in conjunction
+//     with bounding boxes (Imath::Box). These algorithms require
+//     more headers to compile. The assumption made is that these
+//     functions are called much less often than the basic box
+//     functions or these functions require more support classes.
+//
+//     Contains:
+//
+//     T clip<T>(const T& in, const Box<T>& box)
+//
+//     Vec3<T> closestPointOnBox(const Vec3<T>&, const Box<Vec3<T>>& )
+//
+//     Vec3<T> closestPointInBox(const Vec3<T>&, const Box<Vec3<T>>& )
+//
+//     Box< Vec3<S> > transform(const Box<Vec3<S>>&, const Matrix44<T>&)
+//     Box< Vec3<S> > affineTransform(const Box<Vec3<S>>&, const Matrix44<T>&)
+//
+//     void transform(const Box<Vec3<S>>&, const Matrix44<T>&, Box<V3ec3<S>>&)
+//     void affineTransform(const Box<Vec3<S>>&,
+//                           const Matrix44<T>&,
+//                           Box<V3ec3<S>>&)
+//
+//     bool findEntryAndExitPoints(const Line<T> &line,
+//                                 const Box< Vec3<T> > &box,
+//                                 Vec3<T> &enterPoint,
+//                                 Vec3<T> &exitPoint)
+//
+//     bool intersects(const Box<Vec3<T>> &box, 
+//                     const Line3<T> &ray, 
+//                     Vec3<T> intersectionPoint)
+//
+//     bool intersects(const Box<Vec3<T>> &box, const Line3<T> &ray)
+//
+//---------------------------------------------------------------------------
+
+#include "ImathBox.h"
+#include "ImathMatrix.h"
+#include "ImathLineAlgo.h"
+#include "ImathPlane.h"
+
+namespace Imath {
+
+
+template <class T>
+inline T
+clip (const T &p, const Box<T> &box)
+{
+    //
+    // Clip the coordinates of a point, p, against a box.
+    // The result, q, is the closest point to p that is inside the box.
+    //
+
+    T q;
+
+    for (int i = 0; i < int (box.min.dimensions()); i++)
+    {
+       if (p[i] < box.min[i])
+           q[i] = box.min[i];
+       else if (p[i] > box.max[i])
+           q[i] = box.max[i];
+       else
+           q[i] = p[i];
+    }
+
+    return q;
+}
+
+
+template <class T>
+inline T
+closestPointInBox (const T &p, const Box<T> &box)
+{
+    return clip (p, box);
+}
+
+
+template <class T>
+Vec3<T>
+closestPointOnBox (const Vec3<T> &p, const Box< Vec3<T> > &box)
+{
+    //
+    // Find the point, q, on the surface of
+    // the box, that is closest to point p.
+    //
+    // If the box is empty, return p.
+    //
+
+    if (box.isEmpty())
+       return p;
+
+    Vec3<T> q = closestPointInBox (p, box);
+
+    if (q == p)
+    {
+       Vec3<T> d1 = p - box.min;
+       Vec3<T> d2 = box.max - p;
+
+       Vec3<T> d ((d1.x < d2.x)? d1.x: d2.x,
+                  (d1.y < d2.y)? d1.y: d2.y,
+                  (d1.z < d2.z)? d1.z: d2.z);
+
+       if (d.x < d.y && d.x < d.z)
+       {
+           q.x = (d1.x < d2.x)? box.min.x: box.max.x;
+       }
+       else if (d.y < d.z)
+       {
+           q.y = (d1.y < d2.y)? box.min.y: box.max.y;
+       }
+       else
+       {
+           q.z = (d1.z < d2.z)? box.min.z: box.max.z;
+       }
+    }
+
+    return q;
+}
+
+
+template <class S, class T>
+Box< Vec3<S> >
+transform (const Box< Vec3<S> > &box, const Matrix44<T> &m)
+{
+    //
+    // Transform a 3D box by a matrix, and compute a new box that
+    // tightly encloses the transformed box.
+    //
+    // If m is an affine transform, then we use James Arvo's fast
+    // method as described in "Graphics Gems", Academic Press, 1990,
+    // pp. 548-550.
+    //
+
+    //
+    // A transformed empty box is still empty, and a transformed infinite box
+    // is still infinite
+    //
+
+    if (box.isEmpty() || box.isInfinite())
+       return box;
+
+    //
+    // If the last column of m is (0 0 0 1) then m is an affine
+    // transform, and we use the fast Graphics Gems trick.
+    //
+
+    if (m[0][3] == 0 && m[1][3] == 0 && m[2][3] == 0 && m[3][3] == 1)
+    {
+       Box< Vec3<S> > newBox;
+
+       for (int i = 0; i < 3; i++) 
+        {
+           newBox.min[i] = newBox.max[i] = (S) m[3][i];
+
+           for (int j = 0; j < 3; j++) 
+            {
+               S a, b;
+
+               a = (S) m[j][i] * box.min[j];
+               b = (S) m[j][i] * box.max[j];
+
+               if (a < b) 
+                {
+                   newBox.min[i] += a;
+                   newBox.max[i] += b;
+               }
+               else 
+                {
+                   newBox.min[i] += b;
+                   newBox.max[i] += a;
+               }
+           }
+       }
+
+       return newBox;
+    }
+
+    //
+    // M is a projection matrix.  Do things the naive way:
+    // Transform the eight corners of the box, and find an
+    // axis-parallel box that encloses the transformed corners.
+    //
+
+    Vec3<S> points[8];
+
+    points[0][0] = points[1][0] = points[2][0] = points[3][0] = box.min[0];
+    points[4][0] = points[5][0] = points[6][0] = points[7][0] = box.max[0];
+
+    points[0][1] = points[1][1] = points[4][1] = points[5][1] = box.min[1];
+    points[2][1] = points[3][1] = points[6][1] = points[7][1] = box.max[1];
+
+    points[0][2] = points[2][2] = points[4][2] = points[6][2] = box.min[2];
+    points[1][2] = points[3][2] = points[5][2] = points[7][2] = box.max[2];
+
+    Box< Vec3<S> > newBox;
+
+    for (int i = 0; i < 8; i++) 
+       newBox.extendBy (points[i] * m);
+
+    return newBox;
+}
+
+template <class S, class T>
+void
+transform (const Box< Vec3<S> > &box,
+           const Matrix44<T>    &m,
+           Box< Vec3<S> >       &result)
+{
+    //
+    // Transform a 3D box by a matrix, and compute a new box that
+    // tightly encloses the transformed box.
+    //
+    // If m is an affine transform, then we use James Arvo's fast
+    // method as described in "Graphics Gems", Academic Press, 1990,
+    // pp. 548-550.
+    //
+
+    //
+    // A transformed empty box is still empty, and a transformed infinite
+    // box is still infinite
+    //
+
+    if (box.isEmpty() || box.isInfinite())
+    {
+       return;
+    }
+
+    //
+    // If the last column of m is (0 0 0 1) then m is an affine
+    // transform, and we use the fast Graphics Gems trick.
+    //
+
+    if (m[0][3] == 0 && m[1][3] == 0 && m[2][3] == 0 && m[3][3] == 1)
+    {
+       for (int i = 0; i < 3; i++) 
+        {
+           result.min[i] = result.max[i] = (S) m[3][i];
+
+           for (int j = 0; j < 3; j++) 
+            {
+               S a, b;
+
+               a = (S) m[j][i] * box.min[j];
+               b = (S) m[j][i] * box.max[j];
+
+               if (a < b) 
+                {
+                   result.min[i] += a;
+                   result.max[i] += b;
+               }
+               else 
+                {
+                   result.min[i] += b;
+                   result.max[i] += a;
+               }
+           }
+       }
+
+       return;
+    }
+
+    //
+    // M is a projection matrix.  Do things the naive way:
+    // Transform the eight corners of the box, and find an
+    // axis-parallel box that encloses the transformed corners.
+    //
+
+    Vec3<S> points[8];
+
+    points[0][0] = points[1][0] = points[2][0] = points[3][0] = box.min[0];
+    points[4][0] = points[5][0] = points[6][0] = points[7][0] = box.max[0];
+
+    points[0][1] = points[1][1] = points[4][1] = points[5][1] = box.min[1];
+    points[2][1] = points[3][1] = points[6][1] = points[7][1] = box.max[1];
+
+    points[0][2] = points[2][2] = points[4][2] = points[6][2] = box.min[2];
+    points[1][2] = points[3][2] = points[5][2] = points[7][2] = box.max[2];
+
+    for (int i = 0; i < 8; i++) 
+       result.extendBy (points[i] * m);
+}
+
+
+template <class S, class T>
+Box< Vec3<S> >
+affineTransform (const Box< Vec3<S> > &box, const Matrix44<T> &m)
+{
+    //
+    // Transform a 3D box by a matrix whose rightmost column
+    // is (0 0 0 1), and compute a new box that tightly encloses
+    // the transformed box.
+    //
+    // As in the transform() function, above, we use James Arvo's
+    // fast method.
+    //
+
+    if (box.isEmpty() || box.isInfinite())
+    {
+       //
+       // A transformed empty or infinite box is still empty or infinite
+       //
+
+       return box;
+    }
+
+    Box< Vec3<S> > newBox;
+
+    for (int i = 0; i < 3; i++) 
+    {
+       newBox.min[i] = newBox.max[i] = (S) m[3][i];
+
+       for (int j = 0; j < 3; j++) 
+       {
+           S a, b;
+
+           a = (S) m[j][i] * box.min[j];
+           b = (S) m[j][i] * box.max[j];
+
+           if (a < b) 
+           {
+               newBox.min[i] += a;
+               newBox.max[i] += b;
+           }
+           else 
+           {
+               newBox.min[i] += b;
+               newBox.max[i] += a;
+           }
+       }
+    }
+
+    return newBox;
+}
+
+template <class S, class T>
+void
+affineTransform (const Box< Vec3<S> > &box,
+                 const Matrix44<T>    &m,
+                 Box<Vec3<S> >        &result)
+{
+    //
+    // Transform a 3D box by a matrix whose rightmost column
+    // is (0 0 0 1), and compute a new box that tightly encloses
+    // the transformed box.
+    //
+    // As in the transform() function, above, we use James Arvo's
+    // fast method.
+    //
+
+    if (box.isEmpty())
+    {
+       //
+       // A transformed empty box is still empty
+       //
+        result.makeEmpty();
+       return;
+    }
+
+    if (box.isInfinite())
+    {
+       //
+       // A transformed infinite box is still infinite
+       //
+        result.makeInfinite();
+       return;
+    }
+
+    for (int i = 0; i < 3; i++) 
+    {
+       result.min[i] = result.max[i] = (S) m[3][i];
+
+       for (int j = 0; j < 3; j++) 
+       {
+           S a, b;
+
+           a = (S) m[j][i] * box.min[j];
+           b = (S) m[j][i] * box.max[j];
+
+           if (a < b) 
+           {
+               result.min[i] += a;
+               result.max[i] += b;
+           }
+           else 
+           {
+               result.min[i] += b;
+               result.max[i] += a;
+           }
+       }
+    }
+}
+
+
+template <class T>
+bool
+findEntryAndExitPoints (const Line3<T> &r,
+                       const Box<Vec3<T> > &b,
+                       Vec3<T> &entry,
+                       Vec3<T> &exit)
+{
+    //
+    // Compute the points where a ray, r, enters and exits a box, b:
+    //
+    // findEntryAndExitPoints() returns
+    //
+    //     - true if the ray starts inside the box or if the
+    //       ray starts outside and intersects the box
+    //
+    //    - false otherwise (that is, if the ray does not
+    //       intersect the box)
+    //
+    // The entry and exit points are
+    //
+    //     - points on two of the faces of the box when
+    //       findEntryAndExitPoints() returns true
+    //       (The entry end exit points may be on either
+    //       side of the ray's origin)
+    //
+    //     - undefined when findEntryAndExitPoints()
+    //       returns false
+    //
+
+    if (b.isEmpty())
+    {
+       //
+       // No ray intersects an empty box
+       //
+
+       return false;
+    }
+
+    //
+    // The following description assumes that the ray's origin is outside
+    // the box, but the code below works even if the origin is inside the
+    // box:
+    //
+    // Between one and three "frontfacing" sides of the box are oriented
+    // towards the ray's origin, and between one and three "backfacing"
+    // sides are oriented away from the ray's origin.
+    // We intersect the ray with the planes that contain the sides of the
+    // box, and compare the distances between the ray's origin and the
+    // ray-plane intersections.  The ray intersects the box if the most
+    // distant frontfacing intersection is nearer than the nearest
+    // backfacing intersection.  If the ray does intersect the box, then
+    // the most distant frontfacing ray-plane intersection is the entry
+    // point and the nearest backfacing ray-plane intersection is the
+    // exit point.
+    //
+
+    const T TMAX = limits<T>::max();
+
+    T tFrontMax = -TMAX;
+    T tBackMin = TMAX;
+
+    //
+    // Minimum and maximum X sides.
+    //
+
+    if (r.dir.x >= 0)
+    {
+       T d1 = b.max.x - r.pos.x;
+       T d2 = b.min.x - r.pos.x;
+
+       if (r.dir.x > 1 ||
+           (abs (d1) < TMAX * r.dir.x &&
+            abs (d2) < TMAX * r.dir.x))
+       {
+           T t1 = d1 / r.dir.x;
+           T t2 = d2 / r.dir.x;
+
+           if (tBackMin > t1)
+           {
+               tBackMin = t1;
+
+               exit.x = b.max.x; 
+               exit.y = clamp (r.pos.y + t1 * r.dir.y, b.min.y, b.max.y);
+               exit.z = clamp (r.pos.z + t1 * r.dir.z, b.min.z, b.max.z);
+           }
+
+           if (tFrontMax < t2)
+           {
+               tFrontMax = t2;
+
+               entry.x = b.min.x; 
+               entry.y = clamp (r.pos.y + t2 * r.dir.y, b.min.y, b.max.y);
+               entry.z = clamp (r.pos.z + t2 * r.dir.z, b.min.z, b.max.z);
+           }
+       }
+       else if (r.pos.x < b.min.x || r.pos.x > b.max.x)
+       {
+           return false;
+       }
+    }
+    else // r.dir.x < 0
+    {
+       T d1 = b.min.x - r.pos.x;
+       T d2 = b.max.x - r.pos.x;
+
+       if (r.dir.x < -1 ||
+           (abs (d1) < -TMAX * r.dir.x &&
+            abs (d2) < -TMAX * r.dir.x))
+       {
+           T t1 = d1 / r.dir.x;
+           T t2 = d2 / r.dir.x;
+
+           if (tBackMin > t1)
+           {
+               tBackMin = t1;
+
+               exit.x = b.min.x; 
+               exit.y = clamp (r.pos.y + t1 * r.dir.y, b.min.y, b.max.y);
+               exit.z = clamp (r.pos.z + t1 * r.dir.z, b.min.z, b.max.z);
+           }
+
+           if (tFrontMax < t2)
+           {
+               tFrontMax = t2;
+
+               entry.x = b.max.x; 
+               entry.y = clamp (r.pos.y + t2 * r.dir.y, b.min.y, b.max.y);
+               entry.z = clamp (r.pos.z + t2 * r.dir.z, b.min.z, b.max.z);
+           }
+       }
+       else if (r.pos.x < b.min.x || r.pos.x > b.max.x)
+       {
+           return false;
+       }
+    }
+
+    //
+    // Minimum and maximum Y sides.
+    //
+
+    if (r.dir.y >= 0)
+    {
+       T d1 = b.max.y - r.pos.y;
+       T d2 = b.min.y - r.pos.y;
+
+       if (r.dir.y > 1 ||
+           (abs (d1) < TMAX * r.dir.y &&
+            abs (d2) < TMAX * r.dir.y))
+       {
+           T t1 = d1 / r.dir.y;
+           T t2 = d2 / r.dir.y;
+
+           if (tBackMin > t1)
+           {
+               tBackMin = t1;
+
+               exit.x = clamp (r.pos.x + t1 * r.dir.x, b.min.x, b.max.x);
+               exit.y = b.max.y; 
+               exit.z = clamp (r.pos.z + t1 * r.dir.z, b.min.z, b.max.z);
+           }
+
+           if (tFrontMax < t2)
+           {
+               tFrontMax = t2;
+
+               entry.x = clamp (r.pos.x + t2 * r.dir.x, b.min.x, b.max.x);
+               entry.y = b.min.y; 
+               entry.z = clamp (r.pos.z + t2 * r.dir.z, b.min.z, b.max.z);
+           }
+       }
+       else if (r.pos.y < b.min.y || r.pos.y > b.max.y)
+       {
+           return false;
+       }
+    }
+    else // r.dir.y < 0
+    {
+       T d1 = b.min.y - r.pos.y;
+       T d2 = b.max.y - r.pos.y;
+
+       if (r.dir.y < -1 ||
+           (abs (d1) < -TMAX * r.dir.y &&
+            abs (d2) < -TMAX * r.dir.y))
+       {
+           T t1 = d1 / r.dir.y;
+           T t2 = d2 / r.dir.y;
+
+           if (tBackMin > t1)
+           {
+               tBackMin = t1;
+
+               exit.x = clamp (r.pos.x + t1 * r.dir.x, b.min.x, b.max.x);
+               exit.y = b.min.y; 
+               exit.z = clamp (r.pos.z + t1 * r.dir.z, b.min.z, b.max.z);
+           }
+
+           if (tFrontMax < t2)
+           {
+               tFrontMax = t2;
+
+               entry.x = clamp (r.pos.x + t2 * r.dir.x, b.min.x, b.max.x);
+               entry.y = b.max.y; 
+               entry.z = clamp (r.pos.z + t2 * r.dir.z, b.min.z, b.max.z);
+           }
+       }
+       else if (r.pos.y < b.min.y || r.pos.y > b.max.y)
+       {
+           return false;
+       }
+    }
+
+    //
+    // Minimum and maximum Z sides.
+    //
+
+    if (r.dir.z >= 0)
+    {
+       T d1 = b.max.z - r.pos.z;
+       T d2 = b.min.z - r.pos.z;
+
+       if (r.dir.z > 1 ||
+           (abs (d1) < TMAX * r.dir.z &&
+            abs (d2) < TMAX * r.dir.z))
+       {
+           T t1 = d1 / r.dir.z;
+           T t2 = d2 / r.dir.z;
+
+           if (tBackMin > t1)
+           {
+               tBackMin = t1;
+
+               exit.x = clamp (r.pos.x + t1 * r.dir.x, b.min.x, b.max.x);
+               exit.y = clamp (r.pos.y + t1 * r.dir.y, b.min.y, b.max.y);
+               exit.z = b.max.z; 
+           }
+
+           if (tFrontMax < t2)
+           {
+               tFrontMax = t2;
+
+               entry.x = clamp (r.pos.x + t2 * r.dir.x, b.min.x, b.max.x);
+               entry.y = clamp (r.pos.y + t2 * r.dir.y, b.min.y, b.max.y);
+               entry.z = b.min.z; 
+           }
+       }
+       else if (r.pos.z < b.min.z || r.pos.z > b.max.z)
+       {
+           return false;
+       }
+    }
+    else // r.dir.z < 0
+    {
+       T d1 = b.min.z - r.pos.z;
+       T d2 = b.max.z - r.pos.z;
+
+       if (r.dir.z < -1 ||
+           (abs (d1) < -TMAX * r.dir.z &&
+            abs (d2) < -TMAX * r.dir.z))
+       {
+           T t1 = d1 / r.dir.z;
+           T t2 = d2 / r.dir.z;
+
+           if (tBackMin > t1)
+           {
+               tBackMin = t1;
+
+               exit.x = clamp (r.pos.x + t1 * r.dir.x, b.min.x, b.max.x);
+               exit.y = clamp (r.pos.y + t1 * r.dir.y, b.min.y, b.max.y);
+               exit.z = b.min.z; 
+           }
+
+           if (tFrontMax < t2)
+           {
+               tFrontMax = t2;
+
+               entry.x = clamp (r.pos.x + t2 * r.dir.x, b.min.x, b.max.x);
+               entry.y = clamp (r.pos.y + t2 * r.dir.y, b.min.y, b.max.y);
+               entry.z = b.max.z; 
+           }
+       }
+       else if (r.pos.z < b.min.z || r.pos.z > b.max.z)
+       {
+           return false;
+       }
+    }
+
+    return tFrontMax <= tBackMin;
+}
+
+
+template<class T>
+bool
+intersects (const Box< Vec3<T> > &b, const Line3<T> &r, Vec3<T> &ip)
+{
+    //
+    // Intersect a ray, r, with a box, b, and compute the intersection
+    // point, ip:
+    //
+    // intersect() returns
+    //
+    //     - true if the ray starts inside the box or if the
+    //       ray starts outside and intersects the box
+    //
+    //     - false if the ray starts outside the box and intersects it,
+    //       but the intersection is behind the ray's origin.
+    //
+    //     - false if the ray starts outside and does not intersect it
+    //
+    // The intersection point is
+    //
+    //     - the ray's origin if the ray starts inside the box
+    //
+    //     - a point on one of the faces of the box if the ray
+    //       starts outside the box
+    //
+    //     - undefined when intersect() returns false
+    //
+
+    if (b.isEmpty())
+    {
+       //
+       // No ray intersects an empty box
+       //
+
+       return false;
+    }
+
+    if (b.intersects (r.pos))
+    {
+       //
+       // The ray starts inside the box
+       //
+
+       ip = r.pos;
+       return true;
+    }
+
+    //
+    // The ray starts outside the box.  Between one and three "frontfacing"
+    // sides of the box are oriented towards the ray, and between one and
+    // three "backfacing" sides are oriented away from the ray.
+    // We intersect the ray with the planes that contain the sides of the
+    // box, and compare the distances between ray's origin and the ray-plane
+    // intersections.
+    // The ray intersects the box if the most distant frontfacing intersection
+    // is nearer than the nearest backfacing intersection.  If the ray does
+    // intersect the box, then the most distant frontfacing ray-plane
+    // intersection is the ray-box intersection.
+    //
+
+    const T TMAX = limits<T>::max();
+
+    T tFrontMax = -1;
+    T tBackMin = TMAX;
+
+    //
+    // Minimum and maximum X sides.
+    //
+
+    if (r.dir.x > 0)
+    {
+       if (r.pos.x > b.max.x)
+           return false;
+
+       T d = b.max.x - r.pos.x;
+
+       if (r.dir.x > 1 || d < TMAX * r.dir.x)
+       {
+           T t = d / r.dir.x;
+
+           if (tBackMin > t)
+               tBackMin = t;
+       }
+
+       if (r.pos.x <= b.min.x)
+       {
+           T d = b.min.x - r.pos.x;
+           T t = (r.dir.x > 1 || d < TMAX * r.dir.x)? d / r.dir.x: TMAX;
+
+           if (tFrontMax < t)
+           {
+               tFrontMax = t;
+
+               ip.x = b.min.x; 
+               ip.y = clamp (r.pos.y + t * r.dir.y, b.min.y, b.max.y);
+               ip.z = clamp (r.pos.z + t * r.dir.z, b.min.z, b.max.z);
+           }
+       }
+    }
+    else if (r.dir.x < 0)
+    {
+       if (r.pos.x < b.min.x)
+           return false;
+
+       T d = b.min.x - r.pos.x;
+
+       if (r.dir.x < -1 || d > TMAX * r.dir.x)
+       {
+           T t = d / r.dir.x;
+
+           if (tBackMin > t)
+               tBackMin = t;
+       }
+
+       if (r.pos.x >= b.max.x)
+       {
+           T d = b.max.x - r.pos.x;
+           T t = (r.dir.x < -1 || d > TMAX * r.dir.x)? d / r.dir.x: TMAX;
+
+           if (tFrontMax < t)
+           {
+               tFrontMax = t;
+
+               ip.x = b.max.x; 
+               ip.y = clamp (r.pos.y + t * r.dir.y, b.min.y, b.max.y);
+               ip.z = clamp (r.pos.z + t * r.dir.z, b.min.z, b.max.z);
+           }
+       }
+    }
+    else // r.dir.x == 0
+    {
+       if (r.pos.x < b.min.x || r.pos.x > b.max.x)
+           return false;
+    }
+
+    //
+    // Minimum and maximum Y sides.
+    //
+
+    if (r.dir.y > 0)
+    {
+       if (r.pos.y > b.max.y)
+           return false;
+
+       T d = b.max.y - r.pos.y;
+
+       if (r.dir.y > 1 || d < TMAX * r.dir.y)
+       {
+           T t = d / r.dir.y;
+
+           if (tBackMin > t)
+               tBackMin = t;
+       }
+
+       if (r.pos.y <= b.min.y)
+       {
+           T d = b.min.y - r.pos.y;
+           T t = (r.dir.y > 1 || d < TMAX * r.dir.y)? d / r.dir.y: TMAX;
+
+           if (tFrontMax < t)
+           {
+               tFrontMax = t;
+
+               ip.x = clamp (r.pos.x + t * r.dir.x, b.min.x, b.max.x);
+               ip.y = b.min.y; 
+               ip.z = clamp (r.pos.z + t * r.dir.z, b.min.z, b.max.z);
+           }
+       }
+    }
+    else if (r.dir.y < 0)
+    {
+       if (r.pos.y < b.min.y)
+           return false;
+
+       T d = b.min.y - r.pos.y;
+
+       if (r.dir.y < -1 || d > TMAX * r.dir.y)
+       {
+           T t = d / r.dir.y;
+
+           if (tBackMin > t)
+               tBackMin = t;
+       }
+
+       if (r.pos.y >= b.max.y)
+       {
+           T d = b.max.y - r.pos.y;
+           T t = (r.dir.y < -1 || d > TMAX * r.dir.y)? d / r.dir.y: TMAX;
+           
+           if (tFrontMax < t)
+           {
+               tFrontMax = t;
+
+               ip.x = clamp (r.pos.x + t * r.dir.x, b.min.x, b.max.x);
+               ip.y = b.max.y; 
+               ip.z = clamp (r.pos.z + t * r.dir.z, b.min.z, b.max.z);
+           }
+       }
+    }
+    else // r.dir.y == 0
+    {
+       if (r.pos.y < b.min.y || r.pos.y > b.max.y)
+           return false;
+    }
+
+    //
+    // Minimum and maximum Z sides.
+    //
+
+    if (r.dir.z > 0)
+    {
+       if (r.pos.z > b.max.z)
+           return false;
+
+       T d = b.max.z - r.pos.z;
+
+       if (r.dir.z > 1 || d < TMAX * r.dir.z)
+       {
+           T t = d / r.dir.z;
+
+           if (tBackMin > t)
+               tBackMin = t;
+       }
+
+       if (r.pos.z <= b.min.z)
+       {
+           T d = b.min.z - r.pos.z;
+           T t = (r.dir.z > 1 || d < TMAX * r.dir.z)? d / r.dir.z: TMAX;
+           
+           if (tFrontMax < t)
+           {
+               tFrontMax = t;
+
+               ip.x = clamp (r.pos.x + t * r.dir.x, b.min.x, b.max.x);
+               ip.y = clamp (r.pos.y + t * r.dir.y, b.min.y, b.max.y);
+               ip.z = b.min.z; 
+           }
+       }
+    }
+    else if (r.dir.z < 0)
+    {
+       if (r.pos.z < b.min.z)
+           return false;
+
+       T d = b.min.z - r.pos.z;
+
+       if (r.dir.z < -1 || d > TMAX * r.dir.z)
+       {
+           T t = d / r.dir.z;
+
+           if (tBackMin > t)
+               tBackMin = t;
+       }
+
+       if (r.pos.z >= b.max.z)
+       {
+           T d = b.max.z - r.pos.z;
+           T t = (r.dir.z < -1 || d > TMAX * r.dir.z)? d / r.dir.z: TMAX;
+           
+           if (tFrontMax < t)
+           {
+               tFrontMax = t;
+
+               ip.x = clamp (r.pos.x + t * r.dir.x, b.min.x, b.max.x);
+               ip.y = clamp (r.pos.y + t * r.dir.y, b.min.y, b.max.y);
+               ip.z = b.max.z; 
+           }
+       }
+    }
+    else // r.dir.z == 0
+    {
+       if (r.pos.z < b.min.z || r.pos.z > b.max.z)
+           return false;
+    }
+
+    return tFrontMax <= tBackMin;
+}
+
+
+template<class T>
+bool
+intersects (const Box< Vec3<T> > &box, const Line3<T> &ray)
+{
+    Vec3<T> ignored;
+    return intersects (box, ray, ignored);
+}
+
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathColor.h b/3rdparty/openexr/Imath/ImathColor.h
new file mode 100644 (file)
index 0000000..605f10b
--- /dev/null
@@ -0,0 +1,734 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHCOLOR_H
+#define INCLUDED_IMATHCOLOR_H
+
+//----------------------------------------------------
+//
+//     A three and four component color class template.
+//
+//----------------------------------------------------
+
+#include "ImathVec.h"
+#include "half.h"
+
+namespace Imath {
+
+
+template <class T>
+class Color3: public Vec3 <T>
+{
+  public:
+
+    //-------------
+    // Constructors
+    //-------------
+
+    Color3 ();                 // no initialization
+    explicit Color3 (T a);     // (a a a)
+    Color3 (T a, T b, T c);    // (a b c)
+
+
+    //---------------------------------
+    // Copy constructors and assignment
+    //---------------------------------
+
+    Color3 (const Color3 &c);
+    template <class S> Color3 (const Vec3<S> &v);
+
+    const Color3 &     operator = (const Color3 &c);
+
+
+    //------------------------
+    // Component-wise addition
+    //------------------------
+
+    const Color3 &     operator += (const Color3 &c);
+    Color3             operator + (const Color3 &c) const;
+
+
+    //---------------------------
+    // Component-wise subtraction
+    //---------------------------
+
+    const Color3 &     operator -= (const Color3 &c);
+    Color3             operator - (const Color3 &c) const;
+
+
+    //------------------------------------
+    // Component-wise multiplication by -1
+    //------------------------------------
+
+    Color3             operator - () const;
+    const Color3 &     negate ();
+
+
+    //------------------------------
+    // Component-wise multiplication
+    //------------------------------
+
+    const Color3 &     operator *= (const Color3 &c);
+    const Color3 &     operator *= (T a);
+    Color3             operator * (const Color3 &c) const;
+    Color3             operator * (T a) const;
+
+
+    //------------------------
+    // Component-wise division
+    //------------------------
+
+    const Color3 &     operator /= (const Color3 &c);
+    const Color3 &     operator /= (T a);
+    Color3             operator / (const Color3 &c) const;
+    Color3             operator / (T a) const;
+};
+
+template <class T> class Color4
+{
+  public:
+
+    //-------------------
+    // Access to elements
+    //-------------------
+
+    T                  r, g, b, a;
+
+    T &                        operator [] (int i);
+    const T &          operator [] (int i) const;
+
+
+    //-------------
+    // Constructors
+    //-------------
+
+    Color4 ();                         // no initialization
+    explicit Color4 (T a);             // (a a a a)
+    Color4 (T a, T b, T c, T d);       // (a b c d)
+
+
+    //---------------------------------
+    // Copy constructors and assignment
+    //---------------------------------
+
+    Color4 (const Color4 &v);
+    template <class S> Color4 (const Color4<S> &v);
+
+    const Color4 &     operator = (const Color4 &v);
+
+
+    //----------------------
+    // Compatibility with Sb
+    //----------------------
+
+    template <class S>
+    void               setValue (S a, S b, S c, S d);
+
+    template <class S>
+    void               setValue (const Color4<S> &v);
+
+    template <class S>
+    void               getValue (S &a, S &b, S &c, S &d) const;
+
+    template <class S>
+    void               getValue (Color4<S> &v) const;
+
+    T *                        getValue();
+    const T *          getValue() const;
+
+
+    //---------
+    // Equality
+    //---------
+
+    template <class S>
+    bool               operator == (const Color4<S> &v) const;
+
+    template <class S>
+    bool               operator != (const Color4<S> &v) const;
+
+
+    //------------------------
+    // Component-wise addition
+    //------------------------
+
+    const Color4 &     operator += (const Color4 &v);
+    Color4             operator + (const Color4 &v) const;
+
+
+    //---------------------------
+    // Component-wise subtraction
+    //---------------------------
+
+    const Color4 &     operator -= (const Color4 &v);
+    Color4             operator - (const Color4 &v) const;
+
+
+    //------------------------------------
+    // Component-wise multiplication by -1
+    //------------------------------------
+
+    Color4             operator - () const;
+    const Color4 &     negate ();
+
+
+    //------------------------------
+    // Component-wise multiplication
+    //------------------------------
+
+    const Color4 &     operator *= (const Color4 &v);
+    const Color4 &     operator *= (T a);
+    Color4             operator * (const Color4 &v) const;
+    Color4             operator * (T a) const;
+
+
+    //------------------------
+    // Component-wise division
+    //------------------------
+
+    const Color4 &     operator /= (const Color4 &v);
+    const Color4 &     operator /= (T a);
+    Color4             operator / (const Color4 &v) const;
+    Color4             operator / (T a) const;
+
+
+    //----------------------------------------------------------
+    // Number of dimensions, i.e. number of elements in a Color4
+    //----------------------------------------------------------
+
+    static unsigned int        dimensions() {return 4;}
+
+
+    //-------------------------------------------------
+    // Limitations of type T (see also class limits<T>)
+    //-------------------------------------------------
+
+    static T           baseTypeMin()           {return limits<T>::min();}
+    static T           baseTypeMax()           {return limits<T>::max();}
+    static T           baseTypeSmallest()      {return limits<T>::smallest();}
+    static T           baseTypeEpsilon()       {return limits<T>::epsilon();}
+
+
+    //--------------------------------------------------------------
+    // Base type -- in templates, which accept a parameter, V, which
+    // could be a Color4<T>, you can refer to T as
+    // V::BaseType
+    //--------------------------------------------------------------
+
+    typedef T          BaseType;
+};
+
+//--------------
+// Stream output
+//--------------
+
+template <class T>
+std::ostream & operator << (std::ostream &s, const Color4<T> &v);
+
+//----------------------------------------------------
+// Reverse multiplication: S * Color4<T>
+//----------------------------------------------------
+
+template <class S, class T> Color4<T>  operator * (S a, const Color4<T> &v);
+
+//-------------------------
+// Typedefs for convenience
+//-------------------------
+
+typedef Color3<float>          Color3f;
+typedef Color3<half>           Color3h;
+typedef Color3<unsigned char>  Color3c;
+typedef Color3<half>           C3h;
+typedef Color3<float>          C3f;
+typedef Color3<unsigned char>  C3c;
+typedef Color4<float>          Color4f;
+typedef Color4<half>           Color4h;
+typedef Color4<unsigned char>  Color4c;
+typedef Color4<float>          C4f;
+typedef Color4<half>           C4h;
+typedef Color4<unsigned char>  C4c;
+typedef unsigned int           PackedColor;
+
+
+//-------------------------
+// Implementation of Color3
+//-------------------------
+
+template <class T>
+inline
+Color3<T>::Color3 (): Vec3 <T> ()
+{
+    // empty
+}
+
+template <class T>
+inline
+Color3<T>::Color3 (T a): Vec3 <T> (a)
+{
+    // empty
+}
+
+template <class T>
+inline
+Color3<T>::Color3 (T a, T b, T c): Vec3 <T> (a, b, c)
+{
+    // empty
+}
+
+template <class T>
+inline
+Color3<T>::Color3 (const Color3 &c): Vec3 <T> (c)
+{
+    // empty
+}
+
+template <class T>
+template <class S>
+inline
+Color3<T>::Color3 (const Vec3<S> &v): Vec3 <T> (v)
+{
+    //empty
+}
+
+template <class T>
+inline const Color3<T> &
+Color3<T>::operator = (const Color3 &c)
+{
+    *((Vec3<T> *) this) = c;
+    return *this;
+}
+
+template <class T>
+inline const Color3<T> &
+Color3<T>::operator += (const Color3 &c)
+{
+    *((Vec3<T> *) this) += c;
+    return *this;
+}
+
+template <class T>
+inline Color3<T>       
+Color3<T>::operator + (const Color3 &c) const
+{
+    return Color3 (*(Vec3<T> *)this + (const Vec3<T> &)c);
+}
+
+template <class T>
+inline const Color3<T> &
+Color3<T>::operator -= (const Color3 &c)
+{
+    *((Vec3<T> *) this) -= c;
+    return *this;
+}
+
+template <class T>
+inline Color3<T>       
+Color3<T>::operator - (const Color3 &c) const
+{
+    return Color3 (*(Vec3<T> *)this - (const Vec3<T> &)c);
+}
+
+template <class T>
+inline Color3<T>       
+Color3<T>::operator - () const
+{
+    return Color3 (-(*(Vec3<T> *)this));
+}
+
+template <class T>
+inline const Color3<T> &
+Color3<T>::negate ()
+{
+    ((Vec3<T> *) this)->negate();
+    return *this;
+}
+
+template <class T>
+inline const Color3<T> &
+Color3<T>::operator *= (const Color3 &c)
+{
+    *((Vec3<T> *) this) *= c;
+    return *this;
+}
+
+template <class T>
+inline const Color3<T> &
+Color3<T>::operator *= (T a)
+{
+    *((Vec3<T> *) this) *= a;
+    return *this;
+}
+
+template <class T>
+inline Color3<T>       
+Color3<T>::operator * (const Color3 &c) const
+{
+    return Color3 (*(Vec3<T> *)this * (const Vec3<T> &)c);
+}
+
+template <class T>
+inline Color3<T>       
+Color3<T>::operator * (T a) const
+{
+    return Color3 (*(Vec3<T> *)this * a);
+}
+
+template <class T>
+inline const Color3<T> &
+Color3<T>::operator /= (const Color3 &c)
+{
+    *((Vec3<T> *) this) /= c;
+    return *this;
+}
+
+template <class T>
+inline const Color3<T> &
+Color3<T>::operator /= (T a)
+{
+    *((Vec3<T> *) this) /= a;
+    return *this;
+}
+
+template <class T>
+inline Color3<T>       
+Color3<T>::operator / (const Color3 &c) const
+{
+    return Color3 (*(Vec3<T> *)this / (const Vec3<T> &)c);
+}
+
+template <class T>
+inline Color3<T>       
+Color3<T>::operator / (T a) const
+{
+    return Color3 (*(Vec3<T> *)this / a);
+}
+
+//-----------------------
+// Implementation of Color4
+//-----------------------
+
+template <class T>
+inline T &
+Color4<T>::operator [] (int i)
+{
+    return (&r)[i];
+}
+
+template <class T>
+inline const T &
+Color4<T>::operator [] (int i) const
+{
+    return (&r)[i];
+}
+
+template <class T>
+inline
+Color4<T>::Color4 ()
+{
+    // empty
+}
+
+template <class T>
+inline
+Color4<T>::Color4 (T x)
+{
+    r = g = b = a = x;
+}
+
+template <class T>
+inline
+Color4<T>::Color4 (T x, T y, T z, T w)
+{
+    r = x;
+    g = y;
+    b = z;
+    a = w;
+}
+
+template <class T>
+inline
+Color4<T>::Color4 (const Color4 &v)
+{
+    r = v.r;
+    g = v.g;
+    b = v.b;
+    a = v.a;
+}
+
+template <class T>
+template <class S>
+inline
+Color4<T>::Color4 (const Color4<S> &v)
+{
+    r = T (v.r);
+    g = T (v.g);
+    b = T (v.b);
+    a = T (v.a);
+}
+
+template <class T>
+inline const Color4<T> &
+Color4<T>::operator = (const Color4 &v)
+{
+    r = v.r;
+    g = v.g;
+    b = v.b;
+    a = v.a;
+    return *this;
+}
+
+template <class T>
+template <class S>
+inline void
+Color4<T>::setValue (S x, S y, S z, S w)
+{
+    r = T (x);
+    g = T (y);
+    b = T (z);
+    a = T (w);
+}
+
+template <class T>
+template <class S>
+inline void
+Color4<T>::setValue (const Color4<S> &v)
+{
+    r = T (v.r);
+    g = T (v.g);
+    b = T (v.b);
+    a = T (v.a);
+}
+
+template <class T>
+template <class S>
+inline void
+Color4<T>::getValue (S &x, S &y, S &z, S &w) const
+{
+    x = S (r);
+    y = S (g);
+    z = S (b);
+    w = S (a);
+}
+
+template <class T>
+template <class S>
+inline void
+Color4<T>::getValue (Color4<S> &v) const
+{
+    v.r = S (r);
+    v.g = S (g);
+    v.b = S (b);
+    v.a = S (a);
+}
+
+template <class T>
+inline T *
+Color4<T>::getValue()
+{
+    return (T *) &r;
+}
+
+template <class T>
+inline const T *
+Color4<T>::getValue() const
+{
+    return (const T *) &r;
+}
+
+template <class T>
+template <class S>
+inline bool
+Color4<T>::operator == (const Color4<S> &v) const
+{
+    return r == v.r && g == v.g && b == v.b && a == v.a;
+}
+
+template <class T>
+template <class S>
+inline bool
+Color4<T>::operator != (const Color4<S> &v) const
+{
+    return r != v.r || g != v.g || b != v.b || a != v.a;
+}
+
+template <class T>
+inline const Color4<T> &
+Color4<T>::operator += (const Color4 &v)
+{
+    r += v.r;
+    g += v.g;
+    b += v.b;
+    a += v.a;
+    return *this;
+}
+
+template <class T>
+inline Color4<T>
+Color4<T>::operator + (const Color4 &v) const
+{
+    return Color4 (r + v.r, g + v.g, b + v.b, a + v.a);
+}
+
+template <class T>
+inline const Color4<T> &
+Color4<T>::operator -= (const Color4 &v)
+{
+    r -= v.r;
+    g -= v.g;
+    b -= v.b;
+    a -= v.a;
+    return *this;
+}
+
+template <class T>
+inline Color4<T>
+Color4<T>::operator - (const Color4 &v) const
+{
+    return Color4 (r - v.r, g - v.g, b - v.b, a - v.a);
+}
+
+template <class T>
+inline Color4<T>
+Color4<T>::operator - () const
+{
+    return Color4 (-r, -g, -b, -a);
+}
+
+template <class T>
+inline const Color4<T> &
+Color4<T>::negate ()
+{
+    r = -r;
+    g = -g;
+    b = -b;
+    a = -a;
+    return *this;
+}
+
+template <class T>
+inline const Color4<T> &
+Color4<T>::operator *= (const Color4 &v)
+{
+    r *= v.r;
+    g *= v.g;
+    b *= v.b;
+    a *= v.a;
+    return *this;
+}
+
+template <class T>
+inline const Color4<T> &
+Color4<T>::operator *= (T x)
+{
+    r *= x;
+    g *= x;
+    b *= x;
+    a *= x;
+    return *this;
+}
+
+template <class T>
+inline Color4<T>
+Color4<T>::operator * (const Color4 &v) const
+{
+    return Color4 (r * v.r, g * v.g, b * v.b, a * v.a);
+}
+
+template <class T>
+inline Color4<T>
+Color4<T>::operator * (T x) const
+{
+    return Color4 (r * x, g * x, b * x, a * x);
+}
+
+template <class T>
+inline const Color4<T> &
+Color4<T>::operator /= (const Color4 &v)
+{
+    r /= v.r;
+    g /= v.g;
+    b /= v.b;
+    a /= v.a;
+    return *this;
+}
+
+template <class T>
+inline const Color4<T> &
+Color4<T>::operator /= (T x)
+{
+    r /= x;
+    g /= x;
+    b /= x;
+    a /= x;
+    return *this;
+}
+
+template <class T>
+inline Color4<T>
+Color4<T>::operator / (const Color4 &v) const
+{
+    return Color4 (r / v.r, g / v.g, b / v.b, a / v.a);
+}
+
+template <class T>
+inline Color4<T>
+Color4<T>::operator / (T x) const
+{
+    return Color4 (r / x, g / x, b / x, a / x);
+}
+
+
+template <class T>
+std::ostream &
+operator << (std::ostream &s, const Color4<T> &v)
+{
+    return s << '(' << v.r << ' ' << v.g << ' ' << v.b << ' ' << v.a << ')';
+}
+
+//-----------------------------------------
+// Implementation of reverse multiplication
+//-----------------------------------------
+
+template <class S, class T>
+inline Color4<T>
+operator * (S x, const Color4<T> &v)
+{
+    return Color4<T> (x * v.r, x * v.g, x * v.b, x * v.a);
+}
+
+} // namespace Imath
+
+#endif 
diff --git a/3rdparty/openexr/Imath/ImathColorAlgo.cpp b/3rdparty/openexr/Imath/ImathColorAlgo.cpp
new file mode 100644 (file)
index 0000000..c624680
--- /dev/null
@@ -0,0 +1,178 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+//----------------------------------------------------------------------------
+//
+//     Implementation of non-template items declared in ImathColorAlgo.h
+//
+//----------------------------------------------------------------------------
+
+#include "ImathColorAlgo.h"
+
+namespace Imath {
+
+
+Vec3<double>
+hsv2rgb_d(const Vec3<double> &hsv)
+{
+    double hue = hsv.x;
+    double sat = hsv.y;
+    double val = hsv.z;
+
+    double x = 0.0, y = 0.0, z = 0.0;
+    
+    if (hue == 1) hue = 0;
+    else hue *= 6;
+
+    int i = int(Math<double>::floor(hue));
+    double f = hue-i;
+    double p = val*(1-sat);
+    double q = val*(1-(sat*f));
+    double t = val*(1-(sat*(1-f)));
+
+    switch (i) 
+    {
+      case 0: x = val; y = t; z = p; break;
+      case 1: x = q; y = val; z = p; break;
+      case 2: x = p; y = val; z = t; break;
+      case 3: x = p; y = q; z = val; break;
+      case 4: x = t; y = p; z = val; break;
+      case 5: x = val; y = p; z = q; break;
+    }
+
+    return Vec3<double>(x,y,z);
+}
+
+
+Color4<double> 
+hsv2rgb_d(const Color4<double> &hsv)
+{
+    double hue = hsv.r;
+    double sat = hsv.g;
+    double val = hsv.b;
+
+    double   r = 0.0, g = 0.0, b = 0.0;
+    
+    if (hue == 1) hue = 0;
+    else hue *= 6;
+
+    int i = int(Math<double>::floor(hue));
+    double f = hue-i;
+    double p = val*(1-sat);
+    double q = val*(1-(sat*f));
+    double t = val*(1-(sat*(1-f)));
+
+    switch (i) 
+    {
+      case 0: r = val; g = t; b = p; break;
+      case 1: r = q; g = val; b = p; break;
+      case 2: r = p; g = val; b = t; break;
+      case 3: r = p; g = q; b = val; break;
+      case 4: r = t; g = p; b = val; break;
+      case 5: r = val; g = p; b = q; break;
+    }
+
+    return Color4<double>(r,g,b,hsv.a);
+}
+
+
+
+Vec3<double>
+rgb2hsv_d(const Vec3<double> &c)
+{
+    const double &x = c.x;
+    const double &y = c.y;
+    const double &z = c.z;
+
+    double max  = (x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z);
+    double min  = (x < y) ? ((x < z) ? x : z) : ((y < z) ? y : z);
+    double range = max - min;
+    double val  = max;
+    double sat   = 0;
+    double hue   = 0;
+    
+    if (max != 0)   sat = range/max;
+    
+    if (sat != 0) 
+    {
+       double h;
+       
+       if      (x == max)      h =     (y - z) / range;
+       else if (y == max)      h = 2 + (z - x) / range;
+       else            h = 4 + (x - y) / range;
+
+       hue = h/6.;
+           
+       if (hue < 0.)
+           hue += 1.0;
+    }
+    return Vec3<double>(hue,sat,val);
+}
+
+
+Color4<double>
+rgb2hsv_d(const Color4<double> &c)
+{
+    const double &r = c.r;
+    const double &g = c.g;
+    const double &b = c.b;
+
+    double max  = (r > g) ? ((r > b) ? r : b) : ((g > b) ? g : b);
+    double min  = (r < g) ? ((r < b) ? r : b) : ((g < b) ? g : b);
+    double range = max - min;
+    double val  = max;
+    double sat   = 0;
+    double hue   = 0;
+    
+    if (max != 0)   sat = range/max;
+    
+    if (sat != 0) 
+    {
+       double h;
+       
+       if      (r == max)      h =     (g - b) / range;
+       else if (g == max)      h = 2 + (b - r) / range;
+       else            h = 4 + (r - g) / range;
+
+       hue = h/6.;
+           
+       if (hue < 0.)
+           hue += 1.0;
+    }
+    return Color4<double>(hue,sat,val,c.a);
+}
+
+
+} // namespace Imath
diff --git a/3rdparty/openexr/Imath/ImathColorAlgo.h b/3rdparty/openexr/Imath/ImathColorAlgo.h
new file mode 100644 (file)
index 0000000..68703a1
--- /dev/null
@@ -0,0 +1,256 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHCOLORALGO_H
+#define INCLUDED_IMATHCOLORALGO_H
+
+
+#include "ImathColor.h"
+#include "ImathMath.h"
+#include "ImathLimits.h"
+
+namespace Imath {
+
+
+//
+//     Non-templated helper routines for color conversion.
+//     These routines eliminate type warnings under g++.
+//
+
+Vec3<double>   hsv2rgb_d(const Vec3<double> &hsv);
+
+Color4<double> hsv2rgb_d(const Color4<double> &hsv);
+
+
+Vec3<double>   rgb2hsv_d(const Vec3<double> &rgb);
+
+Color4<double> rgb2hsv_d(const Color4<double> &rgb);
+
+
+//
+//     Color conversion functions and general color algorithms
+//
+//     hsv2rgb(), rgb2hsv(), rgb2packed(), packed2rgb()
+//     see each funtion definition for details.
+//
+
+template<class T> 
+Vec3<T>  
+hsv2rgb(const Vec3<T> &hsv)
+{
+    if ( limits<T>::isIntegral() )
+    {
+       Vec3<double> v = Vec3<double>(hsv.x / double(limits<T>::max()),
+                                     hsv.y / double(limits<T>::max()),
+                                     hsv.z / double(limits<T>::max()));
+       Vec3<double> c = hsv2rgb_d(v);
+       return Vec3<T>((T) (c.x * limits<T>::max()),
+                      (T) (c.y * limits<T>::max()),
+                      (T) (c.z * limits<T>::max()));
+    }
+    else
+    {
+       Vec3<double> v = Vec3<double>(hsv.x, hsv.y, hsv.z);
+       Vec3<double> c = hsv2rgb_d(v);
+       return Vec3<T>((T) c.x, (T) c.y, (T) c.z);
+    }
+}
+
+
+template<class T> 
+Color4<T>  
+hsv2rgb(const Color4<T> &hsv)
+{
+    if ( limits<T>::isIntegral() )
+    {
+       Color4<double> v = Color4<double>(hsv.r / float(limits<T>::max()),
+                                         hsv.g / float(limits<T>::max()),
+                                         hsv.b / float(limits<T>::max()),
+                                         hsv.a / float(limits<T>::max()));
+       Color4<double> c = hsv2rgb_d(v);
+       return Color4<T>((T) (c.r * limits<T>::max()),
+                        (T) (c.g * limits<T>::max()),
+                        (T) (c.b * limits<T>::max()),
+                        (T) (c.a * limits<T>::max()));
+    }
+    else
+    {
+       Color4<double> v = Color4<double>(hsv.r, hsv.g, hsv.b, hsv.a);
+       Color4<double> c = hsv2rgb_d(v);
+       return Color4<T>((T) c.r, (T) c.g, (T) c.b, (T) c.a);
+    }
+}
+
+
+template<class T> 
+Vec3<T>  
+rgb2hsv(const Vec3<T> &rgb)
+{
+    if ( limits<T>::isIntegral() )
+    {
+       Vec3<double> v = Vec3<double>(rgb.x / double(limits<T>::max()),
+                                     rgb.y / double(limits<T>::max()),
+                                     rgb.z / double(limits<T>::max()));
+       Vec3<double> c = rgb2hsv_d(v);
+       return Vec3<T>((T) (c.x * limits<T>::max()),
+                      (T) (c.y * limits<T>::max()),
+                      (T) (c.z * limits<T>::max()));
+    }
+    else
+    {
+       Vec3<double> v = Vec3<double>(rgb.x, rgb.y, rgb.z);
+       Vec3<double> c = rgb2hsv_d(v);
+       return Vec3<T>((T) c.x, (T) c.y, (T) c.z);
+    }
+}
+
+
+template<class T> 
+Color4<T>  
+rgb2hsv(const Color4<T> &rgb)
+{
+    if ( limits<T>::isIntegral() )
+    {
+       Color4<double> v = Color4<double>(rgb.r / float(limits<T>::max()),
+                                         rgb.g / float(limits<T>::max()),
+                                         rgb.b / float(limits<T>::max()),
+                                         rgb.a / float(limits<T>::max()));
+       Color4<double> c = rgb2hsv_d(v);
+       return Color4<T>((T) (c.r * limits<T>::max()),
+                        (T) (c.g * limits<T>::max()),
+                        (T) (c.b * limits<T>::max()),
+                        (T) (c.a * limits<T>::max()));
+    }
+    else
+    {
+       Color4<double> v = Color4<double>(rgb.r, rgb.g, rgb.b, rgb.a);
+       Color4<double> c = rgb2hsv_d(v);
+       return Color4<T>((T) c.r, (T) c.g, (T) c.b, (T) c.a);
+    }
+}
+
+template <class T>
+PackedColor
+rgb2packed(const Vec3<T> &c)
+{
+    if ( limits<T>::isIntegral() )
+    {
+       float x = c.x / float(limits<T>::max());
+       float y = c.y / float(limits<T>::max());
+       float z = c.z / float(limits<T>::max());
+       return rgb2packed( V3f(x,y,z) );
+    }
+    else
+    {
+       return (  (PackedColor) (c.x * 255)             |
+               (((PackedColor) (c.y * 255)) << 8)      |
+               (((PackedColor) (c.z * 255)) << 16)     | 0xFF000000 );
+    }
+}
+
+template <class T>
+PackedColor
+rgb2packed(const Color4<T> &c)
+{
+    if ( limits<T>::isIntegral() )
+    {
+       float r = c.r / float(limits<T>::max());
+       float g = c.g / float(limits<T>::max());
+       float b = c.b / float(limits<T>::max());
+       float a = c.a / float(limits<T>::max());
+       return rgb2packed( C4f(r,g,b,a) );
+    }
+    else
+    {
+       return (  (PackedColor) (c.r * 255)             |
+               (((PackedColor) (c.g * 255)) << 8)      |
+               (((PackedColor) (c.b * 255)) << 16)     |
+               (((PackedColor) (c.a * 255)) << 24));
+    }
+}
+
+//
+//     This guy can't return the result because the template
+//     parameter would not be in the function signiture. So instead,
+//     its passed in as an argument.
+//
+
+template <class T>
+void
+packed2rgb(PackedColor packed, Vec3<T> &out)
+{
+    if ( limits<T>::isIntegral() )
+    {
+       T f = limits<T>::max() / ((PackedColor)0xFF);
+       out.x =  (packed &     0xFF) * f;
+       out.y = ((packed &   0xFF00) >>  8) * f;
+       out.z = ((packed & 0xFF0000) >> 16) * f;
+    }
+    else
+    {
+       T f = T(1) / T(255);
+       out.x =  (packed &     0xFF) * f;
+       out.y = ((packed &   0xFF00) >>  8) * f;
+       out.z = ((packed & 0xFF0000) >> 16) * f;
+    }
+}
+
+template <class T>
+void
+packed2rgb(PackedColor packed, Color4<T> &out)
+{
+    if ( limits<T>::isIntegral() )
+    {
+       T f = limits<T>::max() / ((PackedColor)0xFF);
+       out.r =  (packed &       0xFF) * f;
+       out.g = ((packed &     0xFF00) >>  8) * f;
+       out.b = ((packed &   0xFF0000) >> 16) * f;
+       out.a = ((packed & 0xFF000000) >> 24) * f;
+    }
+    else
+    {
+       T f = T(1) / T(255);
+       out.r =  (packed &       0xFF) * f;
+       out.g = ((packed &     0xFF00) >>  8) * f;
+       out.b = ((packed &   0xFF0000) >> 16) * f;
+       out.a = ((packed & 0xFF000000) >> 24) * f;
+    }
+}
+
+
+} // namespace Imath
+
+#endif  
diff --git a/3rdparty/openexr/Imath/ImathEuler.h b/3rdparty/openexr/Imath/ImathEuler.h
new file mode 100644 (file)
index 0000000..c81b5eb
--- /dev/null
@@ -0,0 +1,924 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHEULER_H
+#define INCLUDED_IMATHEULER_H
+
+//----------------------------------------------------------------------
+//
+//     template class Euler<T>
+//
+//      This class represents euler angle orientations. The class
+//     inherits from Vec3 to it can be freely cast. The additional
+//     information is the euler priorities rep. This class is
+//     essentially a rip off of Ken Shoemake's GemsIV code. It has
+//     been modified minimally to make it more understandable, but
+//     hardly enough to make it easy to grok completely.
+//
+//     There are 24 possible combonations of Euler angle
+//     representations of which 12 are common in CG and you will
+//     probably only use 6 of these which in this scheme are the
+//     non-relative-non-repeating types. 
+//
+//     The representations can be partitioned according to two
+//     criteria:
+//
+//        1) Are the angles measured relative to a set of fixed axis
+//           or relative to each other (the latter being what happens
+//           when rotation matrices are multiplied together and is
+//           almost ubiquitous in the cg community)
+//
+//        2) Is one of the rotations repeated (ala XYX rotation)
+//
+//     When you construct a given representation from scratch you
+//     must order the angles according to their priorities. So, the
+//     easiest is a softimage or aerospace (yaw/pitch/roll) ordering
+//     of ZYX. 
+//
+//         float x_rot = 1;
+//         float y_rot = 2;
+//         float z_rot = 3;
+//
+//         Eulerf angles(z_rot, y_rot, x_rot, Eulerf::ZYX);
+//             -or-
+//         Eulerf angles( V3f(z_rot,y_rot,z_rot), Eulerf::ZYX );
+//
+//     If instead, the order was YXZ for instance you would have to
+//     do this:
+//
+//         float x_rot = 1;
+//         float y_rot = 2;
+//         float z_rot = 3;
+//
+//         Eulerf angles(y_rot, x_rot, z_rot, Eulerf::YXZ);
+//             -or-
+//         Eulerf angles( V3f(y_rot,x_rot,z_rot), Eulerf::YXZ );
+//
+//     Notice how the order you put the angles into the three slots
+//     should correspond to the enum (YXZ) ordering. The input angle
+//     vector is called the "ijk" vector -- not an "xyz" vector. The
+//     ijk vector order is the same as the enum. If you treat the
+//     Euler<> as a Vec<> (which it inherts from) you will find the
+//     angles are ordered in the same way, i.e.:
+//
+//         V3f v = angles;
+//         // v.x == y_rot, v.y == x_rot, v.z == z_rot
+//
+//     If you just want the x, y, and z angles stored in a vector in
+//     that order, you can do this:
+//
+//         V3f v = angles.toXYZVector()
+//         // v.x == x_rot, v.y == y_rot, v.z == z_rot
+//
+//     If you want to set the Euler with an XYZVector use the
+//     optional layout argument:
+//
+//         Eulerf angles(x_rot, y_rot, z_rot, 
+//                       Eulerf::YXZ,
+//                       Eulerf::XYZLayout);
+//
+//     This is the same as:
+//
+//         Eulerf angles(y_rot, x_rot, z_rot, Eulerf::YXZ);
+//         
+//     Note that this won't do anything intelligent if you have a
+//     repeated axis in the euler angles (e.g. XYX)
+//
+//     If you need to use the "relative" versions of these, you will
+//     need to use the "r" enums. 
+//
+//      The units of the rotation angles are assumed to be radians.
+//
+//----------------------------------------------------------------------
+
+
+#include "ImathMath.h"
+#include "ImathVec.h"
+#include "ImathQuat.h"
+#include "ImathMatrix.h"
+#include "ImathLimits.h"
+#include <iostream>
+
+namespace Imath {
+
+#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
+// Disable MS VC++ warnings about conversion from double to float
+#pragma warning(disable:4244)
+#endif
+
+template <class T>
+class Euler : public Vec3<T>
+{
+  public:
+    using Vec3<T>::x;
+    using Vec3<T>::y;
+    using Vec3<T>::z;
+
+    enum Order
+    {
+       //
+       //  All 24 possible orderings
+       //
+
+       XYZ     = 0x0101,       // "usual" orderings
+       XZY     = 0x0001,
+       YZX     = 0x1101,
+       YXZ     = 0x1001,
+       ZXY     = 0x2101,
+       ZYX     = 0x2001,
+       
+       XZX     = 0x0011,       // first axis repeated
+       XYX     = 0x0111,
+       YXY     = 0x1011,
+       YZY     = 0x1111,
+       ZYZ     = 0x2011,
+       ZXZ     = 0x2111,
+
+       XYZr    = 0x2000,       // relative orderings -- not common
+       XZYr    = 0x2100,
+       YZXr    = 0x1000,
+       YXZr    = 0x1100,
+       ZXYr    = 0x0000,
+       ZYXr    = 0x0100,
+       
+       XZXr    = 0x2110,       // relative first axis repeated 
+       XYXr    = 0x2010,
+       YXYr    = 0x1110,
+       YZYr    = 0x1010,
+       ZYZr    = 0x0110,
+       ZXZr    = 0x0010,
+       //          ||||
+       //          VVVV
+       //  Legend: ABCD
+       //  A -> Initial Axis (0==x, 1==y, 2==z)
+       //  B -> Parity Even (1==true)
+       //  C -> Initial Repeated (1==true)
+       //  D -> Frame Static (1==true)
+       //
+
+       Legal   =   XYZ | XZY | YZX | YXZ | ZXY | ZYX |
+                   XZX | XYX | YXY | YZY | ZYZ | ZXZ |
+                   XYZr| XZYr| YZXr| YXZr| ZXYr| ZYXr|
+                   XZXr| XYXr| YXYr| YZYr| ZYZr| ZXZr,
+
+       Min     = 0x0000,
+       Max     = 0x2111,
+       Default = XYZ
+    };
+
+    enum Axis { X = 0, Y = 1, Z = 2 };
+
+    enum InputLayout { XYZLayout, IJKLayout };
+
+    //--------------------------------------------------------------------
+    // Constructors -- all default to ZYX non-relative ala softimage
+    //                 (where there is no argument to specify it)
+    //
+    // The Euler-from-matrix constructors assume that the matrix does
+    // not include shear or non-uniform scaling, but the constructors
+    // do not examine the matrix to verify this assumption.  If necessary,
+    // you can adjust the matrix by calling the removeScalingAndShear()
+    // function, defined in ImathMatrixAlgo.h.
+    //--------------------------------------------------------------------
+
+    Euler();
+    Euler(const Euler&);
+    Euler(Order p);
+    Euler(const Vec3<T> &v, Order o = Default, InputLayout l = IJKLayout);
+    Euler(T i, T j, T k, Order o = Default, InputLayout l = IJKLayout);
+    Euler(const Euler<T> &euler, Order newp);
+    Euler(const Matrix33<T> &, Order o = Default);
+    Euler(const Matrix44<T> &, Order o = Default);
+
+    //---------------------------------
+    //  Algebraic functions/ Operators
+    //---------------------------------
+
+    const Euler<T>&    operator=  (const Euler<T>&);
+    const Euler<T>&    operator=  (const Vec3<T>&);
+
+    //--------------------------------------------------------
+    // Set the euler value
+    //  This does NOT convert the angles, but setXYZVector() 
+    // does reorder the input vector.
+    //--------------------------------------------------------
+
+    static bool                legal(Order);
+
+    void               setXYZVector(const Vec3<T> &);
+
+    Order              order() const;
+    void               setOrder(Order);
+
+    void               set(Axis initial,
+                           bool relative,
+                           bool parityEven,
+                           bool firstRepeats);
+
+    //------------------------------------------------------------
+    // Conversions, toXYZVector() reorders the angles so that
+    //  the X rotation comes first, followed by the Y and Z
+    //  in cases like XYX ordering, the repeated angle will be
+    // in the "z" component
+    //
+    // The Euler-from-matrix extract() functions assume that the
+    // matrix does not include shear or non-uniform scaling, but
+    // the extract() functions do not examine the matrix to verify
+    // this assumption.  If necessary, you can adjust the matrix
+    // by calling the removeScalingAndShear() function, defined
+    // in ImathMatrixAlgo.h.
+    //------------------------------------------------------------
+
+    void               extract(const Matrix33<T>&);
+    void               extract(const Matrix44<T>&);
+    void               extract(const Quat<T>&);
+
+    Matrix33<T>                toMatrix33() const;
+    Matrix44<T>                toMatrix44() const;
+    Quat<T>            toQuat() const;
+    Vec3<T>            toXYZVector() const;
+
+    //---------------------------------------------------
+    // Use this function to unpack angles from ijk form
+    //---------------------------------------------------
+
+    void               angleOrder(int &i, int &j, int &k) const;
+
+    //---------------------------------------------------
+    // Use this function to determine mapping from xyz to ijk
+    // - reshuffles the xyz to match the order
+    //---------------------------------------------------
+    
+    void               angleMapping(int &i, int &j, int &k) const;
+
+    //----------------------------------------------------------------------
+    //
+    //  Utility methods for getting continuous rotations. None of these
+    //  methods change the orientation given by its inputs (or at least
+    //  that is the intent).
+    //
+    //    angleMod() converts an angle to its equivalent in [-PI, PI]
+    //
+    //    simpleXYZRotation() adjusts xyzRot so that its components differ
+    //                        from targetXyzRot by no more than +-PI
+    //
+    //    nearestRotation() adjusts xyzRot so that its components differ
+    //                      from targetXyzRot by as little as possible.
+    //                      Note that xyz here really means ijk, because
+    //                      the order must be provided.
+    //
+    //    makeNear() adjusts "this" Euler so that its components differ
+    //               from target by as little as possible. This method
+    //               might not make sense for Eulers with different order
+    //               and it probably doesn't work for repeated axis and
+    //               relative orderings (TODO).
+    //
+    //-----------------------------------------------------------------------
+
+    static float       angleMod (T angle);
+    static void                simpleXYZRotation (Vec3<T> &xyzRot,
+                                          const Vec3<T> &targetXyzRot);
+    static void                nearestRotation (Vec3<T> &xyzRot,
+                                        const Vec3<T> &targetXyzRot,
+                                        Order order = XYZ);
+
+    void               makeNear (const Euler<T> &target);
+
+    bool               frameStatic() const { return _frameStatic; }
+    bool               initialRepeated() const { return _initialRepeated; }
+    bool               parityEven() const { return _parityEven; }
+    Axis               initialAxis() const { return _initialAxis; }
+
+  protected:
+
+    bool               _frameStatic     : 1;   // relative or static rotations
+    bool               _initialRepeated : 1;   // init axis repeated as last
+    bool               _parityEven      : 1;   // "parity of axis permutation"
+#if defined _WIN32 || defined _WIN64
+    Axis               _initialAxis     ;      // First axis of rotation
+#else
+    Axis               _initialAxis     : 2;   // First axis of rotation
+#endif
+};
+
+
+//--------------------
+// Convenient typedefs
+//--------------------
+
+typedef Euler<float>   Eulerf;
+typedef Euler<double>  Eulerd;
+
+
+//---------------
+// Implementation
+//---------------
+
+template<class T>
+inline void
+ Euler<T>::angleOrder(int &i, int &j, int &k) const
+{
+    i = _initialAxis;
+    j = _parityEven ? (i+1)%3 : (i > 0 ? i-1 : 2);
+    k = _parityEven ? (i > 0 ? i-1 : 2) : (i+1)%3;
+}
+
+template<class T>
+inline void
+ Euler<T>::angleMapping(int &i, int &j, int &k) const
+{
+    int m[3];
+
+    m[_initialAxis] = 0;
+    m[(_initialAxis+1) % 3] = _parityEven ? 1 : 2;
+    m[(_initialAxis+2) % 3] = _parityEven ? 2 : 1;
+    i = m[0];
+    j = m[1];
+    k = m[2];
+}
+
+template<class T>
+inline void
+Euler<T>::setXYZVector(const Vec3<T> &v)
+{
+    int i,j,k;
+    angleMapping(i,j,k);
+    (*this)[i] = v.x;
+    (*this)[j] = v.y;
+    (*this)[k] = v.z;
+}
+
+template<class T>
+inline Vec3<T>
+Euler<T>::toXYZVector() const
+{
+    int i,j,k;
+    angleMapping(i,j,k);
+    return Vec3<T>((*this)[i],(*this)[j],(*this)[k]);
+}
+
+
+template<class T>
+Euler<T>::Euler() :
+    Vec3<T>(0,0,0),
+    _frameStatic(true),
+    _initialRepeated(false),
+    _parityEven(true),
+    _initialAxis(X)
+{}
+
+template<class T>
+Euler<T>::Euler(typename Euler<T>::Order p) :
+    Vec3<T>(0,0,0),
+    _frameStatic(true),
+    _initialRepeated(false),
+    _parityEven(true),
+    _initialAxis(X)
+{
+    setOrder(p);
+}
+
+template<class T>
+inline Euler<T>::Euler( const Vec3<T> &v, 
+                       typename Euler<T>::Order p, 
+                       typename Euler<T>::InputLayout l ) 
+{
+    setOrder(p); 
+    if ( l == XYZLayout ) setXYZVector(v);
+    else { x = v.x; y = v.y; z = v.z; }
+}
+
+template<class T>
+inline Euler<T>::Euler(const Euler<T> &euler)
+{
+    operator=(euler);
+}
+
+template<class T>
+inline Euler<T>::Euler(const Euler<T> &euler,Order p)
+{
+    setOrder(p);
+    Matrix33<T> M = euler.toMatrix33();
+    extract(M);
+}
+
+template<class T>
+inline Euler<T>::Euler( T xi, T yi, T zi, 
+                       typename Euler<T>::Order p,
+                       typename Euler<T>::InputLayout l)
+{
+    setOrder(p);
+    if ( l == XYZLayout ) setXYZVector(Vec3<T>(xi,yi,zi));
+    else { x = xi; y = yi; z = zi; }
+}
+
+template<class T>
+inline Euler<T>::Euler( const Matrix33<T> &M, typename Euler::Order p )
+{
+    setOrder(p);
+    extract(M);
+}
+
+template<class T>
+inline Euler<T>::Euler( const Matrix44<T> &M, typename Euler::Order p )
+{
+    setOrder(p);
+    extract(M);
+}
+
+template<class T>
+inline void Euler<T>::extract(const Quat<T> &q)
+{
+    extract(q.toMatrix33());
+}
+
+template<class T>
+void Euler<T>::extract(const Matrix33<T> &M)
+{
+    int i,j,k;
+    angleOrder(i,j,k);
+
+    if (_initialRepeated)
+    {
+       //
+       // Extract the first angle, x.
+       // 
+
+       x = Math<T>::atan2 (M[j][i], M[k][i]);
+
+       //
+       // Remove the x rotation from M, so that the remaining
+       // rotation, N, is only around two axes, and gimbal lock
+       // cannot occur.
+       //
+
+       Vec3<T> r (0, 0, 0);
+       r[i] = (_parityEven? -x: x);
+
+       Matrix44<T> N;
+       N.rotate (r);
+
+       N = N * Matrix44<T> (M[0][0], M[0][1], M[0][2], 0,
+                            M[1][0], M[1][1], M[1][2], 0,
+                            M[2][0], M[2][1], M[2][2], 0,
+                            0,       0,       0,       1);
+       //
+       // Extract the other two angles, y and z, from N.
+       //
+
+       T sy = Math<T>::sqrt (N[j][i]*N[j][i] + N[k][i]*N[k][i]);
+       y = Math<T>::atan2 (sy, N[i][i]);
+       z = Math<T>::atan2 (N[j][k], N[j][j]);
+    }
+    else
+    {
+       //
+       // Extract the first angle, x.
+       // 
+
+       x = Math<T>::atan2 (M[j][k], M[k][k]);
+
+       //
+       // Remove the x rotation from M, so that the remaining
+       // rotation, N, is only around two axes, and gimbal lock
+       // cannot occur.
+       //
+
+       Vec3<T> r (0, 0, 0);
+       r[i] = (_parityEven? -x: x);
+
+       Matrix44<T> N;
+       N.rotate (r);
+
+       N = N * Matrix44<T> (M[0][0], M[0][1], M[0][2], 0,
+                            M[1][0], M[1][1], M[1][2], 0,
+                            M[2][0], M[2][1], M[2][2], 0,
+                            0,       0,       0,       1);
+       //
+       // Extract the other two angles, y and z, from N.
+       //
+
+       T cy = Math<T>::sqrt (N[i][i]*N[i][i] + N[i][j]*N[i][j]);
+       y = Math<T>::atan2 (-N[i][k], cy);
+       z = Math<T>::atan2 (-N[j][i], N[j][j]);
+    }
+
+    if (!_parityEven)
+       *this *= -1;
+
+    if (!_frameStatic)
+    {
+       T t = x;
+       x = z;
+       z = t;
+    }
+}
+
+template<class T>
+void Euler<T>::extract(const Matrix44<T> &M)
+{
+    int i,j,k;
+    angleOrder(i,j,k);
+
+    if (_initialRepeated)
+    {
+       //
+       // Extract the first angle, x.
+       // 
+
+       x = Math<T>::atan2 (M[j][i], M[k][i]);
+
+       //
+       // Remove the x rotation from M, so that the remaining
+       // rotation, N, is only around two axes, and gimbal lock
+       // cannot occur.
+       //
+
+       Vec3<T> r (0, 0, 0);
+       r[i] = (_parityEven? -x: x);
+
+       Matrix44<T> N;
+       N.rotate (r);
+       N = N * M;
+
+       //
+       // Extract the other two angles, y and z, from N.
+       //
+
+       T sy = Math<T>::sqrt (N[j][i]*N[j][i] + N[k][i]*N[k][i]);
+       y = Math<T>::atan2 (sy, N[i][i]);
+       z = Math<T>::atan2 (N[j][k], N[j][j]);
+    }
+    else
+    {
+       //
+       // Extract the first angle, x.
+       // 
+
+       x = Math<T>::atan2 (M[j][k], M[k][k]);
+
+       //
+       // Remove the x rotation from M, so that the remaining
+       // rotation, N, is only around two axes, and gimbal lock
+       // cannot occur.
+       //
+
+       Vec3<T> r (0, 0, 0);
+       r[i] = (_parityEven? -x: x);
+
+       Matrix44<T> N;
+       N.rotate (r);
+       N = N * M;
+
+       //
+       // Extract the other two angles, y and z, from N.
+       //
+
+       T cy = Math<T>::sqrt (N[i][i]*N[i][i] + N[i][j]*N[i][j]);
+       y = Math<T>::atan2 (-N[i][k], cy);
+       z = Math<T>::atan2 (-N[j][i], N[j][j]);
+    }
+
+    if (!_parityEven)
+       *this *= -1;
+
+    if (!_frameStatic)
+    {
+       T t = x;
+       x = z;
+       z = t;
+    }
+}
+
+template<class T>
+Matrix33<T> Euler<T>::toMatrix33() const
+{
+    int i,j,k;
+    angleOrder(i,j,k);
+
+    Vec3<T> angles;
+
+    if ( _frameStatic ) angles = (*this);
+    else angles = Vec3<T>(z,y,x);
+
+    if ( !_parityEven ) angles *= -1.0;
+
+    T ci = Math<T>::cos(angles.x);
+    T cj = Math<T>::cos(angles.y);
+    T ch = Math<T>::cos(angles.z);
+    T si = Math<T>::sin(angles.x);
+    T sj = Math<T>::sin(angles.y);
+    T sh = Math<T>::sin(angles.z);
+
+    T cc = ci*ch;
+    T cs = ci*sh;
+    T sc = si*ch;
+    T ss = si*sh;
+
+    Matrix33<T> M;
+
+    if ( _initialRepeated )
+    {
+       M[i][i] = cj;     M[j][i] =  sj*si;    M[k][i] =  sj*ci;
+       M[i][j] = sj*sh;  M[j][j] = -cj*ss+cc; M[k][j] = -cj*cs-sc;
+       M[i][k] = -sj*ch; M[j][k] =  cj*sc+cs; M[k][k] =  cj*cc-ss;
+    }
+    else
+    {
+       M[i][i] = cj*ch; M[j][i] = sj*sc-cs; M[k][i] = sj*cc+ss;
+       M[i][j] = cj*sh; M[j][j] = sj*ss+cc; M[k][j] = sj*cs-sc;
+       M[i][k] = -sj;   M[j][k] = cj*si;    M[k][k] = cj*ci;
+    }
+
+    return M;
+}
+
+template<class T>
+Matrix44<T> Euler<T>::toMatrix44() const
+{
+    int i,j,k;
+    angleOrder(i,j,k);
+
+    Vec3<T> angles;
+
+    if ( _frameStatic ) angles = (*this);
+    else angles = Vec3<T>(z,y,x);
+
+    if ( !_parityEven ) angles *= -1.0;
+
+    T ci = Math<T>::cos(angles.x);
+    T cj = Math<T>::cos(angles.y);
+    T ch = Math<T>::cos(angles.z);
+    T si = Math<T>::sin(angles.x);
+    T sj = Math<T>::sin(angles.y);
+    T sh = Math<T>::sin(angles.z);
+
+    T cc = ci*ch;
+    T cs = ci*sh;
+    T sc = si*ch;
+    T ss = si*sh;
+
+    Matrix44<T> M;
+
+    if ( _initialRepeated )
+    {
+       M[i][i] = cj;     M[j][i] =  sj*si;    M[k][i] =  sj*ci;
+       M[i][j] = sj*sh;  M[j][j] = -cj*ss+cc; M[k][j] = -cj*cs-sc;
+       M[i][k] = -sj*ch; M[j][k] =  cj*sc+cs; M[k][k] =  cj*cc-ss;
+    }
+    else
+    {
+       M[i][i] = cj*ch; M[j][i] = sj*sc-cs; M[k][i] = sj*cc+ss;
+       M[i][j] = cj*sh; M[j][j] = sj*ss+cc; M[k][j] = sj*cs-sc;
+       M[i][k] = -sj;   M[j][k] = cj*si;    M[k][k] = cj*ci;
+    }
+
+    return M;
+}
+
+template<class T>
+Quat<T> Euler<T>::toQuat() const
+{
+    Vec3<T> angles;
+    int i,j,k;
+    angleOrder(i,j,k);
+
+    if ( _frameStatic ) angles = (*this);
+    else angles = Vec3<T>(z,y,x);
+
+    if ( !_parityEven ) angles.y = -angles.y;
+
+    T ti = angles.x*0.5;
+    T tj = angles.y*0.5;
+    T th = angles.z*0.5;
+    T ci = Math<T>::cos(ti);
+    T cj = Math<T>::cos(tj);
+    T ch = Math<T>::cos(th);
+    T si = Math<T>::sin(ti);
+    T sj = Math<T>::sin(tj);
+    T sh = Math<T>::sin(th);
+    T cc = ci*ch;
+    T cs = ci*sh;
+    T sc = si*ch;
+    T ss = si*sh;
+
+    T parity = _parityEven ? 1.0 : -1.0;
+
+    Quat<T> q;
+    Vec3<T> a;
+
+    if ( _initialRepeated )
+    {
+       a[i]    = cj*(cs + sc);
+       a[j]    = sj*(cc + ss) * parity,
+       a[k]    = sj*(cs - sc);
+       q.r     = cj*(cc - ss);
+    }
+    else
+    {
+       a[i]    = cj*sc - sj*cs,
+       a[j]    = (cj*ss + sj*cc) * parity,
+       a[k]    = cj*cs - sj*sc;
+       q.r     = cj*cc + sj*ss;
+    }
+
+    q.v = a;
+
+    return q;
+}
+
+template<class T>
+inline bool
+Euler<T>::legal(typename Euler<T>::Order order)
+{
+    return (order & ~Legal) ? false : true;
+}
+
+template<class T>
+typename Euler<T>::Order
+Euler<T>::order() const
+{
+    int foo = (_initialAxis == Z ? 0x2000 : (_initialAxis == Y ? 0x1000 : 0));
+
+    if (_parityEven)     foo |= 0x0100;
+    if (_initialRepeated) foo |= 0x0010;
+    if (_frameStatic)    foo++;
+
+    return (Order)foo;
+}
+
+template<class T>
+inline void Euler<T>::setOrder(typename Euler<T>::Order p)
+{
+    set( p & 0x2000 ? Z : (p & 0x1000 ? Y : X),        // initial axis
+        !(p & 0x1),                            // static?
+        !!(p & 0x100),                         // permutation even?
+        !!(p & 0x10));                         // initial repeats?
+}
+
+template<class T>
+void Euler<T>::set(typename Euler<T>::Axis axis,
+                  bool relative,
+                  bool parityEven,
+                  bool firstRepeats)
+{
+    _initialAxis       = axis;
+    _frameStatic       = !relative;
+    _parityEven                = parityEven;
+    _initialRepeated   = firstRepeats;
+}
+
+template<class T>
+const Euler<T>& Euler<T>::operator= (const Euler<T> &euler)
+{
+    x = euler.x;
+    y = euler.y;
+    z = euler.z;
+    _initialAxis = euler._initialAxis;
+    _frameStatic = euler._frameStatic;
+    _parityEven         = euler._parityEven;
+    _initialRepeated = euler._initialRepeated;
+    return *this;
+}
+
+template<class T>
+const Euler<T>& Euler<T>::operator= (const Vec3<T> &v)
+{
+    x = v.x;
+    y = v.y;
+    z = v.z;
+    return *this;
+}
+
+template<class T>
+std::ostream& operator << (std::ostream &o, const Euler<T> &euler)
+{
+    char a[3] = { 'X', 'Y', 'Z' };
+
+    const char* r = euler.frameStatic() ? "" : "r";
+    int i,j,k;
+    euler.angleOrder(i,j,k);
+
+    if ( euler.initialRepeated() ) k = i;
+
+    return o << "("
+            << euler.x << " "
+            << euler.y << " "
+            << euler.z << " "
+            << a[i] << a[j] << a[k] << r << ")";
+}
+
+template <class T>
+float
+Euler<T>::angleMod (T angle)
+{
+    angle = fmod(T (angle), T (2 * M_PI));
+
+    if (angle < -M_PI) angle += 2 * M_PI;
+    if (angle > +M_PI) angle -= 2 * M_PI;
+
+    return angle;
+}
+
+template <class T>
+void
+Euler<T>::simpleXYZRotation (Vec3<T> &xyzRot, const Vec3<T> &targetXyzRot)
+{
+    Vec3<T> d  = xyzRot - targetXyzRot;
+    xyzRot[0]  = targetXyzRot[0] + angleMod(d[0]);
+    xyzRot[1]  = targetXyzRot[1] + angleMod(d[1]);
+    xyzRot[2]  = targetXyzRot[2] + angleMod(d[2]);
+}
+
+template <class T>
+void
+Euler<T>::nearestRotation (Vec3<T> &xyzRot, const Vec3<T> &targetXyzRot,
+                          Order order)
+{
+    int i,j,k;
+    Euler<T> e (0,0,0, order);
+    e.angleOrder(i,j,k);
+
+    simpleXYZRotation(xyzRot, targetXyzRot);
+
+    Vec3<T> otherXyzRot;
+    otherXyzRot[i] = M_PI+xyzRot[i];
+    otherXyzRot[j] = M_PI-xyzRot[j];
+    otherXyzRot[k] = M_PI+xyzRot[k];
+
+    simpleXYZRotation(otherXyzRot, targetXyzRot);
+           
+    Vec3<T> d  = xyzRot - targetXyzRot;
+    Vec3<T> od = otherXyzRot - targetXyzRot;
+    T dMag     = d.dot(d);
+    T odMag    = od.dot(od);
+
+    if (odMag < dMag)
+    {
+       xyzRot = otherXyzRot;
+    }
+}
+
+template <class T>
+void
+Euler<T>::makeNear (const Euler<T> &target)
+{
+    Vec3<T> xyzRot = toXYZVector();
+    Vec3<T> targetXyz;
+    if (order() != target.order())
+    {
+        Euler<T> targetSameOrder = Euler<T>(target, order());
+        targetXyz = targetSameOrder.toXYZVector();
+    }
+    else
+    {
+        targetXyz = target.toXYZVector();
+    }
+
+    nearestRotation(xyzRot, targetXyz, order());
+
+    setXYZVector(xyzRot);
+}
+
+#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
+#pragma warning(default:4244)
+#endif
+
+} // namespace Imath
+
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathExc.h b/3rdparty/openexr/Imath/ImathExc.h
new file mode 100644 (file)
index 0000000..43781c5
--- /dev/null
@@ -0,0 +1,73 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHEXC_H
+#define INCLUDED_IMATHEXC_H
+
+
+//-----------------------------------------------
+//
+//     Imath library-specific exceptions
+//
+//-----------------------------------------------
+
+#include "IexBaseExc.h"
+
+namespace Imath {
+
+
+DEFINE_EXC (NullVecExc, ::Iex::MathExc)                // Attempt to normalize
+                                               // null vector
+
+DEFINE_EXC (InfPointExc, ::Iex::MathExc)       // Attempt to normalize
+                                                // a point at infinity
+
+DEFINE_EXC (NullQuatExc, ::Iex::MathExc)       // Attempt to normalize
+                                               // null quaternion
+
+DEFINE_EXC (SingMatrixExc, ::Iex::MathExc)     // Attempt to invert
+                                               // singular matrix
+
+DEFINE_EXC (ZeroScaleExc, ::Iex::MathExc)      // Attempt to remove zero
+                                               // scaling from matrix
+
+DEFINE_EXC (IntVecNormalizeExc, ::Iex::MathExc)        // Attempt to normalize
+                                               // a vector of whose elements
+                                                // are an integer type
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathFrame.h b/3rdparty/openexr/Imath/ImathFrame.h
new file mode 100644 (file)
index 0000000..7291231
--- /dev/null
@@ -0,0 +1,190 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHFRAME_H
+#define INCLUDED_IMATHFRAME_H
+
+namespace Imath {
+
+template<class T> class Vec3;
+template<class T> class Matrix44;
+
+//
+//  These methods compute a set of reference frames, defined by their
+//  transformation matrix, along a curve. It is designed so that the 
+//  array of points and the array of matrices used to fetch these routines 
+//  don't need to be ordered as the curve.
+//  
+//  A typical usage would be :
+//
+//      m[0] = Imath::firstFrame( p[0], p[1], p[2] );
+//      for( int i = 1; i < n - 1; i++ )
+//      {
+//          m[i] = Imath::nextFrame( m[i-1], p[i-1], p[i], t[i-1], t[i] );
+//      }
+//      m[n-1] = Imath::lastFrame( m[n-2], p[n-2], p[n-1] );
+//
+//  See Graphics Gems I for the underlying algorithm.
+// 
+
+template<class T> Matrix44<T> firstFrame( const Vec3<T>&,    // First point
+                                          const Vec3<T>&,    // Second point 
+                                          const Vec3<T>& );  // Third point
+
+template<class T> Matrix44<T> nextFrame( const Matrix44<T>&, // Previous matrix
+                                         const Vec3<T>&,     // Previous point
+                                         const Vec3<T>&,     // Current point
+                                         Vec3<T>&,           // Previous tangent
+                                         Vec3<T>& );         // Current tangent
+
+template<class T> Matrix44<T> lastFrame( const Matrix44<T>&, // Previous matrix
+                                         const Vec3<T>&,     // Previous point
+                                         const Vec3<T>& );   // Last point
+
+//
+//  firstFrame - Compute the first reference frame along a curve.
+//
+//  This function returns the transformation matrix to the reference frame
+//  defined by the three points 'pi', 'pj' and 'pk'. Note that if the two
+//  vectors <pi,pj> and <pi,pk> are colinears, an arbitrary twist value will
+//  be choosen.
+//
+//  Throw 'NullVecExc' if 'pi' and 'pj' are equals.
+//
+
+template<class T> Matrix44<T> firstFrame
+( 
+    const Vec3<T>& pi,             // First point
+    const Vec3<T>& pj,             // Second point
+    const Vec3<T>& pk )            // Third point
+{
+    Vec3<T> t = pj - pi; t.normalizeExc();
+
+    Vec3<T> n = t.cross( pk - pi ); n.normalize();
+    if( n.length() == 0.0f )
+    {
+        int i = fabs( t[0] ) < fabs( t[1] ) ? 0 : 1;
+        if( fabs( t[2] ) < fabs( t[i] )) i = 2;
+
+        Vec3<T> v( 0.0, 0.0, 0.0 ); v[i] = 1.0;
+        n = t.cross( v ); n.normalize();
+    }
+
+    Vec3<T> b = t.cross( n );
+
+    Matrix44<T> M;
+
+    M[0][0] =  t[0]; M[0][1] =  t[1]; M[0][2] =  t[2]; M[0][3] = 0.0,
+    M[1][0] =  n[0]; M[1][1] =  n[1]; M[1][2] =  n[2]; M[1][3] = 0.0,
+    M[2][0] =  b[0]; M[2][1] =  b[1]; M[2][2] =  b[2]; M[2][3] = 0.0,
+    M[3][0] = pi[0]; M[3][1] = pi[1]; M[3][2] = pi[2]; M[3][3] = 1.0;
+
+    return M;
+}
+
+//
+//  nextFrame - Compute the next reference frame along a curve.
+//
+//  This function returns the transformation matrix to the next reference 
+//  frame defined by the previously computed transformation matrix and the
+//  new point and tangent vector along the curve.
+//
+
+template<class T> Matrix44<T> nextFrame
+( 
+    const Matrix44<T>&  Mi,             // Previous matrix
+    const Vec3<T>&      pi,             // Previous point
+    const Vec3<T>&      pj,             // Current point
+    Vec3<T>&            ti,             // Previous tangent vector
+    Vec3<T>&            tj )            // Current tangent vector
+{
+    Vec3<T> a(0.0, 0.0, 0.0);          // Rotation axis.
+    T r = 0.0;                         // Rotation angle.
+
+    if( ti.length() != 0.0 && tj.length() != 0.0 )
+    {
+        ti.normalize(); tj.normalize();
+        T dot = ti.dot( tj ); 
+
+        //
+        //  This is *really* necessary :
+        //
+
+        if( dot > 1.0 ) dot = 1.0; 
+        else if( dot < -1.0 ) dot = -1.0;
+
+        r = acosf( dot );
+        a = ti.cross( tj );
+    }
+
+    if( a.length() != 0.0 && r != 0.0 )
+    {
+        Matrix44<T> R; R.setAxisAngle( a, r );
+        Matrix44<T> Tj; Tj.translate(  pj );
+        Matrix44<T> Ti; Ti.translate( -pi );
+
+        return Mi * Ti * R * Tj;
+    }
+    else
+    {
+        Matrix44<T> Tr; Tr.translate( pj - pi );
+
+        return Mi * Tr;
+    }
+}
+
+//
+//  lastFrame - Compute the last reference frame along a curve.
+//
+//  This function returns the transformation matrix to the last reference 
+//  frame defined by the previously computed transformation matrix and the
+//  last point along the curve.
+//
+
+template<class T> Matrix44<T> lastFrame
+( 
+    const Matrix44<T>&  Mi,             // Previous matrix
+    const Vec3<T>&      pi,             // Previous point
+    const Vec3<T>&      pj )            // Last point
+{
+    Matrix44<T> Tr; Tr.translate( pj - pi );
+
+    return Mi * Tr;
+}
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathFrustum.h b/3rdparty/openexr/Imath/ImathFrustum.h
new file mode 100644 (file)
index 0000000..ac49346
--- /dev/null
@@ -0,0 +1,739 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHFRUSTUM_H
+#define INCLUDED_IMATHFRUSTUM_H
+
+
+#include "ImathVec.h"
+#include "ImathPlane.h"
+#include "ImathLine.h"
+#include "ImathMatrix.h"
+#include "ImathLimits.h"
+#include "ImathFun.h"
+#include "IexMathExc.h"
+
+namespace Imath {
+
+//
+//     template class Frustum<T>
+//
+//     The frustum is always located with the eye point at the
+//     origin facing down -Z. This makes the Frustum class 
+//     compatable with OpenGL (or anything that assumes a camera
+//     looks down -Z, hence with a right-handed coordinate system) 
+//     but not with RenderMan which assumes the camera looks down
+//     +Z. Additional functions are provided for conversion from
+//     and from various camera coordinate spaces.
+//
+//      nearPlane/farPlane: near/far are keywords used by Microsoft's
+//      compiler, so we use nearPlane/farPlane instead to avoid
+//      issues.  
+
+
+template<class T>
+class Frustum
+{
+  public:
+    Frustum();
+    Frustum(const Frustum &);
+    Frustum(T nearPlane, T farPlane, T left, T right, T top, T bottom, bool ortho=false);
+    Frustum(T nearPlane, T farPlane, T fovx, T fovy, T aspect);
+    virtual ~Frustum();
+
+    //--------------------
+    // Assignment operator
+    //--------------------
+
+    const Frustum &operator    = (const Frustum &);
+
+    //--------------------
+    //  Operators:  ==, !=
+    //--------------------
+    
+    bool                        operator == (const Frustum<T> &src) const;
+    bool                        operator != (const Frustum<T> &src) const;
+
+    //--------------------------------------------------------
+    //  Set functions change the entire state of the Frustum
+    //--------------------------------------------------------
+
+    void               set(T nearPlane, T farPlane, 
+                           T left, T right, 
+                           T top, T bottom, 
+                           bool ortho=false);
+
+    void               set(T nearPlane, T farPlane, T fovx, T fovy, T aspect);
+
+    //------------------------------------------------------
+    // These functions modify an already valid frustum state
+    //------------------------------------------------------
+
+    void               modifyNearAndFar(T nearPlane, T farPlane);
+    void               setOrthographic(bool);
+
+    //--------------
+    //  Access
+    //--------------
+    
+    bool               orthographic() const    { return _orthographic; }
+    T                  nearPlane() const       { return _nearPlane;    }
+    T                  hither() const          { return _nearPlane;    }
+    T                  farPlane() const        { return _farPlane;     }
+    T                  yon() const             { return _farPlane;     }
+    T                  left() const            { return _left;         }
+    T                  right() const           { return _right;        }
+    T                  bottom() const          { return _bottom;       }
+    T                  top() const             { return _top;          }
+
+    //-----------------------------------------------------------------------
+    //  Sets the planes in p to be the six bounding planes of the frustum, in
+    //  the following order: top, right, bottom, left, near, far.
+    //  Note that the planes have normals that point out of the frustum.
+    //  The version of this routine that takes a matrix applies that matrix
+    //  to transform the frustum before setting the planes.
+    //-----------------------------------------------------------------------
+
+    void               planes(Plane3<T> p[6]);
+    void               planes(Plane3<T> p[6], const Matrix44<T> &M);
+
+    //----------------------
+    //  Derived Quantities
+    //----------------------
+
+    T                           fovx() const;
+    T                           fovy() const;
+    T                           aspect() const;
+    Matrix44<T>                 projectionMatrix() const;
+    bool                        degenerate() const;
+
+    //-----------------------------------------------------------------------
+    //  Takes a rectangle in the screen space (i.e., -1 <= left <= right <= 1 
+    //  and -1 <= bottom <= top <= 1) of this Frustum, and returns a new
+    //  Frustum whose near clipping-plane window is that rectangle in local
+    //  space.  
+    //-----------------------------------------------------------------------
+
+    Frustum<T>         window(T left, T right, T top, T bottom) const;
+
+    //----------------------------------------------------------
+    // Projection is in screen space / Conversion from Z-Buffer
+    //----------------------------------------------------------
+
+    Line3<T>           projectScreenToRay( const Vec2<T> & ) const;
+    Vec2<T>            projectPointToScreen( const Vec3<T> & ) const;
+
+    T                  ZToDepth(long zval, long min, long max) const;
+    T                  normalizedZToDepth(T zval) const;
+    long               DepthToZ(T depth, long zmin, long zmax) const;
+
+    T                  worldRadius(const Vec3<T> &p, T radius) const;
+    T                  screenRadius(const Vec3<T> &p, T radius) const;
+
+
+  protected:
+
+    Vec2<T>            screenToLocal( const Vec2<T> & ) const;
+    Vec2<T>            localToScreen( const Vec2<T> & ) const;
+
+  protected:
+    T                  _nearPlane;
+    T                  _farPlane;
+    T                  _left;
+    T                  _right;
+    T                  _top;
+    T                  _bottom;
+    bool               _orthographic;
+};
+
+
+template<class T>
+inline Frustum<T>::Frustum()
+{
+    set(T (0.1),
+       T (1000.0),
+       T (-1.0),
+       T (1.0),
+       T (1.0),
+       T (-1.0),
+       false);
+}
+
+template<class T>
+inline Frustum<T>::Frustum(const Frustum &f)
+{
+    *this = f;
+}
+
+template<class T>
+inline Frustum<T>::Frustum(T n, T f, T l, T r, T t, T b, bool o)
+{
+    set(n,f,l,r,t,b,o);
+}
+
+template<class T>
+inline Frustum<T>::Frustum(T nearPlane, T farPlane, T fovx, T fovy, T aspect)
+{
+    set(nearPlane,farPlane,fovx,fovy,aspect);
+}
+
+template<class T>
+Frustum<T>::~Frustum()
+{
+}
+
+template<class T>
+const Frustum<T> &
+Frustum<T>::operator = (const Frustum &f)
+{
+    _nearPlane    = f._nearPlane;
+    _farPlane     = f._farPlane;
+    _left         = f._left;
+    _right        = f._right;
+    _top          = f._top;
+    _bottom       = f._bottom;
+    _orthographic = f._orthographic;
+
+    return *this;
+}
+
+template <class T>
+bool
+Frustum<T>::operator == (const Frustum<T> &src) const
+{
+    return
+        _nearPlane    == src._nearPlane   &&
+        _farPlane     == src._farPlane    &&
+        _left         == src._left   &&
+        _right        == src._right  &&
+        _top          == src._top    &&
+        _bottom       == src._bottom &&
+        _orthographic == src._orthographic;
+}
+
+template <class T>
+inline bool
+Frustum<T>::operator != (const Frustum<T> &src) const
+{
+    return !operator== (src);
+}
+
+template<class T>
+void Frustum<T>::set(T n, T f, T l, T r, T t, T b, bool o)
+{
+    _nearPlane      = n;
+    _farPlane      = f;
+    _left          = l;
+    _right         = r;
+    _bottom        = b;
+    _top           = t;
+    _orthographic   = o;
+}
+
+template<class T>
+void Frustum<T>::modifyNearAndFar(T n, T f)
+{
+    if ( _orthographic )
+    {
+       _nearPlane = n;
+    }
+    else
+    {
+       Line3<T>  lowerLeft( Vec3<T>(0,0,0), Vec3<T>(_left,_bottom,-_nearPlane) );
+       Line3<T> upperRight( Vec3<T>(0,0,0), Vec3<T>(_right,_top,-_nearPlane) );
+       Plane3<T> nearPlane( Vec3<T>(0,0,-1), n );
+
+       Vec3<T> ll,ur;
+       nearPlane.intersect(lowerLeft,ll);
+       nearPlane.intersect(upperRight,ur);
+
+       _left      = ll.x;
+       _right     = ur.x;
+       _top       = ur.y;
+       _bottom    = ll.y;
+       _nearPlane = n;
+       _farPlane  = f;
+    }
+
+    _farPlane = f;
+}
+
+template<class T>
+void Frustum<T>::setOrthographic(bool ortho)
+{
+    _orthographic   = ortho;
+}
+
+template<class T>
+void Frustum<T>::set(T nearPlane, T farPlane, T fovx, T fovy, T aspect)
+{
+    if (fovx != 0 && fovy != 0)
+       throw Iex::ArgExc ("fovx and fovy cannot both be non-zero.");
+
+    const T two = static_cast<T>(2);
+
+    if (fovx != 0)
+    {
+       _right      = nearPlane * Math<T>::tan(fovx / two);
+       _left       = -_right;
+       _top        = ((_right - _left) / aspect) / two;
+       _bottom     = -_top;
+    }
+    else
+    {
+       _top        = nearPlane * Math<T>::tan(fovy / two);
+       _bottom     = -_top;
+       _right      = (_top - _bottom) * aspect / two;
+       _left       = -_right;
+    }
+    _nearPlane     = nearPlane;
+    _farPlane      = farPlane;
+    _orthographic   = false;
+}
+
+template<class T>
+T Frustum<T>::fovx() const
+{
+    return Math<T>::atan2(_right,_nearPlane) - Math<T>::atan2(_left,_nearPlane);
+}
+
+template<class T>
+T Frustum<T>::fovy() const
+{
+    return Math<T>::atan2(_top,_nearPlane) - Math<T>::atan2(_bottom,_nearPlane);
+}
+
+template<class T>
+T Frustum<T>::aspect() const
+{
+    T rightMinusLeft = _right-_left;
+    T topMinusBottom = _top-_bottom;
+
+    if (abs(topMinusBottom) < 1 &&
+       abs(rightMinusLeft) > limits<T>::max() * abs(topMinusBottom))
+    {
+       throw Iex::DivzeroExc ("Bad viewing frustum: "
+                              "aspect ratio cannot be computed.");
+    }
+
+    return rightMinusLeft / topMinusBottom;
+}
+
+template<class T>
+Matrix44<T> Frustum<T>::projectionMatrix() const
+{
+    T rightPlusLeft  = _right+_left;
+    T rightMinusLeft = _right-_left;
+
+    T topPlusBottom  = _top+_bottom;
+    T topMinusBottom = _top-_bottom;
+
+    T farPlusNear    = _farPlane+_nearPlane;
+    T farMinusNear   = _farPlane-_nearPlane;
+
+    if ((abs(rightMinusLeft) < 1 &&
+        abs(rightPlusLeft) > limits<T>::max() * abs(rightMinusLeft)) ||
+       (abs(topMinusBottom) < 1 &&
+        abs(topPlusBottom) > limits<T>::max() * abs(topMinusBottom)) ||
+       (abs(farMinusNear) < 1 &&
+        abs(farPlusNear) > limits<T>::max() * abs(farMinusNear)))
+    {
+       throw Iex::DivzeroExc ("Bad viewing frustum: "
+                              "projection matrix cannot be computed.");
+    }
+
+    if ( _orthographic )
+    {
+       T tx = -rightPlusLeft / rightMinusLeft;
+       T ty = -topPlusBottom / topMinusBottom;
+       T tz = -farPlusNear   / farMinusNear;
+
+       if ((abs(rightMinusLeft) < 1 &&
+            2 > limits<T>::max() * abs(rightMinusLeft)) ||
+           (abs(topMinusBottom) < 1 &&
+            2 > limits<T>::max() * abs(topMinusBottom)) ||
+           (abs(farMinusNear) < 1 &&
+            2 > limits<T>::max() * abs(farMinusNear)))
+       {
+           throw Iex::DivzeroExc ("Bad viewing frustum: "
+                                  "projection matrix cannot be computed.");
+       }
+
+       T A  =  2 / rightMinusLeft;
+       T B  =  2 / topMinusBottom;
+       T C  = -2 / farMinusNear;
+
+       return Matrix44<T>( A,  0,  0,  0,
+                           0,  B,  0,  0,
+                           0,  0,  C,  0,
+                           tx, ty, tz, 1.f );
+    }
+    else
+    {
+       T A =  rightPlusLeft / rightMinusLeft;
+       T B =  topPlusBottom / topMinusBottom;
+       T C = -farPlusNear   / farMinusNear;
+
+       T farTimesNear = -2 * _farPlane * _nearPlane;
+       if (abs(farMinusNear) < 1 &&
+           abs(farTimesNear) > limits<T>::max() * abs(farMinusNear))
+       {
+           throw Iex::DivzeroExc ("Bad viewing frustum: "
+                                  "projection matrix cannot be computed.");
+       }
+
+       T D = farTimesNear / farMinusNear;
+
+       T twoTimesNear = 2 * _nearPlane;
+
+       if ((abs(rightMinusLeft) < 1 &&
+            abs(twoTimesNear) > limits<T>::max() * abs(rightMinusLeft)) ||
+           (abs(topMinusBottom) < 1 &&
+            abs(twoTimesNear) > limits<T>::max() * abs(topMinusBottom)))
+       {
+           throw Iex::DivzeroExc ("Bad viewing frustum: "
+                                  "projection matrix cannot be computed.");
+       }
+
+       T E = twoTimesNear / rightMinusLeft;
+       T F = twoTimesNear / topMinusBottom;
+
+       return Matrix44<T>( E,  0,  0,  0,
+                           0,  F,  0,  0,
+                           A,  B,  C, -1,
+                           0,  0,  D,  0 );
+    }
+}
+
+template<class T>
+bool Frustum<T>::degenerate() const
+{
+    return (_nearPlane == _farPlane) ||
+           (_left == _right) ||
+           (_top == _bottom);
+}
+
+template<class T>
+Frustum<T> Frustum<T>::window(T l, T r, T t, T b) const
+{
+    // move it to 0->1 space
+
+    Vec2<T> bl = screenToLocal( Vec2<T>(l,b) );
+    Vec2<T> tr = screenToLocal( Vec2<T>(r,t) );
+
+    return Frustum<T>(_nearPlane, _farPlane, bl.x, tr.x, tr.y, bl.y, _orthographic);
+}
+
+
+template<class T>
+Vec2<T> Frustum<T>::screenToLocal(const Vec2<T> &s) const
+{
+    return Vec2<T>( _left + (_right-_left) * (1.f+s.x) / 2.f,
+                   _bottom + (_top-_bottom) * (1.f+s.y) / 2.f );
+}
+
+template<class T>
+Vec2<T> Frustum<T>::localToScreen(const Vec2<T> &p) const
+{
+    T leftPlusRight  = _left - T (2) * p.x + _right;
+    T leftMinusRight = _left-_right;
+    T bottomPlusTop  = _bottom - T (2) * p.y + _top;
+    T bottomMinusTop = _bottom-_top;
+
+    if ((abs(leftMinusRight) < T (1) &&
+        abs(leftPlusRight) > limits<T>::max() * abs(leftMinusRight)) ||
+       (abs(bottomMinusTop) < T (1) &&
+        abs(bottomPlusTop) > limits<T>::max() * abs(bottomMinusTop)))
+    {
+       throw Iex::DivzeroExc
+           ("Bad viewing frustum: "
+            "local-to-screen transformation cannot be computed");
+    }
+
+    return Vec2<T>( leftPlusRight / leftMinusRight,
+                   bottomPlusTop / bottomMinusTop );
+}
+
+template<class T>
+Line3<T> Frustum<T>::projectScreenToRay(const Vec2<T> &p) const
+{
+    Vec2<T> point = screenToLocal(p);
+    if (orthographic())
+       return Line3<T>( Vec3<T>(point.x,point.y, 0.0),
+                        Vec3<T>(point.x,point.y,-_nearPlane));
+    else
+       return Line3<T>( Vec3<T>(0, 0, 0), Vec3<T>(point.x,point.y,-_nearPlane));
+}
+
+template<class T>
+Vec2<T> Frustum<T>::projectPointToScreen(const Vec3<T> &point) const
+{
+    if (orthographic() || point.z == T (0))
+       return localToScreen( Vec2<T>( point.x, point.y ) );
+    else
+       return localToScreen( Vec2<T>( point.x * _nearPlane / -point.z, 
+                                      point.y * _nearPlane / -point.z ) );
+}
+
+template<class T>
+T Frustum<T>::ZToDepth(long zval,long zmin,long zmax) const
+{
+    int zdiff = zmax - zmin;
+
+    if (zdiff == 0)
+    {
+       throw Iex::DivzeroExc
+           ("Bad call to Frustum::ZToDepth: zmax == zmin");
+    }
+
+    if ( zval > zmax+1 ) zval -= zdiff;
+
+    T fzval = (T(zval) - T(zmin)) / T(zdiff);
+    return normalizedZToDepth(fzval);
+}
+
+template<class T>
+T Frustum<T>::normalizedZToDepth(T zval) const
+{
+    T Zp = zval * 2.0 - 1;
+
+    if ( _orthographic )
+    {
+        return   -(Zp*(_farPlane-_nearPlane) + (_farPlane+_nearPlane))/2;
+    }
+    else 
+    {
+       T farTimesNear = 2 * _farPlane * _nearPlane;
+       T farMinusNear = Zp * (_farPlane - _nearPlane) - _farPlane - _nearPlane;
+
+       if (abs(farMinusNear) < 1 &&
+           abs(farTimesNear) > limits<T>::max() * abs(farMinusNear))
+       {
+           throw Iex::DivzeroExc
+               ("Frustum::normalizedZToDepth cannot be computed.  The "
+                "near and far clipping planes of the viewing frustum "
+                "may be too close to each other");
+       }
+
+       return farTimesNear / farMinusNear;
+    }
+}
+
+template<class T>
+long Frustum<T>::DepthToZ(T depth,long zmin,long zmax) const
+{
+    long zdiff     = zmax - zmin;
+    T farMinusNear = _farPlane-_nearPlane;
+
+    if ( _orthographic )
+    {
+       T farPlusNear = 2*depth + _farPlane + _nearPlane;
+
+       if (abs(farMinusNear) < 1 &&
+           abs(farPlusNear) > limits<T>::max() * abs(farMinusNear))
+       {
+           throw Iex::DivzeroExc
+               ("Bad viewing frustum: near and far clipping planes "
+                "are too close to each other");
+       }
+
+       T Zp = -farPlusNear/farMinusNear;
+       return long(0.5*(Zp+1)*zdiff) + zmin;
+    }
+    else 
+    { 
+       // Perspective
+
+       T farTimesNear = 2*_farPlane*_nearPlane;
+       if (abs(depth) < 1 &&
+           abs(farTimesNear) > limits<T>::max() * abs(depth))
+       {
+           throw Iex::DivzeroExc
+               ("Bad call to DepthToZ function: value of `depth' "
+                "is too small");
+       }
+
+       T farPlusNear = farTimesNear/depth + _farPlane + _nearPlane;
+       if (abs(farMinusNear) < 1 &&
+           abs(farPlusNear) > limits<T>::max() * abs(farMinusNear))
+       {
+           throw Iex::DivzeroExc
+               ("Bad viewing frustum: near and far clipping planes "
+                "are too close to each other");
+       }
+
+       T Zp = farPlusNear/farMinusNear;
+       return long(0.5*(Zp+1)*zdiff) + zmin;
+    }
+}
+
+template<class T>
+T Frustum<T>::screenRadius(const Vec3<T> &p, T radius) const
+{
+    // Derivation:
+    // Consider X-Z plane.
+    // X coord of projection of p = xp = p.x * (-_nearPlane / p.z)
+    // Let q be p + (radius, 0, 0).
+    // X coord of projection of q = xq = (p.x - radius)  * (-_nearPlane / p.z)
+    // X coord of projection of segment from p to q = r = xp - xq
+    //         = radius * (-_nearPlane / p.z)
+    // A similar analysis holds in the Y-Z plane.
+    // So r is the quantity we want to return.
+
+    if (abs(p.z) > 1 || abs(-_nearPlane) < limits<T>::max() * abs(p.z))
+    {
+       return radius * (-_nearPlane / p.z);
+    }
+    else
+    {
+       throw Iex::DivzeroExc
+           ("Bad call to Frustum::screenRadius: the magnitude of `p' "
+            "is too small");
+    }
+
+    return radius * (-_nearPlane / p.z);
+}
+
+template<class T>
+T Frustum<T>::worldRadius(const Vec3<T> &p, T radius) const
+{
+    if (abs(-_nearPlane) > 1 || abs(p.z) < limits<T>::max() * abs(-_nearPlane))
+    {
+       return radius * (p.z / -_nearPlane);
+    }
+    else
+    {
+       throw Iex::DivzeroExc
+           ("Bad viewing frustum: the near clipping plane is too "
+            "close to zero");
+    }
+}
+
+template<class T>
+void Frustum<T>::planes(Plane3<T> p[6])
+{
+    //
+    // Plane order: Top, Right, Bottom, Left, Near, Far.
+    //  Normals point outwards.
+    //
+
+    if (! _orthographic)
+    {
+        Vec3<T> a( _left,  _bottom, -_nearPlane);
+        Vec3<T> b( _left,  _top,    -_nearPlane);
+        Vec3<T> c( _right, _top,    -_nearPlane);
+        Vec3<T> d( _right, _bottom, -_nearPlane);
+        Vec3<T> o(0,0,0);
+
+        p[0].set( o, c, b );
+        p[1].set( o, d, c );
+        p[2].set( o, a, d );
+        p[3].set( o, b, a );
+    }
+    else
+    {
+        p[0].set( Vec3<T>( 0, 1, 0), _top );
+        p[1].set( Vec3<T>( 1, 0, 0), _right );
+        p[2].set( Vec3<T>( 0,-1, 0),-_bottom );
+        p[3].set( Vec3<T>(-1, 0, 0),-_left );
+    }
+    p[4].set( Vec3<T>(0, 0, 1), -_nearPlane );
+    p[5].set( Vec3<T>(0, 0,-1), _farPlane );
+}
+
+
+template<class T>
+void Frustum<T>::planes(Plane3<T> p[6], const Matrix44<T> &M)
+{
+    //
+    // Plane order: Top, Right, Bottom, Left, Near, Far.
+    //  Normals point outwards.
+    //
+
+    Vec3<T> a   = Vec3<T>( _left,  _bottom, -_nearPlane) * M;
+    Vec3<T> b   = Vec3<T>( _left,  _top,    -_nearPlane) * M;
+    Vec3<T> c   = Vec3<T>( _right, _top,    -_nearPlane) * M;
+    Vec3<T> d   = Vec3<T>( _right, _bottom, -_nearPlane) * M;
+    if (! _orthographic)
+    {
+        double s    = _farPlane / double(_nearPlane);
+        T farLeft   = (T) (s * _left);
+        T farRight  = (T) (s * _right);
+        T farTop    = (T) (s * _top);
+        T farBottom = (T) (s * _bottom);
+        Vec3<T> e   = Vec3<T>( farLeft,  farBottom, -_farPlane) * M;
+        Vec3<T> f   = Vec3<T>( farLeft,  farTop,    -_farPlane) * M;
+        Vec3<T> g   = Vec3<T>( farRight, farTop,    -_farPlane) * M;
+        Vec3<T> o   = Vec3<T>(0,0,0) * M;
+        p[0].set( o, c, b );
+        p[1].set( o, d, c );
+        p[2].set( o, a, d );
+        p[3].set( o, b, a );
+        p[4].set( a, d, c );
+        p[5].set( e, f, g );
+     }
+    else
+    {
+        Vec3<T> e   = Vec3<T>( _left,  _bottom, -_farPlane) * M;
+        Vec3<T> f   = Vec3<T>( _left,  _top,    -_farPlane) * M;
+        Vec3<T> g   = Vec3<T>( _right, _top,    -_farPlane) * M;
+        Vec3<T> h   = Vec3<T>( _right, _bottom, -_farPlane) * M;
+        p[0].set( c, g, f );
+        p[1].set( d, h, g );
+        p[2].set( a, e, h );
+        p[3].set( b, f, e );
+        p[4].set( a, d, c );
+        p[5].set( e, f, g );
+    }
+}
+
+typedef Frustum<float> Frustumf;
+typedef Frustum<double> Frustumd;
+
+
+} // namespace Imath
+
+
+#if defined _WIN32 || defined _WIN64
+    #ifdef _redef_near
+        #define near
+    #endif
+    #ifdef _redef_far
+        #define far
+    #endif
+#endif
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathFrustumTest.h b/3rdparty/openexr/Imath/ImathFrustumTest.h
new file mode 100644 (file)
index 0000000..a726efc
--- /dev/null
@@ -0,0 +1,410 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHFRUSTUMTEST_H
+#define INCLUDED_IMATHFRUSTUMTEST_H
+
+//-------------------------------------------------------------------------
+//
+//      This file contains algorithms applied to or in conjunction with
+//     Frustum visibility testing (Imath::Frustum).
+//
+//     Methods for frustum-based rejection of primitives are contained here.
+//
+//-------------------------------------------------------------------------
+
+#include "ImathFrustum.h"
+#include "ImathBox.h"
+#include "ImathSphere.h"
+#include "ImathMatrix.h"
+#include "ImathVec.h"
+
+namespace Imath {
+
+/////////////////////////////////////////////////////////////////
+// FrustumTest
+//
+//     template class FrustumTest<T>
+//
+// This is a helper class, designed to accelerate the case
+// where many tests are made against the same frustum.
+// That's a really common case.
+//
+// The acceleration is achieved by pre-computing the planes of
+// the frustum, along with the ablsolute values of the plane normals.
+//
+
+
+
+//////////////////////////////////////////////////////////////////
+// How to use this
+//
+// Given that you already have:
+//    Imath::Frustum   myFrustum
+//    IMath::Matrix44  myCameraWorldMatrix
+//
+// First, make a frustum test object:
+//    FrustumTest myFrustumTest(myFrustum, myCameraWorldMatrix)
+//
+// Whenever the camera or frustum changes, call:
+//    myFrustumTest.setFrustum(myFrustum, myCameraWorldMatrix)
+//
+// For each object you want to test for visibility, call:
+//    myFrustumTest.isVisible(myBox)
+//    myFrustumTest.isVisible(mySphere)
+//    myFrustumTest.isVisible(myVec3)
+//    myFrustumTest.completelyContains(myBox)
+//    myFrustumTest.completelyContains(mySphere)
+//
+
+
+
+
+//////////////////////////////////////////////////////////////////
+// Explanation of how it works
+//
+//
+// We store six world-space Frustum planes (nx, ny, nz, offset)
+//
+// Points: To test a Vec3 for visibility, test it against each plane
+//         using the normal (v dot n - offset) method. (the result is exact)
+//
+// BBoxes: To test an axis-aligned bbox, test the center against each plane
+//         using the normal (v dot n - offset) method, but offset by the
+//         box extents dot the abs of the plane normal. (the result is NOT
+//         exact, but will not return false-negatives.)
+//
+// Spheres: To test a sphere, test the center against each plane
+//         using the normal (v dot n - offset) method, but offset by the
+//         sphere's radius. (the result is NOT exact, but will not return
+//         false-negatives.)
+//
+//
+// SPECIAL NOTE: "Where are the dot products?"
+//     Actual dot products are currently slow for most SIMD architectures.
+//     In order to keep this code optimization-ready, the dot products
+//     are all performed using vector adds and multipies.
+//
+//     In order to do this, the plane equations are stored in "transpose"
+//     form, with the X components grouped into an X vector, etc.
+//
+
+
+template <class T>
+class FrustumTest
+{
+public:
+    FrustumTest()
+    {
+        Frustum<T>  frust;
+        Matrix44<T> cameraMat;
+        cameraMat.makeIdentity();
+        setFrustum(frust, cameraMat);
+    }
+    FrustumTest(Frustum<T> &frustum, const Matrix44<T> &cameraMat)
+    {
+        setFrustum(frustum, cameraMat);
+    }
+
+    ////////////////////////////////////////////////////////////////////
+    // setFrustum()
+    // This updates the frustum test with a new frustum and matrix.
+    // This should usually be called just once per frame.
+    void setFrustum(Frustum<T> &frustum, const Matrix44<T> &cameraMat);
+
+    ////////////////////////////////////////////////////////////////////
+    // isVisible()
+    // Check to see if shapes are visible.
+    bool isVisible(const Sphere3<T> &sphere) const;
+    bool isVisible(const Box<Vec3<T> > &box) const;
+    bool isVisible(const Vec3<T> &vec) const;
+    
+    ////////////////////////////////////////////////////////////////////
+    // completelyContains()
+    // Check to see if shapes are entirely contained.
+    bool completelyContains(const Sphere3<T> &sphere) const;
+    bool completelyContains(const Box<Vec3<T> > &box) const;
+    
+    // These next items are kept primarily for debugging tools.
+    // It's useful for drawing the culling environment, and also
+    // for getting an "outside view" of the culling frustum.
+    Imath::Matrix44<T> cameraMat() const {return cameraMatrix;}
+    Imath::Frustum<T> currentFrustum() const {return currFrustum;}
+
+protected:
+    // To understand why the planes are stored this way, see
+    // the SPECIAL NOTE above.
+    Vec3<T> planeNormX[2];  // The X compunents from 6 plane equations
+    Vec3<T> planeNormY[2];  // The Y compunents from 6 plane equations
+    Vec3<T> planeNormZ[2];  // The Z compunents from 6 plane equations
+
+    Vec3<T> planeOffsetVec[2]; // The distance offsets from 6 plane equations
+
+    // The absolute values are stored to assist with bounding box tests.
+    Vec3<T> planeNormAbsX[2];  // The abs(X) compunents from 6 plane equations
+    Vec3<T> planeNormAbsY[2];  // The abs(X) compunents from 6 plane equations
+    Vec3<T> planeNormAbsZ[2];  // The abs(X) compunents from 6 plane equations
+
+    // These are kept primarily for debugging tools.
+    Frustum<T> currFrustum;
+    Matrix44<T> cameraMatrix;
+};
+
+
+////////////////////////////////////////////////////////////////////
+// setFrustum()
+// This should usually only be called once per frame, or however
+// often the camera moves.
+template<class T>
+void FrustumTest<T>::setFrustum(Frustum<T> &frustum,
+                                const Matrix44<T> &cameraMat)
+{
+    Plane3<T> frustumPlanes[6];
+    frustum.planes(frustumPlanes, cameraMat);
+
+    // Here's where we effectively transpose the plane equations.
+    // We stuff all six X's into the two planeNormX vectors, etc.
+    for (int i = 0; i < 2; ++i)
+    {
+        int index = i * 3;
+
+        planeNormX[i]     = Vec3<T>(frustumPlanes[index + 0].normal.x,
+                                    frustumPlanes[index + 1].normal.x, 
+                                    frustumPlanes[index + 2].normal.x);
+        planeNormY[i]     = Vec3<T>(frustumPlanes[index + 0].normal.y,
+                                    frustumPlanes[index + 1].normal.y,
+                                    frustumPlanes[index + 2].normal.y);
+        planeNormZ[i]     = Vec3<T>(frustumPlanes[index + 0].normal.z,
+                                    frustumPlanes[index + 1].normal.z,
+                                    frustumPlanes[index + 2].normal.z);
+
+        planeNormAbsX[i]  = Vec3<T>(Imath::abs(planeNormX[i].x),
+                                    Imath::abs(planeNormX[i].y), 
+                                    Imath::abs(planeNormX[i].z));
+        planeNormAbsY[i]  = Vec3<T>(Imath::abs(planeNormY[i].x), 
+                                    Imath::abs(planeNormY[i].y),
+                                    Imath::abs(planeNormY[i].z));
+        planeNormAbsZ[i]  = Vec3<T>(Imath::abs(planeNormZ[i].x), 
+                                    Imath::abs(planeNormZ[i].y),
+                                    Imath::abs(planeNormZ[i].z));
+
+        planeOffsetVec[i] = Vec3<T>(frustumPlanes[index + 0].distance,
+                                    frustumPlanes[index + 1].distance,
+                                    frustumPlanes[index + 2].distance);
+    }
+    currFrustum = frustum;
+    cameraMatrix = cameraMat;
+}
+
+
+////////////////////////////////////////////////////////////////////
+// isVisible(Sphere)
+// Returns true if any part of the sphere is inside
+// the frustum.
+// The result MAY return close false-positives, but not false-negatives.
+//
+template<typename T>
+bool FrustumTest<T>::isVisible(const Sphere3<T> &sphere) const
+{
+    Vec3<T> center = sphere.center;
+    Vec3<T> radiusVec = Vec3<T>(sphere.radius, sphere.radius, sphere.radius);
+
+    // This is a vertical dot-product on three vectors at once.
+    Vec3<T> d0  = planeNormX[0] * center.x 
+                + planeNormY[0] * center.y 
+                + planeNormZ[0] * center.z 
+                - radiusVec
+                - planeOffsetVec[0];
+
+    if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0)
+        return false;
+
+    Vec3<T> d1  = planeNormX[1] * center.x 
+                + planeNormY[1] * center.y 
+                + planeNormZ[1] * center.z 
+                - radiusVec
+                - planeOffsetVec[1];
+
+    if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0)
+        return false;
+
+    return true;
+}
+
+////////////////////////////////////////////////////////////////////
+// completelyContains(Sphere)
+// Returns true if every part of the sphere is inside
+// the frustum.
+// The result MAY return close false-negatives, but not false-positives.
+//
+template<typename T>
+bool FrustumTest<T>::completelyContains(const Sphere3<T> &sphere) const
+{
+    Vec3<T> center = sphere.center;
+    Vec3<T> radiusVec = Vec3<T>(sphere.radius, sphere.radius, sphere.radius);
+
+    // This is a vertical dot-product on three vectors at once.
+    Vec3<T> d0  = planeNormX[0] * center.x 
+                + planeNormY[0] * center.y 
+                + planeNormZ[0] * center.z 
+                + radiusVec
+                - planeOffsetVec[0];
+
+    if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0)
+        return false;
+
+    Vec3<T> d1  = planeNormX[1] * center.x 
+                + planeNormY[1] * center.y 
+                + planeNormZ[1] * center.z 
+                + radiusVec
+                - planeOffsetVec[1];
+
+    if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0)
+        return false;
+
+    return true;
+}
+
+////////////////////////////////////////////////////////////////////
+// isVisible(Box)
+// Returns true if any part of the axis-aligned box
+// is inside the frustum.
+// The result MAY return close false-positives, but not false-negatives.
+//
+template<typename T>
+bool FrustumTest<T>::isVisible(const Box<Vec3<T> > &box) const
+{
+    Vec3<T> center = (box.min + box.max) / 2;
+    Vec3<T> extent = (box.max - center);
+
+    // This is a vertical dot-product on three vectors at once.
+    Vec3<T> d0  = planeNormX[0] * center.x 
+                + planeNormY[0] * center.y 
+                + planeNormZ[0] * center.z
+                - planeNormAbsX[0] * extent.x 
+                - planeNormAbsY[0] * extent.y 
+                - planeNormAbsZ[0] * extent.z 
+                - planeOffsetVec[0];
+
+    if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0)
+        return false;
+
+    Vec3<T> d1  = planeNormX[1] * center.x 
+                + planeNormY[1] * center.y 
+                + planeNormZ[1] * center.z
+                - planeNormAbsX[1] * extent.x 
+                - planeNormAbsY[1] * extent.y 
+                - planeNormAbsZ[1] * extent.z 
+                - planeOffsetVec[1];
+
+    if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0)
+        return false;
+
+    return true;
+}
+
+////////////////////////////////////////////////////////////////////
+// completelyContains(Box)
+// Returns true if every part of the axis-aligned box
+// is inside the frustum.
+// The result MAY return close false-negatives, but not false-positives.
+//
+template<typename T>
+bool FrustumTest<T>::completelyContains(const Box<Vec3<T> > &box) const
+{
+    Vec3<T> center = (box.min + box.max) / 2;
+    Vec3<T> extent = (box.max - center);
+
+    // This is a vertical dot-product on three vectors at once.
+    Vec3<T> d0  = planeNormX[0] * center.x 
+                + planeNormY[0] * center.y 
+                + planeNormZ[0] * center.z
+                + planeNormAbsX[0] * extent.x 
+                + planeNormAbsY[0] * extent.y 
+                + planeNormAbsZ[0] * extent.z 
+                - planeOffsetVec[0];
+
+    if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0)
+        return false;
+
+    Vec3<T> d1  = planeNormX[1] * center.x 
+                + planeNormY[1] * center.y 
+                + planeNormZ[1] * center.z
+                + planeNormAbsX[1] * extent.x 
+                + planeNormAbsY[1] * extent.y 
+                + planeNormAbsZ[1] * extent.z 
+                - planeOffsetVec[1];
+
+    if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0)
+        return false;
+
+    return true;
+}
+
+
+////////////////////////////////////////////////////////////////////
+// isVisible(Vec3)
+// Returns true if the point is inside the frustum.
+//
+template<typename T>
+bool FrustumTest<T>::isVisible(const Vec3<T> &vec) const
+{
+    // This is a vertical dot-product on three vectors at once.
+    Vec3<T> d0  = (planeNormX[0] * vec.x) 
+                + (planeNormY[0] * vec.y) 
+                + (planeNormZ[0] * vec.z) 
+                - planeOffsetVec[0];
+
+    if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0)
+        return false;
+
+    Vec3<T> d1  = (planeNormX[1] * vec.x) 
+                + (planeNormY[1] * vec.y) 
+                + (planeNormZ[1] * vec.z) 
+                - planeOffsetVec[1];
+
+    if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0)
+        return false;
+
+    return true;
+}
+
+
+typedef FrustumTest<float>     FrustumTestf;
+typedef FrustumTest<double> FrustumTestd;
+
+} //namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathFun.cpp b/3rdparty/openexr/Imath/ImathFun.cpp
new file mode 100644 (file)
index 0000000..defab93
--- /dev/null
@@ -0,0 +1,181 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+#include "ImathFun.h"
+
+namespace Imath {
+
+
+float
+succf (float f)
+{
+    union {float f; int i;} u;
+    u.f = f;
+
+    if ((u.i & 0x7f800000) == 0x7f800000)
+    {
+        // Nan or infinity; don't change value.
+    }
+    else if (u.i == 0x00000000 || u.i == 0x80000000)
+    {
+        // Plus or minus zero.
+
+        u.i = 0x00000001;
+    }
+    else if (u.i > 0)
+    {
+        // Positive float, normalized or denormalized.
+        // Incrementing the largest positive float
+        // produces +infinity.
+
+        ++u.i;
+    }
+    else
+    {
+        // Negative normalized or denormalized float.
+
+        --u.i;
+    }
+
+    return u.f;
+}
+
+
+float
+predf (float f)
+{
+    union {float f; int i;} u;
+    u.f = f;
+
+    if ((u.i & 0x7f800000) == 0x7f800000)
+    {
+        // Nan or infinity; don't change value.
+    }
+    else if (u.i == 0x00000000 || u.i == 0x80000000)
+    {
+        // Plus or minus zero.
+
+        u.i = 0x80000001;
+    }
+    else if (u.i > 0)
+    {
+        // Positive float, normalized or denormalized.
+
+        --u.i;
+    }
+    else
+    {
+        // Negative normalized or denormalized float.
+        // Decrementing the largest negative float
+        // produces -infinity.
+
+        ++u.i;
+    }
+
+    return u.f;
+}
+
+
+double
+succd (double d)
+{
+    union {double d; Int64 i;} u;
+    u.d = d;
+
+    if ((u.i & 0x7ff0000000000000LL) == 0x7ff0000000000000LL)
+    {
+        // Nan or infinity; don't change value.
+    }
+    else if (u.i == 0x0000000000000000LL || u.i == 0x8000000000000000LL)
+    {
+        // Plus or minus zero.
+
+        u.i = 0x0000000000000001LL;
+    }
+    else if (u.i > 0)
+    {
+        // Positive double, normalized or denormalized.
+        // Incrementing the largest positive double
+        // produces +infinity.
+
+        ++u.i;
+    }
+    else
+    {
+        // Negative normalized or denormalized double.
+
+        --u.i;
+    }
+
+    return u.d;
+}
+
+
+double
+predd (double d)
+{
+    union {double d; Int64 i;} u;
+    u.d = d;
+
+    if ((u.i & 0x7ff0000000000000LL) == 0x7ff0000000000000LL)
+    {
+        // Nan or infinity; don't change value.
+    }
+    else if (u.i == 0x0000000000000000LL || u.i == 0x8000000000000000LL)
+    {
+        // Plus or minus zero.
+
+        u.i = 0x8000000000000001LL;
+    }
+    else if (u.i > 0)
+    {
+        // Positive double, normalized or denormalized.
+
+        --u.i;
+    }
+    else
+    {
+        // Negative normalized or denormalized double.
+        // Decrementing the largest negative double
+        // produces -infinity.
+
+        ++u.i;
+    }
+
+    return u.d;
+}
+
+
+} // namespace Imath
diff --git a/3rdparty/openexr/Imath/ImathFun.h b/3rdparty/openexr/Imath/ImathFun.h
new file mode 100644 (file)
index 0000000..0baf4ff
--- /dev/null
@@ -0,0 +1,267 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHFUN_H
+#define INCLUDED_IMATHFUN_H
+
+//-----------------------------------------------------------------------------
+//
+//     Miscellaneous utility functions
+//
+//-----------------------------------------------------------------------------
+
+#include "ImathLimits.h"
+#include "ImathInt64.h"
+
+namespace Imath {
+
+template <class T>
+inline T
+abs (T a)
+{
+    return (a > T(0)) ? a : -a;
+}
+
+
+template <class T>
+inline int
+sign (T a)
+{
+    return (a > T(0))? 1 : ((a < T(0)) ? -1 : 0);
+}
+
+
+template <class T, class Q>
+inline T
+lerp (T a, T b, Q t)
+{
+    return (T) (a * (1 - t) + b * t);
+}
+
+
+template <class T, class Q>
+inline T
+ulerp (T a, T b, Q t)
+{
+    return (T) ((a > b)? (a - (a - b) * t): (a + (b - a) * t));
+}
+
+
+template <class T>
+inline T
+lerpfactor(T m, T a, T b)
+{
+    //
+    // Return how far m is between a and b, that is return t such that
+    // if:
+    //     t = lerpfactor(m, a, b);
+    // then:
+    //     m = lerp(a, b, t);
+    //
+    // If a==b, return 0.
+    //
+
+    T d = b - a;
+    T n = m - a;
+
+    if (abs(d) > T(1) || abs(n) < limits<T>::max() * abs(d))
+       return n / d;
+
+    return T(0);
+}
+
+
+template <class T>
+inline T
+clamp (T a, T l, T h)
+{
+    return (a < l)? l : ((a > h)? h : a);
+}
+
+
+template <class T>
+inline int
+cmp (T a, T b)
+{
+    return Imath::sign (a - b);
+}
+
+
+template <class T>
+inline int
+cmpt (T a, T b, T t)
+{
+    return (Imath::abs (a - b) <= t)? 0 : cmp (a, b);
+}
+
+
+template <class T>
+inline bool
+iszero (T a, T t)
+{
+    return (Imath::abs (a) <= t) ? 1 : 0;
+}
+
+
+template <class T1, class T2, class T3>
+inline bool
+equal (T1 a, T2 b, T3 t)
+{
+    return Imath::abs (a - b) <= t;
+}
+
+template <class T>
+inline int
+floor (T x)
+{
+    return (x >= 0)? int (x): -(int (-x) + (-x > int (-x)));
+}
+
+
+template <class T>
+inline int
+ceil (T x)
+{
+    return -floor (-x);
+}
+
+template <class T>
+inline int
+trunc (T x)
+{
+    return (x >= 0) ? int(x) : -int(-x);
+}
+
+
+//
+// Integer division and remainder where the
+// remainder of x/y has the same sign as x:
+//
+//     divs(x,y) == (abs(x) / abs(y)) * (sign(x) * sign(y))
+//     mods(x,y) == x - y * divs(x,y)
+//
+
+inline int
+divs (int x, int y)
+{
+    return (x >= 0)? ((y >= 0)?  ( x / y): -( x / -y)):
+                    ((y >= 0)? -(-x / y):  (-x / -y));
+}
+
+
+inline int
+mods (int x, int y)
+{
+    return (x >= 0)? ((y >= 0)?  ( x % y):  ( x % -y)):
+                    ((y >= 0)? -(-x % y): -(-x % -y));
+}
+
+
+//
+// Integer division and remainder where the
+// remainder of x/y is always positive:
+//
+//     divp(x,y) == floor (double(x) / double (y))
+//     modp(x,y) == x - y * divp(x,y)
+// 
+
+inline int
+divp (int x, int y)
+{
+    return (x >= 0)? ((y >= 0)?  (     x  / y): -(      x  / -y)):
+                    ((y >= 0)? -((y-1-x) / y):  ((-y-1-x) / -y));
+}
+
+
+inline int
+modp (int x, int y)
+{
+    return x - y * divp (x, y);
+}
+
+//----------------------------------------------------------
+// Successor and predecessor for floating-point numbers:
+//
+// succf(f)     returns float(f+e), where e is the smallest
+//              positive number such that float(f+e) != f.
+//
+// predf(f)     returns float(f-e), where e is the smallest
+//              positive number such that float(f-e) != f.
+// 
+// succd(d)     returns double(d+e), where e is the smallest
+//              positive number such that double(d+e) != d.
+//
+// predd(d)     returns double(d-e), where e is the smallest
+//              positive number such that double(d-e) != d.
+//
+// Exceptions:  If the input value is an infinity or a nan,
+//              succf(), predf(), succd(), and predd() all
+//              return the input value without changing it.
+// 
+//----------------------------------------------------------
+
+float succf (float f);
+float predf (float f);
+
+double succd (double d);
+double predd (double d);
+
+//
+// Return true if the number is not a NaN or Infinity.
+//
+
+inline bool 
+finitef (float f)
+{
+    union {float f; int i;} u;
+    u.f = f;
+
+    return (u.i & 0x7f800000) != 0x7f800000;
+}
+
+inline bool 
+finited (double d)
+{
+    union {double d; Int64 i;} u;
+    u.d = d;
+
+    return (u.i & 0x7ff0000000000000LL) != 0x7ff0000000000000LL;
+}
+
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathGL.h b/3rdparty/openexr/Imath/ImathGL.h
new file mode 100644 (file)
index 0000000..36be0fd
--- /dev/null
@@ -0,0 +1,159 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHGL_H
+#define INCLUDED_IMATHGL_H
+
+#include <GL/gl.h>
+
+#include "ImathVec.h"
+#include "ImathMatrix.h"
+#include "IexMathExc.h"
+#include "ImathFun.h"
+
+inline void glVertex    ( const Imath::V3f &v ) { glVertex3f(v.x,v.y,v.z);   }
+inline void glVertex    ( const Imath::V2f &v ) { glVertex2f(v.x,v.y);       }
+inline void glNormal    ( const Imath::V3f &n ) { glNormal3f(n.x,n.y,n.z);   }
+inline void glColor     ( const Imath::V3f &c ) { glColor3f(c.x,c.y,c.z);    }
+inline void glTranslate ( const Imath::V3f &t ) { glTranslatef(t.x,t.y,t.z); }
+
+inline void glTexCoord( const Imath::V2f &t )
+{
+    glTexCoord2f(t.x,t.y);
+}
+
+inline void glDisableTexture()
+{
+    glActiveTexture(GL_TEXTURE1);
+    glBindTexture(GL_TEXTURE_2D, 0);
+    glDisable(GL_TEXTURE_2D);
+
+    glActiveTexture(GL_TEXTURE0);
+}
+
+namespace {
+    
+const float GL_FLOAT_MAX = 1.8e+19; // sqrt (FLT_MAX)
+
+inline bool
+badFloat (float f)
+{
+    return !Imath::finitef (f) || f < - GL_FLOAT_MAX || f > GL_FLOAT_MAX;
+}
+
+} // namespace
+       
+inline void
+throwBadMatrix (const Imath::M44f& m)
+{
+    if (badFloat (m[0][0]) ||
+       badFloat (m[0][1]) ||
+       badFloat (m[0][2]) ||
+       badFloat (m[0][3]) || 
+       badFloat (m[1][0]) ||
+       badFloat (m[1][1]) ||
+       badFloat (m[1][2]) ||
+       badFloat (m[1][3]) || 
+       badFloat (m[2][0]) ||
+       badFloat (m[2][1]) ||
+       badFloat (m[2][2]) ||
+       badFloat (m[2][3]) || 
+       badFloat (m[3][0]) ||
+       badFloat (m[3][1]) ||
+       badFloat (m[3][2]) ||
+       badFloat (m[3][3]))
+       throw Iex::OverflowExc ("GL matrix overflow");
+}
+
+inline void 
+glMultMatrix( const Imath::M44f& m ) 
+{ 
+    throwBadMatrix (m);
+    glMultMatrixf( (GLfloat*)m[0] ); 
+}
+
+inline void 
+glMultMatrix( const Imath::M44f* m ) 
+{ 
+    throwBadMatrix (*m);
+    glMultMatrixf( (GLfloat*)(*m)[0] ); 
+}
+
+inline void 
+glLoadMatrix( const Imath::M44f& m ) 
+{ 
+    throwBadMatrix (m);
+    glLoadMatrixf( (GLfloat*)m[0] ); 
+}
+
+inline void 
+glLoadMatrix( const Imath::M44f* m ) 
+{ 
+    throwBadMatrix (*m);
+    glLoadMatrixf( (GLfloat*)(*m)[0] ); 
+}
+
+
+namespace Imath {
+
+//
+// Class objects that push/pop the GL state. These objects assist with
+// proper cleanup of the state when exceptions are thrown.
+//
+
+class GLPushMatrix {
+  public:
+
+    GLPushMatrix ()                    { glPushMatrix(); }
+    ~GLPushMatrix()                    { glPopMatrix(); }
+};
+
+class GLPushAttrib {
+  public:
+
+    GLPushAttrib (GLbitfield mask)     { glPushAttrib (mask); }
+    ~GLPushAttrib()                    { glPopAttrib(); }
+};
+
+class GLBegin {
+  public:
+
+    GLBegin (GLenum mode)              { glBegin (mode); }
+    ~GLBegin()                         { glEnd(); }
+};
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathGLU.h b/3rdparty/openexr/Imath/ImathGLU.h
new file mode 100644 (file)
index 0000000..e43d560
--- /dev/null
@@ -0,0 +1,54 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHGLU_H
+#define INCLUDED_IMATHGLU_H
+
+#include <GL/gl.h>
+#include <GL/glu.h>
+
+#include "ImathVec.h"
+
+inline
+void
+gluLookAt(const Imath::V3f &pos, const Imath::V3f &interest, const Imath::V3f &up)
+{
+    gluLookAt(pos.x,      pos.y,      pos.z,
+              interest.x, interest.y, interest.z,
+              up.x,       up.y,       up.z);
+}
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathHalfLimits.h b/3rdparty/openexr/Imath/ImathHalfLimits.h
new file mode 100644 (file)
index 0000000..2170f94
--- /dev/null
@@ -0,0 +1,66 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHHALFLIMITS_H
+#define INCLUDED_IMATHHALFLIMITS_H
+
+//--------------------------------------------------
+//
+//     Imath-style limits for class half.
+//
+//--------------------------------------------------
+
+#include "ImathLimits.h"
+#include "half.h"
+
+namespace Imath {
+
+
+template <>
+struct limits <half>
+{
+    static float               min()           {return -HALF_MAX;}
+    static float               max()           {return HALF_MAX;}
+    static float               smallest()      {return HALF_MIN;}
+    static float               epsilon()       {return HALF_EPSILON;}
+    static bool                        isIntegral()    {return false;}
+    static bool                        isSigned()      {return true;}
+};
+
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathInt64.h b/3rdparty/openexr/Imath/ImathInt64.h
new file mode 100644 (file)
index 0000000..71ee4ec
--- /dev/null
@@ -0,0 +1,61 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATH_INT64_H
+#define INCLUDED_IMATH_INT64_H
+
+//----------------------------------------------------------------------------
+//
+//     Int64 -- unsigned 64-bit integers
+//
+//----------------------------------------------------------------------------
+
+#include <limits.h>
+
+namespace Imath {
+
+
+#if (defined _WIN32 || defined _WIN64) && _MSC_VER >= 1300
+    typedef unsigned __int64 Int64;
+#elif ULONG_MAX == 18446744073709551615LU
+    typedef long unsigned int Int64;
+#else
+    typedef long long unsigned int Int64;
+#endif
+
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathInterval.h b/3rdparty/openexr/Imath/ImathInterval.h
new file mode 100644 (file)
index 0000000..2d9d7d3
--- /dev/null
@@ -0,0 +1,224 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHINTERVAL_H
+#define INCLUDED_IMATHINTERVAL_H
+
+
+//-------------------------------------------------------------------
+//
+//     class Imath::Interval<class T>
+//     --------------------------------
+//
+//     An Interval has a min and a max and some miscellaneous
+//     functions. It is basically a Box<T> that allows T to be
+//     a scalar.
+//
+//-------------------------------------------------------------------
+
+#include "ImathVec.h"
+
+namespace Imath {
+
+
+template <class T>     
+class Interval
+{
+  public:
+
+    //-------------------------
+    //  Data Members are public
+    //-------------------------
+
+    T                          min;
+    T                          max;
+
+    //-----------------------------------------------------
+    // Constructors - an "empty" Interval is created by default
+    //-----------------------------------------------------
+
+    Interval(); 
+    Interval(const T& point);
+    Interval(const T& minT, const T& maxT);
+
+    //--------------------------------
+    //  Operators:  we get != from STL
+    //--------------------------------
+    
+    bool                        operator == (const Interval<T> &src) const;
+
+    //------------------
+    // Interval manipulation
+    //------------------
+
+    void                       makeEmpty();
+    void                       extendBy(const T& point);
+    void                       extendBy(const Interval<T>& interval);
+
+    //---------------------------------------------------
+    // Query functions - these compute results each time
+    //---------------------------------------------------
+
+    T                          size() const;
+    T                          center() const;
+    bool                       intersects(const T &point) const;
+    bool                       intersects(const Interval<T> &interval) const;
+
+    //----------------
+    // Classification
+    //----------------
+
+    bool                       hasVolume() const;
+    bool                       isEmpty() const;
+};
+
+
+//--------------------
+// Convenient typedefs
+//--------------------
+
+
+typedef Interval <float>  Intervalf;
+typedef Interval <double> Intervald;
+typedef Interval <short>  Intervals;
+typedef Interval <int>    Intervali;
+
+//----------------
+//  Implementation
+//----------------
+
+
+template <class T>
+inline Interval<T>::Interval()
+{
+    makeEmpty();
+}
+
+template <class T>
+inline Interval<T>::Interval(const T& point)
+{
+    min = point;
+    max = point;
+}
+
+template <class T>
+inline Interval<T>::Interval(const T& minV, const T& maxV)
+{
+    min = minV;
+    max = maxV;
+}
+
+template <class T>
+inline bool
+Interval<T>::operator == (const Interval<T> &src) const
+{
+    return (min == src.min && max == src.max);
+}
+
+template <class T>
+inline void
+Interval<T>::makeEmpty()
+{
+    min = limits<T>::max();
+    max = limits<T>::min();
+}
+
+template <class T>
+inline void
+Interval<T>::extendBy(const T& point)
+{
+    if ( point < min )
+       min = point;
+    
+    if ( point > max )
+       max = point;
+}
+
+template <class T>
+inline void
+Interval<T>::extendBy(const Interval<T>& interval)
+{
+    if ( interval.min < min )
+       min = interval.min;
+
+    if ( interval.max > max )
+       max = interval.max;
+}
+
+template <class T>
+inline bool
+Interval<T>::intersects(const T& point) const
+{
+    return point >= min && point <= max;
+}
+
+template <class T>
+inline bool
+Interval<T>::intersects(const Interval<T>& interval) const
+{
+    return interval.max >= min && interval.min <= max;
+}
+
+template <class T> 
+inline T
+Interval<T>::size() const 
+{ 
+    return max-min;
+}
+
+template <class T> 
+inline T
+Interval<T>::center() const 
+{ 
+    return (max+min)/2;
+}
+
+template <class T>
+inline bool
+Interval<T>::isEmpty() const
+{
+    return max < min;
+}
+
+template <class T>
+inline bool Interval<T>::hasVolume() const
+{
+    return max > min;
+}
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathLimits.h b/3rdparty/openexr/Imath/ImathLimits.h
new file mode 100644 (file)
index 0000000..6ba74f6
--- /dev/null
@@ -0,0 +1,267 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHLIMITS_H
+#define INCLUDED_IMATHLIMITS_H
+
+//----------------------------------------------------------------
+//
+//     Limitations of the basic C++ numerical data types
+//
+//----------------------------------------------------------------
+
+#include <float.h>
+#include <limits.h>
+
+//------------------------------------------
+// In Windows, min and max are macros.  Yay.
+//------------------------------------------
+
+#if defined _WIN32 || defined _WIN64
+    #ifdef min
+        #undef min
+    #endif
+    #ifdef max
+        #undef max
+    #endif
+#endif
+
+namespace Imath {
+
+
+//-----------------------------------------------------------------
+//
+// Template class limits<T> returns information about the limits
+// of numerical data type T:
+//
+//     min()           largest possible negative value of type T
+//
+//     max()           largest possible positive value of type T
+//
+//     smallest()      smallest possible positive value of type T
+//                     (for float and double: smallest normalized
+//                     positive value)
+//
+//     epsilon()       smallest possible e of type T, for which
+//                     1 + e != 1
+//
+//     isIntegral()    returns true if T is an integral type
+//
+//     isSigned()      returns true if T is signed
+//
+// Class limits<T> is useful to implement template classes or
+// functions which depend on the limits of a numerical type
+// which is not known in advance; for example:
+//
+//     template <class T> max (T x[], int n)
+//     {
+//         T m = limits<T>::min();
+//
+//         for (int i = 0; i < n; i++)
+//             if (m < x[i])
+//                 m = x[i];
+//
+//         return m;
+//     }
+//
+// Class limits<T> has been implemented for the following types:
+//
+//     char, signed char, unsigned char
+//     short, unsigned short
+//     int, unsigned int
+//     long, unsigned long
+//     float
+//     double
+//     long double
+//
+// Class limits<T> has only static member functions, all of which
+// are implemented as inlines.  No objects of type limits<T> are
+// ever created.
+//
+//-----------------------------------------------------------------
+
+
+template <class T> struct limits
+{
+    static T   min();
+    static T   max();
+    static T   smallest();
+    static T   epsilon();
+    static bool        isIntegral();
+    static bool        isSigned();
+};
+
+
+//---------------
+// Implementation
+//---------------
+
+template <>
+struct limits <char>
+{
+    static char                        min()           {return CHAR_MIN;}
+    static char                        max()           {return CHAR_MAX;}
+    static char                        smallest()      {return 1;}
+    static char                        epsilon()       {return 1;}
+    static bool                        isIntegral()    {return true;}
+    static bool                        isSigned()      {return (char) ~0 < 0;}
+};
+
+template <>
+struct limits <signed char>
+{
+    static signed char         min()           {return SCHAR_MIN;}
+    static signed char         max()           {return SCHAR_MAX;}
+    static signed char         smallest()      {return 1;}
+    static signed char         epsilon()       {return 1;}
+    static bool                        isIntegral()    {return true;}
+    static bool                        isSigned()      {return true;}
+};
+
+template <>
+struct limits <unsigned char>
+{
+    static unsigned char       min()           {return 0;}
+    static unsigned char       max()           {return UCHAR_MAX;}
+    static unsigned char       smallest()      {return 1;}
+    static unsigned char       epsilon()       {return 1;}
+    static bool                        isIntegral()    {return true;}
+    static bool                        isSigned()      {return false;}
+};
+
+template <>
+struct limits <short>
+{
+    static short               min()           {return SHRT_MIN;}
+    static short               max()           {return SHRT_MAX;}
+    static short               smallest()      {return 1;}
+    static short               epsilon()       {return 1;}
+    static bool                        isIntegral()    {return true;}
+    static bool                        isSigned()      {return true;}
+};
+
+template <>
+struct limits <unsigned short>
+{
+    static unsigned short      min()           {return 0;}
+    static unsigned short      max()           {return USHRT_MAX;}
+    static unsigned short      smallest()      {return 1;}
+    static unsigned short      epsilon()       {return 1;}
+    static bool                        isIntegral()    {return true;}
+    static bool                        isSigned()      {return false;}
+};
+
+template <>
+struct limits <int>
+{
+    static int                 min()           {return INT_MIN;}
+    static int                 max()           {return INT_MAX;}
+    static int                 smallest()      {return 1;}
+    static int                 epsilon()       {return 1;}
+    static bool                        isIntegral()    {return true;}
+    static bool                        isSigned()      {return true;}
+};
+
+template <>
+struct limits <unsigned int>
+{
+    static unsigned int                min()           {return 0;}
+    static unsigned int                max()           {return UINT_MAX;}
+    static unsigned int                smallest()      {return 1;}
+    static unsigned int                epsilon()       {return 1;}
+    static bool                        isIntegral()    {return true;}
+    static bool                        isSigned()      {return false;}
+};
+
+template <>
+struct limits <long>
+{
+    static long                        min()           {return LONG_MIN;}
+    static long                        max()           {return LONG_MAX;}
+    static long                        smallest()      {return 1;}
+    static long                        epsilon()       {return 1;}
+    static bool                        isIntegral()    {return true;}
+    static bool                        isSigned()      {return true;}
+};
+
+template <>
+struct limits <unsigned long>
+{
+    static unsigned long       min()           {return 0;}
+    static unsigned long       max()           {return ULONG_MAX;}
+    static unsigned long       smallest()      {return 1;}
+    static unsigned long       epsilon()       {return 1;}
+    static bool                        isIntegral()    {return true;}
+    static bool                        isSigned()      {return false;}
+};
+
+template <>
+struct limits <float>
+{
+    static float               min()           {return -FLT_MAX;}
+    static float               max()           {return FLT_MAX;}
+    static float               smallest()      {return FLT_MIN;}
+    static float               epsilon()       {return FLT_EPSILON;}
+    static bool                        isIntegral()    {return false;}
+    static bool                        isSigned()      {return true;}
+};
+
+template <>
+struct limits <double>
+{
+    static double              min()           {return -DBL_MAX;}
+    static double              max()           {return DBL_MAX;}
+    static double              smallest()      {return DBL_MIN;}
+    static double              epsilon()       {return DBL_EPSILON;}
+    static bool                        isIntegral()    {return false;}
+    static bool                        isSigned()      {return true;}
+};
+
+template <>
+struct limits <long double>
+{
+    static long double         min()           {return -LDBL_MAX;}
+    static long double         max()           {return LDBL_MAX;}
+    static long double         smallest()      {return LDBL_MIN;}
+    static long double         epsilon()       {return LDBL_EPSILON;}
+    static bool                        isIntegral()    {return false;}
+    static bool                        isSigned()      {return true;}
+};
+
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathLine.h b/3rdparty/openexr/Imath/ImathLine.h
new file mode 100644 (file)
index 0000000..601fc6f
--- /dev/null
@@ -0,0 +1,184 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHLINE_H
+#define INCLUDED_IMATHLINE_H
+
+//-------------------------------------
+//
+//     A 3D line class template
+//
+//-------------------------------------
+
+#include "ImathVec.h"
+#include "ImathLimits.h"
+#include "ImathMatrix.h"
+
+namespace Imath {
+
+
+template <class T>
+class Line3
+{
+  public:
+
+    Vec3<T>                    pos;
+    Vec3<T>                    dir;
+    
+    //-------------------------------------------------------------
+    // Constructors - default is normalized units along direction
+    //-------------------------------------------------------------
+
+    Line3() {}
+    Line3(const Vec3<T>& point1, const Vec3<T>& point2);
+
+    //------------------
+    // State Query/Set
+    //------------------
+
+    void                       set(const Vec3<T>& point1, 
+                                   const Vec3<T>& point2);
+
+    //-------
+    // F(t)
+    //-------
+
+    Vec3<T>                    operator() (T parameter) const;
+
+    //---------
+    // Query
+    //---------
+
+    T                          distanceTo(const Vec3<T>& point) const;
+    T                          distanceTo(const Line3<T>& line) const;
+    Vec3<T>                    closestPointTo(const Vec3<T>& point) const;
+    Vec3<T>                    closestPointTo(const Line3<T>& line) const;
+};
+
+
+//--------------------
+// Convenient typedefs
+//--------------------
+
+typedef Line3<float> Line3f;
+typedef Line3<double> Line3d;
+
+
+//---------------
+// Implementation
+//---------------
+
+template <class T>
+inline Line3<T>::Line3(const Vec3<T> &p0, const Vec3<T> &p1)
+{
+    set(p0,p1);
+}
+
+template <class T>
+inline void Line3<T>::set(const Vec3<T> &p0, const Vec3<T> &p1)
+{
+    pos = p0; dir = p1-p0;
+    dir.normalize();
+}
+
+template <class T>
+inline Vec3<T> Line3<T>::operator()(T parameter) const
+{
+    return pos + dir * parameter;
+}
+
+template <class T>
+inline T Line3<T>::distanceTo(const Vec3<T>& point) const
+{
+    return (closestPointTo(point)-point).length();
+}
+
+template <class T>
+inline Vec3<T> Line3<T>::closestPointTo(const Vec3<T>& point) const
+{
+    return ((point - pos) ^ dir) * dir + pos;
+}
+
+template <class T>
+inline T Line3<T>::distanceTo(const Line3<T>& line) const
+{
+    T d = (dir % line.dir) ^ (line.pos - pos);
+    return (d >= 0)? d: -d;
+}
+
+template <class T>
+inline Vec3<T> 
+Line3<T>::closestPointTo(const Line3<T>& line) const
+{
+    // Assumes the lines are normalized
+
+    Vec3<T> posLpos = pos - line.pos ;
+    T c = dir ^ posLpos;
+    T a = line.dir ^ dir;
+    T f = line.dir ^ posLpos ;
+    T num = c - a * f;
+
+    T denom = a*a - 1;
+
+    T absDenom = ((denom >= 0)? denom: -denom);
+
+    if (absDenom < 1)
+    {
+       T absNum = ((num >= 0)? num: -num);
+
+       if (absNum >= absDenom * limits<T>::max())
+           return pos;
+    }
+
+    return pos + dir * (num / denom);
+}
+
+template<class T>
+std::ostream& operator<< (std::ostream &o, const Line3<T> &line)
+{
+    return o << "(" << line.pos << ", " << line.dir << ")";
+}
+
+template<class S, class T>
+inline Line3<S> operator * (const Line3<S> &line, const Matrix44<T> &M)
+{
+    return Line3<S>( line.pos * M, (line.pos + line.dir) * M );
+}
+
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathLineAlgo.h b/3rdparty/openexr/Imath/ImathLineAlgo.h
new file mode 100644 (file)
index 0000000..41855c9
--- /dev/null
@@ -0,0 +1,287 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHLINEALGO_H
+#define INCLUDED_IMATHLINEALGO_H
+
+//------------------------------------------------------------------
+//
+//     This file contains algorithms applied to or in conjunction
+//     with lines (Imath::Line). These algorithms may require
+//     more headers to compile. The assumption made is that these
+//     functions are called much less often than the basic line
+//     functions or these functions require more support classes
+//
+//     Contains:
+//
+//     bool closestPoints(const Line<T>& line1,
+//                        const Line<T>& line2,
+//                        Vec3<T>& point1,
+//                        Vec3<T>& point2)
+//
+//     bool intersect( const Line3<T> &line,
+//                     const Vec3<T> &v0,
+//                     const Vec3<T> &v1,
+//                     const Vec3<T> &v2,
+//                     Vec3<T> &pt,
+//                     Vec3<T> &barycentric,
+//                     bool &front)
+//
+//      V3f
+//      closestVertex(const Vec3<T> &v0,
+//                    const Vec3<T> &v1,
+//                    const Vec3<T> &v2,
+//                    const Line3<T> &l)
+//
+//     V3f
+//     rotatePoint(const Vec3<T> p, Line3<T> l, float angle)
+//
+//------------------------------------------------------------------
+
+#include "ImathLine.h"
+#include "ImathVecAlgo.h"
+#include "ImathFun.h"
+
+namespace Imath {
+
+
+template <class T>
+bool
+closestPoints
+    (const Line3<T>& line1,
+     const Line3<T>& line2,
+     Vec3<T>& point1,
+     Vec3<T>& point2)
+{
+    //
+    // Compute point1 and point2 such that point1 is on line1, point2
+    // is on line2 and the distance between point1 and point2 is minimal.
+    // This function returns true if point1 and point2 can be computed,
+    // or false if line1 and line2 are parallel or nearly parallel.
+    // This function assumes that line1.dir and line2.dir are normalized.
+    //
+
+    Vec3<T> w = line1.pos - line2.pos;
+    T d1w = line1.dir ^ w;
+    T d2w = line2.dir ^ w;
+    T d1d2 = line1.dir ^ line2.dir;
+    T n1 = d1d2 * d2w - d1w;
+    T n2 = d2w - d1d2 * d1w;
+    T d = 1 - d1d2 * d1d2;
+    T absD = abs (d);
+
+    if ((absD > 1) ||
+       (abs (n1) < limits<T>::max() * absD &&
+        abs (n2) < limits<T>::max() * absD))
+    {
+       point1 = line1 (n1 / d);
+       point2 = line2 (n2 / d);
+       return true;
+    }
+    else
+    {
+       return false;
+    }
+}
+
+
+template <class T>
+bool
+intersect
+    (const Line3<T> &line,
+     const Vec3<T> &v0,
+     const Vec3<T> &v1,
+     const Vec3<T> &v2,
+     Vec3<T> &pt,
+     Vec3<T> &barycentric,
+     bool &front)
+{
+    //
+    // Given a line and a triangle (v0, v1, v2), the intersect() function
+    // finds the intersection of the line and the plane that contains the
+    // triangle.
+    //
+    // If the intersection point cannot be computed, either because the
+    // line and the triangle's plane are nearly parallel or because the
+    // triangle's area is very small, intersect() returns false.
+    //
+    // If the intersection point is outside the triangle, intersect
+    // returns false.
+    //
+    // If the intersection point, pt, is inside the triangle, intersect()
+    // computes a front-facing flag and the barycentric coordinates of
+    // the intersection point, and returns true.
+    //
+    // The front-facing flag is true if the dot product of the triangle's
+    // normal, (v2-v1)%(v1-v0), and the line's direction is negative.
+    //
+    // The barycentric coordinates have the following property:
+    //
+    //     pt = v0 * barycentric.x + v1 * barycentric.y + v2 * barycentric.z
+    //
+
+    Vec3<T> edge0 = v1 - v0;
+    Vec3<T> edge1 = v2 - v1;
+    Vec3<T> normal = edge1 % edge0;
+
+    T l = normal.length();
+
+    if (l != 0)
+       normal /= l;
+    else
+       return false;   // zero-area triangle
+
+    //
+    // d is the distance of line.pos from the plane that contains the triangle.
+    // The intersection point is at line.pos + (d/nd) * line.dir.
+    //
+
+    T d = normal ^ (v0 - line.pos);
+    T nd = normal ^ line.dir;
+
+    if (abs (nd) > 1 || abs (d) < limits<T>::max() * abs (nd))
+       pt = line (d / nd);
+    else
+       return false;  // line and plane are nearly parallel
+
+    //
+    // Compute the barycentric coordinates of the intersection point.
+    // The intersection is inside the triangle if all three barycentric
+    // coordinates are between zero and one.
+    //
+
+    {
+       Vec3<T> en = edge0.normalized();
+       Vec3<T> a = pt - v0;
+       Vec3<T> b = v2 - v0;
+       Vec3<T> c = (a - en * (en ^ a));
+       Vec3<T> d = (b - en * (en ^ b));
+       T e = c ^ d;
+       T f = d ^ d;
+
+       if (e >= 0 && e <= f)
+           barycentric.z = e / f;
+       else
+           return false; // outside
+    }
+
+    {
+       Vec3<T> en = edge1.normalized();
+       Vec3<T> a = pt - v1;
+       Vec3<T> b = v0 - v1;
+       Vec3<T> c = (a - en * (en ^ a));
+       Vec3<T> d = (b - en * (en ^ b));
+       T e = c ^ d;
+       T f = d ^ d;
+
+       if (e >= 0 && e <= f)
+           barycentric.x = e / f;
+       else
+           return false; // outside
+    }
+
+    barycentric.y = 1 - barycentric.x - barycentric.z;
+
+    if (barycentric.y < 0)
+       return false; // outside
+
+    front = ((line.dir ^ normal) < 0);
+    return true;
+}
+
+
+template <class T>
+Vec3<T>
+closestVertex
+    (const Vec3<T> &v0,
+     const Vec3<T> &v1,
+     const Vec3<T> &v2,
+     const Line3<T> &l)
+{
+    Vec3<T> nearest = v0;
+    T neardot       = (v0 - l.closestPointTo(v0)).length2();
+    
+    T tmp           = (v1 - l.closestPointTo(v1)).length2();
+
+    if (tmp < neardot)
+    {
+        neardot = tmp;
+        nearest = v1;
+    }
+
+    tmp = (v2 - l.closestPointTo(v2)).length2();
+    if (tmp < neardot)
+    {
+        neardot = tmp;
+        nearest = v2;
+    }
+
+    return nearest;
+}
+
+
+template <class T>
+Vec3<T>
+rotatePoint (const Vec3<T> p, Line3<T> l, T angle)
+{
+    //
+    // Rotate the point p around the line l by the given angle.
+    //
+
+    //
+    // Form a coordinate frame with <x,y,a>. The rotation is the in xy
+    // plane.
+    //
+
+    Vec3<T> q = l.closestPointTo(p);
+    Vec3<T> x = p - q;
+    T radius = x.length();
+
+    x.normalize();
+    Vec3<T> y = (x % l.dir).normalize();
+
+    T cosangle = Math<T>::cos(angle);
+    T sinangle = Math<T>::sin(angle);
+
+    Vec3<T> r = q + x * radius * cosangle + y * radius * sinangle; 
+
+    return r;
+}
+
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathMath.h b/3rdparty/openexr/Imath/ImathMath.h
new file mode 100644 (file)
index 0000000..d5b4616
--- /dev/null
@@ -0,0 +1,208 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHMATH_H
+#define INCLUDED_IMATHMATH_H
+
+//----------------------------------------------------------------------------
+//
+//     ImathMath.h
+//
+//     This file contains template functions which call the double-
+//     precision math functions defined in math.h (sin(), sqrt(),
+//     exp() etc.), with specializations that call the faster
+//     single-precision versions (sinf(), sqrtf(), expf() etc.)
+//     when appropriate.
+//
+//     Example:
+//
+//         double x = Math<double>::sqrt (3);  // calls ::sqrt(double);
+//         float  y = Math<float>::sqrt (3);   // calls ::sqrtf(float);
+//
+//     When would I want to use this?
+//
+//     You may be writing a template which needs to call some function
+//     defined in math.h, for example to extract a square root, but you
+//     don't know whether to call the single- or the double-precision
+//     version of this function (sqrt() or sqrtf()):
+//
+//         template <class T>
+//         T
+//         glorp (T x)
+//         {
+//             return sqrt (x + 1);            // should call ::sqrtf(float)
+//         }                                   // if x is a float, but we
+//                                             // don't know if it is
+//
+//     Using the templates in this file, you can make sure that
+//     the appropriate version of the math function is called:
+//
+//         template <class T>
+//         T
+//         glorp (T x, T y)
+//         {
+//             return Math<T>::sqrt (x + 1);   // calls ::sqrtf(float) if x
+//         }                                   // is a float, ::sqrt(double)
+//                                             // otherwise
+//
+//----------------------------------------------------------------------------
+
+#include "ImathPlatform.h"
+#include "ImathLimits.h"
+#include <math.h>
+
+namespace Imath {
+
+
+template <class T>
+struct Math
+{
+   static T    acos  (T x)             {return ::acos (double(x));}    
+   static T    asin  (T x)             {return ::asin (double(x));}
+   static T    atan  (T x)             {return ::atan (double(x));}
+   static T    atan2 (T x, T y)        {return ::atan2 (double(x), double(y));}
+   static T    cos   (T x)             {return ::cos (double(x));}
+   static T    sin   (T x)             {return ::sin (double(x));}
+   static T    tan   (T x)             {return ::tan (double(x));}
+   static T    cosh  (T x)             {return ::cosh (double(x));}
+   static T    sinh  (T x)             {return ::sinh (double(x));}
+   static T    tanh  (T x)             {return ::tanh (double(x));}
+   static T    exp   (T x)             {return ::exp (double(x));}
+   static T    log   (T x)             {return ::log (double(x));}
+   static T    log10 (T x)             {return ::log10 (double(x));}
+   static T    modf  (T x, T *iptr)
+   {
+        double ival;
+        T rval( ::modf (double(x),&ival));
+       *iptr = ival;
+       return rval;
+   }
+   static T    pow   (T x, T y)        {return ::pow (double(x), double(y));}
+   static T    sqrt  (T x)             {return ::sqrt (double(x));}
+   static T    ceil  (T x)             {return ::ceil (double(x));}
+   static T    fabs  (T x)             {return ::fabs (double(x));}
+   static T    floor (T x)             {return ::floor (double(x));}
+   static T    fmod  (T x, T y)        {return ::fmod (double(x), double(y));}
+   static T    hypot (T x, T y)        {return ::hypot (double(x), double(y));}
+};
+
+
+template <>
+struct Math<float>
+{
+   static float        acos  (float x)                 {return ::acosf (x);}   
+   static float        asin  (float x)                 {return ::asinf (x);}
+   static float        atan  (float x)                 {return ::atanf (x);}
+   static float        atan2 (float x, float y)        {return ::atan2f (x, y);}
+   static float        cos   (float x)                 {return ::cosf (x);}
+   static float        sin   (float x)                 {return ::sinf (x);}
+   static float        tan   (float x)                 {return ::tanf (x);}
+   static float        cosh  (float x)                 {return ::coshf (x);}
+   static float        sinh  (float x)                 {return ::sinhf (x);}
+   static float        tanh  (float x)                 {return ::tanhf (x);}
+   static float        exp   (float x)                 {return ::expf (x);}
+   static float        log   (float x)                 {return ::logf (x);}
+   static float        log10 (float x)                 {return ::log10f (x);}
+   static float        modf  (float x, float *y)       {return ::modff (x, y);}
+   static float        pow   (float x, float y)        {return ::powf (x, y);}
+   static float        sqrt  (float x)                 {return ::sqrtf (x);}
+   static float        ceil  (float x)                 {return ::ceilf (x);}
+   static float        fabs  (float x)                 {return ::fabsf (x);}
+   static float        floor (float x)                 {return ::floorf (x);}
+   static float        fmod  (float x, float y)        {return ::fmodf (x, y);}
+#if !defined(_MSC_VER)
+   static float        hypot (float x, float y)        {return ::hypotf (x, y);}
+#else
+   static float hypot (float x, float y)       {return ::sqrtf(x*x + y*y);}
+#endif
+};
+
+
+//--------------------------------------------------------------------------
+// Don Hatch's version of sin(x)/x, which is accurate for very small x.
+// Returns 1 for x == 0.
+//--------------------------------------------------------------------------
+
+template <class T>
+inline T
+sinx_over_x (T x)
+{
+    if (x * x < limits<T>::epsilon())
+       return T (1);
+    else
+       return Math<T>::sin (x) / x;
+}
+
+
+//--------------------------------------------------------------------------
+// Compare two numbers and test if they are "approximately equal":
+//
+// equalWithAbsError (x1, x2, e)
+//
+//     Returns true if x1 is the same as x2 with an absolute error of
+//     no more than e,
+//     
+//     abs (x1 - x2) <= e
+//
+// equalWithRelError (x1, x2, e)
+//
+//     Returns true if x1 is the same as x2 with an relative error of
+//     no more than e,
+//     
+//     abs (x1 - x2) <= e * x1
+//
+//--------------------------------------------------------------------------
+
+template <class T>
+inline bool
+equalWithAbsError (T x1, T x2, T e)
+{
+    return ((x1 > x2)? x1 - x2: x2 - x1) <= e;
+}
+
+
+template <class T>
+inline bool
+equalWithRelError (T x1, T x2, T e)
+{
+    return ((x1 > x2)? x1 - x2: x2 - x1) <= e * ((x1 > 0)? x1: -x1);
+}
+
+
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathMatrix.h b/3rdparty/openexr/Imath/ImathMatrix.h
new file mode 100644 (file)
index 0000000..bbf8cd1
--- /dev/null
@@ -0,0 +1,3442 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHMATRIX_H
+#define INCLUDED_IMATHMATRIX_H
+
+//----------------------------------------------------------------
+//
+//      2D (3x3) and 3D (4x4) transformation matrix templates.
+//
+//----------------------------------------------------------------
+
+#include "ImathPlatform.h"
+#include "ImathFun.h"
+#include "ImathExc.h"
+#include "ImathVec.h"
+#include "ImathShear.h"
+
+#include <cstring>
+#include <iostream>
+#include <iomanip>
+#include <string.h>
+
+#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
+// suppress exception specification warnings
+#pragma warning(disable:4290)
+#endif
+
+
+namespace Imath {
+
+enum Uninitialized {UNINITIALIZED};
+
+
+template <class T> class Matrix33
+{
+  public:
+
+    //-------------------
+    // Access to elements
+    //-------------------
+
+    T           x[3][3];
+
+    T *         operator [] (int i);
+    const T *   operator [] (int i) const;
+
+
+    //-------------
+    // Constructors
+    //-------------
+
+    Matrix33 (Uninitialized) {}
+
+    Matrix33 ();
+                                // 1 0 0
+                                // 0 1 0
+                                // 0 0 1
+
+    Matrix33 (T a);
+                                // a a a
+                                // a a a
+                                // a a a
+
+    Matrix33 (const T a[3][3]);
+                                // a[0][0] a[0][1] a[0][2]
+                                // a[1][0] a[1][1] a[1][2]
+                                // a[2][0] a[2][1] a[2][2]
+
+    Matrix33 (T a, T b, T c, T d, T e, T f, T g, T h, T i);
+
+                                // a b c
+                                // d e f
+                                // g h i
+
+
+    //--------------------------------
+    // Copy constructor and assignment
+    //--------------------------------
+
+    Matrix33 (const Matrix33 &v);
+    template <class S> explicit Matrix33 (const Matrix33<S> &v);
+
+    const Matrix33 &    operator = (const Matrix33 &v);
+    const Matrix33 &    operator = (T a);
+
+
+    //----------------------
+    // Compatibility with Sb
+    //----------------------
+    
+    T *                 getValue ();
+    const T *           getValue () const;
+
+    template <class S>
+    void                getValue (Matrix33<S> &v) const;
+    template <class S>
+    Matrix33 &          setValue (const Matrix33<S> &v);
+
+    template <class S>
+    Matrix33 &          setTheMatrix (const Matrix33<S> &v);
+
+
+    //---------
+    // Identity
+    //---------
+
+    void                makeIdentity();
+
+
+    //---------
+    // Equality
+    //---------
+
+    bool                operator == (const Matrix33 &v) const;
+    bool                operator != (const Matrix33 &v) const;
+
+    //-----------------------------------------------------------------------
+    // Compare two matrices and test if they are "approximately equal":
+    //
+    // equalWithAbsError (m, e)
+    //
+    //      Returns true if the coefficients of this and m are the same with
+    //      an absolute error of no more than e, i.e., for all i, j
+    //
+    //      abs (this[i][j] - m[i][j]) <= e
+    //
+    // equalWithRelError (m, e)
+    //
+    //      Returns true if the coefficients of this and m are the same with
+    //      a relative error of no more than e, i.e., for all i, j
+    //
+    //      abs (this[i] - v[i][j]) <= e * abs (this[i][j])
+    //-----------------------------------------------------------------------
+
+    bool                equalWithAbsError (const Matrix33<T> &v, T e) const;
+    bool                equalWithRelError (const Matrix33<T> &v, T e) const;
+
+
+    //------------------------
+    // Component-wise addition
+    //------------------------
+
+    const Matrix33 &    operator += (const Matrix33 &v);
+    const Matrix33 &    operator += (T a);
+    Matrix33            operator + (const Matrix33 &v) const;
+
+
+    //---------------------------
+    // Component-wise subtraction
+    //---------------------------
+
+    const Matrix33 &    operator -= (const Matrix33 &v);
+    const Matrix33 &    operator -= (T a);
+    Matrix33            operator - (const Matrix33 &v) const;
+
+
+    //------------------------------------
+    // Component-wise multiplication by -1
+    //------------------------------------
+
+    Matrix33            operator - () const;
+    const Matrix33 &    negate ();
+
+
+    //------------------------------
+    // Component-wise multiplication
+    //------------------------------
+
+    const Matrix33 &    operator *= (T a);
+    Matrix33            operator * (T a) const;
+
+
+    //-----------------------------------
+    // Matrix-times-matrix multiplication
+    //-----------------------------------
+
+    const Matrix33 &    operator *= (const Matrix33 &v);
+    Matrix33            operator * (const Matrix33 &v) const;
+
+
+    //-----------------------------------------------------------------
+    // Vector-times-matrix multiplication; see also the "operator *"
+    // functions defined below.
+    //
+    // m.multVecMatrix(src,dst) implements a homogeneous transformation
+    // by computing Vec3 (src.x, src.y, 1) * m and dividing by the
+    // result's third element.
+    //
+    // m.multDirMatrix(src,dst) multiplies src by the upper left 2x2
+    // submatrix, ignoring the rest of matrix m.
+    //-----------------------------------------------------------------
+
+    template <class S>
+    void                multVecMatrix(const Vec2<S> &src, Vec2<S> &dst) const;
+
+    template <class S>
+    void                multDirMatrix(const Vec2<S> &src, Vec2<S> &dst) const;
+
+
+    //------------------------
+    // Component-wise division
+    //------------------------
+
+    const Matrix33 &    operator /= (T a);
+    Matrix33            operator / (T a) const;
+
+
+    //------------------
+    // Transposed matrix
+    //------------------
+
+    const Matrix33 &    transpose ();
+    Matrix33            transposed () const;
+
+
+    //------------------------------------------------------------
+    // Inverse matrix: If singExc is false, inverting a singular
+    // matrix produces an identity matrix.  If singExc is true,
+    // inverting a singular matrix throws a SingMatrixExc.
+    //
+    // inverse() and invert() invert matrices using determinants;
+    // gjInverse() and gjInvert() use the Gauss-Jordan method.
+    //
+    // inverse() and invert() are significantly faster than
+    // gjInverse() and gjInvert(), but the results may be slightly
+    // less accurate.
+    // 
+    //------------------------------------------------------------
+
+    const Matrix33 &    invert (bool singExc = false)
+                        throw (Iex::MathExc);
+
+    Matrix33<T>         inverse (bool singExc = false) const
+                        throw (Iex::MathExc);
+
+    const Matrix33 &    gjInvert (bool singExc = false)
+                        throw (Iex::MathExc);
+
+    Matrix33<T>         gjInverse (bool singExc = false) const
+                        throw (Iex::MathExc);
+
+
+    //------------------------------------------------
+    // Calculate the matrix minor of the (r,c) element
+    //------------------------------------------------
+
+    T                   minorOf (const int r, const int c) const;
+
+    //---------------------------------------------------
+    // Build a minor using the specified rows and columns
+    //---------------------------------------------------
+
+    T                   fastMinor (const int r0, const int r1, 
+                                   const int c0, const int c1) const;
+
+    //------------
+    // Determinant
+    //------------
+
+    T                   determinant() const;
+
+    //-----------------------------------------
+    // Set matrix to rotation by r (in radians)
+    //-----------------------------------------
+
+    template <class S>
+    const Matrix33 &    setRotation (S r);
+
+
+    //-----------------------------
+    // Rotate the given matrix by r
+    //-----------------------------
+
+    template <class S>
+    const Matrix33 &    rotate (S r);
+
+
+    //--------------------------------------------
+    // Set matrix to scale by given uniform factor
+    //--------------------------------------------
+
+    const Matrix33 &    setScale (T s);
+
+
+    //------------------------------------
+    // Set matrix to scale by given vector
+    //------------------------------------
+
+    template <class S>
+    const Matrix33 &    setScale (const Vec2<S> &s);
+
+
+    //----------------------
+    // Scale the matrix by s
+    //----------------------
+
+    template <class S>
+    const Matrix33 &    scale (const Vec2<S> &s);
+
+
+    //------------------------------------------
+    // Set matrix to translation by given vector
+    //------------------------------------------
+
+    template <class S>
+    const Matrix33 &    setTranslation (const Vec2<S> &t);
+
+
+    //-----------------------------
+    // Return translation component
+    //-----------------------------
+
+    Vec2<T>             translation () const;
+
+
+    //--------------------------
+    // Translate the matrix by t
+    //--------------------------
+
+    template <class S>
+    const Matrix33 &    translate (const Vec2<S> &t);
+
+
+    //-----------------------------------------------------------
+    // Set matrix to shear x for each y coord. by given factor xy
+    //-----------------------------------------------------------
+
+    template <class S>
+    const Matrix33 &    setShear (const S &h);
+
+
+    //-------------------------------------------------------------
+    // Set matrix to shear x for each y coord. by given factor h[0]
+    // and to shear y for each x coord. by given factor h[1]
+    //-------------------------------------------------------------
+
+    template <class S>
+    const Matrix33 &    setShear (const Vec2<S> &h);
+
+
+    //-----------------------------------------------------------
+    // Shear the matrix in x for each y coord. by given factor xy
+    //-----------------------------------------------------------
+
+    template <class S>
+    const Matrix33 &    shear (const S &xy);
+
+
+    //-----------------------------------------------------------
+    // Shear the matrix in x for each y coord. by given factor xy
+    // and shear y for each x coord. by given factor yx
+    //-----------------------------------------------------------
+
+    template <class S>
+    const Matrix33 &    shear (const Vec2<S> &h);
+
+
+    //--------------------------------------------------------
+    // Number of the row and column dimensions, since
+    // Matrix33 is a square matrix.
+    //--------------------------------------------------------
+
+    static unsigned int        dimensions() {return 3;}
+
+
+    //-------------------------------------------------
+    // Limitations of type T (see also class limits<T>)
+    //-------------------------------------------------
+
+    static T            baseTypeMin()           {return limits<T>::min();}
+    static T            baseTypeMax()           {return limits<T>::max();}
+    static T            baseTypeSmallest()      {return limits<T>::smallest();}
+    static T            baseTypeEpsilon()       {return limits<T>::epsilon();}
+
+    typedef T          BaseType;
+    typedef Vec3<T>    BaseVecType;
+
+  private:
+
+    template <typename R, typename S>
+    struct isSameType
+    {
+        enum {value = 0};
+    };
+
+    template <typename R>
+    struct isSameType<R, R>
+    {
+        enum {value = 1};
+    };
+};
+
+
+template <class T> class Matrix44
+{
+  public:
+
+    //-------------------
+    // Access to elements
+    //-------------------
+
+    T           x[4][4];
+
+    T *         operator [] (int i);
+    const T *   operator [] (int i) const;
+
+
+    //-------------
+    // Constructors
+    //-------------
+
+    Matrix44 (Uninitialized) {}
+
+    Matrix44 ();
+                                // 1 0 0 0
+                                // 0 1 0 0
+                                // 0 0 1 0
+                                // 0 0 0 1
+
+    Matrix44 (T a);
+                                // a a a a
+                                // a a a a
+                                // a a a a
+                                // a a a a
+
+    Matrix44 (const T a[4][4]) ;
+                                // a[0][0] a[0][1] a[0][2] a[0][3]
+                                // a[1][0] a[1][1] a[1][2] a[1][3]
+                                // a[2][0] a[2][1] a[2][2] a[2][3]
+                                // a[3][0] a[3][1] a[3][2] a[3][3]
+
+    Matrix44 (T a, T b, T c, T d, T e, T f, T g, T h,
+              T i, T j, T k, T l, T m, T n, T o, T p);
+
+                                // a b c d
+                                // e f g h
+                                // i j k l
+                                // m n o p
+
+    Matrix44 (Matrix33<T> r, Vec3<T> t);
+                                // r r r 0
+                                // r r r 0
+                                // r r r 0
+                                // t t t 1
+
+
+    //--------------------------------
+    // Copy constructor and assignment
+    //--------------------------------
+
+    Matrix44 (const Matrix44 &v);
+    template <class S> explicit Matrix44 (const Matrix44<S> &v);
+
+    const Matrix44 &    operator = (const Matrix44 &v);
+    const Matrix44 &    operator = (T a);
+
+
+    //----------------------
+    // Compatibility with Sb
+    //----------------------
+    
+    T *                 getValue ();
+    const T *           getValue () const;
+
+    template <class S>
+    void                getValue (Matrix44<S> &v) const;
+    template <class S>
+    Matrix44 &          setValue (const Matrix44<S> &v);
+
+    template <class S>
+    Matrix44 &          setTheMatrix (const Matrix44<S> &v);
+
+    //---------
+    // Identity
+    //---------
+
+    void                makeIdentity();
+
+
+    //---------
+    // Equality
+    //---------
+
+    bool                operator == (const Matrix44 &v) const;
+    bool                operator != (const Matrix44 &v) const;
+
+    //-----------------------------------------------------------------------
+    // Compare two matrices and test if they are "approximately equal":
+    //
+    // equalWithAbsError (m, e)
+    //
+    //      Returns true if the coefficients of this and m are the same with
+    //      an absolute error of no more than e, i.e., for all i, j
+    //
+    //      abs (this[i][j] - m[i][j]) <= e
+    //
+    // equalWithRelError (m, e)
+    //
+    //      Returns true if the coefficients of this and m are the same with
+    //      a relative error of no more than e, i.e., for all i, j
+    //
+    //      abs (this[i] - v[i][j]) <= e * abs (this[i][j])
+    //-----------------------------------------------------------------------
+
+    bool                equalWithAbsError (const Matrix44<T> &v, T e) const;
+    bool                equalWithRelError (const Matrix44<T> &v, T e) const;
+
+
+    //------------------------
+    // Component-wise addition
+    //------------------------
+
+    const Matrix44 &    operator += (const Matrix44 &v);
+    const Matrix44 &    operator += (T a);
+    Matrix44            operator + (const Matrix44 &v) const;
+
+
+    //---------------------------
+    // Component-wise subtraction
+    //---------------------------
+
+    const Matrix44 &    operator -= (const Matrix44 &v);
+    const Matrix44 &    operator -= (T a);
+    Matrix44            operator - (const Matrix44 &v) const;
+
+
+    //------------------------------------
+    // Component-wise multiplication by -1
+    //------------------------------------
+
+    Matrix44            operator - () const;
+    const Matrix44 &    negate ();
+
+
+    //------------------------------
+    // Component-wise multiplication
+    //------------------------------
+
+    const Matrix44 &    operator *= (T a);
+    Matrix44            operator * (T a) const;
+
+
+    //-----------------------------------
+    // Matrix-times-matrix multiplication
+    //-----------------------------------
+
+    const Matrix44 &    operator *= (const Matrix44 &v);
+    Matrix44            operator * (const Matrix44 &v) const;
+
+    static void         multiply (const Matrix44 &a,    // assumes that
+                                  const Matrix44 &b,    // &a != &c and
+                                  Matrix44 &c);         // &b != &c.
+
+
+    //-----------------------------------------------------------------
+    // Vector-times-matrix multiplication; see also the "operator *"
+    // functions defined below.
+    //
+    // m.multVecMatrix(src,dst) implements a homogeneous transformation
+    // by computing Vec4 (src.x, src.y, src.z, 1) * m and dividing by
+    // the result's third element.
+    //
+    // m.multDirMatrix(src,dst) multiplies src by the upper left 3x3
+    // submatrix, ignoring the rest of matrix m.
+    //-----------------------------------------------------------------
+
+    template <class S>
+    void                multVecMatrix(const Vec3<S> &src, Vec3<S> &dst) const;
+
+    template <class S>
+    void                multDirMatrix(const Vec3<S> &src, Vec3<S> &dst) const;
+
+
+    //------------------------
+    // Component-wise division
+    //------------------------
+
+    const Matrix44 &    operator /= (T a);
+    Matrix44            operator / (T a) const;
+
+
+    //------------------
+    // Transposed matrix
+    //------------------
+
+    const Matrix44 &    transpose ();
+    Matrix44            transposed () const;
+
+
+    //------------------------------------------------------------
+    // Inverse matrix: If singExc is false, inverting a singular
+    // matrix produces an identity matrix.  If singExc is true,
+    // inverting a singular matrix throws a SingMatrixExc.
+    //
+    // inverse() and invert() invert matrices using determinants;
+    // gjInverse() and gjInvert() use the Gauss-Jordan method.
+    //
+    // inverse() and invert() are significantly faster than
+    // gjInverse() and gjInvert(), but the results may be slightly
+    // less accurate.
+    // 
+    //------------------------------------------------------------
+
+    const Matrix44 &    invert (bool singExc = false)
+                        throw (Iex::MathExc);
+
+    Matrix44<T>         inverse (bool singExc = false) const
+                        throw (Iex::MathExc);
+
+    const Matrix44 &    gjInvert (bool singExc = false)
+                        throw (Iex::MathExc);
+
+    Matrix44<T>         gjInverse (bool singExc = false) const
+                        throw (Iex::MathExc);
+
+
+    //------------------------------------------------
+    // Calculate the matrix minor of the (r,c) element
+    //------------------------------------------------
+
+    T                   minorOf (const int r, const int c) const;
+
+    //---------------------------------------------------
+    // Build a minor using the specified rows and columns
+    //---------------------------------------------------
+
+    T                   fastMinor (const int r0, const int r1, const int r2,
+                                   const int c0, const int c1, const int c2) const;
+
+    //------------
+    // Determinant
+    //------------
+
+    T                   determinant() const;
+
+    //--------------------------------------------------------
+    // Set matrix to rotation by XYZ euler angles (in radians)
+    //--------------------------------------------------------
+
+    template <class S>
+    const Matrix44 &    setEulerAngles (const Vec3<S>& r);
+
+
+    //--------------------------------------------------------
+    // Set matrix to rotation around given axis by given angle
+    //--------------------------------------------------------
+
+    template <class S>
+    const Matrix44 &    setAxisAngle (const Vec3<S>& ax, S ang);
+
+
+    //-------------------------------------------
+    // Rotate the matrix by XYZ euler angles in r
+    //-------------------------------------------
+
+    template <class S>
+    const Matrix44 &    rotate (const Vec3<S> &r);
+
+
+    //--------------------------------------------
+    // Set matrix to scale by given uniform factor
+    //--------------------------------------------
+
+    const Matrix44 &    setScale (T s);
+
+
+    //------------------------------------
+    // Set matrix to scale by given vector
+    //------------------------------------
+
+    template <class S>
+    const Matrix44 &    setScale (const Vec3<S> &s);
+
+
+    //----------------------
+    // Scale the matrix by s
+    //----------------------
+
+    template <class S>
+    const Matrix44 &    scale (const Vec3<S> &s);
+
+
+    //------------------------------------------
+    // Set matrix to translation by given vector
+    //------------------------------------------
+
+    template <class S>
+    const Matrix44 &    setTranslation (const Vec3<S> &t);
+
+
+    //-----------------------------
+    // Return translation component
+    //-----------------------------
+
+    const Vec3<T>       translation () const;
+
+
+    //--------------------------
+    // Translate the matrix by t
+    //--------------------------
+
+    template <class S>
+    const Matrix44 &    translate (const Vec3<S> &t);
+
+
+    //-------------------------------------------------------------
+    // Set matrix to shear by given vector h.  The resulting matrix
+    //    will shear x for each y coord. by a factor of h[0] ;
+    //    will shear x for each z coord. by a factor of h[1] ;
+    //    will shear y for each z coord. by a factor of h[2] .
+    //-------------------------------------------------------------
+
+    template <class S>
+    const Matrix44 &    setShear (const Vec3<S> &h);
+
+
+    //------------------------------------------------------------
+    // Set matrix to shear by given factors.  The resulting matrix
+    //    will shear x for each y coord. by a factor of h.xy ;
+    //    will shear x for each z coord. by a factor of h.xz ;
+    //    will shear y for each z coord. by a factor of h.yz ; 
+    //    will shear y for each x coord. by a factor of h.yx ;
+    //    will shear z for each x coord. by a factor of h.zx ;
+    //    will shear z for each y coord. by a factor of h.zy .
+    //------------------------------------------------------------
+
+    template <class S>
+    const Matrix44 &    setShear (const Shear6<S> &h);
+
+
+    //--------------------------------------------------------
+    // Shear the matrix by given vector.  The composed matrix 
+    // will be <shear> * <this>, where the shear matrix ...
+    //    will shear x for each y coord. by a factor of h[0] ;
+    //    will shear x for each z coord. by a factor of h[1] ;
+    //    will shear y for each z coord. by a factor of h[2] .
+    //--------------------------------------------------------
+
+    template <class S>
+    const Matrix44 &    shear (const Vec3<S> &h);
+
+    //--------------------------------------------------------
+    // Number of the row and column dimensions, since
+    // Matrix44 is a square matrix.
+    //--------------------------------------------------------
+
+    static unsigned int        dimensions() {return 4;}
+
+
+    //------------------------------------------------------------
+    // Shear the matrix by the given factors.  The composed matrix 
+    // will be <shear> * <this>, where the shear matrix ...
+    //    will shear x for each y coord. by a factor of h.xy ;
+    //    will shear x for each z coord. by a factor of h.xz ;
+    //    will shear y for each z coord. by a factor of h.yz ;
+    //    will shear y for each x coord. by a factor of h.yx ;
+    //    will shear z for each x coord. by a factor of h.zx ;
+    //    will shear z for each y coord. by a factor of h.zy .
+    //------------------------------------------------------------
+
+    template <class S>
+    const Matrix44 &    shear (const Shear6<S> &h);
+
+
+    //-------------------------------------------------
+    // Limitations of type T (see also class limits<T>)
+    //-------------------------------------------------
+
+    static T            baseTypeMin()           {return limits<T>::min();}
+    static T            baseTypeMax()           {return limits<T>::max();}
+    static T            baseTypeSmallest()      {return limits<T>::smallest();}
+    static T            baseTypeEpsilon()       {return limits<T>::epsilon();}
+
+    typedef T          BaseType;
+    typedef Vec4<T>    BaseVecType;
+
+  private:
+
+    template <typename R, typename S>
+    struct isSameType
+    {
+        enum {value = 0};
+    };
+
+    template <typename R>
+    struct isSameType<R, R>
+    {
+        enum {value = 1};
+    };
+};
+
+
+//--------------
+// Stream output
+//--------------
+
+template <class T>
+std::ostream &  operator << (std::ostream & s, const Matrix33<T> &m); 
+
+template <class T>
+std::ostream &  operator << (std::ostream & s, const Matrix44<T> &m); 
+
+
+//---------------------------------------------
+// Vector-times-matrix multiplication operators
+//---------------------------------------------
+
+template <class S, class T>
+const Vec2<S> &            operator *= (Vec2<S> &v, const Matrix33<T> &m);
+
+template <class S, class T>
+Vec2<S>                    operator * (const Vec2<S> &v, const Matrix33<T> &m);
+
+template <class S, class T>
+const Vec3<S> &            operator *= (Vec3<S> &v, const Matrix33<T> &m);
+
+template <class S, class T>
+Vec3<S>                    operator * (const Vec3<S> &v, const Matrix33<T> &m);
+
+template <class S, class T>
+const Vec3<S> &            operator *= (Vec3<S> &v, const Matrix44<T> &m);
+
+template <class S, class T>
+Vec3<S>                    operator * (const Vec3<S> &v, const Matrix44<T> &m);
+
+template <class S, class T>
+const Vec4<S> &            operator *= (Vec4<S> &v, const Matrix44<T> &m);
+
+template <class S, class T>
+Vec4<S>                    operator * (const Vec4<S> &v, const Matrix44<T> &m);
+
+//-------------------------
+// Typedefs for convenience
+//-------------------------
+
+typedef Matrix33 <float>  M33f;
+typedef Matrix33 <double> M33d;
+typedef Matrix44 <float>  M44f;
+typedef Matrix44 <double> M44d;
+
+
+//---------------------------
+// Implementation of Matrix33
+//---------------------------
+
+template <class T>
+inline T *
+Matrix33<T>::operator [] (int i)
+{
+    return x[i];
+}
+
+template <class T>
+inline const T *
+Matrix33<T>::operator [] (int i) const
+{
+    return x[i];
+}
+
+template <class T>
+inline
+Matrix33<T>::Matrix33 ()
+{
+    memset (x, 0, sizeof (x));
+    x[0][0] = 1;
+    x[1][1] = 1;
+    x[2][2] = 1;
+}
+
+template <class T>
+inline
+Matrix33<T>::Matrix33 (T a)
+{
+    x[0][0] = a;
+    x[0][1] = a;
+    x[0][2] = a;
+    x[1][0] = a;
+    x[1][1] = a;
+    x[1][2] = a;
+    x[2][0] = a;
+    x[2][1] = a;
+    x[2][2] = a;
+}
+
+template <class T>
+inline
+Matrix33<T>::Matrix33 (const T a[3][3]) 
+{
+    memcpy (x, a, sizeof (x));
+}
+
+template <class T>
+inline
+Matrix33<T>::Matrix33 (T a, T b, T c, T d, T e, T f, T g, T h, T i)
+{
+    x[0][0] = a;
+    x[0][1] = b;
+    x[0][2] = c;
+    x[1][0] = d;
+    x[1][1] = e;
+    x[1][2] = f;
+    x[2][0] = g;
+    x[2][1] = h;
+    x[2][2] = i;
+}
+
+template <class T>
+inline
+Matrix33<T>::Matrix33 (const Matrix33 &v)
+{
+    memcpy (x, v.x, sizeof (x));
+}
+
+template <class T>
+template <class S>
+inline
+Matrix33<T>::Matrix33 (const Matrix33<S> &v)
+{
+    x[0][0] = T (v.x[0][0]);
+    x[0][1] = T (v.x[0][1]);
+    x[0][2] = T (v.x[0][2]);
+    x[1][0] = T (v.x[1][0]);
+    x[1][1] = T (v.x[1][1]);
+    x[1][2] = T (v.x[1][2]);
+    x[2][0] = T (v.x[2][0]);
+    x[2][1] = T (v.x[2][1]);
+    x[2][2] = T (v.x[2][2]);
+}
+
+template <class T>
+inline const Matrix33<T> &
+Matrix33<T>::operator = (const Matrix33 &v)
+{
+    memcpy (x, v.x, sizeof (x));
+    return *this;
+}
+
+template <class T>
+inline const Matrix33<T> &
+Matrix33<T>::operator = (T a)
+{
+    x[0][0] = a;
+    x[0][1] = a;
+    x[0][2] = a;
+    x[1][0] = a;
+    x[1][1] = a;
+    x[1][2] = a;
+    x[2][0] = a;
+    x[2][1] = a;
+    x[2][2] = a;
+    return *this;
+}
+
+template <class T>
+inline T *
+Matrix33<T>::getValue ()
+{
+    return (T *) &x[0][0];
+}
+
+template <class T>
+inline const T *
+Matrix33<T>::getValue () const
+{
+    return (const T *) &x[0][0];
+}
+
+template <class T>
+template <class S>
+inline void
+Matrix33<T>::getValue (Matrix33<S> &v) const
+{
+    if (isSameType<S,T>::value)
+    {
+        memcpy (v.x, x, sizeof (x));
+    }
+    else
+    {
+        v.x[0][0] = x[0][0];
+        v.x[0][1] = x[0][1];
+        v.x[0][2] = x[0][2];
+        v.x[1][0] = x[1][0];
+        v.x[1][1] = x[1][1];
+        v.x[1][2] = x[1][2];
+        v.x[2][0] = x[2][0];
+        v.x[2][1] = x[2][1];
+        v.x[2][2] = x[2][2];
+    }
+}
+
+template <class T>
+template <class S>
+inline Matrix33<T> &
+Matrix33<T>::setValue (const Matrix33<S> &v)
+{
+    if (isSameType<S,T>::value)
+    {
+        memcpy (x, v.x, sizeof (x));
+    }
+    else
+    {
+        x[0][0] = v.x[0][0];
+        x[0][1] = v.x[0][1];
+        x[0][2] = v.x[0][2];
+        x[1][0] = v.x[1][0];
+        x[1][1] = v.x[1][1];
+        x[1][2] = v.x[1][2];
+        x[2][0] = v.x[2][0];
+        x[2][1] = v.x[2][1];
+        x[2][2] = v.x[2][2];
+    }
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+inline Matrix33<T> &
+Matrix33<T>::setTheMatrix (const Matrix33<S> &v)
+{
+    if (isSameType<S,T>::value)
+    {
+        memcpy (x, v.x, sizeof (x));
+    }
+    else
+    {
+        x[0][0] = v.x[0][0];
+        x[0][1] = v.x[0][1];
+        x[0][2] = v.x[0][2];
+        x[1][0] = v.x[1][0];
+        x[1][1] = v.x[1][1];
+        x[1][2] = v.x[1][2];
+        x[2][0] = v.x[2][0];
+        x[2][1] = v.x[2][1];
+        x[2][2] = v.x[2][2];
+    }
+
+    return *this;
+}
+
+template <class T>
+inline void
+Matrix33<T>::makeIdentity()
+{
+    memset (x, 0, sizeof (x));
+    x[0][0] = 1;
+    x[1][1] = 1;
+    x[2][2] = 1;
+}
+
+template <class T>
+bool
+Matrix33<T>::operator == (const Matrix33 &v) const
+{
+    return x[0][0] == v.x[0][0] &&
+           x[0][1] == v.x[0][1] &&
+           x[0][2] == v.x[0][2] &&
+           x[1][0] == v.x[1][0] &&
+           x[1][1] == v.x[1][1] &&
+           x[1][2] == v.x[1][2] &&
+           x[2][0] == v.x[2][0] &&
+           x[2][1] == v.x[2][1] &&
+           x[2][2] == v.x[2][2];
+}
+
+template <class T>
+bool
+Matrix33<T>::operator != (const Matrix33 &v) const
+{
+    return x[0][0] != v.x[0][0] ||
+           x[0][1] != v.x[0][1] ||
+           x[0][2] != v.x[0][2] ||
+           x[1][0] != v.x[1][0] ||
+           x[1][1] != v.x[1][1] ||
+           x[1][2] != v.x[1][2] ||
+           x[2][0] != v.x[2][0] ||
+           x[2][1] != v.x[2][1] ||
+           x[2][2] != v.x[2][2];
+}
+
+template <class T>
+bool
+Matrix33<T>::equalWithAbsError (const Matrix33<T> &m, T e) const
+{
+    for (int i = 0; i < 3; i++)
+        for (int j = 0; j < 3; j++)
+            if (!Imath::equalWithAbsError ((*this)[i][j], m[i][j], e))
+                return false;
+
+    return true;
+}
+
+template <class T>
+bool
+Matrix33<T>::equalWithRelError (const Matrix33<T> &m, T e) const
+{
+    for (int i = 0; i < 3; i++)
+        for (int j = 0; j < 3; j++)
+            if (!Imath::equalWithRelError ((*this)[i][j], m[i][j], e))
+                return false;
+
+    return true;
+}
+
+template <class T>
+const Matrix33<T> &
+Matrix33<T>::operator += (const Matrix33<T> &v)
+{
+    x[0][0] += v.x[0][0];
+    x[0][1] += v.x[0][1];
+    x[0][2] += v.x[0][2];
+    x[1][0] += v.x[1][0];
+    x[1][1] += v.x[1][1];
+    x[1][2] += v.x[1][2];
+    x[2][0] += v.x[2][0];
+    x[2][1] += v.x[2][1];
+    x[2][2] += v.x[2][2];
+
+    return *this;
+}
+
+template <class T>
+const Matrix33<T> &
+Matrix33<T>::operator += (T a)
+{
+    x[0][0] += a;
+    x[0][1] += a;
+    x[0][2] += a;
+    x[1][0] += a;
+    x[1][1] += a;
+    x[1][2] += a;
+    x[2][0] += a;
+    x[2][1] += a;
+    x[2][2] += a;
+  
+    return *this;
+}
+
+template <class T>
+Matrix33<T>
+Matrix33<T>::operator + (const Matrix33<T> &v) const
+{
+    return Matrix33 (x[0][0] + v.x[0][0],
+                     x[0][1] + v.x[0][1],
+                     x[0][2] + v.x[0][2],
+                     x[1][0] + v.x[1][0],
+                     x[1][1] + v.x[1][1],
+                     x[1][2] + v.x[1][2],
+                     x[2][0] + v.x[2][0],
+                     x[2][1] + v.x[2][1],
+                     x[2][2] + v.x[2][2]);
+}
+
+template <class T>
+const Matrix33<T> &
+Matrix33<T>::operator -= (const Matrix33<T> &v)
+{
+    x[0][0] -= v.x[0][0];
+    x[0][1] -= v.x[0][1];
+    x[0][2] -= v.x[0][2];
+    x[1][0] -= v.x[1][0];
+    x[1][1] -= v.x[1][1];
+    x[1][2] -= v.x[1][2];
+    x[2][0] -= v.x[2][0];
+    x[2][1] -= v.x[2][1];
+    x[2][2] -= v.x[2][2];
+  
+    return *this;
+}
+
+template <class T>
+const Matrix33<T> &
+Matrix33<T>::operator -= (T a)
+{
+    x[0][0] -= a;
+    x[0][1] -= a;
+    x[0][2] -= a;
+    x[1][0] -= a;
+    x[1][1] -= a;
+    x[1][2] -= a;
+    x[2][0] -= a;
+    x[2][1] -= a;
+    x[2][2] -= a;
+  
+    return *this;
+}
+
+template <class T>
+Matrix33<T>
+Matrix33<T>::operator - (const Matrix33<T> &v) const
+{
+    return Matrix33 (x[0][0] - v.x[0][0],
+                     x[0][1] - v.x[0][1],
+                     x[0][2] - v.x[0][2],
+                     x[1][0] - v.x[1][0],
+                     x[1][1] - v.x[1][1],
+                     x[1][2] - v.x[1][2],
+                     x[2][0] - v.x[2][0],
+                     x[2][1] - v.x[2][1],
+                     x[2][2] - v.x[2][2]);
+}
+
+template <class T>
+Matrix33<T>
+Matrix33<T>::operator - () const
+{
+    return Matrix33 (-x[0][0],
+                     -x[0][1],
+                     -x[0][2],
+                     -x[1][0],
+                     -x[1][1],
+                     -x[1][2],
+                     -x[2][0],
+                     -x[2][1],
+                     -x[2][2]);
+}
+
+template <class T>
+const Matrix33<T> &
+Matrix33<T>::negate ()
+{
+    x[0][0] = -x[0][0];
+    x[0][1] = -x[0][1];
+    x[0][2] = -x[0][2];
+    x[1][0] = -x[1][0];
+    x[1][1] = -x[1][1];
+    x[1][2] = -x[1][2];
+    x[2][0] = -x[2][0];
+    x[2][1] = -x[2][1];
+    x[2][2] = -x[2][2];
+
+    return *this;
+}
+
+template <class T>
+const Matrix33<T> &
+Matrix33<T>::operator *= (T a)
+{
+    x[0][0] *= a;
+    x[0][1] *= a;
+    x[0][2] *= a;
+    x[1][0] *= a;
+    x[1][1] *= a;
+    x[1][2] *= a;
+    x[2][0] *= a;
+    x[2][1] *= a;
+    x[2][2] *= a;
+  
+    return *this;
+}
+
+template <class T>
+Matrix33<T>
+Matrix33<T>::operator * (T a) const
+{
+    return Matrix33 (x[0][0] * a,
+                     x[0][1] * a,
+                     x[0][2] * a,
+                     x[1][0] * a,
+                     x[1][1] * a,
+                     x[1][2] * a,
+                     x[2][0] * a,
+                     x[2][1] * a,
+                     x[2][2] * a);
+}
+
+template <class T>
+inline Matrix33<T>
+operator * (T a, const Matrix33<T> &v)
+{
+    return v * a;
+}
+
+template <class T>
+const Matrix33<T> &
+Matrix33<T>::operator *= (const Matrix33<T> &v)
+{
+    Matrix33 tmp (T (0));
+
+    for (int i = 0; i < 3; i++)
+        for (int j = 0; j < 3; j++)
+            for (int k = 0; k < 3; k++)
+                tmp.x[i][j] += x[i][k] * v.x[k][j];
+
+    *this = tmp;
+    return *this;
+}
+
+template <class T>
+Matrix33<T>
+Matrix33<T>::operator * (const Matrix33<T> &v) const
+{
+    Matrix33 tmp (T (0));
+
+    for (int i = 0; i < 3; i++)
+        for (int j = 0; j < 3; j++)
+            for (int k = 0; k < 3; k++)
+                tmp.x[i][j] += x[i][k] * v.x[k][j];
+
+    return tmp;
+}
+
+template <class T>
+template <class S>
+void
+Matrix33<T>::multVecMatrix(const Vec2<S> &src, Vec2<S> &dst) const
+{
+    S a, b, w;
+
+    a = src[0] * x[0][0] + src[1] * x[1][0] + x[2][0];
+    b = src[0] * x[0][1] + src[1] * x[1][1] + x[2][1];
+    w = src[0] * x[0][2] + src[1] * x[1][2] + x[2][2];
+
+    dst.x = a / w;
+    dst.y = b / w;
+}
+
+template <class T>
+template <class S>
+void
+Matrix33<T>::multDirMatrix(const Vec2<S> &src, Vec2<S> &dst) const
+{
+    S a, b;
+
+    a = src[0] * x[0][0] + src[1] * x[1][0];
+    b = src[0] * x[0][1] + src[1] * x[1][1];
+
+    dst.x = a;
+    dst.y = b;
+}
+
+template <class T>
+const Matrix33<T> &
+Matrix33<T>::operator /= (T a)
+{
+    x[0][0] /= a;
+    x[0][1] /= a;
+    x[0][2] /= a;
+    x[1][0] /= a;
+    x[1][1] /= a;
+    x[1][2] /= a;
+    x[2][0] /= a;
+    x[2][1] /= a;
+    x[2][2] /= a;
+  
+    return *this;
+}
+
+template <class T>
+Matrix33<T>
+Matrix33<T>::operator / (T a) const
+{
+    return Matrix33 (x[0][0] / a,
+                     x[0][1] / a,
+                     x[0][2] / a,
+                     x[1][0] / a,
+                     x[1][1] / a,
+                     x[1][2] / a,
+                     x[2][0] / a,
+                     x[2][1] / a,
+                     x[2][2] / a);
+}
+
+template <class T>
+const Matrix33<T> &
+Matrix33<T>::transpose ()
+{
+    Matrix33 tmp (x[0][0],
+                  x[1][0],
+                  x[2][0],
+                  x[0][1],
+                  x[1][1],
+                  x[2][1],
+                  x[0][2],
+                  x[1][2],
+                  x[2][2]);
+    *this = tmp;
+    return *this;
+}
+
+template <class T>
+Matrix33<T>
+Matrix33<T>::transposed () const
+{
+    return Matrix33 (x[0][0],
+                     x[1][0],
+                     x[2][0],
+                     x[0][1],
+                     x[1][1],
+                     x[2][1],
+                     x[0][2],
+                     x[1][2],
+                     x[2][2]);
+}
+
+template <class T>
+const Matrix33<T> &
+Matrix33<T>::gjInvert (bool singExc) throw (Iex::MathExc)
+{
+    *this = gjInverse (singExc);
+    return *this;
+}
+
+template <class T>
+Matrix33<T>
+Matrix33<T>::gjInverse (bool singExc) const throw (Iex::MathExc)
+{
+    int i, j, k;
+    Matrix33 s;
+    Matrix33 t (*this);
+
+    // Forward elimination
+
+    for (i = 0; i < 2 ; i++)
+    {
+        int pivot = i;
+
+        T pivotsize = t[i][i];
+
+        if (pivotsize < 0)
+            pivotsize = -pivotsize;
+
+        for (j = i + 1; j < 3; j++)
+        {
+            T tmp = t[j][i];
+
+            if (tmp < 0)
+                tmp = -tmp;
+
+            if (tmp > pivotsize)
+            {
+                pivot = j;
+                pivotsize = tmp;
+            }
+        }
+
+        if (pivotsize == 0)
+        {
+            if (singExc)
+                throw ::Imath::SingMatrixExc ("Cannot invert singular matrix.");
+
+            return Matrix33();
+        }
+
+        if (pivot != i)
+        {
+            for (j = 0; j < 3; j++)
+            {
+                T tmp;
+
+                tmp = t[i][j];
+                t[i][j] = t[pivot][j];
+                t[pivot][j] = tmp;
+
+                tmp = s[i][j];
+                s[i][j] = s[pivot][j];
+                s[pivot][j] = tmp;
+            }
+        }
+
+        for (j = i + 1; j < 3; j++)
+        {
+            T f = t[j][i] / t[i][i];
+
+            for (k = 0; k < 3; k++)
+            {
+                t[j][k] -= f * t[i][k];
+                s[j][k] -= f * s[i][k];
+            }
+        }
+    }
+
+    // Backward substitution
+
+    for (i = 2; i >= 0; --i)
+    {
+        T f;
+
+        if ((f = t[i][i]) == 0)
+        {
+            if (singExc)
+                throw ::Imath::SingMatrixExc ("Cannot invert singular matrix.");
+
+            return Matrix33();
+        }
+
+        for (j = 0; j < 3; j++)
+        {
+            t[i][j] /= f;
+            s[i][j] /= f;
+        }
+
+        for (j = 0; j < i; j++)
+        {
+            f = t[j][i];
+
+            for (k = 0; k < 3; k++)
+            {
+                t[j][k] -= f * t[i][k];
+                s[j][k] -= f * s[i][k];
+            }
+        }
+    }
+
+    return s;
+}
+
+template <class T>
+const Matrix33<T> &
+Matrix33<T>::invert (bool singExc) throw (Iex::MathExc)
+{
+    *this = inverse (singExc);
+    return *this;
+}
+
+template <class T>
+Matrix33<T>
+Matrix33<T>::inverse (bool singExc) const throw (Iex::MathExc)
+{
+    if (x[0][2] != 0 || x[1][2] != 0 || x[2][2] != 1)
+    {
+        Matrix33 s (x[1][1] * x[2][2] - x[2][1] * x[1][2],
+                    x[2][1] * x[0][2] - x[0][1] * x[2][2],
+                    x[0][1] * x[1][2] - x[1][1] * x[0][2],
+
+                    x[2][0] * x[1][2] - x[1][0] * x[2][2],
+                    x[0][0] * x[2][2] - x[2][0] * x[0][2],
+                    x[1][0] * x[0][2] - x[0][0] * x[1][2],
+
+                    x[1][0] * x[2][1] - x[2][0] * x[1][1],
+                    x[2][0] * x[0][1] - x[0][0] * x[2][1],
+                    x[0][0] * x[1][1] - x[1][0] * x[0][1]);
+
+        T r = x[0][0] * s[0][0] + x[0][1] * s[1][0] + x[0][2] * s[2][0];
+
+        if (Imath::abs (r) >= 1)
+        {
+            for (int i = 0; i < 3; ++i)
+            {
+                for (int j = 0; j < 3; ++j)
+                {
+                    s[i][j] /= r;
+                }
+            }
+        }
+        else
+        {
+            T mr = Imath::abs (r) / limits<T>::smallest();
+
+            for (int i = 0; i < 3; ++i)
+            {
+                for (int j = 0; j < 3; ++j)
+                {
+                    if (mr > Imath::abs (s[i][j]))
+                    {
+                        s[i][j] /= r;
+                    }
+                    else
+                    {
+                        if (singExc)
+                            throw SingMatrixExc ("Cannot invert "
+                                                 "singular matrix.");
+                        return Matrix33();
+                    }
+                }
+            }
+        }
+
+        return s;
+    }
+    else
+    {
+        Matrix33 s ( x[1][1],
+                    -x[0][1],
+                     0, 
+
+                    -x[1][0],
+                     x[0][0],
+                     0,
+
+                     0,
+                     0,
+                     1);
+
+        T r = x[0][0] * x[1][1] - x[1][0] * x[0][1];
+
+        if (Imath::abs (r) >= 1)
+        {
+            for (int i = 0; i < 2; ++i)
+            {
+                for (int j = 0; j < 2; ++j)
+                {
+                    s[i][j] /= r;
+                }
+            }
+        }
+        else
+        {
+            T mr = Imath::abs (r) / limits<T>::smallest();
+
+            for (int i = 0; i < 2; ++i)
+            {
+                for (int j = 0; j < 2; ++j)
+                {
+                    if (mr > Imath::abs (s[i][j]))
+                    {
+                        s[i][j] /= r;
+                    }
+                    else
+                    {
+                        if (singExc)
+                            throw SingMatrixExc ("Cannot invert "
+                                                 "singular matrix.");
+                        return Matrix33();
+                    }
+                }
+            }
+        }
+
+        s[2][0] = -x[2][0] * s[0][0] - x[2][1] * s[1][0];
+        s[2][1] = -x[2][0] * s[0][1] - x[2][1] * s[1][1];
+
+        return s;
+    }
+}
+
+template <class T>
+inline T
+Matrix33<T>::minorOf (const int r, const int c) const
+{
+    int r0 = 0 + (r < 1 ? 1 : 0);
+    int r1 = 1 + (r < 2 ? 1 : 0);
+    int c0 = 0 + (c < 1 ? 1 : 0);
+    int c1 = 1 + (c < 2 ? 1 : 0);
+
+    return x[r0][c0]*x[r1][c1] - x[r1][c0]*x[r0][c1];
+}
+
+template <class T>
+inline T
+Matrix33<T>::fastMinor( const int r0, const int r1,
+                        const int c0, const int c1) const
+{
+    return x[r0][c0]*x[r1][c1] - x[r0][c1]*x[r1][c0];
+}
+
+template <class T>
+inline T
+Matrix33<T>::determinant () const
+{
+    return x[0][0]*(x[1][1]*x[2][2] - x[1][2]*x[2][1]) +
+           x[0][1]*(x[1][2]*x[2][0] - x[1][0]*x[2][2]) +
+           x[0][2]*(x[1][0]*x[2][1] - x[1][1]*x[2][0]);
+}
+
+template <class T>
+template <class S>
+const Matrix33<T> &
+Matrix33<T>::setRotation (S r)
+{
+    S cos_r, sin_r;
+
+    cos_r = Math<T>::cos (r);
+    sin_r = Math<T>::sin (r);
+
+    x[0][0] =  cos_r;
+    x[0][1] =  sin_r;
+    x[0][2] =  0;
+
+    x[1][0] =  -sin_r;
+    x[1][1] =  cos_r;
+    x[1][2] =  0;
+
+    x[2][0] =  0;
+    x[2][1] =  0;
+    x[2][2] =  1;
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix33<T> &
+Matrix33<T>::rotate (S r)
+{
+    *this *= Matrix33<T>().setRotation (r);
+    return *this;
+}
+
+template <class T>
+const Matrix33<T> &
+Matrix33<T>::setScale (T s)
+{
+    memset (x, 0, sizeof (x));
+    x[0][0] = s;
+    x[1][1] = s;
+    x[2][2] = 1;
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix33<T> &
+Matrix33<T>::setScale (const Vec2<S> &s)
+{
+    memset (x, 0, sizeof (x));
+    x[0][0] = s[0];
+    x[1][1] = s[1];
+    x[2][2] = 1;
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix33<T> &
+Matrix33<T>::scale (const Vec2<S> &s)
+{
+    x[0][0] *= s[0];
+    x[0][1] *= s[0];
+    x[0][2] *= s[0];
+
+    x[1][0] *= s[1];
+    x[1][1] *= s[1];
+    x[1][2] *= s[1];
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix33<T> &
+Matrix33<T>::setTranslation (const Vec2<S> &t)
+{
+    x[0][0] = 1;
+    x[0][1] = 0;
+    x[0][2] = 0;
+
+    x[1][0] = 0;
+    x[1][1] = 1;
+    x[1][2] = 0;
+
+    x[2][0] = t[0];
+    x[2][1] = t[1];
+    x[2][2] = 1;
+
+    return *this;
+}
+
+template <class T>
+inline Vec2<T> 
+Matrix33<T>::translation () const
+{
+    return Vec2<T> (x[2][0], x[2][1]);
+}
+
+template <class T>
+template <class S>
+const Matrix33<T> &
+Matrix33<T>::translate (const Vec2<S> &t)
+{
+    x[2][0] += t[0] * x[0][0] + t[1] * x[1][0];
+    x[2][1] += t[0] * x[0][1] + t[1] * x[1][1];
+    x[2][2] += t[0] * x[0][2] + t[1] * x[1][2];
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix33<T> &
+Matrix33<T>::setShear (const S &xy)
+{
+    x[0][0] = 1;
+    x[0][1] = 0;
+    x[0][2] = 0;
+
+    x[1][0] = xy;
+    x[1][1] = 1;
+    x[1][2] = 0;
+
+    x[2][0] = 0;
+    x[2][1] = 0;
+    x[2][2] = 1;
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix33<T> &
+Matrix33<T>::setShear (const Vec2<S> &h)
+{
+    x[0][0] = 1;
+    x[0][1] = h[1];
+    x[0][2] = 0;
+
+    x[1][0] = h[0];
+    x[1][1] = 1;
+    x[1][2] = 0;
+
+    x[2][0] = 0;
+    x[2][1] = 0;
+    x[2][2] = 1;
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix33<T> &
+Matrix33<T>::shear (const S &xy)
+{
+    //
+    // In this case, we don't need a temp. copy of the matrix 
+    // because we never use a value on the RHS after we've 
+    // changed it on the LHS.
+    // 
+
+    x[1][0] += xy * x[0][0];
+    x[1][1] += xy * x[0][1];
+    x[1][2] += xy * x[0][2];
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix33<T> &
+Matrix33<T>::shear (const Vec2<S> &h)
+{
+    Matrix33<T> P (*this);
+    
+    x[0][0] = P[0][0] + h[1] * P[1][0];
+    x[0][1] = P[0][1] + h[1] * P[1][1];
+    x[0][2] = P[0][2] + h[1] * P[1][2];
+    
+    x[1][0] = P[1][0] + h[0] * P[0][0];
+    x[1][1] = P[1][1] + h[0] * P[0][1];
+    x[1][2] = P[1][2] + h[0] * P[0][2];
+
+    return *this;
+}
+
+
+//---------------------------
+// Implementation of Matrix44
+//---------------------------
+
+template <class T>
+inline T *
+Matrix44<T>::operator [] (int i)
+{
+    return x[i];
+}
+
+template <class T>
+inline const T *
+Matrix44<T>::operator [] (int i) const
+{
+    return x[i];
+}
+
+template <class T>
+inline
+Matrix44<T>::Matrix44 ()
+{
+    memset (x, 0, sizeof (x));
+    x[0][0] = 1;
+    x[1][1] = 1;
+    x[2][2] = 1;
+    x[3][3] = 1;
+}
+
+template <class T>
+inline
+Matrix44<T>::Matrix44 (T a)
+{
+    x[0][0] = a;
+    x[0][1] = a;
+    x[0][2] = a;
+    x[0][3] = a;
+    x[1][0] = a;
+    x[1][1] = a;
+    x[1][2] = a;
+    x[1][3] = a;
+    x[2][0] = a;
+    x[2][1] = a;
+    x[2][2] = a;
+    x[2][3] = a;
+    x[3][0] = a;
+    x[3][1] = a;
+    x[3][2] = a;
+    x[3][3] = a;
+}
+
+template <class T>
+inline
+Matrix44<T>::Matrix44 (const T a[4][4]) 
+{
+    memcpy (x, a, sizeof (x));
+}
+
+template <class T>
+inline
+Matrix44<T>::Matrix44 (T a, T b, T c, T d, T e, T f, T g, T h,
+                       T i, T j, T k, T l, T m, T n, T o, T p)
+{
+    x[0][0] = a;
+    x[0][1] = b;
+    x[0][2] = c;
+    x[0][3] = d;
+    x[1][0] = e;
+    x[1][1] = f;
+    x[1][2] = g;
+    x[1][3] = h;
+    x[2][0] = i;
+    x[2][1] = j;
+    x[2][2] = k;
+    x[2][3] = l;
+    x[3][0] = m;
+    x[3][1] = n;
+    x[3][2] = o;
+    x[3][3] = p;
+}
+
+
+template <class T>
+inline
+Matrix44<T>::Matrix44 (Matrix33<T> r, Vec3<T> t)
+{
+    x[0][0] = r[0][0];
+    x[0][1] = r[0][1];
+    x[0][2] = r[0][2];
+    x[0][3] = 0;
+    x[1][0] = r[1][0];
+    x[1][1] = r[1][1];
+    x[1][2] = r[1][2];
+    x[1][3] = 0;
+    x[2][0] = r[2][0];
+    x[2][1] = r[2][1];
+    x[2][2] = r[2][2];
+    x[2][3] = 0;
+    x[3][0] = t[0];
+    x[3][1] = t[1];
+    x[3][2] = t[2];
+    x[3][3] = 1;
+}
+
+template <class T>
+inline
+Matrix44<T>::Matrix44 (const Matrix44 &v)
+{
+    x[0][0] = v.x[0][0];
+    x[0][1] = v.x[0][1];
+    x[0][2] = v.x[0][2];
+    x[0][3] = v.x[0][3];
+    x[1][0] = v.x[1][0];
+    x[1][1] = v.x[1][1];
+    x[1][2] = v.x[1][2];
+    x[1][3] = v.x[1][3];
+    x[2][0] = v.x[2][0];
+    x[2][1] = v.x[2][1];
+    x[2][2] = v.x[2][2];
+    x[2][3] = v.x[2][3];
+    x[3][0] = v.x[3][0];
+    x[3][1] = v.x[3][1];
+    x[3][2] = v.x[3][2];
+    x[3][3] = v.x[3][3];
+}
+
+template <class T>
+template <class S>
+inline
+Matrix44<T>::Matrix44 (const Matrix44<S> &v)
+{
+    x[0][0] = T (v.x[0][0]);
+    x[0][1] = T (v.x[0][1]);
+    x[0][2] = T (v.x[0][2]);
+    x[0][3] = T (v.x[0][3]);
+    x[1][0] = T (v.x[1][0]);
+    x[1][1] = T (v.x[1][1]);
+    x[1][2] = T (v.x[1][2]);
+    x[1][3] = T (v.x[1][3]);
+    x[2][0] = T (v.x[2][0]);
+    x[2][1] = T (v.x[2][1]);
+    x[2][2] = T (v.x[2][2]);
+    x[2][3] = T (v.x[2][3]);
+    x[3][0] = T (v.x[3][0]);
+    x[3][1] = T (v.x[3][1]);
+    x[3][2] = T (v.x[3][2]);
+    x[3][3] = T (v.x[3][3]);
+}
+
+template <class T>
+inline const Matrix44<T> &
+Matrix44<T>::operator = (const Matrix44 &v)
+{
+    x[0][0] = v.x[0][0];
+    x[0][1] = v.x[0][1];
+    x[0][2] = v.x[0][2];
+    x[0][3] = v.x[0][3];
+    x[1][0] = v.x[1][0];
+    x[1][1] = v.x[1][1];
+    x[1][2] = v.x[1][2];
+    x[1][3] = v.x[1][3];
+    x[2][0] = v.x[2][0];
+    x[2][1] = v.x[2][1];
+    x[2][2] = v.x[2][2];
+    x[2][3] = v.x[2][3];
+    x[3][0] = v.x[3][0];
+    x[3][1] = v.x[3][1];
+    x[3][2] = v.x[3][2];
+    x[3][3] = v.x[3][3];
+    return *this;
+}
+
+template <class T>
+inline const Matrix44<T> &
+Matrix44<T>::operator = (T a)
+{
+    x[0][0] = a;
+    x[0][1] = a;
+    x[0][2] = a;
+    x[0][3] = a;
+    x[1][0] = a;
+    x[1][1] = a;
+    x[1][2] = a;
+    x[1][3] = a;
+    x[2][0] = a;
+    x[2][1] = a;
+    x[2][2] = a;
+    x[2][3] = a;
+    x[3][0] = a;
+    x[3][1] = a;
+    x[3][2] = a;
+    x[3][3] = a;
+    return *this;
+}
+
+template <class T>
+inline T *
+Matrix44<T>::getValue ()
+{
+    return (T *) &x[0][0];
+}
+
+template <class T>
+inline const T *
+Matrix44<T>::getValue () const
+{
+    return (const T *) &x[0][0];
+}
+
+template <class T>
+template <class S>
+inline void
+Matrix44<T>::getValue (Matrix44<S> &v) const
+{
+    if (isSameType<S,T>::value)
+    {
+        memcpy (v.x, x, sizeof (x));
+    }
+    else
+    {
+        v.x[0][0] = x[0][0];
+        v.x[0][1] = x[0][1];
+        v.x[0][2] = x[0][2];
+        v.x[0][3] = x[0][3];
+        v.x[1][0] = x[1][0];
+        v.x[1][1] = x[1][1];
+        v.x[1][2] = x[1][2];
+        v.x[1][3] = x[1][3];
+        v.x[2][0] = x[2][0];
+        v.x[2][1] = x[2][1];
+        v.x[2][2] = x[2][2];
+        v.x[2][3] = x[2][3];
+        v.x[3][0] = x[3][0];
+        v.x[3][1] = x[3][1];
+        v.x[3][2] = x[3][2];
+        v.x[3][3] = x[3][3];
+    }
+}
+
+template <class T>
+template <class S>
+inline Matrix44<T> &
+Matrix44<T>::setValue (const Matrix44<S> &v)
+{
+    if (isSameType<S,T>::value)
+    {
+        memcpy (x, v.x, sizeof (x));
+    }
+    else
+    {
+        x[0][0] = v.x[0][0];
+        x[0][1] = v.x[0][1];
+        x[0][2] = v.x[0][2];
+        x[0][3] = v.x[0][3];
+        x[1][0] = v.x[1][0];
+        x[1][1] = v.x[1][1];
+        x[1][2] = v.x[1][2];
+        x[1][3] = v.x[1][3];
+        x[2][0] = v.x[2][0];
+        x[2][1] = v.x[2][1];
+        x[2][2] = v.x[2][2];
+        x[2][3] = v.x[2][3];
+        x[3][0] = v.x[3][0];
+        x[3][1] = v.x[3][1];
+        x[3][2] = v.x[3][2];
+        x[3][3] = v.x[3][3];
+    }
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+inline Matrix44<T> &
+Matrix44<T>::setTheMatrix (const Matrix44<S> &v)
+{
+    if (isSameType<S,T>::value)
+    {
+        memcpy (x, v.x, sizeof (x));
+    }
+    else
+    {
+        x[0][0] = v.x[0][0];
+        x[0][1] = v.x[0][1];
+        x[0][2] = v.x[0][2];
+        x[0][3] = v.x[0][3];
+        x[1][0] = v.x[1][0];
+        x[1][1] = v.x[1][1];
+        x[1][2] = v.x[1][2];
+        x[1][3] = v.x[1][3];
+        x[2][0] = v.x[2][0];
+        x[2][1] = v.x[2][1];
+        x[2][2] = v.x[2][2];
+        x[2][3] = v.x[2][3];
+        x[3][0] = v.x[3][0];
+        x[3][1] = v.x[3][1];
+        x[3][2] = v.x[3][2];
+        x[3][3] = v.x[3][3];
+    }
+
+    return *this;
+}
+
+template <class T>
+inline void
+Matrix44<T>::makeIdentity()
+{
+    memset (x, 0, sizeof (x));
+    x[0][0] = 1;
+    x[1][1] = 1;
+    x[2][2] = 1;
+    x[3][3] = 1;
+}
+
+template <class T>
+bool
+Matrix44<T>::operator == (const Matrix44 &v) const
+{
+    return x[0][0] == v.x[0][0] &&
+           x[0][1] == v.x[0][1] &&
+           x[0][2] == v.x[0][2] &&
+           x[0][3] == v.x[0][3] &&
+           x[1][0] == v.x[1][0] &&
+           x[1][1] == v.x[1][1] &&
+           x[1][2] == v.x[1][2] &&
+           x[1][3] == v.x[1][3] &&
+           x[2][0] == v.x[2][0] &&
+           x[2][1] == v.x[2][1] &&
+           x[2][2] == v.x[2][2] &&
+           x[2][3] == v.x[2][3] &&
+           x[3][0] == v.x[3][0] &&
+           x[3][1] == v.x[3][1] &&
+           x[3][2] == v.x[3][2] &&
+           x[3][3] == v.x[3][3];
+}
+
+template <class T>
+bool
+Matrix44<T>::operator != (const Matrix44 &v) const
+{
+    return x[0][0] != v.x[0][0] ||
+           x[0][1] != v.x[0][1] ||
+           x[0][2] != v.x[0][2] ||
+           x[0][3] != v.x[0][3] ||
+           x[1][0] != v.x[1][0] ||
+           x[1][1] != v.x[1][1] ||
+           x[1][2] != v.x[1][2] ||
+           x[1][3] != v.x[1][3] ||
+           x[2][0] != v.x[2][0] ||
+           x[2][1] != v.x[2][1] ||
+           x[2][2] != v.x[2][2] ||
+           x[2][3] != v.x[2][3] ||
+           x[3][0] != v.x[3][0] ||
+           x[3][1] != v.x[3][1] ||
+           x[3][2] != v.x[3][2] ||
+           x[3][3] != v.x[3][3];
+}
+
+template <class T>
+bool
+Matrix44<T>::equalWithAbsError (const Matrix44<T> &m, T e) const
+{
+    for (int i = 0; i < 4; i++)
+        for (int j = 0; j < 4; j++)
+            if (!Imath::equalWithAbsError ((*this)[i][j], m[i][j], e))
+                return false;
+
+    return true;
+}
+
+template <class T>
+bool
+Matrix44<T>::equalWithRelError (const Matrix44<T> &m, T e) const
+{
+    for (int i = 0; i < 4; i++)
+        for (int j = 0; j < 4; j++)
+            if (!Imath::equalWithRelError ((*this)[i][j], m[i][j], e))
+                return false;
+
+    return true;
+}
+
+template <class T>
+const Matrix44<T> &
+Matrix44<T>::operator += (const Matrix44<T> &v)
+{
+    x[0][0] += v.x[0][0];
+    x[0][1] += v.x[0][1];
+    x[0][2] += v.x[0][2];
+    x[0][3] += v.x[0][3];
+    x[1][0] += v.x[1][0];
+    x[1][1] += v.x[1][1];
+    x[1][2] += v.x[1][2];
+    x[1][3] += v.x[1][3];
+    x[2][0] += v.x[2][0];
+    x[2][1] += v.x[2][1];
+    x[2][2] += v.x[2][2];
+    x[2][3] += v.x[2][3];
+    x[3][0] += v.x[3][0];
+    x[3][1] += v.x[3][1];
+    x[3][2] += v.x[3][2];
+    x[3][3] += v.x[3][3];
+
+    return *this;
+}
+
+template <class T>
+const Matrix44<T> &
+Matrix44<T>::operator += (T a)
+{
+    x[0][0] += a;
+    x[0][1] += a;
+    x[0][2] += a;
+    x[0][3] += a;
+    x[1][0] += a;
+    x[1][1] += a;
+    x[1][2] += a;
+    x[1][3] += a;
+    x[2][0] += a;
+    x[2][1] += a;
+    x[2][2] += a;
+    x[2][3] += a;
+    x[3][0] += a;
+    x[3][1] += a;
+    x[3][2] += a;
+    x[3][3] += a;
+
+    return *this;
+}
+
+template <class T>
+Matrix44<T>
+Matrix44<T>::operator + (const Matrix44<T> &v) const
+{
+    return Matrix44 (x[0][0] + v.x[0][0],
+                     x[0][1] + v.x[0][1],
+                     x[0][2] + v.x[0][2],
+                     x[0][3] + v.x[0][3],
+                     x[1][0] + v.x[1][0],
+                     x[1][1] + v.x[1][1],
+                     x[1][2] + v.x[1][2],
+                     x[1][3] + v.x[1][3],
+                     x[2][0] + v.x[2][0],
+                     x[2][1] + v.x[2][1],
+                     x[2][2] + v.x[2][2],
+                     x[2][3] + v.x[2][3],
+                     x[3][0] + v.x[3][0],
+                     x[3][1] + v.x[3][1],
+                     x[3][2] + v.x[3][2],
+                     x[3][3] + v.x[3][3]);
+}
+
+template <class T>
+const Matrix44<T> &
+Matrix44<T>::operator -= (const Matrix44<T> &v)
+{
+    x[0][0] -= v.x[0][0];
+    x[0][1] -= v.x[0][1];
+    x[0][2] -= v.x[0][2];
+    x[0][3] -= v.x[0][3];
+    x[1][0] -= v.x[1][0];
+    x[1][1] -= v.x[1][1];
+    x[1][2] -= v.x[1][2];
+    x[1][3] -= v.x[1][3];
+    x[2][0] -= v.x[2][0];
+    x[2][1] -= v.x[2][1];
+    x[2][2] -= v.x[2][2];
+    x[2][3] -= v.x[2][3];
+    x[3][0] -= v.x[3][0];
+    x[3][1] -= v.x[3][1];
+    x[3][2] -= v.x[3][2];
+    x[3][3] -= v.x[3][3];
+
+    return *this;
+}
+
+template <class T>
+const Matrix44<T> &
+Matrix44<T>::operator -= (T a)
+{
+    x[0][0] -= a;
+    x[0][1] -= a;
+    x[0][2] -= a;
+    x[0][3] -= a;
+    x[1][0] -= a;
+    x[1][1] -= a;
+    x[1][2] -= a;
+    x[1][3] -= a;
+    x[2][0] -= a;
+    x[2][1] -= a;
+    x[2][2] -= a;
+    x[2][3] -= a;
+    x[3][0] -= a;
+    x[3][1] -= a;
+    x[3][2] -= a;
+    x[3][3] -= a;
+
+    return *this;
+}
+
+template <class T>
+Matrix44<T>
+Matrix44<T>::operator - (const Matrix44<T> &v) const
+{
+    return Matrix44 (x[0][0] - v.x[0][0],
+                     x[0][1] - v.x[0][1],
+                     x[0][2] - v.x[0][2],
+                     x[0][3] - v.x[0][3],
+                     x[1][0] - v.x[1][0],
+                     x[1][1] - v.x[1][1],
+                     x[1][2] - v.x[1][2],
+                     x[1][3] - v.x[1][3],
+                     x[2][0] - v.x[2][0],
+                     x[2][1] - v.x[2][1],
+                     x[2][2] - v.x[2][2],
+                     x[2][3] - v.x[2][3],
+                     x[3][0] - v.x[3][0],
+                     x[3][1] - v.x[3][1],
+                     x[3][2] - v.x[3][2],
+                     x[3][3] - v.x[3][3]);
+}
+
+template <class T>
+Matrix44<T>
+Matrix44<T>::operator - () const
+{
+    return Matrix44 (-x[0][0],
+                     -x[0][1],
+                     -x[0][2],
+                     -x[0][3],
+                     -x[1][0],
+                     -x[1][1],
+                     -x[1][2],
+                     -x[1][3],
+                     -x[2][0],
+                     -x[2][1],
+                     -x[2][2],
+                     -x[2][3],
+                     -x[3][0],
+                     -x[3][1],
+                     -x[3][2],
+                     -x[3][3]);
+}
+
+template <class T>
+const Matrix44<T> &
+Matrix44<T>::negate ()
+{
+    x[0][0] = -x[0][0];
+    x[0][1] = -x[0][1];
+    x[0][2] = -x[0][2];
+    x[0][3] = -x[0][3];
+    x[1][0] = -x[1][0];
+    x[1][1] = -x[1][1];
+    x[1][2] = -x[1][2];
+    x[1][3] = -x[1][3];
+    x[2][0] = -x[2][0];
+    x[2][1] = -x[2][1];
+    x[2][2] = -x[2][2];
+    x[2][3] = -x[2][3];
+    x[3][0] = -x[3][0];
+    x[3][1] = -x[3][1];
+    x[3][2] = -x[3][2];
+    x[3][3] = -x[3][3];
+
+    return *this;
+}
+
+template <class T>
+const Matrix44<T> &
+Matrix44<T>::operator *= (T a)
+{
+    x[0][0] *= a;
+    x[0][1] *= a;
+    x[0][2] *= a;
+    x[0][3] *= a;
+    x[1][0] *= a;
+    x[1][1] *= a;
+    x[1][2] *= a;
+    x[1][3] *= a;
+    x[2][0] *= a;
+    x[2][1] *= a;
+    x[2][2] *= a;
+    x[2][3] *= a;
+    x[3][0] *= a;
+    x[3][1] *= a;
+    x[3][2] *= a;
+    x[3][3] *= a;
+
+    return *this;
+}
+
+template <class T>
+Matrix44<T>
+Matrix44<T>::operator * (T a) const
+{
+    return Matrix44 (x[0][0] * a,
+                     x[0][1] * a,
+                     x[0][2] * a,
+                     x[0][3] * a,
+                     x[1][0] * a,
+                     x[1][1] * a,
+                     x[1][2] * a,
+                     x[1][3] * a,
+                     x[2][0] * a,
+                     x[2][1] * a,
+                     x[2][2] * a,
+                     x[2][3] * a,
+                     x[3][0] * a,
+                     x[3][1] * a,
+                     x[3][2] * a,
+                     x[3][3] * a);
+}
+
+template <class T>
+inline Matrix44<T>
+operator * (T a, const Matrix44<T> &v)
+{
+    return v * a;
+}
+
+template <class T>
+inline const Matrix44<T> &
+Matrix44<T>::operator *= (const Matrix44<T> &v)
+{
+    Matrix44 tmp (T (0));
+
+    multiply (*this, v, tmp);
+    *this = tmp;
+    return *this;
+}
+
+template <class T>
+inline Matrix44<T>
+Matrix44<T>::operator * (const Matrix44<T> &v) const
+{
+    Matrix44 tmp (T (0));
+
+    multiply (*this, v, tmp);
+    return tmp;
+}
+
+template <class T>
+void
+Matrix44<T>::multiply (const Matrix44<T> &a,
+                       const Matrix44<T> &b,
+                       Matrix44<T> &c)
+{
+    register const T * IMATH_RESTRICT ap = &a.x[0][0];
+    register const T * IMATH_RESTRICT bp = &b.x[0][0];
+    register       T * IMATH_RESTRICT cp = &c.x[0][0];
+
+    register T a0, a1, a2, a3;
+
+    a0 = ap[0];
+    a1 = ap[1];
+    a2 = ap[2];
+    a3 = ap[3];
+
+    cp[0]  = a0 * bp[0]  + a1 * bp[4]  + a2 * bp[8]  + a3 * bp[12];
+    cp[1]  = a0 * bp[1]  + a1 * bp[5]  + a2 * bp[9]  + a3 * bp[13];
+    cp[2]  = a0 * bp[2]  + a1 * bp[6]  + a2 * bp[10] + a3 * bp[14];
+    cp[3]  = a0 * bp[3]  + a1 * bp[7]  + a2 * bp[11] + a3 * bp[15];
+
+    a0 = ap[4];
+    a1 = ap[5];
+    a2 = ap[6];
+    a3 = ap[7];
+
+    cp[4]  = a0 * bp[0]  + a1 * bp[4]  + a2 * bp[8]  + a3 * bp[12];
+    cp[5]  = a0 * bp[1]  + a1 * bp[5]  + a2 * bp[9]  + a3 * bp[13];
+    cp[6]  = a0 * bp[2]  + a1 * bp[6]  + a2 * bp[10] + a3 * bp[14];
+    cp[7]  = a0 * bp[3]  + a1 * bp[7]  + a2 * bp[11] + a3 * bp[15];
+
+    a0 = ap[8];
+    a1 = ap[9];
+    a2 = ap[10];
+    a3 = ap[11];
+
+    cp[8]  = a0 * bp[0]  + a1 * bp[4]  + a2 * bp[8]  + a3 * bp[12];
+    cp[9]  = a0 * bp[1]  + a1 * bp[5]  + a2 * bp[9]  + a3 * bp[13];
+    cp[10] = a0 * bp[2]  + a1 * bp[6]  + a2 * bp[10] + a3 * bp[14];
+    cp[11] = a0 * bp[3]  + a1 * bp[7]  + a2 * bp[11] + a3 * bp[15];
+
+    a0 = ap[12];
+    a1 = ap[13];
+    a2 = ap[14];
+    a3 = ap[15];
+
+    cp[12] = a0 * bp[0]  + a1 * bp[4]  + a2 * bp[8]  + a3 * bp[12];
+    cp[13] = a0 * bp[1]  + a1 * bp[5]  + a2 * bp[9]  + a3 * bp[13];
+    cp[14] = a0 * bp[2]  + a1 * bp[6]  + a2 * bp[10] + a3 * bp[14];
+    cp[15] = a0 * bp[3]  + a1 * bp[7]  + a2 * bp[11] + a3 * bp[15];
+}
+
+template <class T> template <class S>
+void
+Matrix44<T>::multVecMatrix(const Vec3<S> &src, Vec3<S> &dst) const
+{
+    S a, b, c, w;
+
+    a = src[0] * x[0][0] + src[1] * x[1][0] + src[2] * x[2][0] + x[3][0];
+    b = src[0] * x[0][1] + src[1] * x[1][1] + src[2] * x[2][1] + x[3][1];
+    c = src[0] * x[0][2] + src[1] * x[1][2] + src[2] * x[2][2] + x[3][2];
+    w = src[0] * x[0][3] + src[1] * x[1][3] + src[2] * x[2][3] + x[3][3];
+
+    dst.x = a / w;
+    dst.y = b / w;
+    dst.z = c / w;
+}
+
+template <class T> template <class S>
+void
+Matrix44<T>::multDirMatrix(const Vec3<S> &src, Vec3<S> &dst) const
+{
+    S a, b, c;
+
+    a = src[0] * x[0][0] + src[1] * x[1][0] + src[2] * x[2][0];
+    b = src[0] * x[0][1] + src[1] * x[1][1] + src[2] * x[2][1];
+    c = src[0] * x[0][2] + src[1] * x[1][2] + src[2] * x[2][2];
+
+    dst.x = a;
+    dst.y = b;
+    dst.z = c;
+}
+
+template <class T>
+const Matrix44<T> &
+Matrix44<T>::operator /= (T a)
+{
+    x[0][0] /= a;
+    x[0][1] /= a;
+    x[0][2] /= a;
+    x[0][3] /= a;
+    x[1][0] /= a;
+    x[1][1] /= a;
+    x[1][2] /= a;
+    x[1][3] /= a;
+    x[2][0] /= a;
+    x[2][1] /= a;
+    x[2][2] /= a;
+    x[2][3] /= a;
+    x[3][0] /= a;
+    x[3][1] /= a;
+    x[3][2] /= a;
+    x[3][3] /= a;
+
+    return *this;
+}
+
+template <class T>
+Matrix44<T>
+Matrix44<T>::operator / (T a) const
+{
+    return Matrix44 (x[0][0] / a,
+                     x[0][1] / a,
+                     x[0][2] / a,
+                     x[0][3] / a,
+                     x[1][0] / a,
+                     x[1][1] / a,
+                     x[1][2] / a,
+                     x[1][3] / a,
+                     x[2][0] / a,
+                     x[2][1] / a,
+                     x[2][2] / a,
+                     x[2][3] / a,
+                     x[3][0] / a,
+                     x[3][1] / a,
+                     x[3][2] / a,
+                     x[3][3] / a);
+}
+
+template <class T>
+const Matrix44<T> &
+Matrix44<T>::transpose ()
+{
+    Matrix44 tmp (x[0][0],
+                  x[1][0],
+                  x[2][0],
+                  x[3][0],
+                  x[0][1],
+                  x[1][1],
+                  x[2][1],
+                  x[3][1],
+                  x[0][2],
+                  x[1][2],
+                  x[2][2],
+                  x[3][2],
+                  x[0][3],
+                  x[1][3],
+                  x[2][3],
+                  x[3][3]);
+    *this = tmp;
+    return *this;
+}
+
+template <class T>
+Matrix44<T>
+Matrix44<T>::transposed () const
+{
+    return Matrix44 (x[0][0],
+                     x[1][0],
+                     x[2][0],
+                     x[3][0],
+                     x[0][1],
+                     x[1][1],
+                     x[2][1],
+                     x[3][1],
+                     x[0][2],
+                     x[1][2],
+                     x[2][2],
+                     x[3][2],
+                     x[0][3],
+                     x[1][3],
+                     x[2][3],
+                     x[3][3]);
+}
+
+template <class T>
+const Matrix44<T> &
+Matrix44<T>::gjInvert (bool singExc) throw (Iex::MathExc)
+{
+    *this = gjInverse (singExc);
+    return *this;
+}
+
+template <class T>
+Matrix44<T>
+Matrix44<T>::gjInverse (bool singExc) const throw (Iex::MathExc)
+{
+    int i, j, k;
+    Matrix44 s;
+    Matrix44 t (*this);
+
+    // Forward elimination
+
+    for (i = 0; i < 3 ; i++)
+    {
+        int pivot = i;
+
+        T pivotsize = t[i][i];
+
+        if (pivotsize < 0)
+            pivotsize = -pivotsize;
+
+        for (j = i + 1; j < 4; j++)
+        {
+            T tmp = t[j][i];
+
+            if (tmp < 0)
+                tmp = -tmp;
+
+            if (tmp > pivotsize)
+            {
+                pivot = j;
+                pivotsize = tmp;
+            }
+        }
+
+        if (pivotsize == 0)
+        {
+            if (singExc)
+                throw ::Imath::SingMatrixExc ("Cannot invert singular matrix.");
+
+            return Matrix44();
+        }
+
+        if (pivot != i)
+        {
+            for (j = 0; j < 4; j++)
+            {
+                T tmp;
+
+                tmp = t[i][j];
+                t[i][j] = t[pivot][j];
+                t[pivot][j] = tmp;
+
+                tmp = s[i][j];
+                s[i][j] = s[pivot][j];
+                s[pivot][j] = tmp;
+            }
+        }
+
+        for (j = i + 1; j < 4; j++)
+        {
+            T f = t[j][i] / t[i][i];
+
+            for (k = 0; k < 4; k++)
+            {
+                t[j][k] -= f * t[i][k];
+                s[j][k] -= f * s[i][k];
+            }
+        }
+    }
+
+    // Backward substitution
+
+    for (i = 3; i >= 0; --i)
+    {
+        T f;
+
+        if ((f = t[i][i]) == 0)
+        {
+            if (singExc)
+                throw ::Imath::SingMatrixExc ("Cannot invert singular matrix.");
+
+            return Matrix44();
+        }
+
+        for (j = 0; j < 4; j++)
+        {
+            t[i][j] /= f;
+            s[i][j] /= f;
+        }
+
+        for (j = 0; j < i; j++)
+        {
+            f = t[j][i];
+
+            for (k = 0; k < 4; k++)
+            {
+                t[j][k] -= f * t[i][k];
+                s[j][k] -= f * s[i][k];
+            }
+        }
+    }
+
+    return s;
+}
+
+template <class T>
+const Matrix44<T> &
+Matrix44<T>::invert (bool singExc) throw (Iex::MathExc)
+{
+    *this = inverse (singExc);
+    return *this;
+}
+
+template <class T>
+Matrix44<T>
+Matrix44<T>::inverse (bool singExc) const throw (Iex::MathExc)
+{
+    if (x[0][3] != 0 || x[1][3] != 0 || x[2][3] != 0 || x[3][3] != 1)
+        return gjInverse(singExc);
+
+    Matrix44 s (x[1][1] * x[2][2] - x[2][1] * x[1][2],
+                x[2][1] * x[0][2] - x[0][1] * x[2][2],
+                x[0][1] * x[1][2] - x[1][1] * x[0][2],
+                0,
+
+                x[2][0] * x[1][2] - x[1][0] * x[2][2],
+                x[0][0] * x[2][2] - x[2][0] * x[0][2],
+                x[1][0] * x[0][2] - x[0][0] * x[1][2],
+                0,
+
+                x[1][0] * x[2][1] - x[2][0] * x[1][1],
+                x[2][0] * x[0][1] - x[0][0] * x[2][1],
+                x[0][0] * x[1][1] - x[1][0] * x[0][1],
+                0,
+
+                0,
+                0,
+                0,
+                1);
+
+    T r = x[0][0] * s[0][0] + x[0][1] * s[1][0] + x[0][2] * s[2][0];
+
+    if (Imath::abs (r) >= 1)
+    {
+        for (int i = 0; i < 3; ++i)
+        {
+            for (int j = 0; j < 3; ++j)
+            {
+                s[i][j] /= r;
+            }
+        }
+    }
+    else
+    {
+        T mr = Imath::abs (r) / limits<T>::smallest();
+
+        for (int i = 0; i < 3; ++i)
+        {
+            for (int j = 0; j < 3; ++j)
+            {
+                if (mr > Imath::abs (s[i][j]))
+                {
+                    s[i][j] /= r;
+                }
+                else
+                {
+                    if (singExc)
+                        throw SingMatrixExc ("Cannot invert singular matrix.");
+
+                    return Matrix44();
+                }
+            }
+        }
+    }
+
+    s[3][0] = -x[3][0] * s[0][0] - x[3][1] * s[1][0] - x[3][2] * s[2][0];
+    s[3][1] = -x[3][0] * s[0][1] - x[3][1] * s[1][1] - x[3][2] * s[2][1];
+    s[3][2] = -x[3][0] * s[0][2] - x[3][1] * s[1][2] - x[3][2] * s[2][2];
+
+    return s;
+}
+
+template <class T>
+inline T
+Matrix44<T>::fastMinor( const int r0, const int r1, const int r2,
+                        const int c0, const int c1, const int c2) const
+{
+    return x[r0][c0] * (x[r1][c1]*x[r2][c2] - x[r1][c2]*x[r2][c1])
+         + x[r0][c1] * (x[r1][c2]*x[r2][c0] - x[r1][c0]*x[r2][c2])
+         + x[r0][c2] * (x[r1][c0]*x[r2][c1] - x[r1][c1]*x[r2][c0]);
+}
+
+template <class T>
+inline T
+Matrix44<T>::minorOf (const int r, const int c) const
+{
+    int r0 = 0 + (r < 1 ? 1 : 0);
+    int r1 = 1 + (r < 2 ? 1 : 0);
+    int r2 = 2 + (r < 3 ? 1 : 0);
+    int c0 = 0 + (c < 1 ? 1 : 0);
+    int c1 = 1 + (c < 2 ? 1 : 0);
+    int c2 = 2 + (c < 3 ? 1 : 0);
+
+    Matrix33<T> working (x[r0][c0],x[r1][c0],x[r2][c0],
+                         x[r0][c1],x[r1][c1],x[r2][c1],
+                         x[r0][c2],x[r1][c2],x[r2][c2]);
+
+    return working.determinant();
+}
+
+template <class T>
+inline T
+Matrix44<T>::determinant () const
+{
+    T sum = (T)0;
+
+    if (x[0][3] != 0.) sum -= x[0][3] * fastMinor(1,2,3,0,1,2);
+    if (x[1][3] != 0.) sum += x[1][3] * fastMinor(0,2,3,0,1,2);
+    if (x[2][3] != 0.) sum -= x[2][3] * fastMinor(0,1,3,0,1,2);
+    if (x[3][3] != 0.) sum += x[3][3] * fastMinor(0,1,2,0,1,2);
+
+    return sum;
+}
+
+template <class T>
+template <class S>
+const Matrix44<T> &
+Matrix44<T>::setEulerAngles (const Vec3<S>& r)
+{
+    S cos_rz, sin_rz, cos_ry, sin_ry, cos_rx, sin_rx;
+    
+    cos_rz = Math<T>::cos (r[2]);
+    cos_ry = Math<T>::cos (r[1]);
+    cos_rx = Math<T>::cos (r[0]);
+    
+    sin_rz = Math<T>::sin (r[2]);
+    sin_ry = Math<T>::sin (r[1]);
+    sin_rx = Math<T>::sin (r[0]);
+    
+    x[0][0] =  cos_rz * cos_ry;
+    x[0][1] =  sin_rz * cos_ry;
+    x[0][2] = -sin_ry;
+    x[0][3] =  0;
+    
+    x[1][0] = -sin_rz * cos_rx + cos_rz * sin_ry * sin_rx;
+    x[1][1] =  cos_rz * cos_rx + sin_rz * sin_ry * sin_rx;
+    x[1][2] =  cos_ry * sin_rx;
+    x[1][3] =  0;
+    
+    x[2][0] =  sin_rz * sin_rx + cos_rz * sin_ry * cos_rx;
+    x[2][1] = -cos_rz * sin_rx + sin_rz * sin_ry * cos_rx;
+    x[2][2] =  cos_ry * cos_rx;
+    x[2][3] =  0;
+
+    x[3][0] =  0;
+    x[3][1] =  0;
+    x[3][2] =  0;
+    x[3][3] =  1;
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix44<T> &
+Matrix44<T>::setAxisAngle (const Vec3<S>& axis, S angle)
+{
+    Vec3<S> unit (axis.normalized());
+    S sine   = Math<T>::sin (angle);
+    S cosine = Math<T>::cos (angle);
+
+    x[0][0] = unit[0] * unit[0] * (1 - cosine) + cosine;
+    x[0][1] = unit[0] * unit[1] * (1 - cosine) + unit[2] * sine;
+    x[0][2] = unit[0] * unit[2] * (1 - cosine) - unit[1] * sine;
+    x[0][3] = 0;
+
+    x[1][0] = unit[0] * unit[1] * (1 - cosine) - unit[2] * sine;
+    x[1][1] = unit[1] * unit[1] * (1 - cosine) + cosine;
+    x[1][2] = unit[1] * unit[2] * (1 - cosine) + unit[0] * sine;
+    x[1][3] = 0;
+
+    x[2][0] = unit[0] * unit[2] * (1 - cosine) + unit[1] * sine;
+    x[2][1] = unit[1] * unit[2] * (1 - cosine) - unit[0] * sine;
+    x[2][2] = unit[2] * unit[2] * (1 - cosine) + cosine;
+    x[2][3] = 0;
+
+    x[3][0] = 0;
+    x[3][1] = 0;
+    x[3][2] = 0;
+    x[3][3] = 1;
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix44<T> &
+Matrix44<T>::rotate (const Vec3<S> &r)
+{
+    S cos_rz, sin_rz, cos_ry, sin_ry, cos_rx, sin_rx;
+    S m00, m01, m02;
+    S m10, m11, m12;
+    S m20, m21, m22;
+
+    cos_rz = Math<S>::cos (r[2]);
+    cos_ry = Math<S>::cos (r[1]);
+    cos_rx = Math<S>::cos (r[0]);
+    
+    sin_rz = Math<S>::sin (r[2]);
+    sin_ry = Math<S>::sin (r[1]);
+    sin_rx = Math<S>::sin (r[0]);
+
+    m00 =  cos_rz *  cos_ry;
+    m01 =  sin_rz *  cos_ry;
+    m02 = -sin_ry;
+    m10 = -sin_rz *  cos_rx + cos_rz * sin_ry * sin_rx;
+    m11 =  cos_rz *  cos_rx + sin_rz * sin_ry * sin_rx;
+    m12 =  cos_ry *  sin_rx;
+    m20 = -sin_rz * -sin_rx + cos_rz * sin_ry * cos_rx;
+    m21 =  cos_rz * -sin_rx + sin_rz * sin_ry * cos_rx;
+    m22 =  cos_ry *  cos_rx;
+
+    Matrix44<T> P (*this);
+
+    x[0][0] = P[0][0] * m00 + P[1][0] * m01 + P[2][0] * m02;
+    x[0][1] = P[0][1] * m00 + P[1][1] * m01 + P[2][1] * m02;
+    x[0][2] = P[0][2] * m00 + P[1][2] * m01 + P[2][2] * m02;
+    x[0][3] = P[0][3] * m00 + P[1][3] * m01 + P[2][3] * m02;
+
+    x[1][0] = P[0][0] * m10 + P[1][0] * m11 + P[2][0] * m12;
+    x[1][1] = P[0][1] * m10 + P[1][1] * m11 + P[2][1] * m12;
+    x[1][2] = P[0][2] * m10 + P[1][2] * m11 + P[2][2] * m12;
+    x[1][3] = P[0][3] * m10 + P[1][3] * m11 + P[2][3] * m12;
+
+    x[2][0] = P[0][0] * m20 + P[1][0] * m21 + P[2][0] * m22;
+    x[2][1] = P[0][1] * m20 + P[1][1] * m21 + P[2][1] * m22;
+    x[2][2] = P[0][2] * m20 + P[1][2] * m21 + P[2][2] * m22;
+    x[2][3] = P[0][3] * m20 + P[1][3] * m21 + P[2][3] * m22;
+
+    return *this;
+}
+
+template <class T>
+const Matrix44<T> &
+Matrix44<T>::setScale (T s)
+{
+    memset (x, 0, sizeof (x));
+    x[0][0] = s;
+    x[1][1] = s;
+    x[2][2] = s;
+    x[3][3] = 1;
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix44<T> &
+Matrix44<T>::setScale (const Vec3<S> &s)
+{
+    memset (x, 0, sizeof (x));
+    x[0][0] = s[0];
+    x[1][1] = s[1];
+    x[2][2] = s[2];
+    x[3][3] = 1;
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix44<T> &
+Matrix44<T>::scale (const Vec3<S> &s)
+{
+    x[0][0] *= s[0];
+    x[0][1] *= s[0];
+    x[0][2] *= s[0];
+    x[0][3] *= s[0];
+
+    x[1][0] *= s[1];
+    x[1][1] *= s[1];
+    x[1][2] *= s[1];
+    x[1][3] *= s[1];
+
+    x[2][0] *= s[2];
+    x[2][1] *= s[2];
+    x[2][2] *= s[2];
+    x[2][3] *= s[2];
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix44<T> &
+Matrix44<T>::setTranslation (const Vec3<S> &t)
+{
+    x[0][0] = 1;
+    x[0][1] = 0;
+    x[0][2] = 0;
+    x[0][3] = 0;
+
+    x[1][0] = 0;
+    x[1][1] = 1;
+    x[1][2] = 0;
+    x[1][3] = 0;
+
+    x[2][0] = 0;
+    x[2][1] = 0;
+    x[2][2] = 1;
+    x[2][3] = 0;
+
+    x[3][0] = t[0];
+    x[3][1] = t[1];
+    x[3][2] = t[2];
+    x[3][3] = 1;
+
+    return *this;
+}
+
+template <class T>
+inline const Vec3<T>
+Matrix44<T>::translation () const
+{
+    return Vec3<T> (x[3][0], x[3][1], x[3][2]);
+}
+
+template <class T>
+template <class S>
+const Matrix44<T> &
+Matrix44<T>::translate (const Vec3<S> &t)
+{
+    x[3][0] += t[0] * x[0][0] + t[1] * x[1][0] + t[2] * x[2][0];
+    x[3][1] += t[0] * x[0][1] + t[1] * x[1][1] + t[2] * x[2][1];
+    x[3][2] += t[0] * x[0][2] + t[1] * x[1][2] + t[2] * x[2][2];
+    x[3][3] += t[0] * x[0][3] + t[1] * x[1][3] + t[2] * x[2][3];
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix44<T> &
+Matrix44<T>::setShear (const Vec3<S> &h)
+{
+    x[0][0] = 1;
+    x[0][1] = 0;
+    x[0][2] = 0;
+    x[0][3] = 0;
+
+    x[1][0] = h[0];
+    x[1][1] = 1;
+    x[1][2] = 0;
+    x[1][3] = 0;
+
+    x[2][0] = h[1];
+    x[2][1] = h[2];
+    x[2][2] = 1;
+    x[2][3] = 0;
+
+    x[3][0] = 0;
+    x[3][1] = 0;
+    x[3][2] = 0;
+    x[3][3] = 1;
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix44<T> &
+Matrix44<T>::setShear (const Shear6<S> &h)
+{
+    x[0][0] = 1;
+    x[0][1] = h.yx;
+    x[0][2] = h.zx;
+    x[0][3] = 0;
+
+    x[1][0] = h.xy;
+    x[1][1] = 1;
+    x[1][2] = h.zy;
+    x[1][3] = 0;
+
+    x[2][0] = h.xz;
+    x[2][1] = h.yz;
+    x[2][2] = 1;
+    x[2][3] = 0;
+
+    x[3][0] = 0;
+    x[3][1] = 0;
+    x[3][2] = 0;
+    x[3][3] = 1;
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix44<T> &
+Matrix44<T>::shear (const Vec3<S> &h)
+{
+    //
+    // In this case, we don't need a temp. copy of the matrix 
+    // because we never use a value on the RHS after we've 
+    // changed it on the LHS.
+    // 
+
+    for (int i=0; i < 4; i++)
+    {
+        x[2][i] += h[1] * x[0][i] + h[2] * x[1][i];
+        x[1][i] += h[0] * x[0][i];
+    }
+
+    return *this;
+}
+
+template <class T>
+template <class S>
+const Matrix44<T> &
+Matrix44<T>::shear (const Shear6<S> &h)
+{
+    Matrix44<T> P (*this);
+
+    for (int i=0; i < 4; i++)
+    {
+        x[0][i] = P[0][i] + h.yx * P[1][i] + h.zx * P[2][i];
+        x[1][i] = h.xy * P[0][i] + P[1][i] + h.zy * P[2][i];
+        x[2][i] = h.xz * P[0][i] + h.yz * P[1][i] + P[2][i];
+    }
+
+    return *this;
+}
+
+
+//--------------------------------
+// Implementation of stream output
+//--------------------------------
+
+template <class T>
+std::ostream &
+operator << (std::ostream &s, const Matrix33<T> &m)
+{
+    std::ios_base::fmtflags oldFlags = s.flags();
+    int width;
+
+    if (s.flags() & std::ios_base::fixed)
+    {
+        s.setf (std::ios_base::showpoint);
+        width = s.precision() + 5;
+    }
+    else
+    {
+        s.setf (std::ios_base::scientific);
+        s.setf (std::ios_base::showpoint);
+        width = s.precision() + 8;
+    }
+
+    s << "(" << std::setw (width) << m[0][0] <<
+         " " << std::setw (width) << m[0][1] <<
+         " " << std::setw (width) << m[0][2] << "\n" <<
+
+         " " << std::setw (width) << m[1][0] <<
+         " " << std::setw (width) << m[1][1] <<
+         " " << std::setw (width) << m[1][2] << "\n" <<
+
+         " " << std::setw (width) << m[2][0] <<
+         " " << std::setw (width) << m[2][1] <<
+         " " << std::setw (width) << m[2][2] << ")\n";
+
+    s.flags (oldFlags);
+    return s;
+}
+
+template <class T>
+std::ostream &
+operator << (std::ostream &s, const Matrix44<T> &m)
+{
+    std::ios_base::fmtflags oldFlags = s.flags();
+    int width;
+
+    if (s.flags() & std::ios_base::fixed)
+    {
+        s.setf (std::ios_base::showpoint);
+        width = s.precision() + 5;
+    }
+    else
+    {
+        s.setf (std::ios_base::scientific);
+        s.setf (std::ios_base::showpoint);
+        width = s.precision() + 8;
+    }
+
+    s << "(" << std::setw (width) << m[0][0] <<
+         " " << std::setw (width) << m[0][1] <<
+         " " << std::setw (width) << m[0][2] <<
+         " " << std::setw (width) << m[0][3] << "\n" <<
+
+         " " << std::setw (width) << m[1][0] <<
+         " " << std::setw (width) << m[1][1] <<
+         " " << std::setw (width) << m[1][2] <<
+         " " << std::setw (width) << m[1][3] << "\n" <<
+
+         " " << std::setw (width) << m[2][0] <<
+         " " << std::setw (width) << m[2][1] <<
+         " " << std::setw (width) << m[2][2] <<
+         " " << std::setw (width) << m[2][3] << "\n" <<
+
+         " " << std::setw (width) << m[3][0] <<
+         " " << std::setw (width) << m[3][1] <<
+         " " << std::setw (width) << m[3][2] <<
+         " " << std::setw (width) << m[3][3] << ")\n";
+
+    s.flags (oldFlags);
+    return s;
+}
+
+
+//---------------------------------------------------------------
+// Implementation of vector-times-matrix multiplication operators
+//---------------------------------------------------------------
+
+template <class S, class T>
+inline const Vec2<S> &
+operator *= (Vec2<S> &v, const Matrix33<T> &m)
+{
+    S x = S(v.x * m[0][0] + v.y * m[1][0] + m[2][0]);
+    S y = S(v.x * m[0][1] + v.y * m[1][1] + m[2][1]);
+    S w = S(v.x * m[0][2] + v.y * m[1][2] + m[2][2]);
+
+    v.x = x / w;
+    v.y = y / w;
+
+    return v;
+}
+
+template <class S, class T>
+inline Vec2<S>
+operator * (const Vec2<S> &v, const Matrix33<T> &m)
+{
+    S x = S(v.x * m[0][0] + v.y * m[1][0] + m[2][0]);
+    S y = S(v.x * m[0][1] + v.y * m[1][1] + m[2][1]);
+    S w = S(v.x * m[0][2] + v.y * m[1][2] + m[2][2]);
+
+    return Vec2<S> (x / w, y / w);
+}
+
+
+template <class S, class T>
+inline const Vec3<S> &
+operator *= (Vec3<S> &v, const Matrix33<T> &m)
+{
+    S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0]);
+    S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1]);
+    S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2]);
+
+    v.x = x;
+    v.y = y;
+    v.z = z;
+
+    return v;
+}
+
+template <class S, class T>
+inline Vec3<S>
+operator * (const Vec3<S> &v, const Matrix33<T> &m)
+{
+    S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0]);
+    S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1]);
+    S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2]);
+
+    return Vec3<S> (x, y, z);
+}
+
+
+template <class S, class T>
+inline const Vec3<S> &
+operator *= (Vec3<S> &v, const Matrix44<T> &m)
+{
+    S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + m[3][0]);
+    S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + m[3][1]);
+    S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + m[3][2]);
+    S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + m[3][3]);
+
+    v.x = x / w;
+    v.y = y / w;
+    v.z = z / w;
+
+    return v;
+}
+
+template <class S, class T>
+inline Vec3<S>
+operator * (const Vec3<S> &v, const Matrix44<T> &m)
+{
+    S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + m[3][0]);
+    S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + m[3][1]);
+    S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + m[3][2]);
+    S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + m[3][3]);
+
+    return Vec3<S> (x / w, y / w, z / w);
+}
+
+
+template <class S, class T>
+inline const Vec4<S> &
+operator *= (Vec4<S> &v, const Matrix44<T> &m)
+{
+    S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + v.w * m[3][0]);
+    S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + v.w * m[3][1]);
+    S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + v.w * m[3][2]);
+    S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + v.w * m[3][3]);
+
+    v.x = x;
+    v.y = y;
+    v.z = z;
+    v.w = w;
+
+    return v;
+}
+
+template <class S, class T>
+inline Vec4<S>
+operator * (const Vec4<S> &v, const Matrix44<T> &m)
+{
+    S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + v.w * m[3][0]);
+    S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + v.w * m[3][1]);
+    S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + v.w * m[3][2]);
+    S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + v.w * m[3][3]);
+
+    return Vec4<S> (x, y, z, w);
+}
+
+} // namespace Imath
+
+
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp b/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp
new file mode 100644 (file)
index 0000000..8896c8d
--- /dev/null
@@ -0,0 +1,1251 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+//----------------------------------------------------------------------------
+//
+//     Implementation of non-template items declared in ImathMatrixAlgo.h
+//
+//----------------------------------------------------------------------------
+
+#include "ImathMatrixAlgo.h"
+#include <cmath>
+
+#if defined(OPENEXR_DLL)
+    #define EXPORT_CONST __declspec(dllexport)
+#else
+    #define EXPORT_CONST const
+#endif
+
+namespace Imath {
+
+EXPORT_CONST M33f identity33f ( 1, 0, 0,
+                               0, 1, 0,
+                               0, 0, 1);
+
+EXPORT_CONST M33d identity33d ( 1, 0, 0,
+                               0, 1, 0,
+                               0, 0, 1);
+
+EXPORT_CONST M44f identity44f ( 1, 0, 0, 0,
+                               0, 1, 0, 0,
+                               0, 0, 1, 0,
+                               0, 0, 0, 1);
+
+EXPORT_CONST M44d identity44d ( 1, 0, 0, 0,
+                               0, 1, 0, 0,
+                               0, 0, 1, 0,
+                               0, 0, 0, 1);
+
+namespace
+{
+
+class KahanSum
+{
+public:
+    KahanSum() : _total(0), _correction(0) {}
+
+    void
+    operator+= (const double val)
+    {
+        const double y = val - _correction;
+        const double t = _total + y;
+        _correction = (t - _total) - y;
+        _total = t;
+    }
+
+    double get() const
+    {
+        return _total;
+    }
+
+private:
+    double _total;
+    double _correction;
+};
+
+}
+
+template <typename T>
+M44d
+procrustesRotationAndTranslation (const Vec3<T>* A, const Vec3<T>* B, const T* weights, const size_t numPoints, const bool doScale)
+{
+    if (numPoints == 0)
+        return M44d();
+
+    // Always do the accumulation in double precision:
+    V3d Acenter (0.0);
+    V3d Bcenter (0.0);
+    double weightsSum = 0.0;
+
+    if (weights == 0)
+    {
+        for (int i = 0; i < numPoints; ++i)
+        {
+            Acenter += (V3d) A[i];
+            Bcenter += (V3d) B[i];
+        }
+        weightsSum = (double) numPoints;
+    }
+    else
+    {
+        for (int i = 0; i < numPoints; ++i)
+        {
+            const double w = weights[i];
+            weightsSum += w;
+
+            Acenter += w * (V3d) A[i];
+            Bcenter += w * (V3d) B[i];
+        }
+    }
+
+    if (weightsSum == 0)
+        return M44d();
+
+    Acenter /= weightsSum;
+    Bcenter /= weightsSum;
+
+    //
+    // Find Q such that |Q*A - B|  (actually A-Acenter and B-Bcenter, weighted)
+    // is minimized in the least squares sense.
+    // From Golub/Van Loan, p.601
+    //
+    // A,B are 3xn
+    // Let C = B A^T   (where A is 3xn and B^T is nx3, so C is 3x3)
+    // Compute the SVD: C = U D V^T  (U,V rotations, D diagonal).
+    // Throw away the D part, and return Q = U V^T
+    M33d C (0.0);
+    if (weights == 0)
+    {
+        for (int i = 0; i < numPoints; ++i)
+            C += outerProduct ((V3d) B[i] - Bcenter, (V3d) A[i] - Acenter);
+    }
+    else
+    {
+        for (int i = 0; i < numPoints; ++i)
+        {
+            const double w = weights[i];
+            C += outerProduct (w * ((V3d) B[i] - Bcenter), (V3d) A[i] - Acenter);
+        }
+    }
+
+    M33d U, V;
+    V3d S;
+    jacobiSVD (C, U, S, V, Imath::limits<double>::epsilon(), true);
+
+    // We want Q.transposed() here since we are going to be using it in the
+    // Imath style (multiplying vectors on the right, v' = v*A^T):
+    const M33d Qt = V * U.transposed();
+
+    double s = 1.0;
+    if (doScale && numPoints > 1)
+    {
+        // Finding a uniform scale: let us assume the Q is completely fixed
+        // at this point (solving for both simultaneously seems much harder).  
+        // We are trying to compute (again, per Golub and van Loan)
+        //    min || s*A*Q - B ||_F
+        // Notice that we've jammed a uniform scale in front of the Q.  
+        // Now, the Frobenius norm (the least squares norm over matrices)
+        // has the neat property that it is equivalent to minimizing the trace
+        // of M^T*M (see your friendly neighborhood linear algebra text for a
+        // derivation).  Thus, we can expand this out as
+        //   min tr (s*A*Q - B)^T*(s*A*Q - B)
+        // = min tr(Q^T*A^T*s*s*A*Q) + tr(B^T*B) - 2*tr(Q^T*A^T*s*B)  by linearity of the trace
+        // = min s^2 tr(A^T*A) + tr(B^T*B) - 2*s*tr(Q^T*A^T*B)        using the fact that the trace is invariant
+        //                                                            under similarity transforms Q*M*Q^T
+        // If we differentiate w.r.t. s and set this to 0, we get
+        // 0 = 2*s*tr(A^T*A) - 2*tr(Q^T*A^T*B)
+        // so
+        // 2*s*tr(A^T*A) = 2*s*tr(Q^T*A^T*B)
+        // s = tr(Q^T*A^T*B) / tr(A^T*A)
+
+        KahanSum traceATA;
+        if (weights == 0)
+        {
+            for (int i = 0; i < numPoints; ++i)
+                traceATA += ((V3d) A[i] - Acenter).length2();
+        }
+        else
+        {
+            for (int i = 0; i < numPoints; ++i)
+                traceATA += ((double) weights[i]) * ((V3d) A[i] - Acenter).length2();
+        }
+
+        KahanSum traceBATQ;
+        for (int i = 0; i < 3; ++i)
+            for (int j = 0; j < 3; ++j)
+                traceBATQ += Qt[j][i] * C[i][j];
+
+        s = traceBATQ.get() / traceATA.get();
+    }
+
+    // Q is the rotation part of what we want to return.
+    // The entire transform is:
+    //    (translate origin to Bcenter) * Q * (translate Acenter to origin)
+    //                last                                first
+    // The effect of this on a point is:
+    //    (translate origin to Bcenter) * Q * (translate Acenter to origin) * point
+    //  = (translate origin to Bcenter) * Q * (-Acenter + point)
+    //  = (translate origin to Bcenter) * (-Q*Acenter + Q*point)
+    //  = (translate origin to Bcenter) * (translate Q*Acenter to origin) * Q*point
+    //  = (translate Q*Acenter to Bcenter) * Q*point
+    // So what we want to return is:
+    //    (translate Q*Acenter to Bcenter) * Q
+    //
+    // In block form, this is:
+    //   [ 1 0 0  | ] [       0 ] [ 1 0 0  |  ]   [ 1 0 0  | ] [           |   ]   [                 ]
+    //   [ 0 1 0 tb ] [  s*Q  0 ] [ 0 1 0 -ta ] = [ 0 1 0 tb ] [  s*Q  -s*Q*ta ] = [   Q   tb-s*Q*ta ]
+    //   [ 0 0 1  | ] [       0 ] [ 0 0 1  |  ]   [ 0 0 1  | ] [           |   ]   [                 ]
+    //   [ 0 0 0  1 ] [ 0 0 0 1 ] [ 0 0 0  1  ]   [ 0 0 0  1 ] [ 0 0 0     1   ]   [ 0 0 0    1      ]
+    // (ofc the whole thing is transposed for Imath).  
+    const V3d translate = Bcenter - s*Acenter*Qt;
+
+    return M44d (s*Qt.x[0][0], s*Qt.x[0][1], s*Qt.x[0][2], T(0),
+                 s*Qt.x[1][0], s*Qt.x[1][1], s*Qt.x[1][2], T(0),
+                 s*Qt.x[2][0], s*Qt.x[2][1], s*Qt.x[2][2], T(0),
+                 translate.x, translate.y, translate.z, T(1));
+} // procrustesRotationAndTranslation
+
+template <typename T>
+M44d
+procrustesRotationAndTranslation (const Vec3<T>* A, const Vec3<T>* B, const size_t numPoints, const bool doScale)
+{
+    return procrustesRotationAndTranslation (A, B, (const T*) 0, numPoints, doScale);
+} // procrustesRotationAndTranslation
+
+
+template M44d procrustesRotationAndTranslation (const V3d* from, const V3d* to, const size_t numPoints, const bool doScale);
+template M44d procrustesRotationAndTranslation (const V3f* from, const V3f* to, const size_t numPoints, const bool doScale);
+template M44d procrustesRotationAndTranslation (const V3d* from, const V3d* to, const double* weights, const size_t numPoints, const bool doScale);
+template M44d procrustesRotationAndTranslation (const V3f* from, const V3f* to, const float* weights, const size_t numPoints, const bool doScale);
+
+
+namespace
+{
+
+// Applies the 2x2 Jacobi rotation
+//   [  c s 0 ]    [ 1  0 0 ]    [  c 0 s ]
+//   [ -s c 0 ] or [ 0  c s ] or [  0 1 0 ]
+//   [  0 0 1 ]    [ 0 -s c ]    [ -s 0 c ]
+// from the right; that is, computes
+//   J * A
+// for the Jacobi rotation J and the matrix A.  This is efficient because we
+// only need to touch exactly the 2 columns that are affected, so we never
+// need to explicitly construct the J matrix.  
+template <typename T, int j, int k>
+void
+jacobiRotateRight (Imath::Matrix33<T>& A,
+                   const T c,
+                   const T s)
+{
+    for (int i = 0; i < 3; ++i)
+    {
+        const T tau1 = A[i][j];
+        const T tau2 = A[i][k];
+        A[i][j] = c * tau1 - s * tau2;
+        A[i][k] = s * tau1 + c * tau2;
+    }
+}
+
+template <typename T>
+void
+jacobiRotateRight (Imath::Matrix44<T>& A,
+                   const int j,
+                   const int k,
+                   const T c,
+                   const T s)
+{
+    for (int i = 0; i < 4; ++i)
+    {
+        const T tau1 = A[i][j];
+        const T tau2 = A[i][k];
+        A[i][j] = c * tau1 - s * tau2;
+        A[i][k] = s * tau1 + c * tau2;
+    }
+}
+
+// This routine solves the 2x2 SVD:
+//     [  c1   s1 ] [ w   x ] [  c2  s2 ]   [ d1    0 ]
+//     [          ] [       ] [         ] = [         ]
+//     [ -s1   c1 ] [ y   z ] [ -s2  c2 ]   [  0   d2 ]
+// where
+//      [ w   x ]
+//  A = [       ]
+//      [ y   z ]
+// is the subset of A consisting of the [j,k] entries, A([j k], [j k]) in
+// Matlab parlance.  The method is the 'USVD' algorithm described in the
+// following paper:
+//    'Computation of the Singular Value Decomposition using Mesh-Connected Processors'
+//    by Richard P. Brent, Franklin T. Luk, and Charles Van Loan
+// It breaks the computation into two steps: the first symmetrizes the matrix,
+// and the second diagonalizes the symmetric matrix.  
+template <typename T, int j, int k, int l>
+bool
+twoSidedJacobiRotation (Imath::Matrix33<T>& A,
+                        Imath::Matrix33<T>& U,
+                        Imath::Matrix33<T>& V,
+                        const T tol)
+{
+    // Load everything into local variables to make things easier on the
+    // optimizer:
+    const T w = A[j][j];
+    const T x = A[j][k];
+    const T y = A[k][j];
+    const T z = A[k][k];
+
+    // We will keep track of whether we're actually performing any rotations,
+    // since if the matrix is already diagonal we'll end up with the identity
+    // as our Jacobi rotation and we can short-circuit.
+    bool changed = false;
+
+    // The first step is to symmetrize the 2x2 matrix,
+    //   [ c  s ]^T [ w x ] = [ p q ]
+    //   [ -s c ]   [ y z ]   [ q r ]
+    T mu_1 = w + z;
+    T mu_2 = x - y;
+
+    T c, s;
+    if (std::abs(mu_2) <= tol*std::abs(mu_1))  // Already symmetric (to tolerance)
+    {                                          // Note that the <= is important here
+        c = T(1);                              // because we want to bypass the computation
+        s = T(0);                              // of rho if mu_1 = mu_2 = 0.
+
+        const T p = w;
+        const T r = z;
+        mu_1 = r - p;
+        mu_2 = x + y;
+    }
+    else
+    {
+        const T rho = mu_1 / mu_2;
+        s = T(1) / std::sqrt (T(1) + rho*rho);  // TODO is there a native inverse square root function?
+        if (rho < 0)
+            s = -s;
+        c = s * rho;
+
+        mu_1 = s * (x + y) + c * (z - w);   // = r - p
+        mu_2 = T(2) * (c * x - s * z);      // = 2*q
+
+        changed = true;
+    }
+
+    // The second stage diagonalizes,
+    //   [ c2   s2 ]^T [ p q ] [ c2  s2 ]  = [ d1   0 ]
+    //   [ -s2  c2 ]   [ q r ] [ -s2 c2 ]    [  0  d2 ]
+    T c_2, s_2;
+    if (std::abs(mu_2) <= tol*std::abs(mu_1))
+    {
+       c_2 = T(1);
+       s_2 = T(0);
+    }
+    else
+    {
+        const T rho_2 = mu_1 / mu_2;
+        T t_2 = T(1) / (std::abs(rho_2) + std::sqrt(1 + rho_2*rho_2));
+        if (rho_2 < 0)
+            t_2 = -t_2;
+        c_2 = T(1) / std::sqrt (T(1) + t_2*t_2);
+        s_2 = c_2 * t_2;
+
+        changed = true;
+    }
+
+    const T c_1 = c_2 * c - s_2 * s;
+    const T s_1 = s_2 * c + c_2 * s;
+
+    if (!changed)
+    {
+        // We've decided that the off-diagonal entries are already small
+        // enough, so we'll set them to zero.  This actually appears to result
+        // in smaller errors than leaving them be, possibly because it prevents
+        // us from trying to do extra rotations later that we don't need.
+        A[k][j] = 0;
+        A[j][k] = 0;
+        return false;
+    }
+
+    const T d_1 = c_1*(w*c_2 - x*s_2) - s_1*(y*c_2 - z*s_2);
+    const T d_2 = s_1*(w*s_2 + x*c_2) + c_1*(y*s_2 + z*c_2);
+
+    // For the entries we just zeroed out, we'll just set them to 0, since
+    // they should be 0 up to machine precision.  
+    A[j][j] = d_1;
+    A[k][k] = d_2;
+    A[k][j] = 0;
+    A[j][k] = 0;
+
+    // Rotate the entries that _weren't_ involved in the 2x2 SVD:
+    {
+        // Rotate on the left by
+        //    [  c1 s1 0 ]^T      [  c1 0 s1 ]^T      [ 1   0  0 ]^T
+        //    [ -s1 c1 0 ]    or  [   0 1  0 ]    or  [ 0  c1 s1 ]
+        //    [   0  0 1 ]        [ -s1 0 c1 ]        [ 0 -s1 c1 ]
+        // This has the effect of adding the (weighted) ith and jth _rows_ to
+        // each other.  
+        const T tau1 = A[j][l];
+        const T tau2 = A[k][l];
+        A[j][l] = c_1 * tau1 - s_1 * tau2;
+        A[k][l] = s_1 * tau1 + c_1 * tau2;
+    }
+
+    {
+        // Rotate on the right by
+        //    [  c2 s2 0 ]      [  c2 0 s2 ]      [ 1   0  0 ]
+        //    [ -s2 c2 0 ]  or  [   0 1  0 ]  or  [ 0  c2 s2 ]
+        //    [   0  0 1 ]      [ -s2 0 c2 ]      [ 0 -s2 c2 ]
+        // This has the effect of adding the (weighted) ith and jth _columns_ to
+        // each other.  
+        const T tau1 = A[l][j];
+        const T tau2 = A[l][k];
+        A[l][j] = c_2 * tau1 - s_2 * tau2;
+        A[l][k] = s_2 * tau1 + c_2 * tau2;
+    }
+
+    // Now apply the rotations to U and V:
+    // Remember that we have 
+    //    R1^T * A * R2 = D
+    // This is in the 2x2 case, but after doing a bunch of these
+    // we will get something like this for the 3x3 case:
+    //   ... R1b^T * R1a^T * A * R2a * R2b * ... = D
+    //   -----------------       ---------------
+    //        = U^T                    = V
+    // So,
+    //   U = R1a * R1b * ...
+    //   V = R2a * R2b * ...
+    jacobiRotateRight<T, j, k> (U, c_1, s_1);
+    jacobiRotateRight<T, j, k> (V, c_2, s_2);
+
+    return true;
+}
+
+template <typename T>
+bool
+twoSidedJacobiRotation (Imath::Matrix44<T>& A,
+                        int j,
+                        int k,
+                        Imath::Matrix44<T>& U,
+                        Imath::Matrix44<T>& V,
+                        const T tol)
+{
+    // Load everything into local variables to make things easier on the
+    // optimizer:
+    const T w = A[j][j];
+    const T x = A[j][k];
+    const T y = A[k][j];
+    const T z = A[k][k];
+
+    // We will keep track of whether we're actually performing any rotations,
+    // since if the matrix is already diagonal we'll end up with the identity
+    // as our Jacobi rotation and we can short-circuit.
+    bool changed = false;
+
+    // The first step is to symmetrize the 2x2 matrix,
+    //   [ c  s ]^T [ w x ] = [ p q ]
+    //   [ -s c ]   [ y z ]   [ q r ]
+    T mu_1 = w + z;
+    T mu_2 = x - y;
+
+    T c, s;
+    if (std::abs(mu_2) <= tol*std::abs(mu_1))  // Already symmetric (to tolerance)
+    {                                          // Note that the <= is important here
+        c = T(1);                              // because we want to bypass the computation
+        s = T(0);                              // of rho if mu_1 = mu_2 = 0.
+
+        const T p = w;
+        const T r = z;
+        mu_1 = r - p;
+        mu_2 = x + y;
+    }
+    else
+    {
+        const T rho = mu_1 / mu_2;
+        s = T(1) / std::sqrt (T(1) + rho*rho);  // TODO is there a native inverse square root function?
+        if (rho < 0)
+            s = -s;
+        c = s * rho;
+
+        mu_1 = s * (x + y) + c * (z - w);   // = r - p
+        mu_2 = T(2) * (c * x - s * z);      // = 2*q
+
+        changed = true;
+    }
+
+    // The second stage diagonalizes,
+    //   [ c2   s2 ]^T [ p q ] [ c2  s2 ]  = [ d1   0 ]
+    //   [ -s2  c2 ]   [ q r ] [ -s2 c2 ]    [  0  d2 ]
+    T c_2, s_2;
+    if (std::abs(mu_2) <= tol*std::abs(mu_1))
+    {
+       c_2 = T(1);
+       s_2 = T(0);
+    }
+    else
+    {
+        const T rho_2 = mu_1 / mu_2;
+        T t_2 = T(1) / (std::abs(rho_2) + std::sqrt(1 + rho_2*rho_2));
+        if (rho_2 < 0)
+            t_2 = -t_2;
+        c_2 = T(1) / std::sqrt (T(1) + t_2*t_2);
+        s_2 = c_2 * t_2;
+
+        changed = true;
+    }
+
+    const T c_1 = c_2 * c - s_2 * s;
+    const T s_1 = s_2 * c + c_2 * s;
+
+    if (!changed)
+    {
+        // We've decided that the off-diagonal entries are already small
+        // enough, so we'll set them to zero.  This actually appears to result
+        // in smaller errors than leaving them be, possibly because it prevents
+        // us from trying to do extra rotations later that we don't need.
+        A[k][j] = 0;
+        A[j][k] = 0;
+        return false;
+    }
+
+    const T d_1 = c_1*(w*c_2 - x*s_2) - s_1*(y*c_2 - z*s_2);
+    const T d_2 = s_1*(w*s_2 + x*c_2) + c_1*(y*s_2 + z*c_2);
+
+    // For the entries we just zeroed out, we'll just set them to 0, since
+    // they should be 0 up to machine precision.  
+    A[j][j] = d_1;
+    A[k][k] = d_2;
+    A[k][j] = 0;
+    A[j][k] = 0;
+
+    // Rotate the entries that _weren't_ involved in the 2x2 SVD:
+    for (int l = 0; l < 4; ++l)
+    {
+        if (l == j || l == k)
+            continue;
+
+        // Rotate on the left by
+        //    [ 1               ]
+        //    [   .             ]
+        //    [     c2   s2     ]  j
+        //    [        1        ]
+        //    [    -s2   c2     ]  k
+        //    [             .   ]
+        //    [               1 ]
+        //          j    k
+        //
+        // This has the effect of adding the (weighted) ith and jth _rows_ to
+        // each other.  
+        const T tau1 = A[j][l];
+        const T tau2 = A[k][l];
+        A[j][l] = c_1 * tau1 - s_1 * tau2;
+        A[k][l] = s_1 * tau1 + c_1 * tau2;
+    }
+
+    for (int l = 0; l < 4; ++l)
+    {
+        // We set the A[j/k][j/k] entries already
+        if (l == j || l == k)
+            continue;
+
+        // Rotate on the right by
+        //    [ 1               ]
+        //    [   .             ]
+        //    [     c2   s2     ]  j
+        //    [        1        ]
+        //    [    -s2   c2     ]  k
+        //    [             .   ]
+        //    [               1 ]
+        //          j    k
+        //
+        // This has the effect of adding the (weighted) ith and jth _columns_ to
+        // each other.  
+        const T tau1 = A[l][j];
+        const T tau2 = A[l][k];
+        A[l][j] = c_2 * tau1 - s_2 * tau2;
+        A[l][k] = s_2 * tau1 + c_2 * tau2;
+    }
+
+    // Now apply the rotations to U and V:
+    // Remember that we have 
+    //    R1^T * A * R2 = D
+    // This is in the 2x2 case, but after doing a bunch of these
+    // we will get something like this for the 3x3 case:
+    //   ... R1b^T * R1a^T * A * R2a * R2b * ... = D
+    //   -----------------       ---------------
+    //        = U^T                    = V
+    // So,
+    //   U = R1a * R1b * ...
+    //   V = R2a * R2b * ...
+    jacobiRotateRight (U, j, k, c_1, s_1);
+    jacobiRotateRight (V, j, k, c_2, s_2);
+
+    return true;
+}
+
+template <typename T>
+void
+swapColumns (Imath::Matrix33<T>& A, int j, int k)
+{
+    for (int i = 0; i < 3; ++i)
+        std::swap (A[i][j], A[i][k]);
+}
+
+template <typename T>
+T
+maxOffDiag (const Imath::Matrix33<T>& A)
+{
+    T result = 0;
+    result = std::max (result, std::abs (A[0][1]));
+    result = std::max (result, std::abs (A[0][2]));
+    result = std::max (result, std::abs (A[1][0]));
+    result = std::max (result, std::abs (A[1][2]));
+    result = std::max (result, std::abs (A[2][0]));
+    result = std::max (result, std::abs (A[2][1]));
+    return result;
+}
+
+template <typename T>
+T
+maxOffDiag (const Imath::Matrix44<T>& A)
+{
+    T result = 0;
+    for (int i = 0; i < 4; ++i)
+    {
+        for (int j = 0; j < 4; ++j)
+        {
+            if (i != j)
+                result = std::max (result, std::abs (A[i][j]));
+        }
+    }
+
+    return result;
+}
+
+template <typename T>
+void
+twoSidedJacobiSVD (Imath::Matrix33<T> A,
+                   Imath::Matrix33<T>& U,
+                   Imath::Vec3<T>& S,
+                   Imath::Matrix33<T>& V,
+                   const T tol,
+                   const bool forcePositiveDeterminant)
+{
+    // The two-sided Jacobi SVD works by repeatedly zeroing out
+    // off-diagonal entries of the matrix, 2 at a time.  Basically,
+    // we can take our 3x3 matrix,
+    //    [* * *]
+    //    [* * *]
+    //    [* * *]
+    // and use a pair of orthogonal transforms to zero out, say, the
+    // pair of entries (0, 1) and (1, 0):
+    //  [ c1 s1  ] [* * *] [ c2 s2  ]   [*   *]
+    //  [-s1 c1  ] [* * *] [-s2 c2  ] = [  * *]
+    //  [       1] [* * *] [       1]   [* * *]
+    // When we go to zero out the next pair of entries (say, (0, 2) and (2, 0))
+    // then we don't expect those entries to stay 0:
+    //  [ c1 s1  ] [*   *] [ c2 s2  ]   [* *  ]
+    //  [-s1 c1  ] [  * *] [-s2 c2  ] = [* * *]
+    //  [       1] [* * *] [       1]   [  * *]
+    // However, if we keep doing this, we'll find that the off-diagonal entries
+    // converge to 0 fairly quickly (convergence should be roughly cubic).  The 
+    // result is a diagonal A matrix and a bunch of orthogonal transforms:
+    //               [* * *]                [*    ]
+    //  L1 L2 ... Ln [* * *] Rn ... R2 R1 = [  *  ]
+    //               [* * *]                [    *]
+    //  ------------ ------- ------------   -------
+    //      U^T         A         V            S
+    // This turns out to be highly accurate because (1) orthogonal transforms
+    // are extremely stable to compute and apply (this is why QR factorization
+    // works so well, FWIW) and because (2) by applying everything to the original
+    // matrix A instead of computing (A^T * A) we avoid any precision loss that
+    // would result from that.  
+    U.makeIdentity();
+    V.makeIdentity();
+
+    const int maxIter = 20;  // In case we get really unlucky, prevents infinite loops
+    const T absTol = tol * maxOffDiag (A);  // Tolerance is in terms of the maximum
+    if (absTol != 0)                        // _off-diagonal_ entry.
+    {
+        int numIter = 0;
+        do
+        {
+            ++numIter;
+            bool changed = twoSidedJacobiRotation<T, 0, 1, 2> (A, U, V, tol);
+            changed = twoSidedJacobiRotation<T, 0, 2, 1> (A, U, V, tol) || changed;
+            changed = twoSidedJacobiRotation<T, 1, 2, 0> (A, U, V, tol) || changed;
+            if (!changed)
+                break;
+        } while (maxOffDiag(A) > absTol && numIter < maxIter);
+    }
+
+    // The off-diagonal entries are (effectively) 0, so whatever's left on the
+    // diagonal are the singular values:
+    S.x = A[0][0];
+    S.y = A[1][1];
+    S.z = A[2][2];
+
+    // Nothing thus far has guaranteed that the singular values are positive,
+    // so let's go back through and flip them if not (since by contract we are
+    // supposed to return all positive SVs):
+    for (int i = 0; i < 3; ++i)
+    {
+        if (S[i] < 0)
+        {
+            // If we flip S[i], we need to flip the corresponding column of U
+            // (we could also pick V if we wanted; it doesn't really matter):
+            S[i] = -S[i];
+            for (int j = 0; j < 3; ++j)
+                U[j][i] = -U[j][i];
+        }
+    }
+
+    // Order the singular values from largest to smallest; this requires
+    // exactly two passes through the data using bubble sort:
+    for (int i = 0; i < 2; ++i)
+    {
+        for (int j = 0; j < (2 - i); ++j)
+        {
+            // No absolute values necessary since we already ensured that
+            // they're positive:
+            if (S[j] < S[j+1])
+            {
+                // If we swap singular values we also have to swap
+                // corresponding columns in U and V:
+                std::swap (S[j], S[j+1]);
+                swapColumns (U, j, j+1);
+                swapColumns (V, j, j+1);
+            }
+        }
+    }
+
+    if (forcePositiveDeterminant)
+    {
+        // We want to guarantee that the returned matrices always have positive
+        // determinant.  We can do this by adding the appropriate number of
+        // matrices of the form:
+        //       [ 1       ]
+        //  L =  [    1    ]
+        //       [      -1 ]
+        // Note that L' = L and L*L = Identity.  Thus we can add:
+        //   U*L*L*S*V = (U*L)*(L*S)*V
+        // if U has a negative determinant, and
+        //   U*S*L*L*V = U*(S*L)*(L*V)
+        // if V has a neg. determinant.
+        if (U.determinant() < 0)
+        {
+            for (int i = 0; i < 3; ++i)
+                U[i][2] = -U[i][2];
+            S.z = -S.z;
+        }
+   
+        if (V.determinant() < 0)
+        {
+            for (int i = 0; i < 3; ++i)
+                V[i][2] = -V[i][2];
+            S.z = -S.z;
+        }
+    }
+}
+
+template <typename T>
+void
+twoSidedJacobiSVD (Imath::Matrix44<T> A,
+                   Imath::Matrix44<T>& U,
+                   Imath::Vec4<T>& S,
+                   Imath::Matrix44<T>& V,
+                   const T tol,
+                   const bool forcePositiveDeterminant)
+{
+    // Please see the Matrix33 version for a detailed description of the algorithm.
+    U.makeIdentity();
+    V.makeIdentity();
+
+    const int maxIter = 20;  // In case we get really unlucky, prevents infinite loops
+    const T absTol = tol * maxOffDiag (A);  // Tolerance is in terms of the maximum
+    if (absTol != 0)                        // _off-diagonal_ entry.
+    {
+        int numIter = 0;
+        do
+        {
+            ++numIter;
+            bool changed = twoSidedJacobiRotation (A, 0, 1, U, V, tol);
+            changed = twoSidedJacobiRotation (A, 0, 2, U, V, tol) || changed;
+            changed = twoSidedJacobiRotation (A, 0, 3, U, V, tol) || changed;
+            changed = twoSidedJacobiRotation (A, 1, 2, U, V, tol) || changed;
+            changed = twoSidedJacobiRotation (A, 1, 3, U, V, tol) || changed;
+            changed = twoSidedJacobiRotation (A, 2, 3, U, V, tol) || changed;
+            if (!changed)
+                break;
+        } while (maxOffDiag(A) > absTol && numIter < maxIter);
+    }
+
+    // The off-diagonal entries are (effectively) 0, so whatever's left on the
+    // diagonal are the singular values:
+    S[0] = A[0][0];
+    S[1] = A[1][1];
+    S[2] = A[2][2];
+    S[3] = A[3][3];
+
+    // Nothing thus far has guaranteed that the singular values are positive,
+    // so let's go back through and flip them if not (since by contract we are
+    // supposed to return all positive SVs):
+    for (int i = 0; i < 4; ++i)
+    {
+        if (S[i] < 0)
+        {
+            // If we flip S[i], we need to flip the corresponding column of U
+            // (we could also pick V if we wanted; it doesn't really matter):
+            S[i] = -S[i];
+            for (int j = 0; j < 4; ++j)
+                U[j][i] = -U[j][i];
+        }
+    }
+
+    // Order the singular values from largest to smallest using insertion sort:
+    for (int i = 1; i < 4; ++i)
+    {
+        const Imath::Vec4<T> uCol (U[0][i], U[1][i], U[2][i], U[3][i]);
+        const Imath::Vec4<T> vCol (V[0][i], V[1][i], V[2][i], V[3][i]);
+        const T sVal = S[i];
+
+        int j = i - 1;
+        while (std::abs (S[j]) < std::abs (sVal))
+        {
+            for (int k = 0; k < 4; ++k)
+                U[k][j+1] = U[k][j];
+            for (int k = 0; k < 4; ++k)
+                V[k][j+1] = V[k][j];
+            S[j+1] = S[j];
+
+            --j;
+            if (j < 0)
+                break;
+        }
+
+        for (int k = 0; k < 4; ++k)
+            U[k][j+1] = uCol[k];
+        for (int k = 0; k < 4; ++k)
+            V[k][j+1] = vCol[k];
+        S[j+1] = sVal;
+    }
+
+    if (forcePositiveDeterminant)
+    {
+        // We want to guarantee that the returned matrices always have positive
+        // determinant.  We can do this by adding the appropriate number of
+        // matrices of the form:
+        //       [ 1          ]
+        //  L =  [    1       ]
+        //       [       1    ]
+        //       [         -1 ]
+        // Note that L' = L and L*L = Identity.  Thus we can add:
+        //   U*L*L*S*V = (U*L)*(L*S)*V
+        // if U has a negative determinant, and
+        //   U*S*L*L*V = U*(S*L)*(L*V)
+        // if V has a neg. determinant.
+        if (U.determinant() < 0)
+        {
+            for (int i = 0; i < 4; ++i)
+                U[i][3] = -U[i][3];
+            S[3] = -S[3];
+        }
+   
+        if (V.determinant() < 0)
+        {
+            for (int i = 0; i < 4; ++i)
+                V[i][3] = -V[i][3];
+            S[3] = -S[3];
+        }
+    }
+}
+
+}
+
+template <typename T>
+void
+jacobiSVD (const Imath::Matrix33<T>& A,
+           Imath::Matrix33<T>& U,
+           Imath::Vec3<T>& S,
+           Imath::Matrix33<T>& V,
+           const T tol,
+           const bool forcePositiveDeterminant)
+{
+    twoSidedJacobiSVD (A, U, S, V, tol, forcePositiveDeterminant);
+}
+
+template <typename T>
+void
+jacobiSVD (const Imath::Matrix44<T>& A,
+           Imath::Matrix44<T>& U,
+           Imath::Vec4<T>& S,
+           Imath::Matrix44<T>& V,
+           const T tol,
+           const bool forcePositiveDeterminant)
+{
+    twoSidedJacobiSVD (A, U, S, V, tol, forcePositiveDeterminant);
+}
+
+template void jacobiSVD (const Imath::Matrix33<float>& A,
+                         Imath::Matrix33<float>& U,
+                         Imath::Vec3<float>& S,
+                         Imath::Matrix33<float>& V,
+                         const float tol,
+                         const bool forcePositiveDeterminant);
+template void jacobiSVD (const Imath::Matrix33<double>& A,
+                         Imath::Matrix33<double>& U,
+                         Imath::Vec3<double>& S,
+                         Imath::Matrix33<double>& V,
+                         const double tol,
+                         const bool forcePositiveDeterminant);
+template void jacobiSVD (const Imath::Matrix44<float>& A,
+                         Imath::Matrix44<float>& U,
+                         Imath::Vec4<float>& S,
+                         Imath::Matrix44<float>& V,
+                         const float tol,
+                         const bool forcePositiveDeterminant);
+template void jacobiSVD (const Imath::Matrix44<double>& A,
+                         Imath::Matrix44<double>& U,
+                         Imath::Vec4<double>& S,
+                         Imath::Matrix44<double>& V,
+                         const double tol,
+                         const bool forcePositiveDeterminant);
+
+namespace
+{
+
+template <int j, int k, typename TM>
+inline 
+void
+jacobiRotateRight (TM& A,
+                   const typename TM::BaseType s,
+                   const typename TM::BaseType tau)
+{
+    typedef typename TM::BaseType T;
+
+    for (unsigned int i = 0; i < TM::dimensions(); ++i)
+    {
+        const T nu1 = A[i][j];
+        const T nu2 = A[i][k];
+        A[i][j] -= s * (nu2 + tau * nu1);
+        A[i][k] += s * (nu1 - tau * nu2);
+   }
+}
+
+template <int j, int k, int l, typename T>
+bool
+jacobiRotation (Matrix33<T>& A,
+                Matrix33<T>& V,
+                Vec3<T>& Z,
+                const T tol)
+{
+    // Load everything into local variables to make things easier on the
+    // optimizer:
+    const T x = A[j][j];
+    const T y = A[j][k];
+    const T z = A[k][k];
+
+    // The first stage diagonalizes,
+    //   [ c  s ]^T [ x y ] [ c -s ]  = [ d1   0 ]
+    //   [ -s c ]   [ y z ] [ s  c ]    [  0  d2 ]
+    const T mu1 = z - x;
+    const T mu2 = 2 * y;
+
+    if (std::abs(mu2) <= tol*std::abs(mu1))
+    {
+        // We've decided that the off-diagonal entries are already small
+        // enough, so we'll set them to zero.  This actually appears to result
+        // in smaller errors than leaving them be, possibly because it prevents
+        // us from trying to do extra rotations later that we don't need.
+        A[j][k] = 0;
+        return false;
+    }
+    const T rho = mu1 / mu2;
+    const T t = (rho < 0 ? T(-1) : T(1)) / (std::abs(rho) + std::sqrt(1 + rho*rho));
+    const T c = T(1) / std::sqrt (T(1) + t*t);
+    const T s = t * c;
+    const T tau = s / (T(1) + c);
+    const T h = t * y;
+
+    // Update diagonal elements.
+    Z[j] -= h;
+    Z[k] += h;
+    A[j][j] -= h;
+    A[k][k] += h;
+
+    // For the entries we just zeroed out, we'll just set them to 0, since
+    // they should be 0 up to machine precision.  
+    A[j][k] = 0;
+
+    // We only update upper triagnular elements of A, since
+    // A is supposed to be symmetric.
+    T& offd1 = l < j ? A[l][j] : A[j][l];
+    T& offd2 = l < k ? A[l][k] : A[k][l];
+    const T nu1 = offd1;
+    const T nu2 = offd2;
+    offd1 = nu1 - s * (nu2 + tau * nu1);
+    offd2 = nu2 + s * (nu1 - tau * nu2); 
+
+    // Apply rotation to V
+    jacobiRotateRight<j, k> (V, s, tau);
+
+    return true;
+}
+
+template <int j, int k, int l1, int l2, typename T>
+bool
+jacobiRotation (Matrix44<T>& A,
+                Matrix44<T>& V,
+                Vec4<T>& Z,
+                const T tol)
+{
+    const T x = A[j][j];
+    const T y = A[j][k];
+    const T z = A[k][k];
+
+    const T mu1 = z - x;
+    const T mu2 = T(2) * y;
+
+    // Let's see if rho^(-1) = mu2 / mu1 is less than tol
+    // This test also checks if rho^2 will overflow 
+    // when tol^(-1) < sqrt(limits<T>::max()).
+    if (std::abs(mu2) <= tol*std::abs(mu1))
+    {
+        A[j][k] = 0;
+        return true;
+    }
+
+    const T rho = mu1 / mu2;
+    const T t = (rho < 0 ? T(-1) : T(1)) / (std::abs(rho) + std::sqrt(1 + rho*rho));
+    const T c = T(1) / std::sqrt (T(1) + t*t);
+    const T s = c * t;
+    const T tau = s / (T(1) + c);
+    const T h = t * y;
+
+    Z[j] -= h;
+    Z[k] += h;
+    A[j][j] -= h;
+    A[k][k] += h;
+    A[j][k] = 0;
+
+    {
+        T& offd1 = l1 < j ? A[l1][j] : A[j][l1];
+        T& offd2 = l1 < k ? A[l1][k] : A[k][l1];
+        const T nu1 = offd1;
+        const T nu2 = offd2;
+        offd1 -= s * (nu2 + tau * nu1);
+        offd2 += s * (nu1 - tau * nu2); 
+    }
+
+    {
+        T& offd1 = l2 < j ? A[l2][j] : A[j][l2];
+        T& offd2 = l2 < k ? A[l2][k] : A[k][l2];
+        const T nu1 = offd1;
+        const T nu2 = offd2;
+        offd1 -= s * (nu2 + tau * nu1);
+        offd2 += s * (nu1 - tau * nu2); 
+    }
+
+    jacobiRotateRight<j, k> (V, s, tau);
+
+    return true;
+}
+
+template <typename TM>
+inline
+typename TM::BaseType
+maxOffDiagSymm (const TM& A)
+{
+    typedef typename TM::BaseType T;
+    T result = 0;
+    for (unsigned int i = 0; i < TM::dimensions(); ++i)
+        for (unsigned int j = i+1; j < TM::dimensions(); ++j)
+            result = std::max (result, std::abs (A[i][j]));
+
+   return result;
+}
+
+} // namespace
+
+template <typename T>
+void
+jacobiEigenSolver (Matrix33<T>& A,
+                   Vec3<T>& S,
+                   Matrix33<T>& V,
+                   const T tol)
+{
+    V.makeIdentity();
+    for(int i = 0; i < 3; ++i) {
+        S[i] = A[i][i];
+    }
+
+    const int maxIter = 20;  // In case we get really unlucky, prevents infinite loops
+    const T absTol = tol * maxOffDiagSymm (A);  // Tolerance is in terms of the maximum
+    if (absTol != 0)                        // _off-diagonal_ entry.
+    {
+        int numIter = 0;
+        do
+        {
+            // Z is for accumulating small changes (h) to diagonal entries
+            // of A for one sweep. Adding h's directly to A might cause
+            // a cancellation effect when h is relatively very small to 
+            // the corresponding diagonal entry of A and 
+            // this will increase numerical errors
+            Vec3<T> Z(0, 0, 0);
+            ++numIter;
+            bool changed = jacobiRotation<0, 1, 2> (A, V, Z, tol);
+            changed = jacobiRotation<0, 2, 1> (A, V, Z, tol) || changed;
+            changed = jacobiRotation<1, 2, 0> (A, V, Z, tol) || changed;
+            // One sweep passed. Add accumulated changes (Z) to singular values (S)
+            // Update diagonal elements of A for better accuracy as well.
+            for(int i = 0; i < 3; ++i) {
+                A[i][i] = S[i] += Z[i];
+            }
+            if (!changed)
+                break;
+        } while (maxOffDiagSymm(A) > absTol && numIter < maxIter);
+    }
+}
+
+template <typename T>
+void
+jacobiEigenSolver (Matrix44<T>& A,
+                   Vec4<T>& S,
+                   Matrix44<T>& V,
+                   const T tol)
+{
+    V.makeIdentity();
+
+    for(int i = 0; i < 4; ++i) {
+        S[i] = A[i][i];
+    }
+
+    const int maxIter = 20;  // In case we get really unlucky, prevents infinite loops
+    const T absTol = tol * maxOffDiagSymm (A);  // Tolerance is in terms of the maximum
+    if (absTol != 0)                        // _off-diagonal_ entry.
+    {
+        int numIter = 0;
+        do
+        {
+            ++numIter;
+            Vec4<T> Z(0, 0, 0, 0);
+            bool changed = jacobiRotation<0, 1, 2, 3> (A, V, Z, tol);
+            changed = jacobiRotation<0, 2, 1, 3> (A, V, Z, tol) || changed;
+            changed = jacobiRotation<0, 3, 1, 2> (A, V, Z, tol) || changed;
+            changed = jacobiRotation<1, 2, 0, 3> (A, V, Z, tol) || changed;
+            changed = jacobiRotation<1, 3, 0, 2> (A, V, Z, tol) || changed;
+            changed = jacobiRotation<2, 3, 0, 1> (A, V, Z, tol) || changed;
+            for(int i = 0; i < 4; ++i) {
+                A[i][i] = S[i] += Z[i];
+            }
+           if (!changed)
+                break;
+        } while (maxOffDiagSymm(A) > absTol && numIter < maxIter);
+    }
+}
+
+template <typename TM, typename TV>
+void
+maxEigenVector (TM& A, TV& V)
+{
+    TV S;
+    TM MV;
+    jacobiEigenSolver(A, S, MV);
+
+    int maxIdx(0);
+    for(unsigned int i = 1; i < TV::dimensions(); ++i)
+    {
+        if(std::abs(S[i]) > std::abs(S[maxIdx]))
+            maxIdx = i;
+    }
+
+    for(unsigned int i = 0; i < TV::dimensions(); ++i)
+        V[i] = MV[i][maxIdx];
+}
+
+template <typename TM, typename TV>
+void
+minEigenVector (TM& A, TV& V)
+{
+    TV S;
+    TM MV;
+    jacobiEigenSolver(A, S, MV);
+
+    int minIdx(0);
+    for(unsigned int i = 1; i < TV::dimensions(); ++i)
+    {
+        if(std::abs(S[i]) < std::abs(S[minIdx]))
+            minIdx = i;
+    }
+
+   for(unsigned int i = 0; i < TV::dimensions(); ++i)
+        V[i] = MV[i][minIdx];
+}
+
+template void jacobiEigenSolver (Matrix33<float>& A,
+                                 Vec3<float>& S,
+                                 Matrix33<float>& V,
+                                 const float tol);
+template void jacobiEigenSolver (Matrix33<double>& A,
+                                 Vec3<double>& S,
+                                 Matrix33<double>& V,
+                                 const double tol);
+template void jacobiEigenSolver (Matrix44<float>& A,
+                                 Vec4<float>& S,
+                                 Matrix44<float>& V,
+                                 const float tol);
+template void jacobiEigenSolver (Matrix44<double>& A,
+                                 Vec4<double>& S,
+                                 Matrix44<double>& V,
+                                 const double tol);
+
+template void maxEigenVector (Matrix33<float>& A,
+                              Vec3<float>& S);
+template void maxEigenVector (Matrix44<float>& A,
+                              Vec4<float>& S);
+template void maxEigenVector (Matrix33<double>& A,
+                              Vec3<double>& S);
+template void maxEigenVector (Matrix44<double>& A,
+                              Vec4<double>& S);
+
+template void minEigenVector (Matrix33<float>& A,
+                              Vec3<float>& S);
+template void minEigenVector (Matrix44<float>& A,
+                              Vec4<float>& S);
+template void minEigenVector (Matrix33<double>& A,
+                              Vec3<double>& S);
+template void minEigenVector (Matrix44<double>& A,
+                              Vec4<double>& S);
+
+} // namespace Imath
diff --git a/3rdparty/openexr/Imath/ImathMatrixAlgo.h b/3rdparty/openexr/Imath/ImathMatrixAlgo.h
new file mode 100644 (file)
index 0000000..6cb1568
--- /dev/null
@@ -0,0 +1,1435 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHMATRIXALGO_H
+#define INCLUDED_IMATHMATRIXALGO_H
+
+//-------------------------------------------------------------------------
+//
+//      This file contains algorithms applied to or in conjunction with
+//     transformation matrices (Imath::Matrix33 and Imath::Matrix44).
+//     The assumption made is that these functions are called much less
+//     often than the basic point functions or these functions require
+//     more support classes.
+//
+//     This file also defines a few predefined constant matrices.
+//
+//-------------------------------------------------------------------------
+
+#include "ImathMatrix.h"
+#include "ImathQuat.h"
+#include "ImathEuler.h"
+#include "ImathExc.h"
+#include "ImathVec.h"
+#include "ImathLimits.h"
+#include <math.h>
+
+
+#ifdef OPENEXR_DLL
+    #ifdef IMATH_EXPORTS
+        #define IMATH_EXPORT_CONST extern __declspec(dllexport)
+    #else
+       #define IMATH_EXPORT_CONST extern __declspec(dllimport)
+    #endif
+#else
+    #define IMATH_EXPORT_CONST extern const
+#endif
+
+
+namespace Imath {
+
+//------------------
+// Identity matrices
+//------------------
+
+IMATH_EXPORT_CONST M33f identity33f;
+IMATH_EXPORT_CONST M44f identity44f;
+IMATH_EXPORT_CONST M33d identity33d;
+IMATH_EXPORT_CONST M44d identity44d;
+
+//----------------------------------------------------------------------
+// Extract scale, shear, rotation, and translation values from a matrix:
+// 
+// Notes:
+//
+// This implementation follows the technique described in the paper by
+// Spencer W. Thomas in the Graphics Gems II article: "Decomposing a 
+// Matrix into Simple Transformations", p. 320.
+//
+// - Some of the functions below have an optional exc parameter
+//   that determines the functions' behavior when the matrix'
+//   scaling is very close to zero:
+//
+//   If exc is true, the functions throw an Imath::ZeroScale exception.
+//
+//   If exc is false:
+//
+//      extractScaling (m, s)            returns false, s is invalid
+//     sansScaling (m)                  returns m
+//     removeScaling (m)                returns false, m is unchanged
+//      sansScalingAndShear (m)          returns m
+//      removeScalingAndShear (m)        returns false, m is unchanged
+//      extractAndRemoveScalingAndShear (m, s, h)  
+//                                       returns false, m is unchanged, 
+//                                                      (sh) are invalid
+//      checkForZeroScaleInRow ()        returns false
+//     extractSHRT (m, s, h, r, t)      returns false, (shrt) are invalid
+//
+// - Functions extractEuler(), extractEulerXYZ() and extractEulerZYX() 
+//   assume that the matrix does not include shear or non-uniform scaling, 
+//   but they do not examine the matrix to verify this assumption.  
+//   Matrices with shear or non-uniform scaling are likely to produce 
+//   meaningless results.  Therefore, you should use the 
+//   removeScalingAndShear() routine, if necessary, prior to calling
+//   extractEuler...() .
+//
+// - All functions assume that the matrix does not include perspective
+//   transformation(s), but they do not examine the matrix to verify 
+//   this assumption.  Matrices with perspective transformations are 
+//   likely to produce meaningless results.
+//
+//----------------------------------------------------------------------
+
+
+//
+// Declarations for 4x4 matrix.
+//
+
+template <class T>  bool        extractScaling 
+                                            (const Matrix44<T> &mat,
+                                            Vec3<T> &scl,
+                                            bool exc = true);
+  
+template <class T>  Matrix44<T> sansScaling (const Matrix44<T> &mat, 
+                                            bool exc = true);
+
+template <class T>  bool        removeScaling 
+                                            (Matrix44<T> &mat, 
+                                            bool exc = true);
+
+template <class T>  bool        extractScalingAndShear 
+                                            (const Matrix44<T> &mat,
+                                            Vec3<T> &scl,
+                                            Vec3<T> &shr,
+                                            bool exc = true);
+  
+template <class T>  Matrix44<T> sansScalingAndShear 
+                                            (const Matrix44<T> &mat, 
+                                            bool exc = true);
+
+template <class T>  void        sansScalingAndShear 
+                                            (Matrix44<T> &result,
+                                             const Matrix44<T> &mat, 
+                                            bool exc = true);
+
+template <class T>  bool        removeScalingAndShear 
+                                            (Matrix44<T> &mat,
+                                            bool exc = true);
+
+template <class T>  bool        extractAndRemoveScalingAndShear
+                                            (Matrix44<T> &mat,
+                                            Vec3<T>     &scl,
+                                            Vec3<T>     &shr,
+                                            bool exc = true);
+
+template <class T>  void       extractEulerXYZ 
+                                            (const Matrix44<T> &mat,
+                                            Vec3<T> &rot);
+
+template <class T>  void       extractEulerZYX 
+                                            (const Matrix44<T> &mat,
+                                            Vec3<T> &rot);
+
+template <class T>  Quat<T>    extractQuat (const Matrix44<T> &mat);
+
+template <class T>  bool       extractSHRT 
+                                    (const Matrix44<T> &mat,
+                                    Vec3<T> &s,
+                                    Vec3<T> &h,
+                                    Vec3<T> &r,
+                                    Vec3<T> &t,
+                                    bool exc /*= true*/,
+                                    typename Euler<T>::Order rOrder);
+
+template <class T>  bool       extractSHRT 
+                                    (const Matrix44<T> &mat,
+                                    Vec3<T> &s,
+                                    Vec3<T> &h,
+                                    Vec3<T> &r,
+                                    Vec3<T> &t,
+                                    bool exc = true);
+
+template <class T>  bool       extractSHRT 
+                                    (const Matrix44<T> &mat,
+                                    Vec3<T> &s,
+                                    Vec3<T> &h,
+                                    Euler<T> &r,
+                                    Vec3<T> &t,
+                                    bool exc = true);
+
+//
+// Internal utility function.
+//
+
+template <class T>  bool       checkForZeroScaleInRow
+                                            (const T       &scl, 
+                                            const Vec3<T> &row,
+                                            bool exc = true);
+
+template <class T>  Matrix44<T> outerProduct
+                                            ( const Vec4<T> &a,
+                                              const Vec4<T> &b);
+
+
+//
+// Returns a matrix that rotates "fromDirection" vector to "toDirection"
+// vector.
+//
+
+template <class T> Matrix44<T> rotationMatrix (const Vec3<T> &fromDirection,
+                                               const Vec3<T> &toDirection);
+
+
+
+//
+// Returns a matrix that rotates the "fromDir" vector 
+// so that it points towards "toDir".  You may also 
+// specify that you want the up vector to be pointing 
+// in a certain direction "upDir".
+//
+
+template <class T> Matrix44<T> rotationMatrixWithUpDir 
+                                            (const Vec3<T> &fromDir,
+                                            const Vec3<T> &toDir,
+                                            const Vec3<T> &upDir);
+
+
+//
+// Constructs a matrix that rotates the z-axis so that it 
+// points towards "targetDir".  You must also specify 
+// that you want the up vector to be pointing in a 
+// certain direction "upDir".
+//
+// Notes: The following degenerate cases are handled:
+//        (a) when the directions given by "toDir" and "upDir" 
+//            are parallel or opposite;
+//            (the direction vectors must have a non-zero cross product)
+//        (b) when any of the given direction vectors have zero length
+//
+
+template <class T> void        alignZAxisWithTargetDir 
+                                            (Matrix44<T> &result,
+                                             Vec3<T>      targetDir, 
+                                            Vec3<T>      upDir);
+
+
+// Compute an orthonormal direct frame from : a position, an x axis direction and a normal to the y axis
+// If the x axis and normal are perpendicular, then the normal will have the same direction as the z axis.
+// Inputs are : 
+//     -the position of the frame
+//     -the x axis direction of the frame
+//     -a normal to the y axis of the frame
+// Return is the orthonormal frame
+template <class T> Matrix44<T> computeLocalFrame( const Vec3<T>& p,
+                                                  const Vec3<T>& xDir,
+                                                  const Vec3<T>& normal);
+
+// Add a translate/rotate/scale offset to an input frame
+// and put it in another frame of reference
+// Inputs are :
+//     - input frame
+//     - translate offset
+//     - rotate    offset in degrees
+//     - scale     offset
+//     - frame of reference
+// Output is the offsetted frame
+template <class T> Matrix44<T> addOffset( const Matrix44<T>& inMat,
+                                          const Vec3<T>&     tOffset,
+                                          const Vec3<T>&     rOffset,
+                                          const Vec3<T>&     sOffset,
+                                          const Vec3<T>&     ref);
+
+// Compute Translate/Rotate/Scale matrix from matrix A with the Rotate/Scale of Matrix B
+// Inputs are :
+//      -keepRotateA : if true keep rotate from matrix A, use B otherwise
+//      -keepScaleA  : if true keep scale  from matrix A, use B otherwise
+//      -Matrix A
+//      -Matrix B
+// Return Matrix A with tweaked rotation/scale
+template <class T> Matrix44<T> computeRSMatrix( bool               keepRotateA,
+                                                bool               keepScaleA, 
+                                                const Matrix44<T>& A,
+                                                const Matrix44<T>& B);
+
+
+//----------------------------------------------------------------------
+
+
+// 
+// Declarations for 3x3 matrix.
+//
+
+template <class T>  bool        extractScaling 
+                                            (const Matrix33<T> &mat,
+                                            Vec2<T> &scl,
+                                            bool exc = true);
+  
+template <class T>  Matrix33<T> sansScaling (const Matrix33<T> &mat, 
+                                            bool exc = true);
+
+template <class T>  bool        removeScaling 
+                                            (Matrix33<T> &mat, 
+                                            bool exc = true);
+
+template <class T>  bool        extractScalingAndShear 
+                                            (const Matrix33<T> &mat,
+                                            Vec2<T> &scl,
+                                            T &h,
+                                            bool exc = true);
+  
+template <class T>  Matrix33<T> sansScalingAndShear 
+                                            (const Matrix33<T> &mat, 
+                                            bool exc = true);
+
+template <class T>  bool        removeScalingAndShear 
+                                            (Matrix33<T> &mat,
+                                            bool exc = true);
+
+template <class T>  bool        extractAndRemoveScalingAndShear
+                                            (Matrix33<T> &mat,
+                                            Vec2<T>     &scl,
+                                            T           &shr,
+                                            bool exc = true);
+
+template <class T>  void       extractEuler
+                                            (const Matrix33<T> &mat,
+                                            T       &rot);
+
+template <class T>  bool       extractSHRT (const Matrix33<T> &mat,
+                                            Vec2<T> &s,
+                                            T       &h,
+                                            T       &r,
+                                            Vec2<T> &t,
+                                            bool exc = true);
+
+template <class T>  bool       checkForZeroScaleInRow
+                                            (const T       &scl, 
+                                            const Vec2<T> &row,
+                                            bool exc = true);
+
+template <class T>  Matrix33<T> outerProduct
+                                            ( const Vec3<T> &a,
+                                              const Vec3<T> &b);
+
+
+//-----------------------------------------------------------------------------
+// Implementation for 4x4 Matrix
+//------------------------------
+
+
+template <class T>
+bool
+extractScaling (const Matrix44<T> &mat, Vec3<T> &scl, bool exc)
+{
+    Vec3<T> shr;
+    Matrix44<T> M (mat);
+
+    if (! extractAndRemoveScalingAndShear (M, scl, shr, exc))
+       return false;
+    
+    return true;
+}
+
+
+template <class T>
+Matrix44<T>
+sansScaling (const Matrix44<T> &mat, bool exc)
+{
+    Vec3<T> scl;
+    Vec3<T> shr;
+    Vec3<T> rot;
+    Vec3<T> tran;
+
+    if (! extractSHRT (mat, scl, shr, rot, tran, exc))
+       return mat;
+
+    Matrix44<T> M;
+    
+    M.translate (tran);
+    M.rotate (rot);
+    M.shear (shr);
+
+    return M;
+}
+
+
+template <class T>
+bool
+removeScaling (Matrix44<T> &mat, bool exc)
+{
+    Vec3<T> scl;
+    Vec3<T> shr;
+    Vec3<T> rot;
+    Vec3<T> tran;
+
+    if (! extractSHRT (mat, scl, shr, rot, tran, exc))
+       return false;
+
+    mat.makeIdentity ();
+    mat.translate (tran);
+    mat.rotate (rot);
+    mat.shear (shr);
+
+    return true;
+}
+
+
+template <class T>
+bool
+extractScalingAndShear (const Matrix44<T> &mat, 
+                       Vec3<T> &scl, Vec3<T> &shr, bool exc)
+{
+    Matrix44<T> M (mat);
+
+    if (! extractAndRemoveScalingAndShear (M, scl, shr, exc))
+       return false;
+    
+    return true;
+}
+
+
+template <class T>
+Matrix44<T>
+sansScalingAndShear (const Matrix44<T> &mat, bool exc)
+{
+    Vec3<T> scl;
+    Vec3<T> shr;
+    Matrix44<T> M (mat);
+
+    if (! extractAndRemoveScalingAndShear (M, scl, shr, exc))
+       return mat;
+    
+    return M;
+}
+
+
+template <class T>
+void
+sansScalingAndShear (Matrix44<T> &result, const Matrix44<T> &mat, bool exc)
+{
+    Vec3<T> scl;
+    Vec3<T> shr;
+
+    if (! extractAndRemoveScalingAndShear (result, scl, shr, exc))
+       result = mat;
+}
+
+
+template <class T>
+bool
+removeScalingAndShear (Matrix44<T> &mat, bool exc)
+{
+    Vec3<T> scl;
+    Vec3<T> shr;
+
+    if (! extractAndRemoveScalingAndShear (mat, scl, shr, exc))
+       return false;
+    
+    return true;
+}
+
+
+template <class T>
+bool
+extractAndRemoveScalingAndShear (Matrix44<T> &mat, 
+                                Vec3<T> &scl, Vec3<T> &shr, bool exc)
+{
+    //
+    // This implementation follows the technique described in the paper by
+    // Spencer W. Thomas in the Graphics Gems II article: "Decomposing a 
+    // Matrix into Simple Transformations", p. 320.
+    //
+
+    Vec3<T> row[3];
+
+    row[0] = Vec3<T> (mat[0][0], mat[0][1], mat[0][2]);
+    row[1] = Vec3<T> (mat[1][0], mat[1][1], mat[1][2]);
+    row[2] = Vec3<T> (mat[2][0], mat[2][1], mat[2][2]);
+    
+    T maxVal = 0;
+    for (int i=0; i < 3; i++)
+       for (int j=0; j < 3; j++)
+           if (Imath::abs (row[i][j]) > maxVal)
+               maxVal = Imath::abs (row[i][j]);
+
+    //
+    // We normalize the 3x3 matrix here.
+    // It was noticed that this can improve numerical stability significantly,
+    // especially when many of the upper 3x3 matrix's coefficients are very
+    // close to zero; we correct for this step at the end by multiplying the 
+    // scaling factors by maxVal at the end (shear and rotation are not 
+    // affected by the normalization).
+
+    if (maxVal != 0)
+    {
+       for (int i=0; i < 3; i++)
+           if (! checkForZeroScaleInRow (maxVal, row[i], exc))
+               return false;
+           else
+               row[i] /= maxVal;
+    }
+
+    // Compute X scale factor. 
+    scl.x = row[0].length ();
+    if (! checkForZeroScaleInRow (scl.x, row[0], exc))
+       return false;
+
+    // Normalize first row.
+    row[0] /= scl.x;
+
+    // An XY shear factor will shear the X coord. as the Y coord. changes.
+    // There are 6 combinations (XY, XZ, YZ, YX, ZX, ZY), although we only
+    // extract the first 3 because we can effect the last 3 by shearing in
+    // XY, XZ, YZ combined rotations and scales.
+    //
+    // shear matrix <   1,  YX,  ZX,  0,
+    //                 XY,   1,  ZY,  0,
+    //                 XZ,  YZ,   1,  0,
+    //                  0,   0,   0,  1 >
+
+    // Compute XY shear factor and make 2nd row orthogonal to 1st.
+    shr[0]  = row[0].dot (row[1]);
+    row[1] -= shr[0] * row[0];
+
+    // Now, compute Y scale.
+    scl.y = row[1].length ();
+    if (! checkForZeroScaleInRow (scl.y, row[1], exc))
+       return false;
+
+    // Normalize 2nd row and correct the XY shear factor for Y scaling.
+    row[1] /= scl.y; 
+    shr[0] /= scl.y;
+
+    // Compute XZ and YZ shears, orthogonalize 3rd row.
+    shr[1]  = row[0].dot (row[2]);
+    row[2] -= shr[1] * row[0];
+    shr[2]  = row[1].dot (row[2]);
+    row[2] -= shr[2] * row[1];
+
+    // Next, get Z scale.
+    scl.z = row[2].length ();
+    if (! checkForZeroScaleInRow (scl.z, row[2], exc))
+       return false;
+
+    // Normalize 3rd row and correct the XZ and YZ shear factors for Z scaling.
+    row[2] /= scl.z;
+    shr[1] /= scl.z;
+    shr[2] /= scl.z;
+
+    // At this point, the upper 3x3 matrix in mat is orthonormal.
+    // Check for a coordinate system flip. If the determinant
+    // is less than zero, then negate the matrix and the scaling factors.
+    if (row[0].dot (row[1].cross (row[2])) < 0)
+       for (int  i=0; i < 3; i++)
+       {
+           scl[i] *= -1;
+           row[i] *= -1;
+       }
+
+    // Copy over the orthonormal rows into the returned matrix.
+    // The upper 3x3 matrix in mat is now a rotation matrix.
+    for (int i=0; i < 3; i++)
+    {
+       mat[i][0] = row[i][0]; 
+       mat[i][1] = row[i][1]; 
+       mat[i][2] = row[i][2];
+    }
+
+    // Correct the scaling factors for the normalization step that we 
+    // performed above; shear and rotation are not affected by the 
+    // normalization.
+    scl *= maxVal;
+
+    return true;
+}
+
+
+template <class T>
+void
+extractEulerXYZ (const Matrix44<T> &mat, Vec3<T> &rot)
+{
+    //
+    // Normalize the local x, y and z axes to remove scaling.
+    //
+
+    Vec3<T> i (mat[0][0], mat[0][1], mat[0][2]);
+    Vec3<T> j (mat[1][0], mat[1][1], mat[1][2]);
+    Vec3<T> k (mat[2][0], mat[2][1], mat[2][2]);
+
+    i.normalize();
+    j.normalize();
+    k.normalize();
+
+    Matrix44<T> M (i[0], i[1], i[2], 0, 
+                  j[0], j[1], j[2], 0, 
+                  k[0], k[1], k[2], 0, 
+                  0,    0,    0,    1);
+
+    //
+    // Extract the first angle, rot.x.
+    // 
+
+    rot.x = Math<T>::atan2 (M[1][2], M[2][2]);
+
+    //
+    // Remove the rot.x rotation from M, so that the remaining
+    // rotation, N, is only around two axes, and gimbal lock
+    // cannot occur.
+    //
+
+    Matrix44<T> N;
+    N.rotate (Vec3<T> (-rot.x, 0, 0));
+    N = N * M;
+
+    //
+    // Extract the other two angles, rot.y and rot.z, from N.
+    //
+
+    T cy = Math<T>::sqrt (N[0][0]*N[0][0] + N[0][1]*N[0][1]);
+    rot.y = Math<T>::atan2 (-N[0][2], cy);
+    rot.z = Math<T>::atan2 (-N[1][0], N[1][1]);
+}
+
+
+template <class T>
+void
+extractEulerZYX (const Matrix44<T> &mat, Vec3<T> &rot)
+{
+    //
+    // Normalize the local x, y and z axes to remove scaling.
+    //
+
+    Vec3<T> i (mat[0][0], mat[0][1], mat[0][2]);
+    Vec3<T> j (mat[1][0], mat[1][1], mat[1][2]);
+    Vec3<T> k (mat[2][0], mat[2][1], mat[2][2]);
+
+    i.normalize();
+    j.normalize();
+    k.normalize();
+
+    Matrix44<T> M (i[0], i[1], i[2], 0, 
+                  j[0], j[1], j[2], 0, 
+                  k[0], k[1], k[2], 0, 
+                  0,    0,    0,    1);
+
+    //
+    // Extract the first angle, rot.x.
+    // 
+
+    rot.x = -Math<T>::atan2 (M[1][0], M[0][0]);
+
+    //
+    // Remove the x rotation from M, so that the remaining
+    // rotation, N, is only around two axes, and gimbal lock
+    // cannot occur.
+    //
+
+    Matrix44<T> N;
+    N.rotate (Vec3<T> (0, 0, -rot.x));
+    N = N * M;
+
+    //
+    // Extract the other two angles, rot.y and rot.z, from N.
+    //
+
+    T cy = Math<T>::sqrt (N[2][2]*N[2][2] + N[2][1]*N[2][1]);
+    rot.y = -Math<T>::atan2 (-N[2][0], cy);
+    rot.z = -Math<T>::atan2 (-N[1][2], N[1][1]);
+}
+
+
+template <class T>
+Quat<T>
+extractQuat (const Matrix44<T> &mat)
+{
+  Matrix44<T> rot;
+
+  T        tr, s;
+  T         q[4];
+  int    i, j, k;
+  Quat<T>   quat;
+
+  int nxt[3] = {1, 2, 0};
+  tr = mat[0][0] + mat[1][1] + mat[2][2];
+
+  // check the diagonal
+  if (tr > 0.0) {
+     s = Math<T>::sqrt (tr + T(1.0));
+     quat.r = s / T(2.0);
+     s = T(0.5) / s;
+
+     quat.v.x = (mat[1][2] - mat[2][1]) * s;
+     quat.v.y = (mat[2][0] - mat[0][2]) * s;
+     quat.v.z = (mat[0][1] - mat[1][0]) * s;
+  } 
+  else {      
+     // diagonal is negative
+     i = 0;
+     if (mat[1][1] > mat[0][0]) 
+        i=1;
+     if (mat[2][2] > mat[i][i]) 
+        i=2;
+    
+     j = nxt[i];
+     k = nxt[j];
+     s = Math<T>::sqrt ((mat[i][i] - (mat[j][j] + mat[k][k])) + T(1.0));
+      
+     q[i] = s * T(0.5);
+     if (s != T(0.0)) 
+        s = T(0.5) / s;
+
+     q[3] = (mat[j][k] - mat[k][j]) * s;
+     q[j] = (mat[i][j] + mat[j][i]) * s;
+     q[k] = (mat[i][k] + mat[k][i]) * s;
+
+     quat.v.x = q[0];
+     quat.v.y = q[1];
+     quat.v.z = q[2];
+     quat.r = q[3];
+ }
+
+  return quat;
+}
+
+template <class T>
+bool 
+extractSHRT (const Matrix44<T> &mat,
+            Vec3<T> &s,
+            Vec3<T> &h,
+            Vec3<T> &r,
+            Vec3<T> &t,
+            bool exc /* = true */ ,
+            typename Euler<T>::Order rOrder /* = Euler<T>::XYZ */ )
+{
+    Matrix44<T> rot;
+
+    rot = mat;
+    if (! extractAndRemoveScalingAndShear (rot, s, h, exc))
+       return false;
+
+    extractEulerXYZ (rot, r);
+
+    t.x = mat[3][0];
+    t.y = mat[3][1];
+    t.z = mat[3][2];
+
+    if (rOrder != Euler<T>::XYZ)
+    {
+       Imath::Euler<T> eXYZ (r, Imath::Euler<T>::XYZ);
+       Imath::Euler<T> e (eXYZ, rOrder);
+       r = e.toXYZVector ();
+    }
+
+    return true;
+}
+
+template <class T>
+bool 
+extractSHRT (const Matrix44<T> &mat,
+            Vec3<T> &s,
+            Vec3<T> &h,
+            Vec3<T> &r,
+            Vec3<T> &t,
+            bool exc)
+{
+    return extractSHRT(mat, s, h, r, t, exc, Imath::Euler<T>::XYZ);
+}
+
+template <class T>
+bool 
+extractSHRT (const Matrix44<T> &mat,
+            Vec3<T> &s,
+            Vec3<T> &h,
+            Euler<T> &r,
+            Vec3<T> &t,
+            bool exc /* = true */)
+{
+    return extractSHRT (mat, s, h, r, t, exc, r.order ());
+}
+
+
+template <class T> 
+bool           
+checkForZeroScaleInRow (const T& scl, 
+                       const Vec3<T> &row,
+                       bool exc /* = true */ )
+{
+    for (int i = 0; i < 3; i++)
+    {
+       if ((abs (scl) < 1 && abs (row[i]) >= limits<T>::max() * abs (scl)))
+       {
+           if (exc)
+               throw Imath::ZeroScaleExc ("Cannot remove zero scaling "
+                                          "from matrix.");
+           else
+               return false;
+       }
+    }
+
+    return true;
+}
+
+template <class T>
+Matrix44<T>
+outerProduct (const Vec4<T> &a, const Vec4<T> &b )
+{
+    return Matrix44<T> (a.x*b.x, a.x*b.y, a.x*b.z, a.x*b.w,
+                        a.y*b.x, a.y*b.y, a.y*b.z, a.x*b.w,
+                        a.z*b.x, a.z*b.y, a.z*b.z, a.x*b.w,
+                        a.w*b.x, a.w*b.y, a.w*b.z, a.w*b.w);
+}
+
+template <class T>
+Matrix44<T>
+rotationMatrix (const Vec3<T> &from, const Vec3<T> &to)
+{
+    Quat<T> q;
+    q.setRotation(from, to);
+    return q.toMatrix44();
+}
+
+
+template <class T>
+Matrix44<T>    
+rotationMatrixWithUpDir (const Vec3<T> &fromDir,
+                        const Vec3<T> &toDir,
+                        const Vec3<T> &upDir)
+{
+    //
+    // The goal is to obtain a rotation matrix that takes 
+    // "fromDir" to "toDir".  We do this in two steps and 
+    // compose the resulting rotation matrices; 
+    //    (a) rotate "fromDir" into the z-axis
+    //    (b) rotate the z-axis into "toDir"
+    //
+
+    // The from direction must be non-zero; but we allow zero to and up dirs.
+    if (fromDir.length () == 0)
+       return Matrix44<T> ();
+
+    else
+    {
+       Matrix44<T> zAxis2FromDir( Imath::UNINITIALIZED );
+       alignZAxisWithTargetDir (zAxis2FromDir, fromDir, Vec3<T> (0, 1, 0));
+
+       Matrix44<T> fromDir2zAxis  = zAxis2FromDir.transposed ();
+       
+       Matrix44<T> zAxis2ToDir( Imath::UNINITIALIZED );
+       alignZAxisWithTargetDir (zAxis2ToDir, toDir, upDir);
+
+       return fromDir2zAxis * zAxis2ToDir;
+    }
+}
+
+
+template <class T>
+void
+alignZAxisWithTargetDir (Matrix44<T> &result, Vec3<T> targetDir, Vec3<T> upDir)
+{
+    //
+    // Ensure that the target direction is non-zero.
+    //
+
+    if ( targetDir.length () == 0 )
+       targetDir = Vec3<T> (0, 0, 1);
+
+    //
+    // Ensure that the up direction is non-zero.
+    //
+
+    if ( upDir.length () == 0 )
+       upDir = Vec3<T> (0, 1, 0);
+
+    //
+    // Check for degeneracies.  If the upDir and targetDir are parallel 
+    // or opposite, then compute a new, arbitrary up direction that is
+    // not parallel or opposite to the targetDir.
+    //
+
+    if (upDir.cross (targetDir).length () == 0)
+    {
+       upDir = targetDir.cross (Vec3<T> (1, 0, 0));
+       if (upDir.length() == 0)
+           upDir = targetDir.cross(Vec3<T> (0, 0, 1));
+    }
+
+    //
+    // Compute the x-, y-, and z-axis vectors of the new coordinate system.
+    //
+
+    Vec3<T> targetPerpDir = upDir.cross (targetDir);    
+    Vec3<T> targetUpDir   = targetDir.cross (targetPerpDir);
+    
+    //
+    // Rotate the x-axis into targetPerpDir (row 0),
+    // rotate the y-axis into targetUpDir   (row 1),
+    // rotate the z-axis into targetDir     (row 2).
+    //
+    
+    Vec3<T> row[3];
+    row[0] = targetPerpDir.normalized ();
+    row[1] = targetUpDir  .normalized ();
+    row[2] = targetDir    .normalized ();
+    
+    result.x[0][0] = row[0][0];
+    result.x[0][1] = row[0][1];
+    result.x[0][2] = row[0][2];
+    result.x[0][3] = (T)0;
+    result.x[1][0] = row[1][0];
+    result.x[1][1] = row[1][1];
+    result.x[1][2] = row[1][2];
+    result.x[1][3] = (T)0;
+    result.x[2][0] = row[2][0];
+    result.x[2][1] = row[2][1];
+    result.x[2][2] = row[2][2];
+    result.x[2][3] = (T)0;
+    result.x[3][0] = (T)0;
+    result.x[3][1] = (T)0;
+    result.x[3][2] = (T)0;
+    result.x[3][3] = (T)1;
+}
+
+
+// Compute an orthonormal direct frame from : a position, an x axis direction and a normal to the y axis
+// If the x axis and normal are perpendicular, then the normal will have the same direction as the z axis.
+// Inputs are : 
+//     -the position of the frame
+//     -the x axis direction of the frame
+//     -a normal to the y axis of the frame
+// Return is the orthonormal frame
+template <class T>
+Matrix44<T>
+computeLocalFrame( const Vec3<T>& p,
+                   const Vec3<T>& xDir,
+                   const Vec3<T>& normal)
+{
+    Vec3<T> _xDir(xDir);
+    Vec3<T> x = _xDir.normalize();
+    Vec3<T> y = (normal % x).normalize();
+    Vec3<T> z = (x % y).normalize();
+
+    Matrix44<T> L;
+    L[0][0] = x[0];
+    L[0][1] = x[1];
+    L[0][2] = x[2];
+    L[0][3] = 0.0;
+
+    L[1][0] = y[0];
+    L[1][1] = y[1];
+    L[1][2] = y[2];
+    L[1][3] = 0.0;
+
+    L[2][0] = z[0];
+    L[2][1] = z[1];
+    L[2][2] = z[2];
+    L[2][3] = 0.0;
+
+    L[3][0] = p[0];
+    L[3][1] = p[1];
+    L[3][2] = p[2];
+    L[3][3] = 1.0;
+    
+    return L;
+}
+
+// Add a translate/rotate/scale offset to an input frame
+// and put it in another frame of reference
+// Inputs are :
+//     - input frame
+//     - translate offset
+//     - rotate    offset in degrees
+//     - scale     offset
+//     - frame of reference
+// Output is the offsetted frame
+template <class T>
+Matrix44<T>
+addOffset( const Matrix44<T>& inMat,
+           const Vec3<T>&     tOffset,
+           const Vec3<T>&     rOffset,
+           const Vec3<T>&     sOffset,
+           const Matrix44<T>& ref)
+{
+    Matrix44<T> O;
+
+    Vec3<T> _rOffset(rOffset);
+    _rOffset *= M_PI / 180.0;
+    O.rotate (_rOffset);
+
+    O[3][0] = tOffset[0];
+    O[3][1] = tOffset[1];
+    O[3][2] = tOffset[2];
+
+    Matrix44<T> S;
+    S.scale (sOffset);
+
+    Matrix44<T> X = S * O * inMat * ref;
+
+    return X;
+}
+
+// Compute Translate/Rotate/Scale matrix from matrix A with the Rotate/Scale of Matrix B
+// Inputs are :
+//      -keepRotateA : if true keep rotate from matrix A, use B otherwise
+//      -keepScaleA  : if true keep scale  from matrix A, use B otherwise
+//      -Matrix A
+//      -Matrix B
+// Return Matrix A with tweaked rotation/scale
+template <class T>
+Matrix44<T>
+computeRSMatrix( bool               keepRotateA,
+                 bool               keepScaleA, 
+                 const Matrix44<T>& A, 
+                 const Matrix44<T>& B)
+{
+    Vec3<T> as, ah, ar, at;
+    extractSHRT (A, as, ah, ar, at);
+    
+    Vec3<T> bs, bh, br, bt;
+    extractSHRT (B, bs, bh, br, bt);
+
+    if (!keepRotateA)
+        ar = br;
+
+    if (!keepScaleA)
+        as = bs;
+
+    Matrix44<T> mat;
+    mat.makeIdentity();
+    mat.translate (at);
+    mat.rotate (ar);
+    mat.scale (as);
+    
+    return mat;
+}
+
+
+
+//-----------------------------------------------------------------------------
+// Implementation for 3x3 Matrix
+//------------------------------
+
+
+template <class T>
+bool
+extractScaling (const Matrix33<T> &mat, Vec2<T> &scl, bool exc)
+{
+    T shr;
+    Matrix33<T> M (mat);
+
+    if (! extractAndRemoveScalingAndShear (M, scl, shr, exc))
+       return false;
+
+    return true;
+}
+
+
+template <class T>
+Matrix33<T>
+sansScaling (const Matrix33<T> &mat, bool exc)
+{
+    Vec2<T> scl;
+    T shr;
+    T rot;
+    Vec2<T> tran;
+
+    if (! extractSHRT (mat, scl, shr, rot, tran, exc))
+       return mat;
+
+    Matrix33<T> M;
+    
+    M.translate (tran);
+    M.rotate (rot);
+    M.shear (shr);
+
+    return M;
+}
+
+
+template <class T>
+bool
+removeScaling (Matrix33<T> &mat, bool exc)
+{
+    Vec2<T> scl;
+    T shr;
+    T rot;
+    Vec2<T> tran;
+
+    if (! extractSHRT (mat, scl, shr, rot, tran, exc))
+       return false;
+
+    mat.makeIdentity ();
+    mat.translate (tran);
+    mat.rotate (rot);
+    mat.shear (shr);
+
+    return true;
+}
+
+
+template <class T>
+bool
+extractScalingAndShear (const Matrix33<T> &mat, Vec2<T> &scl, T &shr, bool exc)
+{
+    Matrix33<T> M (mat);
+
+    if (! extractAndRemoveScalingAndShear (M, scl, shr, exc))
+       return false;
+
+    return true;
+}
+
+
+template <class T>
+Matrix33<T>
+sansScalingAndShear (const Matrix33<T> &mat, bool exc)
+{
+    Vec2<T> scl;
+    T shr;
+    Matrix33<T> M (mat);
+
+    if (! extractAndRemoveScalingAndShear (M, scl, shr, exc))
+       return mat;
+    
+    return M;
+}
+
+
+template <class T>
+bool
+removeScalingAndShear (Matrix33<T> &mat, bool exc)
+{
+    Vec2<T> scl;
+    T shr;
+
+    if (! extractAndRemoveScalingAndShear (mat, scl, shr, exc))
+       return false;
+    
+    return true;
+}
+
+template <class T>
+bool
+extractAndRemoveScalingAndShear (Matrix33<T> &mat, 
+                                Vec2<T> &scl, T &shr, bool exc)
+{
+    Vec2<T> row[2];
+
+    row[0] = Vec2<T> (mat[0][0], mat[0][1]);
+    row[1] = Vec2<T> (mat[1][0], mat[1][1]);
+    
+    T maxVal = 0;
+    for (int i=0; i < 2; i++)
+       for (int j=0; j < 2; j++)
+           if (Imath::abs (row[i][j]) > maxVal)
+               maxVal = Imath::abs (row[i][j]);
+
+    //
+    // We normalize the 2x2 matrix here.
+    // It was noticed that this can improve numerical stability significantly,
+    // especially when many of the upper 2x2 matrix's coefficients are very
+    // close to zero; we correct for this step at the end by multiplying the 
+    // scaling factors by maxVal at the end (shear and rotation are not 
+    // affected by the normalization).
+
+    if (maxVal != 0)
+    {
+       for (int i=0; i < 2; i++)
+           if (! checkForZeroScaleInRow (maxVal, row[i], exc))
+               return false;
+           else
+               row[i] /= maxVal;
+    }
+
+    // Compute X scale factor. 
+    scl.x = row[0].length ();
+    if (! checkForZeroScaleInRow (scl.x, row[0], exc))
+       return false;
+
+    // Normalize first row.
+    row[0] /= scl.x;
+
+    // An XY shear factor will shear the X coord. as the Y coord. changes.
+    // There are 2 combinations (XY, YX), although we only extract the XY 
+    // shear factor because we can effect the an YX shear factor by 
+    // shearing in XY combined with rotations and scales.
+    //
+    // shear matrix <   1,  YX,  0,
+    //                 XY,   1,  0,
+    //                  0,   0,  1 >
+
+    // Compute XY shear factor and make 2nd row orthogonal to 1st.
+    shr     = row[0].dot (row[1]);
+    row[1] -= shr * row[0];
+
+    // Now, compute Y scale.
+    scl.y = row[1].length ();
+    if (! checkForZeroScaleInRow (scl.y, row[1], exc))
+       return false;
+
+    // Normalize 2nd row and correct the XY shear factor for Y scaling.
+    row[1] /= scl.y; 
+    shr    /= scl.y;
+
+    // At this point, the upper 2x2 matrix in mat is orthonormal.
+    // Check for a coordinate system flip. If the determinant
+    // is -1, then flip the rotation matrix and adjust the scale(Y) 
+    // and shear(XY) factors to compensate.
+    if (row[0][0] * row[1][1] - row[0][1] * row[1][0] < 0)
+    {
+       row[1][0] *= -1;
+       row[1][1] *= -1;
+       scl[1] *= -1;
+       shr *= -1;
+    }
+
+    // Copy over the orthonormal rows into the returned matrix.
+    // The upper 2x2 matrix in mat is now a rotation matrix.
+    for (int i=0; i < 2; i++)
+    {
+       mat[i][0] = row[i][0]; 
+       mat[i][1] = row[i][1]; 
+    }
+
+    scl *= maxVal;
+
+    return true;
+}
+
+
+template <class T>
+void
+extractEuler (const Matrix33<T> &mat, T &rot)
+{
+    //
+    // Normalize the local x and y axes to remove scaling.
+    //
+
+    Vec2<T> i (mat[0][0], mat[0][1]);
+    Vec2<T> j (mat[1][0], mat[1][1]);
+
+    i.normalize();
+    j.normalize();
+
+    //
+    // Extract the angle, rot.
+    // 
+
+    rot = - Math<T>::atan2 (j[0], i[0]);
+}
+
+
+template <class T>
+bool 
+extractSHRT (const Matrix33<T> &mat,
+            Vec2<T> &s,
+            T       &h,
+            T       &r,
+            Vec2<T> &t,
+            bool    exc)
+{
+    Matrix33<T> rot;
+
+    rot = mat;
+    if (! extractAndRemoveScalingAndShear (rot, s, h, exc))
+       return false;
+
+    extractEuler (rot, r);
+
+    t.x = mat[2][0];
+    t.y = mat[2][1];
+
+    return true;
+}
+
+
+template <class T> 
+bool           
+checkForZeroScaleInRow (const T& scl, 
+                       const Vec2<T> &row,
+                       bool exc /* = true */ )
+{
+    for (int i = 0; i < 2; i++)
+    {
+       if ((abs (scl) < 1 && abs (row[i]) >= limits<T>::max() * abs (scl)))
+       {
+           if (exc)
+               throw Imath::ZeroScaleExc ("Cannot remove zero scaling "
+                                          "from matrix.");
+           else
+               return false;
+       }
+    }
+
+    return true;
+}
+
+
+template <class T>
+Matrix33<T>
+outerProduct (const Vec3<T> &a, const Vec3<T> &b )
+{
+    return Matrix33<T> (a.x*b.x, a.x*b.y, a.x*b.z,
+                        a.y*b.x, a.y*b.y, a.y*b.z,
+                        a.z*b.x, a.z*b.y, a.z*b.z );
+}
+
+
+// Computes the translation and rotation that brings the 'from' points
+// as close as possible to the 'to' points under the Frobenius norm.  
+// To be more specific, let x be the matrix of 'from' points and y be
+// the matrix of 'to' points, we want to find the matrix A of the form
+//    [ R t ]
+//    [ 0 1 ]
+// that minimizes
+//     || (A*x - y)^T * W * (A*x - y) ||_F
+// If doScaling is true, then a uniform scale is allowed also.
+template <typename T>
+Imath::M44d
+procrustesRotationAndTranslation (const Imath::Vec3<T>* A,  // From these
+                                  const Imath::Vec3<T>* B,  // To these
+                                  const T* weights, 
+                                  const size_t numPoints,
+                                  const bool doScaling = false);
+
+// Unweighted:
+template <typename T>
+Imath::M44d
+procrustesRotationAndTranslation (const Imath::Vec3<T>* A, 
+                                  const Imath::Vec3<T>* B, 
+                                  const size_t numPoints,
+                                  const bool doScaling = false);
+
+// Compute the SVD of a 3x3 matrix using Jacobi transformations.  This method
+// should be quite accurate (competitive with LAPACK) even for poorly
+// conditioned matrices, and because it has been written specifically for the
+// 3x3/4x4 case it is much faster than calling out to LAPACK.  
+//
+// The SVD of a 3x3/4x4 matrix A is defined as follows:
+//     A = U * S * V^T
+// where S is the diagonal matrix of singular values and both U and V are
+// orthonormal.  By convention, the entries S are all positive and sorted from
+// the largest to the smallest.  However, some uses of this function may
+// require that the matrix U*V^T have positive determinant; in this case, we
+// may make the smallest singular value negative to ensure that this is
+// satisfied.  
+//
+// Currently only available for single- and double-precision matrices.
+template <typename T>
+void
+jacobiSVD (const Imath::Matrix33<T>& A,
+           Imath::Matrix33<T>& U,
+           Imath::Vec3<T>& S,
+           Imath::Matrix33<T>& V,
+           const T tol = Imath::limits<T>::epsilon(),
+           const bool forcePositiveDeterminant = false);
+
+template <typename T>
+void
+jacobiSVD (const Imath::Matrix44<T>& A,
+           Imath::Matrix44<T>& U,
+           Imath::Vec4<T>& S,
+           Imath::Matrix44<T>& V,
+           const T tol = Imath::limits<T>::epsilon(),
+           const bool forcePositiveDeterminant = false);
+
+// Compute the eigenvalues (S) and the eigenvectors (V) of
+// a real symmetric matrix using Jacobi transformation.
+//
+// Jacobi transformation of a 3x3/4x4 matrix A outputs S and V:
+//     A = V * S * V^T
+// where V is orthonormal and S is the diagonal matrix of eigenvalues.
+// Input matrix A must be symmetric. A is also modified during
+// the computation so that upper diagonal entries of A become zero. 
+//
+template <typename T>
+void
+jacobiEigenSolver (Matrix33<T>& A,
+                   Vec3<T>& S,
+                   Matrix33<T>& V,
+                   const T tol);
+
+template <typename T>
+inline
+void
+jacobiEigenSolver (Matrix33<T>& A,
+                   Vec3<T>& S,
+                   Matrix33<T>& V)
+{
+    jacobiEigenSolver(A,S,V,limits<T>::epsilon());
+}
+
+template <typename T>
+void
+jacobiEigenSolver (Matrix44<T>& A,
+                   Vec4<T>& S,
+                   Matrix44<T>& V,
+                   const T tol);
+
+template <typename T>
+inline
+void
+jacobiEigenSolver (Matrix44<T>& A,
+                   Vec4<T>& S,
+                   Matrix44<T>& V)
+{
+    jacobiEigenSolver(A,S,V,limits<T>::epsilon());
+}
+
+// Compute a eigenvector corresponding to the abs max/min eigenvalue
+// of a real symmetric matrix using Jacobi transformation.
+template <typename TM, typename TV>
+void
+maxEigenVector (TM& A, TV& S);
+template <typename TM, typename TV>
+void
+minEigenVector (TM& A, TV& S);
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathPlane.h b/3rdparty/openexr/Imath/ImathPlane.h
new file mode 100644 (file)
index 0000000..aa59e3c
--- /dev/null
@@ -0,0 +1,256 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHPLANE_H
+#define INCLUDED_IMATHPLANE_H
+
+//----------------------------------------------------------------------
+//
+//     template class Plane3
+//
+//     The Imath::Plane3<> class represents a half space, so the
+//     normal may point either towards or away from origin.  The
+//     plane P can be represented by Imath::Plane3 as either p or -p
+//     corresponding to the two half-spaces on either side of the
+//     plane. Any function which computes a distance will return
+//     either negative or positive values for the distance indicating
+//     which half-space the point is in. Note that reflection, and
+//     intersection functions will operate as expected.
+//
+//----------------------------------------------------------------------
+
+#include "ImathVec.h"
+#include "ImathLine.h"
+
+namespace Imath {
+
+
+template <class T>
+class Plane3
+{
+  public:
+
+    Vec3<T>                    normal;
+    T                          distance;
+
+    Plane3() {}
+    Plane3(const Vec3<T> &normal, T distance);
+    Plane3(const Vec3<T> &point, const Vec3<T> &normal);
+    Plane3(const Vec3<T> &point1,
+          const Vec3<T> &point2,
+          const Vec3<T> &point3);
+
+    //----------------------
+    // Various set methods
+    //----------------------
+
+    void                        set(const Vec3<T> &normal,
+                                   T distance);
+
+    void                        set(const Vec3<T> &point,
+                                   const Vec3<T> &normal);
+
+    void                        set(const Vec3<T> &point1,
+                                   const Vec3<T> &point2,
+                                   const Vec3<T> &point3 );
+
+    //----------------------
+    // Utilities
+    //----------------------
+
+    bool                        intersect(const Line3<T> &line,
+                                          Vec3<T> &intersection) const;
+
+    bool                        intersectT(const Line3<T> &line,
+                                          T &parameter) const;
+
+    T                          distanceTo(const Vec3<T> &) const;
+
+    Vec3<T>                     reflectPoint(const Vec3<T> &) const;
+    Vec3<T>                     reflectVector(const Vec3<T> &) const;
+};
+
+
+//--------------------
+// Convenient typedefs
+//--------------------
+
+typedef Plane3<float> Plane3f;
+typedef Plane3<double> Plane3d;
+
+
+//---------------
+// Implementation
+//---------------
+
+template <class T>
+inline Plane3<T>::Plane3(const Vec3<T> &p0,
+                        const Vec3<T> &p1,
+                        const Vec3<T> &p2)
+{
+    set(p0,p1,p2);
+}
+
+template <class T>
+inline Plane3<T>::Plane3(const Vec3<T> &n, T d)
+{
+    set(n, d);
+}
+
+template <class T>
+inline Plane3<T>::Plane3(const Vec3<T> &p, const Vec3<T> &n)
+{
+    set(p, n);
+}
+
+template <class T>
+inline void Plane3<T>::set(const Vec3<T>& point1,
+                          const Vec3<T>& point2,
+                          const Vec3<T>& point3)
+{
+    normal = (point2 - point1) % (point3 - point1);
+    normal.normalize();
+    distance = normal ^ point1;
+}
+
+template <class T>
+inline void Plane3<T>::set(const Vec3<T>& point, const Vec3<T>& n)
+{
+    normal = n;
+    normal.normalize();
+    distance = normal ^ point;
+}
+
+template <class T>
+inline void Plane3<T>::set(const Vec3<T>& n, T d)
+{
+    normal = n;
+    normal.normalize();
+    distance = d;
+}
+
+template <class T>
+inline T Plane3<T>::distanceTo(const Vec3<T> &point) const
+{
+    return (point ^ normal) - distance;
+}
+
+template <class T>
+inline Vec3<T> Plane3<T>::reflectPoint(const Vec3<T> &point) const
+{
+    return normal * distanceTo(point) * -2.0 + point;
+}
+
+
+template <class T>
+inline Vec3<T> Plane3<T>::reflectVector(const Vec3<T> &v) const
+{
+    return normal * (normal ^ v)  * 2.0 - v;
+}
+
+
+template <class T>
+inline bool Plane3<T>::intersect(const Line3<T>& line, Vec3<T>& point) const
+{
+    T d = normal ^ line.dir;
+    if ( d == 0.0 ) return false;
+    T t = - ((normal ^ line.pos) - distance) /  d;
+    point = line(t);
+    return true;
+}
+
+template <class T>
+inline bool Plane3<T>::intersectT(const Line3<T>& line, T &t) const
+{
+    T d = normal ^ line.dir;
+    if ( d == 0.0 ) return false;
+    t = - ((normal ^ line.pos) - distance) /  d;
+    return true;
+}
+
+template<class T>
+std::ostream &operator<< (std::ostream &o, const Plane3<T> &plane)
+{
+    return o << "(" << plane.normal << ", " << plane.distance
+            << ")";
+}
+
+template<class T>
+Plane3<T> operator* (const Plane3<T> &plane, const Matrix44<T> &M)
+{
+    //                        T
+    //                     -1
+    // Could also compute M    but that would suck.
+    //
+
+    Vec3<T> dir1   = Vec3<T> (1, 0, 0) % plane.normal;
+    T dir1Len      = dir1 ^ dir1;
+
+    Vec3<T> tmp    = Vec3<T> (0, 1, 0) % plane.normal;
+    T tmpLen       = tmp ^ tmp;
+
+    if (tmpLen > dir1Len)
+    {
+       dir1      = tmp;
+       dir1Len   = tmpLen;
+    }
+
+    tmp            = Vec3<T> (0, 0, 1) % plane.normal;
+    tmpLen         = tmp ^ tmp;
+
+    if (tmpLen > dir1Len)
+    {
+       dir1      = tmp;
+    }
+
+    Vec3<T> dir2   = dir1 % plane.normal;
+    Vec3<T> point  = plane.distance * plane.normal;
+
+    return Plane3<T> ( point         * M,
+                     (point + dir2) * M,
+                     (point + dir1) * M );
+}
+
+template<class T>
+Plane3<T> operator- (const Plane3<T> &plane)
+{
+    return Plane3<T>(-plane.normal,-plane.distance);
+}
+
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathPlatform.h b/3rdparty/openexr/Imath/ImathPlatform.h
new file mode 100644 (file)
index 0000000..91e82cc
--- /dev/null
@@ -0,0 +1,112 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHPLATFORM_H
+#define INCLUDED_IMATHPLATFORM_H
+
+//----------------------------------------------------------------------------
+//
+//     ImathPlatform.h
+//
+//     This file contains functions and constants which aren't 
+//     provided by the system libraries, compilers, or includes on 
+//     certain platforms.
+//
+//----------------------------------------------------------------------------
+
+#include <math.h>
+
+#ifndef M_PI
+    #define M_PI    3.14159265358979323846
+#endif
+
+#ifndef M_PI_2
+    #define M_PI_2  1.57079632679489661923 // pi/2
+#endif
+
+
+//-----------------------------------------------------------------------------
+//
+//    Some, but not all, C++ compilers support the C99 restrict
+//    keyword or some variant of it, for example, __restrict.
+//
+//-----------------------------------------------------------------------------
+
+#if defined __GNUC__
+
+    //
+    // supports __restrict
+    //
+
+    #define IMATH_RESTRICT __restrict
+
+#elif defined (__INTEL_COMPILER) || \
+      defined(__ICL) || \
+      defined(__ICC) || \
+      defined(__ECC)
+
+    //
+    // supports restrict
+    //
+
+    #define IMATH_RESTRICT restrict
+
+#elif defined __sgi
+
+    //
+    // supports restrict
+    //
+
+    #define IMATH_RESTRICT restrict
+
+#elif defined _MSC_VER
+
+    //
+    // supports __restrict
+    //
+
+//    #define IMATH_RESTRICT __restrict
+    #define IMATH_RESTRICT
+
+#else
+
+    //
+    // restrict / __restrict not supported
+    //
+
+    #define IMATH_RESTRICT
+
+#endif
+
+#endif // INCLUDED_IMATHPLATFORM_H
diff --git a/3rdparty/openexr/Imath/ImathQuat.h b/3rdparty/openexr/Imath/ImathQuat.h
new file mode 100644 (file)
index 0000000..a6ee936
--- /dev/null
@@ -0,0 +1,963 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHQUAT_H
+#define INCLUDED_IMATHQUAT_H
+
+//----------------------------------------------------------------------
+//
+//     template class Quat<T>
+//
+//     "Quaternions came from Hamilton ... and have been an unmixed
+//     evil to those who have touched them in any way. Vector is a
+//     useless survival ... and has never been of the slightest use
+//     to any creature."
+//
+//         - Lord Kelvin
+//
+//     This class implements the quaternion numerical type -- you
+//      will probably want to use this class to represent orientations
+//     in R3 and to convert between various euler angle reps. You
+//     should probably use Imath::Euler<> for that.
+//
+//----------------------------------------------------------------------
+
+#include "ImathExc.h"
+#include "ImathMatrix.h"
+
+#include <iostream>
+
+namespace Imath {
+
+#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
+// Disable MS VC++ warnings about conversion from double to float
+#pragma warning(disable:4244)
+#endif
+
+template <class T>
+class Quat
+{
+  public:
+
+    T                  r;          // real part
+    Vec3<T>            v;          // imaginary vector
+
+
+    //-----------------------------------------------------
+    // Constructors - default constructor is identity quat
+    //-----------------------------------------------------
+
+    Quat ();
+
+    template <class S>
+    Quat (const Quat<S> &q);
+
+    Quat (T s, T i, T j, T k);
+
+    Quat (T s, Vec3<T> d);
+
+    static Quat<T> identity ();
+
+
+    //-------------------------------------------------
+    // Basic Algebra - Operators and Methods
+    //  The operator return values are *NOT* normalized
+    //
+    //  operator^ and euclideanInnnerProduct() both
+    //            implement the 4D dot product
+    //
+    //  operator/ uses the inverse() quaternion
+    //
+    // operator~ is conjugate -- if (S+V) is quat then
+    //           the conjugate (S+V)* == (S-V)
+    //
+    //  some operators (*,/,*=,/=) treat the quat as
+    // a 4D vector when one of the operands is scalar
+    //-------------------------------------------------
+
+    const Quat<T> &    operator =      (const Quat<T> &q);
+    const Quat<T> &    operator *=     (const Quat<T> &q);
+    const Quat<T> &    operator *=     (T t);
+    const Quat<T> &    operator /=     (const Quat<T> &q);
+    const Quat<T> &    operator /=     (T t);
+    const Quat<T> &    operator +=     (const Quat<T> &q);
+    const Quat<T> &    operator -=     (const Quat<T> &q);
+    T &                        operator []     (int index);    // as 4D vector
+    T                  operator []     (int index) const;
+
+    template <class S> bool operator == (const Quat<S> &q) const;
+    template <class S> bool operator != (const Quat<S> &q) const;
+
+    Quat<T> &          invert ();              // this -> 1 / this
+    Quat<T>            inverse () const;
+    Quat<T> &          normalize ();           // returns this
+    Quat<T>            normalized () const;
+    T                  length () const;        // in R4
+    Vec3<T>             rotateVector(const Vec3<T> &original) const;
+    T                   euclideanInnerProduct(const Quat<T> &q) const;
+
+    //-----------------------
+    // Rotation conversion
+    //-----------------------
+
+    Quat<T> &          setAxisAngle (const Vec3<T> &axis, T radians);
+
+    Quat<T> &          setRotation (const Vec3<T> &fromDirection,
+                                    const Vec3<T> &toDirection);
+
+    T                  angle () const;
+    Vec3<T>            axis () const;
+
+    Matrix33<T>                toMatrix33 () const;
+    Matrix44<T>                toMatrix44 () const;
+
+    Quat<T>            log () const;
+    Quat<T>            exp () const;
+
+
+  private:
+
+    void               setRotationInternal (const Vec3<T> &f0,
+                                            const Vec3<T> &t0,
+                                            Quat<T> &q);
+};
+
+
+template<class T>
+Quat<T>                        slerp (const Quat<T> &q1, const Quat<T> &q2, T t);
+
+template<class T>
+Quat<T>                        slerpShortestArc
+                              (const Quat<T> &q1, const Quat<T> &q2, T t);
+
+
+template<class T>
+Quat<T>                        squad (const Quat<T> &q1, const Quat<T> &q2, 
+                              const Quat<T> &qa, const Quat<T> &qb, T t);
+
+template<class T>
+void                   intermediate (const Quat<T> &q0, const Quat<T> &q1, 
+                                     const Quat<T> &q2, const Quat<T> &q3,
+                                     Quat<T> &qa, Quat<T> &qb);
+
+template<class T>
+Matrix33<T>            operator * (const Matrix33<T> &M, const Quat<T> &q);
+
+template<class T>
+Matrix33<T>            operator * (const Quat<T> &q, const Matrix33<T> &M);
+
+template<class T>
+std::ostream &         operator << (std::ostream &o, const Quat<T> &q);
+
+template<class T>
+Quat<T>                        operator * (const Quat<T> &q1, const Quat<T> &q2);
+
+template<class T>
+Quat<T>                        operator / (const Quat<T> &q1, const Quat<T> &q2);
+
+template<class T>
+Quat<T>                        operator / (const Quat<T> &q, T t);
+
+template<class T>
+Quat<T>                        operator * (const Quat<T> &q, T t);
+
+template<class T>
+Quat<T>                        operator * (T t, const Quat<T> &q);
+
+template<class T>
+Quat<T>                        operator + (const Quat<T> &q1, const Quat<T> &q2);
+
+template<class T>
+Quat<T>                        operator - (const Quat<T> &q1, const Quat<T> &q2);
+
+template<class T>
+Quat<T>                        operator ~ (const Quat<T> &q);
+
+template<class T>
+Quat<T>                        operator - (const Quat<T> &q);
+
+template<class T>
+Vec3<T>                        operator * (const Vec3<T> &v, const Quat<T> &q);
+
+
+//--------------------
+// Convenient typedefs
+//--------------------
+
+typedef Quat<float>    Quatf;
+typedef Quat<double>   Quatd;
+
+
+//---------------
+// Implementation
+//---------------
+
+template<class T>
+inline
+Quat<T>::Quat (): r (1), v (0, 0, 0)
+{
+    // empty
+}
+
+
+template<class T>
+template <class S>
+inline
+Quat<T>::Quat (const Quat<S> &q): r (q.r), v (q.v)
+{
+    // empty
+}
+
+
+template<class T>
+inline
+Quat<T>::Quat (T s, T i, T j, T k): r (s), v (i, j, k)
+{
+    // empty
+}
+
+
+template<class T>
+inline
+Quat<T>::Quat (T s, Vec3<T> d): r (s), v (d)
+{
+    // empty
+}
+
+
+template<class T>
+inline Quat<T>
+Quat<T>::identity ()
+{
+    return Quat<T>();
+}
+
+template<class T>
+inline const Quat<T> &
+Quat<T>::operator = (const Quat<T> &q)
+{
+    r = q.r;
+    v = q.v;
+    return *this;
+}
+
+
+template<class T>
+inline const Quat<T> &
+Quat<T>::operator *= (const Quat<T> &q)
+{
+    T rtmp = r * q.r - (v ^ q.v);
+    v = r * q.v + v * q.r + v % q.v;
+    r = rtmp;
+    return *this;
+}
+
+
+template<class T>
+inline const Quat<T> &
+Quat<T>::operator *= (T t)
+{
+    r *= t;
+    v *= t;
+    return *this;
+}
+
+
+template<class T>
+inline const Quat<T> &
+Quat<T>::operator /= (const Quat<T> &q)
+{
+    *this = *this * q.inverse();
+    return *this;
+}
+
+
+template<class T>
+inline const Quat<T> &
+Quat<T>::operator /= (T t)
+{
+    r /= t;
+    v /= t;
+    return *this;
+}
+
+
+template<class T>
+inline const Quat<T> &
+Quat<T>::operator += (const Quat<T> &q)
+{
+    r += q.r;
+    v += q.v;
+    return *this;
+}
+
+
+template<class T>
+inline const Quat<T> &
+Quat<T>::operator -= (const Quat<T> &q)
+{
+    r -= q.r;
+    v -= q.v;
+    return *this;
+}
+
+
+template<class T>
+inline T &
+Quat<T>::operator [] (int index)
+{
+    return index ? v[index - 1] : r;
+}
+
+
+template<class T>
+inline T
+Quat<T>::operator [] (int index) const
+{
+    return index ? v[index - 1] : r;
+}
+
+
+template <class T>
+template <class S>
+inline bool
+Quat<T>::operator == (const Quat<S> &q) const
+{
+    return r == q.r && v == q.v;
+}
+
+
+template <class T>
+template <class S>
+inline bool
+Quat<T>::operator != (const Quat<S> &q) const
+{
+    return r != q.r || v != q.v;
+}
+
+
+template<class T>
+inline T
+operator ^ (const Quat<T>& q1 ,const Quat<T>& q2)
+{
+    return q1.r * q2.r + (q1.v ^ q2.v);
+}
+
+
+template <class T>
+inline T
+Quat<T>::length () const
+{
+    return Math<T>::sqrt (r * r + (v ^ v));
+}
+
+
+template <class T>
+inline Quat<T> &
+Quat<T>::normalize ()
+{
+    if (T l = length())
+    {
+       r /= l;
+       v /= l;
+    }
+    else
+    {
+       r = 1;
+       v = Vec3<T> (0);
+    }
+
+    return *this;
+}
+
+
+template <class T>
+inline Quat<T>
+Quat<T>::normalized () const
+{
+    if (T l = length())
+       return Quat (r / l, v / l);
+
+    return Quat();
+}
+
+
+template<class T>
+inline Quat<T>
+Quat<T>::inverse () const
+{
+    //
+    // 1    Q*
+    // - = ----   where Q* is conjugate (operator~)
+    // Q   Q* Q   and (Q* Q) == Q ^ Q (4D dot)
+    //
+
+    T qdot = *this ^ *this;
+    return Quat (r / qdot, -v / qdot);
+}
+
+
+template<class T>
+inline Quat<T> &
+Quat<T>::invert ()
+{
+    T qdot = (*this) ^ (*this);
+    r /= qdot;
+    v = -v / qdot;
+    return *this;
+}
+
+
+template<class T>
+inline Vec3<T>
+Quat<T>::rotateVector(const Vec3<T>& original) const
+{
+    //
+    // Given a vector p and a quaternion q (aka this),
+    // calculate p' = qpq*
+    //
+    // Assumes unit quaternions (because non-unit
+    // quaternions cannot be used to rotate vectors
+    // anyway).
+    //
+
+    Quat<T> vec (0, original);  // temporarily promote grade of original
+    Quat<T> inv (*this);
+    inv.v *= -1;                // unit multiplicative inverse
+    Quat<T> result = *this * vec * inv;
+    return result.v;
+}
+
+
+template<class T>
+inline T 
+Quat<T>::euclideanInnerProduct (const Quat<T> &q) const
+{
+    return r * q.r + v.x * q.v.x + v.y * q.v.y + v.z * q.v.z;
+}
+
+
+template<class T>
+T
+angle4D (const Quat<T> &q1, const Quat<T> &q2)
+{
+    //
+    // Compute the angle between two quaternions,
+    // interpreting the quaternions as 4D vectors.
+    //
+
+    Quat<T> d = q1 - q2;
+    T lengthD = Math<T>::sqrt (d ^ d);
+
+    Quat<T> s = q1 + q2;
+    T lengthS = Math<T>::sqrt (s ^ s);
+
+    return 2 * Math<T>::atan2 (lengthD, lengthS);
+}
+
+
+template<class T>
+Quat<T>
+slerp (const Quat<T> &q1, const Quat<T> &q2, T t)
+{
+    //
+    // Spherical linear interpolation.
+    // Assumes q1 and q2 are normalized and that q1 != -q2.
+    //
+    // This method does *not* interpolate along the shortest
+    // arc between q1 and q2.  If you desire interpolation
+    // along the shortest arc, and q1^q2 is negative, then
+    // consider calling slerpShortestArc(), below, or flipping
+    // the second quaternion explicitly.
+    //
+    // The implementation of squad() depends on a slerp()
+    // that interpolates as is, without the automatic
+    // flipping.
+    //
+    // Don Hatch explains the method we use here on his
+    // web page, The Right Way to Calculate Stuff, at
+    // http://www.plunk.org/~hatch/rightway.php
+    //
+
+    T a = angle4D (q1, q2);
+    T s = 1 - t;
+
+    Quat<T> q = sinx_over_x (s * a) / sinx_over_x (a) * s * q1 +
+               sinx_over_x (t * a) / sinx_over_x (a) * t * q2;
+
+    return q.normalized();
+}
+
+
+template<class T>
+Quat<T>
+slerpShortestArc (const Quat<T> &q1, const Quat<T> &q2, T t)
+{
+    //
+    // Spherical linear interpolation along the shortest
+    // arc from q1 to either q2 or -q2, whichever is closer.
+    // Assumes q1 and q2 are unit quaternions.
+    //
+
+    if ((q1 ^ q2) >= 0)
+        return slerp (q1, q2, t);
+    else
+        return slerp (q1, -q2, t);
+}
+
+
+template<class T>
+Quat<T>
+spline (const Quat<T> &q0, const Quat<T> &q1,
+        const Quat<T> &q2, const Quat<T> &q3,
+       T t)
+{
+    //
+    // Spherical Cubic Spline Interpolation -
+    // from Advanced Animation and Rendering
+    // Techniques by Watt and Watt, Page 366:
+    // A spherical curve is constructed using three
+    // spherical linear interpolations of a quadrangle
+    // of unit quaternions: q1, qa, qb, q2.
+    // Given a set of quaternion keys: q0, q1, q2, q3,
+    // this routine does the interpolation between
+    // q1 and q2 by constructing two intermediate
+    // quaternions: qa and qb. The qa and qb are 
+    // computed by the intermediate function to 
+    // guarantee the continuity of tangents across
+    // adjacent cubic segments. The qa represents in-tangent
+    // for q1 and the qb represents the out-tangent for q2.
+    // 
+    // The q1 q2 is the cubic segment being interpolated. 
+    // The q0 is from the previous adjacent segment and q3 is 
+    // from the next adjacent segment. The q0 and q3 are used
+    // in computing qa and qb.
+    // 
+
+    Quat<T> qa = intermediate (q0, q1, q2);
+    Quat<T> qb = intermediate (q1, q2, q3);
+    Quat<T> result = squad (q1, qa, qb, q2, t);
+
+    return result;
+}
+
+
+template<class T>
+Quat<T>
+squad (const Quat<T> &q1, const Quat<T> &qa,
+       const Quat<T> &qb, const Quat<T> &q2,
+       T t)
+{
+    //
+    // Spherical Quadrangle Interpolation -
+    // from Advanced Animation and Rendering
+    // Techniques by Watt and Watt, Page 366:
+    // It constructs a spherical cubic interpolation as 
+    // a series of three spherical linear interpolations 
+    // of a quadrangle of unit quaternions. 
+    //     
+  
+    Quat<T> r1 = slerp (q1, q2, t);
+    Quat<T> r2 = slerp (qa, qb, t);
+    Quat<T> result = slerp (r1, r2, 2 * t * (1 - t));
+
+    return result;
+}
+
+
+template<class T>
+Quat<T>
+intermediate (const Quat<T> &q0, const Quat<T> &q1, const Quat<T> &q2)
+{
+    //
+    // From advanced Animation and Rendering
+    // Techniques by Watt and Watt, Page 366:
+    // computing the inner quadrangle 
+    // points (qa and qb) to guarantee tangent
+    // continuity.
+    // 
+
+    Quat<T> q1inv = q1.inverse();
+    Quat<T> c1 = q1inv * q2;
+    Quat<T> c2 = q1inv * q0;
+    Quat<T> c3 = (T) (-0.25) * (c2.log() + c1.log());
+    Quat<T> qa = q1 * c3.exp();
+    qa.normalize();
+    return qa;
+}
+
+
+template <class T>
+inline Quat<T>
+Quat<T>::log () const
+{
+    //
+    // For unit quaternion, from Advanced Animation and 
+    // Rendering Techniques by Watt and Watt, Page 366:
+    //
+
+    T theta = Math<T>::acos (std::min (r, (T) 1.0));
+
+    if (theta == 0)
+       return Quat<T> (0, v);
+    
+    T sintheta = Math<T>::sin (theta);
+    
+    T k;
+    if (abs (sintheta) < 1 && abs (theta) >= limits<T>::max() * abs (sintheta))
+       k = 1;
+    else
+       k = theta / sintheta;
+
+    return Quat<T> ((T) 0, v.x * k, v.y * k, v.z * k);
+}
+
+
+template <class T>
+inline Quat<T>
+Quat<T>::exp () const
+{
+    //
+    // For pure quaternion (zero scalar part):
+    // from Advanced Animation and Rendering
+    // Techniques by Watt and Watt, Page 366:
+    //
+
+    T theta = v.length();
+    T sintheta = Math<T>::sin (theta);
+    
+    T k;
+    if (abs (theta) < 1 && abs (sintheta) >= limits<T>::max() * abs (theta))
+       k = 1;
+    else
+       k = sintheta / theta;
+
+    T costheta = Math<T>::cos (theta);
+
+    return Quat<T> (costheta, v.x * k, v.y * k, v.z * k);
+}
+
+
+template <class T>
+inline T
+Quat<T>::angle () const
+{
+    return 2 * Math<T>::atan2 (v.length(), r);
+}
+
+
+template <class T>
+inline Vec3<T>
+Quat<T>::axis () const
+{
+    return v.normalized();
+}
+
+
+template <class T>
+inline Quat<T> &
+Quat<T>::setAxisAngle (const Vec3<T> &axis, T radians)
+{
+    r = Math<T>::cos (radians / 2);
+    v = axis.normalized() * Math<T>::sin (radians / 2);
+    return *this;
+}
+
+
+template <class T>
+Quat<T> &
+Quat<T>::setRotation (const Vec3<T> &from, const Vec3<T> &to)
+{
+    //
+    // Create a quaternion that rotates vector from into vector to,
+    // such that the rotation is around an axis that is the cross
+    // product of from and to.
+    //
+    // This function calls function setRotationInternal(), which is
+    // numerically accurate only for rotation angles that are not much
+    // greater than pi/2.  In order to achieve good accuracy for angles
+    // greater than pi/2, we split large angles in half, and rotate in
+    // two steps.
+    //
+
+    //
+    // Normalize from and to, yielding f0 and t0.
+    //
+
+    Vec3<T> f0 = from.normalized();
+    Vec3<T> t0 = to.normalized();
+
+    if ((f0 ^ t0) >= 0)
+    {
+       //
+       // The rotation angle is less than or equal to pi/2.
+       //
+
+       setRotationInternal (f0, t0, *this);
+    }
+    else
+    {
+       //
+       // The angle is greater than pi/2.  After computing h0,
+       // which is halfway between f0 and t0, we rotate first
+       // from f0 to h0, then from h0 to t0.
+       //
+
+       Vec3<T> h0 = (f0 + t0).normalized();
+
+       if ((h0 ^ h0) != 0)
+       {
+           setRotationInternal (f0, h0, *this);
+
+           Quat<T> q;
+           setRotationInternal (h0, t0, q);
+
+           *this *= q;
+       }
+       else
+       {
+           //
+           // f0 and t0 point in exactly opposite directions.
+           // Pick an arbitrary axis that is orthogonal to f0,
+           // and rotate by pi.
+           //
+
+           r = T (0);
+
+           Vec3<T> f02 = f0 * f0;
+
+           if (f02.x <= f02.y && f02.x <= f02.z)
+               v = (f0 % Vec3<T> (1, 0, 0)).normalized();
+           else if (f02.y <= f02.z)
+               v = (f0 % Vec3<T> (0, 1, 0)).normalized();
+           else
+               v = (f0 % Vec3<T> (0, 0, 1)).normalized();
+       }
+    }
+
+    return *this;
+}
+
+
+template <class T>
+void
+Quat<T>::setRotationInternal (const Vec3<T> &f0, const Vec3<T> &t0, Quat<T> &q)
+{
+    //
+    // The following is equivalent to setAxisAngle(n,2*phi),
+    // where the rotation axis, n, is orthogonal to the f0 and
+    // t0 vectors, and 2*phi is the angle between f0 and t0.
+    //
+    // This function is called by setRotation(), above; it assumes
+    // that f0 and t0 are normalized and that the angle between
+    // them is not much greater than pi/2.  This function becomes
+    // numerically inaccurate if f0 and t0 point into nearly
+    // opposite directions.
+    //
+
+    //
+    // Find a normalized vector, h0, that is halfway between f0 and t0.
+    // The angle between f0 and h0 is phi.
+    //
+
+    Vec3<T> h0 = (f0 + t0).normalized();
+
+    //
+    // Store the rotation axis and rotation angle.
+    //
+
+    q.r = f0 ^ h0;     //  f0 ^ h0 == cos (phi)
+    q.v = f0 % h0;     // (f0 % h0).length() == sin (phi)
+}
+
+
+template<class T>
+Matrix33<T>
+Quat<T>::toMatrix33() const
+{
+    return Matrix33<T> (1 - 2 * (v.y * v.y + v.z * v.z),
+                           2 * (v.x * v.y + v.z * r),
+                           2 * (v.z * v.x - v.y * r),
+
+                           2 * (v.x * v.y - v.z * r),
+                       1 - 2 * (v.z * v.z + v.x * v.x),
+                           2 * (v.y * v.z + v.x * r),
+
+                           2 * (v.z * v.x + v.y * r),
+                           2 * (v.y * v.z - v.x * r),
+                       1 - 2 * (v.y * v.y + v.x * v.x));
+}
+
+template<class T>
+Matrix44<T>
+Quat<T>::toMatrix44() const
+{
+    return Matrix44<T> (1 - 2 * (v.y * v.y + v.z * v.z),
+                           2 * (v.x * v.y + v.z * r),
+                           2 * (v.z * v.x - v.y * r),
+                           0,
+                           2 * (v.x * v.y - v.z * r),
+                       1 - 2 * (v.z * v.z + v.x * v.x),
+                           2 * (v.y * v.z + v.x * r),
+                           0,
+                           2 * (v.z * v.x + v.y * r),
+                           2 * (v.y * v.z - v.x * r),
+                       1 - 2 * (v.y * v.y + v.x * v.x),
+                           0,
+                           0,
+                           0,
+                           0,
+                           1);
+}
+
+
+template<class T>
+inline Matrix33<T>
+operator * (const Matrix33<T> &M, const Quat<T> &q)
+{
+    return M * q.toMatrix33();
+}
+
+
+template<class T>
+inline Matrix33<T>
+operator * (const Quat<T> &q, const Matrix33<T> &M)
+{
+    return q.toMatrix33() * M;
+}
+
+
+template<class T>
+std::ostream &
+operator << (std::ostream &o, const Quat<T> &q)
+{
+    return o << "(" << q.r
+            << " " << q.v.x
+            << " " << q.v.y
+            << " " << q.v.z
+            << ")";
+}
+
+
+template<class T>
+inline Quat<T>
+operator * (const Quat<T> &q1, const Quat<T> &q2)
+{
+    return Quat<T> (q1.r * q2.r - (q1.v ^ q2.v),
+                   q1.r * q2.v + q1.v * q2.r + q1.v % q2.v);
+}
+
+
+template<class T>
+inline Quat<T>
+operator / (const Quat<T> &q1, const Quat<T> &q2)
+{
+    return q1 * q2.inverse();
+}
+
+
+template<class T>
+inline Quat<T>
+operator / (const Quat<T> &q, T t)
+{
+    return Quat<T> (q.r / t, q.v / t);
+}
+
+
+template<class T>
+inline Quat<T>
+operator * (const Quat<T> &q, T t)
+{
+    return Quat<T> (q.r * t, q.v * t);
+}
+
+
+template<class T>
+inline Quat<T>
+operator * (T t, const Quat<T> &q)
+{
+    return Quat<T> (q.r * t, q.v * t);
+}
+
+
+template<class T>
+inline Quat<T>
+operator + (const Quat<T> &q1, const Quat<T> &q2)
+{
+    return Quat<T> (q1.r + q2.r, q1.v + q2.v);
+}
+
+
+template<class T>
+inline Quat<T>
+operator - (const Quat<T> &q1, const Quat<T> &q2)
+{
+    return Quat<T> (q1.r - q2.r, q1.v - q2.v);
+}
+
+
+template<class T>
+inline Quat<T>
+operator ~ (const Quat<T> &q)
+{
+    return Quat<T> (q.r, -q.v);
+}
+
+
+template<class T>
+inline Quat<T>
+operator - (const Quat<T> &q)
+{
+    return Quat<T> (-q.r, -q.v);
+}
+
+
+template<class T>
+inline Vec3<T>
+operator * (const Vec3<T> &v, const Quat<T> &q)
+{
+    Vec3<T> a = q.v % v;
+    Vec3<T> b = q.v % a;
+    return v + T (2) * (q.r * a + b);
+}
+
+#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
+#pragma warning(default:4244)
+#endif
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathRandom.cpp b/3rdparty/openexr/Imath/ImathRandom.cpp
new file mode 100644 (file)
index 0000000..b261b39
--- /dev/null
@@ -0,0 +1,195 @@
+
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+//-----------------------------------------------------------------------------
+//
+//     Routines that generate pseudo-random numbers compatible
+//     with the standard erand48(), nrand48(), etc. functions.
+//
+//-----------------------------------------------------------------------------
+
+#include "ImathRandom.h"
+#include "ImathInt64.h"
+
+namespace Imath {
+namespace {
+
+//
+// Static state used by Imath::drand48(), Imath::lrand48() and Imath::srand48()
+//
+
+unsigned short staticState[3] = {0, 0, 0};
+
+
+void
+rand48Next (unsigned short state[3])
+{
+    //
+    // drand48() and friends are all based on a linear congruential
+    // sequence,
+    //
+    //   x[n+1] = (a * x[n] + c) % m,
+    // 
+    // where a and c are as specified below, and m == (1 << 48)
+    //
+
+    static const Int64 a = Int64 (0x5deece66dLL);
+    static const Int64 c = Int64 (0xbLL);
+
+    //
+    // Assemble the 48-bit value x[n] from the
+    // three 16-bit values stored in state.
+    //
+
+    Int64 x = (Int64 (state[2]) << 32) |
+             (Int64 (state[1]) << 16) |
+              Int64 (state[0]);
+
+    //
+    // Compute x[n+1], except for the "modulo m" part.
+    //
+
+    x = a * x + c;
+
+    //
+    // Disassemble the 48 least significant bits of x[n+1] into
+    // three 16-bit values.  Discard the 16 most significant bits;
+    // this takes care of the "modulo m" operation.
+    //
+    // We assume that sizeof (unsigned short) == 2.
+    //
+
+    state[2] = (unsigned short)(x >> 32);
+    state[1] = (unsigned short)(x >> 16);
+    state[0] = (unsigned short)(x);
+}
+
+} // namespace
+
+
+double
+erand48 (unsigned short state[3])
+{
+    //
+    // Generate double-precision floating-point values between 0.0 and 1.0:
+    // 
+    // The exponent is set to 0x3ff, which indicates a value greater
+    // than or equal to 1.0, and less than 2.0.  The 48 most significant
+    // bits of the significand (mantissa) are filled with pseudo-random
+    // bits generated by rand48Next().  The remaining 4 bits are a copy
+    // of the 4 most significant bits of the significand.  This results
+    // in bit patterns between 0x3ff0000000000000 and 0x3fffffffffffffff,
+    // which correspond to uniformly distributed floating-point values
+    // between 1.0 and 1.99999999999999978.  Subtracting 1.0 from those
+    // values produces numbers between 0.0 and 0.99999999999999978, that
+    // is, between 0.0 and 1.0-DBL_EPSILON.
+    // 
+
+    rand48Next (state);
+
+    union {double d; Int64 i;} u;
+
+    u.i = (Int64 (0x3ff)    << 52) |   // sign and exponent
+         (Int64 (state[2]) << 36) |    // significand
+         (Int64 (state[1]) << 20) |
+         (Int64 (state[0]) <<  4) |
+         (Int64 (state[2]) >> 12);
+
+    return u.d - 1;
+}
+
+
+double
+drand48 ()
+{
+    return Imath::erand48 (staticState);
+}
+
+
+long int
+nrand48 (unsigned short state[3])
+{
+    //
+    // Generate uniformly distributed integers between 0 and 0x7fffffff.
+    // 
+
+    rand48Next (state);
+
+    return ((long int) (state[2]) << 15) |
+          ((long int) (state[1]) >>  1);
+}
+
+
+long int
+lrand48 ()
+{
+    return Imath::nrand48 (staticState);
+}
+
+
+void
+srand48 (long int seed)
+{
+    staticState[2] = (unsigned short)(seed >> 16);
+    staticState[1] = (unsigned short)(seed);
+    staticState[0] = 0x330e;
+}
+
+
+float
+Rand32::nextf ()
+{
+    //
+    // Generate single-precision floating-point values between 0.0 and 1.0:
+    // 
+    // The exponent is set to 0x7f, which indicates a value greater than
+    // or equal to 1.0, and less than 2.0.  The 23 bits of the significand
+    // (mantissa) are filled with pseudo-random bits generated by
+    // Rand32::next().  This results in in bit patterns between 0x3f800000
+    // and 0x3fffffff, which correspond to uniformly distributed floating-
+    // point values between 1.0 and 1.99999988.  Subtracting 1.0 from
+    // those values produces numbers between 0.0 and 0.99999988, that is,
+    // between 0.0 and 1.0-FLT_EPSILON.
+    // 
+
+    next ();
+
+    union {float f; unsigned int i;} u;
+
+    u.i = 0x3f800000 | (_state & 0x7fffff);
+    return u.f - 1;
+}
+
+} // namespace Imath
diff --git a/3rdparty/openexr/Imath/ImathRandom.h b/3rdparty/openexr/Imath/ImathRandom.h
new file mode 100644 (file)
index 0000000..4351975
--- /dev/null
@@ -0,0 +1,398 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHRANDOM_H
+#define INCLUDED_IMATHRANDOM_H
+
+//-----------------------------------------------------------------------------
+//
+//     Generators for uniformly distributed pseudo-random numbers and
+//     functions that use those generators to generate numbers with
+//     non-uniform distributions:
+//
+//             class Rand32
+//             class Rand48
+//             solidSphereRand()
+//             hollowSphereRand()
+//             gaussRand()
+//             gaussSphereRand()
+//
+//     Note: class Rand48() calls erand48() and nrand48(), which are not
+//     available on all operating systems.  For compatibility we include
+//     our own versions of erand48() and nrand48().  Our functions have
+//     been reverse-engineered from the corresponding Unix/Linux man page.
+//
+//-----------------------------------------------------------------------------
+
+#include <stdlib.h>
+#include <math.h>
+
+namespace Imath {
+
+//-----------------------------------------------
+// Fast random-number generator that generates
+// a uniformly distributed sequence with a period
+// length of 2^32.
+//-----------------------------------------------
+
+class Rand32
+{
+  public:
+
+    //------------
+    // Constructor
+    //------------
+
+    Rand32 (unsigned long int seed = 0);
+    
+
+    //--------------------------------
+    // Re-initialize with a given seed
+    //--------------------------------
+
+    void               init (unsigned long int seed);
+
+
+    //----------------------------------------------------------
+    // Get the next value in the sequence (range: [false, true])
+    //----------------------------------------------------------
+
+    bool               nextb ();
+
+
+    //---------------------------------------------------------------
+    // Get the next value in the sequence (range: [0 ... 0xffffffff])
+    //---------------------------------------------------------------
+
+    unsigned long int  nexti ();
+
+
+    //------------------------------------------------------
+    // Get the next value in the sequence (range: [0 ... 1[)
+    //------------------------------------------------------
+
+    float              nextf ();
+
+
+    //-------------------------------------------------------------------
+    // Get the next value in the sequence (range [rangeMin ... rangeMax[)
+    //-------------------------------------------------------------------
+
+    float              nextf (float rangeMin, float rangeMax);
+
+
+  private:
+
+    void               next ();
+
+    unsigned long int  _state;
+};
+
+
+//--------------------------------------------------------
+// Random-number generator based on the C Standard Library
+// functions erand48(), nrand48() & company; generates a
+// uniformly distributed sequence.
+//--------------------------------------------------------
+
+class Rand48
+{
+  public:
+
+    //------------
+    // Constructor
+    //------------
+
+    Rand48 (unsigned long int seed = 0);
+    
+
+    //--------------------------------
+    // Re-initialize with a given seed
+    //--------------------------------
+
+    void               init (unsigned long int seed);
+
+
+    //----------------------------------------------------------
+    // Get the next value in the sequence (range: [false, true])
+    //----------------------------------------------------------
+
+    bool               nextb ();
+
+
+    //---------------------------------------------------------------
+    // Get the next value in the sequence (range: [0 ... 0x7fffffff])
+    //---------------------------------------------------------------
+
+    long int           nexti ();
+
+
+    //------------------------------------------------------
+    // Get the next value in the sequence (range: [0 ... 1[)
+    //------------------------------------------------------
+
+    double             nextf ();
+
+
+    //-------------------------------------------------------------------
+    // Get the next value in the sequence (range [rangeMin ... rangeMax[)
+    //-------------------------------------------------------------------
+
+    double             nextf (double rangeMin, double rangeMax);
+
+
+  private:
+
+    unsigned short int _state[3];
+};
+
+
+//------------------------------------------------------------
+// Return random points uniformly distributed in a sphere with
+// radius 1 around the origin (distance from origin <= 1).
+//------------------------------------------------------------
+
+template <class Vec, class Rand>
+Vec            
+solidSphereRand (Rand &rand);
+
+
+//-------------------------------------------------------------
+// Return random points uniformly distributed on the surface of
+// a sphere with radius 1 around the origin.
+//-------------------------------------------------------------
+
+template <class Vec, class Rand>
+Vec            
+hollowSphereRand (Rand &rand);
+
+
+//-----------------------------------------------
+// Return random numbers with a normal (Gaussian)
+// distribution with zero mean and unit variance.
+//-----------------------------------------------
+
+template <class Rand>
+float
+gaussRand (Rand &rand);
+
+
+//----------------------------------------------------
+// Return random points whose distance from the origin
+// has a normal (Gaussian) distribution with zero mean
+// and unit variance.
+//----------------------------------------------------
+
+template <class Vec, class Rand>
+Vec
+gaussSphereRand (Rand &rand);
+
+
+//---------------------------------
+// erand48(), nrand48() and friends
+//---------------------------------
+
+double         erand48 (unsigned short state[3]);
+double         drand48 ();
+long int       nrand48 (unsigned short state[3]);
+long int       lrand48 ();
+void           srand48 (long int seed);
+
+
+//---------------
+// Implementation
+//---------------
+
+
+inline void
+Rand32::init (unsigned long int seed)
+{
+    _state = (seed * 0xa5a573a5L) ^ 0x5a5a5a5aL;
+}
+
+
+inline
+Rand32::Rand32 (unsigned long int seed)
+{
+    init (seed);
+}
+
+
+inline void
+Rand32::next ()
+{
+    _state = 1664525L * _state + 1013904223L;
+}
+
+
+inline bool
+Rand32::nextb ()
+{
+    next ();
+    // Return the 31st (most significant) bit, by and-ing with 2 ^ 31.
+    return !!(_state & 2147483648UL);
+}
+
+
+inline unsigned long int
+Rand32::nexti ()
+{
+    next ();
+    return _state & 0xffffffff;
+}
+
+
+inline float
+Rand32::nextf (float rangeMin, float rangeMax)
+{
+    float f = nextf();
+    return rangeMin * (1 - f) + rangeMax * f;
+}
+
+
+inline void
+Rand48::init (unsigned long int seed)
+{
+    seed = (seed * 0xa5a573a5L) ^ 0x5a5a5a5aL;
+
+    _state[0] = (unsigned short int) (seed & 0xFFFF);
+    _state[1] = (unsigned short int) ((seed >> 16) & 0xFFFF);
+    _state[2] = (unsigned short int) (seed & 0xFFFF);   
+}
+
+
+inline 
+Rand48::Rand48 (unsigned long int seed)
+{
+    init (seed);
+}
+
+
+inline bool
+Rand48::nextb ()
+{
+    return Imath::nrand48 (_state) & 1;
+}
+
+
+inline long int
+Rand48::nexti ()
+{
+    return Imath::nrand48 (_state);
+}
+
+
+inline double
+Rand48::nextf ()
+{
+    return Imath::erand48 (_state);
+}
+
+
+inline double
+Rand48::nextf (double rangeMin, double rangeMax)
+{
+    double f = nextf();
+    return rangeMin * (1 - f) + rangeMax * f;
+}
+
+
+template <class Vec, class Rand>
+Vec
+solidSphereRand (Rand &rand)
+{
+    Vec v;
+
+    do
+    {
+       for (unsigned int i = 0; i < Vec::dimensions(); i++)
+           v[i] = (typename Vec::BaseType) rand.nextf (-1, 1);
+    }
+    while (v.length2() > 1);
+
+    return v;
+}
+
+
+template <class Vec, class Rand>
+Vec
+hollowSphereRand (Rand &rand)
+{
+    Vec v;
+    typename Vec::BaseType length;
+
+    do
+    {
+       for (unsigned int i = 0; i < Vec::dimensions(); i++)
+           v[i] = (typename Vec::BaseType) rand.nextf (-1, 1);
+
+       length = v.length();
+    }
+    while (length > 1 || length == 0);
+
+    return v / length;
+}
+
+
+template <class Rand>
+float
+gaussRand (Rand &rand)
+{
+    float x;           // Note: to avoid numerical problems with very small
+    float y;           // numbers, we make these variables singe-precision
+    float length2;     // floats, but later we call the double-precision log()
+                       // and sqrt() functions instead of logf() and sqrtf().
+    do
+    {
+       x = float (rand.nextf (-1, 1));
+       y = float (rand.nextf (-1, 1));
+       length2 = x * x + y * y;
+    }
+    while (length2 >= 1 || length2 == 0);
+
+    return x * sqrt (-2 * log (double (length2)) / length2);
+}
+
+
+template <class Vec, class Rand>
+Vec
+gaussSphereRand (Rand &rand)
+{
+    return hollowSphereRand <Vec> (rand) * gaussRand (rand);
+}
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathRoots.h b/3rdparty/openexr/Imath/ImathRoots.h
new file mode 100644 (file)
index 0000000..d915c63
--- /dev/null
@@ -0,0 +1,219 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHROOTS_H
+#define INCLUDED_IMATHROOTS_H
+
+//---------------------------------------------------------------------
+//
+//     Functions to solve linear, quadratic or cubic equations
+//
+//---------------------------------------------------------------------
+
+#include <ImathMath.h>
+#include <complex>
+
+namespace Imath {
+
+//--------------------------------------------------------------------------
+// Find the real solutions of a linear, quadratic or cubic equation:
+//
+//     function                                   equation solved
+//
+//   solveLinear (a, b, x)                                   a * x + b == 0
+//   solveQuadratic (a, b, c, x)                   a * x*x + b * x + c == 0
+//   solveNormalizedCubic (r, s, t, x)     x*x*x + r * x*x + s * x + t == 0
+//   solveCubic (a, b, c, d, x)                a * x*x*x + b * x*x + c * x + d == 0
+//
+// Return value:
+//
+//      3      three real solutions, stored in x[0], x[1] and x[2]
+//      2      two real solutions, stored in x[0] and x[1]
+//      1      one real solution, stored in x[1]
+//      0      no real solutions
+//     -1      all real numbers are solutions
+//
+// Notes:
+//
+//    * It is possible that an equation has real solutions, but that the
+//     solutions (or some intermediate result) are not representable.
+//     In this case, either some of the solutions returned are invalid
+//     (nan or infinity), or, if floating-point exceptions have been
+//     enabled with Iex::mathExcOn(), an Iex::MathExc exception is
+//     thrown.
+//
+//    * Cubic equations are solved using Cardano's Formula; even though
+//     only real solutions are produced, some intermediate results are
+//     complex (std::complex<T>).
+//
+//--------------------------------------------------------------------------
+
+template <class T> int solveLinear (T a, T b, T &x);
+template <class T> int solveQuadratic (T a, T b, T c, T x[2]);
+template <class T> int solveNormalizedCubic (T r, T s, T t, T x[3]);
+template <class T> int solveCubic (T a, T b, T c, T d, T x[3]);
+
+
+//---------------
+// Implementation
+//---------------
+
+template <class T>
+int
+solveLinear (T a, T b, T &x)
+{
+    if (a != 0)
+    {
+       x = -b / a;
+       return 1;
+    }
+    else if (b != 0)
+    {
+       return 0;
+    }
+    else
+    {
+       return -1;
+    }
+}
+
+
+template <class T>
+int
+solveQuadratic (T a, T b, T c, T x[2])
+{
+    if (a == 0)
+    {
+       return solveLinear (b, c, x[0]);
+    }
+    else
+    {
+       T D = b * b - 4 * a * c;
+
+       if (D > 0)
+       {
+           T s = Math<T>::sqrt (D);
+           T q = -(b + (b > 0 ? 1 : -1) * s) / T(2);
+
+           x[0] = q / a;
+           x[1] = c / q;
+           return 2;
+       }
+       if (D == 0)
+       {
+           x[0] = -b / (2 * a);
+           return 1;
+       }
+       else
+       {
+           return 0;
+       }
+    }
+}
+
+
+template <class T>
+int
+solveNormalizedCubic (T r, T s, T t, T x[3])
+{
+    T p  = (3 * s - r * r) / 3;
+    T q  = 2 * r * r * r / 27 - r * s / 3 + t;
+    T p3 = p / 3;
+    T q2 = q / 2;
+    T D  = p3 * p3 * p3 + q2 * q2;
+
+    if (D == 0 && p3 == 0)
+    {
+       x[0] = -r / 3;
+       x[1] = -r / 3;
+       x[2] = -r / 3;
+       return 1;
+    }
+
+    std::complex<T> u = std::pow (-q / 2 + std::sqrt (std::complex<T> (D)),
+                                 T (1) / T (3));
+
+    std::complex<T> v = -p / (T (3) * u);
+
+    const T sqrt3 = T (1.73205080756887729352744634150587); // enough digits
+                                                           // for long double
+    std::complex<T> y0 (u + v);
+
+    std::complex<T> y1 (-(u + v) / T (2) +
+                        (u - v) / T (2) * std::complex<T> (0, sqrt3));
+
+    std::complex<T> y2 (-(u + v) / T (2) -
+                        (u - v) / T (2) * std::complex<T> (0, sqrt3));
+
+    if (D > 0)
+    {
+       x[0] = y0.real() - r / 3;
+       return 1;
+    }
+    else if (D == 0)
+    {
+       x[0] = y0.real() - r / 3;
+       x[1] = y1.real() - r / 3;
+       return 2;
+    }
+    else
+    {
+       x[0] = y0.real() - r / 3;
+       x[1] = y1.real() - r / 3;
+       x[2] = y2.real() - r / 3;
+       return 3;
+    }
+}
+
+
+template <class T>
+int
+solveCubic (T a, T b, T c, T d, T x[3])
+{
+    if (a == 0)
+    {
+       return solveQuadratic (b, c, d, x);
+    }
+    else
+    {
+       return solveNormalizedCubic (b / a, c / a, d / a, x);
+    }
+}
+
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathShear.cpp b/3rdparty/openexr/Imath/ImathShear.cpp
new file mode 100644 (file)
index 0000000..72541f5
--- /dev/null
@@ -0,0 +1,54 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+
+//----------------------------------------------------------------------------
+//
+//     Specializations of the Shear6<T> template.
+//
+//----------------------------------------------------------------------------
+
+#include "ImathShear.h"
+
+namespace Imath {
+
+
+
+// empty
+
+
+
+} // namespace Imath
diff --git a/3rdparty/openexr/Imath/ImathShear.h b/3rdparty/openexr/Imath/ImathShear.h
new file mode 100644 (file)
index 0000000..bad40a5
--- /dev/null
@@ -0,0 +1,659 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHSHEAR_H
+#define INCLUDED_IMATHSHEAR_H
+
+//----------------------------------------------------
+//
+//     Shear6 class template.
+//
+//----------------------------------------------------
+
+#include "ImathExc.h"
+#include "ImathLimits.h"
+#include "ImathMath.h"
+#include "ImathVec.h"
+
+#include <iostream>
+
+
+namespace Imath {
+
+
+
+
+template <class T> class Shear6
+{
+  public:
+
+    //-------------------
+    // Access to elements
+    //-------------------
+
+    T                  xy, xz, yz, yx, zx, zy;
+
+    T &                        operator [] (int i);
+    const T &          operator [] (int i) const;
+
+
+    //-------------
+    // Constructors
+    //-------------
+
+    Shear6 ();                    // (0 0 0 0 0 0)
+    Shear6 (T XY, T XZ, T YZ);    // (XY XZ YZ 0 0 0)
+    Shear6 (const Vec3<T> &v);     // (v.x v.y v.z 0 0 0)
+    template <class S>             // (v.x v.y v.z 0 0 0)
+       Shear6 (const Vec3<S> &v);
+    Shear6 (T XY, T XZ, T YZ,      // (XY XZ YZ YX ZX ZY)
+           T YX, T ZX, T ZY);  
+
+
+    //---------------------------------
+    // Copy constructors and assignment
+    //---------------------------------
+
+    Shear6 (const Shear6 &h);
+    template <class S> Shear6 (const Shear6<S> &h);
+
+    const Shear6 &     operator = (const Shear6 &h);
+    template <class S> 
+       const Shear6 &  operator = (const Vec3<S> &v);
+
+
+    //----------------------
+    // Compatibility with Sb
+    //----------------------
+
+    template <class S>
+    void               setValue (S XY, S XZ, S YZ, S YX, S ZX, S ZY);
+
+    template <class S>
+    void               setValue (const Shear6<S> &h);
+
+    template <class S>
+    void               getValue (S &XY, S &XZ, S &YZ, 
+                                 S &YX, S &ZX, S &ZY) const;
+
+    template <class S>
+    void               getValue (Shear6<S> &h) const;
+
+    T *                        getValue();
+    const T *          getValue() const;
+
+
+    //---------
+    // Equality
+    //---------
+
+    template <class S>
+    bool               operator == (const Shear6<S> &h) const;
+
+    template <class S>
+    bool               operator != (const Shear6<S> &h) const;
+
+    //-----------------------------------------------------------------------
+    // Compare two shears and test if they are "approximately equal":
+    //
+    // equalWithAbsError (h, e)
+    //
+    //     Returns true if the coefficients of this and h are the same with
+    //     an absolute error of no more than e, i.e., for all i
+    //
+    //      abs (this[i] - h[i]) <= e
+    //
+    // equalWithRelError (h, e)
+    //
+    //     Returns true if the coefficients of this and h are the same with
+    //     a relative error of no more than e, i.e., for all i
+    //
+    //      abs (this[i] - h[i]) <= e * abs (this[i])
+    //-----------------------------------------------------------------------
+
+    bool               equalWithAbsError (const Shear6<T> &h, T e) const;
+    bool               equalWithRelError (const Shear6<T> &h, T e) const;
+
+
+    //------------------------
+    // Component-wise addition
+    //------------------------
+
+    const Shear6 &     operator += (const Shear6 &h);
+    Shear6             operator + (const Shear6 &h) const;
+
+
+    //---------------------------
+    // Component-wise subtraction
+    //---------------------------
+
+    const Shear6 &     operator -= (const Shear6 &h);
+    Shear6             operator - (const Shear6 &h) const;
+
+
+    //------------------------------------
+    // Component-wise multiplication by -1
+    //------------------------------------
+
+    Shear6             operator - () const;
+    const Shear6 &     negate ();
+
+
+    //------------------------------
+    // Component-wise multiplication
+    //------------------------------
+
+    const Shear6 &     operator *= (const Shear6 &h);
+    const Shear6 &     operator *= (T a);
+    Shear6             operator * (const Shear6 &h) const;
+    Shear6             operator * (T a) const;
+
+
+    //------------------------
+    // Component-wise division
+    //------------------------
+
+    const Shear6 &     operator /= (const Shear6 &h);
+    const Shear6 &     operator /= (T a);
+    Shear6             operator / (const Shear6 &h) const;
+    Shear6             operator / (T a) const;
+
+
+    //----------------------------------------------------------
+    // Number of dimensions, i.e. number of elements in a Shear6
+    //----------------------------------------------------------
+
+    static unsigned int        dimensions() {return 6;}
+
+
+    //-------------------------------------------------
+    // Limitations of type T (see also class limits<T>)
+    //-------------------------------------------------
+
+    static T           baseTypeMin()           {return limits<T>::min();}
+    static T           baseTypeMax()           {return limits<T>::max();}
+    static T           baseTypeSmallest()      {return limits<T>::smallest();}
+    static T           baseTypeEpsilon()       {return limits<T>::epsilon();}
+
+
+    //--------------------------------------------------------------
+    // Base type -- in templates, which accept a parameter, V, which
+    // could be either a Vec2<T> or a Shear6<T>, you can refer to T as
+    // V::BaseType
+    //--------------------------------------------------------------
+
+    typedef T          BaseType;
+};
+
+
+//--------------
+// Stream output
+//--------------
+
+template <class T>
+std::ostream & operator << (std::ostream &s, const Shear6<T> &h);
+
+
+//----------------------------------------------------
+// Reverse multiplication: scalar * Shear6<T>
+//----------------------------------------------------
+
+template <class S, class T> Shear6<T>  operator * (S a, const Shear6<T> &h);
+
+
+//-------------------------
+// Typedefs for convenience
+//-------------------------
+
+typedef Vec3   <float>  Shear3f;
+typedef Vec3   <double> Shear3d;
+typedef Shear6 <float>  Shear6f;
+typedef Shear6 <double> Shear6d;
+
+
+
+
+//-----------------------
+// Implementation of Shear6
+//-----------------------
+
+template <class T>
+inline T &
+Shear6<T>::operator [] (int i)
+{
+    return (&xy)[i];
+}
+
+template <class T>
+inline const T &
+Shear6<T>::operator [] (int i) const
+{
+    return (&xy)[i];
+}
+
+template <class T>
+inline
+Shear6<T>::Shear6 ()
+{
+    xy = xz = yz = yx = zx = zy = 0;
+}
+
+template <class T>
+inline
+Shear6<T>::Shear6 (T XY, T XZ, T YZ)
+{
+    xy = XY;
+    xz = XZ;
+    yz = YZ;
+    yx = 0;
+    zx = 0;
+    zy = 0;
+}
+
+template <class T>
+inline
+Shear6<T>::Shear6 (const Vec3<T> &v)
+{
+    xy = v.x;
+    xz = v.y;
+    yz = v.z;
+    yx = 0;
+    zx = 0;
+    zy = 0;
+}
+
+template <class T>
+template <class S>
+inline
+Shear6<T>::Shear6 (const Vec3<S> &v)
+{
+    xy = T (v.x);
+    xz = T (v.y);
+    yz = T (v.z);
+    yx = 0;
+    zx = 0;
+    zy = 0;
+}
+
+template <class T>
+inline
+Shear6<T>::Shear6 (T XY, T XZ, T YZ, T YX, T ZX, T ZY)
+{
+    xy = XY;
+    xz = XZ;
+    yz = YZ;
+    yx = YX;
+    zx = ZX;
+    zy = ZY;
+}
+
+template <class T>
+inline
+Shear6<T>::Shear6 (const Shear6 &h)
+{
+    xy = h.xy;
+    xz = h.xz;
+    yz = h.yz;
+    yx = h.yx;
+    zx = h.zx;
+    zy = h.zy;
+}
+
+template <class T>
+template <class S>
+inline
+Shear6<T>::Shear6 (const Shear6<S> &h)
+{
+    xy = T (h.xy);
+    xz = T (h.xz);
+    yz = T (h.yz);
+    yx = T (h.yx);
+    zx = T (h.zx);
+    zy = T (h.zy);
+}
+
+template <class T>
+inline const Shear6<T> &
+Shear6<T>::operator = (const Shear6 &h)
+{
+    xy = h.xy;
+    xz = h.xz;
+    yz = h.yz;
+    yx = h.yx;
+    zx = h.zx;
+    zy = h.zy;
+    return *this;
+}
+
+template <class T>
+template <class S>
+inline const Shear6<T> &
+Shear6<T>::operator = (const Vec3<S> &v)
+{
+    xy = T (v.x);
+    xz = T (v.y);
+    yz = T (v.z);
+    yx = 0;
+    zx = 0;
+    zy = 0;
+    return *this;
+}
+
+template <class T>
+template <class S>
+inline void
+Shear6<T>::setValue (S XY, S XZ, S YZ, S YX, S ZX, S ZY)
+{
+    xy = T (XY);
+    xz = T (XZ);
+    yz = T (YZ);
+    yx = T (YX);
+    zx = T (ZX);
+    zy = T (ZY);
+}
+
+template <class T>
+template <class S>
+inline void
+Shear6<T>::setValue (const Shear6<S> &h)
+{
+    xy = T (h.xy);
+    xz = T (h.xz);
+    yz = T (h.yz);
+    yx = T (h.yx);
+    zx = T (h.zx);
+    zy = T (h.zy);
+}
+
+template <class T>
+template <class S>
+inline void
+Shear6<T>::getValue (S &XY, S &XZ, S &YZ, S &YX, S &ZX, S &ZY) const
+{
+    XY = S (xy);
+    XZ = S (xz);
+    YZ = S (yz);
+    YX = S (yx);
+    ZX = S (zx);
+    ZY = S (zy);
+}
+
+template <class T>
+template <class S>
+inline void
+Shear6<T>::getValue (Shear6<S> &h) const
+{
+    h.xy = S (xy);
+    h.xz = S (xz);
+    h.yz = S (yz);
+    h.yx = S (yx);
+    h.zx = S (zx);
+    h.zy = S (zy);
+}
+
+template <class T>
+inline T *
+Shear6<T>::getValue()
+{
+    return (T *) &xy;
+}
+
+template <class T>
+inline const T *
+Shear6<T>::getValue() const
+{
+    return (const T *) &xy;
+}
+
+template <class T>
+template <class S>
+inline bool
+Shear6<T>::operator == (const Shear6<S> &h) const
+{
+    return xy == h.xy  &&  xz == h.xz  &&  yz == h.yz  &&  
+          yx == h.yx  &&  zx == h.zx  &&  zy == h.zy;
+}
+
+template <class T>
+template <class S>
+inline bool
+Shear6<T>::operator != (const Shear6<S> &h) const
+{
+    return xy != h.xy  ||  xz != h.xz  ||  yz != h.yz  ||
+          yx != h.yx  ||  zx != h.zx  ||  zy != h.zy;
+}
+
+template <class T>
+bool
+Shear6<T>::equalWithAbsError (const Shear6<T> &h, T e) const
+{
+    for (int i = 0; i < 6; i++)
+       if (!Imath::equalWithAbsError ((*this)[i], h[i], e))
+           return false;
+
+    return true;
+}
+
+template <class T>
+bool
+Shear6<T>::equalWithRelError (const Shear6<T> &h, T e) const
+{
+    for (int i = 0; i < 6; i++)
+       if (!Imath::equalWithRelError ((*this)[i], h[i], e))
+           return false;
+
+    return true;
+}
+
+
+template <class T>
+inline const Shear6<T> &
+Shear6<T>::operator += (const Shear6 &h)
+{
+    xy += h.xy;
+    xz += h.xz;
+    yz += h.yz;
+    yx += h.yx;
+    zx += h.zx;
+    zy += h.zy;
+    return *this;
+}
+
+template <class T>
+inline Shear6<T>
+Shear6<T>::operator + (const Shear6 &h) const
+{
+    return Shear6 (xy + h.xy, xz + h.xz, yz + h.yz,
+                  yx + h.yx, zx + h.zx, zy + h.zy);
+}
+
+template <class T>
+inline const Shear6<T> &
+Shear6<T>::operator -= (const Shear6 &h)
+{
+    xy -= h.xy;
+    xz -= h.xz;
+    yz -= h.yz;
+    yx -= h.yx;
+    zx -= h.zx;
+    zy -= h.zy;
+    return *this;
+}
+
+template <class T>
+inline Shear6<T>
+Shear6<T>::operator - (const Shear6 &h) const
+{
+    return Shear6 (xy - h.xy, xz - h.xz, yz - h.yz,
+                  yx - h.yx, zx - h.zx, zy - h.zy);
+}
+
+template <class T>
+inline Shear6<T>
+Shear6<T>::operator - () const
+{
+    return Shear6 (-xy, -xz, -yz, -yx, -zx, -zy);
+}
+
+template <class T>
+inline const Shear6<T> &
+Shear6<T>::negate ()
+{
+    xy = -xy;
+    xz = -xz;
+    yz = -yz;
+    yx = -yx;
+    zx = -zx;
+    zy = -zy;
+    return *this;
+}
+
+template <class T>
+inline const Shear6<T> &
+Shear6<T>::operator *= (const Shear6 &h)
+{
+    xy *= h.xy;
+    xz *= h.xz;
+    yz *= h.yz;
+    yx *= h.yx;
+    zx *= h.zx;
+    zy *= h.zy;
+    return *this;
+}
+
+template <class T>
+inline const Shear6<T> &
+Shear6<T>::operator *= (T a)
+{
+    xy *= a;
+    xz *= a;
+    yz *= a;
+    yx *= a;
+    zx *= a;
+    zy *= a;
+    return *this;
+}
+
+template <class T>
+inline Shear6<T>
+Shear6<T>::operator * (const Shear6 &h) const
+{
+    return Shear6 (xy * h.xy, xz * h.xz, yz * h.yz, 
+                  yx * h.yx, zx * h.zx, zy * h.zy);
+}
+
+template <class T>
+inline Shear6<T>
+Shear6<T>::operator * (T a) const
+{
+    return Shear6 (xy * a, xz * a, yz * a,
+                  yx * a, zx * a, zy * a);
+}
+
+template <class T>
+inline const Shear6<T> &
+Shear6<T>::operator /= (const Shear6 &h)
+{
+    xy /= h.xy;
+    xz /= h.xz;
+    yz /= h.yz;
+    yx /= h.yx;
+    zx /= h.zx;
+    zy /= h.zy;
+    return *this;
+}
+
+template <class T>
+inline const Shear6<T> &
+Shear6<T>::operator /= (T a)
+{
+    xy /= a;
+    xz /= a;
+    yz /= a;
+    yx /= a;
+    zx /= a;
+    zy /= a;
+    return *this;
+}
+
+template <class T>
+inline Shear6<T>
+Shear6<T>::operator / (const Shear6 &h) const
+{
+    return Shear6 (xy / h.xy, xz / h.xz, yz / h.yz,
+                  yx / h.yx, zx / h.zx, zy / h.zy);
+}
+
+template <class T>
+inline Shear6<T>
+Shear6<T>::operator / (T a) const
+{
+    return Shear6 (xy / a, xz / a, yz / a,
+                  yx / a, zx / a, zy / a);
+}
+
+
+//-----------------------------
+// Stream output implementation
+//-----------------------------
+
+template <class T>
+std::ostream &
+operator << (std::ostream &s, const Shear6<T> &h)
+{
+    return s << '(' 
+            << h.xy << ' ' << h.xz << ' ' << h.yz 
+            << h.yx << ' ' << h.zx << ' ' << h.zy 
+            << ')';
+}
+
+
+//-----------------------------------------
+// Implementation of reverse multiplication
+//-----------------------------------------
+
+template <class S, class T>
+inline Shear6<T>
+operator * (S a, const Shear6<T> &h)
+{
+    return Shear6<T> (a * h.xy, a * h.xz, a * h.yz,
+                     a * h.yx, a * h.zx, a * h.zy);
+}
+
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathSphere.h b/3rdparty/openexr/Imath/ImathSphere.h
new file mode 100644 (file)
index 0000000..14d0365
--- /dev/null
@@ -0,0 +1,177 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHSPHERE_H
+#define INCLUDED_IMATHSPHERE_H
+
+//-------------------------------------
+//
+//     A 3D sphere class template
+//
+//-------------------------------------
+
+#include "ImathVec.h"
+#include "ImathBox.h"
+#include "ImathLine.h"
+
+namespace Imath {
+
+template <class T>
+class Sphere3
+{
+  public:
+
+    Vec3<T>    center;
+    T           radius;
+
+    //---------------
+    // Constructors
+    //---------------
+
+    Sphere3() : center(0,0,0), radius(0) {}
+    Sphere3(const Vec3<T> &c, T r) : center(c), radius(r) {}
+
+    //-------------------------------------------------------------------
+    // Utilities:
+    //
+    // s.circumscribe(b)       sets center and radius of sphere s
+    //                         so that the s tightly encloses box b.
+    //
+    // s.intersectT (l, t)     If sphere s and line l intersect, then
+    //                         intersectT() computes the smallest t,
+    //                         t >= 0, so that l(t) is a point on the
+    //                         sphere.  intersectT() then returns true.
+    //
+    //                         If s and l do not intersect, intersectT()
+    //                         returns false.
+    //
+    // s.intersect (l, i)      If sphere s and line l intersect, then
+    //                         intersect() calls s.intersectT(l,t) and
+    //                         computes i = l(t).
+    //
+    //                         If s and l do not intersect, intersect()
+    //                         returns false.
+    //
+    //-------------------------------------------------------------------
+
+    void circumscribe(const Box<Vec3<T> > &box);
+    bool intersect(const Line3<T> &l, Vec3<T> &intersection) const;
+    bool intersectT(const Line3<T> &l, T &t) const;
+};
+
+
+//--------------------
+// Convenient typedefs
+//--------------------
+
+typedef Sphere3<float> Sphere3f;
+typedef Sphere3<double> Sphere3d;
+
+
+//---------------
+// Implementation
+//---------------
+
+template <class T>
+void Sphere3<T>::circumscribe(const Box<Vec3<T> > &box)
+{
+    center = T(0.5) * (box.min + box.max);
+    radius = (box.max - center).length();
+}
+
+
+template <class T>
+bool Sphere3<T>::intersectT(const Line3<T> &line, T &t) const
+{
+    bool doesIntersect = true;
+
+    Vec3<T> v = line.pos - center;
+    T B = T(2.0) * (line.dir ^ v);
+    T C = (v ^ v) - (radius * radius);
+
+    // compute discriminant
+    // if negative, there is no intersection
+
+    T discr = B*B - T(4.0)*C;
+
+    if (discr < 0.0)
+    {
+       // line and Sphere3 do not intersect
+
+       doesIntersect = false;
+    }
+    else
+    {
+       // t0: (-B - sqrt(B^2 - 4AC)) / 2A  (A = 1)
+
+       T sqroot = Math<T>::sqrt(discr);
+       t = (-B - sqroot) * T(0.5);
+
+       if (t < 0.0)
+       {
+           // no intersection, try t1: (-B + sqrt(B^2 - 4AC)) / 2A  (A = 1)
+
+           t = (-B + sqroot) * T(0.5);
+       }
+
+       if (t < 0.0)
+           doesIntersect = false;
+    }
+
+    return doesIntersect;
+}
+
+
+template <class T>
+bool Sphere3<T>::intersect(const Line3<T> &line, Vec3<T> &intersection) const
+{
+    T t;
+
+    if (intersectT (line, t))
+    {
+       intersection = line(t);
+       return true;
+    }
+    else
+    {
+       return false;
+    }
+}
+
+
+} //namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathVec.cpp b/3rdparty/openexr/Imath/ImathVec.cpp
new file mode 100644 (file)
index 0000000..f692271
--- /dev/null
@@ -0,0 +1,540 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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.
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+
+//----------------------------------------------------------------------------
+//
+//      Specializations of the Vec2<T> and Vec3<T> templates.
+//
+//----------------------------------------------------------------------------
+
+#include "ImathVec.h"
+
+#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
+// suppress exception specification warnings
+#pragma warning(disable:4290)
+#endif
+
+
+namespace Imath {
+
+namespace
+{
+
+template<class T>
+bool
+normalizeOrThrow(Vec2<T> &v)
+{
+    int axis = -1;
+    for (int i = 0; i < 2; i ++)
+    {
+        if (v[i] != 0)
+        {
+            if (axis != -1)
+            {
+                throw IntVecNormalizeExc ("Cannot normalize an integer "
+                                          "vector unless it is parallel "
+                                          "to a principal axis");
+            }
+            axis = i;
+        }
+    }
+    v[axis] = (v[axis] > 0) ? 1 : -1;
+    return true;
+}
+
+
+template<class T>
+bool
+normalizeOrThrow(Vec3<T> &v)
+{
+    int axis = -1;
+    for (int i = 0; i < 3; i ++)
+    {
+        if (v[i] != 0)
+        {
+            if (axis != -1)
+            {
+                throw IntVecNormalizeExc ("Cannot normalize an integer "
+                                          "vector unless it is parallel "
+                                          "to a principal axis");
+            }
+            axis = i;
+        }
+    }
+    v[axis] = (v[axis] > 0) ? 1 : -1;
+    return true;
+}
+
+
+template<class T>
+bool
+normalizeOrThrow(Vec4<T> &v)
+{
+    int axis = -1;
+    for (int i = 0; i < 4; i ++)
+    {
+        if (v[i] != 0)
+        {
+            if (axis != -1)
+            {
+                throw IntVecNormalizeExc ("Cannot normalize an integer "
+                                          "vector unless it is parallel "
+                                          "to a principal axis");
+            }
+            axis = i;
+        }
+    }
+    v[axis] = (v[axis] > 0) ? 1 : -1;
+    return true;
+}
+
+}
+
+
+// Vec2<short>
+
+template <> 
+short
+Vec2<short>::length () const
+{
+    float lenF = Math<float>::sqrt ((float)dot (*this));
+    short lenS = (short) (lenF + 0.5f);
+    return lenS;
+}
+
+template <>
+const Vec2<short> &
+Vec2<short>::normalize ()
+{
+    normalizeOrThrow<short>(*this);
+    return *this;
+}
+
+template <>
+const Vec2<short> &
+Vec2<short>::normalizeExc () throw (Iex::MathExc)
+{
+    if ((x == 0) && (y == 0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    normalizeOrThrow<short>(*this);
+    return *this;
+}
+
+template <>
+const Vec2<short> &
+Vec2<short>::normalizeNonNull ()
+{
+    normalizeOrThrow<short>(*this);
+    return *this;
+}
+
+template <>
+Vec2<short>
+Vec2<short>::normalized () const
+{
+    Vec2<short> v(*this);
+    normalizeOrThrow<short>(v);
+    return v;
+}
+
+template <>
+Vec2<short>
+Vec2<short>::normalizedExc () const throw (Iex::MathExc)
+{
+    if ((x == 0) && (y == 0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    Vec2<short> v(*this);
+    normalizeOrThrow<short>(v);
+    return v;
+}
+
+template <>
+Vec2<short>
+Vec2<short>::normalizedNonNull () const
+{
+    Vec2<short> v(*this);
+    normalizeOrThrow<short>(v);
+    return v;
+}
+
+
+// Vec2<int>
+
+template <> 
+int
+Vec2<int>::length () const
+{
+    float lenF = Math<float>::sqrt ((float)dot (*this));
+    int lenI = (int) (lenF + 0.5f);
+    return lenI;
+}
+
+template <>
+const Vec2<int> &
+Vec2<int>::normalize ()
+{
+    normalizeOrThrow<int>(*this);
+    return *this;
+}
+
+template <>
+const Vec2<int> &
+Vec2<int>::normalizeExc () throw (Iex::MathExc)
+{
+    if ((x == 0) && (y == 0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    normalizeOrThrow<int>(*this);
+    return *this;
+}
+
+template <>
+const Vec2<int> &
+Vec2<int>::normalizeNonNull ()
+{
+    normalizeOrThrow<int>(*this);
+    return *this;
+}
+
+template <>
+Vec2<int>
+Vec2<int>::normalized () const
+{
+    Vec2<int> v(*this);
+    normalizeOrThrow<int>(v);
+    return v;
+}
+
+template <>
+Vec2<int>
+Vec2<int>::normalizedExc () const throw (Iex::MathExc)
+{
+    if ((x == 0) && (y == 0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    Vec2<int> v(*this);
+    normalizeOrThrow<int>(v);
+    return v;
+}
+
+template <>
+Vec2<int>
+Vec2<int>::normalizedNonNull () const
+{
+    Vec2<int> v(*this);
+    normalizeOrThrow<int>(v);
+    return v;
+}
+
+
+// Vec3<short>
+
+template <> 
+short
+Vec3<short>::length () const
+{
+    float lenF = Math<float>::sqrt ((float)dot (*this));
+    short lenS = (short) (lenF + 0.5f);
+    return lenS;
+}
+
+template <>
+const Vec3<short> &
+Vec3<short>::normalize ()
+{
+    normalizeOrThrow<short>(*this);
+    return *this;
+}
+
+template <>
+const Vec3<short> &
+Vec3<short>::normalizeExc () throw (Iex::MathExc)
+{
+    if ((x == 0) && (y == 0) && (z == 0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    normalizeOrThrow<short>(*this);
+    return *this;
+}
+
+template <>
+const Vec3<short> &
+Vec3<short>::normalizeNonNull ()
+{
+    normalizeOrThrow<short>(*this);
+    return *this;
+}
+
+template <>
+Vec3<short>
+Vec3<short>::normalized () const
+{
+    Vec3<short> v(*this);
+    normalizeOrThrow<short>(v);
+    return v;
+}
+
+template <>
+Vec3<short>
+Vec3<short>::normalizedExc () const throw (Iex::MathExc)
+{
+    if ((x == 0) && (y == 0) && (z == 0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    Vec3<short> v(*this);
+    normalizeOrThrow<short>(v);
+    return v;
+}
+
+template <>
+Vec3<short>
+Vec3<short>::normalizedNonNull () const
+{
+    Vec3<short> v(*this);
+    normalizeOrThrow<short>(v);
+    return v;
+}
+
+
+// Vec3<int>
+
+template <> 
+int
+Vec3<int>::length () const
+{
+    float lenF = Math<float>::sqrt ((float)dot (*this));
+    int lenI = (int) (lenF + 0.5f);
+    return lenI;
+}
+
+template <>
+const Vec3<int> &
+Vec3<int>::normalize ()
+{
+    normalizeOrThrow<int>(*this);
+    return *this;
+}
+
+template <>
+const Vec3<int> &
+Vec3<int>::normalizeExc () throw (Iex::MathExc)
+{
+    if ((x == 0) && (y == 0) && (z == 0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    normalizeOrThrow<int>(*this);
+    return *this;
+}
+
+template <>
+const Vec3<int> &
+Vec3<int>::normalizeNonNull ()
+{
+    normalizeOrThrow<int>(*this);
+    return *this;
+}
+
+template <>
+Vec3<int>
+Vec3<int>::normalized () const
+{
+    Vec3<int> v(*this);
+    normalizeOrThrow<int>(v);
+    return v;
+}
+
+template <>
+Vec3<int>
+Vec3<int>::normalizedExc () const throw (Iex::MathExc)
+{
+    if ((x == 0) && (y == 0) && (z == 0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    Vec3<int> v(*this);
+    normalizeOrThrow<int>(v);
+    return v;
+}
+
+template <>
+Vec3<int>
+Vec3<int>::normalizedNonNull () const
+{
+    Vec3<int> v(*this);
+    normalizeOrThrow<int>(v);
+    return v;
+}
+
+
+// Vec4<short>
+
+template <> 
+short
+Vec4<short>::length () const
+{
+    float lenF = Math<float>::sqrt ((float)dot (*this));
+    short lenS = (short) (lenF + 0.5f);
+    return lenS;
+}
+
+template <>
+const Vec4<short> &
+Vec4<short>::normalize ()
+{
+    normalizeOrThrow<short>(*this);
+    return *this;
+}
+
+template <>
+const Vec4<short> &
+Vec4<short>::normalizeExc () throw (Iex::MathExc)
+{
+    if ((x == 0) && (y == 0) && (z == 0) && (w == 0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    normalizeOrThrow<short>(*this);
+    return *this;
+}
+
+template <>
+const Vec4<short> &
+Vec4<short>::normalizeNonNull ()
+{
+    normalizeOrThrow<short>(*this);
+    return *this;
+}
+
+template <>
+Vec4<short>
+Vec4<short>::normalized () const
+{
+    Vec4<short> v(*this);
+    normalizeOrThrow<short>(v);
+    return v;
+}
+
+template <>
+Vec4<short>
+Vec4<short>::normalizedExc () const throw (Iex::MathExc)
+{
+    if ((x == 0) && (y == 0) && (z == 0) && (w == 0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    Vec4<short> v(*this);
+    normalizeOrThrow<short>(v);
+    return v;
+}
+
+template <>
+Vec4<short>
+Vec4<short>::normalizedNonNull () const
+{
+    Vec4<short> v(*this);
+    normalizeOrThrow<short>(v);
+    return v;
+}
+
+
+// Vec4<int>
+
+template <> 
+int
+Vec4<int>::length () const
+{
+    float lenF = Math<float>::sqrt ((float)dot (*this));
+    int lenI = (int) (lenF + 0.5f);
+    return lenI;
+}
+
+template <>
+const Vec4<int> &
+Vec4<int>::normalize ()
+{
+    normalizeOrThrow<int>(*this);
+    return *this;
+}
+
+template <>
+const Vec4<int> &
+Vec4<int>::normalizeExc () throw (Iex::MathExc)
+{
+    if ((x == 0) && (y == 0) && (z == 0) && (w == 0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    normalizeOrThrow<int>(*this);
+    return *this;
+}
+
+template <>
+const Vec4<int> &
+Vec4<int>::normalizeNonNull ()
+{
+    normalizeOrThrow<int>(*this);
+    return *this;
+}
+
+template <>
+Vec4<int>
+Vec4<int>::normalized () const
+{
+    Vec4<int> v(*this);
+    normalizeOrThrow<int>(v);
+    return v;
+}
+
+template <>
+Vec4<int>
+Vec4<int>::normalizedExc () const throw (Iex::MathExc)
+{
+    if ((x == 0) && (y == 0) && (z == 0) && (w == 0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    Vec4<int> v(*this);
+    normalizeOrThrow<int>(v);
+    return v;
+}
+
+template <>
+Vec4<int>
+Vec4<int>::normalizedNonNull () const
+{
+    Vec4<int> v(*this);
+    normalizeOrThrow<int>(v);
+    return v;
+}
+
+} // namespace Imath
diff --git a/3rdparty/openexr/Imath/ImathVec.h b/3rdparty/openexr/Imath/ImathVec.h
new file mode 100644 (file)
index 0000000..e6d2b79
--- /dev/null
@@ -0,0 +1,2226 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHVEC_H
+#define INCLUDED_IMATHVEC_H
+
+//----------------------------------------------------
+//
+//     2D, 3D and 4D point/vector class templates
+//
+//----------------------------------------------------
+
+#include "ImathExc.h"
+#include "ImathLimits.h"
+#include "ImathMath.h"
+
+#include <iostream>
+
+#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
+// suppress exception specification warnings
+#pragma warning(push)
+#pragma warning(disable:4290)
+#endif
+
+
+namespace Imath {
+
+template <class T> class Vec2;
+template <class T> class Vec3;
+template <class T> class Vec4;
+
+enum InfException {INF_EXCEPTION};
+
+
+template <class T> class Vec2
+{
+  public:
+
+    //-------------------
+    // Access to elements
+    //-------------------
+
+    T                  x, y;
+
+    T &                        operator [] (int i);
+    const T &          operator [] (int i) const;
+
+
+    //-------------
+    // Constructors
+    //-------------
+
+    Vec2 ();                        // no initialization
+    explicit Vec2 (T a);            // (a a)
+    Vec2 (T a, T b);                // (a b)
+
+
+    //---------------------------------
+    // Copy constructors and assignment
+    //---------------------------------
+
+    Vec2 (const Vec2 &v);
+    template <class S> Vec2 (const Vec2<S> &v);
+
+    const Vec2 &       operator = (const Vec2 &v);
+
+
+    //----------------------
+    // Compatibility with Sb
+    //----------------------
+
+    template <class S>
+    void               setValue (S a, S b);
+
+    template <class S>
+    void               setValue (const Vec2<S> &v);
+
+    template <class S>
+    void               getValue (S &a, S &b) const;
+
+    template <class S>
+    void               getValue (Vec2<S> &v) const;
+
+    T *                        getValue ();
+    const T *          getValue () const;
+
+    
+    //---------
+    // Equality
+    //---------
+
+    template <class S>
+    bool               operator == (const Vec2<S> &v) const;
+
+    template <class S>
+    bool               operator != (const Vec2<S> &v) const;
+
+
+    //-----------------------------------------------------------------------
+    // Compare two vectors and test if they are "approximately equal":
+    //
+    // equalWithAbsError (v, e)
+    //
+    //     Returns true if the coefficients of this and v are the same with
+    //     an absolute error of no more than e, i.e., for all i
+    //
+    //      abs (this[i] - v[i]) <= e
+    //
+    // equalWithRelError (v, e)
+    //
+    //     Returns true if the coefficients of this and v are the same with
+    //     a relative error of no more than e, i.e., for all i
+    //
+    //      abs (this[i] - v[i]) <= e * abs (this[i])
+    //-----------------------------------------------------------------------
+
+    bool               equalWithAbsError (const Vec2<T> &v, T e) const;
+    bool               equalWithRelError (const Vec2<T> &v, T e) const;
+
+    //------------
+    // Dot product
+    //------------
+
+    T                  dot (const Vec2 &v) const;
+    T                  operator ^ (const Vec2 &v) const;
+
+
+    //------------------------------------------------
+    // Right-handed cross product, i.e. z component of
+    // Vec3 (this->x, this->y, 0) % Vec3 (v.x, v.y, 0)
+    //------------------------------------------------
+
+    T                  cross (const Vec2 &v) const;
+    T                  operator % (const Vec2 &v) const;
+
+
+    //------------------------
+    // Component-wise addition
+    //------------------------
+
+    const Vec2 &       operator += (const Vec2 &v);
+    Vec2               operator + (const Vec2 &v) const;
+
+
+    //---------------------------
+    // Component-wise subtraction
+    //---------------------------
+
+    const Vec2 &       operator -= (const Vec2 &v);
+    Vec2               operator - (const Vec2 &v) const;
+
+
+    //------------------------------------
+    // Component-wise multiplication by -1
+    //------------------------------------
+
+    Vec2               operator - () const;
+    const Vec2 &       negate ();
+
+
+    //------------------------------
+    // Component-wise multiplication
+    //------------------------------
+
+    const Vec2 &       operator *= (const Vec2 &v);
+    const Vec2 &       operator *= (T a);
+    Vec2               operator * (const Vec2 &v) const;
+    Vec2               operator * (T a) const;
+
+
+    //------------------------
+    // Component-wise division
+    //------------------------
+
+    const Vec2 &       operator /= (const Vec2 &v);
+    const Vec2 &       operator /= (T a);
+    Vec2               operator / (const Vec2 &v) const;
+    Vec2               operator / (T a) const;
+
+
+    //----------------------------------------------------------------
+    // Length and normalization:  If v.length() is 0.0, v.normalize()
+    // and v.normalized() produce a null vector; v.normalizeExc() and
+    // v.normalizedExc() throw a NullVecExc.
+    // v.normalizeNonNull() and v.normalizedNonNull() are slightly
+    // faster than the other normalization routines, but if v.length()
+    // is 0.0, the result is undefined.
+    //----------------------------------------------------------------
+
+    T                  length () const;
+    T                  length2 () const;
+
+    const Vec2 &       normalize ();           // modifies *this
+    const Vec2 &       normalizeExc () throw (Iex::MathExc);
+    const Vec2 &       normalizeNonNull ();
+
+    Vec2<T>            normalized () const;    // does not modify *this
+    Vec2<T>            normalizedExc () const throw (Iex::MathExc);
+    Vec2<T>            normalizedNonNull () const;
+
+
+    //--------------------------------------------------------
+    // Number of dimensions, i.e. number of elements in a Vec2
+    //--------------------------------------------------------
+
+    static unsigned int        dimensions() {return 2;}
+
+
+    //-------------------------------------------------
+    // Limitations of type T (see also class limits<T>)
+    //-------------------------------------------------
+
+    static T           baseTypeMin()           {return limits<T>::min();}
+    static T           baseTypeMax()           {return limits<T>::max();}
+    static T           baseTypeSmallest()      {return limits<T>::smallest();}
+    static T           baseTypeEpsilon()       {return limits<T>::epsilon();}
+
+
+    //--------------------------------------------------------------
+    // Base type -- in templates, which accept a parameter, V, which
+    // could be either a Vec2<T>, a Vec3<T>, or a Vec4<T> you can 
+    // refer to T as V::BaseType
+    //--------------------------------------------------------------
+
+    typedef T          BaseType;
+
+  private:
+
+    T                  lengthTiny () const;
+};
+
+
+template <class T> class Vec3
+{
+  public:
+
+    //-------------------
+    // Access to elements
+    //-------------------
+
+    T                  x, y, z;
+
+    T &                        operator [] (int i);
+    const T &          operator [] (int i) const;
+
+
+    //-------------
+    // Constructors
+    //-------------
+
+    Vec3 ();                      // no initialization
+    explicit Vec3 (T a);           // (a a a)
+    Vec3 (T a, T b, T c);         // (a b c)
+
+
+    //---------------------------------
+    // Copy constructors and assignment
+    //---------------------------------
+
+    Vec3 (const Vec3 &v);
+    template <class S> Vec3 (const Vec3<S> &v);
+
+    const Vec3 &       operator = (const Vec3 &v);
+
+
+    //---------------------------------------------------------
+    // Vec4 to Vec3 conversion, divides x, y and z by w:
+    //
+    // The one-argument conversion function divides by w even
+    // if w is zero.  The result depends on how the environment
+    // handles floating-point exceptions.
+    //
+    // The two-argument version thows an InfPointExc exception
+    // if w is zero or if division by w would overflow.
+    //---------------------------------------------------------
+
+    template <class S> explicit Vec3 (const Vec4<S> &v);
+    template <class S> explicit Vec3 (const Vec4<S> &v, InfException);
+
+
+    //----------------------
+    // Compatibility with Sb
+    //----------------------
+
+    template <class S>
+    void               setValue (S a, S b, S c);
+
+    template <class S>
+    void               setValue (const Vec3<S> &v);
+
+    template <class S>
+    void               getValue (S &a, S &b, S &c) const;
+
+    template <class S>
+    void               getValue (Vec3<S> &v) const;
+
+    T *                        getValue();
+    const T *          getValue() const;
+
+
+    //---------
+    // Equality
+    //---------
+
+    template <class S>
+    bool               operator == (const Vec3<S> &v) const;
+
+    template <class S>
+    bool               operator != (const Vec3<S> &v) const;
+
+    //-----------------------------------------------------------------------
+    // Compare two vectors and test if they are "approximately equal":
+    //
+    // equalWithAbsError (v, e)
+    //
+    //     Returns true if the coefficients of this and v are the same with
+    //     an absolute error of no more than e, i.e., for all i
+    //
+    //      abs (this[i] - v[i]) <= e
+    //
+    // equalWithRelError (v, e)
+    //
+    //     Returns true if the coefficients of this and v are the same with
+    //     a relative error of no more than e, i.e., for all i
+    //
+    //      abs (this[i] - v[i]) <= e * abs (this[i])
+    //-----------------------------------------------------------------------
+
+    bool               equalWithAbsError (const Vec3<T> &v, T e) const;
+    bool               equalWithRelError (const Vec3<T> &v, T e) const;
+
+    //------------
+    // Dot product
+    //------------
+
+    T                  dot (const Vec3 &v) const;
+    T                  operator ^ (const Vec3 &v) const;
+
+
+    //---------------------------
+    // Right-handed cross product
+    //---------------------------
+
+    Vec3               cross (const Vec3 &v) const;
+    const Vec3 &       operator %= (const Vec3 &v);
+    Vec3               operator % (const Vec3 &v) const;
+
+
+    //------------------------
+    // Component-wise addition
+    //------------------------
+
+    const Vec3 &       operator += (const Vec3 &v);
+    Vec3               operator + (const Vec3 &v) const;
+
+
+    //---------------------------
+    // Component-wise subtraction
+    //---------------------------
+
+    const Vec3 &       operator -= (const Vec3 &v);
+    Vec3               operator - (const Vec3 &v) const;
+
+
+    //------------------------------------
+    // Component-wise multiplication by -1
+    //------------------------------------
+
+    Vec3               operator - () const;
+    const Vec3 &       negate ();
+
+
+    //------------------------------
+    // Component-wise multiplication
+    //------------------------------
+
+    const Vec3 &       operator *= (const Vec3 &v);
+    const Vec3 &       operator *= (T a);
+    Vec3               operator * (const Vec3 &v) const;
+    Vec3               operator * (T a) const;
+
+
+    //------------------------
+    // Component-wise division
+    //------------------------
+
+    const Vec3 &       operator /= (const Vec3 &v);
+    const Vec3 &       operator /= (T a);
+    Vec3               operator / (const Vec3 &v) const;
+    Vec3               operator / (T a) const;
+
+
+    //----------------------------------------------------------------
+    // Length and normalization:  If v.length() is 0.0, v.normalize()
+    // and v.normalized() produce a null vector; v.normalizeExc() and
+    // v.normalizedExc() throw a NullVecExc.
+    // v.normalizeNonNull() and v.normalizedNonNull() are slightly
+    // faster than the other normalization routines, but if v.length()
+    // is 0.0, the result is undefined.
+    //----------------------------------------------------------------
+
+    T                  length () const;
+    T                  length2 () const;
+
+    const Vec3 &       normalize ();           // modifies *this
+    const Vec3 &       normalizeExc () throw (Iex::MathExc);
+    const Vec3 &       normalizeNonNull ();
+
+    Vec3<T>            normalized () const;    // does not modify *this
+    Vec3<T>            normalizedExc () const throw (Iex::MathExc);
+    Vec3<T>            normalizedNonNull () const;
+
+
+    //--------------------------------------------------------
+    // Number of dimensions, i.e. number of elements in a Vec3
+    //--------------------------------------------------------
+
+    static unsigned int        dimensions() {return 3;}
+
+
+    //-------------------------------------------------
+    // Limitations of type T (see also class limits<T>)
+    //-------------------------------------------------
+
+    static T           baseTypeMin()           {return limits<T>::min();}
+    static T           baseTypeMax()           {return limits<T>::max();}
+    static T           baseTypeSmallest()      {return limits<T>::smallest();}
+    static T           baseTypeEpsilon()       {return limits<T>::epsilon();}
+
+
+    //--------------------------------------------------------------
+    // Base type -- in templates, which accept a parameter, V, which
+    // could be either a Vec2<T>, a Vec3<T>, or a Vec4<T> you can 
+    // refer to T as V::BaseType
+    //--------------------------------------------------------------
+
+    typedef T          BaseType;
+
+  private:
+
+    T                  lengthTiny () const;
+};
+
+
+
+template <class T> class Vec4
+{
+  public:
+
+    //-------------------
+    // Access to elements
+    //-------------------
+
+    T               x, y, z, w; 
+
+    T &             operator [] (int i);
+    const T &       operator [] (int i) const;
+
+
+    //-------------
+    // Constructors
+    //-------------
+
+    Vec4 ();                      // no initialization
+    explicit Vec4 (T a);           // (a a a a)
+    Vec4 (T a, T b, T c, T d);    // (a b c d)
+
+
+    //---------------------------------
+    // Copy constructors and assignment
+    //---------------------------------
+
+    Vec4 (const Vec4 &v);
+    template <class S> Vec4 (const Vec4<S> &v);
+
+    const Vec4 &    operator = (const Vec4 &v);
+
+
+    //-------------------------------------
+    // Vec3 to Vec4 conversion, sets w to 1
+    //-------------------------------------
+
+    template <class S> explicit Vec4 (const Vec3<S> &v);
+
+
+    //---------
+    // Equality
+    //---------
+
+    template <class S>
+    bool            operator == (const Vec4<S> &v) const;
+
+    template <class S>
+    bool            operator != (const Vec4<S> &v) const;
+
+
+    //-----------------------------------------------------------------------
+    // Compare two vectors and test if they are "approximately equal":
+    //
+    // equalWithAbsError (v, e)
+    //
+    //     Returns true if the coefficients of this and v are the same with
+    //     an absolute error of no more than e, i.e., for all i
+    //
+    //      abs (this[i] - v[i]) <= e
+    //
+    // equalWithRelError (v, e)
+    //
+    //     Returns true if the coefficients of this and v are the same with
+    //     a relative error of no more than e, i.e., for all i
+    //
+    //      abs (this[i] - v[i]) <= e * abs (this[i])
+    //-----------------------------------------------------------------------
+
+    bool               equalWithAbsError (const Vec4<T> &v, T e) const;
+    bool               equalWithRelError (const Vec4<T> &v, T e) const;
+
+
+    //------------
+    // Dot product
+    //------------
+
+    T                  dot (const Vec4 &v) const;
+    T                  operator ^ (const Vec4 &v) const;
+
+
+    //-----------------------------------
+    // Cross product is not defined in 4D
+    //-----------------------------------
+
+    //------------------------
+    // Component-wise addition
+    //------------------------
+
+    const Vec4 &    operator += (const Vec4 &v);
+    Vec4            operator + (const Vec4 &v) const;
+
+
+    //---------------------------
+    // Component-wise subtraction
+    //---------------------------
+
+    const Vec4 &    operator -= (const Vec4 &v);
+    Vec4            operator - (const Vec4 &v) const;
+
+
+    //------------------------------------
+    // Component-wise multiplication by -1
+    //------------------------------------
+
+    Vec4            operator - () const;
+    const Vec4 &    negate ();
+
+
+    //------------------------------
+    // Component-wise multiplication
+    //------------------------------
+
+    const Vec4 &    operator *= (const Vec4 &v);
+    const Vec4 &    operator *= (T a);
+    Vec4            operator * (const Vec4 &v) const;
+    Vec4            operator * (T a) const;
+
+
+    //------------------------
+    // Component-wise division
+    //------------------------
+
+    const Vec4 &    operator /= (const Vec4 &v);
+    const Vec4 &    operator /= (T a);
+    Vec4            operator / (const Vec4 &v) const;
+    Vec4            operator / (T a) const;
+
+
+    //----------------------------------------------------------------
+    // Length and normalization:  If v.length() is 0.0, v.normalize()
+    // and v.normalized() produce a null vector; v.normalizeExc() and
+    // v.normalizedExc() throw a NullVecExc.
+    // v.normalizeNonNull() and v.normalizedNonNull() are slightly
+    // faster than the other normalization routines, but if v.length()
+    // is 0.0, the result is undefined.
+    //----------------------------------------------------------------
+
+    T               length () const;
+    T               length2 () const;
+
+    const Vec4 &    normalize ();           // modifies *this
+    const Vec4 &    normalizeExc () throw (Iex::MathExc);
+    const Vec4 &    normalizeNonNull ();
+
+    Vec4<T>         normalized () const;       // does not modify *this
+    Vec4<T>         normalizedExc () const throw (Iex::MathExc);
+    Vec4<T>         normalizedNonNull () const;
+
+
+    //--------------------------------------------------------
+    // Number of dimensions, i.e. number of elements in a Vec4
+    //--------------------------------------------------------
+
+    static unsigned int        dimensions() {return 4;}
+
+
+    //-------------------------------------------------
+    // Limitations of type T (see also class limits<T>)
+    //-------------------------------------------------
+
+    static T           baseTypeMin()           {return limits<T>::min();}
+    static T           baseTypeMax()           {return limits<T>::max();}
+    static T           baseTypeSmallest()      {return limits<T>::smallest();}
+    static T           baseTypeEpsilon()       {return limits<T>::epsilon();}
+
+
+    //--------------------------------------------------------------
+    // Base type -- in templates, which accept a parameter, V, which
+    // could be either a Vec2<T>, a Vec3<T>, or a Vec4<T> you can 
+    // refer to T as V::BaseType
+    //--------------------------------------------------------------
+
+    typedef T          BaseType;
+
+  private:
+
+    T                  lengthTiny () const;
+};
+
+
+//--------------
+// Stream output
+//--------------
+
+template <class T>
+std::ostream & operator << (std::ostream &s, const Vec2<T> &v);
+
+template <class T>
+std::ostream & operator << (std::ostream &s, const Vec3<T> &v);
+
+template <class T>
+std::ostream & operator << (std::ostream &s, const Vec4<T> &v);
+
+//----------------------------------------------------
+// Reverse multiplication: S * Vec2<T> and S * Vec3<T>
+//----------------------------------------------------
+
+template <class T> Vec2<T>     operator * (T a, const Vec2<T> &v);
+template <class T> Vec3<T>     operator * (T a, const Vec3<T> &v);
+template <class T> Vec4<T>     operator * (T a, const Vec4<T> &v);
+
+
+//-------------------------
+// Typedefs for convenience
+//-------------------------
+
+typedef Vec2 <short>  V2s;
+typedef Vec2 <int>    V2i;
+typedef Vec2 <float>  V2f;
+typedef Vec2 <double> V2d;
+typedef Vec3 <short>  V3s;
+typedef Vec3 <int>    V3i;
+typedef Vec3 <float>  V3f;
+typedef Vec3 <double> V3d;
+typedef Vec4 <short>  V4s;
+typedef Vec4 <int>    V4i;
+typedef Vec4 <float>  V4f;
+typedef Vec4 <double> V4d;
+
+
+//-------------------------------------------
+// Specializations for VecN<short>, VecN<int>
+//-------------------------------------------
+
+// Vec2<short>
+
+template <> short
+Vec2<short>::length () const;
+
+template <> const Vec2<short> &
+Vec2<short>::normalize ();
+
+template <> const Vec2<short> &
+Vec2<short>::normalizeExc () throw (Iex::MathExc);
+
+template <> const Vec2<short> &
+Vec2<short>::normalizeNonNull ();
+
+template <> Vec2<short>
+Vec2<short>::normalized () const;
+
+template <> Vec2<short>
+Vec2<short>::normalizedExc () const throw (Iex::MathExc);
+
+template <> Vec2<short>
+Vec2<short>::normalizedNonNull () const;
+
+
+// Vec2<int>
+
+template <> int
+Vec2<int>::length () const;
+
+template <> const Vec2<int> &
+Vec2<int>::normalize ();
+
+template <> const Vec2<int> &
+Vec2<int>::normalizeExc () throw (Iex::MathExc);
+
+template <> const Vec2<int> &
+Vec2<int>::normalizeNonNull ();
+
+template <> Vec2<int>
+Vec2<int>::normalized () const;
+
+template <> Vec2<int>
+Vec2<int>::normalizedExc () const throw (Iex::MathExc);
+
+template <> Vec2<int>
+Vec2<int>::normalizedNonNull () const;
+
+
+// Vec3<short>
+
+template <> short
+Vec3<short>::length () const;
+
+template <> const Vec3<short> &
+Vec3<short>::normalize ();
+
+template <> const Vec3<short> &
+Vec3<short>::normalizeExc () throw (Iex::MathExc);
+
+template <> const Vec3<short> &
+Vec3<short>::normalizeNonNull ();
+
+template <> Vec3<short>
+Vec3<short>::normalized () const;
+
+template <> Vec3<short>
+Vec3<short>::normalizedExc () const throw (Iex::MathExc);
+
+template <> Vec3<short>
+Vec3<short>::normalizedNonNull () const;
+
+
+// Vec3<int>
+
+template <> int
+Vec3<int>::length () const;
+
+template <> const Vec3<int> &
+Vec3<int>::normalize ();
+
+template <> const Vec3<int> &
+Vec3<int>::normalizeExc () throw (Iex::MathExc);
+
+template <> const Vec3<int> &
+Vec3<int>::normalizeNonNull ();
+
+template <> Vec3<int>
+Vec3<int>::normalized () const;
+
+template <> Vec3<int>
+Vec3<int>::normalizedExc () const throw (Iex::MathExc);
+
+template <> Vec3<int>
+Vec3<int>::normalizedNonNull () const;
+
+// Vec4<short>
+
+template <> short
+Vec4<short>::length () const;
+
+template <> const Vec4<short> &
+Vec4<short>::normalize ();
+
+template <> const Vec4<short> &
+Vec4<short>::normalizeExc () throw (Iex::MathExc);
+
+template <> const Vec4<short> &
+Vec4<short>::normalizeNonNull ();
+
+template <> Vec4<short>
+Vec4<short>::normalized () const;
+
+template <> Vec4<short>
+Vec4<short>::normalizedExc () const throw (Iex::MathExc);
+
+template <> Vec4<short>
+Vec4<short>::normalizedNonNull () const;
+
+
+// Vec4<int>
+
+template <> int
+Vec4<int>::length () const;
+
+template <> const Vec4<int> &
+Vec4<int>::normalize ();
+
+template <> const Vec4<int> &
+Vec4<int>::normalizeExc () throw (Iex::MathExc);
+
+template <> const Vec4<int> &
+Vec4<int>::normalizeNonNull ();
+
+template <> Vec4<int>
+Vec4<int>::normalized () const;
+
+template <> Vec4<int>
+Vec4<int>::normalizedExc () const throw (Iex::MathExc);
+
+template <> Vec4<int>
+Vec4<int>::normalizedNonNull () const;
+
+
+//------------------------
+// Implementation of Vec2:
+//------------------------
+
+template <class T>
+inline T &
+Vec2<T>::operator [] (int i)
+{
+    return (&x)[i];
+}
+
+template <class T>
+inline const T &
+Vec2<T>::operator [] (int i) const
+{
+    return (&x)[i];
+}
+
+template <class T>
+inline
+Vec2<T>::Vec2 ()
+{
+    // empty
+}
+
+template <class T>
+inline
+Vec2<T>::Vec2 (T a)
+{
+    x = y = a;
+}
+
+template <class T>
+inline
+Vec2<T>::Vec2 (T a, T b)
+{
+    x = a;
+    y = b;
+}
+
+template <class T>
+inline
+Vec2<T>::Vec2 (const Vec2 &v)
+{
+    x = v.x;
+    y = v.y;
+}
+
+template <class T>
+template <class S>
+inline
+Vec2<T>::Vec2 (const Vec2<S> &v)
+{
+    x = T (v.x);
+    y = T (v.y);
+}
+
+template <class T>
+inline const Vec2<T> &
+Vec2<T>::operator = (const Vec2 &v)
+{
+    x = v.x;
+    y = v.y;
+    return *this;
+}
+
+template <class T>
+template <class S>
+inline void
+Vec2<T>::setValue (S a, S b)
+{
+    x = T (a);
+    y = T (b);
+}
+
+template <class T>
+template <class S>
+inline void
+Vec2<T>::setValue (const Vec2<S> &v)
+{
+    x = T (v.x);
+    y = T (v.y);
+}
+
+template <class T>
+template <class S>
+inline void
+Vec2<T>::getValue (S &a, S &b) const
+{
+    a = S (x);
+    b = S (y);
+}
+
+template <class T>
+template <class S>
+inline void
+Vec2<T>::getValue (Vec2<S> &v) const
+{
+    v.x = S (x);
+    v.y = S (y);
+}
+
+template <class T>
+inline T *
+Vec2<T>::getValue()
+{
+    return (T *) &x;
+}
+
+template <class T>
+inline const T *
+Vec2<T>::getValue() const
+{
+    return (const T *) &x;
+}
+
+template <class T>
+template <class S>
+inline bool
+Vec2<T>::operator == (const Vec2<S> &v) const
+{
+    return x == v.x && y == v.y;
+}
+
+template <class T>
+template <class S>
+inline bool
+Vec2<T>::operator != (const Vec2<S> &v) const
+{
+    return x != v.x || y != v.y;
+}
+
+template <class T>
+bool
+Vec2<T>::equalWithAbsError (const Vec2<T> &v, T e) const
+{
+    for (int i = 0; i < 2; i++)
+       if (!Imath::equalWithAbsError ((*this)[i], v[i], e))
+           return false;
+
+    return true;
+}
+
+template <class T>
+bool
+Vec2<T>::equalWithRelError (const Vec2<T> &v, T e) const
+{
+    for (int i = 0; i < 2; i++)
+       if (!Imath::equalWithRelError ((*this)[i], v[i], e))
+           return false;
+
+    return true;
+}
+
+template <class T>
+inline T
+Vec2<T>::dot (const Vec2 &v) const
+{
+    return x * v.x + y * v.y;
+}
+
+template <class T>
+inline T
+Vec2<T>::operator ^ (const Vec2 &v) const
+{
+    return dot (v);
+}
+
+template <class T>
+inline T
+Vec2<T>::cross (const Vec2 &v) const
+{
+    return x * v.y - y * v.x;
+
+}
+
+template <class T>
+inline T
+Vec2<T>::operator % (const Vec2 &v) const
+{
+    return x * v.y - y * v.x;
+}
+
+template <class T>
+inline const Vec2<T> &
+Vec2<T>::operator += (const Vec2 &v)
+{
+    x += v.x;
+    y += v.y;
+    return *this;
+}
+
+template <class T>
+inline Vec2<T>
+Vec2<T>::operator + (const Vec2 &v) const
+{
+    return Vec2 (x + v.x, y + v.y);
+}
+
+template <class T>
+inline const Vec2<T> &
+Vec2<T>::operator -= (const Vec2 &v)
+{
+    x -= v.x;
+    y -= v.y;
+    return *this;
+}
+
+template <class T>
+inline Vec2<T>
+Vec2<T>::operator - (const Vec2 &v) const
+{
+    return Vec2 (x - v.x, y - v.y);
+}
+
+template <class T>
+inline Vec2<T>
+Vec2<T>::operator - () const
+{
+    return Vec2 (-x, -y);
+}
+
+template <class T>
+inline const Vec2<T> &
+Vec2<T>::negate ()
+{
+    x = -x;
+    y = -y;
+    return *this;
+}
+
+template <class T>
+inline const Vec2<T> &
+Vec2<T>::operator *= (const Vec2 &v)
+{
+    x *= v.x;
+    y *= v.y;
+    return *this;
+}
+
+template <class T>
+inline const Vec2<T> &
+Vec2<T>::operator *= (T a)
+{
+    x *= a;
+    y *= a;
+    return *this;
+}
+
+template <class T>
+inline Vec2<T>
+Vec2<T>::operator * (const Vec2 &v) const
+{
+    return Vec2 (x * v.x, y * v.y);
+}
+
+template <class T>
+inline Vec2<T>
+Vec2<T>::operator * (T a) const
+{
+    return Vec2 (x * a, y * a);
+}
+
+template <class T>
+inline const Vec2<T> &
+Vec2<T>::operator /= (const Vec2 &v)
+{
+    x /= v.x;
+    y /= v.y;
+    return *this;
+}
+
+template <class T>
+inline const Vec2<T> &
+Vec2<T>::operator /= (T a)
+{
+    x /= a;
+    y /= a;
+    return *this;
+}
+
+template <class T>
+inline Vec2<T>
+Vec2<T>::operator / (const Vec2 &v) const
+{
+    return Vec2 (x / v.x, y / v.y);
+}
+
+template <class T>
+inline Vec2<T>
+Vec2<T>::operator / (T a) const
+{
+    return Vec2 (x / a, y / a);
+}
+
+template <class T>
+T
+Vec2<T>::lengthTiny () const
+{
+    T absX = (x >= T (0))? x: -x;
+    T absY = (y >= T (0))? y: -y;
+    
+    T max = absX;
+
+    if (max < absY)
+       max = absY;
+
+    if (max == T (0))
+       return T (0);
+
+    //
+    // Do not replace the divisions by max with multiplications by 1/max.
+    // Computing 1/max can overflow but the divisions below will always
+    // produce results less than or equal to 1.
+    //
+
+    absX /= max;
+    absY /= max;
+
+    return max * Math<T>::sqrt (absX * absX + absY * absY);
+}
+
+template <class T>
+inline T
+Vec2<T>::length () const
+{
+    T length2 = dot (*this);
+
+    if (length2 < T (2) * limits<T>::smallest())
+       return lengthTiny();
+
+    return Math<T>::sqrt (length2);
+}
+
+template <class T>
+inline T
+Vec2<T>::length2 () const
+{
+    return dot (*this);
+}
+
+template <class T>
+const Vec2<T> &
+Vec2<T>::normalize ()
+{
+    T l = length();
+
+    if (l != T (0))
+    {
+        //
+        // Do not replace the divisions by l with multiplications by 1/l.
+        // Computing 1/l can overflow but the divisions below will always
+        // produce results less than or equal to 1.
+        //
+
+       x /= l;
+       y /= l;
+    }
+
+    return *this;
+}
+
+template <class T>
+const Vec2<T> &
+Vec2<T>::normalizeExc () throw (Iex::MathExc)
+{
+    T l = length();
+
+    if (l == T (0))
+       throw NullVecExc ("Cannot normalize null vector.");
+
+    x /= l;
+    y /= l;
+    return *this;
+}
+
+template <class T>
+inline
+const Vec2<T> &
+Vec2<T>::normalizeNonNull ()
+{
+    T l = length();
+    x /= l;
+    y /= l;
+    return *this;
+}
+
+template <class T>
+Vec2<T>
+Vec2<T>::normalized () const
+{
+    T l = length();
+
+    if (l == T (0))
+       return Vec2 (T (0));
+
+    return Vec2 (x / l, y / l);
+}
+
+template <class T>
+Vec2<T>
+Vec2<T>::normalizedExc () const throw (Iex::MathExc)
+{
+    T l = length();
+
+    if (l == T (0))
+       throw NullVecExc ("Cannot normalize null vector.");
+
+    return Vec2 (x / l, y / l);
+}
+
+template <class T>
+inline
+Vec2<T>
+Vec2<T>::normalizedNonNull () const
+{
+    T l = length();
+    return Vec2 (x / l, y / l);
+}
+
+
+//-----------------------
+// Implementation of Vec3
+//-----------------------
+
+template <class T>
+inline T &
+Vec3<T>::operator [] (int i)
+{
+    return (&x)[i];
+}
+
+template <class T>
+inline const T &
+Vec3<T>::operator [] (int i) const
+{
+    return (&x)[i];
+}
+
+template <class T>
+inline
+Vec3<T>::Vec3 ()
+{
+    // empty
+}
+
+template <class T>
+inline
+Vec3<T>::Vec3 (T a)
+{
+    x = y = z = a;
+}
+
+template <class T>
+inline
+Vec3<T>::Vec3 (T a, T b, T c)
+{
+    x = a;
+    y = b;
+    z = c;
+}
+
+template <class T>
+inline
+Vec3<T>::Vec3 (const Vec3 &v)
+{
+    x = v.x;
+    y = v.y;
+    z = v.z;
+}
+
+template <class T>
+template <class S>
+inline
+Vec3<T>::Vec3 (const Vec3<S> &v)
+{
+    x = T (v.x);
+    y = T (v.y);
+    z = T (v.z);
+}
+
+template <class T>
+inline const Vec3<T> &
+Vec3<T>::operator = (const Vec3 &v)
+{
+    x = v.x;
+    y = v.y;
+    z = v.z;
+    return *this;
+}
+
+template <class T>
+template <class S>
+inline
+Vec3<T>::Vec3 (const Vec4<S> &v)
+{
+    x = T (v.x / v.w);
+    y = T (v.y / v.w);
+    z = T (v.z / v.w);
+}
+
+template <class T>
+template <class S>
+Vec3<T>::Vec3 (const Vec4<S> &v, InfException)
+{
+    T vx = T (v.x);
+    T vy = T (v.y);
+    T vz = T (v.z);
+    T vw = T (v.w);
+
+    T absW = (vw >= T (0))? vw: -vw;
+
+    if (absW < 1)
+    {
+        T m = baseTypeMax() * absW;
+        
+        if (vx <= -m || vx >= m || vy <= -m || vy >= m || vz <= -m || vz >= m)
+            throw InfPointExc ("Cannot normalize point at infinity.");
+    }
+
+    x = vx / vw;
+    y = vy / vw;
+    z = vz / vw;
+}
+
+template <class T>
+template <class S>
+inline void
+Vec3<T>::setValue (S a, S b, S c)
+{
+    x = T (a);
+    y = T (b);
+    z = T (c);
+}
+
+template <class T>
+template <class S>
+inline void
+Vec3<T>::setValue (const Vec3<S> &v)
+{
+    x = T (v.x);
+    y = T (v.y);
+    z = T (v.z);
+}
+
+template <class T>
+template <class S>
+inline void
+Vec3<T>::getValue (S &a, S &b, S &c) const
+{
+    a = S (x);
+    b = S (y);
+    c = S (z);
+}
+
+template <class T>
+template <class S>
+inline void
+Vec3<T>::getValue (Vec3<S> &v) const
+{
+    v.x = S (x);
+    v.y = S (y);
+    v.z = S (z);
+}
+
+template <class T>
+inline T *
+Vec3<T>::getValue()
+{
+    return (T *) &x;
+}
+
+template <class T>
+inline const T *
+Vec3<T>::getValue() const
+{
+    return (const T *) &x;
+}
+
+template <class T>
+template <class S>
+inline bool
+Vec3<T>::operator == (const Vec3<S> &v) const
+{
+    return x == v.x && y == v.y && z == v.z;
+}
+
+template <class T>
+template <class S>
+inline bool
+Vec3<T>::operator != (const Vec3<S> &v) const
+{
+    return x != v.x || y != v.y || z != v.z;
+}
+
+template <class T>
+bool
+Vec3<T>::equalWithAbsError (const Vec3<T> &v, T e) const
+{
+    for (int i = 0; i < 3; i++)
+       if (!Imath::equalWithAbsError ((*this)[i], v[i], e))
+           return false;
+
+    return true;
+}
+
+template <class T>
+bool
+Vec3<T>::equalWithRelError (const Vec3<T> &v, T e) const
+{
+    for (int i = 0; i < 3; i++)
+       if (!Imath::equalWithRelError ((*this)[i], v[i], e))
+           return false;
+
+    return true;
+}
+
+template <class T>
+inline T
+Vec3<T>::dot (const Vec3 &v) const
+{
+    return x * v.x + y * v.y + z * v.z;
+}
+
+template <class T>
+inline T
+Vec3<T>::operator ^ (const Vec3 &v) const
+{
+    return dot (v);
+}
+
+template <class T>
+inline Vec3<T>
+Vec3<T>::cross (const Vec3 &v) const
+{
+    return Vec3 (y * v.z - z * v.y,
+                z * v.x - x * v.z,
+                x * v.y - y * v.x);
+}
+
+template <class T>
+inline const Vec3<T> &
+Vec3<T>::operator %= (const Vec3 &v)
+{
+    T a = y * v.z - z * v.y;
+    T b = z * v.x - x * v.z;
+    T c = x * v.y - y * v.x;
+    x = a;
+    y = b;
+    z = c;
+    return *this;
+}
+
+template <class T>
+inline Vec3<T>
+Vec3<T>::operator % (const Vec3 &v) const
+{
+    return Vec3 (y * v.z - z * v.y,
+                z * v.x - x * v.z,
+                x * v.y - y * v.x);
+}
+
+template <class T>
+inline const Vec3<T> &
+Vec3<T>::operator += (const Vec3 &v)
+{
+    x += v.x;
+    y += v.y;
+    z += v.z;
+    return *this;
+}
+
+template <class T>
+inline Vec3<T>
+Vec3<T>::operator + (const Vec3 &v) const
+{
+    return Vec3 (x + v.x, y + v.y, z + v.z);
+}
+
+template <class T>
+inline const Vec3<T> &
+Vec3<T>::operator -= (const Vec3 &v)
+{
+    x -= v.x;
+    y -= v.y;
+    z -= v.z;
+    return *this;
+}
+
+template <class T>
+inline Vec3<T>
+Vec3<T>::operator - (const Vec3 &v) const
+{
+    return Vec3 (x - v.x, y - v.y, z - v.z);
+}
+
+template <class T>
+inline Vec3<T>
+Vec3<T>::operator - () const
+{
+    return Vec3 (-x, -y, -z);
+}
+
+template <class T>
+inline const Vec3<T> &
+Vec3<T>::negate ()
+{
+    x = -x;
+    y = -y;
+    z = -z;
+    return *this;
+}
+
+template <class T>
+inline const Vec3<T> &
+Vec3<T>::operator *= (const Vec3 &v)
+{
+    x *= v.x;
+    y *= v.y;
+    z *= v.z;
+    return *this;
+}
+
+template <class T>
+inline const Vec3<T> &
+Vec3<T>::operator *= (T a)
+{
+    x *= a;
+    y *= a;
+    z *= a;
+    return *this;
+}
+
+template <class T>
+inline Vec3<T>
+Vec3<T>::operator * (const Vec3 &v) const
+{
+    return Vec3 (x * v.x, y * v.y, z * v.z);
+}
+
+template <class T>
+inline Vec3<T>
+Vec3<T>::operator * (T a) const
+{
+    return Vec3 (x * a, y * a, z * a);
+}
+
+template <class T>
+inline const Vec3<T> &
+Vec3<T>::operator /= (const Vec3 &v)
+{
+    x /= v.x;
+    y /= v.y;
+    z /= v.z;
+    return *this;
+}
+
+template <class T>
+inline const Vec3<T> &
+Vec3<T>::operator /= (T a)
+{
+    x /= a;
+    y /= a;
+    z /= a;
+    return *this;
+}
+
+template <class T>
+inline Vec3<T>
+Vec3<T>::operator / (const Vec3 &v) const
+{
+    return Vec3 (x / v.x, y / v.y, z / v.z);
+}
+
+template <class T>
+inline Vec3<T>
+Vec3<T>::operator / (T a) const
+{
+    return Vec3 (x / a, y / a, z / a);
+}
+
+template <class T>
+T
+Vec3<T>::lengthTiny () const
+{
+    T absX = (x >= T (0))? x: -x;
+    T absY = (y >= T (0))? y: -y;
+    T absZ = (z >= T (0))? z: -z;
+    
+    T max = absX;
+
+    if (max < absY)
+       max = absY;
+
+    if (max < absZ)
+       max = absZ;
+
+    if (max == T (0))
+       return T (0);
+
+    //
+    // Do not replace the divisions by max with multiplications by 1/max.
+    // Computing 1/max can overflow but the divisions below will always
+    // produce results less than or equal to 1.
+    //
+
+    absX /= max;
+    absY /= max;
+    absZ /= max;
+
+    return max * Math<T>::sqrt (absX * absX + absY * absY + absZ * absZ);
+}
+
+template <class T>
+inline T
+Vec3<T>::length () const
+{
+    T length2 = dot (*this);
+
+    if (length2 < T (2) * limits<T>::smallest())
+       return lengthTiny();
+
+    return Math<T>::sqrt (length2);
+}
+
+template <class T>
+inline T
+Vec3<T>::length2 () const
+{
+    return dot (*this);
+}
+
+template <class T>
+const Vec3<T> &
+Vec3<T>::normalize ()
+{
+    T l = length();
+
+    if (l != T (0))
+    {
+        //
+        // Do not replace the divisions by l with multiplications by 1/l.
+        // Computing 1/l can overflow but the divisions below will always
+        // produce results less than or equal to 1.
+        //
+
+       x /= l;
+       y /= l;
+       z /= l;
+    }
+
+    return *this;
+}
+
+template <class T>
+const Vec3<T> &
+Vec3<T>::normalizeExc () throw (Iex::MathExc)
+{
+    T l = length();
+
+    if (l == T (0))
+       throw NullVecExc ("Cannot normalize null vector.");
+
+    x /= l;
+    y /= l;
+    z /= l;
+    return *this;
+}
+
+template <class T>
+inline
+const Vec3<T> &
+Vec3<T>::normalizeNonNull ()
+{
+    T l = length();
+    x /= l;
+    y /= l;
+    z /= l;
+    return *this;
+}
+
+template <class T>
+Vec3<T>
+Vec3<T>::normalized () const
+{
+    T l = length();
+
+    if (l == T (0))
+       return Vec3 (T (0));
+
+    return Vec3 (x / l, y / l, z / l);
+}
+
+template <class T>
+Vec3<T>
+Vec3<T>::normalizedExc () const throw (Iex::MathExc)
+{
+    T l = length();
+
+    if (l == T (0))
+       throw NullVecExc ("Cannot normalize null vector.");
+
+    return Vec3 (x / l, y / l, z / l);
+}
+
+template <class T>
+inline
+Vec3<T>
+Vec3<T>::normalizedNonNull () const
+{
+    T l = length();
+    return Vec3 (x / l, y / l, z / l);
+}
+
+
+//-----------------------
+// Implementation of Vec4
+//-----------------------
+
+template <class T>
+inline T &
+Vec4<T>::operator [] (int i)
+{
+    return (&x)[i];
+}
+
+template <class T>
+inline const T &
+Vec4<T>::operator [] (int i) const
+{
+    return (&x)[i];
+}
+
+template <class T>
+inline
+Vec4<T>::Vec4 ()
+{
+    // empty
+}
+
+template <class T>
+inline
+Vec4<T>::Vec4 (T a)
+{
+    x = y = z = w = a;
+}
+
+template <class T>
+inline
+Vec4<T>::Vec4 (T a, T b, T c, T d)
+{
+    x = a;
+    y = b;
+    z = c;
+    w = d;
+}
+
+template <class T>
+inline
+Vec4<T>::Vec4 (const Vec4 &v)
+{
+    x = v.x;
+    y = v.y;
+    z = v.z;
+    w = v.w;
+}
+
+template <class T>
+template <class S>
+inline
+Vec4<T>::Vec4 (const Vec4<S> &v)
+{
+    x = T (v.x);
+    y = T (v.y);
+    z = T (v.z);
+    w = T (v.w);
+}
+
+template <class T>
+inline const Vec4<T> &
+Vec4<T>::operator = (const Vec4 &v)
+{
+    x = v.x;
+    y = v.y;
+    z = v.z;
+    w = v.w;
+    return *this;
+}
+
+template <class T>
+template <class S>
+inline
+Vec4<T>::Vec4 (const Vec3<S> &v)
+{
+    x = T (v.x);
+    y = T (v.y);
+    z = T (v.z);
+    w = T (1);
+}
+
+template <class T>
+template <class S>
+inline bool
+Vec4<T>::operator == (const Vec4<S> &v) const
+{
+    return x == v.x && y == v.y && z == v.z && w == v.w;
+}
+
+template <class T>
+template <class S>
+inline bool
+Vec4<T>::operator != (const Vec4<S> &v) const
+{
+    return x != v.x || y != v.y || z != v.z || w != v.w;
+}
+
+template <class T>
+bool
+Vec4<T>::equalWithAbsError (const Vec4<T> &v, T e) const
+{
+    for (int i = 0; i < 4; i++)
+        if (!Imath::equalWithAbsError ((*this)[i], v[i], e))
+            return false;
+
+    return true;
+}
+
+template <class T>
+bool
+Vec4<T>::equalWithRelError (const Vec4<T> &v, T e) const
+{
+    for (int i = 0; i < 4; i++)
+        if (!Imath::equalWithRelError ((*this)[i], v[i], e))
+            return false;
+
+    return true;
+}
+
+template <class T>
+inline T
+Vec4<T>::dot (const Vec4 &v) const
+{
+    return x * v.x + y * v.y + z * v.z + w * v.w;
+}
+
+template <class T>
+inline T
+Vec4<T>::operator ^ (const Vec4 &v) const
+{
+    return dot (v);
+}
+
+
+template <class T>
+inline const Vec4<T> &
+Vec4<T>::operator += (const Vec4 &v)
+{
+    x += v.x;
+    y += v.y;
+    z += v.z;
+    w += v.w;
+    return *this;
+}
+
+template <class T>
+inline Vec4<T>
+Vec4<T>::operator + (const Vec4 &v) const
+{
+    return Vec4 (x + v.x, y + v.y, z + v.z, w + v.w);
+}
+
+template <class T>
+inline const Vec4<T> &
+Vec4<T>::operator -= (const Vec4 &v)
+{
+    x -= v.x;
+    y -= v.y;
+    z -= v.z;
+    w -= v.w;
+    return *this;
+}
+
+template <class T>
+inline Vec4<T>
+Vec4<T>::operator - (const Vec4 &v) const
+{
+    return Vec4 (x - v.x, y - v.y, z - v.z, w - v.w);
+}
+
+template <class T>
+inline Vec4<T>
+Vec4<T>::operator - () const
+{
+    return Vec4 (-x, -y, -z, -w);
+}
+
+template <class T>
+inline const Vec4<T> &
+Vec4<T>::negate ()
+{
+    x = -x;
+    y = -y;
+    z = -z;
+    w = -w;
+    return *this;
+}
+
+template <class T>
+inline const Vec4<T> &
+Vec4<T>::operator *= (const Vec4 &v)
+{
+    x *= v.x;
+    y *= v.y;
+    z *= v.z;
+    w *= v.w;
+    return *this;
+}
+
+template <class T>
+inline const Vec4<T> &
+Vec4<T>::operator *= (T a)
+{
+    x *= a;
+    y *= a;
+    z *= a;
+    w *= a;
+    return *this;
+}
+
+template <class T>
+inline Vec4<T>
+Vec4<T>::operator * (const Vec4 &v) const
+{
+    return Vec4 (x * v.x, y * v.y, z * v.z, w * v.w);
+}
+
+template <class T>
+inline Vec4<T>
+Vec4<T>::operator * (T a) const
+{
+    return Vec4 (x * a, y * a, z * a, w * a);
+}
+
+template <class T>
+inline const Vec4<T> &
+Vec4<T>::operator /= (const Vec4 &v)
+{
+    x /= v.x;
+    y /= v.y;
+    z /= v.z;
+    w /= v.w;
+    return *this;
+}
+
+template <class T>
+inline const Vec4<T> &
+Vec4<T>::operator /= (T a)
+{
+    x /= a;
+    y /= a;
+    z /= a;
+    w /= a;
+    return *this;
+}
+
+template <class T>
+inline Vec4<T>
+Vec4<T>::operator / (const Vec4 &v) const
+{
+    return Vec4 (x / v.x, y / v.y, z / v.z, w / v.w);
+}
+
+template <class T>
+inline Vec4<T>
+Vec4<T>::operator / (T a) const
+{
+    return Vec4 (x / a, y / a, z / a, w / a);
+}
+
+template <class T>
+T
+Vec4<T>::lengthTiny () const
+{
+    T absX = (x >= T (0))? x: -x;
+    T absY = (y >= T (0))? y: -y;
+    T absZ = (z >= T (0))? z: -z;
+    T absW = (w >= T (0))? w: -w;
+    
+    T max = absX;
+
+    if (max < absY)
+        max = absY;
+
+    if (max < absZ)
+        max = absZ;
+
+    if (max < absW)
+        max = absW;
+
+    if (max == T (0))
+        return T (0);
+
+    //
+    // Do not replace the divisions by max with multiplications by 1/max.
+    // Computing 1/max can overflow but the divisions below will always
+    // produce results less than or equal to 1.
+    //
+
+    absX /= max;
+    absY /= max;
+    absZ /= max;
+    absW /= max;
+
+    return max *
+        Math<T>::sqrt (absX * absX + absY * absY + absZ * absZ + absW * absW);
+}
+
+template <class T>
+inline T
+Vec4<T>::length () const
+{
+    T length2 = dot (*this);
+
+    if (length2 < T (2) * limits<T>::smallest())
+        return lengthTiny();
+
+    return Math<T>::sqrt (length2);
+}
+
+template <class T>
+inline T
+Vec4<T>::length2 () const
+{
+    return dot (*this);
+}
+
+template <class T>
+const Vec4<T> &
+Vec4<T>::normalize ()
+{
+    T l = length();
+
+    if (l != T (0))
+    {
+        //
+        // Do not replace the divisions by l with multiplications by 1/l.
+        // Computing 1/l can overflow but the divisions below will always
+        // produce results less than or equal to 1.
+        //
+
+        x /= l;
+        y /= l;
+        z /= l;
+        w /= l;
+    }
+
+    return *this;
+}
+
+template <class T>
+const Vec4<T> &
+Vec4<T>::normalizeExc () throw (Iex::MathExc)
+{
+    T l = length();
+
+    if (l == T (0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    x /= l;
+    y /= l;
+    z /= l;
+    w /= l;
+    return *this;
+}
+
+template <class T>
+inline
+const Vec4<T> &
+Vec4<T>::normalizeNonNull ()
+{
+    T l = length();
+    x /= l;
+    y /= l;
+    z /= l;
+    w /= l;
+    return *this;
+}
+
+template <class T>
+Vec4<T>
+Vec4<T>::normalized () const
+{
+    T l = length();
+
+    if (l == T (0))
+        return Vec4 (T (0));
+
+    return Vec4 (x / l, y / l, z / l, w / l);
+}
+
+template <class T>
+Vec4<T>
+Vec4<T>::normalizedExc () const throw (Iex::MathExc)
+{
+    T l = length();
+
+    if (l == T (0))
+        throw NullVecExc ("Cannot normalize null vector.");
+
+    return Vec4 (x / l, y / l, z / l, w / l);
+}
+
+template <class T>
+inline
+Vec4<T>
+Vec4<T>::normalizedNonNull () const
+{
+    T l = length();
+    return Vec4 (x / l, y / l, z / l, w / l);
+}
+
+//-----------------------------
+// Stream output implementation
+//-----------------------------
+
+template <class T>
+std::ostream &
+operator << (std::ostream &s, const Vec2<T> &v)
+{
+    return s << '(' << v.x << ' ' << v.y << ')';
+}
+
+template <class T>
+std::ostream &
+operator << (std::ostream &s, const Vec3<T> &v)
+{
+    return s << '(' << v.x << ' ' << v.y << ' ' << v.z << ')';
+}
+
+template <class T>
+std::ostream &
+operator << (std::ostream &s, const Vec4<T> &v)
+{
+    return s << '(' << v.x << ' ' << v.y << ' ' << v.z << ' ' << v.w << ')';
+}
+
+
+//-----------------------------------------
+// Implementation of reverse multiplication
+//-----------------------------------------
+
+template <class T>
+inline Vec2<T>
+operator * (T a, const Vec2<T> &v)
+{
+    return Vec2<T> (a * v.x, a * v.y);
+}
+
+template <class T>
+inline Vec3<T>
+operator * (T a, const Vec3<T> &v)
+{
+    return Vec3<T> (a * v.x, a * v.y, a * v.z);
+}
+
+template <class T>
+inline Vec4<T>
+operator * (T a, const Vec4<T> &v)
+{
+    return Vec4<T> (a * v.x, a * v.y, a * v.z, a * v.w);
+}
+
+
+#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
+#pragma warning(pop)
+#endif
+
+} // namespace Imath
+
+#endif
diff --git a/3rdparty/openexr/Imath/ImathVecAlgo.h b/3rdparty/openexr/Imath/ImathVecAlgo.h
new file mode 100644 (file)
index 0000000..33e2c12
--- /dev/null
@@ -0,0 +1,146 @@
+///////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+// Digital Ltd. LLC
+// 
+// All rights reserved.
+// 
+// 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 Industrial Light & Magic 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 COPYRIGHT
+// OWNER 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 INCLUDED_IMATHVECALGO_H
+#define INCLUDED_IMATHVECALGO_H
+
+//-------------------------------------------------------------------------
+//
+//      This file contains algorithms applied to or in conjunction
+//      with points (Imath::Vec2 and Imath::Vec3).
+//      The assumption made is that these functions are called much
+//      less often than the basic point functions or these functions
+//      require more support classes.
+//
+//-------------------------------------------------------------------------
+
+#include "ImathVec.h"
+#include "ImathLimits.h"
+
+namespace Imath {
+
+
+//-----------------------------------------------------------------
+// Find the projection of vector t onto vector s (Vec2, Vec3, Vec4)
+//-----------------------------------------------------------------
+
+template <class Vec> Vec        project (const Vec &s, const Vec &t);
+
+
+//------------------------------------------------
+// Find a vector that is perpendicular to s and
+// in the same plane as s and t (Vec2, Vec3, Vec4)
+//------------------------------------------------
+
+template <class Vec> Vec        orthogonal (const Vec &s, const Vec &t);
+
+
+//-----------------------------------------------
+// Find the direction of a ray s after reflection
+// off a plane with normal t (Vec2, Vec3, Vec4)
+//-----------------------------------------------
+
+template <class Vec> Vec        reflect (const Vec &s, const Vec &t);
+
+
+//--------------------------------------------------------------------
+// Find the vertex of triangle (v0, v1, v2) that is closest to point p
+// (Vec2, Vec3, Vec4)
+//--------------------------------------------------------------------
+
+template <class Vec> Vec        closestVertex (const Vec &v0,
+                                               const Vec &v1,
+                                               const Vec &v2, 
+                                               const Vec &p);
+
+//---------------
+// Implementation
+//---------------
+
+template <class Vec>
+Vec
+project (const Vec &s, const Vec &t)
+{
+    Vec sNormalized = s.normalized();
+    return sNormalized * (sNormalized ^ t);
+}
+
+template <class Vec>
+Vec
+orthogonal (const Vec &s, const Vec &t)
+{
+    return t - project (s, t);
+}
+
+template <class Vec>
+Vec
+reflect (const Vec &s, const Vec &t)
+{
+    return s - typename Vec::BaseType(2) * (s - project(t, s));
+}
+
+template <class Vec>
+Vec
+closestVertex(const Vec &v0,
+              const Vec &v1,
+              const Vec &v2, 
+              const Vec &p)
+{
+    Vec nearest = v0;
+    typename Vec::BaseType neardot = (v0 - p).length2();
+    typename Vec::BaseType tmp     = (v1 - p).length2();
+
+    if (tmp < neardot)
+    {
+        neardot = tmp;
+        nearest = v1;
+    }
+
+    tmp = (v2 - p).length2();
+
+    if (tmp < neardot)
+    {
+        neardot = tmp;
+        nearest = v2;
+    }
+
+    return nearest;
+}
+
+
+} // namespace Imath
+
+#endif
similarity index 96%
rename from 3rdparty/ilmimf/LICENSE
rename to 3rdparty/openexr/LICENSE
index 268d234..6372750 100644 (file)
@@ -1,4 +1,4 @@
-Copyright (c) 2004, Industrial Light & Magic, a division of Lucasfilm
+Copyright (c) 2006, Industrial Light & Magic, a division of Lucasfilm
 Entertainment Company Ltd.  Portions contributed and copyright held by
 others as indicated.  All rights reserved.
 
diff --git a/3rdparty/openexr/OpenEXRConfig.h.cmakein b/3rdparty/openexr/OpenEXRConfig.h.cmakein
new file mode 100644 (file)
index 0000000..0a6b592
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Define and set to 1 if the target system supports a proc filesystem
+// compatible with the Linux kernel's proc filesystem.  Note that this
+// is only used by a program in the IlmImfTest test suite, it's not
+// used by any OpenEXR library or application code.
+//
+
+#undef HAVE_LINUX_PROCFS
+
+//
+// Define and set to 1 if the target system is a Darwin-based system
+// (e.g., OS X).
+//
+
+#undef HAVE_DARWIN
+
+//
+// Define and set to 1 if the target system has a complete <iomanip>
+// implementation, specifically if it supports the std::right
+// formatter.
+//
+
+#undef HAVE_COMPLETE_IOMANIP
+
+//
+// Define and set to 1 if the target system has support for large
+// stack sizes.
+//
+
+#undef HAVE_LARGE_STACK
+
+//
+// Version string for runtime access
+//
+#define OPENEXR_VERSION_STRING "1.7.1"
+#define OPENEXR_PACKAGE_STRING "OpenEXR 1.7.1"
index b644212..e6639a9 100644 (file)
@@ -161,11 +161,12 @@ OCV_OPTION(BUILD_ANDROID_PACKAGE    "Build platform-specific package for Google
 
 
 # 3rd party libs
-OCV_OPTION(BUILD_ZLIB               "Build zlib from source"         WIN32 OR IOS OR APPLE )
-OCV_OPTION(BUILD_TIFF               "Build libtiff from source"      WIN32 OR IOS OR ANDROID OR APPLE )
-OCV_OPTION(BUILD_JASPER             "Build libjasper from source"    WIN32 OR IOS OR ANDROID OR APPLE )
-OCV_OPTION(BUILD_JPEG               "Build libjpeg from source"      WIN32 OR IOS OR ANDROID OR APPLE )
-OCV_OPTION(BUILD_PNG                "Build libpng from source"       WIN32 OR IOS OR ANDROID OR APPLE )
+OCV_OPTION(BUILD_ZLIB               "Build zlib from source"         WIN32 OR APPLE )
+OCV_OPTION(BUILD_TIFF               "Build libtiff from source"      WIN32 OR ANDROID OR APPLE )
+OCV_OPTION(BUILD_JASPER             "Build libjasper from source"    WIN32 OR ANDROID OR APPLE )
+OCV_OPTION(BUILD_JPEG               "Build libjpeg from source"      WIN32 OR ANDROID OR APPLE )
+OCV_OPTION(BUILD_PNG                "Build libpng from source"       WIN32 OR ANDROID OR APPLE )
+OCV_OPTION(BUILD_OPENEXR            "Build openexr from source"      WIN32 OR ANDROID OR APPLE )
 
 # OpenCV installation options
 # ===================================================
@@ -633,8 +634,11 @@ if(WITH_JASPER)
 else()
   status("    JPEG 2000:"  "NO")
 endif()
-
-status("    OpenEXR:"   WITH_OPENEXR AND OPENEXR_FOUND     THEN "${OPENEXR_LIBRARIES} (ver ${OPENEXR_VERSION})"                     ELSE NO)
+if(WITH_OPENEXR)
+  status("    OpenEXR:"  OPENEXR_FOUND  THEN "${OPENEXR_LIBRARIES} (ver ${OPENEXR_VERSION})" ELSE "build (ver ${OPENEXR_VERSION})")
+else()
+  status("    OpenEXR:"  "NO")
+endif()
 
 # ========================== VIDEO IO ==========================
 status("")
index 36b89ca..5988169 100644 (file)
@@ -142,7 +142,19 @@ set(PNG_VERSION "${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VE
 
 # --- OpenEXR (optional) ---
 if(WITH_OPENEXR)
-  include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake")
+  if(BUILD_OPENEXR)
+    ocv_clear_vars(OPENEXR_FOUND)
+  else()
+    include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake")
+  endif()
+endif()
+
+if(WITH_OPENEXR AND NOT OPENEXR_FOUND)
+  ocv_clear_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION)
+
+  set(OPENEXR_LIBRARIES IlmImf)
+  set(OPENEXR_ILMIMF_LIBRARY IlmImf)
+  add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/openexr")
 endif()
 
 #cmake 2.8.2 bug - it fails to determine zlib version
index d53c17c..30c0c82 100644 (file)
@@ -39,9 +39,9 @@ if(WITH_JASPER)
   list(APPEND GRFMT_LIBS ${JASPER_LIBRARIES})
 endif()
 
-if(WITH_OPENEXR AND OPENEXR_FOUND)
+if(WITH_OPENEXR)
   add_definitions(-DHAVE_OPENEXR)
-  ocv_include_directories(${OPENEXR_INCLUDE_PATHS})
+  include_directories(SYSTEM ${OPENEXR_INCLUDE_PATHS})
   list(APPEND GRFMT_LIBS ${OPENEXR_LIBRARIES})
 endif()