[Scummvm-cvs-logs] SF.net SVN: scummvm:[35290] scummvm/trunk/engines/gob

drmccoy at users.sourceforge.net drmccoy at users.sourceforge.net
Tue Dec 9 15:56:33 CET 2008


Revision: 35290
          http://scummvm.svn.sourceforge.net/scummvm/?rev=35290&view=rev
Author:   drmccoy
Date:     2008-12-09 14:56:33 +0000 (Tue, 09 Dec 2008)

Log Message:
-----------
Experimental support for VMD frames encoded in Indeo 3 (Indeo 3 decoder closely based on the one in ffmpeg).
Since Indeo 3 uses full 24bit colors (in YUV-space), frame data is mapped to the current palette (using an octree, should be the fasted way, methinks) and dithered with the Sierra-2-4A ("Filter Light") error distribution algorithm.

Modified Paths:
--------------
    scummvm/trunk/engines/gob/coktelvideo.cpp
    scummvm/trunk/engines/gob/coktelvideo.h
    scummvm/trunk/engines/gob/module.mk
    scummvm/trunk/engines/gob/videoplayer.cpp

Added Paths:
-----------
    scummvm/trunk/engines/gob/indeo3.cpp
    scummvm/trunk/engines/gob/indeo3.h
    scummvm/trunk/engines/gob/indeo3data.h

Modified: scummvm/trunk/engines/gob/coktelvideo.cpp
===================================================================
--- scummvm/trunk/engines/gob/coktelvideo.cpp	2008-12-09 14:55:21 UTC (rev 35289)
+++ scummvm/trunk/engines/gob/coktelvideo.cpp	2008-12-09 14:56:33 UTC (rev 35290)
@@ -27,6 +27,7 @@
 #include "common/system.h"
 
 #include "gob/coktelvideo.h"
+#include "gob/indeo3.h"
 
 namespace Gob {
 
@@ -71,6 +72,7 @@
 
 	// Palette
 	_stream->read((byte *) _palette, 768);
+	notifyChangedPalette();
 
 	// Standard coordinates
 	if (_version >= 3) {
@@ -196,6 +198,11 @@
 	_frameLength = 1000 / _frameRate;
 }
 
+void Imd::setPalette(const byte *palette) {
+	memcpy(_palette, palette, 768);
+	notifyChangedPalette();
+}
+
 void Imd::setXY(int16 x, int16 y) {
 	// Adjusting the standard coordinates
 	if (_stdX != -1) {
@@ -434,6 +441,7 @@
 
 	_frameDataSize = _vidBufferSize = 0;
 	_frameData = _vidBuffer = 0;
+	_frameDataLen = 0;
 
 	memset(_palette, 0, 768);
 
@@ -578,7 +586,10 @@
 		if (cmd == 0xFFF4) {
 			_stream->seek(2, SEEK_CUR);
 			state.flags |= kStatePalette;
+
 			_stream->read(_palette, 768);
+			notifyChangedPalette();
+
 			cmd = _stream->readUint16LE();
 		}
 
@@ -601,6 +612,7 @@
 			state.flags |= 1;
 			cmd = _stream->readUint32LE();
 			_stream->read(_frameData, cmd + 2);
+			_frameDataLen = cmd + 2;
 
 			if (_vidMemWidth <= state.right) {
 				state.left = 0;
@@ -622,6 +634,7 @@
 		} else if (cmd != 0) {
 
 			_stream->read(_frameData, cmd + 2);
+			_frameDataLen = cmd + 2;
 
 			state.flags |= renderFrame(state.left, state.top, state.right, state.bottom);
 			state.flags |= _frameData[0];
@@ -668,6 +681,7 @@
 		int index = *dataPtr++;
 		// 16 entries with each 3 bytes (RGB)
 		memcpy(_palette + index * 3, dataPtr, MIN((255 - index) * 3, 48));
+		notifyChangedPalette();
 
 		retVal = kStatePalette;
 		dataPtr += 48;
@@ -884,6 +898,8 @@
 
 	if (!(_version & 2))
 		_features |= kFeaturesPalette;
+	else
+		_features |= kFeaturesFullColor;
 
 	// 0x4 (4)
 
@@ -908,6 +924,7 @@
 	if ((_width != 0) && (_height != 0)) {
 		_hasVideo = true;
 		_features |= kFeaturesVideo;
+		_codecIndeo3 = new Indeo3(_width, _height);
 	} else
 		_hasVideo = false;
 
@@ -938,6 +955,7 @@
 	// 0x1A (26)
 
 	_stream->read((byte *) _palette, 768);
+	notifyChangedPalette();
 
 	// 0x31A (794)
 
@@ -956,6 +974,7 @@
 		_frameData = new byte[_frameDataSize];
 		assert(_frameData);
 		memset(_frameData, 0, _frameDataSize);
+
 		_vidBuffer = new byte[_vidBufferSize];
 		assert(_vidBuffer);
 		memset(_vidBuffer, 0, _vidBufferSize);
@@ -1011,7 +1030,7 @@
 		for (uint16 j = 0; j < _partsPerFrame; j++) {
 
 			_frames[i].parts[j].type = (PartType) _stream->readByte();
-			_stream->skip(1); // Unknown
+			_frames[i].parts[j].field_1 = _stream->readByte();
 			_frames[i].parts[j].size = _stream->readUint32LE();
 
 			if (_frames[i].parts[j].type == kPartTypeAudio) {
@@ -1025,7 +1044,7 @@
 				_frames[i].parts[j].top = _stream->readUint16LE();
 				_frames[i].parts[j].right = _stream->readUint16LE();
 				_frames[i].parts[j].bottom = _stream->readUint16LE();
-				_stream->skip(1); // Unknown
+				_frames[i].parts[j].field_E = _stream->readByte();
 				_frames[i].parts[j].flags = _stream->readByte();
 
 			} else if (_frames[i].parts[j].type == kPartTypeExtraData) {
@@ -1043,6 +1062,8 @@
 		}
 	}
 
+	_stream->seek(_firstFramePos);
+
 	if (numExtraData == 0)
 		return true;
 
@@ -1079,6 +1100,7 @@
 		}
 	}
 
+	_stream->seek(_firstFramePos);
 	return true;
 }
 
@@ -1144,11 +1166,15 @@
 void Vmd::clear(bool del) {
 	Imd::clear(del);
 
-	if (del)
+	if (del) {
+		delete _codecIndeo3;
 		delete[] _frames;
+	}
 
 	_hasVideo = true;
 
+	_codecIndeo3 = 0;
+
 	_partsPerFrame = 0;
 	_frames = 0;
 
@@ -1229,6 +1255,8 @@
 				uint8 count = _stream->readByte();
 
 				_stream->read(_palette + index * 3, (count + 1) * 3);
+				notifyChangedPalette();
+
 				_stream->skip((255 - count) * 3);
 
 				state.flags |= kStatePalette;
@@ -1237,13 +1265,15 @@
 			}
 
 			_stream->read(_frameData, size);
+			_frameDataLen = size;
 
-			if (renderFrame(part.left, part.top, part.right, part.bottom)) {
+			int16 l = part.left, t = part.top, r = part.right, b = part.bottom;
+			if (renderFrame(l, t, r, b)) {
 				// Rendering succeeded, merging areas
-				state.left = MIN(state.left, part.left);
-				state.top = MIN(state.top, part.top);
-				state.right = MAX(state.right, part.right);
-				state.bottom = MAX(state.bottom, part.bottom);
+				state.left   = MIN(state.left,   l);
+				state.top    = MIN(state.top,    t);
+				state.right  = MAX(state.right,  r);
+				state.bottom = MAX(state.bottom, b);
 			}
 
 		} else if (part.type == 4) {
@@ -1300,28 +1330,50 @@
 	}
 }
 
