[Scummvm-cvs-logs] SF.net SVN: scummvm: [29641] scummvm/trunk

cyx at users.sourceforge.net cyx at users.sourceforge.net
Mon Nov 26 00:27:51 CET 2007


Revision: 29641
          http://scummvm.svn.sourceforge.net/scummvm/?rev=29641&view=rev
Author:   cyx
Date:     2007-11-25 15:27:51 -0800 (Sun, 25 Nov 2007)

Log Message:
-----------
- enabled speech sounds
- added end of demo check for demo 1.10
- simplified parts loop
- populated strings table in IGOR.TBL
- updated and packed charset data

Modified Paths:
--------------
    scummvm/trunk/engines/igor/detection.cpp
    scummvm/trunk/engines/igor/igor.cpp
    scummvm/trunk/engines/igor/igor.h
    scummvm/trunk/engines/igor/parts/part_04.cpp
    scummvm/trunk/engines/igor/parts/part_05.cpp
    scummvm/trunk/engines/igor/parts/part_06.cpp
    scummvm/trunk/engines/igor/parts/part_12.cpp
    scummvm/trunk/engines/igor/parts/part_13.cpp
    scummvm/trunk/engines/igor/parts/part_14.cpp
    scummvm/trunk/engines/igor/parts/part_15.cpp
    scummvm/trunk/engines/igor/parts/part_16.cpp
    scummvm/trunk/engines/igor/parts/part_17.cpp
    scummvm/trunk/engines/igor/parts/part_18.cpp
    scummvm/trunk/engines/igor/parts/part_19.cpp
    scummvm/trunk/engines/igor/parts/part_21.cpp
    scummvm/trunk/engines/igor/parts/part_22.cpp
    scummvm/trunk/engines/igor/parts/part_23.cpp
    scummvm/trunk/engines/igor/parts/part_24.cpp
    scummvm/trunk/engines/igor/parts/part_25.cpp
    scummvm/trunk/engines/igor/parts/part_26.cpp
    scummvm/trunk/engines/igor/parts/part_27.cpp
    scummvm/trunk/engines/igor/parts/part_28.cpp
    scummvm/trunk/engines/igor/parts/part_30.cpp
    scummvm/trunk/engines/igor/parts/part_31.cpp
    scummvm/trunk/engines/igor/parts/part_33.cpp
    scummvm/trunk/engines/igor/parts/part_36.cpp
    scummvm/trunk/engines/igor/parts/part_37.cpp
    scummvm/trunk/engines/igor/parts/part_75.cpp
    scummvm/trunk/engines/igor/parts/part_85.cpp
    scummvm/trunk/engines/igor/parts/part_90.cpp
    scummvm/trunk/engines/igor/parts/part_95.cpp
    scummvm/trunk/engines/igor/parts/part_main.cpp
    scummvm/trunk/engines/igor/resource_ids.h
    scummvm/trunk/engines/igor/staticres.cpp
    scummvm/trunk/tools/create_igortbl/create_igortbl.c
    scummvm/trunk/tools/create_igortbl/resource_sp_cdrom.h
    scummvm/trunk/tools/create_igortbl/strings.h

Modified: scummvm/trunk/engines/igor/detection.cpp
===================================================================
--- scummvm/trunk/engines/igor/detection.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/detection.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -33,6 +33,7 @@
 struct IgorGameDescription {
 	Common::ADGameDescription desc;
 	int gameVersion;
+	int gameFlags;
 };
 
 static const IgorGameDescription igorGameDescriptions[] = {
@@ -49,7 +50,8 @@
 			Common::kPlatformPC,
 			Common::ADGF_DEMO
 		},
-		Igor::kIdEngDemo100
+		Igor::kIdEngDemo100,
+		Igor::kFlagDemo | Igor::kFlagFloppy
 	},
 	{
 		{
@@ -64,7 +66,8 @@
 			Common::kPlatformPC,
 			Common::ADGF_DEMO
 		},
-		Igor::kIdEngDemo110
+		Igor::kIdEngDemo110,
+		Igor::kFlagDemo | Igor::kFlagFloppy
 	},
 	{
 		{
@@ -79,9 +82,10 @@
 			Common::kPlatformPC,
 			Common::ADGF_NO_FLAGS
 		},
-		Igor::kIdSpaCD
+		Igor::kIdSpaCD,
+		Igor::kFlagTalkie
 	},
