shithub: ft2-clone

Download patch

ref: 724a4caff868393ba0c0ba520033470824405c0e
parent: 34e6e672eee2a1584806f7255998b94870dd03f5
author: Olav Sørensen <[email protected]>
date: Wed Feb 12 16:50:08 EST 2020

Pushed v1.09 code

- Fix: If a corrupt .XM doesn't contain all the sample data at the end of the
  file, try to load what is left instead of showing an "Out of memory!" message.
- Fix: Prevent upscaling factors higher than 2x on ARM devices. Fixes extreme
  slowdowns on Raspberry Pi 4 with 2k or higher resolution screens.
- The .MOD importer has been slightly improved for oldschool 15-sample formats
- The .S3M importer has been slightly improved for certain effect cases not
  compatible with FT2.
- Audio mixer: Internal voice volumes are now calculated with 256 times higher
  precision than FT2. Some other changes were also made to make sure the audio
  mixing is always done at max precision regardless of the "amp" setting in
  the config screen. These are changes that most people won't ever be able to
  hear, but the speed performance of the mixer is still the same, so why not.
- The audio dithering routine has now been improved (rectangular->triangular),
  and it's now enabled by default on a fresh configuration, or if you reset it.

--- a/make-linux-nomidi.sh
+++ b/make-linux-nomidi.sh
@@ -11,4 +11,4 @@
 
 rm src/gfxdata/*.o src/*.o &> /dev/null
 
-echo Done! The executable is in the folder named \'release/other\'.
+echo Done. The executable can be found in \'release/other\' if everything went well.
--- a/make-linux.sh
+++ b/make-linux.sh
@@ -11,4 +11,4 @@
 
 rm src/rtmidi/*.o src/gfxdata/*.o src/*.o &> /dev/null
 
-echo Done! The executable is in the folder named \'release/other\'.
+echo Done. The executable can be found in \'release/other\' if everything went well.
--- a/make-macos.sh
+++ b/make-macos.sh
@@ -13,5 +13,5 @@
     install_name_tool -change @rpath/SDL2.framework/Versions/A/SDL2 @executable_path/../Frameworks/SDL2.framework/Versions/A/SDL2 release/macos/ft2-clone-macos.app/Contents/MacOS/ft2-clone-macos
     
     rm src/rtmidi/*.o src/gfxdata/*.o src/*.o &> /dev/null
-    echo Done! The executable is in the folder named \'release/macos\'.
+    echo Done. The executable can be found in \'release/macos\' if everything went well.
 fi
--- a/src/ft2_about.c
+++ b/src/ft2_about.c
@@ -1,4 +1,5 @@
 #include <stdio.h> // sprintf()
+#include <math.h>
 #include "ft2_header.h"
 #include "ft2_gui.h"
 #include "ft2_pattern_ed.h"
--- a/src/ft2_audio.c
+++ b/src/ft2_audio.c
@@ -20,7 +20,8 @@
 
 static int8_t pmpCountDiv, pmpChannels = 2;
 static uint16_t smpBuffSize;
-static int32_t masterVol, masterAmp, oldAudioFreq, speedVal, pmpLeft, randSeed = INITIAL_DITHER_SEED;
+static int32_t masterVol, oldAudioFreq, speedVal, pmpLeft, randSeed = INITIAL_DITHER_SEED;
+static int32_t prngStateL, prngStateR;
 static uint32_t tickTimeLen, tickTimeLenFrac, oldSFrq, oldSFrqRev = 0xFFFFFFFF;
 static float fAudioAmpMul;
 static voice_t voice[MAX_VOICES * 2];
@@ -106,32 +107,21 @@
 void setAudioAmp(int16_t ampFactor, int16_t master, bool bitDepth32Flag)
 {
 	ampFactor = CLAMP(ampFactor, 1, 32);
-	master    = CLAMP(master, 0, 256);
+	master = CLAMP(master, 0, 256);
 
-	// voiceVolume = (vol(0..2047) * amp(1..32) * pan(0..65536)) >> 4
-	const float fAudioNorm = 1.0f / (((2047UL * 32 * 65536) / 16) / MAX_VOICES);
+	// voiceVolume = (vol(0..65535) * pan(0..65536)) >> 4
+	const float fAudioNorm = 1.0f / (((65535UL * 65536) / 16) / MAX_VOICES);
 
 	if (bitDepth32Flag)
 	{
 		// 32-bit floating point (24-bit)
-		fAudioAmpMul = fAudioNorm * (master / 256.0f);
+		fAudioAmpMul = fAudioNorm * (master / 256.0f) * (ampFactor / 32.0f);
 	}
 	else
 	{
 		// 16-bit integer
-		masterVol = master;
+		masterVol = master * ampFactor * 2048;
 	}
-
-	// calculate channel amp
-
-	if (masterAmp != ampFactor)
-	{
-		masterAmp = ampFactor;
-
-		// make all channels update volume because of amp change
-		for (uint32_t i = 0; i < song.antChn; i++)
-			stm[i].status |= IS_Vol;
-	}
 }
 
 void setNewAudioFreq(uint32_t freq) // for song to WAV rendering
@@ -170,12 +160,7 @@
 		*/
 		tickTimeLen = (int32_t)dInt;
 
-		/* - fractional part (scaled to 0..2^32-1) -
-		** We have to resort to slow float->int conversion here because the result
-		** can be above 2^31. In 64-bit mode, this will still use a fast SSE2 instruction.
-		** Anyhow, this function won't be called that many times a second in worst case,
-		** so it's not a big issue at all.
-		*/
+		// - fractional part (scaled to 0..2^32-1) -
 		dFrac *= UINT32_MAX;
 		tickTimeLenFrac = (uint32_t)(dFrac + 0.5);
 	}