-uint32 Vmd::renderFrame(int16 left, int16 top, int16 right, int16 bottom) {
+uint32 Vmd::renderFrame(int16 &left, int16 &top, int16 &right, int16 &bottom) {
 	if (!_frameData || !_vidMem || (_width <= 0) || (_height <= 0))
 		return 0;
 
 	int16 width = right - left + 1;
 	int16 height = bottom - top + 1;
 	int16 sW = _vidMemWidth;
+	uint32 dataLen = _frameDataLen;
 	byte *dataPtr = _frameData;
 	byte *imdVidMem = _vidMem + sW * top + left;
 	byte *srcPtr;
-	uint8 type = *dataPtr++;
+	uint8 type;
 
-	srcPtr = dataPtr;
+	if ((width < 0) || (height < 0))
+		return 1;
 
-	if (type & 0x80) { // Frame data is compressed
+	if (Indeo3::isIndeo3(dataPtr, dataLen)) {
+		if (!_codecIndeo3)
+			return 0;
+
+		if (!_codecIndeo3->decompressFrame(dataPtr, dataLen, _vidBuffer, width, height))
+			return 0;
+
+		type = 2;
 		srcPtr = _vidBuffer;
-		type &= 0x7F;
-		if ((type == 2) && (width == sW)) {
-			deLZ77(imdVidMem, dataPtr);
-			return 1;
-		} else
-			deLZ77(srcPtr, dataPtr);
+		width = _width;
+		height = _height;
+		right = left + width - 1;
+		bottom = top + height - 1;
+
+	} else {
+		type = *dataPtr++;
+		srcPtr = dataPtr;
+
+		if (type & 0x80) { // Frame data is compressed
+			srcPtr = _vidBuffer;
+			type &= 0x7F;
+			if ((type == 2) && (width == sW)) {
+				deLZ77(imdVidMem, dataPtr);
+				return 1;
+			} else
+				deLZ77(srcPtr, dataPtr);
+		}
+
 	}
 
 	uint16 pixCount, pixWritten;
@@ -1576,4 +1628,9 @@
 	return stream;
 }
 
+void Vmd::notifyChangedPalette() {
+	if (_codecIndeo3)
+		_codecIndeo3->setPalette(_palette);
+}
+
 } // End of namespace Gob

Modified: scummvm/trunk/engines/gob/coktelvideo.h
===================================================================
--- scummvm/trunk/engines/gob/coktelvideo.h	2008-12-09 14:55:21 UTC (rev 35289)
+++ scummvm/trunk/engines/gob/coktelvideo.h	2008-12-09 14:56:33 UTC (rev 35290)
@@ -33,6 +33,8 @@
 
 namespace Gob {
 
+class Indeo3;
+
 /** Common interface for handling Coktel Vision videos and derivated formats. */
 class CoktelVideo {
 public:
@@ -51,7 +53,9 @@
 		/** Has a frame positions table. */
 		kFeaturesFramesPos = 0x200,
 		/** Has video. */
-		kFeaturesVideo = 0x400
+		kFeaturesVideo = 0x400,
+		/** Is a full color (non-paletted) video. */
+		kFeaturesFullColor = 0x4000
 	};
 
 	enum StateFlags {
@@ -133,6 +137,8 @@
 	/** Set the frame rate. */
 	virtual void setFrameRate(int16 frameRate) = 0;
 
+	virtual void setPalette(const byte *palette) = 0;
+
 	/** Set the coordinations where to draw the video. */
 	virtual void setXY(int16 x, int16 y) = 0;
 	/** Use a specific memory block as video memory. */
@@ -179,6 +185,9 @@
 	virtual void copyCurrentFrame(byte *dest,
 			uint16 left, uint16 top, uint16 width, uint16 height,
 			uint16 x, uint16 y, uint16 pitch, int16 transp = -1) = 0;
+
+protected:
+	virtual void notifyChangedPalette() {}
 };
 
 /** Coktel Vision's IMD files.
@@ -212,6 +221,8 @@
 
 	void setFrameRate(int16 frameRate);
 
+	void setPalette(const byte *palette);
+
 	bool load(Common::SeekableReadStream &stream);
 	void unload();
 
@@ -256,6 +267,7 @@
 
 	uint32 _frameDataSize, _vidBufferSize;
 	byte *_frameData, *_vidBuffer;
+	uint32 _frameDataLen;
 
 	byte _palette[768];
 
@@ -331,6 +343,8 @@
 	} PACKED_STRUCT;
 	struct Part {
 		PartType type;
+		byte field_1;
+		byte field_E;
 		uint32 size;
 		int16 left;
 		int16 top;
@@ -359,10 +373,12 @@
 	byte _soundBytesPerSample;
 	byte _soundStereo; // (0: mono, 1: old-style stereo, 2: new-style stereo)
 
+	Indeo3 *_codecIndeo3;
+
 	void clear(bool del = true);
 
 	State processFrame(uint16 frame);
-	uint32 renderFrame(int16 left, int16 top, int16 right, int16 bottom);
+	uint32 renderFrame(int16 &left, int16 &top, int16 &right, int16 &bottom);
 
 	void deRLE(byte *&srcPtr, byte *&destPtr, int16 len);
 
@@ -372,6 +388,8 @@
 	void filledSoundSlice(uint32 size);
 	void filledSoundSlices(uint32 size, uint32 mask);
 	void deDPCM(byte *soundBuf, byte *dataBuf, int16 &init, uint32 n);
+
+	void notifyChangedPalette();
 };
 
 } // End of namespace Gob

Added: scummvm/trunk/engines/gob/indeo3.cpp
===================================================================
--- scummvm/trunk/engines/gob/indeo3.cpp	                        (rev 0)
+++ scummvm/trunk/engines/gob/indeo3.cpp	2008-12-09 14:56:33 UTC (rev 35290)
@@ -0,0 +1,1349 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+/* Intel Indeo 3 decompressor, derived from ffmpeg.
+ *
+ * Original copyright note: * Intel Indeo 3 (IV31, IV32, etc.) video decoder for ffmpeg
+ * written, produced, and directed by Alan Smithee
+ */
+
+#include "common/system.h"
+#include "common/endian.h"
+#include "common/stream.h"
+#include "common/frac.h"
+#include "common/file.h"
+
+#include "gob/indeo3.h"
+#include "gob/indeo3data.h"
+
+namespace Gob {
+
+const int Ordered8x8::map[8][8] = {
+	{0, 15, 3, 18, 1, 15, 4, 19},
+	{10, 5, 13, 8, 11, 6, 14, 9},
+	{2, 17, 1, 16, 3, 18, 2, 17},
+	{12, 7, 11, 6, 13, 8, 12, 7},
+	{0, 15, 4, 19, 0, 15, 4, 19},
+	{10, 5, 14, 9, 10, 5, 14, 9},
+	{3, 18, 2, 16, 3, 17, 1, 16},
+	{13, 8, 11, 7, 12, 7, 11, 6}
+};
+
+PalOctree::PalOctree(const byte *palette, byte depth) : _depth(depth) {
+	assert((depth > 1) && (depth < 9));
+
+	build(palette);
+}
+
+PalOctree::~PalOctree() {
+	delete _root;
+}
+
+void PalOctree::build(const byte *palette) {
+	_root = new Node(0, 0, 0, 0);
+
+	for (int i = 0; i < 256; i++, palette += 3) {
+		byte c1, c2, c3;
+		byte oC1, oC2, oC3;
+
+		oC1 = c1 = palette[0];
+		oC2 = c2 = palette[1];
+		oC3 = c3 = palette[2];
+
+		Node *node = _root;
+		for (int j = 0; j < _depth; j++) {
+			// Generating an index out of the upper-most bits
+			int n = 4 * (c1 >> 7) + 2 * (c2 >> 7) + (c3 >> 7);
+
+			if (!node->children[n]) {
+				// Found a free place
+				node->children[n] = new Node(i, oC1, oC2, oC3);
+				break;
+			}
+
+			node = node->children[n];
+			c1 <<= 1;
+			c2 <<= 1;
+			c3 <<= 1;
+		}
+	}
+}
+
+byte PalOctree::findNearest(byte c1, byte c2, byte c3) const {
+	byte n1, n2, n3;
+
+	return findNearest(c1, c2, c3, n1, n2, n3);
+}
+
+byte PalOctree::findNearest(byte c1, byte c2, byte c3, byte &nc1, byte &nc2, byte &nc3) const {
+	Node *node = _root;
+
+	int n = 4 * (c1 >> 7) + 2 * (c2 >> 7) + (c3 >> 7);
+	while (node->children[n]) {
+		node = node->children[n];
+
+		c1 <<= 1;
+		c2 <<= 1;
+		c3 <<= 1;
+
+		n = 4 * (c1 >> 7) + 2 * (c2 >> 7) + (c3 >> 7);
+	}
+
+	nc1 = node->comp[0];
+	nc2 = node->comp[1];
+	nc3 = node->comp[2];
+	return node->index;
+}
+
+SierraLite::SierraLite(int16 width, int16 height) {
+	assert((width > 0) && (height > 0));
+
+	_width = width;
+	_height = height;
+
+	_palTree = 0;
+
+	_errorBuf = new int32[3 * (2 * (_width + 2*1))];
+	memset(_errorBuf, 0, (3 * (2 * (_width + 2*1))) * sizeof(int32));
+
+	_curLine = 0;
+	_errors[0] = _errorBuf + 3;
+	_errors[1] = _errors[0] + 3 * (_width + 2*1);
+}
+
+SierraLite::~SierraLite() {
+	delete[] _errorBuf;
+}
+
+void SierraLite::setPalTree(const PalOctree *palTree) {
+	_palTree = palTree;
+}
+
+void SierraLite::newFrame() {
+	_curLine = 0;
+	memset(_errors[0], 0, 3 * _width * sizeof(int32));
+	memset(_errors[1], 0, 3 * _width * sizeof(int32));
+}
+
+void SierraLite::nextLine() {
+	// Clear the finished line, it will become the last line in the buffer
+	memset(_errors[_curLine], 0, 3 * _width * sizeof(int32));
+
+	_curLine = (_curLine + 1) % 2;
+}
+
+byte SierraLite::dither(byte c1, byte c2, byte c3, uint32 x) {
+	assert(_palTree);
+
+	int32 eC1, eC2, eC3;
+
+	getErrors(x, eC1, eC2, eC3);
+
+	// Apply error on values
+	c1 = CLIP<int>(c1 + eC1, 0, 255);
+	c2 = CLIP<int>(c2 + eC2, 0, 255);
+	c3 = CLIP<int>(c3 + eC3, 0, 255);
+
+	// Find color
+	byte newC1, newC2, newC3;
+	byte newPixel = _palTree->findNearest(c1, c2, c3, newC1, newC2, newC3);
+
+	eC1 = c1 - newC1;
+	eC2 = c2 - newC2;
+	eC3 = c3 - newC3;
+
+	// Add them
+	addErrors(x, eC1, eC2, eC3);
+
+	return newPixel;
+}
+
+inline void SierraLite::getErrors(uint32 x, int32 &eC1, int32 &eC2, int32 &eC3) {
+	int32 *errCur = _errors[_curLine];
+
+	x *= 3;
+	eC1 = errCur[x + 0] >> 2;
+	eC2 = errCur[x + 1] >> 2;
+	eC3 = errCur[x + 2] >> 2;
+}
+
+inline void SierraLite::addErrors(uint32 x, int32 eC1, int32 eC2, int32 eC3) {
+	int32 *errCur  = _errors[_curLine];
+	int32 *errNext = _errors[(_curLine + 1) % 2];
+
+	// Indices for current error
+	int x0 = 3 * (x + 1);
+	int x1 = 3 * (x + 0);
+	int x2 = 3 * (x - 1);
+
+	errCur [x0 + 0] += eC1 << 1;
+	errCur [x0 + 1] += eC2 << 1;
+	errCur [x0 + 2] += eC3 << 1;
+	errNext[x1 + 0] += eC1;
+	errNext[x1 + 1] += eC2;
+	errNext[x1 + 2] += eC3;
+	errNext[x2 + 0] += eC1;
+	errNext[x2 + 1] += eC2;
+	errNext[x2 + 2] += eC3;
+}
+
+Indeo3::Indeo3(int16 width, int16 height) {
+	assert((width > 0) && (height > 0));
+
+	_width = width;
+	_height = height;
+
+	_palTree = 0;
+
+	_ditherSL = 0;
+	setDither(kDitherSierraLite);
+
+	buildModPred();
+	allocFrames();
+}
+
+Indeo3::~Indeo3() {
+	delete[] _iv_frame[0].the_buf;
+	delete[] _ModPred;
+	delete[] _corrector_type;
+	delete _palTree;
+	delete _ditherSL;
+}
+
+inline void Indeo3::YUV2RGB(byte y, byte u, byte v, byte &r, byte &g, byte &b) {
+	r = CLIP<int>(y + ((1357 * (v - 128)) >> 10), 0, 255);
+	g = CLIP<int>(y - (( 691 * (v - 128)) >> 10) - ((333 * (u - 128)) >> 10), 0, 255);
+	b = CLIP<int>(y + ((1715 * (u - 128)) >> 10), 0, 255);
+}
+
+inline void Indeo3::RGB2YUV(byte r, byte g, byte b, byte &y, byte &u, byte &v) {
+	y = CLIP<int>( ((r * 306) >> 10) + ((g * 601) >> 10) + ((b * 117) >> 10)      , 0, 255);
+	u = CLIP<int>(-((r * 172) >> 10) - ((g * 340) >> 10) + ((b * 512) >> 10) + 128, 0, 255);
+	v = CLIP<int>( ((r * 512) >> 10) - ((g * 429) >> 10) - ((b *  83) >> 10) + 128, 0, 255);
+}
+
+bool Indeo3::isIndeo3(byte *data, uint32 dataLen) {
+	// No data, no Indeo 3
+	if (!data)
+		return false;
+
+	// Less than 16 bytes? This can't be right
+	if (dataLen < 16)
+		return false;
+
+	// Unknown, but according to the docs, always 0
+	if (READ_LE_UINT32(data + 4) != 0)
+		return false;
+
+	uint32 id;
+	id  = READ_LE_UINT32(data     ); // frame number
+	id ^= READ_LE_UINT32(data +  4); // unknown
+	id ^= READ_LE_UINT32(data +  8); // checksum
+	id ^= READ_LE_UINT32(data + 12); // frame data length
+
+	// These 4 uint32s XOR'd need to spell "FRMH"
+	if (id != MKID_BE('FRMH'))
+		return false;
+
+	return true;
+}
+
+void Indeo3::setPalette(const byte *palette) {
+	delete _palTree;
+
+	byte paletteYUV[768];
+
+	const byte *rgb = palette;
+	byte *yuv = paletteYUV;
+	for (int i = 0; i < 256; i++, rgb += 3, yuv += 3)
+		RGB2YUV(rgb[0] << 2, rgb[1] << 2, rgb[2] << 2, yuv[0], yuv[1], yuv[2]);
+
+	_palTree = new PalOctree(paletteYUV, 6);
+
+	if (_ditherSL)
+		_ditherSL->setPalTree(_palTree);
+}
+
+void Indeo3::setDither(DitherAlgorithm dither) {
+	delete _ditherSL;
+	_ditherSL = 0;
+
+	_dither = dither;
+
+	switch(dither) {
+	case kDitherSierraLite:
+		_ditherSL = new SierraLite(_width, _height);
+		_ditherSL->setPalTree(_palTree);
+		break;
+
+	default:
+		return;
+	}
+}
+
+void Indeo3::buildModPred() {
+	_ModPred = new byte[8 * 128];
+
+	for (int i = 0; i < 128; i++) {
+		_ModPred[i+0*128] = (i > 126) ? 254 : 2*((i + 1) - ((i + 1) % 2));
+		_ModPred[i+1*128] = (i == 7)  ?  20 : ((i == 119 || i == 120)
+		                              ? 236 : 2*((i + 2) - ((i + 1) % 3)));
+		_ModPred[i+2*128] = (i > 125) ? 248 : 2*((i + 2) - ((i + 2) % 4));
+		_ModPred[i+3*128] =                   2*((i + 1) - ((i - 3) % 5));
+		_ModPred[i+4*128] = (i == 8)  ?  20 : 2*((i + 1) - ((i - 3) % 6));
+		_ModPred[i+5*128] =                   2*((i + 4) - ((i + 3) % 7));
+		_ModPred[i+6*128] = (i > 123) ? 240 : 2*((i + 4) - ((i + 4) % 8));
+		_ModPred[i+7*128] =                   2*((i + 5) - ((i + 4) % 9));
+	}
+
+	_corrector_type = new uint16[24 * 256];
+
+	for (int i = 0; i < 24; i++) {
+		for (int j = 0; j < 256; j++) {
+			_corrector_type[i*256+j] =
+				 (j < _corrector_type_0[i])         ? 1 :
+			  ((j < 248 || (i == 16 && j == 248)) ? 0 :
+			  _corrector_type_2[j - 248]);
+		}
+	}
+}
+
+void Indeo3::allocFrames() {
+	int32 luma_width   = (_width  + 3) & (~3);
+	int32 luma_height  = (_height + 3) & (~3);
+
+	int32 chroma_width  = ((luma_width >> 2) + 3) & (~3);
+	int32 chroma_height = ((luma_height>> 2) + 3) & (~3);
+
+	int32 luma_pixels = luma_width * luma_height;
+	int32 chroma_pixels = chroma_width * chroma_height;
+
+	uint32 bufsize = luma_pixels * 2 + luma_width * 3 +
+		(chroma_pixels + chroma_width) * 4;
+
+	_iv_frame[0].y_w  = _iv_frame[1].y_w  = luma_width;
+	_iv_frame[0].y_h  = _iv_frame[1].y_h  = luma_height;
+	_iv_frame[0].uv_w = _iv_frame[1].uv_w = chroma_width;
+	_iv_frame[0].uv_h = _iv_frame[1].uv_h = chroma_height;
+
+	_iv_frame[0].the_buf_size = bufsize;
+	_iv_frame[1].the_buf_size = 0;
+
+	_iv_frame[0].the_buf = new byte[bufsize];
+	memset(_iv_frame[0].the_buf, 0, bufsize);
+	_iv_frame[1].the_buf = 0;
+
+	uint32 offs = 0;
+
+	_iv_frame[0].Ybuf = _iv_frame[0].the_buf + luma_width;
+	offs += luma_pixels + luma_width * 2;
+	_iv_frame[1].Ybuf = _iv_frame[0].the_buf + offs;
+	offs += (luma_pixels + luma_width);
+	_iv_frame[0].Ubuf = _iv_frame[0].the_buf + offs;
+	offs += (chroma_pixels + chroma_width);
+	_iv_frame[1].Ubuf = _iv_frame[0].the_buf + offs;
+	offs += (chroma_pixels + chroma_width);
+	_iv_frame[0].Vbuf = _iv_frame[0].the_buf + offs;
+	offs += (chroma_pixels + chroma_width);
+	_iv_frame[1].Vbuf = _iv_frame[0].the_buf + offs;
+
+	for(int i = 1; i <= luma_width; i++)
+		_iv_frame[0].Ybuf[-i] = _iv_frame[1].Ybuf[-i] =
+			_iv_frame[0].Ubuf[-i] = 0x80;
+
+	for(int i = 1; i <= chroma_width; i++) {
+		_iv_frame[1].Ubuf[-i] = 0x80;
+		_iv_frame[0].Vbuf[-i] = 0x80;
+		_iv_frame[1].Vbuf[-i] = 0x80;
+		_iv_frame[1].Vbuf[chroma_pixels+i-1] = 0x80;
+	}
+}
+
+bool Indeo3::decompressFrame(byte *inData, uint32 dataLen,
+		byte *outData, uint16 width, uint16 height) {
+
+	// Not Indeo 3? Fail
+	if (!isIndeo3(inData, dataLen))
+		return false;
+
+	assert(outData);
+	assert(_palTree);
+
+	uint32 frameDataLen = READ_LE_UINT32(inData + 12);
+
+	// Less data than the frame should have? Fail
+	if (dataLen < (frameDataLen - 16))
+		return false;
+
+	Common::MemoryReadStream frame(inData, dataLen);
+
+	frame.skip(16); // Header
+	frame.skip(2);  // Unknown
+
+	uint16 flags1 = frame.readUint16LE();
+	uint32 flags3 = frame.readUint32LE();
+	uint8  flags2 = frame.readByte();
+
+	// Finding the reference frame
+	if(flags1 & 0x200) {
+		_cur_frame = _iv_frame + 1;
+		_ref_frame = _iv_frame;
+	} else {
+		_cur_frame = _iv_frame;
+		_ref_frame = _iv_frame + 1;
+	}
+
+	if (flags3 == 0x80)
+		return true;
+
+	frame.skip(3);
+
+	uint16 fHeight = frame.readUint16LE();
+	uint16 fWidth  = frame.readUint16LE();
+
+	uint32 chromaHeight = ((fHeight >> 2) + 3) & 0x7FFC;
+	uint32 chromaWidth  = ((fWidth  >> 2) + 3) & 0x7FFC;
+
+	uint32 offs;
+	uint32 offsY = frame.readUint32LE() + 16;
+	uint32 offsU = frame.readUint32LE() + 16;
+	uint32 offsV = frame.readUint32LE() + 16;
+
+	frame.skip(4);
+
+	uint32 hPos = frame.pos();
+
+	byte *hdr_pos = inData + hPos;
+	byte *buf_pos;
+
+	// Luminance Y
+	frame.seek(offsY);
+	buf_pos = inData + offsY + 4;
+	offs = frame.readUint32LE();
+	decodeChunk(_cur_frame->Ybuf, _ref_frame->Ybuf, fWidth, fHeight,
+			buf_pos + offs * 2, flags2, hdr_pos, buf_pos, MIN<int>(fWidth, 160));
+
+	// Chrominance U
+	frame.seek(offsU);
+	buf_pos = inData + offsU + 4;
+	offs = frame.readUint32LE();
+	decodeChunk(_cur_frame->Vbuf, _ref_frame->Vbuf, chromaWidth, chromaHeight,
+			buf_pos + offs * 2, flags2, hdr_pos, buf_pos, MIN<int>(chromaWidth, 40));
+
+	// Chrominance V
+	frame.seek(offsV);
+	buf_pos = inData + offsV + 4;
+	offs = frame.readUint32LE();
+	decodeChunk(_cur_frame->Ubuf, _ref_frame->Ubuf, chromaWidth, chromaHeight,
+			buf_pos + offs * 2, flags2, hdr_pos, buf_pos, MIN<int>(chromaWidth, 40));
+
+	BlitState blitState;
+
+	blitState.widthY        = _cur_frame->y_w;
+	blitState.widthUV       = _cur_frame->uv_w;
+	blitState.uwidthUV      = chromaWidth;
+	blitState.uwidthOut     = fWidth;
+	blitState.heightY       = _cur_frame->y_h;
+	blitState.heightUV      = _cur_frame->uv_h;
+	blitState.uheightUV     = chromaHeight;
+	blitState.uheightOut    = fHeight;
+	blitState.scaleWYUV     = blitState.widthY  / blitState.widthUV;
+	blitState.scaleHYUV     = blitState.heightY / blitState.heightUV;
+	blitState.scaleWYOut    = blitState.widthY  / blitState.uwidthOut;
+	blitState.scaleHYOut    = blitState.heightY / blitState.uheightOut;
+	blitState.lineWidthOut  = blitState.scaleWYOut * blitState.uwidthOut;
+	blitState.lineHeightOut = blitState.scaleHYOut * blitState.uheightOut;
+	blitState.bufY          = _cur_frame->Ybuf;
+	blitState.bufU          = _cur_frame->Ubuf;
+	blitState.bufV          = _cur_frame->Vbuf;
+	blitState.bufOut        = outData;
+
+	blitFrame(blitState);
+
+	return true;
+}
+
+void Indeo3::blitFrame(BlitState &s) {
+	if (_ditherSL)
+		_ditherSL->newFrame();
+
+	for (s.curY = 0; s.curY < s.uheightOut; s.curY++) {
+		if (_dither == kDitherNone)
+			blitLine(s);
+		else
+			blitLineDither(s);
+	}
+}
+
+void Indeo3::blitLine(BlitState &s) {
+	byte *lineU = s.bufU + (s.curY >> 2) * s.uwidthUV;
+	byte *lineV = s.bufV + (s.curY >> 2) * s.uwidthUV;
+
+	for (s.curX = 0; s.curX < s.uwidthOut; s.curX++) {
+		byte dataY = *s.bufY++;
+		byte dataU = lineU[s.curX >> 2];
+		byte dataV = lineV[s.curX >> 2];
+
+		for (int n = 0; n < s.scaleWYOut; n++)
+			*s.bufOut++ = _palTree->findNearest(dataY, dataU, dataV);
+	}
+
+	byte *lineDest = s.bufOut - s.lineWidthOut;
+	for (int n = 1; n < s.scaleHYOut; n++) {
+		memcpy(s.bufOut, lineDest, s.lineWidthOut);
+		s.bufOut += s.lineWidthOut;
+	}
+}
+
+void Indeo3::blitLineDither(BlitState &s) {
+	byte *lineU = s.bufU + (s.curY >> 2) * s.uwidthUV;
+	byte *lineV = s.bufV + (s.curY >> 2) * s.uwidthUV;
+
+	for (uint16 i = 0; i < s.scaleHYOut; i++) {
+		byte *bufY = s.bufY;
+
+		for (s.curX = 0; s.curX < s.uwidthOut; s.curX++) {
+			byte dataY = *bufY++;
+			byte dataU = lineU[s.curX >> 2];
+			byte dataV = lineV[s.curX >> 2];
+
+			for (int n = 0; n < s.scaleWYOut; n++)
+				*s.bufOut++ = _ditherSL->dither(dataY, dataU, dataV, s.curX * s.scaleWYOut + n);
+
+		}
+
+		_ditherSL->nextLine();
+	}
+
+	s.bufY += s.uwidthOut;
+}
+
+typedef struct {
+	int32 xpos;
+	int32 ypos;
+	int32 width;
+	int32 height;
+	int32 split_flag;
+	int32 split_direction;
+	int32 usl7;
+} ustr_t;
+
+/* ---------------------------------------------------------------------- */
+
+#define LV1_CHECK(buf1,rle_v3,lv1,lp2)  \
+	if((lv1 & 0x80) != 0) {   \
+		if(rle_v3 != 0)         \
+			rle_v3 = 0;           \
+		else {                  \
+			rle_v3 = 1;           \
+			buf1 -= 2;            \
+		}                       \
+	}                         \
+	lp2 = 4;
+
+
+#define RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)  \
+	if(rle_v3 == 0) {         \
+		rle_v2 = *buf1;         \
+		rle_v1 = 1;             \
+		if(rle_v2 > 32) {       \
+			rle_v2 -= 32;         \
+			rle_v1 = 0;           \
+		}                       \
+		rle_v3 = 1;             \
+	}                         \
+	buf1--;
+
+
+#define LP2_CHECK(buf1,rle_v3,lp2)  \
+	if(lp2 == 0 && rle_v3 != 0)     \
+		rle_v3 = 0;           \
+	else {                  \
+		buf1--;               \
+		rle_v3 = 1;           \
+	}
+
+
+#define RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2) \
+	rle_v2--;             \
+	if(rle_v2 == 0) {     \
+		rle_v3 = 0;         \
+		buf1 += 2;          \
+	}                     \
+	lp2 = 4;
+
+void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height,
+		const byte *buf1, uint32 fflags2, const byte *hdr,
+		const byte *buf2, int min_width_160) {
+
+	byte bit_buf;
+	uint32 bit_pos, lv, lv1, lv2;
+	int32 *width_tbl, width_tbl_arr[10];
+	const int8 *ref_vectors;
+	byte *cur_frm_pos, *ref_frm_pos, *cp, *cp2;
+	uint32 *cur_lp, *ref_lp;
+	const uint32 *correction_lp[2], *correctionloworder_lp[2], *correctionhighorder_lp[2];
+	uint16 *correction_type_sp[2];
+	ustr_t strip_tbl[20], *strip;
+	int i, j, k, lp1, lp2, flag1, cmd;
+	int blks_width, blks_height, region_160_width;
+	int rle_v1, rle_v2, rle_v3;
+	uint16 res;
+
+	bit_buf = 0;
+	ref_vectors = NULL;
+
+	width_tbl = width_tbl_arr + 1;
+	i = (width < 0 ? width + 3 : width)/4;
+	for(j = -1; j < 8; j++)
+		width_tbl[j] = i * j;
+
+	strip = strip_tbl;
+
+	for(region_160_width = 0; region_160_width < (width - min_width_160); region_160_width += min_width_160);
+
+	strip->ypos = strip->xpos = 0;
+	for(strip->width = min_width_160; width > strip->width; strip->width *= 2);
+	strip->height = height;
+	strip->split_direction = 0;
+	strip->split_flag = 0;
+	strip->usl7 = 0;
+
+	bit_pos = 0;
+
+	rle_v1 = rle_v2 = rle_v3 = 0;
+
+	while(strip >= strip_tbl) {
+		if(bit_pos <= 0) {
+			bit_pos = 8;
+			bit_buf = *buf1++;
+		}
+
+		bit_pos -= 2;
+		cmd = (bit_buf >> bit_pos) & 0x03;
+
+		if(cmd == 0) {
+			strip++;
+			memcpy(strip, strip-1, sizeof(ustr_t));
+			strip->split_flag = 1;
+			strip->split_direction = 0;
+			strip->height = (strip->height > 8 ? ((strip->height+8)>>4)<<3 : 4);
+			continue;
+		} else if(cmd == 1) {
+			strip++;
+			memcpy(strip, strip-1, sizeof(ustr_t));
+			strip->split_flag = 1;
+			strip->split_direction = 1;
+			strip->width = (strip->width > 8 ? ((strip->width+8)>>4)<<3 : 4);
+			continue;
+		} else if(cmd == 2) {
+			if(strip->usl7 == 0) {
+				strip->usl7 = 1;
+				ref_vectors = NULL;
+				continue;
+			}
+		} else if(cmd == 3) {
+			if(strip->usl7 == 0) {
+				strip->usl7 = 1;
+				ref_vectors = (const signed char*)buf2 + (*buf1 * 2);
+				buf1++;
+				continue;
+			}
+		}
+
+		cur_frm_pos = cur + width * strip->ypos + strip->xpos;
+
+		if((blks_width = strip->width) < 0)
+			blks_width += 3;
+		blks_width >>= 2;
+		blks_height = strip->height;
+
+		if(ref_vectors != NULL) {
+			ref_frm_pos = ref + (ref_vectors[0] + strip->ypos) * width +
+				ref_vectors[1] + strip->xpos;
+		} else
+			ref_frm_pos = cur_frm_pos - width_tbl[4];
+
+		if(cmd == 2) {
+			if(bit_pos <= 0) {
+				bit_pos = 8;
+				bit_buf = *buf1++;
+			}
+
+			bit_pos -= 2;
+			cmd = (bit_buf >> bit_pos) & 0x03;
+
+			if(cmd == 0 || ref_vectors != NULL) {
+				for(lp1 = 0; lp1 < blks_width; lp1++) {
+					for(i = 0, j = 0; i < blks_height; i++, j += width_tbl[1])
+						((uint32 *)cur_frm_pos)[j] = ((uint32 *)ref_frm_pos)[j];
+					cur_frm_pos += 4;
+					ref_frm_pos += 4;
+				}
+			} else if(cmd != 1)
+				return;
+		} else {
+			k = *buf1 >> 4;
+			j = *buf1 & 0x0f;
+			buf1++;
+			lv = j + fflags2;
+
+			if((lv - 8) <= 7 && (k == 0 || k == 3 || k == 10)) {
+				cp2 = _ModPred + ((lv - 8) << 7);
+				cp = ref_frm_pos;
+				for(i = 0; i < blks_width << 2; i++) {
+						int v = *cp >> 1;
+						*(cp++) = cp2[v];
+				}
+			}
+
+			if(k == 1 || k == 4) {
+				lv = (hdr[j] & 0xf) + fflags2;
+				correction_type_sp[0] = _corrector_type + (lv << 8);
+				correction_lp[0] = correction + (lv << 8);
+				lv = (hdr[j] >> 4) + fflags2;
+				correction_lp[1] = correction + (lv << 8);
+				correction_type_sp[1] = _corrector_type + (lv << 8);
+			} else {
+				correctionloworder_lp[0] = correctionloworder_lp[1] = correctionloworder + (lv << 8);
+				correctionhighorder_lp[0] = correctionhighorder_lp[1] = correctionhighorder + (lv << 8);
+				correction_type_sp[0] = correction_type_sp[1] = _corrector_type + (lv << 8);
+				correction_lp[0] = correction_lp[1] = correction + (lv << 8);
+			}
+
+			switch(k) {
+				case 1:
+				case 0:                    /********** CASE 0 **********/
+					for( ; blks_height > 0; blks_height -= 4) {
+						for(lp1 = 0; lp1 < blks_width; lp1++) {
+							for(lp2 = 0; lp2 < 4; ) {
+								k = *buf1++;
+								cur_lp = ((uint32 *)cur_frm_pos) + width_tbl[lp2];
+								ref_lp = ((uint32 *)ref_frm_pos) + width_tbl[lp2];
+
+								switch(correction_type_sp[0][k]) {
+									case 0:
+										*cur_lp = FROM_LE_32(((FROM_LE_32(*ref_lp) >> 1) + correction_lp[lp2 & 0x01][k]) << 1);
+										lp2++;
+										break;
+									case 1:
+										res = ((FROM_LE_16(((uint16 *)(ref_lp))[0]) >> 1) + correction_lp[lp2 & 0x01][*buf1]) << 1;
+										((uint16 *)cur_lp)[0] = FROM_LE_16(res);
+										res = ((FROM_LE_16(((uint16 *)(ref_lp))[1]) >> 1) + correction_lp[lp2 & 0x01][k]) << 1;
+										((uint16 *)cur_lp)[1] = FROM_LE_16(res);
+										buf1++;
+										lp2++;
+										break;
+									case 2:
+										if(lp2 == 0) {
+											for(i = 0, j = 0; i < 2; i++, j += width_tbl[1])
+												cur_lp[j] = ref_lp[j];
+											lp2 += 2;
+										}
+										break;
+									case 3:
+										if(lp2 < 2) {
+											for(i = 0, j = 0; i < (3 - lp2); i++, j += width_tbl[1])
+												cur_lp[j] = ref_lp[j];
+											lp2 = 3;
+										}
+										break;
+									case 8:
+										if(lp2 == 0) {
+											RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)
+
+											if(rle_v1 == 1 || ref_vectors != NULL) {
+												for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
+													cur_lp[j] = ref_lp[j];
+											}
+
+											RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2)
+											break;
+										} else {
+											rle_v1 = 1;
+											rle_v2 = *buf1 - 1;
+										}
+									case 5:
+											LP2_CHECK(buf1,rle_v3,lp2)
+									case 4:
+										for(i = 0, j = 0; i < (4 - lp2); i++, j += width_tbl[1])
+											cur_lp[j] = ref_lp[j];
+										lp2 = 4;
+										break;
+
+									case 7:
+										if(rle_v3 != 0)
+											rle_v3 = 0;
+										else {
+											buf1--;
+											rle_v3 = 1;
+										}
+									case 6:
+										if(ref_vectors != NULL) {
+											for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
+												cur_lp[j] = ref_lp[j];
+										}
+										lp2 = 4;
+										break;
+
+									case 9:
+										lv1 = *buf1++;
+										lv = (lv1 & 0x7F) << 1;
+										lv += (lv << 8);
+										lv += (lv << 16);
+										for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
+											cur_lp[j] = lv;
+
+										LV1_CHECK(buf1,rle_v3,lv1,lp2)
+										break;
+									default:
+										return;
+								}
+							}
+
+							cur_frm_pos += 4;
+							ref_frm_pos += 4;
+						}
+
+						cur_frm_pos += ((width - blks_width) * 4);
+						ref_frm_pos += ((width - blks_width) * 4);
+					}
+					break;
+
+				case 4:
+				case 3:                    /********** CASE 3 **********/
+					if(ref_vectors != NULL)
+						return;
+					flag1 = 1;
+
+					for( ; blks_height > 0; blks_height -= 8) {
+						for(lp1 = 0; lp1 < blks_width; lp1++) {
+							for(lp2 = 0; lp2 < 4; ) {
+								k = *buf1++;
+
+								cur_lp = ((uint32 *)cur_frm_pos) + width_tbl[lp2 * 2];
+								ref_lp = ((uint32 *)cur_frm_pos) + width_tbl[(lp2 * 2) - 1];
+
+								switch(correction_type_sp[lp2 & 0x01][k]) {
+									case 0:
+										cur_lp[width_tbl[1]] = FROM_LE_32(((FROM_LE_32(*ref_lp) >> 1) + correction_lp[lp2 & 0x01][k]) << 1);
+										if(lp2 > 0 || flag1 == 0 || strip->ypos != 0)
+											cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
+										else
+											cur_lp[0] = FROM_LE_32(((FROM_LE_32(*ref_lp) >> 1) + correction_lp[lp2 & 0x01][k]) << 1);
+										lp2++;
+										break;
+
+									case 1:
+										res = ((FROM_LE_16(((uint16 *)ref_lp)[0]) >> 1) + correction_lp[lp2 & 0x01][*buf1]) << 1;
+										((uint16 *)cur_lp)[width_tbl[2]] = FROM_LE_16(res);
+										res = ((FROM_LE_16(((uint16 *)ref_lp)[1]) >> 1) + correction_lp[lp2 & 0x01][k]) << 1;
+										((uint16 *)cur_lp)[width_tbl[2]+1] = FROM_LE_16(res);
+
+										if(lp2 > 0 || flag1 == 0 || strip->ypos != 0)
+											cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
+										else
+											cur_lp[0] = cur_lp[width_tbl[1]];
+										buf1++;
+										lp2++;
+										break;
+
+									case 2:
+										if(lp2 == 0) {
+											for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
+												cur_lp[j] = *ref_lp;
+											lp2 += 2;
+										}
+										break;
+
+									case 3:
+										if(lp2 < 2) {
+											for(i = 0, j = 0; i < 6 - (lp2 * 2); i++, j += width_tbl[1])
+												cur_lp[j] = *ref_lp;
+											lp2 = 3;
+										}
+										break;
+
+									case 6:
+										lp2 = 4;
+										break;
+
+									case 7:
+										if(rle_v3 != 0)
+											rle_v3 = 0;
+										else {
+											buf1--;
+											rle_v3 = 1;
+										}
+										lp2 = 4;
+										break;
+
+									case 8:
+										if(lp2 == 0) {
+											RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)
+
+											if(rle_v1 == 1) {
+												for(i = 0, j = 0; i < 8; i++, j += width_tbl[1])
+													cur_lp[j] = ref_lp[j];
+											}
+
+											RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2)
+											break;
+										} else {
+											rle_v2 = (*buf1) - 1;
+											rle_v1 = 1;
+										}
+									case 5:
+											LP2_CHECK(buf1,rle_v3,lp2)
+									case 4:
+										for(i = 0, j = 0; i < 8 - (lp2 * 2); i++, j += width_tbl[1])
+											cur_lp[j] = *ref_lp;
+										lp2 = 4;
+										break;
+
+									case 9:
+										warning("Indeo3::decodeChunk: Untested (1)");
+										lv1 = *buf1++;
+										lv = (lv1 & 0x7F) << 1;
+										lv += (lv << 8);
+										lv += (lv << 16);
+
+										for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
+											cur_lp[j] = lv;
+
+										LV1_CHECK(buf1,rle_v3,lv1,lp2)
+										break;
+
+									default:
+										return;
+								}
+							}
+
+							cur_frm_pos += 4;
+						}
+
+						cur_frm_pos += (((width * 2) - blks_width) * 4);
+						flag1 = 0;
+					}
+					break;
+
+				case 10:                    /********** CASE 10 **********/
+					if(ref_vectors == NULL) {
+						flag1 = 1;
+
+						for( ; blks_height > 0; blks_height -= 8) {
+							for(lp1 = 0; lp1 < blks_width; lp1 += 2) {
+								for(lp2 = 0; lp2 < 4; ) {
+									k = *buf1++;
+									cur_lp = ((uint32 *)cur_frm_pos) + width_tbl[lp2 * 2];
+									ref_lp = ((uint32 *)cur_frm_pos) + width_tbl[(lp2 * 2) - 1];
+									lv1 = ref_lp[0];
+									lv2 = ref_lp[1];
+									if(lp2 == 0 && flag1 != 0) {
+#if defined(SCUMM_BIG_ENDIAN)
+										lv1 = lv1 & 0xFF00FF00;
+										lv1 = (lv1 >> 8) | lv1;
+										lv2 = lv2 & 0xFF00FF00;
+										lv2 = (lv2 >> 8) | lv2;
+#else
+										lv1 = lv1 & 0x00FF00FF;
+										lv1 = (lv1 << 8) | lv1;
+										lv2 = lv2 & 0x00FF00FF;
+										lv2 = (lv2 << 8) | lv2;
+#endif
+									}
+
+									switch(correction_type_sp[lp2 & 0x01][k]) {
+										case 0:
+											cur_lp[width_tbl[1]] = FROM_LE_32(((FROM_LE_32(lv1) >> 1) + correctionloworder_lp[lp2 & 0x01][k]) << 1);
+											cur_lp[width_tbl[1]+1] = FROM_LE_32(((FROM_LE_32(lv2) >> 1) + correctionhighorder_lp[lp2 & 0x01][k]) << 1);
+											if(lp2 > 0 || strip->ypos != 0 || flag1 == 0) {
+												cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
+												cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;
+											} else {
+												cur_lp[0] = cur_lp[width_tbl[1]];
+												cur_lp[1] = cur_lp[width_tbl[1]+1];
+											}
+											lp2++;
+											break;
+
+										case 1:
+											cur_lp[width_tbl[1]] = FROM_LE_32(((FROM_LE_32(lv1) >> 1) + correctionloworder_lp[lp2 & 0x01][*buf1]) << 1);
+											cur_lp[width_tbl[1]+1] = FROM_LE_32(((FROM_LE_32(lv2) >> 1) + correctionloworder_lp[lp2 & 0x01][k]) << 1);
+											if(lp2 > 0 || strip->ypos != 0 || flag1 == 0) {
+												cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
+												cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;
+											} else {
+												cur_lp[0] = cur_lp[width_tbl[1]];
+												cur_lp[1] = cur_lp[width_tbl[1]+1];
+											}
+											buf1++;
+											lp2++;
+											break;
+
+										case 2:
+											if(lp2 == 0) {
+												if(flag1 != 0) {
+													for(i = 0, j = width_tbl[1]; i < 3; i++, j += width_tbl[1]) {
+														cur_lp[j] = lv1;
+														cur_lp[j+1] = lv2;
+													}
+													cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
+													cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;
+												} else {
+													for(i = 0, j = 0; i < 4; i++, j += width_tbl[1]) {
+														cur_lp[j] = lv1;
+														cur_lp[j+1] = lv2;
+													}
+												}
+												lp2 += 2;
+											}
+											break;
+
+										case 3:
+											if(lp2 < 2) {
+												if(lp2 == 0 && flag1 != 0) {
+													for(i = 0, j = width_tbl[1]; i < 5; i++, j += width_tbl[1]) {
+														cur_lp[j] = lv1;
+														cur_lp[j+1] = lv2;
+													}
+													cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
+													cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;
+												} else {
+													for(i = 0, j = 0; i < 6 - (lp2 * 2); i++, j += width_tbl[1]) {
+														cur_lp[j] = lv1;
+														cur_lp[j+1] = lv2;
+													}
+												}
+												lp2 = 3;
+											}
+											break;
+
+										case 8:
+											if(lp2 == 0) {
+												RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)
+												if(rle_v1 == 1) {
+													if(flag1 != 0) {
+														for(i = 0, j = width_tbl[1]; i < 7; i++, j += width_tbl[1]) {
+															cur_lp[j] = lv1;
+															cur_lp[j+1] = lv2;
+														}
+														cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
+														cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;
+													} else {
+														for(i = 0, j = 0; i < 8; i++, j += width_tbl[1]) {
+															cur_lp[j] = lv1;
+															cur_lp[j+1] = lv2;
+														}
+													}
+												}
+												RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2)
+												break;
+											} else {
+												rle_v1 = 1;
+												rle_v2 = (*buf1) - 1;
+											}
+										case 5:
+												LP2_CHECK(buf1,rle_v3,lp2)
+										case 4:
+											if(lp2 == 0 && flag1 != 0) {
+												for(i = 0, j = width_tbl[1]; i < 7; i++, j += width_tbl[1]) {
+													cur_lp[j] = lv1;
+													cur_lp[j+1] = lv2;
+												}
+												cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;
+												cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;
+											} else {
+												for(i = 0, j = 0; i < 8 - (lp2 * 2); i++, j += width_tbl[1]) {
+													cur_lp[j] = lv1;
+													cur_lp[j+1] = lv2;
+												}
+											}
+											lp2 = 4;
+											break;
+
+										case 6:
+											lp2 = 4;
+											break;
+
+										case 7:
+											if(lp2 == 0) {
+												if(rle_v3 != 0)
+													rle_v3 = 0;
+												else {
+													buf1--;
+													rle_v3 = 1;
+												}
+												lp2 = 4;
+											}
+											break;
+
+										case 9:
+											warning("Indeo3::decodeChunk: Untested (2)");
+											lv1 = *buf1;
+											lv = (lv1 & 0x7F) << 1;
+											lv += (lv << 8);
+											lv += (lv << 16);
+											for(i = 0, j = 0; i < 8; i++, j += width_tbl[1])
+												cur_lp[j] = lv;
+											LV1_CHECK(buf1,rle_v3,lv1,lp2)
+											break;
+
+										default:
+											return;
+									}
+								}
+
+								cur_frm_pos += 8;
+							}
+
+							cur_frm_pos += (((width * 2) - blks_width) * 4);
+							flag1 = 0;
+						}
+					} else {
+						for( ; blks_height > 0; blks_height -= 8) {
+							for(lp1 = 0; lp1 < blks_width; lp1 += 2) {
+								for(lp2 = 0; lp2 < 4; ) {
+									k = *buf1++;
+									cur_lp = ((uint32 *)cur_frm_pos) + width_tbl[lp2 * 2];
+									ref_lp = ((uint32 *)ref_frm_pos) + width_tbl[lp2 * 2];
+
+									switch(correction_type_sp[lp2 & 0x01][k]) {
+										case 0:
+											lv1 = correctionloworder_lp[lp2 & 0x01][k];
+											lv2 = correctionhighorder_lp[lp2 & 0x01][k];
+											cur_lp[0] = FROM_LE_32(((FROM_LE_32(ref_lp[0]) >> 1) + lv1) << 1);
+											cur_lp[1] = FROM_LE_32(((FROM_LE_32(ref_lp[1]) >> 1) + lv2) << 1);
+											cur_lp[width_tbl[1]] = FROM_LE_32(((FROM_LE_32(ref_lp[width_tbl[1]]) >> 1) + lv1) << 1);
+											cur_lp[width_tbl[1]+1] = FROM_LE_32(((FROM_LE_32(ref_lp[width_tbl[1]+1]) >> 1) + lv2) << 1);
+											lp2++;
+											break;
+
+										case 1:
+											lv1 = correctionloworder_lp[lp2 & 0x01][*buf1++];
+											lv2 = correctionloworder_lp[lp2 & 0x01][k];
+											cur_lp[0] = FROM_LE_32(((FROM_LE_32(ref_lp[0]) >> 1) + lv1) << 1);
+											cur_lp[1] = FROM_LE_32(((FROM_LE_32(ref_lp[1]) >> 1) + lv2) << 1);
+											cur_lp[width_tbl[1]] = FROM_LE_32(((FROM_LE_32(ref_lp[width_tbl[1]]) >> 1) + lv1) << 1);
+											cur_lp[width_tbl[1]+1] = FROM_LE_32(((FROM_LE_32(ref_lp[width_tbl[1]+1]) >> 1) + lv2) << 1);
+											lp2++;
+											break;
+
+										case 2:
+											if(lp2 == 0) {
+												for(i = 0, j = 0; i < 4; i++, j += width_tbl[1]) {
+													cur_lp[j] = ref_lp[j];
+													cur_lp[j+1] = ref_lp[j+1];
+												}
+												lp2 += 2;
+											}
+											break;
+
+										case 3:
+											if(lp2 < 2) {
+												for(i = 0, j = 0; i < 6 - (lp2 * 2); i++, j += width_tbl[1]) {
+													cur_lp[j] = ref_lp[j];
+													cur_lp[j+1] = ref_lp[j+1];
+												}
+												lp2 = 3;
+											}
+											break;
+
+										case 8:
+											if(lp2 == 0) {
+												RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)
+												for(i = 0, j = 0; i < 8; i++, j += width_tbl[1]) {
+													((uint32 *)cur_frm_pos)[j] = ((uint32 *)ref_frm_pos)[j];
+													((uint32 *)cur_frm_pos)[j+1] = ((uint32 *)ref_frm_pos)[j+1];
+												}
+												RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2)
+												break;
+											} else {
+												rle_v1 = 1;
+												rle_v2 = (*buf1) - 1;
+											}
+										case 5:
+										case 7:
+												LP2_CHECK(buf1,rle_v3,lp2)
+										case 6:
+										case 4:
+											for(i = 0, j = 0; i < 8 - (lp2 * 2); i++, j += width_tbl[1]) {
+												cur_lp[j] = ref_lp[j];
+												cur_lp[j+1] = ref_lp[j+1];
+											}
+											lp2 = 4;
+											break;
+
+										case 9:
+											warning("Indeo3::decodeChunk: Untested (3)");
+											lv1 = *buf1;
+											lv = (lv1 & 0x7F) << 1;
+											lv += (lv << 8);
+											lv += (lv << 16);
+											for(i = 0, j = 0; i < 8; i++, j += width_tbl[1])
+												((uint32 *)cur_frm_pos)[j] = ((uint32 *)cur_frm_pos)[j+1] = lv;
+											LV1_CHECK(buf1,rle_v3,lv1,lp2)
+											break;
+
+										default:
+											return;
+									}
+								}
+
+								cur_frm_pos += 8;
+								ref_frm_pos += 8;
+							}
+
+							cur_frm_pos += (((width * 2) - blks_width) * 4);
+							ref_frm_pos += (((width * 2) - blks_width) * 4);
+						}
+					}
+					break;
+
+				case 11:                    /********** CASE 11 **********/
+					if(ref_vectors == NULL)
+						return;
+
+					for( ; blks_height > 0; blks_height -= 8) {
+						for(lp1 = 0; lp1 < blks_width; lp1++) {
+							for(lp2 = 0; lp2 < 4; ) {
+								k = *buf1++;
+								cur_lp = ((uint32 *)cur_frm_pos) + width_tbl[lp2 * 2];
+								ref_lp = ((uint32 *)ref_frm_pos) + width_tbl[lp2 * 2];
+
+								switch(correction_type_sp[lp2 & 0x01][k]) {
+									case 0:
+										cur_lp[0] = FROM_LE_32(((FROM_LE_32(*ref_lp) >> 1) + correction_lp[lp2 & 0x01][k]) << 1);
+										cur_lp[width_tbl[1]] = FROM_LE_32(((FROM_LE_32(ref_lp[width_tbl[1]]) >> 1) + correction_lp[lp2 & 0x01][k]) << 1);
+										lp2++;
+										break;
+
+									case 1:
+										lv1 = (uint16)(correction_lp[lp2 & 0x01][*buf1++]);
+										lv2 = (uint16)(correction_lp[lp2 & 0x01][k]);
+										res = (uint16)(((FROM_LE_16(((uint16 *)ref_lp)[0]) >> 1) + lv1) << 1);
+										((uint16 *)cur_lp)[0] = FROM_LE_16(res);
+										res = (uint16)(((FROM_LE_16(((uint16 *)ref_lp)[1]) >> 1) + lv2) << 1);
+										((uint16 *)cur_lp)[1] = FROM_LE_16(res);
+										res = (uint16)(((FROM_LE_16(((uint16 *)ref_lp)[width_tbl[2]]) >> 1) + lv1) << 1);
+										((uint16 *)cur_lp)[width_tbl[2]] = FROM_LE_16(res);
+										res = (uint16)(((FROM_LE_16(((uint16 *)ref_lp)[width_tbl[2]+1]) >> 1) + lv2) << 1);
+										((uint16 *)cur_lp)[width_tbl[2]+1] = FROM_LE_16(res);
+										lp2++;
+										break;
+
+									case 2:
+										if(lp2 == 0) {
+											for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
+												cur_lp[j] = ref_lp[j];
+											lp2 += 2;
+										}
+										break;
+
+									case 3:
+										if(lp2 < 2) {
+											for(i = 0, j = 0; i < 6 - (lp2 * 2); i++, j += width_tbl[1])
+												cur_lp[j] = ref_lp[j];
+											lp2 = 3;
+										}
+										break;
+
+									case 8:
+										if(lp2 == 0) {
+											RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)
+
+											for(i = 0, j = 0; i < 8; i++, j += width_tbl[1])
+												cur_lp[j] = ref_lp[j];
+
+											RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2)
+											break;
+										} else {
+											rle_v1 = 1;
+											rle_v2 = (*buf1) - 1;
+										}
+									case 5:
+									case 7:
+											LP2_CHECK(buf1,rle_v3,lp2)
+									case 4:
+									case 6:
+										for(i = 0, j = 0; i < 8 - (lp2 * 2); i++, j += width_tbl[1])
+											cur_lp[j] = ref_lp[j];
+										lp2 = 4;
+										break;
+
+								case 9:
+									warning("Indeo3::decodeChunk: Untested (4)");
+									lv1 = *buf1++;
+									lv = (lv1 & 0x7F) << 1;
+									lv += (lv << 8);
+									lv += (lv << 16);
+									for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])
+										cur_lp[j] = lv;
+									LV1_CHECK(buf1,rle_v3,lv1,lp2)
+									break;
+
+									default:
+										return;
+								}
+							}
+
+							cur_frm_pos += 4;
+							ref_frm_pos += 4;
+						}
+
+						cur_frm_pos += (((width * 2) - blks_width) * 4);
+						ref_frm_pos += (((width * 2) - blks_width) * 4);
+					}
+					break;
+
+				default:
+					return;
+			}
+		}
+
+		if(strip < strip_tbl)
+			return;
+
+		for( ; strip >= strip_tbl; strip--) {
+			if(strip->split_flag != 0) {
+				strip->split_flag = 0;
+				strip->usl7 = (strip-1)->usl7;
+
+				if(strip->split_direction) {
+					strip->xpos += strip->width;
+					strip->width = (strip-1)->width - strip->width;
+					if(region_160_width <= strip->xpos && width < strip->width + strip->xpos)
+						strip->width = width - strip->xpos;
+				} else {
+					strip->ypos += strip->height;
+					strip->height = (strip-1)->height - strip->height;
+				}
+				break;
+			}
+		}
+	}
+}
+
+} // End of namespace Gob