-	{ AD_TABLE_END_MARKER, 0 }
+	{ AD_TABLE_END_MARKER, 0, 0 }
 };
 
 static const PlainGameDescriptor igorGameDescriptors[] = {
@@ -104,7 +108,7 @@
 static bool Engine_IGOR_createInstance(OSystem *syst, Engine **engine, Common::EncapsulatedADGameDesc encapsulatedDesc) {
 	const IgorGameDescription *gd = (const IgorGameDescription *)(encapsulatedDesc.realDesc);
 	if (gd) {
-		*engine = new Igor::IgorEngine(syst, gd->gameVersion);
+		*engine = new Igor::IgorEngine(syst, gd->gameVersion, gd->gameFlags, gd->desc.language);
 	}
 	return gd != 0;
 }

Modified: scummvm/trunk/engines/igor/igor.cpp
===================================================================
--- scummvm/trunk/engines/igor/igor.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/igor.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -36,11 +36,9 @@
 
 namespace Igor {
 
-IgorEngine::IgorEngine(OSystem *system, int gameVersion)
-	: Engine(system), _gameVersion(gameVersion) {
+IgorEngine::IgorEngine(OSystem *system, int gameVersion, int gameFlags, Common::Language language)
+	: Engine(system), _gameVersion(gameVersion), _gameFlags(gameFlags), _gameLanguage(language) {
 
-	_midiPlayer = new MidiPlayer(this);
-
 	_screenVGA = (uint8 *)malloc(320 * 200);
 	for (int i = 0; i < 4; ++i) {
 		_facingIgorFrames[i] = (uint8 *)malloc(13500);
@@ -60,13 +58,17 @@
 	Common::addSpecialDebugLevel(kDebugScreen,   "Screen",   "Screen debug level");
 	Common::addSpecialDebugLevel(kDebugWalk,     "Walk",     "Walk debug level");
 	Common::addSpecialDebugLevel(kDebugGame,     "Game",     "Game debug level");
+
+	if (gameFlags & kFlagFloppy) {
+		_midiPlayer = new MidiPlayer(this);
+	} else {
+		_midiPlayer = 0;
+	}
 }
 
 IgorEngine::~IgorEngine() {
-	delete _midiPlayer;
 	free(_resourceEntries);
 	free(_soundOffsets);
-	Common::clearAllSpecialDebugLevels();
 	free(_screenVGA);
 	for (int i = 0; i < 4; ++i) {
 		free(_facingIgorFrames[i]);
@@ -80,6 +82,10 @@
 	free(_inventoryPanelBuffer);
 	free(_inventoryImagesBuffer);
 	free(_verbsPanelBuffer);
+
+	Common::clearAllSpecialDebugLevels();
+
+	delete _midiPlayer;
 }
 
 int IgorEngine::init() {
@@ -98,7 +104,7 @@
 	memset(&_gameState, 0, sizeof(_gameState));
 	_nextTimer = 0;
 	_fastMode = false;
-	_language = kLanguageEnglish;
+	_language = 0;
 
 	memset(_walkData, 0, sizeof(_walkData));
 	_walkCurrentPos = 0;
@@ -158,6 +164,8 @@
 	_soundOffsetsCount = 0;
 	_soundOffsets = 0;
 
+	_demoActionsCounter = 0;
+
 	_gameTicks = 0;
 }
 
@@ -170,7 +178,7 @@
 	}
 	const char *ovlFileName = "IGOR.DAT";
 	const char *fsdFileName = "IGOR.FSD";
-	if (_gameVersion == kIdSpaCD) {
+	if (_gameFlags & kFlagTalkie) {
 		ovlFileName = "IGOR.EXE";
 		fsdFileName = "IGOR.DAT";
 	}
@@ -180,7 +188,7 @@
 	if (!_sndFile.open(fsdFileName)) {
 		error("Unable to open '%s'", fsdFileName);
 	}
-	readResourceTableFile();
+	readTableFile();
 	loadMainTexts();
 	loadIgorFrames();
 	_gameState.talkMode = kTalkModeTextOnly;
@@ -193,11 +201,11 @@
 	return 0;
 }
 
-void IgorEngine::readResourceTableFile() {
+void IgorEngine::readTableFile() {
 	Common::File tblFile;
-	uint32 resourcesEntriesOffset = 0, soundEntriesOffset = 0;
-	if (tblFile.open("IGOR.TBL") && tblFile.readUint32BE() == MKID_BE('ITBL') && tblFile.readUint32BE() == 2) {
-		tblFile.skip(4);
+	uint32 stringsEntriesOffset = 0, resourcesEntriesOffset = 0, soundEntriesOffset = 0;
+	if (tblFile.open("IGOR.TBL") && tblFile.readUint32BE() == MKID_BE('ITBL') && tblFile.readUint32BE() == 3) {
+		stringsEntriesOffset = tblFile.readUint32BE();
 		uint32 borlandOverlaySize = _ovlFile.size();
 		int gameVersionsCount = tblFile.readByte();
 		for (int i = 0; i < gameVersionsCount; ++i) {
@@ -225,11 +233,38 @@
 		for (int i = 0; i < _soundOffsetsCount; ++i) {
 			_soundOffsets[i] = tblFile.readUint32BE();
 		}
+		tblFile.seek(stringsEntriesOffset);
+		int stringsCount = tblFile.readUint16BE();
+		for (int i = 0; i < stringsCount; ++i) {
+			int id = tblFile.readUint16BE();
+			int lang = tblFile.readByte();
+			int len = tblFile.readByte();
+			bool skipString = (lang == 1 && _gameLanguage != Common::EN_ANY) || (lang == 2 && _gameLanguage != Common::ES_ESP);
+			if (skipString) {
+				tblFile.skip(len);
+			} else {
+				char buf[256];
+				tblFile.read(buf, len);
+				buf[len] = 0;
+				_stringEntries.push_back(StringEntry(id, buf));
+			}
+		}
 		return;
 	}
 	error("Unable to read 'IGOR.TBL'");
 }
 
+const char *IgorEngine::getString(int id) {
+	const char *str = 0;
+	for (Common::Array<StringEntry>::const_iterator it = _stringEntries.begin(); it != _stringEntries.end(); ++it) {
+		if ((*it).id == id) {
+			str = (*it).str.c_str();
+			break;
+		}
+	}
+	return str;
+}
+
 void IgorEngine::waitForTimer(int ticks) {
 	_system->copyRectToScreen(_screenVGA, 320, 0, _screenVGAVOffset, 320, 200 - _screenVGAVOffset);
 	_system->updateScreen();
@@ -283,12 +318,16 @@
 		return;
 	}
 	_gameTicks += kTimerTicksCount;
-	if (_gameTicks == 64) { // TODO: original switches cursors more often
-		_gameTicks = 0;
+	if ((_gameTicks & 31) == 0) {
 		setCursor(_currentCursor);
 		_currentCursor = (_currentCursor + 1) & 3;
 	}
-	// TODO: updateMusic();
+	if (_gameFlags & kFlagFloppy) {
+		updateMusic();
+	}
+	if (_gameTicks == 64) {
+		_gameTicks = 0;
+	}
 }
 
 void IgorEngine::copyArea(uint8 *dst, int dstOffset, int dstPitch, const uint8 *src, int srcPitch, int w, int h, bool transparent) {
@@ -323,21 +362,21 @@
 
 void IgorEngine::playMusic(int num) {
 	debugC(9, kDebugEngine, "playMusic() %d", num);
-	static const int cmf[] = { 0, 0, CMF_2_1, CMF_3, CMF_4, 0, 0, CMF_7_1, CMF_8, CMF_9, CMF_10, CMF_11, CMF_12 };
-	assert(num < ARRAYSIZE(cmf) && cmf[num] != 0);
-	_gameState.musicNum = num;
-	_gameState.musicSequenceIndex = 1;
-	if (_gameVersion == kIdSpaCD) {
-		// different file format
-		return;
+	if (_gameFlags & kFlagFloppy) {
+		static const int cmf[] = { 0, 0, CMF_2_1, CMF_3, CMF_4, 0, 0, CMF_7_1, CMF_8, CMF_9, CMF_10, CMF_11, CMF_12 };
+		assert(num < ARRAYSIZE(cmf) && cmf[num] != 0);
+		_gameState.musicNum = num;
+		_gameState.musicSequenceIndex = 1;
+		startMusic(cmf[num]);
+	} else {
+		// TODO: play CD track
 	}
-	startMusic(cmf[num]);
 }
 
 void IgorEngine::updateMusic() {
 	static const int cmf2Seq[] = { CMF_2_1, CMF_2_2, CMF_2_3, CMF_2_4 };
 	static const int cmf7Seq[] = { CMF_7_1, CMF_7_2, CMF_7_3, CMF_7_4 };
-	if (_gameState.jumpToNextMusic) {
+	if (_gameState.jumpToNextMusic && 0) { // TODO: enable
 		switch (_gameState.musicNum) {
 		case 2:
 			_gameState.musicSequenceIndex = getRandomNumber(4) + 1;
@@ -367,21 +406,36 @@
 	}
 }
 
-void IgorEngine::playSound(int num, int fl) {
+void IgorEngine::playSound(int num, int type) {
 	debugC(9, kDebugEngine, "playSound() %d", num);
-	if (fl && _mixer->isSoundHandleActive(_sfxHandle)) {
+	--num;
+	int soundOffset = -1;
+	Audio::Mixer::SoundType soundType = Audio::Mixer::kPlainSoundType;
+	Audio::SoundHandle *soundHandle = 0;
+	if (type == 1) {
+		if (_mixer->isSoundHandleActive(_sfxHandle)) {
+			return;
+		}
+		assert(num >= 0 && num < _soundOffsetsCount);
+		soundOffset = _soundOffsets[num];
+		soundType = Audio::Mixer::kSFXSoundType;
+		soundHandle = &_sfxHandle;
+	} else if (type == 0 && (_gameFlags & kFlagTalkie) != 0 && num != kNoSpeechSound) {
+		if (_mixer->isSoundHandleActive(_speechHandle)) {
+			_mixer->stopHandle(_speechHandle);
+		}
+		num += 100;
+		assert(num >= 0 && num < _soundOffsetsCount);
+		soundOffset = _soundOffsets[num];
+		soundType = Audio::Mixer::kSpeechSoundType;
+		soundHandle = &_speechHandle;
+	} else {
 		return;
 	}
-	if (!fl) {
-//		num = 20; // "Speech not recorded"
-		return;
-	}
-	--num;
-	assert(num >= 0 && num < _soundOffsetsCount);
-	_sndFile.seek(_soundOffsets[num]);
+	_sndFile.seek(soundOffset);
 	Audio::AudioStream *stream = Audio::makeVOCStream(_sndFile);
 	if (stream) {
-		_mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_sfxHandle, stream);
+		_mixer->playInputStream(soundType, soundHandle, stream);
 	}
 }
 
@@ -398,6 +452,15 @@
 	memcpy(_igorPalette, PAL_IGOR_1, 48);
 }
 
+void IgorEngine::loadIgorFrames2() {
+	loadData(FRM_IgorDirBack2, _facingIgorFrames[0]);
+	loadData(FRM_IgorDirRight2, _facingIgorFrames[1]);
+	loadData(FRM_IgorDirFront2, _facingIgorFrames[2]);
+	loadData(FRM_IgorDirLeft2, _facingIgorFrames[3]);
+	loadData(FRM_IgorHead2, _igorHeadFrames);
+	memcpy(_igorPalette, PAL_IGOR_2, 48);
+}
+
 void IgorEngine::fixDialogueTextPosition(int num, int count, int *x, int *y) {
 	int textLineWidth = 0;
 	for (int i = 0; i < count; ++i) {
@@ -527,9 +590,6 @@
 
 void IgorEngine::startIgorDialogue() {
 	debugC(9, kDebugEngine, "startIgorDialogue()");
-//	if (_dialogueCursorOn) {
-//		clearCursor();
-//	}
 	--_dialogueTextsCount;
 	int talkX, talkY;
 	const DialogueText *dt = &_dialogueTextsTable[_dialogueTextsStart];
@@ -997,8 +1057,10 @@
 			}
 			for (int j = 0; j < 11; ++j) {
 				uint8 *p = dst + (j + y) * 320 + x + dx;
-				for (int i = 0; i < 9; ++i) {
-					uint8 code = _fontData[(chr * 11 + j) * 9 + i];
+				uint32 chrMask = _fontData[chr * 11 + j];
+				for (int i = 0; i < 9; ++i, chrMask >>= 2) {
+//					uint8 code = _fontData[(chr * 11 + j) * 9 + i];
+					uint8 code = chrMask & 3;
 					if (code == 1) {
 						p[i] = color1;
 					} else if (code == 2 && color2 != -1) {
@@ -1393,7 +1455,7 @@
 	}
 	if (_inputVars[kInputCursorYPos] >= 156 && _inputVars[kInputCursorYPos] <= 167) {
 		if (_inputVars[kInputClick]) {
-			int verb = _verbAreasTable[_inputVars[kInputCursorXPos]];
+			int verb = getVerbUnderCursor(_inputVars[kInputCursorXPos]);
 			if (verb != _currentAction.verb) {
 				redrawVerb(_currentAction.verb, false);
 				_currentAction.verb = verb;
@@ -1702,6 +1764,42 @@
 	}
 }
 
+void IgorEngine::enterPartLoop() {
+	if (!_gameState.dialogueTextRunning) {
+		showCursor();
+	}
+	_gameState.igorMoving = false;
+	if (_gameVersion == kIdEngDemo110) {
+		CHECK_FOR_END_OF_DEMO();
+	}
+}
+
+void IgorEngine::leavePartLoop() {
+	hideCursor();
+	SET_EXEC_ACTION_FUNC(1, 0);
+	_updateRoomBackground = 0;
+}
+
+void IgorEngine::runPartLoop() {
+	handleRoomInput();
+	if (compareGameTick(1, 16)) {
+		handleRoomIgorWalk();
+	}
+	if (compareGameTick(19, 32)) {
+		handleRoomDialogue();
+	}
+	if (compareGameTick(4, 8)) {
+		handleRoomInventoryScroll();
+	}
+	if (compareGameTick(1)) {
+		handleRoomLight();
+	}
+	if (_updateRoomBackground) {
+		(this->*_updateRoomBackground)();
+	}
+	waitForTimer();
+}
+
 int IgorEngine::lookupScale(int xOffset, int yOffset, int h) const {
 	int index = READ_LE_UINT16(_walkScaleTable + 0x734 + _walkWidthScaleTable[h - 1] * 2);
 	int offset = _walkScaleTable[0x4FC + index + xOffset];

Modified: scummvm/trunk/engines/igor/igor.h
===================================================================
--- scummvm/trunk/engines/igor/igor.h	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/igor.h	2007-11-25 23:27:51 UTC (rev 29641)
@@ -26,9 +26,10 @@
 #ifndef IGOR_ENGINE_H
 #define IGOR_ENGINE_H
 
+#include "common/array.h"
 #include "common/endian.h"
 #include "common/file.h"
-#include "common/rect.h"
+#include "common/str.h"
 #include "common/util.h"
 
 #include "sound/mixer.h"
@@ -57,6 +58,12 @@
 };
 
 enum {
+	kFlagDemo   = 1 << 0,
+	kFlagFloppy = 1 << 1,
+	kFlagTalkie = 1 << 2
+};
+
+enum {
 	kStartupPart = 900,
 	kInvalidPart = 255,
 	kSharewarePart = 950,
@@ -65,7 +72,8 @@
 	kTickDelay = 1193180 / 4096,
 	kTimerTicksCount = 8,
 	kQuickSaveSlot = 0,
-	kMaxSaveStates = 10
+	kMaxSaveStates = 10,
+	kNoSpeechSound = 999
 };
 
 enum {
@@ -122,6 +130,7 @@
 struct DialogueText {
 	int num;
 	int count;
+	int sound;
 };
 
 struct ResourceEntry {
@@ -130,6 +139,14 @@
 	uint32 size;
 };
 
+struct StringEntry {
+	int id;
+	Common::String str;
+
+	StringEntry() : id(0) {}
+	StringEntry(int i, const char *s) : id(i), str(s) {}
+};
+
 struct RoomObjectArea {
 	uint8 area;
 	uint8 object;
@@ -284,7 +301,7 @@
 	typedef void (IgorEngine::*UpdateDialogueProc)(int action);
 	typedef void (IgorEngine::*UpdateRoomBackgroundProc)();
 
-	IgorEngine(OSystem *system, int gameVersion);
+	IgorEngine(OSystem *system, int gameVersion, int gameFlags, Common::Language language);
 	virtual ~IgorEngine();
 
 	virtual int init();
@@ -304,7 +321,8 @@
 	bool compareGameTick(int add, int mod) const { return ((_gameTicks + (add & ~7)) % mod) == 0; } // { return ((_gameTicks + add) % mod) == 0; }
 	bool compareGameTick(int eq) const { return _gameTicks == (eq & ~7); } // { return _gameTicks == eq; }
 	int getPart() const { return _currentPart / 10; }
-	void readResourceTableFile();
+	void readTableFile();
+	const char *getString(int id);
 	void restart();
 	void waitForTimer(int ticks = -1);
 	void copyArea(uint8 *dst, int dstOffset, int dstPitch, const uint8 *src, int srcPitch, int w, int h, bool transparent = false);
@@ -314,9 +332,10 @@
 	void startMusic(int cmf);
 	void playMusic(int num);
 	void updateMusic();
-	void playSound(int num, int fl);
+	void playSound(int num, int type);
 	void stopSound();
 	void loadIgorFrames();
+	void loadIgorFrames2();
 	void fixDialogueTextPosition(int num, int count, int *x, int *y);
 	void startCutsceneDialogue(int x, int y, int r, int g, int b);
 	void waitForEndOfCutsceneDialogue(int x, int y, int r, int g, int b);
@@ -357,6 +376,7 @@
 	void updateRoomLight(int fl);
 	void drawVerbsPanel();
 	void redrawVerb(uint8 verb, bool highlight);
+	int getVerbUnderCursor(int x) const { return ((x % 46) < 44) ? (kVerbTalk + x / 46) : 0; }
 	void drawInventory(int start, int mode);
 	void packInventory();
 	void scrollInventory();
@@ -370,6 +390,9 @@
 	void handleRoomIgorWalk();
 	void handleRoomInventoryScroll();
 	void handleRoomLight();
+	void enterPartLoop();
+	void leavePartLoop();
+	void runPartLoop();
 	int lookupScale(int xOffset, int yOffset, int h) const;
 	void moveIgor(int pos, int frame);
 	void buildWalkPathSimple(int srcX, int srcY, int dstX, int dstY);
@@ -407,6 +430,7 @@
 	Common::File _sndFile;
 
 	Audio::SoundHandle _sfxHandle;
+	Audio::SoundHandle _speechHandle;
 
 	uint8 *_screenVGA;
 	uint8 *_facingIgorFrames[4];
@@ -427,6 +451,8 @@
 	bool _fastMode;
 	int _language;
 	int _gameVersion;
+	int _gameFlags;
+	Common::Language _gameLanguage;
 
 	WalkData _walkData[100];
 	uint8 _walkCurrentPos;
@@ -484,20 +510,21 @@
 	RoomWalkBounds _roomWalkBounds;
 	UpdateDialogueProc _updateDialogue;
 	UpdateRoomBackgroundProc _updateRoomBackground;
+	int _demoActionsCounter;
 	int _gameTicks;
 	int _resourceEntriesCount;
 	ResourceEntry *_resourceEntries;
 	int _soundOffsetsCount;
 	uint32 *_soundOffsets;
+	Common::Array<StringEntry> _stringEntries;
 	char _saveStateDescriptions[kMaxSaveStates][100];
 
 	static const uint8 _dialogueColor[];
 	static const uint8 _sentenceColorIndex[];
 	static const uint8 _fontCharIndex[];
 	static const uint8 _fontCharWidth[];
-	static const uint8 _fontData[];
+	static const uint32 _fontData[];
 	static const uint8 _talkDelays[];
-	static const uint8 _verbAreasTable[];
 	static const uint8 _inventoryOffsetTable[];
 	static const uint8 _inventoryActionsTable[];
 	static const uint8 _walkWidthScaleTable[];
@@ -512,13 +539,14 @@
 	//
 
 	// main loop
-	void ADD_DIALOGUE_TEXT(int num, int count);
+	void ADD_DIALOGUE_TEXT(int num, int count, int sound = kNoSpeechSound);
 	void SET_DIALOGUE_TEXT(int start, int count);
 	void SET_EXEC_ACTION_FUNC(int i, ExecuteActionProc p);
 	void EXEC_MAIN_ACTION(int action);
 	void EXEC_MAIN_ACTION_38();
 	void EXEC_MAIN_ACTION_43();
 	void EXEC_MAIN_ACTION_54();
+	void CHECK_FOR_END_OF_DEMO();
 	void SET_PAL_208_96_1();
 	void SET_PAL_240_48_1();
 	void UPDATE_OBJECT_STATE(int num);
@@ -627,6 +655,7 @@
 	void PART_15_ACTION_107();
 	void PART_15_ACTION_115();
 	void PART_15_ACTION_116();
+	void PART_15_UPDATE_ROOM_BACKGROUND();
 	void PART_15_UPDATE_DIALOGUE_TOBIAS(int action);
 	void PART_15_HANDLE_DIALOGUE_TOBIAS();
 	void PART_15_HELPER_1(int num);

Modified: scummvm/trunk/engines/igor/parts/part_04.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_04.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_04.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -29,16 +29,26 @@
 
 void IgorEngine::PART_04_EXEC_ACTION(int action) {
 	debugC(9, kDebugGame, "PART_04_EXEC_ACTION %d", action);
+	if (_gameFlags & kFlagDemo) {
+		if (action == 102 || action == 103 || action == 104) {
+			ADD_DIALOGUE_TEXT(102, 2);
+			SET_DIALOGUE_TEXT(1, 1);
+			startIgorDialogue();
+			return;
+		}
+	}
 	switch (action) {
 	case 101:
 		_currentPart = 120;
 		break;
 	case 102:
+		_currentPart = 0;
+		break;
 	case 103:
+		_currentPart = 350;
+		break;
 	case 104:
-		ADD_DIALOGUE_TEXT(102, 2);
-		SET_DIALOGUE_TEXT(1, 1);
-		startIgorDialogue();
+		_currentPart = 100;
 		break;
 	case 105:
 		if (_objectsState[111] == 0) {
@@ -90,8 +100,7 @@
 	_walkData[0].scaleHeight = 49;
 	_walkDataLastIndex = 1;
 	_walkDataCurrentIndex = 1;
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart == 40) {
 		handleRoomInput();
 		if (compareGameTick(19, 32)) {
@@ -109,7 +118,7 @@
 		setPaletteRange(184, 199);
 		waitForTimer();
 	}
-	memcpy(_paletteBuffer, _currentPalette, 624);
+	leavePartLoop();
 	fadeOutPalette(624);
 }
 

Modified: scummvm/trunk/engines/igor/parts/part_05.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_05.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_05.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -123,6 +123,9 @@
 	} while (i != 3);
 	addObjectToInventory(21, 56);
 	_objectsState[60] = 1;
+	if (_gameVersion == kIdEngDemo110) {
+		++_demoActionsCounter;
+	}	
 	PART_05_HELPER_4(255);
 }
 
@@ -256,25 +259,11 @@
 	if (_currentPart == 50) {
 		PART_05_HELPER_6();
 	}
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart >= 50 && _currentPart <= 52) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		PART_05_UPDATE_ROOM_BACKGROUND();
-		waitForTimer();
+		runPartLoop();
 	}
+	leavePartLoop();
 	stopSound();
 	if (_currentPart == 255) {
 		fadeOutPalette(768);
@@ -285,7 +274,6 @@
 		memcpy(_currentPalette, _paletteBuffer, 624);
 		fadeOutPalette(624);
 	}
-	_updateRoomBackground = 0;
 }
 
 } // namespace Igor

Modified: scummvm/trunk/engines/igor/parts/part_06.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_06.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_06.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -389,9 +389,8 @@
 	_roomDataOffsets = PART_06_ROOM_DATA_OFFSETS;
 	_walkDataLastIndex = 1;
 	_walkDataCurrentIndex = 1;
-	showCursor();
-	_gameState.igorMoving = false;
 	_gameState.unkF = (_objectsState[61] == 1);
+	enterPartLoop();
 	while (_currentPart >= 60 && _currentPart <= 61) {
 		setRoomWalkBounds(0, 0, _objectsState[61] == 0 ? 234 : 142, 143);
 		handleRoomInput();
@@ -413,7 +412,7 @@
 		}
 		waitForTimer();
 	}
-	_updateRoomBackground = 0;
+	leavePartLoop();
 }
 
 } // namespace Igor

Modified: scummvm/trunk/engines/igor/parts/part_12.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_12.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_12.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -522,6 +522,7 @@
 	_roomDataOffsets = PART_12_ROOM_DATA_OFFSETS;
 	setRoomWalkBounds(89, 0, 275, 143);
 	SET_EXEC_ACTION_FUNC(1, &IgorEngine::PART_12_EXEC_ACTION);
+	_updateRoomBackground = &IgorEngine::PART_12_UPDATE_ROOM_BACKGROUND;
 	PART_12_HELPER_1(255);
 	memcpy(_screenVGA, _screenLayer1, 46080);
 	if (_objectsState[44] == 0) {
@@ -555,27 +556,12 @@
 		}
 	}
 	PART_12_HELPER_2();
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart >= 120 && _currentPart <= 122) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		PART_12_UPDATE_ROOM_BACKGROUND();
-		waitForTimer();
+		runPartLoop();
 	}
 PART_12_EXIT:
-	hideCursor();
+	leavePartLoop();
 	fadeOutPalette(624);
 }
 

Modified: scummvm/trunk/engines/igor/parts/part_13.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_13.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_13.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -223,25 +223,11 @@
 	} else {
 		PART_13_HELPER_2();
 	}
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart >= 130 && _currentPart <= 131) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		waitForTimer();
+		runPartLoop();
 	}
-	hideCursor();
+	leavePartLoop();
 	fadeOutPalette(624);
 }
 

Modified: scummvm/trunk/engines/igor/parts/part_14.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_14.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_14.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -578,25 +578,11 @@
 	if (_currentPart == 142) {
 		PART_14_HELPER_4();
 	}
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart >= 140 && _currentPart <= 142) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		waitForTimer();
+		runPartLoop();
 	}
-	hideCursor();
+	leavePartLoop();
 	fadeOutPalette(624);
 }
 

Modified: scummvm/trunk/engines/igor/parts/part_15.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_15.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_15.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -317,6 +317,16 @@
 	_currentPart = 780;
 }
 