@@ -198,15 +183,16 @@
 static inline void voiceUpdateVolumes(uint8_t i, uint8_t status)
 {
 	int32_t volL, volR;
+	uint32_t vol;
 	voice_t *v, *f;
 
 	v = &voice[i];
 
-	volL = v->SVol * masterAmp; // 0..2047 * 1..32 = 0..65504
+	vol = v->SVol; // 0..65535
 
-	// (0..65504 * 0..65536) >> 4 = 0..268304384
-	volR = ((uint32_t)volL * panningTab[v->SPan]) >> 4;
-	volL = ((uint32_t)volL * panningTab[256 - v->SPan]) >> 4;
+	// (0..65535 * 0..65536) >> 4 = 0..268431360
+	volR = (vol * panningTab[    v->SPan]) >> 4;
+	volL = (vol * panningTab[256-v->SPan]) >> 4;
 
 	if (!audio.volumeRampingFlag)
 	{
@@ -245,7 +231,8 @@
 
 		/* FT2 has two internal volume ramping lengths:
 		** IS_QuickVol: 5ms (audioFreq / 200)
-		** Normal: The duration of a tick (speedVal) */
+		** Normal: The duration of a tick (speedVal)
+		*/
 
 		if (volL == v->SLVol2 && volR == v->SRVol2)
 		{
@@ -326,10 +313,9 @@
 
 void mix_SaveIPVolumes(void) // for volume ramping
 {
-	voice_t *v;
-	for (uint32_t i = 0; i < song.antChn; i++)
+	voice_t *v = voice;
+	for (uint32_t i = 0; i < MAX_VOICES; i++, v++)
 	{
-		v = &voice[i];
 		v->SLVol2 = v->SLVol1;
 		v->SRVol2 = v->SRVol1;
 		v->SVolIPLen = 0;
@@ -342,60 +328,62 @@
 	stmTyp *ch;
 	voice_t *v;
 
-	for (uint8_t i = 0; i < song.antChn; i++)
-	{
-		ch = &stm[i];
-		v = &voice[i];
+	ch = stm;
+	v = voice;
 
+	for (uint8_t i = 0; i < song.antChn; i++, ch++, v++)
+	{
 		status = ch->tmpStatus = ch->status; // ch->tmpStatus is used for audio/video sync queue
-		if (status != 0)
-		{
-			ch->status = 0;
+		if (status == 0)
+			continue;
 
-			// volume change
-			if (status & IS_Vol)
-				v->SVol = ch->finalVol;
+		ch->status = 0;
 
-			// panning change
-			if (status & IS_Pan)
-				v->SPan = ch->finalPan;
+		// volume change
+		if (status & IS_Vol)
+			v->SVol = ch->finalVol;
 
-			// update mixing volumes if vol/pan change
-			if (status & (IS_Vol + IS_Pan))
-				voiceUpdateVolumes(i, status);
+		// panning change
+		if (status & IS_Pan)
+			v->SPan = ch->finalPan;
 
-			// frequency change
-			if (status & IS_Period)
-			{
-				v->SFrq = getFrequenceValue(ch->finalPeriod);
+		// update mixing volumes if vol/pan change
+		if (status & (IS_Vol + IS_Pan))
+			voiceUpdateVolumes(i, status);
 
-				if (v->SFrq != oldSFrq)
-				{
-					oldSFrq = v->SFrq;
+		// frequency change
+		if (status & IS_Period)
+		{
+			v->SFrq = getFrequenceValue(ch->finalPeriod);
 
-					oldSFrqRev = 0xFFFFFFFF;
-					if (oldSFrq != 0)
-						oldSFrqRev /= oldSFrq;
-				}
+			if (v->SFrq != oldSFrq)
+			{
+				oldSFrq = v->SFrq;
 
-				v->SFrqRev = oldSFrqRev;
+				oldSFrqRev = 0xFFFFFFFF;
+				if (oldSFrq != 0)
+					oldSFrqRev /= oldSFrq;
 			}
 
-			// sample trigger (note)
-			if (status & IS_NyTon)
-				voiceTrigger(i, ch->smpPtr, ch->smpStartPos);
+			v->SFrqRev = oldSFrqRev;
 		}
+
+		// sample trigger (note)
+		if (status & IS_NyTon)
+			voiceTrigger(i, ch->smpPtr, ch->smpStartPos);
 	}
 }
 
-void resetDitherSeed(void)
+void resetAudioDither(void)
 {
 	randSeed = INITIAL_DITHER_SEED;
+	prngStateL = 0;
+	prngStateR = 0;
 }
 
-// Delphi/Pascal LCG Random() (without limit). Suitable for 32-bit random numbers
 static inline uint32_t random32(void)
 {
+	// LCG 32-bit random
 	randSeed *= 134775813;
 	randSeed++;
 
@@ -410,37 +398,18 @@
 	(void)numAudioChannels;
 
 	streamPointer16 = (int16_t *)stream;
-
-	if (masterVol == 256) // max master volume
+	for (uint32_t i = 0; i < sampleBlockLength; i++)
 	{
-		for (uint32_t i = 0; i < sampleBlockLength; i++)
-		{
-			// left channel
-			out32 = audio.mixBufferL[i] >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
+		// left channel
+		out32 = ((int64_t)audio.mixBufferL[i] * masterVol) >> 32;
+		CLAMP16(out32);
+		*streamPointer16++ = (int16_t)out32;
 
-			// right channel
-			out32 = audio.mixBufferR[i] >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
-		}
+		// right channel
+		out32 = ((int64_t)audio.mixBufferR[i] * masterVol) >> 32;
+		CLAMP16(out32);
+		*streamPointer16++ = (int16_t)out32;
 	}
-	else
-	{
-		for (uint32_t i = 0; i < sampleBlockLength; i++)
-		{
-			// left channel
-			out32 = ((audio.mixBufferL[i] >> 8) * masterVol) >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
-
-			// right channel
-			out32 = ((audio.mixBufferR[i] >> 8) * masterVol) >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
-		}
-	}
 }
 
 static void sendSamples16BitMultiChan(uint8_t *stream, uint32_t sampleBlockLength, uint8_t numAudioChannels)
@@ -450,145 +419,74 @@
 	uint32_t i, j;
 
 	streamPointer16 = (int16_t *)stream;
-
-	if (masterVol == 256) // max master volume
+	for (i = 0; i < sampleBlockLength; i++)
 	{
-		for (i = 0; i < sampleBlockLength; i++)
-		{
-			// left channel
-			out32 = audio.mixBufferL[i] >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
+		// left channel
+		out32 = ((int64_t)audio.mixBufferL[i] * masterVol) >> 32;
+		CLAMP16(out32);
+		*streamPointer16++ = (int16_t)out32;
 
-			// right channel
-			out32 = audio.mixBufferR[i] >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
+		// right channel
+		out32 = ((int64_t)audio.mixBufferR[i] * masterVol) >> 32;
+		CLAMP16(out32);
+		*streamPointer16++ = (int16_t)out32;
 
-			for (j = 2; j < numAudioChannels; j++)
-				*streamPointer16++ = 0;
-		}
+		for (j = 2; j < numAudioChannels; j++)
+			*streamPointer16++ = 0;
 	}
-	else
-	{
-		for (i = 0; i < sampleBlockLength; i++)
-		{
-			// left channel
-			out32 = ((audio.mixBufferL[i] >> 8) * masterVol) >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
-
-			// right channel
-			out32 = ((audio.mixBufferR[i] >> 8) * masterVol) >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
-
-			for (j = 2; j < numAudioChannels; j++)
-				*streamPointer16++ = 0;
-		}
-	}
 }
 
 static void sendSamples16BitDitherStereo(uint8_t *stream, uint32_t sampleBlockLength, uint8_t numAudioChannels)
 {
 	int16_t *streamPointer16;
-	int32_t dither, out32;
+	int32_t prng, out32;
 
 	(void)numAudioChannels;
 
 	streamPointer16 = (int16_t *)stream;
-
-	if (masterVol == 256) // max master volume
+	for (uint32_t i = 0; i < sampleBlockLength; i++)
 	{
-		for (uint32_t i = 0; i < sampleBlockLength; i++)
-		{
-			// left channel
-			dither = ((random32() % 3) - 1) << (8 - 1); // random 1.5-bit noise: -128, 0, 128
-			out32 = (audio.mixBufferL[i] + dither) >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
+		// left channel - 1-bit triangular dithering
+		prng = random32();
+		out32 = ((((int64_t)audio.mixBufferL[i] * masterVol) + prng) - prngStateL) >> 32;
+		prngStateL = prng;
+		CLAMP16(out32);
+		*streamPointer16++ = (int16_t)out32;
 
-			// right channel
-			dither = ((random32() % 3) - 1) << (8 - 1);
-			out32 = (audio.mixBufferR[i] + dither) >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
-		}
+		// right channel - 1-bit triangular dithering
+		prng = random32();
+		out32 = ((((int64_t)audio.mixBufferR[i] * masterVol) + prng) - prngStateR) >> 32;
+		prngStateR = prng;
+		CLAMP16(out32);
+		*streamPointer16++ = (int16_t)out32;
 	}
-	else
-	{
-		for (uint32_t i = 0; i < sampleBlockLength; i++)
-		{
-			// left channel
-			dither = ((random32() % 3) - 1) << (8 - 1); // random 1.5-bit noise: -128, 0, 128
-			out32 = (audio.mixBufferL[i] + dither) >> 8;
-			dither = ((random32() % 3) - 1) << (8 - 1);
-			out32 = ((out32 * masterVol) + dither) >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
-
-			// right channel
-			dither = ((random32() % 3) - 1) << (8 - 1);
-			out32 = (audio.mixBufferR[i] + dither) >> 8;
-			dither = ((random32() % 3) - 1) << (8 - 1);
-			out32 = ((out32 * masterVol) + dither) >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
-		}
-	}
 }
 
 static void sendSamples16BitDitherMultiChan(uint8_t *stream, uint32_t sampleBlockLength, uint8_t numAudioChannels)
 {
 	int16_t *streamPointer16;
-	int32_t dither, out32;
+	int32_t prng, out32;
 
 	streamPointer16 = (int16_t *)stream;
-
-	if (masterVol == 256) // max master volume
+	for (uint32_t i = 0; i < sampleBlockLength; i++)
 	{
-		for (uint32_t i = 0; i < sampleBlockLength; i++)
-		{
-			// left channel
-			dither = ((random32() % 3) - 1) << (8 - 1); // random 1.5-bit noise: -128, 0, 128
-			out32 = (audio.mixBufferL[i] + dither) >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
+		// left channel - 1-bit triangular dithering
+		prng = random32();
+		out32 = ((((int64_t)audio.mixBufferL[i] * masterVol) + prng) - prngStateL) >> 32;
+		prngStateL = prng;
+		CLAMP16(out32);
+		*streamPointer16++ = (int16_t)out32;
 
-			// right channel
-			dither = ((random32() % 3) - 1) << (8 - 1);
-			out32 = (audio.mixBufferR[i] + dither) >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
+		// right channel - 1-bit triangular dithering
+		prng = random32();
+		out32 = ((((int64_t)audio.mixBufferR[i] * masterVol) + prng) - prngStateR) >> 32;
+		prngStateR = prng;
+		CLAMP16(out32);
+		*streamPointer16++ = (int16_t)out32;
 
-			for (uint32_t j = 2; j < numAudioChannels; j++)
-				*streamPointer16++ = 0;
-		}
+		for (uint32_t j = 2; j < numAudioChannels; j++)
+			*streamPointer16++ = 0;
 	}
-	else
-	{
-		for (uint32_t i = 0; i < sampleBlockLength; i++)
-		{
-			// left channel
-			dither = ((random32() % 3) - 1) << (8 - 1); // random 1.5-bit noise: -128, 0, 128
-			out32 = (audio.mixBufferL[i] + dither) >> 8;
-			dither = ((random32() % 3) - 1) << (8 - 1);
-			out32 = ((out32 * masterVol) + dither) >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
-
-			// right channel
-			dither = ((random32() % 3) - 1) << (8 - 1);
-			out32 = (audio.mixBufferR[i] + dither) >> 8;
-			dither = ((random32() % 3) - 1) << (8 - 1);
-			out32 = ((out32 * masterVol) + dither) >> 8;
-			CLAMP16(out32);
-			*streamPointer16++ = (int16_t)out32;
-
-			for (uint32_t j = 2; j < numAudioChannels; j++)
-				*streamPointer16++ = 0;
-		}
-	}
 }
 
 static void sendSamples24BitStereo(uint8_t *stream, uint32_t sampleBlockLength, uint8_t numAudioChannels)
@@ -636,7 +534,7 @@
 
 static void mixAudio(uint8_t *stream, uint32_t sampleBlockLength, uint8_t numAudioChannels)
 {
-	voice_t *v = voice;
+	voice_t *v, *r;
 
 	assert(sampleBlockLength <= MAX_WAV_RENDER_SAMPLES_PER_TICK);
 	memset(audio.mixBufferL, 0, sampleBlockLength * sizeof (int32_t));
@@ -643,20 +541,15 @@
 	memset(audio.mixBufferR, 0, sampleBlockLength * sizeof (int32_t));
 
 	// mix channels
-	for (uint32_t i = 0; i < song.antChn; i++)
-	{
-		// call the mixing routine currently set for the voice
-		if (v->mixRoutine != NULL)
-			v->mixRoutine(v, sampleBlockLength);
 
-		// mix fade-out voice
-		v += MAX_VOICES;
+	v = voice; // normal voices
+	r = &voice[MAX_VOICES]; // volume ramp voices
 
+	for (uint32_t i = 0; i < song.antChn; i++, v++, r++)
+	{
 		// call the mixing routine currently set for the voice
-		if (v->mixRoutine != NULL)
-			v->mixRoutine(v, sampleBlockLength);
-
-		v -= (MAX_VOICES - 1); // go to next normal channel
+		if (v->mixRoutine != NULL) v->mixRoutine(v, sampleBlockLength); // mix normal voice
+		if (r->mixRoutine != NULL) r->mixRoutine(r, sampleBlockLength); // mix volume ramp voice
 	}
 
 	// normalize mix buffer and send to audio stream
@@ -666,7 +559,7 @@
 // used for song-to-WAV renderer
 uint32_t mixReplayerTickToBuffer(uint8_t *stream, uint8_t bitDepth)
 {
-	voice_t *v = voice;
+	voice_t *v, *r;
 
 	assert(speedVal <= MAX_WAV_RENDER_SAMPLES_PER_TICK);
 	memset(audio.mixBufferL, 0, speedVal * sizeof (int32_t));
@@ -673,20 +566,14 @@
 	memset(audio.mixBufferR, 0, speedVal * sizeof (int32_t));
 
 	// mix channels
-	for (uint32_t i = 0; i < song.antChn; i++)
+	v = voice; // normal voices
+	r = &voice[MAX_VOICES]; // volume ramp voices
+
+	for (uint32_t i = 0; i < song.antChn; i++, v++, r++)
 	{
 		// call the mixing routine currently set for the voice
-		if (v->mixRoutine != NULL)
-			v->mixRoutine(v, speedVal);
-
-		// mix fade-out voice
-		v += MAX_VOICES;
-
-		// call the mixing routine currently set for the voice
-		if (v->mixRoutine != NULL)
-			v->mixRoutine(v, speedVal);
-
-		v -= (MAX_VOICES - 1); // go to next normal channel
+		if (v->mixRoutine != NULL) v->mixRoutine(v, speedVal); // mix normal voice
+		if (r->mixRoutine != NULL) r->mixRoutine(r, speedVal); // mix volume ramp voice
 	}
 
 	// normalize mix buffer and send to audio stream
--- a/src/ft2_audio.h
+++ b/src/ft2_audio.h
@@ -97,7 +97,7 @@
 void pauseAudio(void);
 void resumeAudio(void);
 bool setNewAudioSettings(void);
-void resetDitherSeed(void);
+void resetAudioDither(void);
 void lockAudio(void);
 void unlockAudio(void);
 void lockMixerCallback(void);
--- a/src/ft2_checkboxes.c
+++ b/src/ft2_checkboxes.c
@@ -81,7 +81,7 @@
 	{   3,  91,  76, 12, cbToggleAutoSaveConfig },
 	{ 389, 132,  90, 12, cbConfigInterpolation },
 	{ 389, 145, 107, 12, cbConfigVolRamp },
-	{ 389, 158 , 94, 12, cbConfigDither },
+	{ 389, 158 , 84, 12, cbConfigDither },
 	{ 113,  14, 108, 12, cbConfigPattStretch },
 	{ 113,  27, 117, 12, cbConfigHexCount },
 	{ 113,  40,  81, 12, cbConfigAccidential },
--- a/src/ft2_config.c
+++ b/src/ft2_config.c
@@ -1171,7 +1171,7 @@
 			textOutShadow(390, 120, PAL_FORGRND, PAL_DSKTOP2, "Mixing device ctrl.:");
 			textOutShadow(406, 134, PAL_FORGRND, PAL_DSKTOP2, "Interpolation");
 			textOutShadow(406, 147, PAL_FORGRND, PAL_DSKTOP2, "Volume ramping");
-			textOutShadow(406, 160, PAL_FORGRND, PAL_DSKTOP2, "1.5-bit dither");
+			textOutShadow(406, 160, PAL_FORGRND, PAL_DSKTOP2, "1-bit dither");
 
 			textOutShadow(509,   3, PAL_FORGRND, PAL_DSKTOP2, "Mixing frequency:");
 #ifdef __APPLE__
@@ -1969,10 +1969,14 @@
 		return;
 	}
 
+#ifdef __arm__
+	okBox(0, "System message", "3x video upscaling is not supported on ARM devices for performance reasons.");
+#else
 	config.windowFlags &= ~(WINSIZE_AUTO + WINSIZE_1X + WINSIZE_2X + WINSIZE_4X);
 	config.windowFlags |= WINSIZE_3X;
 	setWindowSizeFromConfig(true);
 	checkRadioButton(RB_CONFIG_WIN_SIZE_3X);
+#endif
 }
 
 void rbWinSize4x(void)
@@ -1983,10 +1987,14 @@
 		return;
 	}
 
+#ifdef __arm__
+	okBox(0, "System message", "4x video upscaling is not supported on ARM devices for performance reasons.");
+#else
 	config.windowFlags &= ~(WINSIZE_AUTO + WINSIZE_1X + WINSIZE_2X + WINSIZE_3X);
 	config.windowFlags |= WINSIZE_4X;
 	setWindowSizeFromConfig(true);
 	checkRadioButton(RB_CONFIG_WIN_SIZE_4X);
+#endif
 }
 
 void cbSampCutToBuff(void)
@@ -2220,7 +2228,7 @@
 {
 	0x46,0x61,0x73,0x74,0x54,0x72,0x61,0x63,0x6B,0x65,0x72,0x20,0x32,0x2E,0x30,0x20,0x63,0x6F,0x6E,0x66,
 	0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x66,0x69,0x6C,0x65,0x1A,0x01,0x01,0x80,0xBB,0x00,
-	0x00,0xFF,0x00,0x00,0x01,0xDC,0x00,0x00,0x00,0x01,0x01,0x00,0x02,0x00,0xFF,0x00,0x20,0x02,0x01,0x00,
+	0x00,0xFF,0x00,0x00,0x01,0xDC,0x00,0x00,0x00,0x01,0x01,0x00,0x03,0x00,0xFF,0x00,0x20,0x02,0x01,0x00,
 	0x05,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x01,0x04,0x00,0x00,0x00,0x00,0x00,
 	0x00,0x00,0x00,0x24,0x2F,0x3F,0x09,0x09,0x10,0x3F,0x3F,0x3F,0x13,0x18,0x26,0x3F,0x3F,0x3F,0x27,0x27,
 	0x27,0x00,0x00,0x00,0x08,0x0A,0x0F,0x20,0x29,0x3F,0x0F,0x0F,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
--- a/src/ft2_gui.c
+++ b/src/ft2_gui.c
@@ -312,7 +312,10 @@
 void charOut(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr)
 {
 	const uint8_t *srcPtr;
-	uint32_t *dstPtr, pixVal, tmp;
+	uint32_t *dstPtr, pixVal;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	assert(xPos < SCREEN_W && yPos < SCREEN_H);
 
@@ -328,10 +331,15 @@
 	{
 		for (uint32_t x = 0; x < FONT1_CHAR_W; x++)
 		{
+#ifdef __arm__
+			if (srcPtr[x] != 0)
+				dstPtr[x] = pixVal;
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr[x];
 			if (srcPtr[x] != 0) tmp = pixVal;
 			dstPtr[x] = tmp;
+#endif
 		}
 
 		srcPtr += FONT1_WIDTH;
@@ -379,7 +387,10 @@
 void charOutShadow(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, uint8_t shadowPaletteIndex, char chr)
 {
 	const uint8_t *srcPtr;
-	uint32_t *dstPtr1, *dstPtr2, pixVal1, pixVal2, tmp;
+	uint32_t *dstPtr1, *dstPtr2, pixVal1, pixVal2;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	assert(xPos < SCREEN_W && yPos < SCREEN_H);
 
@@ -397,6 +408,13 @@
 	{
 		for (uint32_t x = 0; x < FONT1_CHAR_W; x++)
 		{
+#ifdef __arm__
+			if (srcPtr[x] != 0)
+			{
+				dstPtr2[x] = pixVal2;
+				dstPtr1[x] = pixVal1;
+			}
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr2[x];
 			if (srcPtr[x] != 0) tmp = pixVal2;
@@ -405,6 +423,7 @@
 			tmp = dstPtr1[x];
 			if (srcPtr[x] != 0) tmp = pixVal1;
 			dstPtr1[x] = tmp;
+#endif
 		}
 
 		srcPtr += FONT1_WIDTH;
@@ -417,7 +436,10 @@
 {
 	const uint8_t *srcPtr;
 	uint16_t width;
-	uint32_t *dstPtr, pixVal, tmp;
+	uint32_t *dstPtr, pixVal;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	assert(xPos < SCREEN_W && yPos < SCREEN_H);
 
@@ -440,10 +462,15 @@
 	{
 		for (uint32_t x = 0; x < width; x++)
 		{
+#ifdef __arm__
+			if (srcPtr[x] != 0)
+				dstPtr[x] = pixVal;
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr[x];
 			if (srcPtr[x] != 0) tmp = pixVal;
 			dstPtr[x] = tmp;
+#endif
 		}
 
 		srcPtr += FONT1_WIDTH;
@@ -454,7 +481,10 @@
 void bigCharOut(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr)
 {
 	const uint8_t *srcPtr;
-	uint32_t *dstPtr, pixVal, tmp;
+	uint32_t *dstPtr, pixVal;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	assert(xPos < SCREEN_W && yPos < SCREEN_H);
 
@@ -470,10 +500,15 @@
 	{
 		for (uint32_t x = 0; x < FONT2_CHAR_W; x++)
 		{
+#ifdef __arm__
+			if (srcPtr[x] != 0)
+				dstPtr[x] = pixVal;
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr[x];
 			if (srcPtr[x] != 0) tmp = pixVal;
 			dstPtr[x] = tmp;
+#endif
 		}
 
 		srcPtr += FONT2_WIDTH;
@@ -484,7 +519,10 @@
 static void bigCharOutShadow(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, uint8_t shadowPaletteIndex, char chr)
 {
 	const uint8_t *srcPtr;
-	uint32_t *dstPtr1, *dstPtr2, pixVal1, pixVal2, tmp;
+	uint32_t *dstPtr1, *dstPtr2, pixVal1, pixVal2;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	assert(xPos < SCREEN_W && yPos < SCREEN_H);
 
@@ -502,6 +540,13 @@
 	{
 		for (uint32_t x = 0; x < FONT2_CHAR_W; x++)
 		{
+#ifdef __arm__
+			if (srcPtr[x] != 0)
+			{
+				dstPtr2[x] = pixVal2;
+				dstPtr1[x] = pixVal1;
+			}
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr2[x];
 			if (srcPtr[x] != 0) tmp = pixVal2;
@@ -510,6 +555,7 @@
 			tmp = dstPtr1[x];
 			if (srcPtr[x] != 0) tmp = pixVal1;
 			dstPtr1[x] = tmp;
+#endif
 		}
 
 		srcPtr += FONT2_WIDTH;
@@ -649,7 +695,10 @@
 void hexOut(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, uint32_t val, uint8_t numDigits)
 {
 	const uint8_t *srcPtr;
-	uint32_t *dstPtr, pixVal, tmp;
+	uint32_t *dstPtr, pixVal;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	assert(xPos < SCREEN_W && yPos < SCREEN_H);
 
@@ -665,10 +714,15 @@
 		{
 			for (uint32_t x = 0; x < FONT6_CHAR_W; x++)
 			{
+#ifdef __arm__
+				if (srcPtr[x] != 0)
+					dstPtr[x] = pixVal;
+#else
 				// carefully written like this to generate conditional move instructions (font data is hard to predict)
 				tmp = dstPtr[x];
 				if (srcPtr[x] != 0) tmp = pixVal;
 				dstPtr[x] = tmp;
+#endif
 			}
 
 			srcPtr += FONT6_WIDTH;
@@ -834,7 +888,7 @@
 	dstPtr = &video.frameBuffer[(y * SCREEN_W) + x];
 	for (uint32_t i = 0; i < h; i++)
 	{
-		*dstPtr  = pixVal;
+		*dstPtr = pixVal;
 		 dstPtr += SCREEN_W;
 	}
 }
--- a/src/ft2_header.h
+++ b/src/ft2_header.h
@@ -12,7 +12,7 @@
 #endif
 #include "ft2_replayer.h"
 
-#define PROG_VER_STR "1.08"
+#define PROG_VER_STR "1.09"
 
 // do NOT change these! It will only mess things up...
 
--- a/src/ft2_inst_ed.c
+++ b/src/ft2_inst_ed.c
@@ -6,6 +6,7 @@
 #include <stdio.h>
 #include <stdint.h>
 #include <stdbool.h>
+#include <math.h>
 #include "ft2_header.h"
 #include "ft2_config.h"
 #include "ft2_audio.h"
--- a/src/ft2_module_loader.c
+++ b/src/ft2_module_loader.c
@@ -30,7 +30,8 @@
 ** You will experience a lot of headaches if you dig into this file...
 ** If something looks to be wrong, it's probably right!
 **
-** The actual module load routines are ported from FT2 and slightly modified. */
+** The actual module load routines are ported from FT2 and slightly modified.
+*/
 
 enum
 {
@@ -41,6 +42,19 @@
 	FORMAT_STM = 4
 };
 
+// .MOD types
+enum
+{
+	FORMAT_MK, // ProTracker or compatible
+	FORMAT_FLT, // StarTrekker (4-channel modules only)
+	FORMAT_FT2, // FT2 (or other trackers, multichannel)
+	FORMAT_STK, // The Ultimate SoundTracker (15 samples)
+	FORMAT_NT, // NoiseTracker
+	FORMAT_HMNT, // His Master's NoiseTracker (special one)
+
+	FORMAT_UNKNOWN // may be The Ultimate Soundtracker (set to FORMAT_STK later)
+};
+
 // DO NOT TOUCH THESE STRUCTS!
 
 #ifdef _MSC_VER
@@ -161,13 +175,55 @@
 	return true;
 }
 
+#define IS_ID(s, b) !strncmp(s, b, 4)
+
+static uint8_t getModType(uint8_t *numChannels, const char *id)
+{
+	uint8_t modFormat = FORMAT_UNKNOWN;
+	*numChannels = 4;
+
+	if (IS_ID("M.K.", id) || IS_ID("M!K!", id) || IS_ID("NSMS", id) || IS_ID("LARD", id) || IS_ID("PATT", id))
+	{
+		modFormat = FORMAT_MK; // ProTracker or compatible	
+	}
+	else if (id[1] == 'C' && id[2] == 'H' && id[3] == 'N')
+	{
+		modFormat = FORMAT_FT2; // FT2 or generic multichannel
+		*numChannels = id[0] - '0';
+	}
+	else if (id[2] == 'C' && (id[3] == 'H' || id[3] == 'N'))
+	{
+		modFormat = FORMAT_FT2; // FT2 or generic multichannel
+		*numChannels = ((id[0] - '0') * 10) + (id[1] - '0');
+	}
+	else if (IS_ID("FLT4", id))
+	{
+		modFormat = FORMAT_FLT; // StarTrekker (4-channel modules only)
+	}
+	else if (IS_ID("FLT8", id))
+	{
+		modFormat = FORMAT_FLT; // StarTrekker (4-channel modules only)
+		*numChannels = 8;
+	}
+	else if (IS_ID("N.T.", id))
+	{
+		modFormat = FORMAT_NT; // NoiseTracker
+	}
+	else if (IS_ID("M&K!", id) || IS_ID("FEST", id))
+	{
+		modFormat = FORMAT_HMNT; // His Master's NoiseTracker
+	}
+
+	return modFormat;
+}
+
 static bool loadMusicMOD(FILE *f, uint32_t fileLength, bool fromExternalThread)
 {
 	char ID[16];
-	bool modIsUST, modIsFEST, modIsNT;
-	uint8_t bytes[4];
+	bool mightBeSTK, lateSTKVerFlag, veryLateSTKVerFlag;
+	uint8_t bytes[4], modFormat, numChannels;
 	int16_t i, j, k, ai;
-	uint16_t a, b, period, ciaPeriod;
+	uint16_t a, b, period;
 	tonTyp *ton;
 	sampleTyp *s;
 	songMOD31HeaderTyp h_MOD31;
@@ -176,6 +232,14 @@
 
 	showMsg = fromExternalThread ? okBoxThreadSafe : okBox;
 
+	veryLateSTKVerFlag = false; // "DFJ SoundTracker III" nad later
+	lateSTKVerFlag = false; // "TJC SoundTracker II" and later
+	mightBeSTK = false;
+
+	memset(&songTmp, 0, sizeof (songTmp));
+	memset(&h_MOD31, 0, sizeof (songMOD31HeaderTyp));
+	memset(&h_MOD15, 0, sizeof (songMOD15HeaderTyp));
+
 	// start loading MOD
 
 	loadedFormat = FORMAT_MOD;
@@ -200,7 +264,7 @@
 		goto modLoadError;
 	}
 
-	if (fileLength < 1596 || fileLength > 20842494) // minimum and maximum possible size for an FT2 .mod
+	if (fileLength < 1596 || fileLength > 20842494) // minimum and maximum possible size for a supported .mod
 	{
 		showMsg(0, "System message", "Error: This file is either not a module, or is not supported.");
 		goto modLoadError;
@@ -212,56 +276,16 @@
 		goto modLoadError;
 	}
 
-	modIsFEST = false;
-	modIsNT = false;
-	modIsUST = false;
+	modFormat = getModType(&numChannels, h_MOD31.sig);
 
-	if (!strncmp(h_MOD31.sig, "N.T.", 4))
+	if (modFormat == FORMAT_FLT && numChannels == 8)
 	{
-		j = 4;
-		modIsNT = true;
-	}
-	else if (!strncmp(h_MOD31.sig, "FEST", 4) || !strncmp(h_MOD31.sig, "M&K!", 4))
-	{
-		modIsFEST = true;
-		modIsNT = true;
-		j = 4;
-	}
-	else if (!strncmp(h_MOD31.sig, "M!K!", 4) || !strncmp(h_MOD31.sig, "M.K.", 4) || !strncmp(h_MOD31.sig, "FLT4", 4))
-	{
-		j = 4;
-	}
-	else if (!strncmp(h_MOD31.sig, "OCTA", 4) || !strncmp(h_MOD31.sig, "FLT8", 4) || !strncmp(h_MOD31.sig, "CD81", 4))
-	{
-		j = 8;
-	}
-	else
-	{
-		j = 0;
-		for (i = 0; i < 32; i++)
-		{
-			if (!strncmp(h_MOD31.sig, modSig[i], 4))
-			{
-				j = i + 1;
-				break;
-			}
-			else if (j == 31)
-			{
-				j = -1; // ID not recignized
-			}
-		}
-	}
-
-	// unsupported MOD
-	if (j == -1)
-	{
-		showMsg(0, "System message", "Error: This file is either not a module, or is not supported.");
+		showMsg(0, "System message", "8-channel Startrekker modules are not supported!");
 		goto modLoadError;
 	}
 
-	if (j > 0)
+	if (modFormat != FORMAT_UNKNOWN)
 	{
-		modIsUST = false;
 		if (fileLength < sizeof (h_MOD31))
 		{
 			showMsg(0, "System message", "Error: This file is either not a module, or is not supported.");
@@ -268,7 +292,7 @@
 			goto modLoadError;
 		}
 
-		songTmp.antChn = (uint8_t)j;
+		songTmp.antChn = numChannels;
 		songTmp.len = h_MOD31.len;
 		songTmp.repS = h_MOD31.repS;
 		memcpy(songTmp.songTab, h_MOD31.songTab, 128);
@@ -276,14 +300,14 @@
 	}
 	else
 	{
-		modIsUST = true;
+		mightBeSTK = true;
 		if (fileLength < sizeof (h_MOD15))
 		{
-			showMsg(0, "System message", "Error: This file is either not a module, or is not supported.");
+			showMsg(0, "System message", "Error: This file is not a module!");
 			goto modLoadError;
 		}
 
-		fseek(f, 0, SEEK_SET);
+		rewind(f);
 		if (fread(&h_MOD15, 1, sizeof (h_MOD15), f) != sizeof (h_MOD15))
 		{
 			showMsg(0, "System message", "Error: This file is either not a module, or is not supported.");
@@ -290,7 +314,7 @@
 			goto modLoadError;
 		}
 
-		songTmp.antChn = 4;
+		songTmp.antChn = numChannels;
 		songTmp.len = h_MOD15.len;
 		songTmp.repS = h_MOD15.repS;
 		memcpy(songTmp.songTab, h_MOD15.songTab, 128);
@@ -297,20 +321,76 @@
 		ai = 15;
 	}
 
-	if (songTmp.antChn == 0 || songTmp.len < 1)
+	if (modFormat == FORMAT_MK && songTmp.len == 129)
+		songTmp.len = 127; // fixes a specific copy of beatwave.mod
+
+	if (songTmp.antChn == 0 || songTmp.len < 1 || songTmp.len > 128 || (mightBeSTK && songTmp.repS > 220))
 	{
 		showMsg(0, "System message", "Error: This file is either not a module, or is not supported.");
 		goto modLoadError;
 	}
 
-	if (!strncmp(h_MOD31.sig, "M.K.", 4) && songTmp.len == 129)
-		songTmp.len = 127; // fixes a specific copy of beatwave.mod by Sidewinder
+	for (a = 0; a < ai; a++)
+	{
+		songMODInstrHeaderTyp *smp = &h_MOD31.instr[a];
 
-	if (songTmp.len > 128 || (modIsUST && (songTmp.repS == 0 || songTmp.repS > 220)))
+		if (modFormat != FORMAT_HMNT) // most of "His Master's Noisetracker" songs have junk sample names, so let's not load them
+		{
+			// trim off spaces at end of name
+			for (i = 21; i >= 0; i--)
+			{
+				if (smp->name[i] == ' ' || smp->name[i] == 0x1A)
+					smp->name[i] = '\0';
+				else
+					break;
+			}
+
+			memcpy(songTmp.instrName[1+a], smp->name, 22);
+			songTmp.instrName[1+a][22] = '\0';
+		}
+
+		/* Only late versions of Ultimate SoundTracker could have samples larger than 9999 bytes.
+		** If found, we know for sure that this is a late STK module.
+		*/
+		if (mightBeSTK && 2*SWAP16(smp->len) > 9999)
+			lateSTKVerFlag = true;
+	}
+
+	songTmp.speed = 125;
+	if (mightBeSTK)
 	{
-		showMsg(0, "System message", "Error: This file is either not a module, or is not supported.");
-		goto modLoadError;
+		/* If we're still here at this point and the mightBeSTK flag is set,
+		** then it's most likely a proper The Ultimate SoundTracker (STK/UST) module.
+		*/
+		modFormat = FORMAT_STK;
+
+		if (h_MOD15.repS == 0)
+			h_MOD15.repS = 120;
+
+		// jjk55.mod by Jesper Kyd has a bogus STK tempo value that should be ignored
+		if (!strcmp("jjk55", h_MOD31.name))
+			h_MOD15.repS = 120;
+
+		// The "restart pos" field in STK is the inital tempo (must be converted to BPM first)
+		if (h_MOD15.repS != 120) // 120 is a special case and means 50Hz (125BPM)
+		{
+			if (h_MOD15.repS > 220)
+				h_MOD15.repS = 220;
+
+			// convert UST tempo to BPM
+			uint16_t ciaPeriod = (240 - songTmp.repS) * 122;
+			double dHz = 709379.0 / ciaPeriod;
+			int32_t BPM = (int32_t)((dHz * (125.0 / 50.0)) + 0.5);
+
+			songTmp.speed = (uint16_t)BPM;
+		}
+
+		songTmp.repS = 0;
 	}
+	else if (songTmp.repS >= songTmp.len)
+	{
+		songTmp.repS = 0;
+	}
 
 	// trim off spaces at end of name
 	for (i = 19; i >= 0; i--)
@@ -324,21 +404,7 @@
 	memcpy(songTmp.name, h_MOD31.name, 20);
 	songTmp.name[20] = '\0';
 
-	for (a = 0; a < ai; a++)
-	{
-		// trim off spaces at end of name
-		for (i = 21; i >= 0; i--)
-		{
-			if (h_MOD31.instr[a].name[i] == ' ' || h_MOD31.instr[a].name[i] == 0x1A)
-				h_MOD31.instr[a].name[i] = '\0';
-			else
-				break;
-		}
-
-		memcpy(songTmp.instrName[1+a], h_MOD31.instr[a].name, 22);
-		songTmp.instrName[1+a][22] = '\0';
-	}
-
+	// count number of patterns
 	b = 0;
 	for (a = 0; a < 128; a++)
 	{
@@ -345,11 +411,9 @@
 		if (songTmp.songTab[a] > b)
 			b = songTmp.songTab[a];
 	}
+	b++;
 
-	if (songTmp.len < 255)
-		memset(&songTmp.songTab[songTmp.len], 0, 256 - songTmp.len);
-
-	for (a = 0; a <= b; a++)
+	for (a = 0; a < b; a++)
 	{
 		pattTmp[a] = (tonTyp *)calloc((MAX_PATT_LEN * TRACK_WIDTH) + 16, 1);
 		if (pattTmp[a] == NULL)
@@ -386,6 +450,22 @@
 				ton->effTyp = bytes[2] & 0x0F;
 				ton->eff = bytes[3];
 
+				if (mightBeSTK)
+				{
+					if (ton->effTyp == 0xC || ton->effTyp == 0xD || ton->effTyp == 0xE)
+					{
+						// "TJC SoundTracker II" and later
+						lateSTKVerFlag = true;
+					}
+
+					if (ton->effTyp == 0xF)
+					{
+						// "DFJ SoundTracker III" and later
+						lateSTKVerFlag = true;
+						veryLateSTKVerFlag = true;
+					}
+				}
+
 				if (ton->effTyp == 0xC)
 				{
 					if (ton->eff > 64)
@@ -425,46 +505,110 @@
 						ton->eff = 0;
 					}
 				}
+			}
+		}
 
-				if (modIsUST)
+		if (tmpPatternEmpty(a))
+		{
+			if (pattTmp[a] != NULL)
+			{
+				free(pattTmp[a]);
+				pattTmp[a] = NULL;
+			}
+		}
+	}
+
+	// pattern command conversion for non-PT formats
+	if (modFormat == FORMAT_STK || modFormat == FORMAT_FT2 || modFormat == FORMAT_NT || modFormat == FORMAT_HMNT || modFormat == FORMAT_FLT)
+	{
+		for (a = 0; a < b; a++)
+		{
+			if (pattTmp[a] == NULL)
+				continue;
+
+			for (j = 0; j < 64; j++)
+			{
+				for (k = 0; k < songTmp.antChn; k++)
 				{
-					if (ton->effTyp == 0x01)
+					ton = &pattTmp[a][(j * MAX_VOICES) + k];
+
+					if (modFormat == FORMAT_NT || modFormat == FORMAT_HMNT)
 					{
-						// arpeggio
-						ton->effTyp = 0x00;
+						// any Dxx == D00 in NT/HMNT
+						if (ton->effTyp == 0xD)
+							ton->eff = 0;
+
+						// effect F with param 0x00 does nothing in NT/HMNT
+						if (ton->effTyp == 0xF && ton->eff == 0)
+							ton->effTyp = 0;
 					}
-					else if (ton->effTyp == 0x02)
+					else if (modFormat == FORMAT_FLT) // Startrekker
 					{
-						// pitch slide
-						if (ton->eff & 0xF0)
+						if (ton->effTyp == 0xE) // remove unsupported "assembly macros" command
 						{
-							ton->effTyp = 0x02;
-							ton->eff >>= 4;
+							ton->effTyp = 0;
+							ton->eff = 0;
 						}
-						else if (ton->eff & 0x0F)
+
+						// Startrekker is always in vblank mode, and limits speed to 0x1F
+						if (ton->effTyp == 0xF && ton->eff > 0x1F)
+							ton->eff = 0x1F;
+					}
+					else if (modFormat == FORMAT_STK)
+					{
+						// convert STK effects to PT effects
+
+						if (!lateSTKVerFlag)
 						{
-							ton->effTyp = 0x01;
+							// old SoundTracker 1.x commands
+
+							if (ton->effTyp == 1)
+							{
+								// arpeggio
+								ton->effTyp = 0;
+							}
+							else if (ton->effTyp == 2)
+							{
+								// pitch slide
+								if (ton->eff & 0xF0)
+								{
+									// pitch slide down
+									ton->effTyp = 2;
+									ton->eff >>= 4;
+								}
+								else if (ton->eff & 0x0F)
+								{
+									// pitch slide up
+									ton->effTyp = 1;
+								}
+							}
 						}
-					}
+						else
+						{
+							// "DFJ SoundTracker II" or later
 
-					// I don't remember why I did this...
-					if (ton->effTyp == 0x0D && ton->eff > 0)
-						ton->effTyp = 0x0A;
-				}
+							if (ton->effTyp == 0xD)
+							{
+								if (veryLateSTKVerFlag) // "DFJ SoundTracker III" or later
+								{
+									// pattern break w/ no param (param must be cleared to fix some songs)
+									ton->eff = 0;
+								}
+								else
+								{
+									// volume slide
+									ton->effTyp = 0xA;
+								}
+							}
+						}
 
-				if (modIsNT && ton->effTyp == 0x0D)
-					ton->eff = 0;
+						// effect F with param 0x00 does nothing in UST/STK (I think?)
+						if (ton->effTyp == 0xF && ton->eff == 0)
+							ton->effTyp = 0;
+					}
+				}
 			}
 		}
-
-		if (tmpPatternEmpty(a))
-		{
-			if (pattTmp[a] != NULL)
-			{
-				free(pattTmp[a]);
-				pattTmp[a] = NULL;
-			}
-		}
 	}
 
 	for (a = 0; a < ai; a++)
@@ -472,13 +616,13 @@
 		if (h_MOD31.instr[a].len == 0)
 			continue;
 
-		if (!allocateTmpInstr(1 + a))
+		if (!allocateTmpInstr(1+a))
 		{
 			showMsg(0, "System message", "Not enough memory!");
 			goto modLoadError;
 		}
 
-		setNoEnvelope(instrTmp[1 + a]);
+		setNoEnvelope(instrTmp[1+a]);
 
 		s = &instrTmp[1+a]->samp[0];
 
@@ -491,34 +635,42 @@
 			goto modLoadError;
 		}
 
-		memcpy(s->name, songTmp.instrName[1+a], 22);
+		if (modFormat != FORMAT_HMNT) // most of "His Master's Noisetracker" songs have junk sample names, so let's not load them
+			memcpy(s->name, songTmp.instrName[1+a], 22);
 
-		if (modIsFEST)
-			h_MOD31.instr[a].fine = (32 - (h_MOD31.instr[a].fine & 0x1F)) >> 1;
+		if (modFormat == FORMAT_HMNT) // finetune in "His Master's NoiseTracker" is different
+			h_MOD31.instr[a].fine = (uint8_t)((-h_MOD31.instr[a].fine & 0x1F) / 2); // one more bit of precision, + inverted
 
-		if (!modIsUST)
-			s->fine = 8 * ((2 * ((h_MOD31.instr[a].fine & 0x0F) ^ 8)) - 16);
-		else
-			s->fine = 0;
+		if (modFormat != FORMAT_STK)
+			s->fine = 8 * ((2 * ((h_MOD31.instr[a].fine & 0xF) ^ 8)) - 16);
 
 		s->pan = 128;
 
 		s->vol = h_MOD31.instr[a].vol;
-		if (s->vol > 64) s->vol = 64;
+		if (s->vol > 64)
+			s->vol = 64;
 
 		s->repS = 2 * SWAP16(h_MOD31.instr[a].repS);
+		s->repL = 2 * SWAP16(h_MOD31.instr[a].repL);
 
-		if (modIsUST)
+		if (s->repL < 2)
+			s->repL = 2;
+
+		/* Ultimate SoundTracker before version 2.5 had loopStart in bytes, not words
+		** XXX: This has to be verified... It's possible that it was before that,
+		** and that this breaks some modules.
+		*/
+		if (mightBeSTK && !lateSTKVerFlag)
 			s->repS /= 2;
 
-		s->repL = 2 * SWAP16(h_MOD31.instr[a].repL);
-
-		if (s->repL <= 2)
+		// fix for poorly converted STK (< v2.5) -> PT/NT modules (FIXME: Worth keeping or not?)
+		if (!mightBeSTK && s->repL > 2 && s->repS+s->repL > s->len)
 		{
-			s->repS = 0;
-			s->repL = 0;
+			if ((s->repS/2) + s->repL <= s->len)
+				s->repS /= 2;
 		}
 
+		// fix overflown loop
 		if (s->repS+s->repL > s->len)
 		{
 			if (s->repS >= s->len)
@@ -532,12 +684,13 @@
 			}
 		}
 
-		if (s->repL > 2)
-			s->typ = 1;
-		else
-			s->typ = 0;
+		if (s->repS+s->repL > 2)
+			s->typ = 1; // enable loop
 
-		if (modIsUST && (s->repS > 2 && s->repS < s->len))
+		/* For Ultimate SoundTracker modules, only the loop area of a looped sample is played.
+		** Skip loading of eventual data present before loop start.
+		*/
+		if (modFormat == FORMAT_STK && (s->repS > 0 && s->repL < s->len))
 		{
 			s->len -= s->repS;
 			fseek(f, s->repS, SEEK_CUR);
@@ -544,41 +697,15 @@
 			s->repS = 0;
 		}
 
-		if (fread(s->pek, s->len, 1, f) == 1)
+		int32_t bytesRead = (int32_t)fread(s->pek, 1, s->len, f);
+		if (bytesRead < s->len)
 		{
-			fixSample(s);
+			int32_t bytesToClear = s->len - bytesRead;
+			memset(&s->pek[bytesRead], 0, bytesToClear);
 		}
-		else
-		{
-			free(s->pek);
-			s->pek = NULL;
-			s->len = 0;
-		}
-	}
 
-	songTmp.speed = 125;
-
-	if (modIsUST)
-	{
-		// repS is initialBPM in UST MODs
-
-		if (songTmp.repS != 120) // 120 is a special case and means 50Hz (125BPM)
-		{
-			if (songTmp.repS > 239)
-				songTmp.repS = 239;
-
-			// convert UST tempo to BPM
-			const double dPALAmigaCiaClk = 709379.0;
-			ciaPeriod = (240 - songTmp.repS) * 122;
-			songTmp.speed = (uint16_t)round((dPALAmigaCiaClk / ciaPeriod) * (125.0 / 50.0));
-		}
-
-		songTmp.repS = 0;
+		fixSample(s);
 	}
-	else if (songTmp.repS >= songTmp.len)
-	{
-		songTmp.repS = 0;
-	}
 
 	fclose(f);
 
@@ -965,7 +1092,7 @@
 	bool check3xx, illegalUxx;
 	uint8_t ha[2048];
 	uint8_t s3mLastDEff[32], s3mLastEEff[32], s3mLastFEff[32];
-	uint8_t s3mLastSEff[32], s3mLastJEff[32], s3mLastGInstr[32], tmp8, typ;
+	uint8_t s3mLastSEff[32], s3mLastJEff[32], s3mLastGInstr[32], typ;
 	int16_t i, j, k, ai, ap, ver, ii, kk, tmp;
 	uint16_t ptnOfs[256];
 	int32_t len;
@@ -1088,11 +1215,11 @@
 		if (ptnOfs[i]  == 0)
 			continue; // empty pattern
 
-		memset(s3mLastDEff,   0, sizeof (s3mLastDEff));
-		memset(s3mLastEEff,   0, sizeof (s3mLastEEff));
-		memset(s3mLastFEff,   0, sizeof (s3mLastFEff));
-		memset(s3mLastSEff,   0, sizeof (s3mLastSEff));
-		memset(s3mLastJEff,   0, sizeof (s3mLastJEff));
+		memset(s3mLastDEff, 0, sizeof (s3mLastDEff));
+		memset(s3mLastEEff, 0, sizeof (s3mLastEEff));
+		memset(s3mLastFEff, 0, sizeof (s3mLastFEff));
+		memset(s3mLastSEff, 0, sizeof (s3mLastSEff));
+		memset(s3mLastJEff, 0, sizeof (s3mLastJEff));
 		memset(s3mLastGInstr, 0, sizeof (s3mLastGInstr));
 
 		fseek(f, ptnOfs[i] << 4, SEEK_SET);
@@ -1141,7 +1268,7 @@
 					// note and sample
 					if (typ & 32)
 					{
-						ton.ton   = pattBuff[k++];
+						ton.ton = pattBuff[k++];
 						ton.instr = pattBuff[k++];
 
 						if (ton.instr > MAX_INST)
@@ -1181,8 +1308,8 @@
 								if ((s3mLastDEff[ii] & 0xF0) == 0xF0 || (s3mLastDEff[ii] & 0x0F) == 0x0F)
 									ton.eff = s3mLastDEff[ii];
 							}
-							else if (ton.effTyp ==  5) ton.eff = s3mLastEEff[ii];
-							else if (ton.effTyp ==  6) ton.eff = s3mLastFEff[ii];
+							else if (ton.effTyp == 5) ton.eff = s3mLastEEff[ii];
+							else if (ton.effTyp == 6) ton.eff = s3mLastFEff[ii];
 							else if (ton.effTyp == 10) ton.eff = s3mLastJEff[ii];
 							else if (ton.effTyp == 19) ton.eff = s3mLastSEff[ii];
 						}
@@ -1189,9 +1316,9 @@
 						
 						if (ton.eff != 0)
 						{
-							     if (ton.effTyp ==  4) s3mLastDEff[ii] = ton.eff;
-							else if (ton.effTyp ==  5) s3mLastEEff[ii] = ton.eff;
-							else if (ton.effTyp ==  6) s3mLastFEff[ii] = ton.eff;
+							     if (ton.effTyp == 4) s3mLastDEff[ii] = ton.eff;
+							else if (ton.effTyp == 5) s3mLastEEff[ii] = ton.eff;
+							else if (ton.effTyp == 6) s3mLastFEff[ii] = ton.eff;
 							else if (ton.effTyp == 10) s3mLastJEff[ii] = ton.eff;
 							else if (ton.effTyp == 19) s3mLastSEff[ii] = ton.eff;
 						}
@@ -1272,8 +1399,8 @@
 							}
 							break;
 
-							case 8:  ton.effTyp = 0x04; break; // H
-							case 9:  ton.effTyp = 0x1D; break; // I
+							case 8: ton.effTyp = 0x04; break; // H
+							case 9: ton.effTyp = 0x1D; break; // I
 							case 10: ton.effTyp = 0x00; break; // J
 							case 11: ton.effTyp = 0x06; break; // K
 							case 12: ton.effTyp = 0x05; break; // L
@@ -1291,11 +1418,7 @@
 								else if (tmp == 0x2) ton.eff |= 0x50;
 								else if (tmp == 0x3) ton.eff |= 0x40;
 								else if (tmp == 0x4) ton.eff |= 0x70;
-								else if (tmp == 0x08)
-								{
-									ton.effTyp = 0x8;
-									ton.eff <<= 4;
-								}
+								// we ignore S8x (set 4-bit pan) becuase it's not compatible with FT2 panning
 								else if (tmp == 0xB) ton.eff |= 0x60;
 								else if (tmp == 0xC) ton.eff |= 0xC0;
 								else if (tmp == 0xD) ton.eff |= 0xD0;
@@ -1312,7 +1435,7 @@
 							case 20: // T
 							{
 								ton.effTyp = 0x0F;
-								if (ton.eff < 0x20)
+								if (ton.eff < 0x21) // Txx with a value lower than 33 (0x21) does nothing in ST3, remove effect
 								{
 									ton.effTyp = 0;
 									ton.eff = 0;
@@ -1320,12 +1443,12 @@
 							}
 							break;
 
-							case 21: // U
+							case 21: // U (fine vibrato, doesn't exist in FT2, convert to normal vibrato)
 							{
 								if ((ton.eff & 0x0F) != 0)
 								{
-									ton.eff = (ton.eff & 0xF0) | (((ton.eff & 15) + 1) / 4);
-									if ((ton.eff & 0x0F) == 0)
+									ton.eff = (ton.eff & 0xF0) | (((ton.eff & 15) + 1) / 4); // divide depth by 4
+									if ((ton.eff & 0x0F) == 0) // depth too low, remove effect
 									{
 										illegalUxx = true;
 										ton.effTyp = 0;
@@ -1366,9 +1489,7 @@
 					if (ton.instr != 0 && ton.effTyp != 0x3)
 						s3mLastGInstr[ii] = ton.instr;
 
-					/* Remove any EDx with no note.
-					** SDx with no note in ST3 = does nothing
-					** EDx with no note in FT2 = still retriggers */
+					// EDx with no note does nothing in ST3 but retrigs in FT2, remove effect
 					if (ton.effTyp == 0xE && (ton.eff & 0xF0) == 0xD0)
 					{
 						if (ton.ton == 0 || ton.ton == 97)
@@ -1378,6 +1499,36 @@
 						}
 					}
 
+					// EDx with a zero will prevent note/instr/vol from updating in ST3, remove everything
+					if (ton.effTyp == 0xE && ton.eff == 0xD0)
+					{
+						ton.ton = 0;
+						ton.instr = 0;
+						ton.vol = 0;
+						ton.effTyp = 0;
+						ton.eff = 0;
+					}
+
+					// ECx with a zero does nothing in ST3 but cuts voice in FT2, remove effect
+					if (ton.effTyp == 0xE && ton.eff == 0xC0)
+					{
+						ton.effTyp = 0;
+						ton.eff = 0;
+					}
+
+					// Vxx with a value higher than 64 (0x40) does nothing in ST3, remove effect
+					if (ton.effTyp == 0x10 && ton.eff > 0x40)
+					{
+						ton.effTyp = 0;
+						ton.eff = 0;
+					}
+
+					if (ton.effTyp > 35)
+					{
+						ton.effTyp = 0;
+						ton.eff = 0;
+					}
+
 					pattTmp[i][(kk * MAX_VOICES) + ii] = ton;
 				}
 			}
@@ -1461,6 +1612,9 @@
 
 				memcpy(s->name, h_S3MInstr.name, 21);
 
+				if (h_S3MInstr.c2Spd > 65535)
+					h_S3MInstr.c2Spd = 65535;
+
 				tuneSample(s, h_S3MInstr.c2Spd);
 
 				s->len  = h_S3MInstr.len;
@@ -1517,7 +1671,7 @@
 
 						memcpy(s->pek, tmpSmp, h_S3MInstr.len * 2);
 
-						s->len  *= 2;
+						s->len *= 2;
 						s->repS *= 2;
 						s->repL *= 2;
 					}
@@ -1561,6 +1715,8 @@
 			{
 				pattTon = &pattTmp[i][(j * MAX_VOICES) + k];
 
+				// fix illegal 3xx slides
+
 				if (pattTon->ton > 0 && pattTon->ton < 97)
 					check3xx = pattTon->effTyp != 0x3;
 
@@ -1573,42 +1729,37 @@
 					}
 				}
 
-				if (pattTon->effTyp == 0x9 && pattTon->eff > 0)
+				/* In ST3 in GUS mode, an overflowed sample offset behaves like this:
+				** - Non-looped sample: Cut voice
+				** - Looped sample: Wrap around loop point
+				**
+				** What we do here is to change the sample offset value to point to
+				** the wrapped sample loop position. This may be off by up to 256 bytes
+				** though...
+				*/
+
+				if (pattTon->effTyp == 0x9 && pattTon->eff > 0 && pattTon->instr > 0 && pattTon->instr <= ai && ai <= 128)
 				{
-					if (pattTon->instr != 0 && pattTon->instr <= ai)
+					s = &instrTmp[pattTon->instr]->samp[0];
+					if (s->len > 0 && (s->typ & 1)) // only handle non-empty looping samples
 					{
-						s = &instrTmp[pattTon->instr]->samp[0];
+						uint32_t loopEnd = s->repS + s->repL;
+						uint32_t offset = pattTon->eff * 256;
 
-						len = s->len;
-
-						tmp8 = 0;
-						if (len > 0)
+						if (offset >= loopEnd)
 						{
-							tmp8 = pattTon->eff;
-							if (tmp8 >= len/256)
-							{
-								if (len/256 < 1)
-									tmp8 = 0;
-								else
-									tmp8 = (uint8_t)((len/256) - 1);
-							}
-						}
+							if (s->repL >= 2)
+								offset = s->repS + ((offset - loopEnd) % s->repL);
+							else
+								offset = s->repS;
 
-						if (tmp8 > 0)
-						{
-							pattTon->eff = tmp8;
+							offset = (offset + (1 << 7)) >> 8; // convert to rounded sample offset value
+							if (offset > 255)
+								offset = 255;
+
+							pattTon->eff = (uint8_t)offset;
 						}
-						else
-						{
-							pattTon->effTyp = 0;
-							pattTon->eff = 0;
-						}
 					}
-					else
-					{
-						pattTon->effTyp = 0;
-						pattTon->eff = 0;
-					}
 				}
 			}
 		}
@@ -1619,7 +1770,7 @@
 	songTmp.antChn = countS3MChannels(ap);
 
 	if (!(config.dontShowAgainFlags & DONT_SHOW_S3M_LOAD_WARNING_FLAG))
-		showMsg(6, "System message", "Warning: S3M channel panning is not compatible with FT2!");
+		showMsg(6, "System message", "Warning: S3M channel panning is ignored because it's not compatible with FT2.");
 
 	moduleLoaded = true;
 	return true;
@@ -2132,8 +2283,12 @@
 			if (s->pek == NULL)
 				return false;
 
-			if (fread(s->pek, l, 1, f) != 1)
-				return false;
+			int32_t bytesRead = (int32_t)fread(s->pek, 1, l, f);
+			if (bytesRead < l)
+			{
+				int32_t bytesToClear = l - bytesRead;
+				memset(&s->pek[bytesRead], 0, bytesToClear);
+			}
 
 			if (bytesToSkip > 0)
 				fseek(f, bytesToSkip, SEEK_CUR);
--- a/src/ft2_pattern_draw.c
+++ b/src/ft2_pattern_draw.c
@@ -977,7 +977,10 @@
 void pattTwoHexOut(uint32_t xPos, uint32_t yPos, uint8_t val, uint32_t color)
 {
 	const uint8_t *ch1Ptr, *ch2Ptr;
-	uint32_t *dstPtr, tmp;
+	uint32_t *dstPtr;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	ch1Ptr = &font4Ptr[(val   >> 4) * FONT4_CHAR_W];
 	ch2Ptr = &font4Ptr[(val & 0x0F) * FONT4_CHAR_W];
@@ -987,6 +990,10 @@
 	{
 		for (uint32_t x = 0; x < FONT4_CHAR_W; x++)
 		{
+#ifdef __arm__
+			if (ch1Ptr[x] != 0) dstPtr[x] = color;
+			if (ch2Ptr[x] != 0) dstPtr[FONT4_CHAR_W+x] = color;
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr[x];
 			if (ch1Ptr[x] != 0) tmp = color;
@@ -995,6 +1002,7 @@
 			tmp = dstPtr[FONT4_CHAR_W+x];
 			if (ch2Ptr[x] != 0) tmp = color;
 			dstPtr[FONT4_CHAR_W+x] = tmp;
+#endif
 		}
 
 		ch1Ptr += FONT4_WIDTH;
@@ -1006,7 +1014,10 @@
 static void pattCharOut(uint32_t xPos, uint32_t yPos, uint8_t chr, uint8_t fontType, uint32_t color)
 {
 	const uint8_t *srcPtr;
-	uint32_t x, y, *dstPtr, tmp;
+	uint32_t x, y, *dstPtr;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos];
 
@@ -1017,10 +1028,15 @@
 		{
 			for (x = 0; x < FONT3_CHAR_W; x++)
 			{
+#ifdef __arm__
+				if (srcPtr[x] != 0)
+					dstPtr[x] = color;
+#else
 				// carefully written like this to generate conditional move instructions (font data is hard to predict)
 				tmp = dstPtr[x];
 				if (srcPtr[x] != 0) tmp = color;
 				dstPtr[x] = tmp;
+#endif
 			}
 
 			srcPtr += FONT3_WIDTH;
@@ -1034,10 +1050,15 @@
 		{
 			for (x = 0; x < FONT4_CHAR_W; x++)
 			{
+#ifdef __arm__
+				if (srcPtr[x] != 0)
+					dstPtr[x] = color;
+#else
 				// carefully written like this to generate conditional move instructions (font data is hard to predict)
 				tmp = dstPtr[x];
 				if (srcPtr[x] != 0) tmp = color;
 				dstPtr[x] = tmp;
+#endif
 			}
 
 			srcPtr += FONT4_WIDTH;
@@ -1051,10 +1072,15 @@
 		{
 			for (x = 0; x < FONT5_CHAR_W; x++)
 			{
+#ifdef __arm__
+				if (srcPtr[x] != 0)
+					dstPtr[x] = color;
+#else
 				// carefully written like this to generate conditional move instructions (font data is hard to predict)
 				tmp = dstPtr[x];
 				if (srcPtr[x] != 0) tmp = color;
 				dstPtr[x] = tmp;
+#endif
 			}
 
 			srcPtr += FONT5_WIDTH;
@@ -1068,10 +1094,15 @@
 		{
 			for (x = 0; x < FONT7_CHAR_W; x++)
 			{
+#ifdef __arm__
+				if (srcPtr[x] != 0)
+					dstPtr[x] = color;
+#else
 				// carefully written like this to generate conditional move instructions (font data is hard to predict)
 				tmp = dstPtr[x];
 				if (srcPtr[x] != 0) tmp = color;
 				dstPtr[x] = tmp;
+#endif
 			}
 
 			srcPtr += FONT7_WIDTH;
@@ -1083,7 +1114,10 @@
 static void drawEmptyNoteSmall(uint32_t xPos, uint32_t yPos, uint32_t color)
 {
 	const uint8_t *srcPtr;
-	uint32_t *dstPtr, tmp;
+	uint32_t *dstPtr;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	srcPtr = &font7Data[18 * FONT7_CHAR_W];
 	dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos];
@@ -1092,10 +1126,15 @@
 	{
 		for (uint32_t x = 0; x < FONT7_CHAR_W*3; x++)
 		{
+#ifdef __arm__
+			if (srcPtr[x] != 0)
+				dstPtr[x] = color;
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr[x];
 			if (srcPtr[x] != 0) tmp = color;
 			dstPtr[x] = tmp;
+#endif
 		}
 
 		srcPtr += FONT7_WIDTH;
@@ -1106,7 +1145,10 @@
 static void drawKeyOffSmall(uint32_t xPos, uint32_t yPos, uint32_t color)
 {
 	const uint8_t *srcPtr;
-	uint32_t *dstPtr, tmp;
+	uint32_t *dstPtr;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	srcPtr = &font7Data[21 * FONT7_CHAR_W];
 	dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + (xPos + 2)];
@@ -1115,10 +1157,15 @@
 	{
 		for (uint32_t x = 0; x < FONT7_CHAR_W*2; x++)
 		{
+#ifdef __arm__
+			if (srcPtr[x] != 0)
+				dstPtr[x] = color;
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr[x];
 			if (srcPtr[x] != 0) tmp = color;
 			dstPtr[x] = tmp;
+#endif
 		}
 
 		srcPtr += FONT7_WIDTH;
@@ -1130,7 +1177,10 @@
 {
 	const uint8_t *ch1Ptr, *ch2Ptr, *ch3Ptr;
 	uint8_t note;
-	uint32_t *dstPtr, char1, char2, char3, tmp;
+	uint32_t *dstPtr, char1, char2, char3;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	assert(ton >= 1 && ton <= 97);
 
@@ -1159,6 +1209,11 @@
 	{
 		for (uint32_t x = 0; x < FONT7_CHAR_W; x++)
 		{
+#ifdef __arm__
+			if (ch1Ptr[x] != 0) dstPtr[x] = color;
+			if (ch2Ptr[x] != 0) dstPtr[FONT7_CHAR_W+x] = color;
+			if (ch3Ptr[x] != 0) dstPtr[((FONT7_CHAR_W*2)-2)+x] = color;
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr[x];
 			if (ch1Ptr[x] != 0) tmp = color;
@@ -1171,6 +1226,7 @@
 			tmp = dstPtr[((FONT7_CHAR_W*2)-2)+x]; // -2 to get correct alignment for ending glyph
 			if (ch3Ptr[x] != 0) tmp = color;
 			dstPtr[((FONT7_CHAR_W*2)-2)+x] = tmp;
+#endif
 		}
 
 		ch1Ptr += FONT7_WIDTH;
@@ -1183,7 +1239,10 @@
 static void drawEmptyNoteMedium(uint32_t xPos, uint32_t yPos, uint32_t color)
 {
 	const uint8_t *srcPtr;
-	uint32_t *dstPtr, tmp;
+	uint32_t *dstPtr;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos];
 	srcPtr = &font4Ptr[43 * FONT4_CHAR_W];
@@ -1192,10 +1251,15 @@
 	{
 		for (uint32_t x = 0; x < FONT4_CHAR_W*3; x++)
 		{
+#ifdef __arm__
+			if (srcPtr[x] != 0)
+				dstPtr[x] = color;
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr[x];
 			if (srcPtr[x] != 0) tmp = color;
 			dstPtr[x] = tmp;
+#endif
 		}
 
 		srcPtr += FONT4_WIDTH;
@@ -1206,7 +1270,10 @@
 static void drawKeyOffMedium(uint32_t xPos, uint32_t yPos, uint32_t color)
 {
 	const uint8_t *srcPtr;
-	uint32_t *dstPtr, tmp;
+	uint32_t *dstPtr;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	srcPtr = &font4Ptr[40 * FONT4_CHAR_W];
 	dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos];
@@ -1215,10 +1282,15 @@
 	{
 		for (uint32_t x = 0; x < FONT4_CHAR_W*3; x++)
 		{
+#ifdef __arm__
+			if (srcPtr[x] != 0)
+				dstPtr[x] = color;
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr[x];
 			if (srcPtr[x] != 0) tmp = color;
 			dstPtr[x] = tmp;
+#endif
 		}
 
 		srcPtr += FONT4_WIDTH;
@@ -1229,7 +1301,10 @@
 static void drawNoteMedium(uint32_t xPos, uint32_t yPos, int32_t ton, uint32_t color)
 {
 	const uint8_t *ch1Ptr, *ch2Ptr, *ch3Ptr;
-	uint32_t note, *dstPtr, char1, char2, char3, tmp;
+	uint32_t note, *dstPtr, char1, char2, char3;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	ton--;
 
@@ -1256,6 +1331,11 @@
 	{
 		for (uint32_t x = 0; x < FONT4_CHAR_W; x++)
 		{
+#ifdef __arm__
+			if (ch1Ptr[x] != 0) dstPtr[x] = color;
+			if (ch2Ptr[x] != 0) dstPtr[FONT4_CHAR_W+x] = color;
+			if (ch3Ptr[x] != 0) dstPtr[(FONT4_CHAR_W*2)+x] = color;
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr[x];
 			if (ch1Ptr[x] != 0) tmp = color;
@@ -1268,6 +1348,7 @@
 			tmp = dstPtr[(FONT4_CHAR_W*2)+x];
 			if (ch3Ptr[x] != 0) tmp = color;
 			dstPtr[(FONT4_CHAR_W*2)+x] = tmp;
+#endif
 		}
 
 		ch1Ptr += FONT4_WIDTH;
@@ -1280,7 +1361,10 @@
 static void drawEmptyNoteBig(uint32_t xPos, uint32_t yPos, uint32_t color)
 {
 	const uint8_t *srcPtr;
-	uint32_t *dstPtr, tmp;
+	uint32_t *dstPtr;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	srcPtr = &font4Ptr[67 * FONT4_CHAR_W];
 	dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos];
@@ -1289,10 +1373,15 @@
 	{
 		for (uint32_t x = 0; x < FONT4_CHAR_W*6; x++)
 		{
+#ifdef __arm__
+			if (srcPtr[x] != 0)
+				dstPtr[x] = color;
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr[x];
 			if (srcPtr[x] != 0) tmp = color;
 			dstPtr[x] = tmp;
+#endif
 		}
 
 		srcPtr += FONT4_WIDTH;
@@ -1303,7 +1392,10 @@
 static void drawKeyOffBig(uint32_t xPos, uint32_t yPos, uint32_t color)
 {
 	const uint8_t *srcPtr;
-	uint32_t *dstPtr, tmp;
+	uint32_t *dstPtr;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 
 	srcPtr = &font4Data[61 * FONT4_CHAR_W];
 	dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos];
@@ -1312,10 +1404,15 @@
 	{
 		for (uint32_t x = 0; x < FONT4_CHAR_W*6; x++)
 		{
+#ifdef __arm__
+			if (srcPtr[x] != 0)
+				dstPtr[x] = color;
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr[x];
 			if (srcPtr[x] != 0) tmp = color;
 			dstPtr[x] = tmp;
+#endif
 		}
 
 		srcPtr += FONT4_WIDTH;
@@ -1327,8 +1424,10 @@
 {
 	const uint8_t *ch1Ptr, *ch2Ptr, *ch3Ptr;
 	uint8_t note;
-	uint32_t *dstPtr, char1, char2, char3, tmp;
-
+	uint32_t *dstPtr, char1, char2, char3;
+#ifndef __arm__
+	uint32_t tmp;
+#endif
 	ton--;
 
 	note = noteTab1[ton];
@@ -1354,6 +1453,11 @@
 	{
 		for (uint32_t x = 0; x < FONT5_CHAR_W; x++)
 		{
+#ifdef __arm__
+			if (ch1Ptr[x] != 0) dstPtr[x] = color;
+			if (ch2Ptr[x] != 0) dstPtr[FONT5_CHAR_W+x] = color;
+			if (ch3Ptr[x] != 0) dstPtr[(FONT5_CHAR_W*2)+x] = color;
+#else
 			// carefully written like this to generate conditional move instructions (font data is hard to predict)
 			tmp = dstPtr[x];
 			if (ch1Ptr[x] != 0) tmp = color;
@@ -1366,6 +1470,7 @@
 			tmp = dstPtr[(FONT5_CHAR_W*2)+x];
 			if (ch3Ptr[x] != 0) tmp = color;
 			dstPtr[(FONT5_CHAR_W*2)+x] = tmp;
+#endif
 		}
 
 		ch1Ptr += FONT5_WIDTH;
--- a/src/ft2_pattern_ed.c
+++ b/src/ft2_pattern_ed.c
@@ -21,8 +21,6 @@
 #include "ft2_mouse.h"
 #include "ft2_video.h"
 
-#include "ft2_module_loader.h"
-
 // for pattern marking w/ keyboard
 static int8_t lastChMark;
 static int16_t lastRowMark;
--- a/src/ft2_replayer.c
+++ b/src/ft2_replayer.c
@@ -1244,7 +1244,7 @@
 
 			if (++ch->envVCnt == ins->envVP[envPos][0])
 			{
-				ch->envVAmp = (ins->envVP[envPos][1] & 0xFF) << 8;
+				ch->envVAmp = ins->envVP[envPos][1] << 8;
 
 				envPos++;
 				if (ins->envVTyp & 4)
@@ -1314,34 +1314,25 @@
 				}
 			}
 
-			/* original FT2 method with lower precision (finalVol = 0..256)
-			envVal >>= 8;
-			ch->finalVol = (song.globVol * (((envVal * ch->outVol) * ch->fadeOutAmp) >> (16 + 2))) >> 7;
-			*/
-
-			/* calculate with four times more precision (finalVol = 0..2048)
+			/* calculate with 256 times more precision (vol = 0..65535)
 			** Also, vol envelope range is now 0..16384 instead of being shifted to 0..64
 			*/
 
 			uint32_t vol1 = song.globVol * ch->outVol * ch->fadeOutAmp; // 0..64 * 0..64 * 0..32768 = 0..134217728
-			uint32_t vol2 = envVal << 2; // 0..16384 * 2^2 = 0..65536
+			uint32_t vol2 = envVal << 7; // 0..16384 * 2^7 = 0..2097152
 
-			vol = ((uint64_t)vol1 * vol2) >> 32; // 0..2048
+			vol = ((uint64_t)vol1 * vol2) >> 32; // 0..65536
 
 			ch->status |= IS_Vol;
 		}
 		else
 		{
-			/* original FT2 method with lower precision (finalVol = 0..256)
-			ch->finalVol = (song.globVol * (((ch->outVol << 4) * ch->fadeOutAmp) >> 16)) >> 7;
-			*/
-
 			// calculate with four times more precision (finalVol = 0..2048)
-			vol = (song.globVol * ch->outVol * ch->fadeOutAmp) >> 16; // 0..64 * 0..64 * 0..32768 = 0..2048
+			vol = (song.globVol * ch->outVol * ch->fadeOutAmp) >> 11; // 0..64 * 0..64 * 0..32768 = 0..65536
 		}
 
-		if (vol > 2047)
-			vol = 2047; // range is now 0..2047 to prevent MUL overflow when voice volume is calculated
+		if (vol > 65535)
+			vol = 65535; // range is now 0..65535 to prevent MUL overflow when voice volume is calculated
 
 		ch->finalVol = (uint16_t)vol;
 	}
@@ -3127,7 +3118,7 @@
 	editor.curPlaySmp = 255;
 
 	stopAllScopes();
-	resetDitherSeed();
+	resetAudioDither();
 	resetOldRates();
 
 	// wait for scope thread to finish, so that we know pointers aren't deprecated
--- a/src/ft2_sampling.c
+++ b/src/ft2_sampling.c
@@ -233,8 +233,6 @@
 	int32_t smpIdx, smpNum;
 	uint32_t *centerPtrL, *centerPtrR, pixVal;
 
-#define SAMPLEL_AREA_Y_CENTER 250
-
 	pixVal = video.palette[PAL_PATTEXT];
 
 	// select buffer currently not being written to (double-buffering)
@@ -338,12 +336,11 @@
 
 void startSampling(void)
 {
-	int16_t result;
-
 #if SDL_PATCHLEVEL < 5
-	okBox(2, "System message", "This program needs to be compiled with SDL 2.0.5 or later to support audio sampling.");
+	okBox(0, "System message", "This program needs to be compiled with SDL 2.0.5 or later to support audio sampling.");
 	return;
 #else
+	int16_t result;
 	SDL_AudioSpec want, have;
 	sampleTyp *s, *nextSmp;
 
@@ -350,7 +347,7 @@
 	if (editor.samplingAudioFlag || editor.curInstr == 0)
 		return;
 
-	result = okBox(9, "System request", "Stereo sampling will use the next sample slot. While ongoing, press any key to stop. ");
+	result = okBox(9, "System request", "Stereo sampling will use the next sample slot. While ongoing, press any key to stop.");
 	if (result == 0 || result == 3)
 		return;
 
--- a/src/ft2_scopes.c
+++ b/src/ft2_scopes.c
@@ -435,11 +435,11 @@
 	scope_t tempState;
 
 	scopesUpdatingFlag = true;
-	for (uint32_t i = 0; i < song.antChn; i++)
+
+	sc = scope;
+	for (uint32_t i = 0; i < song.antChn; i++, sc++)
 	{
-		sc = &scope[i];
 		tempState = *sc; // cache it
-
 		if (!tempState.active)
 			continue; // scope is not active, no need
 
@@ -585,15 +585,15 @@
 	volatile scope_t *sc;
 	sampleTyp *smpPtr;
 
-	for (int32_t i = 0; i < song.antChn; i++)
+	sc = scope;
+	ch = chSyncData->channels;
+	for (int32_t i = 0; i < song.antChn; i++, sc++, ch++)
 	{
-		sc = &scope[i];
-		ch = &chSyncData->channels[i];
 		status = scopeUpdateStatus[i];
 
 		// set scope volume
 		if (status & IS_Vol)
-			sc->SVol = (int8_t)(((ch->finalVol * SCOPE_HEIGHT) + (1 << 10)) >> 11); // rounded
+			sc->SVol = (int8_t)(((ch->finalVol * SCOPE_HEIGHT) + (1 << 15)) >> 16); // rounded
 
 		// set scope frequency
 		if (status & IS_Period)
--- a/src/ft2_video.c
+++ b/src/ft2_video.c
@@ -775,6 +775,18 @@
 	uint8_t i, oldUpscaleFactor;
 	SDL_DisplayMode dm;
 
+	/* Kludge for Raspbarry Pi. Upscaling of 3x or higher makes everything slow as a snail.
+	** This hack unfortunately applies to any ARM based device, but I doubt 3x/4x would run
+	** smooth on any ARM device suitable for the FT2 clone anyway (excluding tablets/phones).
+	*/
+#ifdef __arm__
+	if ((config.windowFlags & WINSIZE_3X) || (config.windowFlags & WINSIZE_4X))
+	{
+		config.windowFlags &= ~(WINSIZE_1X + WINSIZE_2X + WINSIZE_3X + WINSIZE_4X);
+		config.windowFlags |= WINSIZE_AUTO;
+	}
+#endif
+
 	oldUpscaleFactor = video.upscaleFactor;
 	if (config.windowFlags & WINSIZE_AUTO)
 	{
@@ -793,6 +805,12 @@
 
 			if (i == 0)
 				video.upscaleFactor = 1; // 1x is not going to fit, but use 1x anyways...
+
+			// kludge (read comment above)
+#ifdef __arm__
+			if (video.upscaleFactor > 2)
+				video.upscaleFactor = 2;
+#endif
 		}
 		else
 		{
--- a/src/helpdata/FT2.HLP
+++ b/src/helpdata/FT2.HLP
@@ -781,7 +781,7 @@
 Please note that original FT2 can't load this config entry,
 clone only.
 
->@[email protected] dither:
+>@X040@C0011-bit dither:
 >@X060@C002
 Works for 16-bit audio mode only.
 Applies random scaled values to the mixed samples before truncating to 16-bit.
--- a/src/helpdata/ft2_help_data.h
+++ b/src/helpdata/ft2_help_data.h
@@ -3,9 +3,9 @@
 
 #include <stdint.h>
 
-#define HELP_DATA_LEN 27914
+#define HELP_DATA_LEN 27912
 
-const uint8_t helpData[27914] =
+const uint8_t helpData[27912] =
 {
 	0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
@@ -1784,556 +1784,555 @@
 	0x6C,0x6F,0x61,0x64,0x20,0x74,0x68,0x69,0x73,0x20,0x63,0x6F,
 	0x6E,0x66,0x69,0x67,0x20,0x65,0x6E,0x74,0x72,0x79,0x2C,0x0B,
 	0x63,0x6C,0x6F,0x6E,0x65,0x20,0x6F,0x6E,0x6C,0x79,0x2E,0x00,
-	0x1A,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
-	0x31,0x2E,0x35,0x2D,0x62,0x69,0x74,0x20,0x64,0x69,0x74,0x68,
-	0x65,0x72,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
-	0x30,0x30,0x32,0x21,0x57,0x6F,0x72,0x6B,0x73,0x20,0x66,0x6F,
-	0x72,0x20,0x31,0x36,0x2D,0x62,0x69,0x74,0x20,0x61,0x75,0x64,
-	0x69,0x6F,0x20,0x6D,0x6F,0x64,0x65,0x20,0x6F,0x6E,0x6C,0x79,
-	0x2E,0x4E,0x41,0x70,0x70,0x6C,0x69,0x65,0x73,0x20,0x72,0x61,
-	0x6E,0x64,0x6F,0x6D,0x20,0x73,0x63,0x61,0x6C,0x65,0x64,0x20,
-	0x76,0x61,0x6C,0x75,0x65,0x73,0x20,0x74,0x6F,0x20,0x74,0x68,
-	0x65,0x20,0x6D,0x69,0x78,0x65,0x64,0x20,0x73,0x61,0x6D,0x70,
-	0x6C,0x65,0x73,0x20,0x62,0x65,0x66,0x6F,0x72,0x65,0x20,0x74,
-	0x72,0x75,0x6E,0x63,0x61,0x74,0x69,0x6E,0x67,0x20,0x74,0x6F,
-	0x20,0x31,0x36,0x2D,0x62,0x69,0x74,0x2E,0x46,0x54,0x68,0x69,
-	0x73,0x20,0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,0x69,0x6E,0x20,
-	0x74,0x68,0x65,0x6F,0x72,0x79,0x20,0x6C,0x6F,0x77,0x65,0x72,
-	0x20,0x74,0x68,0x65,0x20,0x71,0x75,0x61,0x6E,0x74,0x69,0x7A,
-	0x61,0x74,0x69,0x6F,0x6E,0x20,0x6E,0x6F,0x69,0x73,0x65,0x2E,
-	0x20,0x31,0x36,0x2D,0x62,0x69,0x74,0x20,0x61,0x6C,0x72,0x65,
-	0x61,0x64,0x79,0x20,0x68,0x61,0x73,0x46,0x61,0x20,0x70,0x72,
-	0x65,0x74,0x74,0x79,0x20,0x6C,0x6F,0x77,0x20,0x6E,0x6F,0x69,
-	0x73,0x65,0x20,0x66,0x6C,0x6F,0x6F,0x72,0x2C,0x20,0x73,0x6F,
-	0x20,0x64,0x6F,0x6E,0x27,0x74,0x20,0x65,0x78,0x70,0x65,0x63,
-	0x74,0x20,0x61,0x6E,0x79,0x20,0x61,0x75,0x64,0x69,0x62,0x6C,
-	0x65,0x20,0x64,0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x63,0x65,
-	0x20,0x68,0x65,0x72,0x65,0x2E,0x1F,0x41,0x6C,0x73,0x6F,0x20,
-	0x61,0x70,0x70,0x6C,0x69,0x65,0x73,0x20,0x66,0x6F,0x72,0x20,
-	0x57,0x41,0x56,0x20,0x72,0x65,0x6E,0x64,0x65,0x72,0x69,0x6E,
-	0x67,0x2E,0x00,0x19,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
-	0x30,0x30,0x31,0x41,0x6D,0x70,0x6C,0x69,0x66,0x69,0x63,0x61,
-	0x74,0x69,0x6F,0x6E,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
-	0x40,0x43,0x30,0x30,0x32,0x46,0x41,0x6D,0x70,0x6C,0x69,0x66,
-	0x69,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,
-	0x6D,0x65,0x20,0x77,0x68,0x65,0x6E,0x20,0x6D,0x69,0x78,0x69,
-	0x6E,0x67,0x2E,0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x73,
-	0x65,0x74,0x20,0x74,0x68,0x69,0x73,0x20,0x6F,0x6E,0x65,0x20,
-	0x74,0x6F,0x6F,0x20,0x68,0x69,0x67,0x68,0x2C,0x20,0x79,0x6F,
-	0x75,0x27,0x6C,0x6C,0x3A,0x67,0x65,0x74,0x20,0x64,0x69,0x73,
-	0x74,0x6F,0x72,0x74,0x69,0x6F,0x6E,0x2E,0x20,0x33,0x32,0x58,
-	0x20,0x65,0x71,0x75,0x61,0x6C,0x73,0x20,0x66,0x75,0x6C,0x6C,
-	0x20,0x61,0x6D,0x70,0x6C,0x69,0x74,0x75,0x64,0x65,0x20,0x66,
-	0x6F,0x72,0x20,0x6F,0x6E,0x65,0x20,0x63,0x68,0x61,0x6E,0x6E,
-	0x65,0x6C,0x2E,0x00,0x1B,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
-	0x43,0x30,0x30,0x31,0x46,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,
-	0x79,0x20,0x74,0x61,0x62,0x6C,0x65,0x3A,0x0B,0x3E,0x40,0x58,
-	0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x54,0x68,0x65,
-	0x20,0x6C,0x69,0x6E,0x65,0x61,0x72,0x20,0x66,0x72,0x65,0x71,
-	0x75,0x65,0x6E,0x63,0x79,0x20,0x74,0x61,0x62,0x6C,0x65,0x20,
-	0x6D,0x61,0x6B,0x65,0x73,0x20,0x61,0x6C,0x6C,0x20,0x70,0x69,
-	0x74,0x63,0x68,0x20,0x62,0x65,0x6E,0x64,0x73,0x20,0x72,0x75,
-	0x6E,0x20,0x69,0x6E,0x20,0x63,0x6F,0x6E,0x73,0x74,0x61,0x6E,
-	0x74,0x3F,0x73,0x70,0x65,0x65,0x64,0x2C,0x20,0x69,0x6E,0x64,
-	0x65,0x70,0x65,0x6E,0x64,0x65,0x6E,0x74,0x20,0x6F,0x66,0x20,
-	0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,
-	0x66,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x2E,0x20,0x49,
-	0x66,0x20,0x79,0x6F,0x75,0x20,0x73,0x77,0x69,0x74,0x63,0x68,
-	0x20,0x74,0x68,0x69,0x73,0x41,0x6F,0x6E,0x65,0x2C,0x20,0x6F,
-	0x6E,0x20,0x61,0x20,0x66,0x69,0x6E,0x69,0x73,0x68,0x65,0x64,
-	0x20,0x73,0x6F,0x6E,0x67,0x2C,0x20,0x69,0x74,0x20,0x6D,0x69,
-	0x67,0x68,0x74,0x20,0x73,0x6F,0x75,0x6E,0x64,0x20,0x73,0x74,
-	0x72,0x61,0x6E,0x67,0x65,0x20,0x69,0x66,0x20,0x74,0x68,0x65,
-	0x20,0x73,0x6F,0x75,0x6E,0x64,0x20,0x75,0x73,0x65,0x73,0x0D,
-	0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x65,0x73,
-	0x2E,0x00,0x20,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,
-	0x31,0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,
-	0x6F,0x6E,0x2C,0x20,0x4C,0x61,0x79,0x6F,0x75,0x74,0x3A,0x01,
-	0x3E,0x29,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
-	0x31,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6C,0x61,0x79,
-	0x6F,0x75,0x74,0x2C,0x20,0x68,0x65,0x78,0x20,0x6E,0x75,0x6D,
-	0x62,0x65,0x72,0x69,0x6E,0x67,0x3A,0x0B,0x3E,0x40,0x58,0x30,
-	0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x41,0x49,0x66,0x20,0x79,
-	0x6F,0x75,0x20,0x75,0x73,0x65,0x20,0x70,0x61,0x74,0x74,0x65,
-	0x72,0x6E,0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x61,0x72,0x65,
-	0x20,0x6C,0x6F,0x6E,0x67,0x65,0x72,0x20,0x74,0x68,0x61,0x6E,
-	0x20,0x39,0x39,0x20,0x6C,0x69,0x6E,0x65,0x73,0x2C,0x20,0x79,
-	0x6F,0x75,0x20,0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,0x75,0x73,
-	0x65,0x45,0x68,0x65,0x78,0x20,0x63,0x6F,0x75,0x6E,0x74,0x69,
-	0x6E,0x67,0x20,0x73,0x69,0x6E,0x63,0x65,0x20,0x74,0x68,0x65,
-	0x72,0x65,0x20,0x61,0x72,0x65,0x20,0x6F,0x6E,0x6C,0x79,0x20,
-	0x32,0x20,0x64,0x69,0x67,0x69,0x74,0x73,0x20,0x69,0x6E,0x20,
-	0x74,0x68,0x65,0x20,0x6C,0x69,0x6E,0x65,0x20,0x6E,0x75,0x6D,
-	0x62,0x65,0x72,0x20,0x63,0x6F,0x6C,0x75,0x6D,0x6E,0x2E,0x00,
-	0x17,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
-	0x53,0x63,0x6F,0x70,0x65,0x20,0x73,0x74,0x79,0x6C,0x65,0x3A,
-	0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
-	0x43,0x22,0x4F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x22,0x20,
-	0x77,0x69,0x6C,0x6C,0x20,0x73,0x68,0x6F,0x77,0x20,0x74,0x68,
-	0x65,0x20,0x70,0x6F,0x69,0x6E,0x74,0x73,0x20,0x69,0x6E,0x20,
-	0x74,0x68,0x65,0x20,0x73,0x63,0x6F,0x70,0x65,0x73,0x20,0x61,
-	0x73,0x20,0x70,0x69,0x78,0x65,0x6C,0x73,0x20,0x28,0x6C,0x69,
-	0x6B,0x65,0x20,0x46,0x54,0x32,0x29,0x2E,0x41,0x22,0x4C,0x69,
-	0x6E,0x65,0x64,0x22,0x20,0x77,0x69,0x6C,0x6C,0x20,0x64,0x72,
-	0x61,0x77,0x20,0x6C,0x69,0x6E,0x65,0x73,0x20,0x62,0x65,0x74,
-	0x77,0x65,0x65,0x6E,0x20,0x74,0x68,0x65,0x20,0x70,0x6F,0x69,
-	0x6E,0x74,0x73,0x2C,0x20,0x6C,0x69,0x6B,0x65,0x20,0x61,0x6E,
-	0x20,0x6F,0x73,0x63,0x69,0x6C,0x6C,0x6F,0x73,0x63,0x6F,0x70,
-	0x65,0x2E,0x00,0x27,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,
-	0x30,0x31,0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,
-	0x69,0x6F,0x6E,0x2C,0x20,0x4D,0x69,0x73,0x63,0x65,0x6C,0x6C,
-	0x61,0x6E,0x65,0x6F,0x75,0x73,0x3A,0x01,0x3E,0x15,0x3E,0x40,
-	0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x53,0x79,
-	0x6E,0x63,0x20,0x6F,0x66,0x66,0x3A,0x0B,0x3E,0x40,0x58,0x30,
-	0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3F,0x54,0x65,0x6C,0x6C,
-	0x73,0x20,0x74,0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,
-	0x6D,0x20,0x74,0x6F,0x20,0x6E,0x6F,0x74,0x20,0x75,0x73,0x65,
-	0x20,0x56,0x53,0x79,0x6E,0x63,0x20,0x66,0x6F,0x72,0x20,0x76,
-	0x69,0x64,0x65,0x6F,0x2E,0x20,0x49,0x66,0x20,0x79,0x6F,0x75,
-	0x72,0x20,0x6D,0x6F,0x6E,0x69,0x74,0x6F,0x72,0x27,0x73,0x40,
-	0x72,0x65,0x66,0x72,0x65,0x73,0x68,0x20,0x72,0x61,0x74,0x65,
-	0x20,0x69,0x73,0x20,0x6E,0x6F,0x74,0x20,0x36,0x30,0x48,0x7A,
-	0x20,0x28,0x6F,0x72,0x20,0x35,0x39,0x48,0x7A,0x29,0x2C,0x20,
-	0x74,0x68,0x65,0x6E,0x20,0x56,0x53,0x79,0x6E,0x63,0x20,0x69,
-	0x73,0x20,0x61,0x6C,0x77,0x61,0x79,0x73,0x20,0x6F,0x66,0x66,
-	0x20,0x66,0x6F,0x72,0x45,0x74,0x68,0x69,0x73,0x20,0x70,0x72,
-	0x6F,0x67,0x72,0x61,0x6D,0x2E,0x20,0x4E,0x6F,0x74,0x20,0x68,
-	0x61,0x76,0x69,0x6E,0x67,0x20,0x56,0x53,0x79,0x6E,0x63,0x20,
-	0x77,0x69,0x6C,0x6C,0x20,0x72,0x65,0x73,0x75,0x6C,0x74,0x20,
-	0x69,0x6E,0x20,0x6C,0x65,0x73,0x73,0x20,0x69,0x6E,0x70,0x75,
-	0x74,0x2F,0x76,0x69,0x64,0x65,0x6F,0x20,0x64,0x65,0x6C,0x61,
-	0x79,0x2C,0x1E,0x62,0x75,0x74,0x20,0x61,0x6C,0x73,0x6F,0x20,
-	0x70,0x6F,0x74,0x65,0x6E,0x74,0x69,0x61,0x6C,0x20,0x73,0x74,
-	0x75,0x74,0x74,0x65,0x72,0x69,0x6E,0x67,0x2E,0x01,0x20,0x18,
+	0x18,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
+	0x31,0x2D,0x62,0x69,0x74,0x20,0x64,0x69,0x74,0x68,0x65,0x72,
+	0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
+	0x32,0x21,0x57,0x6F,0x72,0x6B,0x73,0x20,0x66,0x6F,0x72,0x20,
+	0x31,0x36,0x2D,0x62,0x69,0x74,0x20,0x61,0x75,0x64,0x69,0x6F,
+	0x20,0x6D,0x6F,0x64,0x65,0x20,0x6F,0x6E,0x6C,0x79,0x2E,0x4E,
+	0x41,0x70,0x70,0x6C,0x69,0x65,0x73,0x20,0x72,0x61,0x6E,0x64,
+	0x6F,0x6D,0x20,0x73,0x63,0x61,0x6C,0x65,0x64,0x20,0x76,0x61,
+	0x6C,0x75,0x65,0x73,0x20,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,
+	0x6D,0x69,0x78,0x65,0x64,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
+	0x73,0x20,0x62,0x65,0x66,0x6F,0x72,0x65,0x20,0x74,0x72,0x75,
+	0x6E,0x63,0x61,0x74,0x69,0x6E,0x67,0x20,0x74,0x6F,0x20,0x31,
+	0x36,0x2D,0x62,0x69,0x74,0x2E,0x46,0x54,0x68,0x69,0x73,0x20,
+	0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,0x69,0x6E,0x20,0x74,0x68,
+	0x65,0x6F,0x72,0x79,0x20,0x6C,0x6F,0x77,0x65,0x72,0x20,0x74,
+	0x68,0x65,0x20,0x71,0x75,0x61,0x6E,0x74,0x69,0x7A,0x61,0x74,
+	0x69,0x6F,0x6E,0x20,0x6E,0x6F,0x69,0x73,0x65,0x2E,0x20,0x31,
+	0x36,0x2D,0x62,0x69,0x74,0x20,0x61,0x6C,0x72,0x65,0x61,0x64,
+	0x79,0x20,0x68,0x61,0x73,0x46,0x61,0x20,0x70,0x72,0x65,0x74,
+	0x74,0x79,0x20,0x6C,0x6F,0x77,0x20,0x6E,0x6F,0x69,0x73,0x65,
+	0x20,0x66,0x6C,0x6F,0x6F,0x72,0x2C,0x20,0x73,0x6F,0x20,0x64,
+	0x6F,0x6E,0x27,0x74,0x20,0x65,0x78,0x70,0x65,0x63,0x74,0x20,
+	0x61,0x6E,0x79,0x20,0x61,0x75,0x64,0x69,0x62,0x6C,0x65,0x20,
+	0x64,0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x63,0x65,0x20,0x68,
+	0x65,0x72,0x65,0x2E,0x1F,0x41,0x6C,0x73,0x6F,0x20,0x61,0x70,
+	0x70,0x6C,0x69,0x65,0x73,0x20,0x66,0x6F,0x72,0x20,0x57,0x41,
+	0x56,0x20,0x72,0x65,0x6E,0x64,0x65,0x72,0x69,0x6E,0x67,0x2E,
+	0x00,0x19,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+	0x31,0x41,0x6D,0x70,0x6C,0x69,0x66,0x69,0x63,0x61,0x74,0x69,
+	0x6F,0x6E,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+	0x30,0x30,0x32,0x46,0x41,0x6D,0x70,0x6C,0x69,0x66,0x69,0x65,
+	0x73,0x20,0x74,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,
+	0x20,0x77,0x68,0x65,0x6E,0x20,0x6D,0x69,0x78,0x69,0x6E,0x67,
+	0x2E,0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x73,0x65,0x74,
+	0x20,0x74,0x68,0x69,0x73,0x20,0x6F,0x6E,0x65,0x20,0x74,0x6F,
+	0x6F,0x20,0x68,0x69,0x67,0x68,0x2C,0x20,0x79,0x6F,0x75,0x27,
+	0x6C,0x6C,0x3A,0x67,0x65,0x74,0x20,0x64,0x69,0x73,0x74,0x6F,
+	0x72,0x74,0x69,0x6F,0x6E,0x2E,0x20,0x33,0x32,0x58,0x20,0x65,
+	0x71,0x75,0x61,0x6C,0x73,0x20,0x66,0x75,0x6C,0x6C,0x20,0x61,
+	0x6D,0x70,0x6C,0x69,0x74,0x75,0x64,0x65,0x20,0x66,0x6F,0x72,
+	0x20,0x6F,0x6E,0x65,0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,
+	0x2E,0x00,0x1B,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
+	0x30,0x31,0x46,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x20,
+	0x74,0x61,0x62,0x6C,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
+	0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x54,0x68,0x65,0x20,0x6C,
+	0x69,0x6E,0x65,0x61,0x72,0x20,0x66,0x72,0x65,0x71,0x75,0x65,
+	0x6E,0x63,0x79,0x20,0x74,0x61,0x62,0x6C,0x65,0x20,0x6D,0x61,
+	0x6B,0x65,0x73,0x20,0x61,0x6C,0x6C,0x20,0x70,0x69,0x74,0x63,
+	0x68,0x20,0x62,0x65,0x6E,0x64,0x73,0x20,0x72,0x75,0x6E,0x20,
+	0x69,0x6E,0x20,0x63,0x6F,0x6E,0x73,0x74,0x61,0x6E,0x74,0x3F,
+	0x73,0x70,0x65,0x65,0x64,0x2C,0x20,0x69,0x6E,0x64,0x65,0x70,
+	0x65,0x6E,0x64,0x65,0x6E,0x74,0x20,0x6F,0x66,0x20,0x74,0x68,
+	0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x66,0x72,
+	0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x2E,0x20,0x49,0x66,0x20,
+	0x79,0x6F,0x75,0x20,0x73,0x77,0x69,0x74,0x63,0x68,0x20,0x74,
+	0x68,0x69,0x73,0x41,0x6F,0x6E,0x65,0x2C,0x20,0x6F,0x6E,0x20,
+	0x61,0x20,0x66,0x69,0x6E,0x69,0x73,0x68,0x65,0x64,0x20,0x73,
+	0x6F,0x6E,0x67,0x2C,0x20,0x69,0x74,0x20,0x6D,0x69,0x67,0x68,
+	0x74,0x20,0x73,0x6F,0x75,0x6E,0x64,0x20,0x73,0x74,0x72,0x61,
+	0x6E,0x67,0x65,0x20,0x69,0x66,0x20,0x74,0x68,0x65,0x20,0x73,
+	0x6F,0x75,0x6E,0x64,0x20,0x75,0x73,0x65,0x73,0x0D,0x70,0x6F,
+	0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x65,0x73,0x2E,0x00,
+	0x20,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x43,
+	0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,
+	0x2C,0x20,0x4C,0x61,0x79,0x6F,0x75,0x74,0x3A,0x01,0x3E,0x29,
 	0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,
-	0x69,0x78,0x65,0x6C,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x3A,
-	0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
-	0x43,0x41,0x70,0x70,0x6C,0x69,0x65,0x73,0x20,0x61,0x20,0x73,
-	0x75,0x62,0x70,0x69,0x78,0x65,0x6C,0x20,0x66,0x69,0x6C,0x74,
-	0x65,0x72,0x20,0x74,0x68,0x61,0x74,0x20,0x69,0x73,0x20,0x75,
-	0x73,0x65,0x64,0x20,0x77,0x68,0x65,0x6E,0x20,0x74,0x68,0x65,
-	0x20,0x77,0x69,0x6E,0x64,0x6F,0x77,0x20,0x69,0x73,0x20,0x75,
-	0x70,0x73,0x63,0x61,0x6C,0x65,0x64,0x2E,0x43,0x54,0x68,0x69,
-	0x73,0x20,0x61,0x6C,0x73,0x6F,0x20,0x6D,0x61,0x6B,0x65,0x73,
-	0x20,0x66,0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,
-	0x6D,0x6F,0x64,0x65,0x20,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,
-	0x65,0x6C,0x79,0x20,0x73,0x74,0x72,0x65,0x74,0x63,0x68,0x20,
-	0x6F,0x75,0x74,0x20,0x69,0x66,0x20,0x69,0x74,0x20,0x64,0x69,
-	0x64,0x6E,0x27,0x74,0x44,0x61,0x6C,0x72,0x65,0x61,0x64,0x79,
-	0x2E,0x20,0x50,0x6C,0x65,0x61,0x73,0x65,0x20,0x6B,0x65,0x65,
-	0x70,0x20,0x69,0x6E,0x20,0x6D,0x69,0x6E,0x64,0x20,0x74,0x68,
-	0x61,0x74,0x20,0x74,0x68,0x69,0x73,0x20,0x77,0x69,0x6C,0x6C,
-	0x20,0x6D,0x61,0x6B,0x65,0x20,0x70,0x69,0x78,0x65,0x6C,0x73,
-	0x20,0x6C,0x6F,0x6F,0x6B,0x20,0x62,0x6C,0x75,0x72,0x72,0x79,
-	0x2E,0x00,0x23,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,
-	0x31,0x41,0x64,0x76,0x61,0x6E,0x63,0x65,0x64,0x20,0x65,0x64,
-	0x69,0x74,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,
-	0x3A,0x20,0x01,0x3E,0x1E,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
-	0x43,0x30,0x30,0x31,0x43,0x6F,0x70,0x79,0x2F,0x50,0x61,0x73,
-	0x74,0x65,0x20,0x6D,0x61,0x73,0x6B,0x69,0x6E,0x67,0x3A,0x0B,
-	0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x37,
-	0x54,0x68,0x65,0x20,0x6D,0x61,0x73,0x6B,0x69,0x6E,0x67,0x20,
-	0x69,0x73,0x20,0x75,0x73,0x65,0x64,0x20,0x66,0x6F,0x72,0x20,
-	0x63,0x6F,0x70,0x79,0x69,0x6E,0x67,0x2F,0x70,0x61,0x73,0x74,
-	0x69,0x6E,0x67,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x70,0x61,0x72,
-	0x74,0x73,0x20,0x6F,0x66,0x20,0x61,0x46,0x22,0x6E,0x6F,0x74,
-	0x65,0x2D,0x63,0x65,0x6C,0x6C,0x22,0x2E,0x20,0x54,0x68,0x65,
-	0x20,0x64,0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x74,0x20,0x70,
-	0x61,0x72,0x74,0x73,0x20,0x6F,0x66,0x20,0x61,0x20,0x22,0x6E,
-	0x6F,0x74,0x65,0x2D,0x63,0x65,0x6C,0x6C,0x22,0x20,0x69,0x73,
-	0x20,0x4E,0x6F,0x74,0x65,0x2C,0x20,0x49,0x6E,0x73,0x74,0x72,
-	0x2E,0x20,0x6E,0x72,0x2E,0x2C,0x20,0x56,0x6F,0x6C,0x75,0x6D,
-	0x65,0x2C,0x20,0x45,0x66,0x66,0x65,0x63,0x74,0x20,0x6E,0x72,
-	0x20,0x26,0x20,0x45,0x66,0x66,0x65,0x63,0x74,0x20,0x64,0x61,
-	0x74,0x61,0x2E,0x34,0x3E,0x41,0x73,0x20,0x79,0x6F,0x75,0x20,
-	0x63,0x61,0x6E,0x20,0x73,0x65,0x65,0x20,0x69,0x6E,0x20,0x74,
-	0x68,0x65,0x20,0x77,0x69,0x6E,0x64,0x6F,0x77,0x20,0x74,0x68,
-	0x65,0x72,0x65,0x20,0x61,0x72,0x65,0x20,0x33,0x20,0x63,0x6F,
-	0x6C,0x75,0x6D,0x6E,0x73,0x20,0x6F,0x66,0x3D,0x22,0x65,0x6E,
-	0x61,0x62,0x6C,0x65,0x2F,0x64,0x69,0x73,0x61,0x62,0x6C,0x65,
-	0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x73,0x22,0x20,0x77,0x68,
-	0x69,0x63,0x68,0x20,0x68,0x61,0x73,0x20,0x74,0x68,0x65,0x20,
-	0x6C,0x65,0x74,0x74,0x65,0x72,0x73,0x20,0x43,0x2C,0x50,0x20,
-	0x26,0x20,0x54,0x20,0x61,0x62,0x6F,0x76,0x65,0x2E,0x45,0x3E,
-	0x43,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x63,0x6F,0x70,0x79,
-	0x2C,0x20,0x69,0x74,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,
-	0x73,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x70,0x61,0x72,0x74,
-	0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x67,0x6F,0x65,0x73,0x20,
-	0x69,0x6E,0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x70,
-	0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E,0x3E,0x3E,0x50,0x20,
-	0x6D,0x65,0x61,0x6E,0x73,0x20,0x70,0x61,0x73,0x74,0x65,0x20,
-	0x61,0x6E,0x64,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x73,
-	0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x70,0x61,0x72,0x74,0x73,
-	0x20,0x74,0x68,0x61,0x74,0x20,0x67,0x6F,0x65,0x73,0x20,0x6F,
-	0x75,0x74,0x20,0x66,0x72,0x6F,0x6D,0x20,0x74,0x68,0x65,0x0B,
-	0x63,0x6F,0x70,0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E,0x45,
-	0x3E,0x54,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x74,0x72,0x61,
-	0x6E,0x73,0x70,0x61,0x72,0x65,0x6E,0x63,0x79,0x2E,0x20,0x49,
-	0x66,0x20,0x69,0x74,0x27,0x73,0x20,0x65,0x6E,0x61,0x62,0x6C,
-	0x65,0x64,0x2C,0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x73,0x74,
-	0x69,0x6E,0x67,0x20,0x64,0x6F,0x65,0x73,0x6E,0x27,0x74,0x20,
-	0x6F,0x76,0x65,0x72,0x77,0x72,0x69,0x74,0x65,0x3D,0x64,0x61,
-	0x74,0x61,0x20,0x77,0x69,0x74,0x68,0x20,0x6E,0x69,0x6C,0x2D,
-	0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,0x74,0x69,0x6F,0x6E,0x2C,
-	0x20,0x6F,0x6E,0x6C,0x79,0x20,0x77,0x69,0x74,0x68,0x20,0x61,
-	0x20,0x6E,0x6F,0x74,0x65,0x20,0x6F,0x72,0x20,0x61,0x20,0x6E,
-	0x75,0x6D,0x62,0x65,0x72,0x20,0x3C,0x3E,0x20,0x30,0x2E,0x01,
-	0x3E,0x40,0x3E,0x54,0x68,0x65,0x20,0x63,0x75,0x74,0x20,0x66,
-	0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x20,0x77,0x6F,0x72,
-	0x6B,0x73,0x20,0x6C,0x69,0x6B,0x65,0x20,0x70,0x61,0x73,0x74,
-	0x69,0x6E,0x67,0x20,0x77,0x69,0x74,0x68,0x20,0x7A,0x65,0x72,
-	0x6F,0x2D,0x64,0x61,0x74,0x61,0x2E,0x20,0x54,0x68,0x69,0x73,
-	0x20,0x6D,0x65,0x61,0x6E,0x73,0x3B,0x74,0x68,0x61,0x74,0x20,
-	0x74,0x68,0x65,0x20,0x63,0x75,0x74,0x74,0x69,0x6E,0x67,0x20,
-	0x69,0x73,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x6C,0x65,
-	0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x50,0x2D,0x63,0x6F,0x6C,
-	0x75,0x6D,0x6E,0x20,0x28,0x6F,0x72,0x20,0x54,0x2D,0x63,0x6F,
-	0x6C,0x75,0x6D,0x6E,0x29,0x2E,0x3C,0x3E,0x57,0x68,0x65,0x6E,
-	0x20,0x79,0x6F,0x75,0x20,0x63,0x6F,0x70,0x79,0x20,0x64,0x61,
-	0x74,0x61,0x20,0x77,0x69,0x74,0x68,0x20,0x6D,0x61,0x73,0x6B,
-	0x69,0x6E,0x67,0x2C,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x73,
-	0x61,0x62,0x6C,0x65,0x64,0x20,0x70,0x61,0x72,0x74,0x73,0x20,
-	0x61,0x72,0x65,0x20,0x6E,0x6F,0x74,0x43,0x63,0x6C,0x65,0x61,
-	0x72,0x65,0x64,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x63,
-	0x6F,0x70,0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E,0x20,0x28,
-	0x4D,0x61,0x6B,0x69,0x6E,0x67,0x20,0x69,0x74,0x20,0x70,0x6F,
-	0x73,0x73,0x69,0x62,0x6C,0x65,0x20,0x74,0x6F,0x20,0x63,0x6F,
-	0x6C,0x6C,0x65,0x63,0x74,0x20,0x64,0x61,0x74,0x61,0x20,0x66,
-	0x72,0x6F,0x6D,0x27,0x73,0x65,0x76,0x65,0x72,0x61,0x6C,0x20,
-	0x6C,0x6F,0x63,0x61,0x74,0x69,0x6F,0x6E,0x73,0x20,0x69,0x6E,
+	0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6C,0x61,0x79,0x6F,0x75,
+	0x74,0x2C,0x20,0x68,0x65,0x78,0x20,0x6E,0x75,0x6D,0x62,0x65,
+	0x72,0x69,0x6E,0x67,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
+	0x40,0x43,0x30,0x30,0x32,0x41,0x49,0x66,0x20,0x79,0x6F,0x75,
+	0x20,0x75,0x73,0x65,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,
+	0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x61,0x72,0x65,0x20,0x6C,
+	0x6F,0x6E,0x67,0x65,0x72,0x20,0x74,0x68,0x61,0x6E,0x20,0x39,
+	0x39,0x20,0x6C,0x69,0x6E,0x65,0x73,0x2C,0x20,0x79,0x6F,0x75,
+	0x20,0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,0x75,0x73,0x65,0x45,
+	0x68,0x65,0x78,0x20,0x63,0x6F,0x75,0x6E,0x74,0x69,0x6E,0x67,
+	0x20,0x73,0x69,0x6E,0x63,0x65,0x20,0x74,0x68,0x65,0x72,0x65,
+	0x20,0x61,0x72,0x65,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x32,0x20,
+	0x64,0x69,0x67,0x69,0x74,0x73,0x20,0x69,0x6E,0x20,0x74,0x68,
+	0x65,0x20,0x6C,0x69,0x6E,0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,
+	0x72,0x20,0x63,0x6F,0x6C,0x75,0x6D,0x6E,0x2E,0x00,0x17,0x3E,
+	0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x63,
+	0x6F,0x70,0x65,0x20,0x73,0x74,0x79,0x6C,0x65,0x3A,0x0B,0x3E,
+	0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x43,0x22,
+	0x4F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x22,0x20,0x77,0x69,
+	0x6C,0x6C,0x20,0x73,0x68,0x6F,0x77,0x20,0x74,0x68,0x65,0x20,
+	0x70,0x6F,0x69,0x6E,0x74,0x73,0x20,0x69,0x6E,0x20,0x74,0x68,
+	0x65,0x20,0x73,0x63,0x6F,0x70,0x65,0x73,0x20,0x61,0x73,0x20,
+	0x70,0x69,0x78,0x65,0x6C,0x73,0x20,0x28,0x6C,0x69,0x6B,0x65,
+	0x20,0x46,0x54,0x32,0x29,0x2E,0x41,0x22,0x4C,0x69,0x6E,0x65,
+	0x64,0x22,0x20,0x77,0x69,0x6C,0x6C,0x20,0x64,0x72,0x61,0x77,
+	0x20,0x6C,0x69,0x6E,0x65,0x73,0x20,0x62,0x65,0x74,0x77,0x65,
+	0x65,0x6E,0x20,0x74,0x68,0x65,0x20,0x70,0x6F,0x69,0x6E,0x74,
+	0x73,0x2C,0x20,0x6C,0x69,0x6B,0x65,0x20,0x61,0x6E,0x20,0x6F,
+	0x73,0x63,0x69,0x6C,0x6C,0x6F,0x73,0x63,0x6F,0x70,0x65,0x2E,
+	0x00,0x27,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,
+	0x43,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,
+	0x6E,0x2C,0x20,0x4D,0x69,0x73,0x63,0x65,0x6C,0x6C,0x61,0x6E,
+	0x65,0x6F,0x75,0x73,0x3A,0x01,0x3E,0x15,0x3E,0x40,0x58,0x30,
+	0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x53,0x79,0x6E,0x63,
+	0x20,0x6F,0x66,0x66,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
+	0x40,0x43,0x30,0x30,0x32,0x3F,0x54,0x65,0x6C,0x6C,0x73,0x20,
+	0x74,0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,
+	0x74,0x6F,0x20,0x6E,0x6F,0x74,0x20,0x75,0x73,0x65,0x20,0x56,
+	0x53,0x79,0x6E,0x63,0x20,0x66,0x6F,0x72,0x20,0x76,0x69,0x64,
+	0x65,0x6F,0x2E,0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x72,0x20,
+	0x6D,0x6F,0x6E,0x69,0x74,0x6F,0x72,0x27,0x73,0x40,0x72,0x65,
+	0x66,0x72,0x65,0x73,0x68,0x20,0x72,0x61,0x74,0x65,0x20,0x69,
+	0x73,0x20,0x6E,0x6F,0x74,0x20,0x36,0x30,0x48,0x7A,0x20,0x28,
+	0x6F,0x72,0x20,0x35,0x39,0x48,0x7A,0x29,0x2C,0x20,0x74,0x68,
+	0x65,0x6E,0x20,0x56,0x53,0x79,0x6E,0x63,0x20,0x69,0x73,0x20,
+	0x61,0x6C,0x77,0x61,0x79,0x73,0x20,0x6F,0x66,0x66,0x20,0x66,
+	0x6F,0x72,0x45,0x74,0x68,0x69,0x73,0x20,0x70,0x72,0x6F,0x67,
+	0x72,0x61,0x6D,0x2E,0x20,0x4E,0x6F,0x74,0x20,0x68,0x61,0x76,
+	0x69,0x6E,0x67,0x20,0x56,0x53,0x79,0x6E,0x63,0x20,0x77,0x69,
+	0x6C,0x6C,0x20,0x72,0x65,0x73,0x75,0x6C,0x74,0x20,0x69,0x6E,
+	0x20,0x6C,0x65,0x73,0x73,0x20,0x69,0x6E,0x70,0x75,0x74,0x2F,
+	0x76,0x69,0x64,0x65,0x6F,0x20,0x64,0x65,0x6C,0x61,0x79,0x2C,
+	0x1E,0x62,0x75,0x74,0x20,0x61,0x6C,0x73,0x6F,0x20,0x70,0x6F,
+	0x74,0x65,0x6E,0x74,0x69,0x61,0x6C,0x20,0x73,0x74,0x75,0x74,
+	0x74,0x65,0x72,0x69,0x6E,0x67,0x2E,0x01,0x20,0x18,0x3E,0x40,
+	0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x69,0x78,
+	0x65,0x6C,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x3A,0x0B,0x3E,
+	0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x43,0x41,
+	0x70,0x70,0x6C,0x69,0x65,0x73,0x20,0x61,0x20,0x73,0x75,0x62,
+	0x70,0x69,0x78,0x65,0x6C,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,
+	0x20,0x74,0x68,0x61,0x74,0x20,0x69,0x73,0x20,0x75,0x73,0x65,
+	0x64,0x20,0x77,0x68,0x65,0x6E,0x20,0x74,0x68,0x65,0x20,0x77,
+	0x69,0x6E,0x64,0x6F,0x77,0x20,0x69,0x73,0x20,0x75,0x70,0x73,
+	0x63,0x61,0x6C,0x65,0x64,0x2E,0x43,0x54,0x68,0x69,0x73,0x20,
+	0x61,0x6C,0x73,0x6F,0x20,0x6D,0x61,0x6B,0x65,0x73,0x20,0x66,
+	0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,0x6E,0x20,0x6D,0x6F,
+	0x64,0x65,0x20,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x6C,
+	0x79,0x20,0x73,0x74,0x72,0x65,0x74,0x63,0x68,0x20,0x6F,0x75,
+	0x74,0x20,0x69,0x66,0x20,0x69,0x74,0x20,0x64,0x69,0x64,0x6E,
+	0x27,0x74,0x44,0x61,0x6C,0x72,0x65,0x61,0x64,0x79,0x2E,0x20,
+	0x50,0x6C,0x65,0x61,0x73,0x65,0x20,0x6B,0x65,0x65,0x70,0x20,
+	0x69,0x6E,0x20,0x6D,0x69,0x6E,0x64,0x20,0x74,0x68,0x61,0x74,
+	0x20,0x74,0x68,0x69,0x73,0x20,0x77,0x69,0x6C,0x6C,0x20,0x6D,
+	0x61,0x6B,0x65,0x20,0x70,0x69,0x78,0x65,0x6C,0x73,0x20,0x6C,
+	0x6F,0x6F,0x6B,0x20,0x62,0x6C,0x75,0x72,0x72,0x79,0x2E,0x00,
+	0x23,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x41,
+	0x64,0x76,0x61,0x6E,0x63,0x65,0x64,0x20,0x65,0x64,0x69,0x74,
+	0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x73,0x3A,0x20,
+	0x01,0x3E,0x1E,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
+	0x30,0x31,0x43,0x6F,0x70,0x79,0x2F,0x50,0x61,0x73,0x74,0x65,
+	0x20,0x6D,0x61,0x73,0x6B,0x69,0x6E,0x67,0x3A,0x0B,0x3E,0x40,
+	0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x37,0x54,0x68,
+	0x65,0x20,0x6D,0x61,0x73,0x6B,0x69,0x6E,0x67,0x20,0x69,0x73,
+	0x20,0x75,0x73,0x65,0x64,0x20,0x66,0x6F,0x72,0x20,0x63,0x6F,
+	0x70,0x79,0x69,0x6E,0x67,0x2F,0x70,0x61,0x73,0x74,0x69,0x6E,
+	0x67,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x70,0x61,0x72,0x74,0x73,
+	0x20,0x6F,0x66,0x20,0x61,0x46,0x22,0x6E,0x6F,0x74,0x65,0x2D,
+	0x63,0x65,0x6C,0x6C,0x22,0x2E,0x20,0x54,0x68,0x65,0x20,0x64,
+	0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x74,0x20,0x70,0x61,0x72,
+	0x74,0x73,0x20,0x6F,0x66,0x20,0x61,0x20,0x22,0x6E,0x6F,0x74,
+	0x65,0x2D,0x63,0x65,0x6C,0x6C,0x22,0x20,0x69,0x73,0x20,0x4E,
+	0x6F,0x74,0x65,0x2C,0x20,0x49,0x6E,0x73,0x74,0x72,0x2E,0x20,
+	0x6E,0x72,0x2E,0x2C,0x20,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x2C,
+	0x20,0x45,0x66,0x66,0x65,0x63,0x74,0x20,0x6E,0x72,0x20,0x26,
+	0x20,0x45,0x66,0x66,0x65,0x63,0x74,0x20,0x64,0x61,0x74,0x61,
+	0x2E,0x34,0x3E,0x41,0x73,0x20,0x79,0x6F,0x75,0x20,0x63,0x61,
+	0x6E,0x20,0x73,0x65,0x65,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,
+	0x20,0x77,0x69,0x6E,0x64,0x6F,0x77,0x20,0x74,0x68,0x65,0x72,
+	0x65,0x20,0x61,0x72,0x65,0x20,0x33,0x20,0x63,0x6F,0x6C,0x75,
+	0x6D,0x6E,0x73,0x20,0x6F,0x66,0x3D,0x22,0x65,0x6E,0x61,0x62,
+	0x6C,0x65,0x2F,0x64,0x69,0x73,0x61,0x62,0x6C,0x65,0x20,0x62,
+	0x75,0x74,0x74,0x6F,0x6E,0x73,0x22,0x20,0x77,0x68,0x69,0x63,
+	0x68,0x20,0x68,0x61,0x73,0x20,0x74,0x68,0x65,0x20,0x6C,0x65,
+	0x74,0x74,0x65,0x72,0x73,0x20,0x43,0x2C,0x50,0x20,0x26,0x20,
+	0x54,0x20,0x61,0x62,0x6F,0x76,0x65,0x2E,0x45,0x3E,0x43,0x20,
+	0x6D,0x65,0x61,0x6E,0x73,0x20,0x63,0x6F,0x70,0x79,0x2C,0x20,
+	0x69,0x74,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x73,0x20,
+	0x77,0x68,0x69,0x63,0x68,0x20,0x70,0x61,0x72,0x74,0x73,0x20,
+	0x74,0x68,0x61,0x74,0x20,0x67,0x6F,0x65,0x73,0x20,0x69,0x6E,
 	0x74,0x6F,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x70,0x79,0x62,
-	0x75,0x66,0x66,0x65,0x72,0x2E,0x29,0x00,0x03,0x45,0x4E,0x44,
-	0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+	0x75,0x66,0x66,0x65,0x72,0x2E,0x3E,0x3E,0x50,0x20,0x6D,0x65,
+	0x61,0x6E,0x73,0x20,0x70,0x61,0x73,0x74,0x65,0x20,0x61,0x6E,
+	0x64,0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x73,0x20,0x77,
+	0x68,0x69,0x63,0x68,0x20,0x70,0x61,0x72,0x74,0x73,0x20,0x74,
+	0x68,0x61,0x74,0x20,0x67,0x6F,0x65,0x73,0x20,0x6F,0x75,0x74,
+	0x20,0x66,0x72,0x6F,0x6D,0x20,0x74,0x68,0x65,0x0B,0x63,0x6F,
+	0x70,0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E,0x45,0x3E,0x54,
+	0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x74,0x72,0x61,0x6E,0x73,
+	0x70,0x61,0x72,0x65,0x6E,0x63,0x79,0x2E,0x20,0x49,0x66,0x20,
+	0x69,0x74,0x27,0x73,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x64,
+	0x2C,0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x73,0x74,0x69,0x6E,
+	0x67,0x20,0x64,0x6F,0x65,0x73,0x6E,0x27,0x74,0x20,0x6F,0x76,
+	0x65,0x72,0x77,0x72,0x69,0x74,0x65,0x3D,0x64,0x61,0x74,0x61,
+	0x20,0x77,0x69,0x74,0x68,0x20,0x6E,0x69,0x6C,0x2D,0x69,0x6E,
+	0x66,0x6F,0x72,0x6D,0x61,0x74,0x69,0x6F,0x6E,0x2C,0x20,0x6F,
+	0x6E,0x6C,0x79,0x20,0x77,0x69,0x74,0x68,0x20,0x61,0x20,0x6E,
+	0x6F,0x74,0x65,0x20,0x6F,0x72,0x20,0x61,0x20,0x6E,0x75,0x6D,
+	0x62,0x65,0x72,0x20,0x3C,0x3E,0x20,0x30,0x2E,0x01,0x3E,0x40,
+	0x3E,0x54,0x68,0x65,0x20,0x63,0x75,0x74,0x20,0x66,0x75,0x6E,
+	0x63,0x74,0x69,0x6F,0x6E,0x73,0x20,0x77,0x6F,0x72,0x6B,0x73,
+	0x20,0x6C,0x69,0x6B,0x65,0x20,0x70,0x61,0x73,0x74,0x69,0x6E,
+	0x67,0x20,0x77,0x69,0x74,0x68,0x20,0x7A,0x65,0x72,0x6F,0x2D,
+	0x64,0x61,0x74,0x61,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,0x6D,
+	0x65,0x61,0x6E,0x73,0x3B,0x74,0x68,0x61,0x74,0x20,0x74,0x68,
+	0x65,0x20,0x63,0x75,0x74,0x74,0x69,0x6E,0x67,0x20,0x69,0x73,
+	0x20,0x63,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0x6C,0x65,0x64,0x20,
+	0x77,0x69,0x74,0x68,0x20,0x50,0x2D,0x63,0x6F,0x6C,0x75,0x6D,
+	0x6E,0x20,0x28,0x6F,0x72,0x20,0x54,0x2D,0x63,0x6F,0x6C,0x75,
+	0x6D,0x6E,0x29,0x2E,0x3C,0x3E,0x57,0x68,0x65,0x6E,0x20,0x79,
+	0x6F,0x75,0x20,0x63,0x6F,0x70,0x79,0x20,0x64,0x61,0x74,0x61,
+	0x20,0x77,0x69,0x74,0x68,0x20,0x6D,0x61,0x73,0x6B,0x69,0x6E,
+	0x67,0x2C,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x73,0x61,0x62,
+	0x6C,0x65,0x64,0x20,0x70,0x61,0x72,0x74,0x73,0x20,0x61,0x72,
+	0x65,0x20,0x6E,0x6F,0x74,0x43,0x63,0x6C,0x65,0x61,0x72,0x65,
+	0x64,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x70,
+	0x79,0x62,0x75,0x66,0x66,0x65,0x72,0x2E,0x20,0x28,0x4D,0x61,
+	0x6B,0x69,0x6E,0x67,0x20,0x69,0x74,0x20,0x70,0x6F,0x73,0x73,
+	0x69,0x62,0x6C,0x65,0x20,0x74,0x6F,0x20,0x63,0x6F,0x6C,0x6C,
+	0x65,0x63,0x74,0x20,0x64,0x61,0x74,0x61,0x20,0x66,0x72,0x6F,
+	0x6D,0x27,0x73,0x65,0x76,0x65,0x72,0x61,0x6C,0x20,0x6C,0x6F,
+	0x63,0x61,0x74,0x69,0x6F,0x6E,0x73,0x20,0x69,0x6E,0x74,0x6F,
+	0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x70,0x79,0x62,0x75,0x66,
+	0x66,0x65,0x72,0x2E,0x29,0x00,0x03,0x45,0x4E,0x44,0x4C,0x3B,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
-	0x2A,0x2A,0x2A,0x2A,0x2A,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+	0x2A,0x2A,0x2A,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
-	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x0E,0x40,
-	0x4C,0x50,0x72,0x6F,0x62,0x6C,0x65,0x6D,0x73,0x2F,0x46,0x41,
-	0x51,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x41,0x3E,0x40,0x43,
-	0x30,0x30,0x31,0x51,0x3A,0x20,0x43,0x61,0x6E,0x20,0x49,0x20,
-	0x6D,0x61,0x6B,0x65,0x20,0x66,0x75,0x6C,0x6C,0x73,0x63,0x72,
-	0x65,0x65,0x6E,0x20,0x6D,0x6F,0x64,0x65,0x20,0x73,0x74,0x72,
-	0x65,0x74,0x63,0x68,0x20,0x6F,0x75,0x74,0x20,0x74,0x68,0x65,
-	0x20,0x77,0x68,0x6F,0x6C,0x65,0x20,0x73,0x63,0x72,0x65,0x65,
-	0x6E,0x3F,0x3A,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,
-	0x45,0x6E,0x61,0x62,0x6C,0x65,0x20,0x22,0x50,0x69,0x78,0x65,
-	0x6C,0x20,0x66,0x69,0x6C,0x74,0x65,0x72,0x22,0x20,0x69,0x6E,
-	0x20,0x43,0x6F,0x6E,0x66,0x69,0x67,0x20,0x2D,0x3E,0x20,0x4D,
-	0x69,0x73,0x63,0x65,0x6C,0x6C,0x61,0x6E,0x65,0x6F,0x75,0x73,
-	0x2E,0x4D,0x3E,0x40,0x58,0x30,0x33,0x35,0x49,0x74,0x20,0x77,
-	0x6F,0x6E,0x27,0x74,0x20,0x6C,0x6F,0x6F,0x6B,0x20,0x70,0x72,
-	0x65,0x74,0x74,0x79,0x2C,0x20,0x62,0x75,0x74,0x20,0x74,0x6F,
-	0x20,0x73,0x6F,0x6D,0x65,0x20,0x70,0x65,0x6F,0x70,0x6C,0x65,
-	0x20,0x69,0x74,0x27,0x73,0x20,0x6D,0x75,0x63,0x68,0x20,0x62,
-	0x65,0x74,0x74,0x65,0x72,0x20,0x74,0x68,0x61,0x6E,0x20,0x6E,
-	0x6F,0x74,0x68,0x69,0x6E,0x67,0x2E,0x06,0x3E,0x40,0x58,0x30,
-	0x32,0x30,0x27,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,
-	0x49,0x20,0x63,0x61,0x6E,0x27,0x74,0x20,0x75,0x73,0x65,0x20,
-	0x41,0x4C,0x54,0x2B,0x46,0x34,0x20,0x61,0x6E,0x64,0x20,0x41,
-	0x4C,0x54,0x2B,0x46,0x35,0x21,0x4E,0x3E,0x40,0x43,0x30,0x30,
-	0x32,0x41,0x3A,0x20,0x57,0x69,0x6E,0x64,0x6F,0x77,0x73,0x3A,
-	0x20,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,0x68,0x61,0x76,0x65,
-	0x20,0x47,0x65,0x46,0x6F,0x72,0x63,0x65,0x20,0x45,0x78,0x70,
-	0x65,0x72,0x69,0x65,0x6E,0x63,0x65,0x20,0x69,0x6E,0x73,0x74,
-	0x61,0x6C,0x6C,0x65,0x64,0x2C,0x20,0x79,0x6F,0x75,0x20,0x6E,
-	0x65,0x65,0x64,0x20,0x74,0x6F,0x20,0x63,0x68,0x61,0x6E,0x67,
-	0x65,0x2B,0x3E,0x40,0x58,0x30,0x33,0x35,0x74,0x68,0x65,0x20,
-	0x6B,0x65,0x79,0x62,0x69,0x6E,0x64,0x69,0x6E,0x67,0x73,0x20,
-	0x69,0x6E,0x20,0x69,0x74,0x73,0x20,0x73,0x65,0x74,0x74,0x69,
-	0x6E,0x67,0x73,0x20,0x70,0x61,0x67,0x65,0x2E,0x56,0x6D,0x61,
-	0x63,0x4F,0x53,0x2F,0x4F,0x53,0x20,0x58,0x3A,0x20,0x43,0x68,
-	0x61,0x6E,0x67,0x65,0x20,0x41,0x4C,0x54,0x2B,0x46,0x34,0x2F,
-	0x41,0x4C,0x54,0x2B,0x46,0x35,0x20,0x6B,0x65,0x79,0x73,0x20,
-	0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x4F,0x53,0x20,0x74,0x6F,
-	0x20,0x73,0x6F,0x6D,0x65,0x74,0x68,0x69,0x6E,0x67,0x20,0x65,
-	0x6C,0x73,0x65,0x2E,0x20,0x41,0x6C,0x73,0x6F,0x20,0x66,0x6F,
-	0x72,0x20,0x47,0x4E,0x55,0x2F,0x4C,0x69,0x6E,0x75,0x78,0x2E,
-	0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x2B,0x3E,0x40,0x43,0x30,
-	0x30,0x31,0x51,0x3A,0x20,0x54,0x68,0x65,0x20,0x6D,0x6F,0x75,
-	0x73,0x65,0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x20,0x69,0x73,
-	0x20,0x64,0x65,0x6C,0x61,0x79,0x65,0x64,0x2F,0x6C,0x61,0x67,
-	0x67,0x79,0x21,0x44,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,
-	0x20,0x4D,0x61,0x6B,0x65,0x20,0x73,0x75,0x72,0x65,0x20,0x22,
-	0x53,0x6F,0x66,0x74,0x77,0x61,0x72,0x65,0x20,0x6D,0x6F,0x75,
-	0x73,0x65,0x22,0x20,0x69,0x73,0x20,0x64,0x69,0x73,0x61,0x62,
-	0x6C,0x65,0x64,0x20,0x69,0x6E,0x20,0x43,0x6F,0x6E,0x66,0x69,
-	0x67,0x20,0x2D,0x3E,0x20,0x4C,0x61,0x79,0x6F,0x75,0x74,0x2E,
-	0x4B,0x3E,0x40,0x58,0x30,0x33,0x35,0x41,0x6C,0x74,0x65,0x72,
-	0x6E,0x61,0x74,0x69,0x76,0x65,0x6C,0x79,0x2C,0x20,0x79,0x6F,
-	0x75,0x20,0x63,0x61,0x6E,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,
-	0x20,0x22,0x56,0x53,0x79,0x6E,0x63,0x20,0x6F,0x66,0x66,0x22,
-	0x20,0x69,0x6E,0x20,0x43,0x6F,0x6E,0x66,0x69,0x67,0x20,0x2D,
-	0x3E,0x20,0x4D,0x69,0x73,0x63,0x65,0x6C,0x6C,0x61,0x6E,0x65,
-	0x6F,0x75,0x73,0x2E,0x46,0x3E,0x54,0x68,0x69,0x73,0x20,0x68,
-	0x6F,0x77,0x65,0x76,0x65,0x72,0x2C,0x20,0x77,0x69,0x6C,0x6C,
-	0x20,0x69,0x6E,0x74,0x72,0x6F,0x64,0x75,0x63,0x65,0x20,0x73,
-	0x74,0x75,0x74,0x74,0x65,0x72,0x69,0x6E,0x67,0x20,0x62,0x65,
-	0x63,0x61,0x75,0x73,0x65,0x20,0x74,0x68,0x65,0x20,0x72,0x65,
-	0x6E,0x64,0x65,0x72,0x69,0x6E,0x67,0x20,0x72,0x61,0x74,0x65,
-	0x20,0x69,0x73,0x22,0x3E,0x6E,0x6F,0x74,0x20,0x65,0x78,0x61,
-	0x63,0x74,0x20,0x74,0x6F,0x20,0x79,0x6F,0x75,0x72,0x20,0x6D,
-	0x6F,0x6E,0x69,0x74,0x6F,0x72,0x27,0x73,0x20,0x72,0x61,0x74,
-	0x65,0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x33,0x3E,0x40,
-	0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x57,0x69,0x6C,0x6C,0x20,
-	0x79,0x6F,0x75,0x20,0x69,0x6D,0x70,0x6C,0x65,0x6D,0x65,0x6E,
-	0x74,0x20,0x4D,0x49,0x44,0x49,0x20,0x6F,0x75,0x74,0x20,0x66,
-	0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x69,0x74,0x79,
-	0x3F,0x4D,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x4E,
-	0x6F,0x2C,0x20,0x73,0x6F,0x72,0x72,0x79,0x2E,0x20,0x54,0x68,
-	0x69,0x73,0x20,0x69,0x73,0x20,0x76,0x65,0x72,0x79,0x20,0x64,
-	0x69,0x66,0x66,0x69,0x63,0x75,0x6C,0x74,0x20,0x74,0x6F,0x20,
-	0x69,0x6D,0x70,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x20,0x63,0x6F,
-	0x72,0x72,0x65,0x63,0x74,0x6C,0x79,0x20,0x77,0x68,0x65,0x6E,
-	0x20,0x68,0x61,0x76,0x69,0x6E,0x67,0x3C,0x3E,0x40,0x58,0x30,
-	0x33,0x35,0x68,0x69,0x67,0x68,0x65,0x72,0x20,0x61,0x75,0x64,
-	0x69,0x6F,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x73,0x69,
-	0x7A,0x65,0x73,0x20,0x28,0x62,0x75,0x66,0x66,0x65,0x72,0x65,
-	0x64,0x20,0x72,0x65,0x70,0x6C,0x61,0x79,0x65,0x72,0x20,0x74,
-	0x69,0x63,0x6B,0x73,0x29,0x2E,0x2E,0x2E,0x06,0x3E,0x40,0x58,
-	0x30,0x32,0x30,0x30,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,
-	0x20,0x57,0x68,0x65,0x72,0x65,0x20,0x69,0x73,0x20,0x74,0x68,
-	0x65,0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,
-	0x69,0x6F,0x6E,0x20,0x66,0x69,0x6C,0x65,0x20,0x73,0x74,0x6F,
-	0x72,0x65,0x64,0x3F,0x3F,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,
-	0x3A,0x20,0x57,0x69,0x6E,0x64,0x6F,0x77,0x73,0x3A,0x20,0x5C,
-	0x55,0x73,0x65,0x72,0x73,0x5C,0x55,0x53,0x45,0x52,0x5C,0x41,
-	0x70,0x70,0x44,0x61,0x74,0x61,0x5C,0x52,0x6F,0x61,0x6D,0x69,
-	0x6E,0x67,0x5C,0x46,0x54,0x32,0x20,0x63,0x6C,0x6F,0x6E,0x65,
-	0x5C,0x46,0x54,0x32,0x2E,0x43,0x46,0x47,0x45,0x3E,0x40,0x58,
-	0x30,0x33,0x35,0x4F,0x53,0x20,0x58,0x3A,0x20,0x2F,0x55,0x73,
-	0x65,0x72,0x73,0x2F,0x55,0x53,0x45,0x52,0x2F,0x4C,0x69,0x62,
-	0x72,0x61,0x72,0x79,0x2F,0x41,0x70,0x70,0x6C,0x69,0x63,0x61,
-	0x74,0x69,0x6F,0x6E,0x20,0x53,0x75,0x70,0x70,0x6F,0x72,0x74,
-	0x2F,0x46,0x54,0x32,0x20,0x63,0x6C,0x6F,0x6E,0x65,0x2F,0x46,
-	0x54,0x32,0x2E,0x43,0x46,0x47,0x2F,0x47,0x4E,0x55,0x2F,0x4C,
-	0x69,0x6E,0x75,0x78,0x3A,0x20,0x2F,0x68,0x6F,0x6D,0x65,0x2F,
-	0x55,0x53,0x45,0x52,0x2F,0x2E,0x63,0x6F,0x6E,0x66,0x69,0x67,
-	0x2F,0x46,0x54,0x32,0x20,0x63,0x6C,0x6F,0x6E,0x65,0x2F,0x46,
-	0x54,0x32,0x2E,0x43,0x46,0x47,0x01,0x3E,0x48,0x49,0x74,0x20,
-	0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x73,0x74,0x6F,0x72,
-	0x65,0x64,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x70,0x72,
-	0x6F,0x67,0x72,0x61,0x6D,0x20,0x64,0x69,0x72,0x65,0x63,0x74,
-	0x6F,0x72,0x79,0x20,0x69,0x66,0x20,0x74,0x68,0x65,0x20,0x70,
-	0x61,0x74,0x68,0x20,0x63,0x6F,0x75,0x6C,0x64,0x6E,0x27,0x74,
-	0x20,0x62,0x65,0x20,0x75,0x73,0x65,0x64,0x2E,0x4D,0x49,0x66,
-	0x20,0x79,0x6F,0x75,0x20,0x70,0x75,0x74,0x20,0x74,0x68,0x65,
-	0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,
-	0x6F,0x6E,0x20,0x66,0x69,0x6C,0x65,0x20,0x69,0x6E,0x20,0x74,
-	0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x64,
-	0x69,0x72,0x65,0x63,0x74,0x6F,0x72,0x79,0x2C,0x20,0x69,0x74,
-	0x20,0x77,0x69,0x6C,0x6C,0x20,0x72,0x65,0x61,0x64,0x20,0x74,
-	0x68,0x61,0x74,0x4A,0x6F,0x6E,0x65,0x20,0x61,0x6E,0x64,0x20,
-	0x6E,0x6F,0x74,0x20,0x61,0x74,0x74,0x65,0x6D,0x70,0x74,0x20,
-	0x74,0x6F,0x20,0x63,0x72,0x65,0x61,0x74,0x65,0x20,0x63,0x6F,
-	0x6E,0x66,0x69,0x67,0x20,0x64,0x69,0x72,0x73,0x20,0x66,0x6F,
-	0x72,0x20,0x74,0x68,0x65,0x20,0x4F,0x53,0x20,0x75,0x73,0x65,
-	0x72,0x2E,0x20,0x28,0x70,0x6F,0x72,0x74,0x61,0x62,0x6C,0x65,
-	0x20,0x6D,0x6F,0x64,0x65,0x29,0x06,0x3E,0x40,0x58,0x30,0x32,
-	0x30,0x42,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x43,
-	0x61,0x6E,0x20,0x74,0x68,0x65,0x20,0x63,0x6C,0x6F,0x6E,0x65,
-	0x20,0x72,0x65,0x61,0x64,0x20,0x46,0x54,0x32,0x2E,0x43,0x46,
-	0x47,0x20,0x66,0x72,0x6F,0x6D,0x20,0x72,0x65,0x61,0x6C,0x20,
-	0x46,0x54,0x32,0x2C,0x20,0x61,0x6E,0x64,0x20,0x76,0x69,0x63,
-	0x65,0x20,0x76,0x65,0x72,0x73,0x61,0x3F,0x4C,0x3E,0x40,0x43,
-	0x30,0x30,0x32,0x41,0x3A,0x20,0x59,0x65,0x73,0x2C,0x20,0x69,
-	0x74,0x20,0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,0x77,0x6F,0x72,
-	0x6B,0x20,0x6A,0x75,0x73,0x74,0x20,0x66,0x69,0x6E,0x65,0x2E,
-	0x20,0x50,0x75,0x74,0x20,0x69,0x74,0x20,0x69,0x6E,0x20,0x74,
-	0x68,0x65,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6F,0x72,0x79,
-	0x20,0x73,0x68,0x6F,0x77,0x6E,0x20,0x61,0x62,0x6F,0x76,0x65,
-	0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x52,0x3E,0x40,0x43,
-	0x30,0x30,0x31,0x51,0x3A,0x20,0x53,0x6D,0x70,0x2E,0x20,0x45,
-	0x64,0x2E,0x3A,0x20,0x57,0x68,0x69,0x6C,0x65,0x20,0x7A,0x6F,
-	0x6F,0x6D,0x69,0x6E,0x67,0x20,0x69,0x6E,0x2C,0x20,0x49,0x20,
-	0x73,0x6F,0x6D,0x65,0x74,0x69,0x6D,0x65,0x73,0x20,0x63,0x61,
-	0x6E,0x27,0x74,0x20,0x6D,0x61,0x72,0x6B,0x20,0x74,0x68,0x65,
-	0x20,0x6C,0x61,0x73,0x74,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
-	0x20,0x70,0x6F,0x69,0x6E,0x74,0x21,0x47,0x3E,0x40,0x43,0x30,
-	0x30,0x32,0x41,0x3A,0x20,0x54,0x68,0x69,0x73,0x20,0x69,0x73,
-	0x20,0x6E,0x6F,0x72,0x6D,0x61,0x6C,0x2E,0x20,0x54,0x68,0x69,
-	0x73,0x20,0x69,0x73,0x20,0x61,0x20,0x6C,0x69,0x6D,0x69,0x74,
-	0x61,0x74,0x69,0x6F,0x6E,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,
-	0x20,0x6E,0x61,0x74,0x75,0x72,0x65,0x20,0x6F,0x66,0x20,0x73,
-	0x63,0x61,0x6C,0x69,0x6E,0x67,0x2E,0x06,0x3E,0x40,0x58,0x30,
-	0x32,0x30,0x17,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,
-	0x49,0x20,0x66,0x6F,0x75,0x6E,0x64,0x20,0x61,0x20,0x62,0x75,
-	0x67,0x21,0x4B,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,
-	0x50,0x6C,0x65,0x61,0x73,0x65,0x20,0x73,0x65,0x6E,0x64,0x20,
-	0x61,0x20,0x6D,0x61,0x69,0x6C,0x20,0x74,0x6F,0x20,0x6F,0x6C,
-	0x61,0x76,0x2E,0x73,0x6F,0x72,0x65,0x6E,0x73,0x65,0x6E,0x40,
-	0x6C,0x69,0x76,0x65,0x2E,0x6E,0x6F,0x20,0x61,0x6E,0x64,0x20,
-	0x74,0x72,0x79,0x20,0x74,0x6F,0x20,0x65,0x78,0x70,0x6C,0x61,
-	0x69,0x6E,0x20,0x69,0x74,0x2E,0x00,0x03,0x45,0x4E,0x44,0x4C,
-	0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x0E,0x40,0x4C,0x50,
+	0x72,0x6F,0x62,0x6C,0x65,0x6D,0x73,0x2F,0x46,0x41,0x51,0x06,
+	0x3E,0x40,0x58,0x30,0x32,0x30,0x41,0x3E,0x40,0x43,0x30,0x30,
+	0x31,0x51,0x3A,0x20,0x43,0x61,0x6E,0x20,0x49,0x20,0x6D,0x61,
+	0x6B,0x65,0x20,0x66,0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,
+	0x6E,0x20,0x6D,0x6F,0x64,0x65,0x20,0x73,0x74,0x72,0x65,0x74,
+	0x63,0x68,0x20,0x6F,0x75,0x74,0x20,0x74,0x68,0x65,0x20,0x77,
+	0x68,0x6F,0x6C,0x65,0x20,0x73,0x63,0x72,0x65,0x65,0x6E,0x3F,
+	0x3A,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x45,0x6E,
+	0x61,0x62,0x6C,0x65,0x20,0x22,0x50,0x69,0x78,0x65,0x6C,0x20,
+	0x66,0x69,0x6C,0x74,0x65,0x72,0x22,0x20,0x69,0x6E,0x20,0x43,
+	0x6F,0x6E,0x66,0x69,0x67,0x20,0x2D,0x3E,0x20,0x4D,0x69,0x73,
+	0x63,0x65,0x6C,0x6C,0x61,0x6E,0x65,0x6F,0x75,0x73,0x2E,0x4D,
+	0x3E,0x40,0x58,0x30,0x33,0x35,0x49,0x74,0x20,0x77,0x6F,0x6E,
+	0x27,0x74,0x20,0x6C,0x6F,0x6F,0x6B,0x20,0x70,0x72,0x65,0x74,
+	0x74,0x79,0x2C,0x20,0x62,0x75,0x74,0x20,0x74,0x6F,0x20,0x73,
+	0x6F,0x6D,0x65,0x20,0x70,0x65,0x6F,0x70,0x6C,0x65,0x20,0x69,
+	0x74,0x27,0x73,0x20,0x6D,0x75,0x63,0x68,0x20,0x62,0x65,0x74,
+	0x74,0x65,0x72,0x20,0x74,0x68,0x61,0x6E,0x20,0x6E,0x6F,0x74,
+	0x68,0x69,0x6E,0x67,0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,
+	0x27,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x49,0x20,
+	0x63,0x61,0x6E,0x27,0x74,0x20,0x75,0x73,0x65,0x20,0x41,0x4C,
+	0x54,0x2B,0x46,0x34,0x20,0x61,0x6E,0x64,0x20,0x41,0x4C,0x54,
+	0x2B,0x46,0x35,0x21,0x4E,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,
+	0x3A,0x20,0x57,0x69,0x6E,0x64,0x6F,0x77,0x73,0x3A,0x20,0x49,
+	0x66,0x20,0x79,0x6F,0x75,0x20,0x68,0x61,0x76,0x65,0x20,0x47,
+	0x65,0x46,0x6F,0x72,0x63,0x65,0x20,0x45,0x78,0x70,0x65,0x72,
+	0x69,0x65,0x6E,0x63,0x65,0x20,0x69,0x6E,0x73,0x74,0x61,0x6C,
+	0x6C,0x65,0x64,0x2C,0x20,0x79,0x6F,0x75,0x20,0x6E,0x65,0x65,
+	0x64,0x20,0x74,0x6F,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x2B,
+	0x3E,0x40,0x58,0x30,0x33,0x35,0x74,0x68,0x65,0x20,0x6B,0x65,
+	0x79,0x62,0x69,0x6E,0x64,0x69,0x6E,0x67,0x73,0x20,0x69,0x6E,
+	0x20,0x69,0x74,0x73,0x20,0x73,0x65,0x74,0x74,0x69,0x6E,0x67,
+	0x73,0x20,0x70,0x61,0x67,0x65,0x2E,0x56,0x6D,0x61,0x63,0x4F,
+	0x53,0x2F,0x4F,0x53,0x20,0x58,0x3A,0x20,0x43,0x68,0x61,0x6E,
+	0x67,0x65,0x20,0x41,0x4C,0x54,0x2B,0x46,0x34,0x2F,0x41,0x4C,
+	0x54,0x2B,0x46,0x35,0x20,0x6B,0x65,0x79,0x73,0x20,0x69,0x6E,
+	0x20,0x74,0x68,0x65,0x20,0x4F,0x53,0x20,0x74,0x6F,0x20,0x73,
+	0x6F,0x6D,0x65,0x74,0x68,0x69,0x6E,0x67,0x20,0x65,0x6C,0x73,
+	0x65,0x2E,0x20,0x41,0x6C,0x73,0x6F,0x20,0x66,0x6F,0x72,0x20,
+	0x47,0x4E,0x55,0x2F,0x4C,0x69,0x6E,0x75,0x78,0x2E,0x06,0x3E,
+	0x40,0x58,0x30,0x32,0x30,0x2B,0x3E,0x40,0x43,0x30,0x30,0x31,
+	0x51,0x3A,0x20,0x54,0x68,0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,
+	0x20,0x63,0x75,0x72,0x73,0x6F,0x72,0x20,0x69,0x73,0x20,0x64,
+	0x65,0x6C,0x61,0x79,0x65,0x64,0x2F,0x6C,0x61,0x67,0x67,0x79,
+	0x21,0x44,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x4D,
+	0x61,0x6B,0x65,0x20,0x73,0x75,0x72,0x65,0x20,0x22,0x53,0x6F,
+	0x66,0x74,0x77,0x61,0x72,0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,
+	0x22,0x20,0x69,0x73,0x20,0x64,0x69,0x73,0x61,0x62,0x6C,0x65,
+	0x64,0x20,0x69,0x6E,0x20,0x43,0x6F,0x6E,0x66,0x69,0x67,0x20,
+	0x2D,0x3E,0x20,0x4C,0x61,0x79,0x6F,0x75,0x74,0x2E,0x4B,0x3E,
+	0x40,0x58,0x30,0x33,0x35,0x41,0x6C,0x74,0x65,0x72,0x6E,0x61,
+	0x74,0x69,0x76,0x65,0x6C,0x79,0x2C,0x20,0x79,0x6F,0x75,0x20,
+	0x63,0x61,0x6E,0x20,0x65,0x6E,0x61,0x62,0x6C,0x65,0x20,0x22,
+	0x56,0x53,0x79,0x6E,0x63,0x20,0x6F,0x66,0x66,0x22,0x20,0x69,
+	0x6E,0x20,0x43,0x6F,0x6E,0x66,0x69,0x67,0x20,0x2D,0x3E,0x20,
+	0x4D,0x69,0x73,0x63,0x65,0x6C,0x6C,0x61,0x6E,0x65,0x6F,0x75,
+	0x73,0x2E,0x46,0x3E,0x54,0x68,0x69,0x73,0x20,0x68,0x6F,0x77,
+	0x65,0x76,0x65,0x72,0x2C,0x20,0x77,0x69,0x6C,0x6C,0x20,0x69,
+	0x6E,0x74,0x72,0x6F,0x64,0x75,0x63,0x65,0x20,0x73,0x74,0x75,
+	0x74,0x74,0x65,0x72,0x69,0x6E,0x67,0x20,0x62,0x65,0x63,0x61,
+	0x75,0x73,0x65,0x20,0x74,0x68,0x65,0x20,0x72,0x65,0x6E,0x64,
+	0x65,0x72,0x69,0x6E,0x67,0x20,0x72,0x61,0x74,0x65,0x20,0x69,
+	0x73,0x22,0x3E,0x6E,0x6F,0x74,0x20,0x65,0x78,0x61,0x63,0x74,
+	0x20,0x74,0x6F,0x20,0x79,0x6F,0x75,0x72,0x20,0x6D,0x6F,0x6E,
+	0x69,0x74,0x6F,0x72,0x27,0x73,0x20,0x72,0x61,0x74,0x65,0x2E,
+	0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x33,0x3E,0x40,0x43,0x30,
+	0x30,0x31,0x51,0x3A,0x20,0x57,0x69,0x6C,0x6C,0x20,0x79,0x6F,
+	0x75,0x20,0x69,0x6D,0x70,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x20,
+	0x4D,0x49,0x44,0x49,0x20,0x6F,0x75,0x74,0x20,0x66,0x75,0x6E,
+	0x63,0x74,0x69,0x6F,0x6E,0x61,0x6C,0x69,0x74,0x79,0x3F,0x4D,
+	0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x4E,0x6F,0x2C,
+	0x20,0x73,0x6F,0x72,0x72,0x79,0x2E,0x20,0x54,0x68,0x69,0x73,
+	0x20,0x69,0x73,0x20,0x76,0x65,0x72,0x79,0x20,0x64,0x69,0x66,
+	0x66,0x69,0x63,0x75,0x6C,0x74,0x20,0x74,0x6F,0x20,0x69,0x6D,
+	0x70,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x20,0x63,0x6F,0x72,0x72,
+	0x65,0x63,0x74,0x6C,0x79,0x20,0x77,0x68,0x65,0x6E,0x20,0x68,
+	0x61,0x76,0x69,0x6E,0x67,0x3C,0x3E,0x40,0x58,0x30,0x33,0x35,
+	0x68,0x69,0x67,0x68,0x65,0x72,0x20,0x61,0x75,0x64,0x69,0x6F,
+	0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x73,0x69,0x7A,0x65,
+	0x73,0x20,0x28,0x62,0x75,0x66,0x66,0x65,0x72,0x65,0x64,0x20,
+	0x72,0x65,0x70,0x6C,0x61,0x79,0x65,0x72,0x20,0x74,0x69,0x63,
+	0x6B,0x73,0x29,0x2E,0x2E,0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,
+	0x30,0x30,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x57,
+	0x68,0x65,0x72,0x65,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,
+	0x63,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,
+	0x6E,0x20,0x66,0x69,0x6C,0x65,0x20,0x73,0x74,0x6F,0x72,0x65,
+	0x64,0x3F,0x3F,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,
+	0x57,0x69,0x6E,0x64,0x6F,0x77,0x73,0x3A,0x20,0x5C,0x55,0x73,
+	0x65,0x72,0x73,0x5C,0x55,0x53,0x45,0x52,0x5C,0x41,0x70,0x70,
+	0x44,0x61,0x74,0x61,0x5C,0x52,0x6F,0x61,0x6D,0x69,0x6E,0x67,
+	0x5C,0x46,0x54,0x32,0x20,0x63,0x6C,0x6F,0x6E,0x65,0x5C,0x46,
+	0x54,0x32,0x2E,0x43,0x46,0x47,0x45,0x3E,0x40,0x58,0x30,0x33,
+	0x35,0x4F,0x53,0x20,0x58,0x3A,0x20,0x2F,0x55,0x73,0x65,0x72,
+	0x73,0x2F,0x55,0x53,0x45,0x52,0x2F,0x4C,0x69,0x62,0x72,0x61,
+	0x72,0x79,0x2F,0x41,0x70,0x70,0x6C,0x69,0x63,0x61,0x74,0x69,
+	0x6F,0x6E,0x20,0x53,0x75,0x70,0x70,0x6F,0x72,0x74,0x2F,0x46,
+	0x54,0x32,0x20,0x63,0x6C,0x6F,0x6E,0x65,0x2F,0x46,0x54,0x32,
+	0x2E,0x43,0x46,0x47,0x2F,0x47,0x4E,0x55,0x2F,0x4C,0x69,0x6E,
+	0x75,0x78,0x3A,0x20,0x2F,0x68,0x6F,0x6D,0x65,0x2F,0x55,0x53,
+	0x45,0x52,0x2F,0x2E,0x63,0x6F,0x6E,0x66,0x69,0x67,0x2F,0x46,
+	0x54,0x32,0x20,0x63,0x6C,0x6F,0x6E,0x65,0x2F,0x46,0x54,0x32,
+	0x2E,0x43,0x46,0x47,0x01,0x3E,0x48,0x49,0x74,0x20,0x77,0x69,
+	0x6C,0x6C,0x20,0x62,0x65,0x20,0x73,0x74,0x6F,0x72,0x65,0x64,
+	0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x70,0x72,0x6F,0x67,
+	0x72,0x61,0x6D,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6F,0x72,
+	0x79,0x20,0x69,0x66,0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x74,
+	0x68,0x20,0x63,0x6F,0x75,0x6C,0x64,0x6E,0x27,0x74,0x20,0x62,
+	0x65,0x20,0x75,0x73,0x65,0x64,0x2E,0x4D,0x49,0x66,0x20,0x79,
+	0x6F,0x75,0x20,0x70,0x75,0x74,0x20,0x74,0x68,0x65,0x20,0x63,
+	0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,
+	0x20,0x66,0x69,0x6C,0x65,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,
+	0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x64,0x69,0x72,
+	0x65,0x63,0x74,0x6F,0x72,0x79,0x2C,0x20,0x69,0x74,0x20,0x77,
+	0x69,0x6C,0x6C,0x20,0x72,0x65,0x61,0x64,0x20,0x74,0x68,0x61,
+	0x74,0x4A,0x6F,0x6E,0x65,0x20,0x61,0x6E,0x64,0x20,0x6E,0x6F,
+	0x74,0x20,0x61,0x74,0x74,0x65,0x6D,0x70,0x74,0x20,0x74,0x6F,
+	0x20,0x63,0x72,0x65,0x61,0x74,0x65,0x20,0x63,0x6F,0x6E,0x66,
+	0x69,0x67,0x20,0x64,0x69,0x72,0x73,0x20,0x66,0x6F,0x72,0x20,
+	0x74,0x68,0x65,0x20,0x4F,0x53,0x20,0x75,0x73,0x65,0x72,0x2E,
+	0x20,0x28,0x70,0x6F,0x72,0x74,0x61,0x62,0x6C,0x65,0x20,0x6D,
+	0x6F,0x64,0x65,0x29,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,0x42,
+	0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x43,0x61,0x6E,
+	0x20,0x74,0x68,0x65,0x20,0x63,0x6C,0x6F,0x6E,0x65,0x20,0x72,
+	0x65,0x61,0x64,0x20,0x46,0x54,0x32,0x2E,0x43,0x46,0x47,0x20,
+	0x66,0x72,0x6F,0x6D,0x20,0x72,0x65,0x61,0x6C,0x20,0x46,0x54,
+	0x32,0x2C,0x20,0x61,0x6E,0x64,0x20,0x76,0x69,0x63,0x65,0x20,
+	0x76,0x65,0x72,0x73,0x61,0x3F,0x4C,0x3E,0x40,0x43,0x30,0x30,
+	0x32,0x41,0x3A,0x20,0x59,0x65,0x73,0x2C,0x20,0x69,0x74,0x20,
+	0x73,0x68,0x6F,0x75,0x6C,0x64,0x20,0x77,0x6F,0x72,0x6B,0x20,
+	0x6A,0x75,0x73,0x74,0x20,0x66,0x69,0x6E,0x65,0x2E,0x20,0x50,
+	0x75,0x74,0x20,0x69,0x74,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,
+	0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6F,0x72,0x79,0x20,0x73,
+	0x68,0x6F,0x77,0x6E,0x20,0x61,0x62,0x6F,0x76,0x65,0x2E,0x06,
+	0x3E,0x40,0x58,0x30,0x32,0x30,0x52,0x3E,0x40,0x43,0x30,0x30,
+	0x31,0x51,0x3A,0x20,0x53,0x6D,0x70,0x2E,0x20,0x45,0x64,0x2E,
+	0x3A,0x20,0x57,0x68,0x69,0x6C,0x65,0x20,0x7A,0x6F,0x6F,0x6D,
+	0x69,0x6E,0x67,0x20,0x69,0x6E,0x2C,0x20,0x49,0x20,0x73,0x6F,
+	0x6D,0x65,0x74,0x69,0x6D,0x65,0x73,0x20,0x63,0x61,0x6E,0x27,
+	0x74,0x20,0x6D,0x61,0x72,0x6B,0x20,0x74,0x68,0x65,0x20,0x6C,
+	0x61,0x73,0x74,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x70,
+	0x6F,0x69,0x6E,0x74,0x21,0x47,0x3E,0x40,0x43,0x30,0x30,0x32,
+	0x41,0x3A,0x20,0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x6E,
+	0x6F,0x72,0x6D,0x61,0x6C,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,
+	0x69,0x73,0x20,0x61,0x20,0x6C,0x69,0x6D,0x69,0x74,0x61,0x74,
+	0x69,0x6F,0x6E,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x6E,
+	0x61,0x74,0x75,0x72,0x65,0x20,0x6F,0x66,0x20,0x73,0x63,0x61,
+	0x6C,0x69,0x6E,0x67,0x2E,0x06,0x3E,0x40,0x58,0x30,0x32,0x30,
+	0x17,0x3E,0x40,0x43,0x30,0x30,0x31,0x51,0x3A,0x20,0x49,0x20,
+	0x66,0x6F,0x75,0x6E,0x64,0x20,0x61,0x20,0x62,0x75,0x67,0x21,
+	0x4B,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x50,0x6C,
+	0x65,0x61,0x73,0x65,0x20,0x73,0x65,0x6E,0x64,0x20,0x61,0x20,
+	0x6D,0x61,0x69,0x6C,0x20,0x74,0x6F,0x20,0x6F,0x6C,0x61,0x76,
+	0x2E,0x73,0x6F,0x72,0x65,0x6E,0x73,0x65,0x6E,0x40,0x6C,0x69,
+	0x76,0x65,0x2E,0x6E,0x6F,0x20,0x61,0x6E,0x64,0x20,0x74,0x72,
+	0x79,0x20,0x74,0x6F,0x20,0x65,0x78,0x70,0x6C,0x61,0x69,0x6E,
+	0x20,0x69,0x74,0x2E,0x00,0x03,0x45,0x4E,0x44,0x4C,0x3B,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
-	0x2A,0x2A,0x2A,0x2A,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+	0x2A,0x2A,0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
 	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
-	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x0C,0x40,0x4C,
-	0x4B,0x6E,0x6F,0x77,0x6E,0x20,0x62,0x75,0x67,0x73,0x06,0x3E,
-	0x40,0x58,0x30,0x31,0x30,0x14,0x3E,0x40,0x43,0x30,0x30,0x31,
-	0x53,0x61,0x6D,0x70,0x6C,0x65,0x20,0x65,0x64,0x69,0x74,0x6F,
-	0x72,0x3A,0x06,0x3E,0x40,0x43,0x30,0x30,0x32,0x4E,0x3E,0x40,
-	0x58,0x30,0x31,0x30,0x2D,0x20,0x57,0x68,0x65,0x6E,0x20,0x61,
-	0x20,0x6C,0x6F,0x6F,0x70,0x65,0x64,0x20,0x73,0x61,0x6D,0x70,
-	0x6C,0x65,0x20,0x69,0x73,0x20,0x7A,0x6F,0x6F,0x6D,0x65,0x64,
-	0x20,0x6F,0x75,0x74,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,
-	0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x65,0x64,0x69,0x74,0x6F,
-	0x72,0x2C,0x20,0x79,0x6F,0x75,0x20,0x63,0x6F,0x75,0x6C,0x64,
-	0x20,0x73,0x65,0x65,0x4D,0x3E,0x40,0x58,0x30,0x32,0x31,0x75,
-	0x6E,0x77,0x61,0x6E,0x74,0x65,0x64,0x20,0x73,0x61,0x6D,0x70,
-	0x6C,0x65,0x20,0x64,0x61,0x74,0x61,0x20,0x61,0x74,0x20,0x74,
-	0x68,0x65,0x20,0x6C,0x6F,0x6F,0x70,0x2D,0x65,0x6E,0x64,0x20,
-	0x70,0x6F,0x69,0x6E,0x74,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,
-	0x69,0x73,0x20,0x62,0x65,0x63,0x61,0x75,0x73,0x65,0x20,0x6F,
-	0x66,0x20,0x61,0x20,0x6B,0x6C,0x75,0x64,0x67,0x65,0x4B,0x66,
-	0x6F,0x72,0x20,0x74,0x68,0x65,0x20,0x72,0x65,0x73,0x61,0x6D,
-	0x70,0x6C,0x69,0x6E,0x67,0x20,0x69,0x6E,0x74,0x65,0x72,0x70,
-	0x6F,0x6C,0x61,0x74,0x69,0x6F,0x6E,0x20,0x74,0x6F,0x20,0x77,
-	0x6F,0x72,0x6B,0x20,0x66,0x61,0x73,0x74,0x65,0x72,0x20,0x69,
-	0x6E,0x20,0x74,0x68,0x65,0x20,0x61,0x75,0x64,0x69,0x6F,0x20,
-	0x6D,0x69,0x78,0x65,0x72,0x2C,0x20,0x61,0x6E,0x64,0x20,0x74,
-	0x68,0x65,0x4B,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x20,
-	0x46,0x54,0x32,0x20,0x68,0x61,0x73,0x20,0x74,0x68,0x65,0x20,
-	0x73,0x61,0x6D,0x65,0x20,0x70,0x72,0x6F,0x62,0x6C,0x65,0x6D,
-	0x2E,0x20,0x49,0x20,0x68,0x61,0x76,0x65,0x20,0x6D,0x61,0x64,
-	0x65,0x20,0x69,0x74,0x20,0x73,0x6F,0x20,0x74,0x68,0x61,0x74,
-	0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x20,0x7A,0x6F,0x6F,0x6D,
-	0x20,0x69,0x6E,0x20,0x74,0x6F,0x3B,0x73,0x65,0x65,0x20,0x74,
-	0x68,0x65,0x20,0x69,0x6E,0x64,0x69,0x76,0x69,0x64,0x75,0x61,
-	0x6C,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x70,0x6F,0x69,
-	0x6E,0x74,0x73,0x2C,0x20,0x69,0x74,0x20,0x77,0x69,0x6C,0x6C,
-	0x20,0x6C,0x6F,0x6F,0x6B,0x20,0x6C,0x69,0x6B,0x65,0x20,0x6E,
-	0x6F,0x72,0x6D,0x61,0x6C,0x2E,0x06,0x3E,0x40,0x58,0x30,0x31,
-	0x30,0x17,0x3E,0x40,0x43,0x30,0x30,0x31,0x4D,0x6F,0x75,0x73,
-	0x65,0x20,0x2F,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,
-	0x3A,0x01,0x3E,0x4D,0x3E,0x40,0x43,0x30,0x30,0x32,0x2D,0x20,
-	0x57,0x68,0x65,0x6E,0x20,0x79,0x6F,0x75,0x20,0x68,0x6F,0x6C,
-	0x64,0x20,0x64,0x6F,0x77,0x6E,0x20,0x61,0x20,0x6B,0x65,0x79,
-	0x20,0x28,0x66,0x2E,0x65,0x78,0x2E,0x20,0x70,0x6C,0x61,0x79,
-	0x69,0x6E,0x67,0x20,0x61,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
-	0x29,0x2C,0x20,0x74,0x68,0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,
-	0x20,0x6D,0x6F,0x76,0x65,0x6D,0x65,0x6E,0x74,0x4A,0x3E,0x40,
-	0x58,0x30,0x32,0x31,0x63,0x61,0x6E,0x20,0x62,0x65,0x20,0x63,
-	0x68,0x6F,0x70,0x70,0x79,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,
-	0x69,0x73,0x20,0x72,0x65,0x6C,0x61,0x74,0x65,0x64,0x20,0x74,
-	0x6F,0x20,0x74,0x68,0x65,0x20,0x69,0x6E,0x70,0x75,0x74,0x20,
-	0x71,0x75,0x65,0x75,0x65,0x20,0x62,0x65,0x69,0x6E,0x67,0x20,
-	0x73,0x70,0x61,0x6D,0x6D,0x65,0x64,0x20,0x77,0x69,0x74,0x68,
-	0x36,0x22,0x6B,0x65,0x79,0x20,0x64,0x6F,0x77,0x6E,0x22,0x20,
-	0x65,0x76,0x65,0x6E,0x74,0x73,0x2C,0x20,0x64,0x65,0x6C,0x61,
-	0x79,0x69,0x6E,0x67,0x20,0x74,0x68,0x65,0x20,0x6D,0x6F,0x75,
-	0x73,0x65,0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x20,
-	0x65,0x76,0x65,0x6E,0x74,0x73,0x2E,0x4E,0x49,0x20,0x6F,0x6E,
-	0x6C,0x79,0x20,0x70,0x6F,0x6C,0x6C,0x20,0x69,0x6E,0x70,0x75,
-	0x74,0x20,0x6F,0x6E,0x63,0x65,0x20,0x70,0x65,0x72,0x20,0x66,
-	0x72,0x61,0x6D,0x65,0x20,0x28,0x36,0x30,0x48,0x7A,0x29,0x2C,
-	0x20,0x73,0x6F,0x20,0x74,0x68,0x65,0x20,0x66,0x72,0x65,0x71,
-	0x75,0x65,0x6E,0x63,0x79,0x20,0x69,0x73,0x20,0x61,0x20,0x74,
-	0x61,0x64,0x20,0x6C,0x6F,0x77,0x2E,0x20,0x49,0x74,0x20,0x68,
-	0x61,0x73,0x2E,0x74,0x6F,0x20,0x62,0x65,0x20,0x6C,0x69,0x6B,
-	0x65,0x20,0x74,0x68,0x69,0x73,0x20,0x66,0x6F,0x72,0x20,0x73,
-	0x65,0x76,0x65,0x72,0x61,0x6C,0x20,0x72,0x65,0x61,0x73,0x6F,
-	0x6E,0x73,0x2C,0x20,0x74,0x68,0x6F,0x75,0x67,0x68,0x2E,0x2E,
-	0x2E,0x06,0x3E,0x40,0x58,0x30,0x31,0x30,0x47,0x3E,0x40,0x43,
-	0x30,0x30,0x32,0x2D,0x20,0x6D,0x61,0x63,0x4F,0x53,0x20,0x2F,
-	0x20,0x4F,0x53,0x20,0x58,0x3A,0x20,0x22,0x48,0x61,0x72,0x64,
-	0x77,0x61,0x72,0x65,0x20,0x6D,0x6F,0x64,0x65,0x22,0x20,0x6D,
-	0x6F,0x75,0x73,0x65,0x20,0x6C,0x6F,0x6F,0x6B,0x73,0x20,0x62,
-	0x6C,0x75,0x72,0x72,0x79,0x20,0x6F,0x6E,0x20,0x72,0x65,0x74,
-	0x69,0x6E,0x61,0x20,0x4D,0x61,0x63,0x73,0x06,0x3E,0x40,0x58,
-	0x30,0x31,0x30,0x48,0x3E,0x2D,0x20,0x6D,0x61,0x63,0x4F,0x53,
-	0x20,0x2F,0x20,0x4F,0x53,0x20,0x58,0x3A,0x20,0x48,0x6F,0x6C,
-	0x64,0x69,0x6E,0x67,0x20,0x64,0x6F,0x77,0x6E,0x20,0x61,0x20,
-	0x6D,0x6F,0x75,0x73,0x65,0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,
-	0x20,0x77,0x6F,0x6E,0x27,0x74,0x20,0x74,0x72,0x61,0x70,0x20,
-	0x74,0x68,0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,0x63,0x75,
-	0x72,0x73,0x6F,0x72,0x4D,0x3E,0x40,0x58,0x30,0x32,0x31,0x69,
-	0x6E,0x73,0x69,0x64,0x65,0x20,0x74,0x68,0x65,0x20,0x77,0x69,
-	0x6E,0x64,0x6F,0x77,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,0x69,
-	0x73,0x20,0x72,0x65,0x6C,0x61,0x74,0x65,0x64,0x20,0x74,0x6F,
-	0x20,0x61,0x20,0x6B,0x6C,0x75,0x64,0x67,0x65,0x20,0x74,0x68,
-	0x61,0x74,0x20,0x73,0x69,0x6D,0x70,0x6C,0x79,0x20,0x64,0x6F,
-	0x65,0x73,0x6E,0x27,0x74,0x20,0x77,0x6F,0x72,0x6B,0x4F,0x76,
-	0x65,0x72,0x79,0x20,0x77,0x65,0x6C,0x6C,0x20,0x69,0x6E,0x20,
-	0x6D,0x61,0x63,0x4F,0x53,0x2E,0x20,0x54,0x68,0x65,0x20,0x6D,
-	0x6F,0x75,0x73,0x65,0x20,0x6D,0x6F,0x76,0x65,0x6D,0x65,0x6E,
-	0x74,0x20,0x77,0x6F,0x75,0x6C,0x64,0x20,0x66,0x72,0x65,0x65,
-	0x7A,0x65,0x20,0x66,0x6F,0x72,0x20,0x73,0x6F,0x6D,0x65,0x20,
-	0x74,0x69,0x6D,0x65,0x20,0x61,0x66,0x74,0x65,0x72,0x20,0x61,
-	0x20,0x6D,0x6F,0x75,0x73,0x65,0x15,0x62,0x75,0x74,0x74,0x6F,
-	0x6E,0x20,0x77,0x61,0x73,0x20,0x68,0x65,0x6C,0x64,0x20,0x64,
-	0x6F,0x77,0x6E,0x2E,0x06,0x3E,0x40,0x58,0x30,0x31,0x30,0x4B,
-	0x3E,0x40,0x43,0x30,0x30,0x32,0x2D,0x20,0x54,0x68,0x65,0x20,
-	0x22,0x63,0x6C,0x65,0x61,0x72,0x20,0x73,0x61,0x6D,0x70,0x6C,
-	0x65,0x22,0x20,0x73,0x68,0x6F,0x72,0x74,0x63,0x75,0x74,0x20,
-	0x28,0x73,0x68,0x69,0x66,0x74,0x20,0x2B,0x20,0x6E,0x75,0x6D,
-	0x2D,0x70,0x61,0x64,0x20,0x44,0x65,0x6C,0x2F,0x27,0x2C,0x27,
-	0x29,0x20,0x6F,0x6E,0x6C,0x79,0x20,0x77,0x6F,0x72,0x6B,0x73,
-	0x20,0x69,0x66,0x37,0x3E,0x40,0x58,0x30,0x32,0x31,0x6E,0x75,
-	0x6D,0x20,0x6C,0x6F,0x63,0x6B,0x20,0x69,0x73,0x20,0x6F,0x66,
-	0x66,0x2E,0x20,0x54,0x68,0x65,0x72,0x65,0x27,0x73,0x20,0x6E,
-	0x6F,0x20,0x77,0x61,0x79,0x20,0x49,0x20,0x63,0x61,0x6E,0x20,
-	0x66,0x69,0x78,0x20,0x74,0x68,0x69,0x73,0x2E,0x2E,0x2E,0x06,
-	0x3E,0x40,0x58,0x30,0x31,0x30,0x0C,0x3E,0x40,0x43,0x30,0x30,
-	0x31,0x56,0x69,0x64,0x65,0x6F,0x3A,0x06,0x3E,0x40,0x43,0x30,
-	0x30,0x32,0x4A,0x3E,0x40,0x58,0x30,0x31,0x30,0x2D,0x20,0x54,
-	0x68,0x65,0x20,0x73,0x63,0x6F,0x70,0x65,0x73,0x20,0x63,0x61,
-	0x6E,0x20,0x6D,0x69,0x6C,0x64,0x6C,0x79,0x20,0x66,0x6C,0x69,
-	0x63,0x6B,0x65,0x72,0x20,0x64,0x65,0x70,0x65,0x6E,0x64,0x69,
-	0x6E,0x67,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,0x77,0x61,
-	0x76,0x65,0x66,0x6F,0x72,0x6D,0x20,0x61,0x6E,0x64,0x20,0x70,
-	0x69,0x74,0x63,0x68,0x2E,0x4D,0x3E,0x40,0x58,0x30,0x32,0x31,
-	0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x62,0x65,0x63,0x61,
-	0x75,0x73,0x65,0x20,0x74,0x68,0x65,0x69,0x72,0x20,0x66,0x72,
-	0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x20,0x69,0x73,0x20,0x6E,
-	0x6F,0x74,0x20,0x63,0x6C,0x6F,0x63,0x6B,0x65,0x64,0x20,0x74,
-	0x6F,0x20,0x65,0x78,0x61,0x63,0x74,0x6C,0x79,0x20,0x74,0x68,
-	0x65,0x20,0x73,0x61,0x6D,0x65,0x20,0x72,0x61,0x74,0x65,0x4D,
-	0x3E,0x61,0x74,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x74,0x68,
-	0x65,0x20,0x73,0x63,0x6F,0x70,0x65,0x73,0x20,0x61,0x72,0x65,
-	0x20,0x72,0x65,0x6E,0x64,0x65,0x72,0x65,0x64,0x2E,0x20,0x49,
-	0x74,0x27,0x73,0x20,0x63,0x6C,0x6F,0x73,0x65,0x2C,0x20,0x77,
-	0x68,0x69,0x63,0x68,0x20,0x63,0x61,0x75,0x73,0x65,0x73,0x20,
-	0x61,0x20,0x66,0x6C,0x69,0x63,0x6B,0x65,0x72,0x20,0x65,0x66,
-	0x66,0x65,0x63,0x74,0x2E,0x01,0x3E,0x52,0x3E,0x40,0x58,0x30,
-	0x31,0x30,0x2D,0x20,0x4E,0x6F,0x74,0x20,0x61,0x20,0x62,0x75,
-	0x67,0x2C,0x20,0x62,0x75,0x74,0x20,0x69,0x66,0x20,0x79,0x6F,
-	0x75,0x72,0x20,0x6D,0x6F,0x6E,0x69,0x74,0x6F,0x72,0x27,0x73,
-	0x20,0x72,0x65,0x66,0x72,0x65,0x73,0x68,0x20,0x72,0x61,0x74,
-	0x65,0x20,0x69,0x73,0x20,0x6E,0x6F,0x74,0x20,0x73,0x65,0x74,
-	0x20,0x74,0x6F,0x20,0x36,0x30,0x48,0x7A,0x20,0x28,0x6F,0x72,
-	0x20,0x35,0x39,0x48,0x7A,0x29,0x4F,0x3E,0x40,0x58,0x30,0x32,
-	0x31,0x79,0x6F,0x75,0x20,0x6D,0x61,0x79,0x20,0x65,0x78,0x70,
-	0x65,0x72,0x69,0x65,0x6E,0x63,0x65,0x20,0x76,0x69,0x73,0x75,
-	0x61,0x6C,0x20,0x73,0x74,0x75,0x74,0x74,0x65,0x72,0x69,0x6E,
-	0x67,0x20,0x62,0x65,0x63,0x61,0x75,0x73,0x65,0x20,0x56,0x53,
-	0x79,0x6E,0x63,0x20,0x77,0x69,0x6C,0x6C,0x20,0x6E,0x6F,0x74,
-	0x20,0x62,0x65,0x20,0x75,0x73,0x65,0x64,0x20,0x74,0x68,0x65,
-	0x6E,0x2E,0x49,0x49,0x20,0x68,0x69,0x67,0x68,0x6C,0x79,0x20,
-	0x72,0x65,0x63,0x6F,0x6D,0x6D,0x65,0x6E,0x64,0x20,0x72,0x75,
-	0x6E,0x6E,0x69,0x6E,0x67,0x20,0x79,0x6F,0x75,0x72,0x20,0x6D,
-	0x6F,0x6E,0x69,0x74,0x6F,0x72,0x20,0x61,0x74,0x20,0x36,0x30,
-	0x48,0x7A,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x27,0x72,0x65,
-	0x20,0x61,0x20,0x68,0x61,0x72,0x64,0x63,0x6F,0x72,0x65,0x20,
-	0x75,0x73,0x65,0x72,0x10,0x6F,0x66,0x20,0x74,0x68,0x69,0x73,
-	0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x2E,0x00,0x03,0x45,
-	0x4E,0x44
+	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
+	0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x0C,0x40,0x4C,0x4B,0x6E,
+	0x6F,0x77,0x6E,0x20,0x62,0x75,0x67,0x73,0x06,0x3E,0x40,0x58,
+	0x30,0x31,0x30,0x14,0x3E,0x40,0x43,0x30,0x30,0x31,0x53,0x61,
+	0x6D,0x70,0x6C,0x65,0x20,0x65,0x64,0x69,0x74,0x6F,0x72,0x3A,
+	0x06,0x3E,0x40,0x43,0x30,0x30,0x32,0x4E,0x3E,0x40,0x58,0x30,
+	0x31,0x30,0x2D,0x20,0x57,0x68,0x65,0x6E,0x20,0x61,0x20,0x6C,
+	0x6F,0x6F,0x70,0x65,0x64,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
+	0x20,0x69,0x73,0x20,0x7A,0x6F,0x6F,0x6D,0x65,0x64,0x20,0x6F,
+	0x75,0x74,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x73,0x61,
+	0x6D,0x70,0x6C,0x65,0x20,0x65,0x64,0x69,0x74,0x6F,0x72,0x2C,
+	0x20,0x79,0x6F,0x75,0x20,0x63,0x6F,0x75,0x6C,0x64,0x20,0x73,
+	0x65,0x65,0x4D,0x3E,0x40,0x58,0x30,0x32,0x31,0x75,0x6E,0x77,
+	0x61,0x6E,0x74,0x65,0x64,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
+	0x20,0x64,0x61,0x74,0x61,0x20,0x61,0x74,0x20,0x74,0x68,0x65,
+	0x20,0x6C,0x6F,0x6F,0x70,0x2D,0x65,0x6E,0x64,0x20,0x70,0x6F,
+	0x69,0x6E,0x74,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,0x69,0x73,
+	0x20,0x62,0x65,0x63,0x61,0x75,0x73,0x65,0x20,0x6F,0x66,0x20,
+	0x61,0x20,0x6B,0x6C,0x75,0x64,0x67,0x65,0x4B,0x66,0x6F,0x72,
+	0x20,0x74,0x68,0x65,0x20,0x72,0x65,0x73,0x61,0x6D,0x70,0x6C,
+	0x69,0x6E,0x67,0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,
+	0x61,0x74,0x69,0x6F,0x6E,0x20,0x74,0x6F,0x20,0x77,0x6F,0x72,
+	0x6B,0x20,0x66,0x61,0x73,0x74,0x65,0x72,0x20,0x69,0x6E,0x20,
+	0x74,0x68,0x65,0x20,0x61,0x75,0x64,0x69,0x6F,0x20,0x6D,0x69,
+	0x78,0x65,0x72,0x2C,0x20,0x61,0x6E,0x64,0x20,0x74,0x68,0x65,
+	0x4B,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x20,0x46,0x54,
+	0x32,0x20,0x68,0x61,0x73,0x20,0x74,0x68,0x65,0x20,0x73,0x61,
+	0x6D,0x65,0x20,0x70,0x72,0x6F,0x62,0x6C,0x65,0x6D,0x2E,0x20,
+	0x49,0x20,0x68,0x61,0x76,0x65,0x20,0x6D,0x61,0x64,0x65,0x20,
+	0x69,0x74,0x20,0x73,0x6F,0x20,0x74,0x68,0x61,0x74,0x20,0x69,
+	0x66,0x20,0x79,0x6F,0x75,0x20,0x7A,0x6F,0x6F,0x6D,0x20,0x69,
+	0x6E,0x20,0x74,0x6F,0x3B,0x73,0x65,0x65,0x20,0x74,0x68,0x65,
+	0x20,0x69,0x6E,0x64,0x69,0x76,0x69,0x64,0x75,0x61,0x6C,0x20,
+	0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x70,0x6F,0x69,0x6E,0x74,
+	0x73,0x2C,0x20,0x69,0x74,0x20,0x77,0x69,0x6C,0x6C,0x20,0x6C,
+	0x6F,0x6F,0x6B,0x20,0x6C,0x69,0x6B,0x65,0x20,0x6E,0x6F,0x72,
+	0x6D,0x61,0x6C,0x2E,0x06,0x3E,0x40,0x58,0x30,0x31,0x30,0x17,
+	0x3E,0x40,0x43,0x30,0x30,0x31,0x4D,0x6F,0x75,0x73,0x65,0x20,
+	0x2F,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x3A,0x01,
+	0x3E,0x4D,0x3E,0x40,0x43,0x30,0x30,0x32,0x2D,0x20,0x57,0x68,
+	0x65,0x6E,0x20,0x79,0x6F,0x75,0x20,0x68,0x6F,0x6C,0x64,0x20,
+	0x64,0x6F,0x77,0x6E,0x20,0x61,0x20,0x6B,0x65,0x79,0x20,0x28,
+	0x66,0x2E,0x65,0x78,0x2E,0x20,0x70,0x6C,0x61,0x79,0x69,0x6E,
+	0x67,0x20,0x61,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x29,0x2C,
+	0x20,0x74,0x68,0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,0x6D,
+	0x6F,0x76,0x65,0x6D,0x65,0x6E,0x74,0x4A,0x3E,0x40,0x58,0x30,
+	0x32,0x31,0x63,0x61,0x6E,0x20,0x62,0x65,0x20,0x63,0x68,0x6F,
+	0x70,0x70,0x79,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,0x69,0x73,
+	0x20,0x72,0x65,0x6C,0x61,0x74,0x65,0x64,0x20,0x74,0x6F,0x20,
+	0x74,0x68,0x65,0x20,0x69,0x6E,0x70,0x75,0x74,0x20,0x71,0x75,
+	0x65,0x75,0x65,0x20,0x62,0x65,0x69,0x6E,0x67,0x20,0x73,0x70,
+	0x61,0x6D,0x6D,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x36,0x22,
+	0x6B,0x65,0x79,0x20,0x64,0x6F,0x77,0x6E,0x22,0x20,0x65,0x76,
+	0x65,0x6E,0x74,0x73,0x2C,0x20,0x64,0x65,0x6C,0x61,0x79,0x69,
+	0x6E,0x67,0x20,0x74,0x68,0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,
+	0x20,0x70,0x6F,0x73,0x69,0x74,0x69,0x6F,0x6E,0x20,0x65,0x76,
+	0x65,0x6E,0x74,0x73,0x2E,0x4E,0x49,0x20,0x6F,0x6E,0x6C,0x79,
+	0x20,0x70,0x6F,0x6C,0x6C,0x20,0x69,0x6E,0x70,0x75,0x74,0x20,
+	0x6F,0x6E,0x63,0x65,0x20,0x70,0x65,0x72,0x20,0x66,0x72,0x61,
+	0x6D,0x65,0x20,0x28,0x36,0x30,0x48,0x7A,0x29,0x2C,0x20,0x73,
+	0x6F,0x20,0x74,0x68,0x65,0x20,0x66,0x72,0x65,0x71,0x75,0x65,
+	0x6E,0x63,0x79,0x20,0x69,0x73,0x20,0x61,0x20,0x74,0x61,0x64,
+	0x20,0x6C,0x6F,0x77,0x2E,0x20,0x49,0x74,0x20,0x68,0x61,0x73,
+	0x2E,0x74,0x6F,0x20,0x62,0x65,0x20,0x6C,0x69,0x6B,0x65,0x20,
+	0x74,0x68,0x69,0x73,0x20,0x66,0x6F,0x72,0x20,0x73,0x65,0x76,
+	0x65,0x72,0x61,0x6C,0x20,0x72,0x65,0x61,0x73,0x6F,0x6E,0x73,
+	0x2C,0x20,0x74,0x68,0x6F,0x75,0x67,0x68,0x2E,0x2E,0x2E,0x06,
+	0x3E,0x40,0x58,0x30,0x31,0x30,0x47,0x3E,0x40,0x43,0x30,0x30,
+	0x32,0x2D,0x20,0x6D,0x61,0x63,0x4F,0x53,0x20,0x2F,0x20,0x4F,
+	0x53,0x20,0x58,0x3A,0x20,0x22,0x48,0x61,0x72,0x64,0x77,0x61,
+	0x72,0x65,0x20,0x6D,0x6F,0x64,0x65,0x22,0x20,0x6D,0x6F,0x75,
+	0x73,0x65,0x20,0x6C,0x6F,0x6F,0x6B,0x73,0x20,0x62,0x6C,0x75,
+	0x72,0x72,0x79,0x20,0x6F,0x6E,0x20,0x72,0x65,0x74,0x69,0x6E,
+	0x61,0x20,0x4D,0x61,0x63,0x73,0x06,0x3E,0x40,0x58,0x30,0x31,
+	0x30,0x48,0x3E,0x2D,0x20,0x6D,0x61,0x63,0x4F,0x53,0x20,0x2F,
+	0x20,0x4F,0x53,0x20,0x58,0x3A,0x20,0x48,0x6F,0x6C,0x64,0x69,
+	0x6E,0x67,0x20,0x64,0x6F,0x77,0x6E,0x20,0x61,0x20,0x6D,0x6F,
+	0x75,0x73,0x65,0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x20,0x77,
+	0x6F,0x6E,0x27,0x74,0x20,0x74,0x72,0x61,0x70,0x20,0x74,0x68,
+	0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,0x63,0x75,0x72,0x73,
+	0x6F,0x72,0x4D,0x3E,0x40,0x58,0x30,0x32,0x31,0x69,0x6E,0x73,
+	0x69,0x64,0x65,0x20,0x74,0x68,0x65,0x20,0x77,0x69,0x6E,0x64,
+	0x6F,0x77,0x2E,0x20,0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,
+	0x72,0x65,0x6C,0x61,0x74,0x65,0x64,0x20,0x74,0x6F,0x20,0x61,
+	0x20,0x6B,0x6C,0x75,0x64,0x67,0x65,0x20,0x74,0x68,0x61,0x74,
+	0x20,0x73,0x69,0x6D,0x70,0x6C,0x79,0x20,0x64,0x6F,0x65,0x73,
+	0x6E,0x27,0x74,0x20,0x77,0x6F,0x72,0x6B,0x4F,0x76,0x65,0x72,
+	0x79,0x20,0x77,0x65,0x6C,0x6C,0x20,0x69,0x6E,0x20,0x6D,0x61,
+	0x63,0x4F,0x53,0x2E,0x20,0x54,0x68,0x65,0x20,0x6D,0x6F,0x75,
+	0x73,0x65,0x20,0x6D,0x6F,0x76,0x65,0x6D,0x65,0x6E,0x74,0x20,
+	0x77,0x6F,0x75,0x6C,0x64,0x20,0x66,0x72,0x65,0x65,0x7A,0x65,
+	0x20,0x66,0x6F,0x72,0x20,0x73,0x6F,0x6D,0x65,0x20,0x74,0x69,
+	0x6D,0x65,0x20,0x61,0x66,0x74,0x65,0x72,0x20,0x61,0x20,0x6D,
+	0x6F,0x75,0x73,0x65,0x15,0x62,0x75,0x74,0x74,0x6F,0x6E,0x20,
+	0x77,0x61,0x73,0x20,0x68,0x65,0x6C,0x64,0x20,0x64,0x6F,0x77,
+	0x6E,0x2E,0x06,0x3E,0x40,0x58,0x30,0x31,0x30,0x4B,0x3E,0x40,
+	0x43,0x30,0x30,0x32,0x2D,0x20,0x54,0x68,0x65,0x20,0x22,0x63,
+	0x6C,0x65,0x61,0x72,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x22,
+	0x20,0x73,0x68,0x6F,0x72,0x74,0x63,0x75,0x74,0x20,0x28,0x73,
+	0x68,0x69,0x66,0x74,0x20,0x2B,0x20,0x6E,0x75,0x6D,0x2D,0x70,
+	0x61,0x64,0x20,0x44,0x65,0x6C,0x2F,0x27,0x2C,0x27,0x29,0x20,
+	0x6F,0x6E,0x6C,0x79,0x20,0x77,0x6F,0x72,0x6B,0x73,0x20,0x69,
+	0x66,0x37,0x3E,0x40,0x58,0x30,0x32,0x31,0x6E,0x75,0x6D,0x20,
+	0x6C,0x6F,0x63,0x6B,0x20,0x69,0x73,0x20,0x6F,0x66,0x66,0x2E,
+	0x20,0x54,0x68,0x65,0x72,0x65,0x27,0x73,0x20,0x6E,0x6F,0x20,
+	0x77,0x61,0x79,0x20,0x49,0x20,0x63,0x61,0x6E,0x20,0x66,0x69,
+	0x78,0x20,0x74,0x68,0x69,0x73,0x2E,0x2E,0x2E,0x06,0x3E,0x40,
+	0x58,0x30,0x31,0x30,0x0C,0x3E,0x40,0x43,0x30,0x30,0x31,0x56,
+	0x69,0x64,0x65,0x6F,0x3A,0x06,0x3E,0x40,0x43,0x30,0x30,0x32,
+	0x4A,0x3E,0x40,0x58,0x30,0x31,0x30,0x2D,0x20,0x54,0x68,0x65,
+	0x20,0x73,0x63,0x6F,0x70,0x65,0x73,0x20,0x63,0x61,0x6E,0x20,
+	0x6D,0x69,0x6C,0x64,0x6C,0x79,0x20,0x66,0x6C,0x69,0x63,0x6B,
+	0x65,0x72,0x20,0x64,0x65,0x70,0x65,0x6E,0x64,0x69,0x6E,0x67,
+	0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,0x77,0x61,0x76,0x65,
+	0x66,0x6F,0x72,0x6D,0x20,0x61,0x6E,0x64,0x20,0x70,0x69,0x74,
+	0x63,0x68,0x2E,0x4D,0x3E,0x40,0x58,0x30,0x32,0x31,0x54,0x68,
+	0x69,0x73,0x20,0x69,0x73,0x20,0x62,0x65,0x63,0x61,0x75,0x73,
+	0x65,0x20,0x74,0x68,0x65,0x69,0x72,0x20,0x66,0x72,0x65,0x71,
+	0x75,0x65,0x6E,0x63,0x79,0x20,0x69,0x73,0x20,0x6E,0x6F,0x74,
+	0x20,0x63,0x6C,0x6F,0x63,0x6B,0x65,0x64,0x20,0x74,0x6F,0x20,
+	0x65,0x78,0x61,0x63,0x74,0x6C,0x79,0x20,0x74,0x68,0x65,0x20,
+	0x73,0x61,0x6D,0x65,0x20,0x72,0x61,0x74,0x65,0x4D,0x3E,0x61,
+	0x74,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x74,0x68,0x65,0x20,
+	0x73,0x63,0x6F,0x70,0x65,0x73,0x20,0x61,0x72,0x65,0x20,0x72,
+	0x65,0x6E,0x64,0x65,0x72,0x65,0x64,0x2E,0x20,0x49,0x74,0x27,
+	0x73,0x20,0x63,0x6C,0x6F,0x73,0x65,0x2C,0x20,0x77,0x68,0x69,
+	0x63,0x68,0x20,0x63,0x61,0x75,0x73,0x65,0x73,0x20,0x61,0x20,
+	0x66,0x6C,0x69,0x63,0x6B,0x65,0x72,0x20,0x65,0x66,0x66,0x65,
+	0x63,0x74,0x2E,0x01,0x3E,0x52,0x3E,0x40,0x58,0x30,0x31,0x30,
+	0x2D,0x20,0x4E,0x6F,0x74,0x20,0x61,0x20,0x62,0x75,0x67,0x2C,
+	0x20,0x62,0x75,0x74,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x72,
+	0x20,0x6D,0x6F,0x6E,0x69,0x74,0x6F,0x72,0x27,0x73,0x20,0x72,
+	0x65,0x66,0x72,0x65,0x73,0x68,0x20,0x72,0x61,0x74,0x65,0x20,
+	0x69,0x73,0x20,0x6E,0x6F,0x74,0x20,0x73,0x65,0x74,0x20,0x74,
+	0x6F,0x20,0x36,0x30,0x48,0x7A,0x20,0x28,0x6F,0x72,0x20,0x35,
+	0x39,0x48,0x7A,0x29,0x4F,0x3E,0x40,0x58,0x30,0x32,0x31,0x79,
+	0x6F,0x75,0x20,0x6D,0x61,0x79,0x20,0x65,0x78,0x70,0x65,0x72,
+	0x69,0x65,0x6E,0x63,0x65,0x20,0x76,0x69,0x73,0x75,0x61,0x6C,
+	0x20,0x73,0x74,0x75,0x74,0x74,0x65,0x72,0x69,0x6E,0x67,0x20,
+	0x62,0x65,0x63,0x61,0x75,0x73,0x65,0x20,0x56,0x53,0x79,0x6E,
+	0x63,0x20,0x77,0x69,0x6C,0x6C,0x20,0x6E,0x6F,0x74,0x20,0x62,
+	0x65,0x20,0x75,0x73,0x65,0x64,0x20,0x74,0x68,0x65,0x6E,0x2E,
+	0x49,0x49,0x20,0x68,0x69,0x67,0x68,0x6C,0x79,0x20,0x72,0x65,
+	0x63,0x6F,0x6D,0x6D,0x65,0x6E,0x64,0x20,0x72,0x75,0x6E,0x6E,
+	0x69,0x6E,0x67,0x20,0x79,0x6F,0x75,0x72,0x20,0x6D,0x6F,0x6E,
+	0x69,0x74,0x6F,0x72,0x20,0x61,0x74,0x20,0x36,0x30,0x48,0x7A,
+	0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x27,0x72,0x65,0x20,0x61,
+	0x20,0x68,0x61,0x72,0x64,0x63,0x6F,0x72,0x65,0x20,0x75,0x73,
+	0x65,0x72,0x10,0x6F,0x66,0x20,0x74,0x68,0x69,0x73,0x20,0x70,
+	0x72,0x6F,0x67,0x72,0x61,0x6D,0x2E,0x00,0x03,0x45,0x4E,0x44
 };
 
 #endif