Property changes on: scummvm/trunk/engines/gob/indeo3.cpp
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/trunk/engines/gob/indeo3.h
===================================================================
--- scummvm/trunk/engines/gob/indeo3.h	                        (rev 0)
+++ scummvm/trunk/engines/gob/indeo3.h	2008-12-09 14:56:33 UTC (rev 35290)
@@ -0,0 +1,190 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+/* Intel Indeo 3 decompressor, derived from ffmpeg.
+ *
+ * Original copyright note:
+ * Intel Indeo 3 (IV31, IV32, etc.) video decoder for ffmpeg
+ * written, produced, and directed by Alan Smithee
+ */
+
+#ifndef GOB_INDEO3_H
+#define GOB_INDEO3_H
+
+namespace Gob {
+
+// A simple octree for quickly finding the best matching palette entry
+class PalOctree {
+public:
+	PalOctree(const byte *palette, byte depth);
+	~PalOctree();
+
+	byte findNearest(byte c1, byte c2, byte c3) const;
+	byte findNearest(byte c1, byte c2, byte c3, byte &nc1, byte &nc2, byte &nc3) const;
+
+private:
+	struct Node {
+		byte index;
+		byte comp[3];
+		struct Node *children[8];
+
+		Node(byte i, byte c1, byte c2, byte c3) : index(i) {
+			memset(children, 0, 8 * sizeof(struct Node *));
+			comp[0] = c1;
+			comp[1] = c2;
+			comp[2] = c3;
+		}
+		~Node() {
+			for (int i = 0; i < 8; i++)
+				delete children[i];
+		}
+	};
+
+	Node *_root;
+	byte _depth;
+
+	void build(const byte *palette);
+};
+
+// The Sierra-2-4A ("Filter Light") dithering algorithm
+class SierraLite {
+public:
+	SierraLite(int16 width, int16 height);
+	~SierraLite();
+
+	void setPalTree(const PalOctree *palTree);
+
+	void newFrame();
+	void nextLine();
+	byte dither(byte c1, byte c2, byte c3, uint32 x);
+
+protected:
+	int16 _width, _height;
+
+	const PalOctree *_palTree;
+
+	int32 *_errorBuf;
+	int32 *_errors[2];
+	int _curLine;
+
+	inline void getErrors(uint32 x, int32 &eC1, int32 &eC2, int32 &eC3);
+	inline void addErrors(uint32 x, int32 eC1, int32 eC2, int32 eC3);
+};
+
+// Ordered ditherer with a 8x8 mask
+class Ordered8x8 {
+public:
+	inline static byte dither(byte c1, byte c2, byte c3, const PalOctree *palTree, uint32 x, uint32 y) {
+		c1 = CLIP<int>(c1 + map[x % 8][y % 8], 0, 255);
+		c2 = CLIP<int>(c2 + map[x % 8][y % 8], 0, 255);
+		c3 = CLIP<int>(c3 + map[x % 8][y % 8], 0, 255);
+		return palTree->findNearest(c1, c2, c3);
+	}
+
+private:
+	static const int map[8][8];
+};
+
+class Indeo3 {
+public:
+	enum DitherAlgorithm {
+		kDitherNone = 0,
+		kDitherSierraLite,
+		kDitherOrdered8x8
+	};
+
+	Indeo3(int16 width, int16 height);
+	~Indeo3();
+
+	static bool isIndeo3(byte *data, uint32 dataLen);
+
+	void setPalette(const byte *palette);
+	void setDither(DitherAlgorithm dither);
+
+	bool decompressFrame(byte *inData, uint32 dataLen,
+			byte *outData, uint16 width, uint16 height);
+
+private:
+	static const int _corrector_type_0[24];
+	static const int _corrector_type_2[8];
+	static const uint32 correction[];
+	static const uint32 correctionloworder[];
+	static const uint32 correctionhighorder[];
+
+	struct YUVBufs {
+		byte *Ybuf;
+		byte *Ubuf;
+		byte *Vbuf;
+		byte *the_buf;
+		uint32 the_buf_size;
+		uint16 y_w, y_h;
+		uint16 uv_w, uv_h;
+	};
+	
+	int16 _width;
+	int16 _height;
+	YUVBufs _iv_frame[2];
+	YUVBufs *_cur_frame;
+	YUVBufs *_ref_frame;
+
+	byte *_ModPred;
+	uint16 *_corrector_type;
+
+	PalOctree *_palTree;
+
+	DitherAlgorithm _dither;
+	SierraLite *_ditherSL;
+
+	struct BlitState {
+		uint32 curX, curY;
+		uint16 widthY,  widthUV;
+		uint16 heightY, heightUV;
+		uint16 uwidthUV,  uwidthOut;
+		uint16 uheightUV, uheightOut;
+		uint16 scaleWYUV, scaleWYOut;
+		uint16 scaleHYUV, scaleHYOut;
+		uint16 lineWidthOut, lineHeightOut;
+		byte *bufY, *bufU, *bufV, *bufOut;
+	};
+
+	void buildModPred();
+	void allocFrames();
+
+	void decodeChunk(byte *cur, byte *ref, int width, int height,
+			const byte *buf1, uint32 fflags2, const byte *hdr,
+			const byte *buf2, int min_width_160);
+
+	void blitFrame(BlitState &s);
+
+	void blitLine(BlitState &s);
+	void blitLineDither(BlitState &s);
+
+	inline void YUV2RGB(byte y, byte u, byte v, byte &r, byte &g, byte &b);
+	inline void RGB2YUV(byte r, byte g, byte b, byte &y, byte &u, byte &v);
+};
+
+} // End of namespace Gob
+
+#endif // GOB_INDEO3_H