+void IgorEngine::PART_15_UPDATE_ROOM_BACKGROUND() {
+	PART_15_HELPER_5();
+	if (_gameTicks == 38 || _gameTicks == 60) {
+		if (_objectsState[48] != 1 && getRandomNumber(200) == 0 && _gameState.counter[3] == 0) {
+			_gameState.counter[3] = 1;
+		}
+	}
+	PART_15_HELPER_3();
+}
+
 void IgorEngine::PART_15_UPDATE_DIALOGUE_TOBIAS(int action) {
 	switch (action) {
 	case kUpdateDialogueAnimEndOfSentence:
@@ -477,7 +487,7 @@
 	_roomDataOffsets = PART_15_ROOM_DATA_OFFSETS;
 	setRoomWalkBounds(28, 0, 96, 143);
 	SET_EXEC_ACTION_FUNC(1, &IgorEngine::PART_15_EXEC_ACTION);
-	_updateRoomBackground = 0;
+	_updateRoomBackground = &IgorEngine::PART_15_UPDATE_ROOM_BACKGROUND;
 	PART_15_HELPER_1(255);
 	memcpy(_screenVGA, _screenLayer1, 46080);
 	_currentAction.verb = kVerbWalk;
@@ -487,31 +497,11 @@
 	_gameState.counter[3] = 0;
 	_gameState.counter[4] = 0;
 	PART_15_HELPER_2();
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart == 150) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		PART_15_HELPER_5();
-		if (_gameTicks == 38 || _gameTicks == 60) {
-			if (_objectsState[48] != 1 && getRandomNumber(200) == 0 && _gameState.counter[3] == 0) {
-				_gameState.counter[3] = 1;
-			}
-		}
-		PART_15_HELPER_3();
-		waitForTimer();
+		runPartLoop();
 	}
+	leavePartLoop();
 	if (_objectsState[48] == 1) {
 		_objectsState[48] = 2;
 	}

Modified: scummvm/trunk/engines/igor/parts/part_16.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_16.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_16.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -71,6 +71,9 @@
 	}
 	addObjectToInventory(20, 55);
 	_objectsState[52] = 1;
+	if (_gameVersion == kIdEngDemo110) {
+		++_demoActionsCounter;
+	}
 	ADD_DIALOGUE_TEXT(204, 3);
 	SET_DIALOGUE_TEXT(1, 1);
 	startIgorDialogue();
@@ -271,25 +274,11 @@
 	if (_objectsState[65] == 2 && _inventoryInfo[71] != 0 && _objectsState[76] == 1) {
 		PART_16_HELPER_3();
 	}
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart == 160) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		waitForTimer();
+		runPartLoop();
 	}
-	hideCursor();
+	leavePartLoop();
 	fadeOutPalette(624);
 }
 

Modified: scummvm/trunk/engines/igor/parts/part_17.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_17.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_17.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -205,6 +205,9 @@
 	_objectsState[3] = 1;
 	PART_17_HELPER_1(255);
 	UPDATE_OBJECT_STATE(4);
+	if (_gameVersion == kIdEngDemo110) {
+		++_demoActionsCounter;
+	}
 	--_walkDataLastIndex;
 	buildWalkPath(104, 87, 143, 123);
 	_walkDataCurrentIndex = 1;
@@ -497,34 +500,18 @@
 	} else if (_currentPart == 171) {
 		PART_17_HELPER_6();
 	}
-	showCursor();
-	_gameState.igorMoving = false;
-	while (_currentPart == 170 || _currentPart == 171) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		PART_17_UPDATE_ROOM_BACKGROUND();
-		waitForTimer();
+	enterPartLoop();
+	while (_currentPart >= 170 && _currentPart <= 171) {
+		runPartLoop();
 	}
+	leavePartLoop();	
 	if (_objectsState[55] == 1) {
 		_objectsState[56] = 1;
 	}
 	if (_objectsState[54] == 0) {
 		_objectsState[54] = 1;
 	}
-	hideCursor();
 	fadeOutPalette(624);
-	_updateRoomBackground = 0;
 }
 
 } // namespace Igor

Modified: scummvm/trunk/engines/igor/parts/part_18.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_18.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_18.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -182,24 +182,11 @@
 	_currentAction.verb = kVerbWalk;
 	fadeInPalette(768);
 	PART_18_HELPER_2();
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart == 180) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		waitForTimer();
+		runPartLoop();
 	}
+	leavePartLoop();
 	fadeOutPalette(624);
 }
 

Modified: scummvm/trunk/engines/igor/parts/part_19.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_19.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_19.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -311,24 +311,11 @@
 	if (_objectsState[59] == 0) {
 		PART_19_HELPER_4();
 	} else {
-		showCursor();
-		_gameState.igorMoving = false;
+		enterPartLoop();
 		while (_currentPart == 190) {
-			handleRoomInput();
-			if (compareGameTick(1, 16)) {
-				handleRoomIgorWalk();
-			}
-			if (compareGameTick(19, 32)) {
-				handleRoomDialogue();
-			}
-			if (compareGameTick(4, 8)) {
-				handleRoomInventoryScroll();
-			}
-			if (compareGameTick(1)) {
-				handleRoomLight();
-			}
-			waitForTimer();
+			runPartLoop();
 		}
+		leavePartLoop();
 	}
 	fadeOutPalette(624);
 }

Modified: scummvm/trunk/engines/igor/parts/part_21.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_21.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_21.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -203,6 +203,9 @@
 	removeObjectFromInventory(56);
 	_objectsState[65] = 1;
 	PART_21_HELPER_1(255);
+	if (_gameVersion == kIdEngDemo110) {
+		++_demoActionsCounter;
+	}	
 	ADD_DIALOGUE_TEXT(210, 2);
 	SET_DIALOGUE_TEXT(1, 1);
 	startIgorDialogue();
@@ -465,28 +468,13 @@
 		PART_21_HELPER_3();
 	} else if (_currentPart == 212) {
 		PART_21_HELPER_4();
+	}	
+	enterPartLoop();
+	while (_currentPart >= 210 && _currentPart <= 212) {
+		runPartLoop();
 	}
-	showCursor();
-	_gameState.igorMoving = false;
-	while (_currentPart == 210 || _currentPart == 211 || _currentPart == 212) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		PART_21_UPDATE_ROOM_BACKGROUND();
-		waitForTimer();
-	}
+	leavePartLoop();
 	fadeOutPalette(624);
-	_updateRoomBackground = 0;
 }
 
 } // namespace Igor

Modified: scummvm/trunk/engines/igor/parts/part_22.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_22.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_22.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -162,24 +162,11 @@
 	_currentAction.verb = kVerbWalk;
 	fadeInPalette(768);
 	PART_22_HELPER_2();
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart == 220) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		waitForTimer();
+		runPartLoop();
 	}
+	leavePartLoop();
 	fadeOutPalette(624);
 }
 

Modified: scummvm/trunk/engines/igor/parts/part_23.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_23.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_23.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -278,27 +278,12 @@
 	} else if (_currentPart == 232) {
 		PART_23_HELPER_4();
 	}
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart >= 230 && _currentPart <= 232) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		PART_23_UPDATE_ROOM_BACKGROUND();
-		waitForTimer();
+		runPartLoop();
 	}
+	leavePartLoop();
 	fadeOutPalette(624);
-	_updateRoomBackground = 0;
 }
 
 } // namespace Igor