Property changes on: scummvm/trunk/engines/gob/indeo3.h
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/trunk/engines/gob/indeo3data.h
===================================================================
--- scummvm/trunk/engines/gob/indeo3data.h	                        (rev 0)
+++ scummvm/trunk/engines/gob/indeo3data.h	2008-12-09 14:56:33 UTC (rev 35290)
@@ -0,0 +1,2358 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+/* Intel Indeo 3 decompressor, derived from ffmpeg.
+ *
+ * Original copyright note:
+ * Intel Indeo 3 (IV31, IV32, etc.) video decoder for ffmpeg
+ * written, produced, and directed by Alan Smithee
+ */
+
+namespace Gob {
+
+const int Indeo3::_corrector_type_0[24] = {
+	195, 159, 133, 115, 101,  93,  87,  77,
+	195, 159, 133, 115, 101,  93,  87,  77,
+	128,  79,  79,  79,  79,  79,  79,  79
+};
+
+const int Indeo3::_corrector_type_2[8] = { 9, 7, 6, 8, 5, 4, 3, 2 };
+
+const uint32 Indeo3::correction[] = {
+	0x00000000, 0x00000202, 0xfffffdfe, 0x000002ff, 0xfffffd01, 0xffffff03, 0x000000fd, 0x00000404,
+	0xfffffbfc, 0x00000501, 0xfffffaff, 0x00000105, 0xfffffefb, 0x000003fc, 0xfffffc04, 0x000005fe,
+	0xfffffa02, 0xfffffe06, 0x000001fa, 0x00000904, 0xfffff6fc, 0x00000409, 0xfffffbf7, 0x00000909,
+	0xfffff6f7, 0x00000a01, 0xfffff5ff, 0x0000010a, 0xfffffef6, 0x000007fb, 0xfffff805, 0xfffffb08,
+	0x000004f8, 0x00000f09, 0xfffff0f7, 0x0000090f, 0xfffff6f1, 0x00000bfd, 0xfffff403, 0xfffffd0c,
+	0x000002f4, 0x00001004, 0xffffeffc, 0x00000410, 0xfffffbf0, 0x00001010, 0xffffeff0, 0x00001200,
+	0xffffee00, 0x00000012, 0xffffffee, 0x00000bf4, 0xfffff40c, 0x00000ff7, 0xfffff009, 0xfffff710,
+	0x000008f0, 0x00001b0b, 0xffffe4f5, 0x00000b1b, 0xfffff4e5, 0x00001c13, 0xffffe3ed, 0x0000131c,
+	0xffffece4, 0x000015fa, 0xffffea06, 0xfffffa16, 0x000005ea, 0x00001d04, 0xffffe2fc, 0x0000041d,
+	0xfffffbe3, 0x00001e1e, 0xffffe1e2, 0x000020fe, 0xffffdf02, 0xfffffe21, 0x000001df, 0x000016ee,
+	0xffffe912, 0xffffee17, 0x000011e9, 0x00001df1, 0xffffe20f, 0xfffff11e, 0x00000ee2, 0x00002e16,
+	0xffffd1ea, 0x0000162e, 0xffffe9d2, 0x00002f0d, 0xffffd0f3, 0x00000d2f, 0xfffff2d1, 0x00003123,
+	0xffffcedd, 0x00002331, 0xffffdccf, 0x000028f5, 0xffffd70b, 0xfffff529, 0x00000ad7, 0x00003304,
+	0xffffccfc, 0x00000433, 0xfffffbcd, 0x00003636, 0xffffc9ca, 0x000021de, 0xffffde22, 0x000029e3,
+	0xffffd61d, 0xffffe32a, 0x00001cd6, 0x00003bfa, 0xffffc406, 0xfffffa3c, 0x000005c4, 0x00004c1b,
+	0xffffb3e5, 0x00001b4c, 0xffffe4b4, 0x00004d2b, 0xffffb2d5, 0x00002b4d, 0xffffd4b3, 0x000036e8,
+	0xffffc918, 0xffffe837, 0x000017c9, 0x00004f0e, 0xffffb0f2, 0x00000e4f, 0xfffff1b1, 0x0000533f,
+	0xffffacc1, 0x00003f53, 0xffffc0ad, 0x000049ec, 0xffffb614, 0xffffec4a, 0x000013b6, 0x00005802,
+	0xffffa7fe, 0x00000258, 0xfffffda8, 0x00005d5d, 0xffffa2a3, 0x00003ccc, 0xffffc334, 0xffffcc3d,
+	0x000033c3, 0x00007834, 0xffff87cc, 0x00003478, 0xffffcb88, 0x00004ad3, 0xffffb52d, 0xffffd34b,
+	0x00002cb5, 0x00007d4b, 0xffff82b5, 0x00004b7d, 0xffffb483, 0x00007a21, 0xffff85df, 0x0000217a,
+	0xffffde86, 0x000066f3, 0xffff990d, 0xfffff367, 0x00000c99, 0x00005fd8, 0xffffa028, 0xffffd860,
+	0x000027a0, 0x00007ede, 0xffff8122, 0xffffde7f, 0x00002181, 0x000058a7, 0xffffa759, 0x000068b2,
+	0xffff974e, 0xffffb269, 0x00004d97, 0x00000c0c, 0xfffff3f4, 0x00001717, 0xffffe8e9, 0x00002a2a,
+	0xffffd5d6, 0x00004949, 0xffffb6b7, 0x00000000, 0x02020000, 0xfdfe0000, 0x02ff0000, 0xfd010000,
+	0xff030000, 0x00fd0000, 0x00000202, 0x02020202, 0xfdfe0202, 0x02ff0202, 0xfd010202, 0xff030202,
+	0x00fd0202, 0xfffffdfe, 0x0201fdfe, 0xfdfdfdfe, 0x02fefdfe, 0xfd00fdfe, 0xff02fdfe, 0x00fcfdfe,
+	0x000002ff, 0x020202ff, 0xfdfe02ff, 0x02ff02ff, 0xfd0102ff, 0xff0302ff, 0x00fd02ff, 0xfffffd01,
+	0x0201fd01, 0xfdfdfd01, 0x02fefd01, 0xfd00fd01, 0xff02fd01, 0x00fcfd01, 0xffffff03, 0x0201ff03,
+	0xfdfdff03, 0x02feff03, 0xfd00ff03, 0xff02ff03, 0x00fcff03, 0x000000fd, 0x020200fd, 0xfdfe00fd,
+	0x02ff00fd, 0xfd0100fd, 0xff0300fd, 0x00fd00fd, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000303, 0xfffffcfd, 0x000003ff, 0xfffffc01, 0xffffff04, 0x000000fc, 0x00000707,
+	0xfffff8f9, 0x00000802, 0xfffff7fe, 0x00000208, 0xfffffdf8, 0x000008fe, 0xfffff702, 0xfffffe09,
+	0x000001f7, 0x000005fa, 0xfffffa06, 0x00000d06, 0xfffff2fa, 0x0000060d, 0xfffff9f3, 0x00000d0d,
+	0xfffff2f3, 0x00000e01, 0xfffff1ff, 0x0000010e, 0xfffffef2, 0x00000bf8, 0xfffff408, 0xfffff80c,
+	0x000007f4, 0x0000170e, 0xffffe8f2, 0x00000e17, 0xfffff1e9, 0x000011fb, 0xffffee05, 0xfffffb12,
+	0x000004ee, 0x00001806, 0xffffe7fa, 0x00000618, 0xfffff9e8, 0x00001818, 0xffffe7e8, 0x00001aff,
+	0xffffe501, 0xffffff1b, 0x000000e5, 0x000010ef, 0xffffef11, 0x000016f3, 0xffffe90d, 0xfffff317,
+	0x00000ce9, 0x00002810, 0xffffd7f0, 0x00001028, 0xffffefd8, 0x0000291c, 0xffffd6e4, 0x00001c29,
+	0xffffe3d7, 0x000020f7, 0xffffdf09, 0xfffff721, 0x000008df, 0x00002b06, 0xffffd4fa, 0x0000062b,
+	0xfffff9d5, 0x00002e2e, 0xffffd1d2, 0x000031fc, 0xffffce04, 0xfffffc32, 0x000003ce, 0x000021e5,
+	0xffffde1b, 0xffffe522, 0x00001ade, 0x00002cea, 0xffffd316, 0xffffea2d, 0x000015d3, 0x00004522,
+	0xffffbade, 0x00002245, 0xffffddbb, 0x00004613, 0xffffb9ed, 0x00001346, 0xffffecba, 0x00004935,
+	0xffffb6cb, 0x00003549, 0xffffcab7, 0x00003def, 0xffffc211, 0xffffef3e, 0x000010c2, 0x00004d05,
+	0xffffb2fb, 0x0000054d, 0xfffffab3, 0x00005252, 0xffffadae, 0x000032cd, 0xffffcd33, 0x00003fd5,
+	0xffffc02b, 0xffffd540, 0x00002ac0, 0x000059f6, 0xffffa60a, 0xfffff65a, 0x000009a6, 0x00007229,
+	0xffff8dd7, 0x00002972, 0xffffd68e, 0x00007440, 0xffff8bc0, 0x00004074, 0xffffbf8c, 0x000051db,
+	0xffffae25, 0xffffdb52, 0x000024ae, 0x00007716, 0xffff88ea, 0x00001677, 0xffffe989, 0x00007c5f,
+	0xffff83a1, 0x00005f7c, 0xffffa084, 0x00006ee2, 0xffff911e, 0xffffe26f, 0x00001d91, 0x00005bb2,
+	0xffffa44e, 0xffffb25c, 0x00004da4, 0x000070bc, 0xffff8f44, 0xffffbc71, 0x0000438f, 0x00001212,
+	0xffffedee, 0x00002222, 0xffffddde, 0x00003f3f, 0xffffc0c1, 0x00006d6d, 0xffff9293, 0x00000000,
+	0x03030000, 0xfcfd0000, 0x03ff0000, 0xfc010000, 0xff040000, 0x00fc0000, 0x07070000, 0xf8f90000,
+	0x00000303, 0x03030303, 0xfcfd0303, 0x03ff0303, 0xfc010303, 0xff040303, 0x00fc0303, 0x07070303,
+	0xf8f90303, 0xfffffcfd, 0x0302fcfd, 0xfcfcfcfd, 0x03fefcfd, 0xfc00fcfd, 0xff03fcfd, 0x00fbfcfd,
+	0x0706fcfd, 0xf8f8fcfd, 0x000003ff, 0x030303ff, 0xfcfd03ff, 0x03ff03ff, 0xfc0103ff, 0xff0403ff,
+	0x00fc03ff, 0x070703ff, 0xf8f903ff, 0xfffffc01, 0x0302fc01, 0xfcfcfc01, 0x03fefc01, 0xfc00fc01,
+	0xff03fc01, 0x00fbfc01, 0x0706fc01, 0xf8f8fc01, 0xffffff04, 0x0302ff04, 0xfcfcff04, 0x03feff04,
+	0xfc00ff04, 0xff03ff04, 0x00fbff04, 0x0706ff04, 0xf8f8ff04, 0x000000fc, 0x030300fc, 0xfcfd00fc,
+	0x03ff00fc, 0xfc0100fc, 0xff0400fc, 0x00fc00fc, 0x070700fc, 0xf8f900fc, 0x00000707, 0x03030707,
+	0xfcfd0707, 0x03ff0707, 0xfc010707, 0xff040707, 0x00fc0707, 0x07070707, 0xf8f90707, 0xfffff8f9,
+	0x0302f8f9, 0xfcfcf8f9, 0x03fef8f9, 0xfc00f8f9, 0xff03f8f9, 0x00fbf8f9, 0x0706f8f9, 0xf8f8f8f9,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000404, 0xfffffbfc, 0x000004ff, 0xfffffb01, 0xffffff05, 0x000000fb, 0x00000a03,
+	0xfffff5fd, 0x0000030a, 0xfffffcf6, 0x00000909, 0xfffff6f7, 0x000006f9, 0xfffff907, 0x00000bfd,
+	0xfffff403, 0xfffffd0c, 0x000002f4, 0x00001108, 0xffffeef8, 0x00000811, 0xfffff7ef, 0x00001111,
+	0xffffeeef, 0x00001301, 0xffffecff, 0x00000113, 0xfffffeed, 0x00000ff5, 0xfffff00b, 0xfffff510,
+	0x00000af0, 0x000016fa, 0xffffe906, 0xfffffa17, 0x000005e9, 0x00001f12, 0xffffe0ee, 0x0000121f,
+	0xffffede1, 0x00002008, 0xffffdff8, 0x00000820, 0xfffff7e0, 0x00002121, 0xffffdedf, 0x000023ff,
+	0xffffdc01, 0xffffff24, 0x000000dc, 0x000016e9, 0xffffe917, 0x00001eef, 0xffffe111, 0xffffef1f,
+	0x000010e1, 0x00003615, 0xffffc9eb, 0x00001536, 0xffffeaca, 0x00003725, 0xffffc8db, 0x00002537,
+	0xffffdac9, 0x00002bf4, 0xffffd40c, 0xfffff42c, 0x00000bd4, 0x00003908, 0xffffc6f8, 0x00000839,
+	0xfffff7c7, 0x00003d3d, 0xffffc2c3, 0x000041fb, 0xffffbe05, 0xfffffb42, 0x000004be, 0x00002cdc,
+	0xffffd324, 0xffffdc2d, 0x000023d3, 0x00003be3, 0xffffc41d, 0xffffe33c, 0x00001cc4, 0x00005c2d,
+	0xffffa3d3, 0x00002d5c, 0xffffd2a4, 0x00005d19, 0xffffa2e7, 0x0000195d, 0xffffe6a3, 0x00006147,
+	0xffff9eb9, 0x00004761, 0xffffb89f, 0x000052ea, 0xffffad16, 0xffffea53, 0x000015ad, 0x00006607,
+	0xffff99f9, 0x00000766, 0xfffff89a, 0x00006d6d, 0xffff9293, 0x000043bc, 0xffffbc44, 0x000054c7,
+	0xffffab39, 0xffffc755, 0x000038ab, 0x000077f3, 0xffff880d, 0xfffff378, 0x00000c88, 0x00006dcf,
+	0xffff9231, 0xffffcf6e, 0x00003092, 0x00007a98, 0xffff8568, 0xffff987b, 0x00006785, 0x00001818,
+	0xffffe7e8, 0x00002e2e, 0xffffd1d2, 0x00005454, 0xffffabac, 0x00000000, 0x04040000, 0xfbfc0000,
+	0x04ff0000, 0xfb010000, 0xff050000, 0x00fb0000, 0x0a030000, 0xf5fd0000, 0x030a0000, 0x00000404,
+	0x04040404, 0xfbfc0404, 0x04ff0404, 0xfb010404, 0xff050404, 0x00fb0404, 0x0a030404, 0xf5fd0404,
+	0x030a0404, 0xfffffbfc, 0x0403fbfc, 0xfbfbfbfc, 0x04fefbfc, 0xfb00fbfc, 0xff04fbfc, 0x00fafbfc,
+	0x0a02fbfc, 0xf5fcfbfc, 0x0309fbfc, 0x000004ff, 0x040404ff, 0xfbfc04ff, 0x04ff04ff, 0xfb0104ff,
+	0xff0504ff, 0x00fb04ff, 0x0a0304ff, 0xf5fd04ff, 0x030a04ff, 0xfffffb01, 0x0403fb01, 0xfbfbfb01,
+	0x04fefb01, 0xfb00fb01, 0xff04fb01, 0x00fafb01, 0x0a02fb01, 0xf5fcfb01, 0x0309fb01, 0xffffff05,
+	0x0403ff05, 0xfbfbff05, 0x04feff05, 0xfb00ff05, 0xff04ff05, 0x00faff05, 0x0a02ff05, 0xf5fcff05,
+	0x0309ff05, 0x000000fb, 0x040400fb, 0xfbfc00fb, 0x04ff00fb, 0xfb0100fb, 0xff0500fb, 0x00fb00fb,
+	0x0a0300fb, 0xf5fd00fb, 0x030a00fb, 0x00000a03, 0x04040a03, 0xfbfc0a03, 0x04ff0a03, 0xfb010a03,
+	0xff050a03, 0x00fb0a03, 0x0a030a03, 0xf5fd0a03, 0x030a0a03, 0xfffff5fd, 0x0403f5fd, 0xfbfbf5fd,
+	0x04fef5fd, 0xfb00f5fd, 0xff04f5fd, 0x00faf5fd, 0x0a02f5fd, 0xf5fcf5fd, 0x0309f5fd, 0x0000030a,
+	0x0404030a, 0xfbfc030a, 0x04ff030a, 0xfb01030a, 0xff05030a, 0x00fb030a, 0x0a03030a, 0xf5fd030a,
+	0x030a030a, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000505, 0xfffffafb, 0x000006fe, 0xfffff902, 0xfffffe07, 0x000001f9, 0x00000b0b,
+	0xfffff4f5, 0x00000d03, 0xfffff2fd, 0x0000030d, 0xfffffcf3, 0x000008f7, 0xfffff709, 0x00000efc,
+	0xfffff104, 0xfffffc0f, 0x000003f1, 0x0000160b, 0xffffe9f5, 0x00000b16, 0xfffff4ea, 0x00001515,
+	0xffffeaeb, 0x00001802, 0xffffe7fe, 0x00000218, 0xfffffde8, 0x000013f2, 0xffffec0e, 0xfffff214,
+	0x00000dec, 0x00002617, 0xffffd9e9, 0x00001726, 0xffffe8da, 0x00001cf8, 0xffffe308, 0xfffff81d,
+	0x000007e3, 0x0000270b, 0xffffd8f5, 0x00000b27, 0xfffff4d9, 0x00002929, 0xffffd6d7, 0x00002cff,
+	0xffffd301, 0xffffff2d, 0x000000d3, 0x00001ce3, 0xffffe31d, 0x000026ea, 0xffffd916, 0xffffea27,
+	0x000015d9, 0x0000431b, 0xffffbce5, 0x00001b43, 0xffffe4bd, 0x0000452f, 0xffffbad1, 0x00002f45,
+	0xffffd0bb, 0x000037f1, 0xffffc80f, 0xfffff138, 0x00000ec8, 0x0000470b, 0xffffb8f5, 0x00000b47,
+	0xfffff4b9, 0x00004c4c, 0xffffb3b4, 0x000052fa, 0xffffad06, 0xfffffa53, 0x000005ad, 0x000038d3,
+	0xffffc72d, 0xffffd339, 0x00002cc7, 0x00004adc, 0xffffb524, 0xffffdc4b, 0x000023b5, 0x00007338,
+	0xffff8cc8, 0x00003873, 0xffffc78d, 0x0000751f, 0xffff8ae1, 0x00001f75, 0xffffe08b, 0x00007a58,
+	0xffff85a8, 0x0000587a, 0xffffa786, 0x000067e4, 0xffff981c, 0xffffe468, 0x00001b98, 0x000054ab,
+	0xffffab55, 0x000069b8, 0xffff9648, 0xffffb86a, 0x00004796, 0x00001e1e, 0xffffe1e2, 0x00003a3a,
+	0xffffc5c6, 0x00006969, 0xffff9697, 0x00000000, 0x05050000, 0xfafb0000, 0x06fe0000, 0xf9020000,
+	0xfe070000, 0x01f90000, 0x0b0b0000, 0xf4f50000, 0x0d030000, 0xf2fd0000, 0x00000505, 0x05050505,
+	0xfafb0505, 0x06fe0505, 0xf9020505, 0xfe070505, 0x01f90505, 0x0b0b0505, 0xf4f50505, 0x0d030505,
+	0xf2fd0505, 0xfffffafb, 0x0504fafb, 0xfafafafb, 0x06fdfafb, 0xf901fafb, 0xfe06fafb, 0x01f8fafb,
+	0x0b0afafb, 0xf4f4fafb, 0x0d02fafb, 0xf2fcfafb, 0x000006fe, 0x050506fe, 0xfafb06fe, 0x06fe06fe,
+	0xf90206fe, 0xfe0706fe, 0x01f906fe, 0x0b0b06fe, 0xf4f506fe, 0x0d0306fe, 0xf2fd06fe, 0xfffff902,
+	0x0504f902, 0xfafaf902, 0x06fdf902, 0xf901f902, 0xfe06f902, 0x01f8f902, 0x0b0af902, 0xf4f4f902,
+	0x0d02f902, 0xf2fcf902, 0xfffffe07, 0x0504fe07, 0xfafafe07, 0x06fdfe07, 0xf901fe07, 0xfe06fe07,
+	0x01f8fe07, 0x0b0afe07, 0xf4f4fe07, 0x0d02fe07, 0xf2fcfe07, 0x000001f9, 0x050501f9, 0xfafb01f9,
+	0x06fe01f9, 0xf90201f9, 0xfe0701f9, 0x01f901f9, 0x0b0b01f9, 0xf4f501f9, 0x0d0301f9, 0xf2fd01f9,
+	0x00000b0b, 0x05050b0b, 0xfafb0b0b, 0x06fe0b0b, 0xf9020b0b, 0xfe070b0b, 0x01f90b0b, 0x0b0b0b0b,
+	0xf4f50b0b, 0x0d030b0b, 0xf2fd0b0b, 0xfffff4f5, 0x0504f4f5, 0xfafaf4f5, 0x06fdf4f5, 0xf901f4f5,
+	0xfe06f4f5, 0x01f8f4f5, 0x0b0af4f5, 0xf4f4f4f5, 0x0d02f4f5, 0xf2fcf4f5, 0x00000d03, 0x05050d03,
+	0xfafb0d03, 0x06fe0d03, 0xf9020d03, 0xfe070d03, 0x01f90d03, 0x0b0b0d03, 0xf4f50d03, 0x0d030d03,
+	0xf2fd0d03, 0xfffff2fd, 0x0504f2fd, 0xfafaf2fd, 0x06fdf2fd, 0xf901f2fd, 0xfe06f2fd, 0x01f8f2fd,
+	0x0b0af2fd, 0xf4f4f2fd, 0x0d02f2fd, 0xf2fcf2fd, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000606, 0xfffff9fa, 0x000007fe, 0xfffff802, 0xfffffe08, 0x000001f8, 0x00000d0d,
+	0xfffff2f3, 0x00000f04, 0xfffff0fc, 0x0000040f, 0xfffffbf1, 0x00000af5, 0xfffff50b, 0x000011fb,
+	0xffffee05, 0xfffffb12, 0x000004ee, 0x00001a0d, 0xffffe5f3, 0x00000d1a, 0xfffff2e6, 0x00001a1a,
+	0xffffe5e6, 0x00001d02, 0xffffe2fe, 0x0000021d, 0xfffffde3, 0x000017f0, 0xffffe810, 0xfffff018,
+	0x00000fe8, 0x00002e1c, 0xffffd1e4, 0x00001c2e, 0xffffe3d2, 0x000022f7, 0xffffdd09, 0xfffff723,
+	0x000008dd, 0x00002f0d, 0xffffd0f3, 0x00000d2f, 0xfffff2d1, 0x00003131, 0xffffcecf, 0x000035ff,
+	0xffffca01, 0xffffff36, 0x000000ca, 0x000022dd, 0xffffdd23, 0x00002ee6, 0xffffd11a, 0xffffe62f,
+	0x000019d1, 0x00005120, 0xffffaee0, 0x00002051, 0xffffdfaf, 0x00005338, 0xffffacc8, 0x00003853,
+	0xffffc7ad, 0x000042ee, 0xffffbd12, 0xffffee43, 0x000011bd, 0x0000560d, 0xffffa9f3, 0x00000d56,
+	0xfffff2aa, 0x00005b5b, 0xffffa4a5, 0x000062f9, 0xffff9d07, 0xfffff963, 0x0000069d, 0x000043ca,
+	0xffffbc36, 0xffffca44, 0x000035bc, 0x000059d4, 0xffffa62c, 0xffffd45a, 0x00002ba6, 0x00007bdf,
+	0xffff8421, 0xffffdf7c, 0x00002084, 0x00006699, 0xffff9967, 0x00007eaa, 0xffff8156, 0xffffaa7f,
+	0x00005581, 0x00002525, 0xffffdadb, 0x00004545, 0xffffbabb, 0x00000000, 0x06060000, 0xf9fa0000,
+	0x07fe0000, 0xf8020000, 0xfe080000, 0x01f80000, 0x0d0d0000, 0xf2f30000, 0x0f040000, 0xf0fc0000,
+	0x040f0000, 0x00000606, 0x06060606, 0xf9fa0606, 0x07fe0606, 0xf8020606, 0xfe080606, 0x01f80606,
+	0x0d0d0606, 0xf2f30606, 0x0f040606, 0xf0fc0606, 0x040f0606, 0xfffff9fa, 0x0605f9fa, 0xf9f9f9fa,
+	0x07fdf9fa, 0xf801f9fa, 0xfe07f9fa, 0x01f7f9fa, 0x0d0cf9fa, 0xf2f2f9fa, 0x0f03f9fa, 0xf0fbf9fa,
+	0x040ef9fa, 0x000007fe, 0x060607fe, 0xf9fa07fe, 0x07fe07fe, 0xf80207fe, 0xfe0807fe, 0x01f807fe,
+	0x0d0d07fe, 0xf2f307fe, 0x0f0407fe, 0xf0fc07fe, 0x040f07fe, 0xfffff802, 0x0605f802, 0xf9f9f802,
+	0x07fdf802, 0xf801f802, 0xfe07f802, 0x01f7f802, 0x0d0cf802, 0xf2f2f802, 0x0f03f802, 0xf0fbf802,
+	0x040ef802, 0xfffffe08, 0x0605fe08, 0xf9f9fe08, 0x07fdfe08, 0xf801fe08, 0xfe07fe08, 0x01f7fe08,
+	0x0d0cfe08, 0xf2f2fe08, 0x0f03fe08, 0xf0fbfe08, 0x040efe08, 0x000001f8, 0x060601f8, 0xf9fa01f8,
+	0x07fe01f8, 0xf80201f8, 0xfe0801f8, 0x01f801f8, 0x0d0d01f8, 0xf2f301f8, 0x0f0401f8, 0xf0fc01f8,
+	0x040f01f8, 0x00000d0d, 0x06060d0d, 0xf9fa0d0d, 0x07fe0d0d, 0xf8020d0d, 0xfe080d0d, 0x01f80d0d,
+	0x0d0d0d0d, 0xf2f30d0d, 0x0f040d0d, 0xf0fc0d0d, 0x040f0d0d, 0xfffff2f3, 0x0605f2f3, 0xf9f9f2f3,
+	0x07fdf2f3, 0xf801f2f3, 0xfe07f2f3, 0x01f7f2f3, 0x0d0cf2f3, 0xf2f2f2f3, 0x0f03f2f3, 0xf0fbf2f3,
+	0x040ef2f3, 0x00000f04, 0x06060f04, 0xf9fa0f04, 0x07fe0f04, 0xf8020f04, 0xfe080f04, 0x01f80f04,
+	0x0d0d0f04, 0xf2f30f04, 0x0f040f04, 0xf0fc0f04, 0x040f0f04, 0xfffff0fc, 0x0605f0fc, 0xf9f9f0fc,
+	0x07fdf0fc, 0xf801f0fc, 0xfe07f0fc, 0x01f7f0fc, 0x0d0cf0fc, 0xf2f2f0fc, 0x0f03f0fc, 0xf0fbf0fc,
+	0x040ef0fc, 0x0000040f, 0x0606040f, 0xf9fa040f, 0x07fe040f, 0xf802040f, 0xfe08040f, 0x01f8040f,
+	0x0d0d040f, 0xf2f3040f, 0x0f04040f, 0xf0fc040f, 0x040f040f, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000707, 0xfffff8f9, 0x000009fd, 0xfffff603, 0xfffffd0a, 0x000002f6, 0x00001010,
+	0xffffeff0, 0x00001205, 0xffffedfb, 0x00000512, 0xfffffaee, 0x00000cf3, 0xfffff30d, 0x000014fa,
+	0xffffeb06, 0xfffffa15, 0x000005eb, 0x00001e0f, 0xffffe1f1, 0x00000f1e, 0xfffff0e2, 0x00001e1e,
+	0xffffe1e2, 0x00002202, 0xffffddfe, 0x00000222, 0xfffffdde, 0x00001bed, 0xffffe413, 0xffffed1c,
+	0x000012e4, 0x00003620, 0xffffc9e0, 0x00002036, 0xffffdfca, 0x000028f5, 0xffffd70b, 0xfffff529,
+	0x00000ad7, 0x0000370f, 0xffffc8f1, 0x00000f37, 0xfffff0c9, 0x00003939, 0xffffc6c7, 0x00003eff,
+	0xffffc101, 0xffffff3f, 0x000000c1, 0x000027d8, 0xffffd828, 0x000036e2, 0xffffc91e, 0xffffe237,
+	0x00001dc9, 0x00005e25, 0xffffa1db, 0x0000255e, 0xffffdaa2, 0x00006041, 0xffff9fbf, 0x00004160,
+	0xffffbea0, 0x00004deb, 0xffffb215, 0xffffeb4e, 0x000014b2, 0x0000640f, 0xffff9bf1, 0x00000f64,
+	0xfffff09c, 0x00006a6a, 0xffff9596, 0x000073f8, 0xffff8c08, 0xfffff874, 0x0000078c, 0x00004ec1,
+	0xffffb13f, 0xffffc14f, 0x00003eb1, 0x000068cd, 0xffff9733, 0xffffcd69, 0x00003297, 0x00007788,
+	0xffff8878, 0x00002b2b, 0xffffd4d5, 0x00005050, 0xffffafb0, 0x00000000, 0x07070000, 0xf8f90000,
+	0x09fd0000, 0xf6030000, 0xfd0a0000, 0x02f60000, 0x10100000, 0xeff00000, 0x12050000, 0xedfb0000,
+	0x05120000, 0x00000707, 0x07070707, 0xf8f90707, 0x09fd0707, 0xf6030707, 0xfd0a0707, 0x02f60707,
+	0x10100707, 0xeff00707, 0x12050707, 0xedfb0707, 0x05120707, 0xfffff8f9, 0x0706f8f9, 0xf8f8f8f9,
+	0x09fcf8f9, 0xf602f8f9, 0xfd09f8f9, 0x02f5f8f9, 0x100ff8f9, 0xefeff8f9, 0x1204f8f9, 0xedfaf8f9,
+	0x0511f8f9, 0x000009fd, 0x070709fd, 0xf8f909fd, 0x09fd09fd, 0xf60309fd, 0xfd0a09fd, 0x02f609fd,
+	0x101009fd, 0xeff009fd, 0x120509fd, 0xedfb09fd, 0x051209fd, 0xfffff603, 0x0706f603, 0xf8f8f603,
+	0x09fcf603, 0xf602f603, 0xfd09f603, 0x02f5f603, 0x100ff603, 0xefeff603, 0x1204f603, 0xedfaf603,
+	0x0511f603, 0xfffffd0a, 0x0706fd0a, 0xf8f8fd0a, 0x09fcfd0a, 0xf602fd0a, 0xfd09fd0a, 0x02f5fd0a,
+	0x100ffd0a, 0xefeffd0a, 0x1204fd0a, 0xedfafd0a, 0x0511fd0a, 0x000002f6, 0x070702f6, 0xf8f902f6,
+	0x09fd02f6, 0xf60302f6, 0xfd0a02f6, 0x02f602f6, 0x101002f6, 0xeff002f6, 0x120502f6, 0xedfb02f6,
+	0x051202f6, 0x00001010, 0x07071010, 0xf8f91010, 0x09fd1010, 0xf6031010, 0xfd0a1010, 0x02f61010,
+	0x10101010, 0xeff01010, 0x12051010, 0xedfb1010, 0x05121010, 0xffffeff0, 0x0706eff0, 0xf8f8eff0,
+	0x09fceff0, 0xf602eff0, 0xfd09eff0, 0x02f5eff0, 0x100feff0, 0xefefeff0, 0x1204eff0, 0xedfaeff0,
+	0x0511eff0, 0x00001205, 0x07071205, 0xf8f91205, 0x09fd1205, 0xf6031205, 0xfd0a1205, 0x02f61205,
+	0x10101205, 0xeff01205, 0x12051205, 0xedfb1205, 0x05121205, 0xffffedfb, 0x0706edfb, 0xf8f8edfb,
+	0x09fcedfb, 0xf602edfb, 0xfd09edfb, 0x02f5edfb, 0x100fedfb, 0xefefedfb, 0x1204edfb, 0xedfaedfb,
+	0x0511edfb, 0x00000512, 0x07070512, 0xf8f90512, 0x09fd0512, 0xf6030512, 0xfd0a0512, 0x02f60512,
+	0x10100512, 0xeff00512, 0x12050512, 0xedfb0512, 0x05120512, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000808, 0xfffff7f8, 0x00000afd, 0xfffff503, 0xfffffd0b, 0x000002f5, 0x00001212,
+	0xffffedee, 0x00001405, 0xffffebfb, 0x00000514, 0xfffffaec, 0x00000ef1, 0xfffff10f, 0x000017f9,
+	0xffffe807, 0xfffff918, 0x000006e8, 0x00002311, 0xffffdcef, 0x00001123, 0xffffeedd, 0x00002222,
+	0xffffddde, 0x00002603, 0xffffd9fd, 0x00000326, 0xfffffcda, 0x00001fea, 0xffffe016, 0xffffea20,
+	0x000015e0, 0x00003d25, 0xffffc2db, 0x0000253d, 0xffffdac3, 0x00002ef3, 0xffffd10d, 0xfffff32f,
+	0x00000cd1, 0x00003f11, 0xffffc0ef, 0x0000113f, 0xffffeec1, 0x00004141, 0xffffbebf, 0x000047ff,
+	0xffffb801, 0xffffff48, 0x000000b8, 0x00002dd2, 0xffffd22e, 0x00003edd, 0xffffc123, 0xffffdd3f,
+	0x000022c1, 0x00006b2b, 0xffff94d5, 0x00002b6b, 0xffffd495, 0x00006e4b, 0xffff91b5, 0x00004b6e,
+	0xffffb492, 0x000058e8, 0xffffa718, 0xffffe859, 0x000017a7, 0x00007211, 0xffff8def, 0x00001172,
+	0xffffee8e, 0x00007979, 0xffff8687, 0x00005ab8, 0xffffa548, 0xffffb85b, 0x000047a5, 0x000077c6,
+	0xffff883a, 0xffffc678, 0x00003988, 0x00003131, 0xffffcecf, 0x00005c5c, 0xffffa3a4, 0x00000000,
+	0x08080000, 0xf7f80000, 0x0afd0000, 0xf5030000, 0xfd0b0000, 0x02f50000, 0x12120000, 0xedee0000,
+	0x14050000, 0xebfb0000, 0x05140000, 0x00000808, 0x08080808, 0xf7f80808, 0x0afd0808, 0xf5030808,
+	0xfd0b0808, 0x02f50808, 0x12120808, 0xedee0808, 0x14050808, 0xebfb0808, 0x05140808, 0xfffff7f8,
+	0x0807f7f8, 0xf7f7f7f8, 0x0afcf7f8, 0xf502f7f8, 0xfd0af7f8, 0x02f4f7f8, 0x1211f7f8, 0xededf7f8,
+	0x1404f7f8, 0xebfaf7f8, 0x0513f7f8, 0x00000afd, 0x08080afd, 0xf7f80afd, 0x0afd0afd, 0xf5030afd,
+	0xfd0b0afd, 0x02f50afd, 0x12120afd, 0xedee0afd, 0x14050afd, 0xebfb0afd, 0x05140afd, 0xfffff503,
+	0x0807f503, 0xf7f7f503, 0x0afcf503, 0xf502f503, 0xfd0af503, 0x02f4f503, 0x1211f503, 0xededf503,
+	0x1404f503, 0xebfaf503, 0x0513f503, 0xfffffd0b, 0x0807fd0b, 0xf7f7fd0b, 0x0afcfd0b, 0xf502fd0b,
+	0xfd0afd0b, 0x02f4fd0b, 0x1211fd0b, 0xededfd0b, 0x1404fd0b, 0xebfafd0b, 0x0513fd0b, 0x000002f5,
+	0x080802f5, 0xf7f802f5, 0x0afd02f5, 0xf50302f5, 0xfd0b02f5, 0x02f502f5, 0x121202f5, 0xedee02f5,
+	0x140502f5, 0xebfb02f5, 0x051402f5, 0x00001212, 0x08081212, 0xf7f81212, 0x0afd1212, 0xf5031212,
+	0xfd0b1212, 0x02f51212, 0x12121212, 0xedee1212, 0x14051212, 0xebfb1212, 0x05141212, 0xffffedee,
+	0x0807edee, 0xf7f7edee, 0x0afcedee, 0xf502edee, 0xfd0aedee, 0x02f4edee, 0x1211edee, 0xedededee,
+	0x1404edee, 0xebfaedee, 0x0513edee, 0x00001405, 0x08081405, 0xf7f81405, 0x0afd1405, 0xf5031405,
+	0xfd0b1405, 0x02f51405, 0x12121405, 0xedee1405, 0x14051405, 0xebfb1405, 0x05141405, 0xffffebfb,
+	0x0807ebfb, 0xf7f7ebfb, 0x0afcebfb, 0xf502ebfb, 0xfd0aebfb, 0x02f4ebfb, 0x1211ebfb, 0xededebfb,
+	0x1404ebfb, 0xebfaebfb, 0x0513ebfb, 0x00000514, 0x08080514, 0xf7f80514, 0x0afd0514, 0xf5030514,
+	0xfd0b0514, 0x02f50514, 0x12120514, 0xedee0514, 0x14050514, 0xebfb0514, 0x05140514, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000909, 0xfffff6f7, 0x00000bfd, 0xfffff403, 0xfffffd0c, 0x000002f4, 0x00001414,
+	0xffffebec, 0x00001706, 0xffffe8fa, 0x00000617, 0xfffff9e9, 0x000010ef, 0xffffef11, 0x00001af9,
+	0xffffe507, 0xfffff91b, 0x000006e5, 0x00002713, 0xffffd8ed, 0x00001327, 0xffffecd9, 0x00002727,
+	0xffffd8d9, 0x00002b03, 0xffffd4fd, 0x0000032b, 0xfffffcd5, 0x000023e8, 0xffffdc18, 0xffffe824,
+	0x000017dc, 0x0000452a, 0xffffbad6, 0x00002a45, 0xffffd5bb, 0x000034f2, 0xffffcb0e, 0xfffff235,
+	0x00000dcb, 0x00004713, 0xffffb8ed, 0x00001347, 0xffffecb9, 0x00004949, 0xffffb6b7, 0x00004ffe,
+	0xffffb002, 0xfffffe50, 0x000001b0, 0x000033cc, 0xffffcc34, 0x000045d9, 0xffffba27, 0xffffd946,
+	0x000026ba, 0x00007930, 0xffff86d0, 0x00003079, 0xffffcf87, 0x00007c54, 0xffff83ac, 0x0000547c,
+	0xffffab84, 0x000063e5, 0xffff9c1b, 0xffffe564, 0x00001a9c, 0x000065af, 0xffff9a51, 0xffffaf66,
+	0x0000509a, 0x00003737, 0xffffc8c9, 0x00006868, 0xffff9798, 0x00000000, 0x09090000, 0xf6f70000,
+	0x0bfd0000, 0xf4030000, 0xfd0c0000, 0x02f40000, 0x14140000, 0xebec0000, 0x17060000, 0xe8fa0000,
+	0x06170000, 0xf9e90000, 0x00000909, 0x09090909, 0xf6f70909, 0x0bfd0909, 0xf4030909, 0xfd0c0909,
+	0x02f40909, 0x14140909, 0xebec0909, 0x17060909, 0xe8fa0909, 0x06170909, 0xf9e90909, 0xfffff6f7,
+	0x0908f6f7, 0xf6f6f6f7, 0x0bfcf6f7, 0xf402f6f7, 0xfd0bf6f7, 0x02f3f6f7, 0x1413f6f7, 0xebebf6f7,
+	0x1705f6f7, 0xe8f9f6f7, 0x0616f6f7, 0xf9e8f6f7, 0x00000bfd, 0x09090bfd, 0xf6f70bfd, 0x0bfd0bfd,
+	0xf4030bfd, 0xfd0c0bfd, 0x02f40bfd, 0x14140bfd, 0xebec0bfd, 0x17060bfd, 0xe8fa0bfd, 0x06170bfd,
+	0xf9e90bfd, 0xfffff403, 0x0908f403, 0xf6f6f403, 0x0bfcf403, 0xf402f403, 0xfd0bf403, 0x02f3f403,
+	0x1413f403, 0xebebf403, 0x1705f403, 0xe8f9f403, 0x0616f403, 0xf9e8f403, 0xfffffd0c, 0x0908fd0c,
+	0xf6f6fd0c, 0x0bfcfd0c, 0xf402fd0c, 0xfd0bfd0c, 0x02f3fd0c, 0x1413fd0c, 0xebebfd0c, 0x1705fd0c,
+	0xe8f9fd0c, 0x0616fd0c, 0xf9e8fd0c, 0x000002f4, 0x090902f4, 0xf6f702f4, 0x0bfd02f4, 0xf40302f4,
+	0xfd0c02f4, 0x02f402f4, 0x141402f4, 0xebec02f4, 0x170602f4, 0xe8fa02f4, 0x061702f4, 0xf9e902f4,
+	0x00001414, 0x09091414, 0xf6f71414, 0x0bfd1414, 0xf4031414, 0xfd0c1414, 0x02f41414, 0x14141414,
+	0xebec1414, 0x17061414, 0xe8fa1414, 0x06171414, 0xf9e91414, 0xffffebec, 0x0908ebec, 0xf6f6ebec,
+	0x0bfcebec, 0xf402ebec, 0xfd0bebec, 0x02f3ebec, 0x1413ebec, 0xebebebec, 0x1705ebec, 0xe8f9ebec,
+	0x0616ebec, 0xf9e8ebec, 0x00001706, 0x09091706, 0xf6f71706, 0x0bfd1706, 0xf4031706, 0xfd0c1706,
+	0x02f41706, 0x14141706, 0xebec1706, 0x17061706, 0xe8fa1706, 0x06171706, 0xf9e91706, 0xffffe8fa,
+	0x0908e8fa, 0xf6f6e8fa, 0x0bfce8fa, 0xf402e8fa, 0xfd0be8fa, 0x02f3e8fa, 0x1413e8fa, 0xebebe8fa,
+	0x1705e8fa, 0xe8f9e8fa, 0x0616e8fa, 0xf9e8e8fa, 0x00000617, 0x09090617, 0xf6f70617, 0x0bfd0617,
+	0xf4030617, 0xfd0c0617, 0x02f40617, 0x14140617, 0xebec0617, 0x17060617, 0xe8fa0617, 0x06170617,
+	0xf9e90617, 0xfffff9e9, 0x0908f9e9, 0xf6f6f9e9, 0x0bfcf9e9, 0xf402f9e9, 0xfd0bf9e9, 0x02f3f9e9,
+	0x1413f9e9, 0xebebf9e9, 0x1705f9e9, 0xe8f9f9e9, 0x0616f9e9, 0xf9e8f9e9, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000202, 0xfffffdfe, 0x00000200, 0xfffffe00, 0x00000002, 0xfffffffe, 0x00000404,
+	0xfffffbfc, 0x00000400, 0xfffffc00, 0x00000004, 0xfffffffc, 0x000003fc, 0xfffffc04, 0x000005fe,
+	0xfffffa02, 0xfffffe06, 0x000001fa, 0x00000804, 0xfffff7fc, 0x00000408, 0xfffffbf8, 0x00000808,
+	0xfffff7f8, 0x00000a00, 0xfffff600, 0x0000000a, 0xfffffff6, 0x000007fc, 0xfffff804, 0xfffffc08,
+	0x000003f8, 0x00000e08, 0xfffff1f8, 0x0000080e, 0xfffff7f2, 0x00000bfe, 0xfffff402, 0xfffffe0c,
+	0x000001f4, 0x00001004, 0xffffeffc, 0x00000410, 0xfffffbf0, 0x00001010, 0xffffeff0, 0x00001200,
+	0xffffee00, 0x00000012, 0xffffffee, 0x00000bf4, 0xfffff40c, 0x00000ff8, 0xfffff008, 0xfffff810,
+	0x000007f0, 0x00001a0a, 0xffffe5f6, 0x00000a1a, 0xfffff5e6, 0x00001c12, 0xffffe3ee, 0x0000121c,
+	0xffffede4, 0x000015fa, 0xffffea06, 0xfffffa16, 0x000005ea, 0x00001c04, 0xffffe3fc, 0x0000041c,
+	0xfffffbe4, 0x00001e1e, 0xffffe1e2, 0x00001ffe, 0xffffe002, 0xfffffe20, 0x000001e0, 0x000015ee,
+	0xffffea12, 0xffffee16, 0x000011ea, 0x00001df2, 0xffffe20e, 0xfffff21e, 0x00000de2, 0x00002e16,
+	0xffffd1ea, 0x0000162e, 0xffffe9d2, 0x00002e0c, 0xffffd1f4, 0x00000c2e, 0xfffff3d2, 0x00003022,
+	0xffffcfde, 0x00002230, 0xffffddd0, 0x000027f6, 0xffffd80a, 0xfffff628, 0x000009d8, 0x00003204,
+	0xffffcdfc, 0x00000432, 0xfffffbce, 0x00003636, 0xffffc9ca, 0x000021de, 0xffffde22, 0x000029e4,
+	0xffffd61c, 0xffffe42a, 0x00001bd6, 0x00003bfa, 0xffffc406, 0xfffffa3c, 0x000005c4, 0x00004c1a,
+	0xffffb3e6, 0x00001a4c, 0xffffe5b4, 0x00004c2a, 0xffffb3d6, 0x00002a4c, 0xffffd5b4, 0x000035e8,
+	0xffffca18, 0xffffe836, 0x000017ca, 0x00004e0e, 0xffffb1f2, 0x00000e4e, 0xfffff1b2, 0x0000523e,
+	0xffffadc2, 0x00003e52, 0xffffc1ae, 0x000049ec, 0xffffb614, 0xffffec4a, 0x000013b6, 0x00005802,
+	0xffffa7fe, 0x00000258, 0xfffffda8, 0x00005c5c, 0xffffa3a4, 0x00003bcc, 0xffffc434, 0xffffcc3c,
+	0x000033c4, 0x00007634, 0xffff89cc, 0x00003476, 0xffffcb8a, 0x000049d4, 0xffffb62c, 0xffffd44a,
+	0x00002bb6, 0x0000764a, 0xffff89b6, 0x00004a76, 0xffffb58a, 0x00007620, 0xffff89e0, 0x00002076,
+	0xffffdf8a, 0x000065f4, 0xffff9a0c, 0xfffff466, 0x00000b9a, 0x00005fd8, 0xffffa028, 0xffffd860,
+	0x000027a0, 0x000075de, 0xffff8a22, 0xffffde76, 0x0000218a, 0x000057a8, 0xffffa858, 0x000067b2,
+	0xffff984e, 0xffffb268, 0x00004d98, 0x00000c0c, 0xfffff3f4, 0x00001616, 0xffffe9ea, 0x00002a2a,
+	0xffffd5d6, 0x00004848, 0xffffb7b8, 0x00000000, 0x02020000, 0xfdfe0000, 0x02000000, 0xfe000000,
+	0x00020000, 0xfffe0000, 0x00000202, 0x02020202, 0xfdfe0202, 0x02000202, 0xfe000202, 0x00020202,
+	0xfffe0202, 0xfffffdfe, 0x0201fdfe, 0xfdfdfdfe, 0x01fffdfe, 0xfdfffdfe, 0x0001fdfe, 0xfffdfdfe,
+	0x00000200, 0x02020200, 0xfdfe0200, 0x02000200, 0xfe000200, 0x00020200, 0xfffe0200, 0xfffffe00,
+	0x0201fe00, 0xfdfdfe00, 0x01fffe00, 0xfdfffe00, 0x0001fe00, 0xfffdfe00, 0x00000002, 0x02020002,
+	0xfdfe0002, 0x02000002, 0xfe000002, 0x00020002, 0xfffe0002, 0xfffffffe, 0x0201fffe, 0xfdfdfffe,
+	0x01fffffe, 0xfdfffffe, 0x0001fffe, 0xfffdfffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000303, 0xfffffcfd, 0x00000300, 0xfffffd00, 0x00000003, 0xfffffffd, 0x00000606,
+	0xfffff9fa, 0x00000903, 0xfffff6fd, 0x00000309, 0xfffffcf7, 0x000008fd, 0xfffff703, 0xfffffd09,
+	0x000002f7, 0x000005fa, 0xfffffa06, 0x00000c06, 0xfffff3fa, 0x0000060c, 0xfffff9f4, 0x00000c0c,
+	0xfffff3f4, 0x00000f00, 0xfffff100, 0x0000000f, 0xfffffff1, 0x00000bf7, 0xfffff409, 0xfffff70c,
+	0x000008f4, 0x0000180f, 0xffffe7f1, 0x00000f18, 0xfffff0e8, 0x000011fa, 0xffffee06, 0xfffffa12,
+	0x000005ee, 0x00001806, 0xffffe7fa, 0x00000618, 0xfffff9e8, 0x00001818, 0xffffe7e8, 0x00001b00,
+	0xffffe500, 0x0000001b, 0xffffffe5, 0x000011ee, 0xffffee12, 0x000017f4, 0xffffe80c, 0xfffff418,
+	0x00000be8, 0x0000270f, 0xffffd8f1, 0x00000f27, 0xfffff0d9, 0x00002a1b, 0xffffd5e5, 0x00001b2a,
+	0xffffe4d6, 0x000020f7, 0xffffdf09, 0xfffff721, 0x000008df, 0x00002a06, 0xffffd5fa, 0x0000062a,
+	0xfffff9d6, 0x00002d2d, 0xffffd2d3, 0x000032fd, 0xffffcd03, 0xfffffd33, 0x000002cd, 0x000020e5,
+	0xffffdf1b, 0xffffe521, 0x00001adf, 0x00002ceb, 0xffffd315, 0xffffeb2d, 0x000014d3, 0x00004521,
+	0xffffbadf, 0x00002145, 0xffffdebb, 0x00004512, 0xffffbaee, 0x00001245, 0xffffedbb, 0x00004836,
+	0xffffb7ca, 0x00003648, 0xffffc9b8, 0x00003eee, 0xffffc112, 0xffffee3f, 0x000011c1, 0x00004e06,
+	0xffffb1fa, 0x0000064e, 0xfffff9b2, 0x00005151, 0xffffaeaf, 0x000032cd, 0xffffcd33, 0x00003ed6,
+	0xffffc12a, 0xffffd63f, 0x000029c1, 0x000059f7, 0xffffa609, 0xfffff75a, 0x000008a6, 0x0000722a,
+	0xffff8dd6, 0x00002a72, 0xffffd58e, 0x0000753f, 0xffff8ac1, 0x00003f75, 0xffffc08b, 0x000050dc,
+	0xffffaf24, 0xffffdc51, 0x000023af, 0x00007815, 0xffff87eb, 0x00001578, 0xffffea88, 0x00007b60,
+	0xffff84a0, 0x0000607b, 0xffff9f85, 0x00006ee2, 0xffff911e, 0xffffe26f, 0x00001d91, 0x00005cb2,
+	0xffffa34e, 0xffffb25d, 0x00004da3, 0x000071bb, 0xffff8e45, 0xffffbb72, 0x0000448e, 0x00001212,
+	0xffffedee, 0x00002121, 0xffffdedf, 0x00003f3f, 0xffffc0c1, 0x00006c6c, 0xffff9394, 0x00000000,
+	0x03030000, 0xfcfd0000, 0x03000000, 0xfd000000, 0x00030000, 0xfffd0000, 0x06060000, 0xf9fa0000,
+	0x00000303, 0x03030303, 0xfcfd0303, 0x03000303, 0xfd000303, 0x00030303, 0xfffd0303, 0x06060303,
+	0xf9fa0303, 0xfffffcfd, 0x0302fcfd, 0xfcfcfcfd, 0x02fffcfd, 0xfcfffcfd, 0x0002fcfd, 0xfffcfcfd,
+	0x0605fcfd, 0xf9f9fcfd, 0x00000300, 0x03030300, 0xfcfd0300, 0x03000300, 0xfd000300, 0x00030300,
+	0xfffd0300, 0x06060300, 0xf9fa0300, 0xfffffd00, 0x0302fd00, 0xfcfcfd00, 0x02fffd00, 0xfcfffd00,
+	0x0002fd00, 0xfffcfd00, 0x0605fd00, 0xf9f9fd00, 0x00000003, 0x03030003, 0xfcfd0003, 0x03000003,
+	0xfd000003, 0x00030003, 0xfffd0003, 0x06060003, 0xf9fa0003, 0xfffffffd, 0x0302fffd, 0xfcfcfffd,
+	0x02fffffd, 0xfcfffffd, 0x0002fffd, 0xfffcfffd, 0x0605fffd, 0xf9f9fffd, 0x00000606, 0x03030606,
+	0xfcfd0606, 0x03000606, 0xfd000606, 0x00030606, 0xfffd0606, 0x06060606, 0xf9fa0606, 0xfffff9fa,
+	0x0302f9fa, 0xfcfcf9fa, 0x02fff9fa, 0xfcfff9fa, 0x0002f9fa, 0xfffcf9fa, 0x0605f9fa, 0xf9f9f9fa,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000404, 0xfffffbfc, 0x00000400, 0xfffffc00, 0x00000004, 0xfffffffc, 0x00000804,
+	0xfffff7fc, 0x00000408, 0xfffffbf8, 0x00000808, 0xfffff7f8, 0x000007f8, 0xfffff808, 0x00000bfc,
+	0xfffff404, 0xfffffc0c, 0x000003f4, 0x00001008, 0xffffeff8, 0x00000810, 0xfffff7f0, 0x00001010,
+	0xffffeff0, 0x00001400, 0xffffec00, 0x00000014, 0xffffffec, 0x00000ff4, 0xfffff00c, 0xfffff410,
+	0x00000bf0, 0x000017fc, 0xffffe804, 0xfffffc18, 0x000003e8, 0x00002010, 0xffffdff0, 0x00001020,
+	0xffffefe0, 0x00002008, 0xffffdff8, 0x00000820, 0xfffff7e0, 0x00002020, 0xffffdfe0, 0x00002400,
+	0xffffdc00, 0x00000024, 0xffffffdc, 0x000017e8, 0xffffe818, 0x00001ff0, 0xffffe010, 0xfffff020,
+	0x00000fe0, 0x00003414, 0xffffcbec, 0x00001434, 0xffffebcc, 0x00003824, 0xffffc7dc, 0x00002438,
+	0xffffdbc8, 0x00002bf4, 0xffffd40c, 0xfffff42c, 0x00000bd4, 0x00003808, 0xffffc7f8, 0x00000838,
+	0xfffff7c8, 0x00003c3c, 0xffffc3c4, 0x00003ffc, 0xffffc004, 0xfffffc40, 0x000003c0, 0x00002bdc,
+	0xffffd424, 0xffffdc2c, 0x000023d4, 0x00003be4, 0xffffc41c, 0xffffe43c, 0x00001bc4, 0x00005c2c,
+	0xffffa3d4, 0x00002c5c, 0xffffd3a4, 0x00005c18, 0xffffa3e8, 0x0000185c, 0xffffe7a4, 0x00006048,
+	0xffff9fb8, 0x00004860, 0xffffb7a0, 0x000053ec, 0xffffac14, 0xffffec54, 0x000013ac, 0x00006408,
+	0xffff9bf8, 0x00000864, 0xfffff79c, 0x00006c6c, 0xffff9394, 0x000043bc, 0xffffbc44, 0x000053c8,
+	0xffffac38, 0xffffc854, 0x000037ac, 0x000077f4, 0xffff880c, 0xfffff478, 0x00000b88, 0x00006bd0,
+	0xffff9430, 0xffffd06c, 0x00002f94, 0x00007b98, 0xffff8468, 0xffff987c, 0x00006784, 0x00001818,
+	0xffffe7e8, 0x00002c2c, 0xffffd3d4, 0x00005454, 0xffffabac, 0x00000000, 0x04040000, 0xfbfc0000,
+	0x04000000, 0xfc000000, 0x00040000, 0xfffc0000, 0x08040000, 0xf7fc0000, 0x04080000, 0x00000404,
+	0x04040404, 0xfbfc0404, 0x04000404, 0xfc000404, 0x00040404, 0xfffc0404, 0x08040404, 0xf7fc0404,
+	0x04080404, 0xfffffbfc, 0x0403fbfc, 0xfbfbfbfc, 0x03fffbfc, 0xfbfffbfc, 0x0003fbfc, 0xfffbfbfc,
+	0x0803fbfc, 0xf7fbfbfc, 0x0407fbfc, 0x00000400, 0x04040400, 0xfbfc0400, 0x04000400, 0xfc000400,
+	0x00040400, 0xfffc0400, 0x08040400, 0xf7fc0400, 0x04080400, 0xfffffc00, 0x0403fc00, 0xfbfbfc00,
+	0x03fffc00, 0xfbfffc00, 0x0003fc00, 0xfffbfc00, 0x0803fc00, 0xf7fbfc00, 0x0407fc00, 0x00000004,
+	0x04040004, 0xfbfc0004, 0x04000004, 0xfc000004, 0x00040004, 0xfffc0004, 0x08040004, 0xf7fc0004,
+	0x04080004, 0xfffffffc, 0x0403fffc, 0xfbfbfffc, 0x03fffffc, 0xfbfffffc, 0x0003fffc, 0xfffbfffc,
+	0x0803fffc, 0xf7fbfffc, 0x0407fffc, 0x00000804, 0x04040804, 0xfbfc0804, 0x04000804, 0xfc000804,
+	0x00040804, 0xfffc0804, 0x08040804, 0xf7fc0804, 0x04080804, 0xfffff7fc, 0x0403f7fc, 0xfbfbf7fc,
+	0x03fff7fc, 0xfbfff7fc, 0x0003f7fc, 0xfffbf7fc, 0x0803f7fc, 0xf7fbf7fc, 0x0407f7fc, 0x00000408,
+	0x04040408, 0xfbfc0408, 0x04000408, 0xfc000408, 0x00040408, 0xfffc0408, 0x08040408, 0xf7fc0408,
+	0x04080408, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000505, 0xfffffafb, 0x00000500, 0xfffffb00, 0x00000005, 0xfffffffb, 0x00000a0a,
+	0xfffff5f6, 0x00000f05, 0xfffff0fb, 0x0000050f, 0xfffffaf1, 0x000009f6, 0xfffff60a, 0x00000efb,
+	0xfffff105, 0xfffffb0f, 0x000004f1, 0x0000140a, 0xffffebf6, 0x00000a14, 0xfffff5ec, 0x00001414,
+	0xffffebec, 0x00001900, 0xffffe700, 0x00000019, 0xffffffe7, 0x000013f1, 0xffffec0f, 0xfffff114,
+	0x00000eec, 0x00002819, 0xffffd7e7, 0x00001928, 0xffffe6d8, 0x00001df6, 0xffffe20a, 0xfffff61e,
+	0x000009e2, 0x0000280a, 0xffffd7f6, 0x00000a28, 0xfffff5d8, 0x00002828, 0xffffd7d8, 0x00002d00,
+	0xffffd300, 0x0000002d, 0xffffffd3, 0x00001de2, 0xffffe21e, 0x000027ec, 0xffffd814, 0xffffec28,
+	0x000013d8, 0x00004119, 0xffffbee7, 0x00001941, 0xffffe6bf, 0x0000462d, 0xffffb9d3, 0x00002d46,
+	0xffffd2ba, 0x000036f1, 0xffffc90f, 0xfffff137, 0x00000ec9, 0x0000460a, 0xffffb9f6, 0x00000a46,
+	0xfffff5ba, 0x00004b4b, 0xffffb4b5, 0x000054fb, 0xffffab05, 0xfffffb55, 0x000004ab, 0x000036d3,
+	0xffffc92d, 0xffffd337, 0x00002cc9, 0x00004add, 0xffffb523, 0xffffdd4b, 0x000022b5, 0x00007337,
+	0xffff8cc9, 0x00003773, 0xffffc88d, 0x0000731e, 0xffff8ce2, 0x00001e73, 0xffffe18d, 0x0000785a,
+	0xffff87a6, 0x00005a78, 0xffffa588, 0x000068e2, 0xffff971e, 0xffffe269, 0x00001d97, 0x000054ab,
+	0xffffab55, 0x000068ba, 0xffff9746, 0xffffba69, 0x00004597, 0x00001e1e, 0xffffe1e2, 0x00003c3c,
+	0xffffc3c4, 0x00006969, 0xffff9697, 0x00000000, 0x05050000, 0xfafb0000, 0x05000000, 0xfb000000,
+	0x00050000, 0xfffb0000, 0x0a0a0000, 0xf5f60000, 0x0f050000, 0xf0fb0000, 0x00000505, 0x05050505,
+	0xfafb0505, 0x05000505, 0xfb000505, 0x00050505, 0xfffb0505, 0x0a0a0505, 0xf5f60505, 0x0f050505,
+	0xf0fb0505, 0xfffffafb, 0x0504fafb, 0xfafafafb, 0x04fffafb, 0xfafffafb, 0x0004fafb, 0xfffafafb,
+	0x0a09fafb, 0xf5f5fafb, 0x0f04fafb, 0xf0fafafb, 0x00000500, 0x05050500, 0xfafb0500, 0x05000500,
+	0xfb000500, 0x00050500, 0xfffb0500, 0x0a0a0500, 0xf5f60500, 0x0f050500, 0xf0fb0500, 0xfffffb00,
+	0x0504fb00, 0xfafafb00, 0x04fffb00, 0xfafffb00, 0x0004fb00, 0xfffafb00, 0x0a09fb00, 0xf5f5fb00,
+	0x0f04fb00, 0xf0fafb00, 0x00000005, 0x05050005, 0xfafb0005, 0x05000005, 0xfb000005, 0x00050005,
+	0xfffb0005, 0x0a0a0005, 0xf5f60005, 0x0f050005, 0xf0fb0005, 0xfffffffb, 0x0504fffb, 0xfafafffb,
+	0x04fffffb, 0xfafffffb, 0x0004fffb, 0xfffafffb, 0x0a09fffb, 0xf5f5fffb, 0x0f04fffb, 0xf0fafffb,
+	0x00000a0a, 0x05050a0a, 0xfafb0a0a, 0x05000a0a, 0xfb000a0a, 0x00050a0a, 0xfffb0a0a, 0x0a0a0a0a,
+	0xf5f60a0a, 0x0f050a0a, 0xf0fb0a0a, 0xfffff5f6, 0x0504f5f6, 0xfafaf5f6, 0x04fff5f6, 0xfafff5f6,
+	0x0004f5f6, 0xfffaf5f6, 0x0a09f5f6, 0xf5f5f5f6, 0x0f04f5f6, 0xf0faf5f6, 0x00000f05, 0x05050f05,
+	0xfafb0f05, 0x05000f05, 0xfb000f05, 0x00050f05, 0xfffb0f05, 0x0a0a0f05, 0xf5f60f05, 0x0f050f05,
+	0xf0fb0f05, 0xfffff0fb, 0x0504f0fb, 0xfafaf0fb, 0x04fff0fb, 0xfafff0fb, 0x0004f0fb, 0xfffaf0fb,
+	0x0a09f0fb, 0xf5f5f0fb, 0x0f04f0fb, 0xf0faf0fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000606, 0xfffff9fa, 0x00000600, 0xfffffa00, 0x00000006, 0xfffffffa, 0x00000c0c,
+	0xfffff3f4, 0x00000c06, 0xfffff3fa, 0x0000060c, 0xfffff9f4, 0x00000bf4, 0xfffff40c, 0x000011fa,
+	0xffffee06, 0xfffffa12, 0x000005ee, 0x0000180c, 0xffffe7f4, 0x00000c18, 0xfffff3e8, 0x00001818,
+	0xffffe7e8, 0x00001e00, 0xffffe200, 0x0000001e, 0xffffffe2, 0x000017ee, 0xffffe812, 0xffffee18,
+	0x000011e8, 0x0000301e, 0xffffcfe2, 0x00001e30, 0xffffe1d0, 0x000023fa, 0xffffdc06, 0xfffffa24,
+	0x000005dc, 0x0000300c, 0xffffcff4, 0x00000c30, 0xfffff3d0, 0x00003030, 0xffffcfd0, 0x00003600,
+	0xffffca00, 0x00000036, 0xffffffca, 0x000023dc, 0xffffdc24, 0x00002fe8, 0xffffd018, 0xffffe830,
+	0x000017d0, 0x00004e1e, 0xffffb1e2, 0x00001e4e, 0xffffe1b2, 0x00005436, 0xffffabca, 0x00003654,
+	0xffffc9ac, 0x000041ee, 0xffffbe12, 0xffffee42, 0x000011be, 0x0000540c, 0xffffabf4, 0x00000c54,
+	0xfffff3ac, 0x00005a5a, 0xffffa5a6, 0x00005ffa, 0xffffa006, 0xfffffa60, 0x000005a0, 0x000041ca,
+	0xffffbe36, 0xffffca42, 0x000035be, 0x000059d6, 0xffffa62a, 0xffffd65a, 0x000029a6, 0x00007de2,
+	0xffff821e, 0xffffe27e, 0x00001d82, 0x0000659a, 0xffff9a66, 0x00007dac, 0xffff8254, 0xffffac7e,
+	0x00005382, 0x00002424, 0xffffdbdc, 0x00004242, 0xffffbdbe, 0x00000000, 0x06060000, 0xf9fa0000,
+	0x06000000, 0xfa000000, 0x00060000, 0xfffa0000, 0x0c0c0000, 0xf3f40000, 0x0c060000, 0xf3fa0000,
+	0x060c0000, 0x00000606, 0x06060606, 0xf9fa0606, 0x06000606, 0xfa000606, 0x00060606, 0xfffa0606,
+	0x0c0c0606, 0xf3f40606, 0x0c060606, 0xf3fa0606, 0x060c0606, 0xfffff9fa, 0x0605f9fa, 0xf9f9f9fa,
+	0x05fff9fa, 0xf9fff9fa, 0x0005f9fa, 0xfff9f9fa, 0x0c0bf9fa, 0xf3f3f9fa, 0x0c05f9fa, 0xf3f9f9fa,
+	0x060bf9fa, 0x00000600, 0x06060600, 0xf9fa0600, 0x06000600, 0xfa000600, 0x00060600, 0xfffa0600,
+	0x0c0c0600, 0xf3f40600, 0x0c060600, 0xf3fa0600, 0x060c0600, 0xfffffa00, 0x0605fa00, 0xf9f9fa00,
+	0x05fffa00, 0xf9fffa00, 0x0005fa00, 0xfff9fa00, 0x0c0bfa00, 0xf3f3fa00, 0x0c05fa00, 0xf3f9fa00,
+	0x060bfa00, 0x00000006, 0x06060006, 0xf9fa0006, 0x06000006, 0xfa000006, 0x00060006, 0xfffa0006,
+	0x0c0c0006, 0xf3f40006, 0x0c060006, 0xf3fa0006, 0x060c0006, 0xfffffffa, 0x0605fffa, 0xf9f9fffa,
+	0x05fffffa, 0xf9fffffa, 0x0005fffa, 0xfff9fffa, 0x0c0bfffa, 0xf3f3fffa, 0x0c05fffa, 0xf3f9fffa,
+	0x060bfffa, 0x00000c0c, 0x06060c0c, 0xf9fa0c0c, 0x06000c0c, 0xfa000c0c, 0x00060c0c, 0xfffa0c0c,
+	0x0c0c0c0c, 0xf3f40c0c, 0x0c060c0c, 0xf3fa0c0c, 0x060c0c0c, 0xfffff3f4, 0x0605f3f4, 0xf9f9f3f4,
+	0x05fff3f4, 0xf9fff3f4, 0x0005f3f4, 0xfff9f3f4, 0x0c0bf3f4, 0xf3f3f3f4, 0x0c05f3f4, 0xf3f9f3f4,
+	0x060bf3f4, 0x00000c06, 0x06060c06, 0xf9fa0c06, 0x06000c06, 0xfa000c06, 0x00060c06, 0xfffa0c06,
+	0x0c0c0c06, 0xf3f40c06, 0x0c060c06, 0xf3fa0c06, 0x060c0c06, 0xfffff3fa, 0x0605f3fa, 0xf9f9f3fa,
+	0x05fff3fa, 0xf9fff3fa, 0x0005f3fa, 0xfff9f3fa, 0x0c0bf3fa, 0xf3f3f3fa, 0x0c05f3fa, 0xf3f9f3fa,
+	0x060bf3fa, 0x0000060c, 0x0606060c, 0xf9fa060c, 0x0600060c, 0xfa00060c, 0x0006060c, 0xfffa060c,
+	0x0c0c060c, 0xf3f4060c, 0x0c06060c, 0xf3fa060c, 0x060c060c, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000707, 0xfffff8f9, 0x00000700, 0xfffff900, 0x00000007, 0xfffffff9, 0x00000e0e,
+	0xfffff1f2, 0x00001507, 0xffffeaf9, 0x00000715, 0xfffff8eb, 0x00000df2, 0xfffff20e, 0x000014f9,
+	0xffffeb07, 0xfffff915, 0x000006eb, 0x00001c0e, 0xffffe3f2, 0x00000e1c, 0xfffff1e4, 0x00001c1c,
+	0xffffe3e4, 0x00002300, 0xffffdd00, 0x00000023, 0xffffffdd, 0x00001beb, 0xffffe415, 0xffffeb1c,
+	0x000014e4, 0x00003823, 0xffffc7dd, 0x00002338, 0xffffdcc8, 0x000029f2, 0xffffd60e, 0xfffff22a,
+	0x00000dd6, 0x0000380e, 0xffffc7f2, 0x00000e38, 0xfffff1c8, 0x00003838, 0xffffc7c8, 0x00003f00,
+	0xffffc100, 0x0000003f, 0xffffffc1, 0x000029d6, 0xffffd62a, 0x000037e4, 0xffffc81c, 0xffffe438,
+	0x00001bc8, 0x00005b23, 0xffffa4dd, 0x0000235b, 0xffffdca5, 0x0000623f, 0xffff9dc1, 0x00003f62,
+	0xffffc09e, 0x00004ceb, 0xffffb315, 0xffffeb4d, 0x000014b3, 0x0000620e, 0xffff9df2, 0x00000e62,
+	0xfffff19e, 0x00006969, 0xffff9697, 0x000076f9, 0xffff8907, 0xfffff977, 0x00000689, 0x00004cc1,
+	0xffffb33f, 0xffffc14d, 0x00003eb3, 0x000068cf, 0xffff9731, 0xffffcf69, 0x00003097, 0x00007689,
+	0xffff8977, 0x00002a2a, 0xffffd5d6, 0x00004d4d, 0xffffb2b3, 0x00000000, 0x07070000, 0xf8f90000,
+	0x07000000, 0xf9000000, 0x00070000, 0xfff90000, 0x0e0e0000, 0xf1f20000, 0x15070000, 0xeaf90000,
+	0x07150000, 0x00000707, 0x07070707, 0xf8f90707, 0x07000707, 0xf9000707, 0x00070707, 0xfff90707,
+	0x0e0e0707, 0xf1f20707, 0x15070707, 0xeaf90707, 0x07150707, 0xfffff8f9, 0x0706f8f9, 0xf8f8f8f9,
+	0x06fff8f9, 0xf8fff8f9, 0x0006f8f9, 0xfff8f8f9, 0x0e0df8f9, 0xf1f1f8f9, 0x1506f8f9, 0xeaf8f8f9,
+	0x0714f8f9, 0x00000700, 0x07070700, 0xf8f90700, 0x07000700, 0xf9000700, 0x00070700, 0xfff90700,
+	0x0e0e0700, 0xf1f20700, 0x15070700, 0xeaf90700, 0x07150700, 0xfffff900, 0x0706f900, 0xf8f8f900,
+	0x06fff900, 0xf8fff900, 0x0006f900, 0xfff8f900, 0x0e0df900, 0xf1f1f900, 0x1506f900, 0xeaf8f900,
+	0x0714f900, 0x00000007, 0x07070007, 0xf8f90007, 0x07000007, 0xf9000007, 0x00070007, 0xfff90007,
+	0x0e0e0007, 0xf1f20007, 0x15070007, 0xeaf90007, 0x07150007, 0xfffffff9, 0x0706fff9, 0xf8f8fff9,
+	0x06fffff9, 0xf8fffff9, 0x0006fff9, 0xfff8fff9, 0x0e0dfff9, 0xf1f1fff9, 0x1506fff9, 0xeaf8fff9,
+	0x0714fff9, 0x00000e0e, 0x07070e0e, 0xf8f90e0e, 0x07000e0e, 0xf9000e0e, 0x00070e0e, 0xfff90e0e,
+	0x0e0e0e0e, 0xf1f20e0e, 0x15070e0e, 0xeaf90e0e, 0x07150e0e, 0xfffff1f2, 0x0706f1f2, 0xf8f8f1f2,
+	0x06fff1f2, 0xf8fff1f2, 0x0006f1f2, 0xfff8f1f2, 0x0e0df1f2, 0xf1f1f1f2, 0x1506f1f2, 0xeaf8f1f2,
+	0x0714f1f2, 0x00001507, 0x07071507, 0xf8f91507, 0x07001507, 0xf9001507, 0x00071507, 0xfff91507,
+	0x0e0e1507, 0xf1f21507, 0x15071507, 0xeaf91507, 0x07151507, 0xffffeaf9, 0x0706eaf9, 0xf8f8eaf9,
+	0x06ffeaf9, 0xf8ffeaf9, 0x0006eaf9, 0xfff8eaf9, 0x0e0deaf9, 0xf1f1eaf9, 0x1506eaf9, 0xeaf8eaf9,
+	0x0714eaf9, 0x00000715, 0x07070715, 0xf8f90715, 0x07000715, 0xf9000715, 0x00070715, 0xfff90715,
+	0x0e0e0715, 0xf1f20715, 0x15070715, 0xeaf90715, 0x07150715, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000808, 0xfffff7f8, 0x00000800, 0xfffff800, 0x00000008, 0xfffffff8, 0x00001010,
+	0xffffeff0, 0x00001008, 0xffffeff8, 0x00000810, 0xfffff7f0, 0x00000ff0, 0xfffff010, 0x000017f8,
+	0xffffe808, 0xfffff818, 0x000007e8, 0x00002010, 0xffffdff0, 0x00001020, 0xffffefe0, 0x00002020,
+	0xffffdfe0, 0x00002800, 0xffffd800, 0x00000028, 0xffffffd8, 0x00001fe8, 0xffffe018, 0xffffe820,
+	0x000017e0, 0x00004028, 0xffffbfd8, 0x00002840, 0xffffd7c0, 0x00002ff0, 0xffffd010, 0xfffff030,
+	0x00000fd0, 0x00004010, 0xffffbff0, 0x00001040, 0xffffefc0, 0x00004040, 0xffffbfc0, 0x00004800,
+	0xffffb800, 0x00000048, 0xffffffb8, 0x00002fd0, 0xffffd030, 0x00003fe0, 0xffffc020, 0xffffe040,
+	0x00001fc0, 0x00006828, 0xffff97d8, 0x00002868, 0xffffd798, 0x00007048, 0xffff8fb8, 0x00004870,
+	0xffffb790, 0x000057e8, 0xffffa818, 0xffffe858, 0x000017a8, 0x00007010, 0xffff8ff0, 0x00001070,
+	0xffffef90, 0x00007878, 0xffff8788, 0x000057b8, 0xffffa848, 0xffffb858, 0x000047a8, 0x000077c8,
+	0xffff8838, 0xffffc878, 0x00003788, 0x00003030, 0xffffcfd0, 0x00005858, 0xffffa7a8, 0x00000000,
+	0x08080000, 0xf7f80000, 0x08000000, 0xf8000000, 0x00080000, 0xfff80000, 0x10100000, 0xeff00000,
+	0x10080000, 0xeff80000, 0x08100000, 0x00000808, 0x08080808, 0xf7f80808, 0x08000808, 0xf8000808,
+	0x00080808, 0xfff80808, 0x10100808, 0xeff00808, 0x10080808, 0xeff80808, 0x08100808, 0xfffff7f8,
+	0x0807f7f8, 0xf7f7f7f8, 0x07fff7f8, 0xf7fff7f8, 0x0007f7f8, 0xfff7f7f8, 0x100ff7f8, 0xefeff7f8,
+	0x1007f7f8, 0xeff7f7f8, 0x080ff7f8, 0x00000800, 0x08080800, 0xf7f80800, 0x08000800, 0xf8000800,
+	0x00080800, 0xfff80800, 0x10100800, 0xeff00800, 0x10080800, 0xeff80800, 0x08100800, 0xfffff800,
+	0x0807f800, 0xf7f7f800, 0x07fff800, 0xf7fff800, 0x0007f800, 0xfff7f800, 0x100ff800, 0xefeff800,
+	0x1007f800, 0xeff7f800, 0x080ff800, 0x00000008, 0x08080008, 0xf7f80008, 0x08000008, 0xf8000008,
+	0x00080008, 0xfff80008, 0x10100008, 0xeff00008, 0x10080008, 0xeff80008, 0x08100008, 0xfffffff8,
+	0x0807fff8, 0xf7f7fff8, 0x07fffff8, 0xf7fffff8, 0x0007fff8, 0xfff7fff8, 0x100ffff8, 0xefeffff8,
+	0x1007fff8, 0xeff7fff8, 0x080ffff8, 0x00001010, 0x08081010, 0xf7f81010, 0x08001010, 0xf8001010,
+	0x00081010, 0xfff81010, 0x10101010, 0xeff01010, 0x10081010, 0xeff81010, 0x08101010, 0xffffeff0,
+	0x0807eff0, 0xf7f7eff0, 0x07ffeff0, 0xf7ffeff0, 0x0007eff0, 0xfff7eff0, 0x100feff0, 0xefefeff0,
+	0x1007eff0, 0xeff7eff0, 0x080feff0, 0x00001008, 0x08081008, 0xf7f81008, 0x08001008, 0xf8001008,
+	0x00081008, 0xfff81008, 0x10101008, 0xeff01008, 0x10081008, 0xeff81008, 0x08101008, 0xffffeff8,
+	0x0807eff8, 0xf7f7eff8, 0x07ffeff8, 0xf7ffeff8, 0x0007eff8, 0xfff7eff8, 0x100feff8, 0xefefeff8,

@@ Diff output truncated at 100000 characters. @@

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list