Modified: scummvm/trunk/engines/igor/parts/part_24.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_24.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_24.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -314,27 +314,12 @@
 	} else if (_currentPart == 242) {
 		PART_24_HELPER_9();
 	}
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart >= 240 && _currentPart <= 242) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		PART_24_UPDATE_ROOM_BACKGROUND();
-		waitForTimer();
+		runPartLoop();
 	}
+	leavePartLoop();
 	fadeOutPalette(624);
-	_updateRoomBackground = 0;
 }
 
 } // namespace Igor

Modified: scummvm/trunk/engines/igor/parts/part_25.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_25.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_25.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -232,24 +232,11 @@
 	} else if (_currentPart == 252) {
 		PART_25_HELPER_4();
 	}
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart >= 250 && _currentPart <= 252) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		waitForTimer();
+		runPartLoop();
 	}
+	leavePartLoop();
 	fadeOutPalette(624);
 }
 

Modified: scummvm/trunk/engines/igor/parts/part_26.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_26.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_26.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -271,27 +271,12 @@
 	} else {
 		PART_26_HELPER_5();
 	}
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart >= 260 && _currentPart <= 261) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		PART_26_UPDATE_ROOM_BACKGROUND();
-		waitForTimer();
+		runPartLoop();
 	}
+	leavePartLoop();
 	fadeOutPalette(624);
-	_updateRoomBackground = 0;
 }
 
 } // namespace Igor

Modified: scummvm/trunk/engines/igor/parts/part_27.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_27.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_27.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -173,6 +173,9 @@
 	}
 	addObjectToInventory(23, 58);
 	PART_27_HELPER_1(1);
+	if (_gameVersion == kIdEngDemo110) {
+		++_demoActionsCounter;
+	}
 }
 
 void IgorEngine::PART_27_ACTION_110() {
@@ -193,6 +196,9 @@
 	removeObjectFromInventory(55);
 	PART_27_HELPER_1(255);
 	_objectsState[107] = 1;
+	if (_gameVersion == kIdEngDemo110) {
+		++_demoActionsCounter;
+	}
 }
 
 void IgorEngine::PART_27_HELPER_1(int num) {
@@ -272,24 +278,11 @@
 	} else {
 		PART_27_HELPER_5();
 	}
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart == 270 || _currentPart == 271) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		waitForTimer();
+		runPartLoop();
 	}
+	leavePartLoop();
 	fadeOutPalette(624);
 }
 

Modified: scummvm/trunk/engines/igor/parts/part_28.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_28.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_28.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -178,6 +178,9 @@
 	ADD_DIALOGUE_TEXT(230, 1);
 	SET_DIALOGUE_TEXT(1, 1);
 	startIgorDialogue();
+	if (_gameVersion == kIdEngDemo110) {
+		++_demoActionsCounter;
+	}
 }
 
 void IgorEngine::PART_28_UPDATE_DIALOGUE_CAROLINE(int action) {
@@ -340,30 +343,15 @@
 	} else if (_currentPart == 281) {
 		PART_28_HELPER_6();
 	}
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart == 280 || _currentPart == 281) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		PART_28_UPDATE_ROOM_BACKGROUND();
-		waitForTimer();
+		runPartLoop();
 	}
 	if (_objectsState[87] == 1) {
 		_objectsState[87] = 2;
 	}
+	leavePartLoop();
 	fadeOutPalette(624);
-	_updateRoomBackground = 0;
 }
 
 } // namespace Igor

Modified: scummvm/trunk/engines/igor/parts/part_30.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_30.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_30.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -299,26 +299,11 @@
 			PART_30_HELPER_5();
 		}
 	}
-	if (!_gameState.dialogueTextRunning) {
-		showCursor();
-	}
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart >= 300 && _currentPart <= 303) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		waitForTimer();
+		runPartLoop();
 	}
+	leavePartLoop();
 	fadeOutPalette(624);
 }
 

Modified: scummvm/trunk/engines/igor/parts/part_31.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_31.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_31.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -427,26 +427,11 @@
 	} else if (_currentPart == 313) {
 		PART_31_HELPER_6();
 	}
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart >= 310 && _currentPart <= 313) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		PART_31_UPDATE_ROOM_BACKGROUND();
-		waitForTimer();
+		runPartLoop();
 	}
-	_updateRoomBackground = 0;
+	leavePartLoop();
 	fadeOutPalette(624);
 }
 

Modified: scummvm/trunk/engines/igor/parts/part_33.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_33.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_33.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -265,6 +265,9 @@
 	}
 	removeObjectFromInventory(67);
 	PART_33_HELPER_1(255);
+	if (_gameVersion == kIdEngDemo110) {
+		++_demoActionsCounter;
+	}
 	ADD_DIALOGUE_TEXT(217, 2);
 	SET_DIALOGUE_TEXT(1, 1);
 	_updateDialogue = &IgorEngine::PART_33_UPDATE_DIALOGUE_HARRISON_2;
@@ -481,25 +484,11 @@
 	_currentAction.verb = kVerbWalk;
 	fadeInPalette(768);
 	PART_33_HELPER_7();
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart == 330) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		PART_33_UPDATE_ROOM_BACKGROUND();
-		waitForTimer();
+		runPartLoop();
 	}
+	leavePartLoop();
 	if (_objectsState[75] == 1) {
 		_objectsState[75] = 2;
 	}

Modified: scummvm/trunk/engines/igor/parts/part_36.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_36.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_36.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -105,6 +105,9 @@
 	addObjectToInventory(30, 65);
 	_objectsState[88] = 1;
 	PART_36_HELPER_1(255);
+	if (_gameVersion == kIdEngDemo110) {
+		++_demoActionsCounter;
+	}
 }
 
 void IgorEngine::PART_36_HELPER_1(int num) {
@@ -153,24 +156,11 @@
 	_currentAction.verb = kVerbWalk;
 	fadeInPalette(768);
 	PART_36_HELPER_2();
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart == 360) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		waitForTimer();
+		runPartLoop();
 	}
+	leavePartLoop();
 	fadeOutPalette(624);
 }
 

Modified: scummvm/trunk/engines/igor/parts/part_37.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_37.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_37.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -82,6 +82,9 @@
 	addObjectToInventory(32, 67);
 	_objectsState[89] = 1;
 	PART_37_HELPER_1(255);
+	if (_gameVersion == kIdEngDemo110) {
+		++_demoActionsCounter;
+	}
 }
 
 void IgorEngine::PART_37_HELPER_1(int num) {
@@ -115,24 +118,11 @@
 	_currentAction.verb = kVerbWalk;
 	fadeInPalette(768);
 	PART_37_HELPER_2();
-	showCursor();
-	_gameState.igorMoving = false;
+	enterPartLoop();
 	while (_currentPart == 370) {
-		handleRoomInput();
-		if (compareGameTick(1, 16)) {
-			handleRoomIgorWalk();
-		}
-		if (compareGameTick(19, 32)) {
-			handleRoomDialogue();
-		}
-		if (compareGameTick(4, 8)) {
-			handleRoomInventoryScroll();
-		}
-		if (compareGameTick(1)) {
-			handleRoomLight();
-		}
-		waitForTimer();
+		runPartLoop();
 	}
+	leavePartLoop();
 	fadeOutPalette(624);
 }
 

Modified: scummvm/trunk/engines/igor/parts/part_75.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_75.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_75.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -65,9 +65,9 @@
 	memset(_currentPalette, 0, 768);
 	fadeInPalette(768);
 	_gameState.igorMoving = false;
-	ADD_DIALOGUE_TEXT(201, 1);
-	ADD_DIALOGUE_TEXT(202, 2);
-	ADD_DIALOGUE_TEXT(204, 1);
+	ADD_DIALOGUE_TEXT(201, 1, 1156);
+	ADD_DIALOGUE_TEXT(202, 2, 1157);
+	ADD_DIALOGUE_TEXT(204, 1, 1158);
 	SET_DIALOGUE_TEXT(1, 3);
 	startCutsceneDialogue(187, 82, 63, 63, 0);
 	waitForEndOfCutsceneDialogue(187, 82, 63, 63, 0);
@@ -75,8 +75,8 @@
 		PART_75_HELPER_1(PART_75_ANIM_DATA_1[i]);
 		waitForTimer(30);
 	}
-	ADD_DIALOGUE_TEXT(205, 1);
-	ADD_DIALOGUE_TEXT(206, 1);
+	ADD_DIALOGUE_TEXT(205, 1, 1159);
+	ADD_DIALOGUE_TEXT(206, 1, 1160);
 	SET_DIALOGUE_TEXT(1, 2);
 	startCutsceneDialogue(187, 82, 63, 63, 0);
 	waitForEndOfCutsceneDialogue(187, 82, 63, 63, 0);

Modified: scummvm/trunk/engines/igor/parts/part_85.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_85.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_85.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -124,30 +124,30 @@
 	if (_inputVars[kInputEscape]) goto PART_85_EXIT;
 	PART_85_HELPER_1(0, 0x7481, 2, 7, 32);
 	if (_inputVars[kInputEscape]) goto PART_85_EXIT;
-	ADD_DIALOGUE_TEXT(201, 3);
-	ADD_DIALOGUE_TEXT(204, 1);
+	ADD_DIALOGUE_TEXT(201, 3, 545);
+	ADD_DIALOGUE_TEXT(204, 1, 546);
 	SET_DIALOGUE_TEXT(1, 2);
 	startCutsceneDialogue(89, 56, 63, 63, 0);
 	VAR_CURRENT_TALKING_ACTOR = 0;
 	waitForEndOfCutsceneDialogue(89, 56, 63, 63, 0);
 	if (_inputVars[kInputEscape]) goto PART_85_EXIT;
-	ADD_DIALOGUE_TEXT(205, 3);
+	ADD_DIALOGUE_TEXT(205, 3, 547);
 	SET_DIALOGUE_TEXT(1, 1);
 	startCutsceneDialogue(113, 59, 63, 0, 38);
 	VAR_CURRENT_TALKING_ACTOR = 1;
 	waitForEndOfCutsceneDialogue(113, 59, 63, 0, 38);
 	if (_inputVars[kInputEscape]) goto PART_85_EXIT;
-	ADD_DIALOGUE_TEXT(208, 1);
+	ADD_DIALOGUE_TEXT(208, 1, 548);
 	SET_DIALOGUE_TEXT(1, 1);
 	startCutsceneDialogue(89, 56, 63, 63, 0);
 	VAR_CURRENT_TALKING_ACTOR = 0;
 	waitForEndOfCutsceneDialogue(89, 56, 63, 63, 0);
 	if (_inputVars[kInputEscape]) goto PART_85_EXIT;
-	ADD_DIALOGUE_TEXT(209, 2);
-	ADD_DIALOGUE_TEXT(211, 1);
-	ADD_DIALOGUE_TEXT(212, 1);
-	ADD_DIALOGUE_TEXT(213, 1);
-	ADD_DIALOGUE_TEXT(214, 1);
+	ADD_DIALOGUE_TEXT(209, 2, 549);
+	ADD_DIALOGUE_TEXT(211, 1, 550);
+	ADD_DIALOGUE_TEXT(212, 1, 551);
+	ADD_DIALOGUE_TEXT(213, 1, 552);
+	ADD_DIALOGUE_TEXT(214, 1, 553);
 	SET_DIALOGUE_TEXT(1, 5);
 	startCutsceneDialogue(113, 59, 63, 0, 38);
 	VAR_CURRENT_TALKING_ACTOR = 1;
@@ -155,16 +155,16 @@
 	if (_inputVars[kInputEscape]) goto PART_85_EXIT;
 	PART_85_HELPER_1(0, 0x7481, 2, 7, 32);
 	if (_inputVars[kInputEscape]) goto PART_85_EXIT;
-	ADD_DIALOGUE_TEXT(215, 1);
-	ADD_DIALOGUE_TEXT(216, 2);
-	ADD_DIALOGUE_TEXT(218, 1);
+	ADD_DIALOGUE_TEXT(215, 1, 554);
+	ADD_DIALOGUE_TEXT(216, 2, 555);
+	ADD_DIALOGUE_TEXT(218, 1, 556);
 	SET_DIALOGUE_TEXT(1, 3);
 	startCutsceneDialogue(89, 56, 63, 63, 0);
 	VAR_CURRENT_TALKING_ACTOR = 0;
 	waitForEndOfCutsceneDialogue(89, 56, 63, 63, 0);
 	if (_inputVars[kInputEscape]) goto PART_85_EXIT;
-	ADD_DIALOGUE_TEXT(219, 2);
-	ADD_DIALOGUE_TEXT(221, 2);
+	ADD_DIALOGUE_TEXT(219, 2, 557);
+	ADD_DIALOGUE_TEXT(221, 2, 558);
 	SET_DIALOGUE_TEXT(1, 2);
 	startCutsceneDialogue(113, 59, 63, 0, 38);
 	VAR_CURRENT_TALKING_ACTOR = 1;
@@ -191,7 +191,7 @@
 	_walkData[0].scaleWidth = 50;
 	_walkDataLastIndex = 1;
 	_walkCurrentPos = 4;
-	ADD_DIALOGUE_TEXT(223, 2);
+	ADD_DIALOGUE_TEXT(223, 2, 559);
 	SET_DIALOGUE_TEXT(1, 1);
 	startIgorDialogue();
 	waitForEndOfIgorDialogue();
@@ -201,8 +201,8 @@
 	_walkData[0].x = 250;
 	_walkData[0].y = 119;
 	_walkCurrentPos = 3;
-	ADD_DIALOGUE_TEXT(225, 2);
-	ADD_DIALOGUE_TEXT(227, 3);
+	ADD_DIALOGUE_TEXT(225, 2, 560);
+	ADD_DIALOGUE_TEXT(227, 3, 561);
 	SET_DIALOGUE_TEXT(1, 2);
 	startIgorDialogue();
 	waitForEndOfIgorDialogue();

Modified: scummvm/trunk/engines/igor/parts/part_90.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_90.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_90.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -27,10 +27,6 @@
 
 namespace Igor {
 
-static const char *STR_COPYRIGHT_1995 = "(C) 1995 Optik Software. All rights reserved.";
-
-static const char *STR_COPYRIGHT_1994 = "(C) 1994 PENDULO STUDIOS. All rights reserved.";
-
 void IgorEngine::PART_90() {
 	memset(_currentPalette, 0, 768);
 	setPaletteRange(0, 255);
@@ -54,7 +50,7 @@
 	case 904:
 		loadData(PAL_TitleScreen, _paletteBuffer);
 		loadData(IMG_TitleScreen, _screenVGA);
-		drawString(_screenVGA, (_gameVersion == kIdEngDemo110) ? STR_COPYRIGHT_1994 : STR_COPYRIGHT_1995, 2, 187, 0xF5, 0, 0);
+		drawString(_screenVGA, (_gameVersion == kIdEngDemo110) ? getString(STR_COPYRIGHT_1994) : getString(STR_COPYRIGHT_1995), 2, 187, 0xF5, 0, 0);
 		break;
 	}
 	fadeInPalette(768);

Modified: scummvm/trunk/engines/igor/parts/part_95.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_95.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_95.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -30,73 +30,74 @@
 struct SharewareScreenString {
 	uint8 color;
 	int y;
-	const char *str;
+	int strId;
 };
 
 static const SharewareScreenString STR_SHAREWARE[] = {
 	// 950
-	{ 255,  30, "\"Igor. Objective Uikokahonia\"" },
-	{ 228,  70, "This is SHAREWARE!" },
-	{ 228,  81, "You can copy this version!" },
-	{ 228,  96, "Pass it around, give it to your friends, family," },
-	{ 228, 107, "colleagues and upload it to your favorite BBS." },
-	{ 228, 122, "Let everyone enjoy IGOR!" },
-	{ 228, 161, "To place an order: 1-800-OPTIK-99" },
+	{ 255,  30, STR_IGOR_OBJECTIVE_UIKOKAHONIA },
+	{ 228,  70, STR_SHAREWARE_TEXT1 },
+	{ 228,  81, STR_SHAREWARE_TEXT2 },
+	{ 228,  96, STR_SHAREWARE_TEXT3 },
+	{ 228, 107, STR_SHAREWARE_TEXT4 },
+	{ 228, 122, STR_SHAREWARE_TEXT5 },
+	{ 228, 161, STR_SHAREWARE_PLACE_ORDER },
 	// 951
-	{ 255,  30, "\"Igor. Objective Uikokahonia\"" },
-	{ 228,  42, "Shareware version" },
-	{ 228,  85, "Order the full IGOR game for only $34.99 US." },
-	{ 228,  96, "$5.00 for shipping and handling (US & CANADA)." },
-	{ 228, 107, "Please add $3.00 for international shipping." },
-	{ 228, 161, "To place an order: 1-800-OPTIK-99" },
+	{ 255,  30, STR_IGOR_OBJECTIVE_UIKOKAHONIA },
+	{ 228,  42, STR_SHAREWARE_VERSION },
+	{ 228,  85, STR_SHAREWARE_ORDER_1 },
+	{ 228,  96, STR_SHAREWARE_ORDER_2 },
+	{ 228, 107, STR_SHAREWARE_ORDER_3 },
+	{ 228, 161, STR_SHAREWARE_ORDER_4 },
 	// 952
-	{ 255,  30, "\"Igor. Objective Uikokahonia\"" },
-	{ 228,  42, "Shareware version" },
-	{ 228,  70, "90 day limited warranty." },
-	{ 228,  85, "Please allow 2-4 days for delivery (US only)." },
-	{ 228,  96, "Elsewhere, up to a week or two..." },
-	{ 228, 111, "Overnight/second day shipping available an" },
-	{ 228, 122, "aditional change. Please call for exact pricing." },
-	{ 228, 161, "To place an order: 1-800-OPTIK-99" },
+	{ 255,  30, STR_IGOR_OBJECTIVE_UIKOKAHONIA },
+	{ 228,  42, STR_SHAREWARE_VERSION },
+	{ 228,  70, STR_SHAREWARE_SHIPPING_1 },
+	{ 228,  85, STR_SHAREWARE_SHIPPING_2 },
+	{ 228,  96, STR_SHAREWARE_SHIPPING_3 },
+	{ 228, 111, STR_SHAREWARE_SHIPPING_4 },
+	{ 228, 122, STR_SHAREWARE_SHIPPING_5 },
+	{ 228, 161, STR_SHAREWARE_PLACE_ORDER },
 	// 953
-	{ 255,  30, "\"Igor. Objective Uikokahonia\"" },
-	{ 228,  42, "Shareware version" },
-	{ 228,  70, "Three easy ways to order:" },
-	{ 228,  85, "- Call 1-800-678-4599 (orders only) and use" },
-	{ 228,  96, "Your Visa, Mastercard or Discover card." },
-	{ 228, 110, "- Fax your order (please include credit card" },
-	{ 228, 121, "information) to (412) 381-1031" },
-	{ 228, 161, "To place an order: 1-800-OPTIK-99" },
+	{ 255,  30, STR_IGOR_OBJECTIVE_UIKOKAHONIA },
+	{ 228,  42, STR_SHAREWARE_VERSION },
+	{ 228,  70, STR_SHAREWARE_SHIPPING_6 },
+	{ 228,  85, STR_SHAREWARE_SHIPPING_7 },
+	{ 228,  96, STR_SHAREWARE_SHIPPING_8 },
+	{ 228, 110, STR_SHAREWARE_SHIPPING_9 },
+	{ 228, 121, STR_SHAREWARE_SHIPPING_10 },
+	{ 228, 161, STR_SHAREWARE_PLACE_ORDER },
 	// 954
-	{ 255,  30, "\"Igor. Objective Uikokahonia\"" },
-	{ 228,  42, "Shareware version" },
-	{ 228,  74, "- Mail a check or money order to:" },
-	{ 228,  85, "Optik Software Inc." },
-	{ 228,  96, "1000 Napor Boulevard" },
-	{ 228, 107, "Pittsburgh, PA. 15205" },
-	{ 228, 118, "USA" },
-	{ 228, 161, "To place an order: 1-800-OPTIK-99" },
+	{ 255,  30, STR_IGOR_OBJECTIVE_UIKOKAHONIA },
+	{ 228,  42, STR_SHAREWARE_VERSION },
+	{ 228,  74, STR_SHAREWARE_OPTIK_ADDRESS_1 },
+	{ 228,  85, STR_SHAREWARE_OPTIK_ADDRESS_2 },
+	{ 228,  96, STR_SHAREWARE_OPTIK_ADDRESS_3 },
+	{ 228, 107, STR_SHAREWARE_OPTIK_ADDRESS_4 },
+	{ 228, 118, STR_SHAREWARE_OPTIK_ADDRESS_5 },
+	{ 228, 161, STR_SHAREWARE_PLACE_ORDER },
 	// 955
-	{ 255,  30, "\"Igor. Objective Uikokahonia\"" },
-	{ 240,  42, "Shareware version" },
-	{ 240,  79, "Optik Software Inc." },
-	{ 240,  90, "Orders only: 1-800-OPTIK-99 (67845-99)" },
-	{ 240, 101, "Fax: (412) 381-1031" },
-	{ 240, 112, "E-mail: optiksoft\xFA""aol.com" },
-	{ 240, 161, "To place an order: 1-800-OPTIK-99" },
+	{ 255,  30, STR_IGOR_OBJECTIVE_UIKOKAHONIA },
+	{ 240,  42, STR_SHAREWARE_VERSION },
+	{ 240,  79, STR_SHAREWARE_OPTIK_ADDRESS_6 },
+	{ 240,  90, STR_SHAREWARE_OPTIK_ADDRESS_7 },
+	{ 240, 101, STR_SHAREWARE_OPTIK_ADDRESS_8 },
+	{ 240, 112, STR_SHAREWARE_OPTIK_ADDRESS_9 },
+	{ 240, 161, STR_SHAREWARE_PLACE_ORDER },
 	// 956
-	{ 255,  30, "\"Igor. Objective Uikokahonia\"" },
-	{ 228,  42, "Shareware version" },
-	{ 228,  64, "A game by" },
-	{ 228,  80, "PENDULO STUDIOS" },
-	{ 228,  91, "P.O. Box 21091" },
-	{ 228, 102, "28009 Madrid" },
-	{ 228, 113, "Spain" },
-	{ 228, 128, "E-mail: 100641.1737\xFA""compuserve.com" },
-	{ 228, 161, "To place an order: 1-800-OPTIK-99" }
+	{ 255,  30, STR_IGOR_OBJECTIVE_UIKOKAHONIA },
+	{ 228,  42, STR_SHAREWARE_VERSION },
+	{ 228,  64, STR_SHAREWARE_PENDULO_ADDRESS_1 },
+	{ 228,  80, STR_SHAREWARE_PENDULO_ADDRESS_2 },
+	{ 228,  91, STR_SHAREWARE_PENDULO_ADDRESS_3 },
+	{ 228, 102, STR_SHAREWARE_PENDULO_ADDRESS_4 },
+	{ 228, 113, STR_SHAREWARE_PENDULO_ADDRESS_5 },
+	{ 228, 128, STR_SHAREWARE_PENDULO_ADDRESS_6 },
+	{ 228, 161, STR_SHAREWARE_PLACE_ORDER }
 };
 
 void IgorEngine::PART_95() {
+	hideCursor();
 	memset(_currentPalette, 0, 768);
 	setPaletteRange(0, 255);
 	memset(_screenVGA, 0, 64000);
@@ -159,9 +160,12 @@
 		}
 		break;
 	}
-	for (int i = startStr; i <= endStr; ++i) {
-		const SharewareScreenString *s = &STR_SHAREWARE[i];
-		drawString(_screenVGA, s->str, (320 - getStringWidth(s->str)) / 2, s->y, s->color, 0, 0);
+	if (startStr != -1) {
+		for (int i = startStr; i <= endStr; ++i) {
+			const SharewareScreenString *s = &STR_SHAREWARE[i];
+			const char *str = getString(s->strId);
+			drawString(_screenVGA, str, (320 - getStringWidth(str)) / 2, s->y, s->color, 0, 0);
+		}
 	}
 	fadeInPalette(768);
 	for (int i = 0; !_inputVars[kInputEscape] && i < 3000; ++i) {

Modified: scummvm/trunk/engines/igor/parts/part_main.cpp
===================================================================
--- scummvm/trunk/engines/igor/parts/part_main.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/parts/part_main.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -29,11 +29,12 @@
 
 namespace Igor {
 
-void IgorEngine::ADD_DIALOGUE_TEXT(int num, int count) {
+void IgorEngine::ADD_DIALOGUE_TEXT(int num, int count, int sound) {
 	assert(_dialogueTextsCount < MAX_DIALOGUE_TEXTS);
 	DialogueText *dt = &_dialogueTextsTable[_dialogueTextsCount];
 	dt->num = num;
 	dt->count = count;
+	dt->sound = sound;
 	++_dialogueTextsCount;
 }
 
@@ -461,7 +462,6 @@
 	loadData(IMG_NewsPaper, _screenVGA);
 	loadData(PAL_NewsPaper, _paletteBuffer);
 	fadeInPalette(624);
-//	mov _dialogueColor+3, 0
 	WalkData *wd = &_walkData[_walkDataLastIndex - 1];
 	int _walkDataCurrentPosX2 = wd->x;
 	int _walkDataCurrentPosY2 = wd->y;
@@ -494,7 +494,6 @@
 	}
 	fadeInPalette(624);
 	_objectsState[2] = 1;
-//	mov _dialogueColor+3, 63
 }
 
 void IgorEngine::EXEC_MAIN_ACTION_43() {
@@ -508,7 +507,6 @@
 	loadData(IMG_PhotoHarrisonMargaret, _screenVGA);
 	loadData(PAL_PhotoHarrisonMargaret, _paletteBuffer);
 	fadeInPalette(624);
-//	mov _dialogueColor+3, 0
 	WalkData *wd = &_walkData[_walkDataLastIndex - 1];
 	int _walkDataCurrentPosX2 = wd->x;
 	int _walkDataCurrentPosY2 = wd->y;
@@ -531,7 +529,6 @@
 		free(tmp);
 	}
 	fadeInPalette(624);
-//	mov _dialogueColor+3, 63
 }
 
 void IgorEngine::EXEC_MAIN_ACTION_54() {
@@ -573,6 +570,15 @@
 	fadeInPalette(624);
 }
 
+void IgorEngine::CHECK_FOR_END_OF_DEMO() {
+	if (_demoActionsCounter >= 10) {
+		ADD_DIALOGUE_TEXT(104, 2);
+		ADD_DIALOGUE_TEXT(106, 2);
+		SET_DIALOGUE_TEXT(1, 2);
+		startIgorDialogue();
+	}
+}
+
 void IgorEngine::SET_PAL_208_96_1() {
 	memcpy(_paletteBuffer + 208 * 3, PAL_96_1, 96);
 }
@@ -966,7 +972,7 @@
 			_gameState.nextMusicCounter = 0;
 		}
 	} while (_currentPart != kInvalidPart && !_eventQuitGame);
-	if (_gameVersion == kIdEngDemo100 || _gameVersion == kIdEngDemo110) {
+	if (_gameFlags & kFlagDemo) {
 		for (_currentPart = kSharewarePart; !_eventQuitGame && _currentPart <= kSharewarePart + 6; ++_currentPart) {
 			PART_95();
 		}

Modified: scummvm/trunk/engines/igor/resource_ids.h
===================================================================
--- scummvm/trunk/engines/igor/resource_ids.h	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/resource_ids.h	2007-11-25 23:27:51 UTC (rev 29641)
@@ -331,3 +331,57 @@
 #define PAL_PhotoHarrisonMargaret 331
 #define IMG_InventoryPanel 332
 #define IMG_Objects 333
+#define DAT_Physicsclassroom 334
+#define FRM_IgorDirBack2 335
+#define FRM_IgorDirRight2 336
+#define FRM_IgorDirFront2 337
+#define FRM_IgorDirLeft2 338
+#define FRM_IgorHead2 339
+#define STR_COPYRIGHT_1995 340
+#define STR_COPYRIGHT_1994 341
+#define STR_BOTTLE_OF_WHISKY 342
+#define STR_EMPTY_BOTTLE 343
+#define STR_BOTTLE_OF_WATER 344
+#define STR_LIZARD 345
+#define STR_FAT_LIZARD 346
+#define STR_CAROLINE_FOLDER 347
+#define STR_PHILIP_FOLDER 348
+#define STR_STATUETTE 349
+#define STR_REWARD 350
+#define STR_IGOR_OBJECTIVE_UIKOKAHONIA 351
+#define STR_SHAREWARE_VERSION 352
+#define STR_SHAREWARE_PLACE_ORDER 353
+#define STR_SHAREWARE_TEXT1 354
+#define STR_SHAREWARE_TEXT2 355
+#define STR_SHAREWARE_TEXT3 356
+#define STR_SHAREWARE_TEXT4 357
+#define STR_SHAREWARE_TEXT5 358
+#define STR_SHAREWARE_ORDER_1 359
+#define STR_SHAREWARE_ORDER_2 360
+#define STR_SHAREWARE_ORDER_3 361
+#define STR_SHAREWARE_ORDER_4 362
+#define STR_SHAREWARE_SHIPPING_1 363
+#define STR_SHAREWARE_SHIPPING_2 364
+#define STR_SHAREWARE_SHIPPING_3 365
+#define STR_SHAREWARE_SHIPPING_4 366
+#define STR_SHAREWARE_SHIPPING_5 367
+#define STR_SHAREWARE_SHIPPING_6 368
+#define STR_SHAREWARE_SHIPPING_7 369
+#define STR_SHAREWARE_SHIPPING_8 370
+#define STR_SHAREWARE_SHIPPING_9 371
+#define STR_SHAREWARE_SHIPPING_10 372
+#define STR_SHAREWARE_OPTIK_ADDRESS_1 373
+#define STR_SHAREWARE_OPTIK_ADDRESS_2 374
+#define STR_SHAREWARE_OPTIK_ADDRESS_3 375
+#define STR_SHAREWARE_OPTIK_ADDRESS_4 376
+#define STR_SHAREWARE_OPTIK_ADDRESS_5 377
+#define STR_SHAREWARE_OPTIK_ADDRESS_6 378
+#define STR_SHAREWARE_OPTIK_ADDRESS_7 379
+#define STR_SHAREWARE_OPTIK_ADDRESS_8 380
+#define STR_SHAREWARE_OPTIK_ADDRESS_9 381
+#define STR_SHAREWARE_PENDULO_ADDRESS_1 382
+#define STR_SHAREWARE_PENDULO_ADDRESS_2 383
+#define STR_SHAREWARE_PENDULO_ADDRESS_3 384
+#define STR_SHAREWARE_PENDULO_ADDRESS_4 385
+#define STR_SHAREWARE_PENDULO_ADDRESS_5 386
+#define STR_SHAREWARE_PENDULO_ADDRESS_6 387

Modified: scummvm/trunk/engines/igor/staticres.cpp
===================================================================
--- scummvm/trunk/engines/igor/staticres.cpp	2007-11-25 23:26:50 UTC (rev 29640)
+++ scummvm/trunk/engines/igor/staticres.cpp	2007-11-25 23:27:51 UTC (rev 29641)
@@ -56,620 +56,120 @@
 	0x06, 0x06, 0x05, 0x06, 0x07, 0x05, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
 	0x06, 0x08, 0x08, 0x06, 0x07, 0x06, 0x06, 0x05, 0x06, 0x06, 0x08, 0x07, 0x07, 0x07, 0x08, 0x07,
 	0x07, 0x07, 0x07, 0x07, 0x05, 0x05, 0x07, 0x07, 0x07, 0x06, 0x06, 0x07, 0x07, 0x04, 0x04, 0x03,
-	0x03, 0x06, 0x03, 0x03, 0x07, 0x07, 0x08, 0x05, 0x05, 0x08, 0x04, 0x06, 0x08, 0x07, 0x05
+	0x03, 0x06, 0x03, 0x03, 0x07, 0x07, 0x08, 0x05, 0x05, 0x08, 0x04, 0x06, 0x08, 0x07, 0x08, 0x00,
+	0x00, 0x00, 0x00, 0x00
 };
 
-const uint8 IgorEngine::_fontData[] = {
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00,
-	0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01,
-	0x01, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01,
-	0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x02,
-	0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03,
-	0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
-	0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02,
-	0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03,
-	0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01,
-	0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
-	0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02,
-	0x02, 0x03, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03,
-	0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x02, 0x02, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x01,
-	0x01, 0x03, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00,
-	0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03,
-	0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x01, 0x03,
-	0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x02, 0x02, 0x03, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03,
-	0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x03, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03,
-	0x02, 0x03, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x02, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03,
-	0x03, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x02, 0x02, 0x03, 0x00, 0x02, 0x01, 0x01,
-	0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02,
-	0x01, 0x01, 0x03, 0x02, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00,
-	0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
-	0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01,
-	0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x02,
-	0x01, 0x01, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01,
-	0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01,
-	0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00,
-	0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01,
-	0x03, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03,
-	0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01,
-	0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x01, 0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01,
-	0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x00,
-	0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
-	0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00,
-	0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03,
-	0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01,
-	0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03,
-	0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01,
-	0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x01, 0x01, 0x01,
-	0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01,
-	0x01, 0x03, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02,
-	0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01,
-	0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
-	0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x02,
-	0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
-	0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02,
-	0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x01, 0x03,
-	0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x03, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03,
-	0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01,
-	0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01,
-	0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01,
-	0x03, 0x02, 0x01, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02,
-	0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03,
-	0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01,
-	0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01,
-	0x01, 0x03, 0x03, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03,
-	0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01,
-	0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03,
-	0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,
-	0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x03, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01,
-	0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03,
-	0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01,
-	0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02,
-	0x01, 0x01, 0x03, 0x01, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03,
-	0x00, 0x00, 0x02, 0x02, 0x03, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03,
-	0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
-	0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02,
-	0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03,
-	0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01,
-	0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x03,
-	0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,
-	0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02,
-	0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x03,
-	0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02,
-	0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x03, 0x01, 0x01, 0x03, 0x01, 0x03, 0x00, 0x02, 0x02, 0x03,
-	0x01, 0x01, 0x03, 0x02, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00,
-	0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03,
-	0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01,
-	0x01, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00,
-	0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01,
-	0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02,
-	0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02,
-	0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01,
-	0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03,
-	0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02,
-	0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00,
-	0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01,
-	0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02,
-	0x01, 0x01, 0x03, 0x01, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x03, 0x02, 0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x03, 0x03, 0x02,
-	0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x00, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x02,
-	0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01,
-	0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03,
-	0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01,
-	0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01,
-	0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03,
-	0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02,
-	0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00, 0x00,
-	0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01, 0x03, 0x02,
-	0x01, 0x03, 0x03, 0x01, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x03, 0x01, 0x01, 0x01, 0x03, 0x03,
-	0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03,
-	0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x02, 0x03, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
-	0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x01,
-	0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01,
-	0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00,
-	0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03,
-	0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01,
-	0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00,
-	0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03,
-	0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00,
-	0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x03,
-	0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01,
-	0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02,
-	0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01,
-	0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01,
-	0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02,
-	0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00,
-	0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03,
-	0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03,
-	0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
-	0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x00,
-	0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02,
-	0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01,
-	0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
-	0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01,
-	0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02,
-	0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x03, 0x00,
-	0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
-	0x01, 0x03, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00,
-	0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03,
-	0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01,
-	0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00,
-	0x00, 0x02, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00,
-	0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01,
-	0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01,
-	0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
-	0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02,
-	0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x03, 0x00,
-	0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03,
-	0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
-	0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x02, 0x02, 0x00,
-	0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03,
-	0x03, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01,
-	0x01, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x03,
-	0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
-	0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01,
-	0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x01, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00,
-	0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x01, 0x03, 0x01, 0x01,
-	0x03, 0x02, 0x01, 0x01, 0x03, 0x01, 0x03, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x03,
-	0x01, 0x01, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,
-	0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01,
-	0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01,
-	0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02,
-	0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01,
-	0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01,
-	0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00,
-	0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02,
-	0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00,
-	0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01,
-	0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03,
-	0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
-	0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01,
-	0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01,
-	0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02,
-	0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
-	0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01,
-	0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00,
-	0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x01, 0x01, 0x03,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x00,
-	0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03,
-	0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01,
-	0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01,
-	0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01,
-	0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02,
-	0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01,
-	0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01,
-	0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x00, 0x00,
-	0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02,
-	0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03,
-	0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
-	0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01,
-	0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03,
-	0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02,
-	0x02, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01,
-	0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02,
-	0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x03, 0x03, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02,
-	0x02, 0x01, 0x01, 0x03, 0x01, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x01, 0x03, 0x01,
-	0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x03,
-	0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02,
-	0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x01,
-	0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01,
-	0x01, 0x03, 0x03, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01,
-	0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02,
-	0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00,
-	0x00, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03,
-	0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
-	0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x03, 0x03, 0x01, 0x01, 0x03,
-	0x03, 0x00, 0x02, 0x02, 0x03, 0x01, 0x01, 0x03, 0x03, 0x02, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03,
-	0x03, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00,
-	0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x03,
-	0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03,
-	0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01,
-	0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
-	0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01,
-	0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02,
-	0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00,
-	0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
-	0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02,
-	0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00,
-	0x02, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00,
-	0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03,
-	0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01,
-	0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00,
-	0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03,
-	0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01,
-	0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01,
-	0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00,
-	0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02,
-	0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x02, 0x00, 0x00, 0x02,
-	0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00,
-	0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01,
-	0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03,
-	0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
-	0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x01,
-	0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00,
-	0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01,
-	0x03, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00,
-	0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
-	0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01,
-	0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00,
-	0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02,
-	0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x01, 0x01, 0x03,
-	0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03,
-	0x03, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01,
-	0x01, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02,
-	0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02,
-	0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x02,
-	0x02, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02,
-	0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02,
-	0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x03, 0x02,
-	0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x01, 0x01,
-	0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x01,
-	0x01, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x02,
-	0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02,
-	0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03,
-	0x03, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01,
-	0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02,
-	0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03,
-	0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
-	0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01,
-	0x01, 0x03, 0x03, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00,
-	0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03,
-	0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01,
-	0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,
-	0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01,
-	0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03,
-	0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02,
-	0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01,
-	0x01, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01,
-	0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
-	0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03,
-	0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
-	0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02,
-	0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
-	0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02,
-	0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00,
-	0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
-	0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02,
-	0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00,
-	0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

@@ 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