ref: e5d197d470859f5f951fcbae17da7d6e99a53163
parent: 0fe93d0068b6303b3367a825fe9012bc7dad0387
author: Olav Sørensen <[email protected]>
date: Sun Sep 27 14:48:08 EDT 2020
Pushed v1.35 code - Added an option to change interpolation mode to 2-tap linear, just to match real FT2. This interpolation method is of worse quality than the current one (4-tap cubic spline). - Fixed some sample tap bugs with the cubic spline resampling interpolation - Fixed an issue where unwanted sample data could be shown at the loop end point of a looped sample in the sample editor. - Updated some parts of the help text - Small code cleanup
--- a/src/ft2_about.c
+++ b/src/ft2_about.c
@@ -37,6 +37,7 @@
static int16_t hastighet;
static int32_t lastStarScreenPos[NUM_STARS];
static uint32_t randSeed;
+static double pi;
static vector_t starcrd[NUM_STARS];
static rotate_t star_a;
static matrix_t starmat;
@@ -62,12 +63,12 @@
int32_t sa, sb, sc, ca, cb, cc;
// original code used a cos/sin table, but this only runs once per frame, no need...
- sa = (int32_t)round(32767.0 * sin(a.x * (2.0 * M_PI / 65536.0)));
- ca = (int32_t)round(32767.0 * cos(a.x * (2.0 * M_PI / 65536.0)));
- sb = (int32_t)round(32767.0 * sin(a.y * (2.0 * M_PI / 65536.0)));
- cb = (int32_t)round(32767.0 * cos(a.y * (2.0 * M_PI / 65536.0)));
- sc = (int32_t)round(32767.0 * sin(a.z * (2.0 * M_PI / 65536.0)));
- cc = (int32_t)round(32767.0 * cos(a.z * (2.0 * M_PI / 65536.0)));
+ sa = (int32_t)round(32767.0 * sin(a.x * (2.0 * pi / 65536.0)));
+ ca = (int32_t)round(32767.0 * cos(a.x * (2.0 * pi / 65536.0)));
+ sb = (int32_t)round(32767.0 * sin(a.y * (2.0 * pi / 65536.0)));
+ cb = (int32_t)round(32767.0 * cos(a.y * (2.0 * pi / 65536.0)));
+ sc = (int32_t)round(32767.0 * sin(a.z * (2.0 * pi / 65536.0)));
+ cc = (int32_t)round(32767.0 * cos(a.z * (2.0 * pi / 65536.0)));
mat->x.x = (int16_t)(((ca * cc) >> 16) + ((sc * ((sa * sb) >> 16)) >> (16-1)));
mat->y.x = (int16_t)((sa * cb) >> 16);
@@ -94,6 +95,8 @@
int32_t r, n, w, h;
double ww;
+ pi = 4.0 * atan(1.0); // M_PI can not be trusted
+
type = (uint8_t)random32(4);
switch (type)
{
@@ -125,7 +128,7 @@
r = random32(30000);
n = random32(5);
w = ((2 * random32(2)) - 1) * sqr(random32(1000));
- ww = (((M_PI * 2.0) / 5.0) * n) + (r / 12000.0) + (w / 3000000.0);
+ ww = (((pi * 2.0) / 5.0) * n) + (r / 12000.0) + (w / 3000000.0);
h = ((sqr(r) / 30000) * (random32(10000) - 5000)) / 12000;
starcrd[i].x = (int16_t)(r * cos(ww));
@@ -146,9 +149,9 @@
w = random32(3000);
ww = ((w * 8) + r) / 16.0;
- const int32_t z = (int32_t)round(32767.0 * cos(w * (2.0 * M_PI / 1024.0)));
- const int32_t y = (int32_t)round(32767.0 * sin(w * (2.0 * M_PI / 1024.0)));
- const int32_t x = (int32_t)round(32767.0 * cos(ww * (2.0 * M_PI / 1024.0))) / 4;
+ const int32_t z = (int32_t)round(32767.0 * cos(w * (2.0 * pi / 1024.0)));
+ const int32_t y = (int32_t)round(32767.0 * sin(w * (2.0 * pi / 1024.0)));
+ const int32_t x = (int32_t)round(32767.0 * cos(ww * (2.0 * pi / 1024.0))) / 4;
starcrd[i].z = (int16_t)((z * (w + r)) / 3500);
starcrd[i].y = (int16_t)((y * (w + r)) / 3500);
@@ -233,8 +236,6 @@
fixaMatris(star_a, &starmat);
realStars();
}
-
-extern uint32_t *unpackedData;
void showAboutScreen(void) // called once when About screen is opened
{
--- a/src/ft2_audio.c
+++ b/src/ft2_audio.c
@@ -186,10 +186,10 @@
unlockMixerCallback();
}
-void audioSetInterpolation(bool interpolation)
+void audioSetInterpolationType(uint8_t interpolationType)
{
lockMixerCallback();
- audio.interpolationFlag = interpolation;
+ audio.interpolationType = interpolationType;
unlockMixerCallback();
}
@@ -321,13 +321,27 @@
{
v->base16 = (const int16_t *)s->pek;
v->revBase16 = &v->base16[loopStart + loopEnd]; // for pingpong loops
+
+ // first tap [-1] sample for special case: if (hasLooped && pos == loopStart)
+ if (loopType == 1)
+ v->fTapFixSample = v->base16[loopEnd-1];
+ else if (loopType == 2)
+ v->fTapFixSample = v->base16[loopStart];
}
else
{
v->base8 = s->pek;
v->revBase8 = &v->base8[loopStart + loopEnd]; // for pingpong loops
+
+ // first tap [-1] sample for special case: if (hasLooped && pos == loopStart)
+ if (loopType == 1)
+ v->fTapFixSample = v->base8[loopEnd-1];
+ else if (loopType == 2)
+ v->fTapFixSample = v->base8[loopStart];
}
+ v->hasLooped = false; // for cubic interpolation special case (read fTapFixSample comment above)
+
v->backwards = false;
v->loopType = loopType;
v->end = (loopType > 0) ? loopEnd : length;
@@ -343,7 +357,7 @@
return;
}
- v->mixFuncOffset = (sampleIs16Bit * 6) + (audio.interpolationFlag * 3) + loopType;
+ v->mixFuncOffset = (sampleIs16Bit * 9) + (audio.interpolationType * 3) + loopType;
v->active = true;
}
@@ -548,13 +562,13 @@
centerMixFlag = v->fVolL == v->fVolR;
}
- mixFuncTab[(centerMixFlag * 24) + (volRampFlag * 12) + v->mixFuncOffset](v, samplesToMix);
+ mixFuncTab[(centerMixFlag * 36) + (volRampFlag * 18) + v->mixFuncOffset](v, samplesToMix);
}
if (r->active) // volume ramp fadeout-voice
{
const bool centerMixFlag = (r->fDestVolL == r->fDestVolR) && (r->fVolDeltaL == r->fVolDeltaR);
- mixFuncTab[(centerMixFlag * 24) + 12 + r->mixFuncOffset](r, samplesToMix);
+ mixFuncTab[(centerMixFlag * 36) + 18 + r->mixFuncOffset](r, samplesToMix);
}
}
}
--- a/src/ft2_audio.h
+++ b/src/ft2_audio.h
@@ -11,6 +11,8 @@
FREQ_TABLE_AMIGA = 1,
};
+#define NUM_FIXED_TAP_SAMPLES 2
+
#define MIN_AUDIO_FREQ 44100
#define MAX_AUDIO_FREQ 192000
@@ -27,8 +29,9 @@
{
char *currInputDevice, *currOutputDevice, *lastWorkingAudioDeviceName;
char *inputDeviceNames[MAX_AUDIO_DEVICES], *outputDeviceNames[MAX_AUDIO_DEVICES];
- volatile bool locked, resetSyncTickTimeFlag, volumeRampingFlag, interpolationFlag;
+ volatile bool locked, resetSyncTickTimeFlag, volumeRampingFlag;
bool linearFreqTable, rescanAudioDevicesSupported;
+ volatile uint8_t interpolationType;
int32_t quickVolRampSamples, inputDeviceNum, outputDeviceNum, lastWorkingAudioFreq, lastWorkingAudioBits;
uint32_t freq, audLatencyPerfValInt, audLatencyPerfValFrac, samplesPerTick, musicTimeSpeedVal;
uint64_t tickTime64, tickTime64Frac, tickTimeLengthTab[MAX_BPM+1];
@@ -44,11 +47,12 @@
{
const int8_t *base8, *revBase8;
const int16_t *base16, *revBase16;
- bool active, backwards, isFadeOutVoice;
+ bool active, backwards, isFadeOutVoice, hasLooped;
uint8_t mixFuncOffset, pan, loopType;
int32_t pos, end, loopStart, loopLength;
uint32_t volRampSamples, revDelta;
uint64_t posFrac, delta;
+ float fTapFixSample; // if (loopStart > 0 && pos == loopStart) useThisForFirstTap();
float fVol, fDestVolL, fDestVolR, fVolL, fVolR, fVolDeltaL, fVolDeltaR;
} voice_t;
@@ -98,7 +102,7 @@
void setBackOldAudioFreq(void);
void setSpeed(uint16_t bpm);
void audioSetVolRamp(bool volRamp);
-void audioSetInterpolation(bool interpolation);
+void audioSetInterpolationType(uint8_t interpolationType);
void stopVoice(int32_t i);
bool setupAudio(bool showErrorMsg);
void closeAudio(void);
--- a/src/ft2_checkboxes.c
+++ b/src/ft2_checkboxes.c
@@ -81,8 +81,7 @@
// ------ CONFIG CHECKBOXES ------
//x, y, w, h, funcOnUp
{ 3, 91, 77, 12, cbToggleAutoSaveConfig },
- { 389, 132, 90, 12, cbConfigInterpolation },
- { 389, 145, 107, 12, cbConfigVolRamp },
+ { 389, 159, 107, 12, cbConfigVolRamp },
{ 113, 14, 108, 12, cbConfigPattStretch },
{ 113, 27, 117, 12, cbConfigHexCount },
{ 113, 40, 81, 12, cbConfigAccidential },
--- a/src/ft2_checkboxes.h
+++ b/src/ft2_checkboxes.h
@@ -54,7 +54,6 @@
CB_CONF_AUTOSAVE,
// CONFIG AUDIO
- CB_CONF_INTERPOLATION,
CB_CONF_VOL_RAMP,
// CONFIG LAYOUT
--- a/src/ft2_config.c
+++ b/src/ft2_config.c
@@ -47,7 +47,7 @@
static void xorConfigBuffer(uint8_t *ptr8)
{
for (int32_t i = 0; i < CONFIG_FILE_SIZE; i++)
- ptr8[i] ^= (uint8_t)(i * 7);
+ ptr8[i] ^= i*7;
}
static int32_t calcChecksum(uint8_t *p, uint16_t len) // for nibbles highscore data
@@ -141,6 +141,8 @@
config.recMIDIVolSens = CLAMP(config.recMIDIVolSens, 0, 200);
config.recMIDIChn = CLAMP(config.recMIDIChn, 1, 16);
+ config.interpolation &= 3; // one extra bit used in FT2 clone (off, cubic, linear)
+
if (config.recTrueInsert > 1)
config.recTrueInsert = 1;
@@ -179,7 +181,7 @@
if (audio.dev != 0)
setNewAudioSettings();
- audioSetInterpolation(config.interpolation ? true : false);
+ audioSetInterpolationType(config.interpolation);
audioSetVolRamp((config.specialFlags & NO_VOLRAMP_FLAG) ? false : true);
setAudioAmp(config.boostLevel, config.masterVol, config.specialFlags & BITDEPTH_32);
setMouseShape(config.mouseType);
@@ -827,6 +829,18 @@
radioButtons[tmpID].state = RADIOBUTTON_CHECKED;
+ // AUDIO INTERPOLATION
+ uncheckRadioButtonGroup(RB_GROUP_CONFIG_AUDIO_INTERPOLATION);
+
+ if (config.interpolation == INTERPOLATION_NONE)
+ tmpID = RB_CONFIG_AUDIO_INTRP_NONE;
+ else if (config.interpolation == INTERPOLATION_LINEAR)
+ tmpID = RB_CONFIG_AUDIO_INTRP_LINEAR;
+ else
+ tmpID = RB_CONFIG_AUDIO_INTRP_CUBIC;
+
+ radioButtons[tmpID].state = RADIOBUTTON_CHECKED;
+
// AUDIO FREQUENCY
uncheckRadioButtonGroup(RB_GROUP_CONFIG_AUDIO_FREQ);
switch (config.audioFreq)
@@ -857,6 +871,7 @@
showRadioButtonGroup(RB_GROUP_CONFIG_SOUND_BUFF_SIZE);
showRadioButtonGroup(RB_GROUP_CONFIG_AUDIO_BIT_DEPTH);
+ showRadioButtonGroup(RB_GROUP_CONFIG_AUDIO_INTERPOLATION);
showRadioButtonGroup(RB_GROUP_CONFIG_AUDIO_FREQ);
showRadioButtonGroup(RB_GROUP_CONFIG_AUDIO_INPUT_FREQ);
showRadioButtonGroup(RB_GROUP_CONFIG_FREQ_TABLE);
@@ -864,10 +879,7 @@
static void setConfigIOCheckButtonStates(void)
{
- checkBoxes[CB_CONF_INTERPOLATION].checked = config.interpolation;
checkBoxes[CB_CONF_VOL_RAMP].checked = (config.specialFlags & NO_VOLRAMP_FLAG) ? false : true;
-
- showCheckBox(CB_CONF_INTERPOLATION);
showCheckBox(CB_CONF_VOL_RAMP);
}
@@ -1110,9 +1122,9 @@
drawFramework(110, 0, 276, 87, FRAMEWORK_TYPE1);
drawFramework(110, 87, 276, 86, FRAMEWORK_TYPE1);
- drawFramework(386, 0, 119, 73, FRAMEWORK_TYPE1);
- drawFramework(386, 73, 119, 44, FRAMEWORK_TYPE1);
- drawFramework(386, 117, 119, 56, FRAMEWORK_TYPE1);
+ drawFramework(386, 0, 119, 58, FRAMEWORK_TYPE1);
+ drawFramework(386, 58, 119, 44, FRAMEWORK_TYPE1);
+ drawFramework(386, 102, 119, 71, FRAMEWORK_TYPE1);
drawFramework(505, 0, 127, 73, FRAMEWORK_TYPE1);
drawFramework(505, 117, 127, 56, FRAMEWORK_TYPE1);
@@ -1149,13 +1161,15 @@
textOutShadow(406, 31, PAL_FORGRND, PAL_DSKTOP2, "Medium (default)");
textOutShadow(406, 45, PAL_FORGRND, PAL_DSKTOP2, "Large");
- textOutShadow(390, 76, PAL_FORGRND, PAL_DSKTOP2, "Audio bit depth:");
- textOutShadow(406, 90, PAL_FORGRND, PAL_DSKTOP2, "16-bit (default)");
- textOutShadow(406, 104, PAL_FORGRND, PAL_DSKTOP2, "32-bit float");
+ textOutShadow(390, 61, PAL_FORGRND, PAL_DSKTOP2, "Audio bit depth:");
+ textOutShadow(406, 75, PAL_FORGRND, PAL_DSKTOP2, "16-bit (default)");
+ textOutShadow(406, 89, PAL_FORGRND, PAL_DSKTOP2, "32-bit float");
- textOutShadow(390, 120, PAL_FORGRND, PAL_DSKTOP2, "Mixer settings:");
- textOutShadow(406, 134, PAL_FORGRND, PAL_DSKTOP2, "Interpolation");
- textOutShadow(406, 147, PAL_FORGRND, PAL_DSKTOP2, "Volume ramping");
+ textOutShadow(390, 105, PAL_FORGRND, PAL_DSKTOP2, "Interpolation:");
+ textOutShadow(406, 118, PAL_FORGRND, PAL_DSKTOP2, "None");
+ textOutShadow(406, 132, PAL_FORGRND, PAL_DSKTOP2, "Linear (FT2)");
+ textOutShadow(406, 146, PAL_FORGRND, PAL_DSKTOP2, "Cubic spline");
+ textOutShadow(406, 161, PAL_FORGRND, PAL_DSKTOP2, "Volume ramping");
textOutShadow(509, 3, PAL_FORGRND, PAL_DSKTOP2, "Mixing frequency:");
textOutShadow(525, 17, PAL_FORGRND, PAL_DSKTOP2, "44100Hz");
@@ -1398,10 +1412,10 @@
// CONFIG AUDIO
hideRadioButtonGroup(RB_GROUP_CONFIG_SOUND_BUFF_SIZE);
hideRadioButtonGroup(RB_GROUP_CONFIG_AUDIO_BIT_DEPTH);
+ hideRadioButtonGroup(RB_GROUP_CONFIG_AUDIO_INTERPOLATION);
hideRadioButtonGroup(RB_GROUP_CONFIG_AUDIO_FREQ);
hideRadioButtonGroup(RB_GROUP_CONFIG_AUDIO_INPUT_FREQ);
hideRadioButtonGroup(RB_GROUP_CONFIG_FREQ_TABLE);
- hideCheckBox(CB_CONF_INTERPOLATION);
hideCheckBox(CB_CONF_VOL_RAMP);
hidePushButton(PB_CONFIG_AUDIO_RESCAN);
hidePushButton(PB_CONFIG_AUDIO_OUTPUT_DOWN);
@@ -1591,6 +1605,27 @@
setNewAudioSettings();
}
+void rbConfigAudioIntrpNone(void)
+{
+ config.interpolation = INTERPOLATION_NONE;
+ audioSetInterpolationType(config.interpolation);
+ checkRadioButton(RB_CONFIG_AUDIO_INTRP_NONE);
+}
+
+void rbConfigAudioIntrpLinear(void)
+{
+ config.interpolation = INTERPOLATION_LINEAR;
+ audioSetInterpolationType(config.interpolation);
+ checkRadioButton(RB_CONFIG_AUDIO_INTRP_LINEAR);
+}
+
+void rbConfigAudioIntrpCubic(void)
+{
+ config.interpolation = INTERPOLATION_CUBIC;
+ audioSetInterpolationType(config.interpolation);
+ checkRadioButton(RB_CONFIG_AUDIO_INTRP_CUBIC);
+}
+
void rbConfigAudio44kHz(void)
{
config.audioFreq = 44100;
@@ -1651,13 +1686,6 @@
{
config.cfg_AutoSave ^= 1;
}
-
-void cbConfigInterpolation(void)
-{
- config.interpolation ^= 1;
- audioSetInterpolation(config.interpolation);
-}
-
void cbConfigVolRamp(void)
{
config.specialFlags ^= NO_VOLRAMP_FLAG;
--- a/src/ft2_config.h
+++ b/src/ft2_config.h
@@ -18,6 +18,10 @@
CONFIG_HIDE_ERRORS = 0,
CONFIG_SHOW_ERRORS = 1,
+ INTERPOLATION_NONE = 0,
+ INTERPOLATION_CUBIC = 1,
+ INTERPOLATION_LINEAR = 2,
+
MOUSE_IDLE_SHAPE_NICE = 0,
MOUSE_IDLE_SHAPE_UGLY = 1,
MOUSE_IDLE_SHAPE_AWFUL = 2,
@@ -205,6 +209,9 @@
void rbConfigSbs2048(void);
void rbConfigAudio16bit(void);
void rbConfigAudio24bit(void);
+void rbConfigAudioIntrpNone(void);
+void rbConfigAudioIntrpLinear(void);
+void rbConfigAudioIntrpCubic(void);
void rbConfigAudio44kHz(void);
void rbConfigAudio48kHz(void);
void rbConfigAudio96kHz(void);
@@ -238,7 +245,6 @@
void rbWinSize3x(void);
void rbWinSize4x(void);
void cbToggleAutoSaveConfig(void);
-void cbConfigInterpolation(void);
void cbConfigVolRamp(void);
void cbConfigPattStretch(void);
void cbConfigHexCount(void);
--- a/src/ft2_header.h
+++ b/src/ft2_header.h
@@ -12,7 +12,7 @@
#endif
#include "ft2_replayer.h"
-#define PROG_VER_STR "1.34"
+#define PROG_VER_STR "1.35"
// do NOT change these! It will only mess things up...
--- a/src/ft2_main.c
+++ b/src/ft2_main.c
@@ -33,7 +33,6 @@
#include "ft2_events.h"
#include "ft2_bmp.h"
#include "ft2_structs.h"
-#include "mixer/ft2_cubic.h"
#ifdef HAS_MIDI
static SDL_Thread *initMidiThread;
@@ -334,7 +333,6 @@
closeAudio();
closeReplayer();
closeVideo();
- freeCubicTable();
freeSprites();
freeDiskOp();
clearCopyBuffer();
--- a/src/ft2_radiobuttons.c
+++ b/src/ft2_radiobuttons.c
@@ -75,14 +75,20 @@
// audio buffer size
//x, y, w, group, funcOnUp
- { 390, 16, 46, RB_GROUP_CONFIG_SOUND_BUFF_SIZE, rbConfigSbs512 },
- { 390, 30, 113, RB_GROUP_CONFIG_SOUND_BUFF_SIZE, rbConfigSbs1024 },
- { 390, 44, 50, RB_GROUP_CONFIG_SOUND_BUFF_SIZE, rbConfigSbs2048 },
+ { 390, 16, 46, RB_GROUP_CONFIG_SOUND_BUFF_SIZE, rbConfigSbs512 },
+ { 390, 30, 113, RB_GROUP_CONFIG_SOUND_BUFF_SIZE, rbConfigSbs1024 },
+ { 390, 44, 50, RB_GROUP_CONFIG_SOUND_BUFF_SIZE, rbConfigSbs2048 },
// audio bit depth
//x, y, w, group, funcOnUp
- { 390, 89, 107, RB_GROUP_CONFIG_AUDIO_BIT_DEPTH, rbConfigAudio16bit },
- { 390, 103, 83, RB_GROUP_CONFIG_AUDIO_BIT_DEPTH, rbConfigAudio24bit },
+ { 390, 74, 107, RB_GROUP_CONFIG_AUDIO_BIT_DEPTH, rbConfigAudio16bit },
+ { 390, 88, 83, RB_GROUP_CONFIG_AUDIO_BIT_DEPTH, rbConfigAudio24bit },
+
+ // audio interpolation
+ //x, y, w, group, funcOnUp
+ { 390, 117, 46, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrpNone },
+ { 390, 131, 91, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrpLinear },
+ { 390, 145, 86, RB_GROUP_CONFIG_AUDIO_INTERPOLATION, rbConfigAudioIntrpCubic },
// audio output frequency
//x, y, w, group, funcOnUp
--- a/src/ft2_radiobuttons.h
+++ b/src/ft2_radiobuttons.h
@@ -50,10 +50,15 @@
RB_CONFIG_SBS_1024,
RB_CONFIG_SBS_2048,
- // SOUND BIT DEPTH
+ // AUDIO BIT DEPTH
RB_CONFIG_AUDIO_16BIT,
RB_CONFIG_AUDIO_24BIT,
+ // AUDIO INTERPOLATION
+ RB_CONFIG_AUDIO_INTRP_NONE,
+ RB_CONFIG_AUDIO_INTRP_LINEAR,
+ RB_CONFIG_AUDIO_INTRP_CUBIC,
+
// AUDIO FREQUENCY
RB_CONFIG_AUDIO_44KHZ,
RB_CONFIG_AUDIO_48KHZ,
@@ -166,6 +171,7 @@
RB_GROUP_CONFIG_SELECT,
RB_GROUP_CONFIG_SOUND_BUFF_SIZE,
RB_GROUP_CONFIG_AUDIO_BIT_DEPTH,
+ RB_GROUP_CONFIG_AUDIO_INTERPOLATION,
RB_GROUP_CONFIG_AUDIO_FREQ,
RB_GROUP_CONFIG_AUDIO_INPUT_FREQ,
RB_GROUP_CONFIG_FREQ_TABLE,
--- a/src/ft2_replayer.c
+++ b/src/ft2_replayer.c
@@ -20,7 +20,7 @@
#include "ft2_sample_loader.h"
#include "ft2_tables.h"
#include "ft2_structs.h"
-#include "mixer/ft2_cubic.h"
+#include "mixer/ft2_cubicspline.h"
/* This is a mess, directly ported from the original FT2 code (with some modifications).
** You will experience a lot of headaches if you dig into it...
@@ -27,7 +27,7 @@
** If something looks to be off, it probably isn't!
*/
-// non-FT2 precalced stuff
+// non-FT2 precalced stuff (these are kinda big...)
static double dPeriod2HzTab[65536], dLogTab[768], dHz2MixDeltaMul;
static uint32_t revMixDeltaTab[65536];
static bool bxxOverflow;
@@ -2710,6 +2710,8 @@
free(instr[131]);
instr[131] = NULL;
}
+
+ freeCubicTable();
}
bool setupReplayer(void)
--- a/src/ft2_replayer.h
+++ b/src/ft2_replayer.h
@@ -4,6 +4,9 @@
#include <stdbool.h>
#include "ft2_unicode.h"
+// cubic spline requires 2 extra samples in the future to be read
+#define NUM_FIXED_TAP_SAMPLES 2
+
enum
{
// voice flags
@@ -172,7 +175,7 @@
bool fixed;
int8_t fine, relTon, *pek, *origPek;
uint8_t vol, typ, pan;
- int16_t fixedSmp1, fixedSmp2;
+ int16_t fixedSmp[NUM_FIXED_TAP_SAMPLES];
int32_t fixedPos, len, repS, repL;
} sampleTyp;
--- a/src/ft2_sample_ed.c
+++ b/src/ft2_sample_ed.c
@@ -10,7 +10,7 @@
#ifndef _WIN32
#include <unistd.h> // chdir() in UNICHAR_CHDIR()
#endif
-#if defined __APPLE__ || defined _WIN32 || defined __amd64__ || (defined __i386__ && defined __SSE2__)
+#if defined _WIN32 || defined __amd64__ || (defined __i386__ && defined __SSE2__)
#include <emmintrin.h>
#endif
#include "ft2_header.h"
@@ -54,50 +54,72 @@
return &instr[editor.curInstr]->samp[editor.curSmp];
}
-// adds wrapped samples after loop/end (for branchless mixer interpolation)
+// modifies samples before index 0, and after loop/end (for branchless mixer interpolation (kinda))
void fixSample(sampleTyp *s)
{
- uint8_t loopType;
- int16_t *ptr16;
- int32_t loopStart, loopLen, loopEnd, len;
-
assert(s != NULL);
- if (s->origPek == NULL)
+ if (s->origPek == NULL || s->pek == NULL)
+ {
+ s->fixed = false;
+ s->fixedPos = 0;
return; // empty sample
+ }
- assert(s->pek != NULL);
+ const bool sample16Bit = (s->typ & 16) ? true : false;
+ int16_t *ptr16 = (int16_t *)s->pek;
+ uint8_t loopType = s->typ & 3;
+ int32_t len = s->len;
+ int32_t loopStart = s->repS;
+ int32_t loopLen = s->repL;
+ int32_t loopEnd = s->repS + s->repL;
- loopType = s->typ & 3;
- if (loopType == 0)
+ if (sample16Bit)
{
- len = s->len;
+ len >>= 1;
+ loopStart >>= 1;
+ loopLen >>= 1;
+ loopEnd >>= 1;
+ }
- // no loop (don't mess with fixed, fixSpar of fixedPos)
+ if (len < 1)
+ {
+ s->fixed = false;
+ s->fixedPos = 0;
+ return; // empty sample
+ }
- if (s->typ & 16)
- {
- if (len < 2)
- return;
+ // disable loop if loopLen == 0 (FT2 does this)
+ if (loopType != 0 && loopLen == 0)
+ {
+ loopType = 0;
+ loopStart = loopLen = loopEnd = 0;
+ }
- len >>= 1;
- ptr16 = (int16_t *)s->pek;
+ /* The first and second tap (-1, 0) should be the same at sampling position #0
+ ** (at sample trigger), until an eventual loop cycle, where the -1 tap has a
+ ** special case in the mixer.
+ */
+ if (sample16Bit)
+ ptr16[-1] = ptr16[0];
+ else
+ s->pek[-1] = s->pek[0];
- // write new values
- ptr16[-1] = 0;
- ptr16[len+0] = 0;
- ptr16[len+1] = 0;
+ if (loopType == 0)
+ {
+ // no loop
+ if (sample16Bit)
+ {
+ for (int32_t i = 0; i < NUM_FIXED_TAP_SAMPLES; i++)
+ ptr16[len+i] = ptr16[len-1];
}
else
{
- if (len < 1)
- return;
-
- // write new values
- s->pek[-1] = 0;
- s->pek[len+0] = 0;
- s->pek[len+1] = 0;
+ for (int32_t i = 0; i < NUM_FIXED_TAP_SAMPLES; i++)
+ s->pek[len+i] = s->pek[len-1];
}
+ s->fixedPos = 0;
+ s->fixed = false; // no fixed samples inside actual sample data
return;
}
@@ -104,165 +126,100 @@
if (s->fixed)
return; // already fixed
- if (loopType == 1)
- {
- // forward loop
+ s->fixedPos = loopStart + loopLen;
- if (s->typ & 16)
+ if (loopLen == 1) // too short for interpolation kernel size, fix in a different way
+ {
+ if (sample16Bit)
{
- // 16-bit sample
-
- if (s->repL < 2)
- return;
-
- loopStart = s->repS >> 1;
- loopEnd = (s->repS + s->repL) >> 1;
-
- ptr16 = (int16_t *)s->pek;
-
- // store old fix position and old values
- s->fixedPos = s->repS + s->repL;
- s->fixedSmp1 = ptr16[loopEnd+0];
- s->fixedSmp2 = ptr16[loopEnd+1];
-
- // write new values
- ptr16[loopEnd+0] = ptr16[loopStart+0];
- if (loopStart == 0 && loopEnd > 0)
- ptr16[-1] = ptr16[loopEnd-1];
- else
- ptr16[-1] = 0;
-
- ptr16[loopEnd+1] = ptr16[loopStart+1];
+ for (int32_t i = 0; i < NUM_FIXED_TAP_SAMPLES; i++)
+ {
+ s->fixedSmp[i] = ptr16[loopEnd+i];
+ ptr16[loopEnd+i] = ptr16[loopStart];
+ }
}
else
{
- // 8-bit sample
+ for (int32_t i = 0; i < NUM_FIXED_TAP_SAMPLES; i++)
+ {
+ s->fixedSmp[i] = s->pek[loopEnd+i];
+ s->pek[loopEnd+i] = s->pek[loopStart];
+ }
+ }
- if (s->repL < 1)
- return;
+ s->fixed = true;
+ return;
+ }
- loopStart = s->repS;
- loopEnd = s->repS + s->repL;
-
- // store old fix position and old values
- s->fixedPos = loopEnd;
- s->fixedSmp1 = s->pek[loopEnd+0];
- s->fixedSmp2 = s->pek[loopEnd+1];
-
- // write new values
- s->pek[loopEnd+0] = s->pek[loopStart+0];
- if (loopStart == 0 && loopEnd > 0)
- s->pek[-1] = s->pek[loopEnd-1];
- else
- s->pek[-1] = 0;
-
- s->pek[loopEnd+1] = s->pek[loopStart+1];
+ if (loopType == 1)
+ {
+ // forward loop
+ if (sample16Bit)
+ {
+ for (int32_t i = 0; i < NUM_FIXED_TAP_SAMPLES; i++)
+ {
+ s->fixedSmp[i] = ptr16[loopEnd+i];
+ ptr16[loopEnd+i] = ptr16[loopStart+i];
+ }
}
+ else
+ {
+ for (int32_t i = 0; i < NUM_FIXED_TAP_SAMPLES; i++)
+ {
+ s->fixedSmp[i] = s->pek[loopEnd+i];
+ s->pek[loopEnd+i] = s->pek[loopStart+i];
+ }
+ }
}
else
{
// pingpong loop
-
- if (s->typ & 16)
+ if (sample16Bit)
{
- // 16-bit sample
-
- if (s->repL < 2)
- return;
-
- loopStart = s->repS >> 1;
- loopLen = s->repL >> 1;
-
- loopEnd = loopStart + loopLen;
- ptr16 = (int16_t *)s->pek;
-
- // store old fix position and old values
- s->fixedPos = s->repS + s->repL;
- s->fixedSmp1 = ptr16[loopEnd+0];
- s->fixedSmp2 = ptr16[loopEnd+1];
-
- // write new values
- ptr16[loopEnd+0] = ptr16[loopEnd-1];
- if (loopStart == 0)
- ptr16[-1] = ptr16[0];
- else
- ptr16[-1] = 0;
-
- if (loopLen >= 2)
- ptr16[loopEnd+1] = ptr16[loopEnd-2];
- else
- ptr16[loopEnd+1] = ptr16[loopStart+0];
+ for (int32_t i = 0; i < NUM_FIXED_TAP_SAMPLES; i++)
+ {
+ s->fixedSmp[i] = ptr16[loopEnd+i];
+ ptr16[loopEnd+i] = ptr16[loopEnd-1-i];
+ }
}
else
{
- // 8-bit sample
-
- if (s->repL < 1)
- return;
-
- loopStart = s->repS;
- loopLen = s->repL;
-
- loopEnd = loopStart + loopLen;
-
- // store old fix position and old values
- s->fixedPos = loopEnd;
- s->fixedSmp1 = s->pek[loopEnd+0];
- s->fixedSmp2 = s->pek[loopEnd+1];
-
- // write new values
- s->pek[loopEnd+0] = s->pek[loopEnd-1];
- if (loopStart == 0)
- s->pek[-1] = s->pek[0];
- else
- s->pek[-1] = 0;
-
- if (loopLen >= 2)
- s->pek[loopEnd+1] = s->pek[loopEnd-2];
- else
- s->pek[loopEnd+1] = s->pek[loopStart+0];
+ for (int32_t i = 0; i < NUM_FIXED_TAP_SAMPLES; i++)
+ {
+ s->fixedSmp[i] = s->pek[loopEnd+i];
+ s->pek[loopEnd+i] = s->pek[loopEnd-1-i];
+ }
}
}
+ // -1 tap (right before loopStart) on forward/pingpong loops are handled in the mixer
+
s->fixed = true;
}
-// reverts wrapped samples after loop/end (for branchless mixer interpolation)
+// restores interpolation tap samples after loop/end
void restoreSample(sampleTyp *s)
{
- int16_t *ptr16;
- int32_t fixedPos16;
-
assert(s != NULL);
- if (s->origPek == NULL || s->len == 0 || (s->typ & 3) == 0 || !s->fixed)
- return; // empty sample, no loop or not fixed
+ if (s->origPek == NULL || s->pek == NULL || !s->fixed)
+ return; // empty sample or not fixed (f.ex. no loop)
- assert(s->pek != NULL);
- s->fixed = false;
-
- // clear pre-start bytes (this is safe, we have allocated room on the left for this)
- s->pek[-4] = 0;
- s->pek[-3] = 0;
- s->pek[-2] = 0;
- s->pek[-1] = 0;
-
if (s->typ & 16)
{
// 16-bit sample
-
- ptr16 = (int16_t *)s->pek;
- fixedPos16 = s->fixedPos >> 1;
-
- ptr16[fixedPos16+0] = s->fixedSmp1;
- ptr16[fixedPos16+1] = s->fixedSmp2;
+ int16_t *ptr16 = (int16_t *)s->pek + s->fixedPos;
+ for (int32_t i = 0; i < NUM_FIXED_TAP_SAMPLES; i++)
+ ptr16[i] = s->fixedSmp[i];
}
else
{
// 8-bit sample
-
- s->pek[s->fixedPos+0] = (int8_t)s->fixedSmp1;
- s->pek[s->fixedPos+1] = (int8_t)s->fixedSmp2;
+ int8_t *ptr8 = s->pek + s->fixedPos;
+ for (int32_t i = 0; i < NUM_FIXED_TAP_SAMPLES; i++)
+ ptr8[i] = (int8_t)s->fixedSmp[i];
}
+
+ s->fixed = false;
}
int16_t getSampleValue(int8_t *ptr, uint8_t typ, int32_t pos)
@@ -317,7 +274,7 @@
double dFTune = realFineTune * (1.0 / 16.0); // new range is -16..15
double dFreq = 8363.0 * exp2((s->relTon + dFTune) * (1.0 / 12.0));
- return (int32_t)(dFreq + 0.5);
+ return (int32_t)(dFreq + 0.5); // rounded
}
int32_t getSampleRangeStart(void)
@@ -618,56 +575,39 @@
}
}
-static int8_t getScaledSample(sampleTyp *s, int32_t index)
+static int8_t getScaledSample(sampleTyp *s, int32_t index) // for drawing sample waveform in zoomed-in mode
{
- int8_t *ptr8, sample;
+ int8_t sample;
int16_t *ptr16;
int32_t tmp32;
+ const int32_t loopEnd = s->repS + s->repL;
+
if (s->pek == NULL || index < 0 || index >= s->len)
- return 0; // return center value if overflown (e.g. sample is shorter than screen width)
+ return 0;
if (s->typ & 16)
{
- ptr16 = (int16_t *)s->pek;
-
assert(!(index & 1));
+ index >>= 1;
- // restore fixed mixer interpolation sample(s)
- if (s->fixed)
- {
- if (index == s->fixedPos)
- tmp32 = s->fixedSmp1;
- else if (index == s->fixedPos+2)
- tmp32 = s->fixedSmp2;
- else
- tmp32 = ptr16[index >> 1];
- }
+ ptr16 = (int16_t *)s->pek;
+
+ // don't read fixed mixer interpolation samples, read the prestine ones instead
+ if (index >= s->fixedPos && index < s->fixedPos+NUM_FIXED_TAP_SAMPLES && s->len > loopEnd && s->fixed)
+ tmp32 = s->fixedSmp[index-s->fixedPos];
else
- {
- tmp32 = ptr16[index >> 1];
- }
+ tmp32 = ptr16[index];
sample = (int8_t)((tmp32 * SAMPLE_AREA_HEIGHT) >> 16);
}
else
{
- ptr8 = s->pek;
-
- // restore fixed mixer interpolation sample(s)
- if (s->fixed)
- {
- if (index == s->fixedPos)
- tmp32 = s->fixedSmp1;
- else if (index == s->fixedPos+1)
- tmp32 = s->fixedSmp2;
- else
- tmp32 = ptr8[index];
- }
+ // don't read fixed mixer interpolation samples, read the prestine ones instead
+ if (index >= s->fixedPos && index < s->fixedPos+NUM_FIXED_TAP_SAMPLES && s->len > loopEnd && s->fixed)
+ tmp32 = s->fixedSmp[index-s->fixedPos];
else
- {
- tmp32 = ptr8[index];
- }
+ tmp32 = s->pek[index];
sample = (int8_t)((tmp32 * SAMPLE_AREA_HEIGHT) >> 8);
}
@@ -762,7 +702,7 @@
static void getMinMax16(const void *p, uint32_t scanLen, int16_t *min16, int16_t *max16)
{
-#if defined __APPLE__ || defined _WIN32 || defined __amd64__ || (defined __i386__ && defined __SSE2__)
+#if defined _WIN32 || defined __amd64__ || (defined __i386__ && defined __SSE2__)
if (cpu.hasSSE2)
{
/* Taken with permission from the OpenMPT project (and slightly modified).
@@ -827,16 +767,14 @@
else
#endif
{
- // non-SSE version (really slow for big samples, especially when scrolling!)
- int16_t smp16, minVal, maxVal, *ptr16;
+ // non-SSE version (really slow for big samples while zoomed out)
+ int16_t minVal = 32767;
+ int16_t maxVal = -32768;
- minVal = 32767;
- maxVal = -32768;
-
- ptr16 = (int16_t *)p;
+ const int16_t *ptr16 = (const int16_t *)p;
for (uint32_t i = 0; i < scanLen; i++)
{
- smp16 = ptr16[i];
+ const int16_t smp16 = ptr16[i];
if (smp16 < minVal) minVal = smp16;
if (smp16 > maxVal) maxVal = smp16;
}
@@ -848,7 +786,7 @@
static void getMinMax8(const void *p, uint32_t scanLen, int8_t *min8, int8_t *max8)
{
-#if defined __APPLE__ || defined _WIN32 || defined __amd64__ || (defined __i386__ && defined __SSE2__)
+#if defined _WIN32 || defined __amd64__ || (defined __i386__ && defined __SSE2__)
if (cpu.hasSSE2)
{
/* Taken with permission from the OpenMPT project (and slightly modified).
@@ -924,16 +862,14 @@
else
#endif
{
- // non-SSE version (really slow for big samples, especially when scrolling!)
- int8_t smp8, minVal, maxVal, *ptr8;
+ // non-SSE version (really slow for big samples while zoomed out)
+ int8_t minVal = 127;
+ int8_t maxVal = -128;
- minVal = 127;
- maxVal = -128;
-
- ptr8 = (int8_t *)p;
+ const int8_t *ptr8 = (const int8_t *)p;
for (uint32_t i = 0; i < scanLen; i++)
{
- smp8 = ptr8[i];
+ const int8_t smp8 = ptr8[i];
if (smp8 < minVal) minVal = smp8;
if (smp8 > maxVal) maxVal = smp8;
}
@@ -943,12 +879,96 @@
}
}
-static void getSampleDataPeak(sampleTyp *s, int32_t index, int32_t numBytes, int16_t *outMin, int16_t *outMax)
+// for scanning sample data peak where loopEnd+NUM_FIXED_TAP_SAMPLES is within scan range (fixed interpolation tap samples)
+static void getSpecialMinMax16(sampleTyp *s, int32_t index, int32_t scanEnd, int16_t *min16, int16_t *max16)
{
+ int16_t minVal, maxVal, minVal2, maxVal2;
+
+ const int16_t *ptr16 = (const int16_t *)s->pek;
+
+ minVal = 32767;
+ maxVal = -32768;
+
+ // read peak samples before fixed samples
+ if (index < s->fixedPos)
+ {
+ getMinMax16(&ptr16[index], s->fixedPos-index, &minVal, &maxVal);
+ index += s->fixedPos-index;
+ }
+
+ // read fixed samples
+ int32_t tmpScanEnd = index+NUM_FIXED_TAP_SAMPLES;
+ if (tmpScanEnd > scanEnd)
+ tmpScanEnd = scanEnd;
+
+ const int16_t *smpReadPtr = s->fixedSmp;
+ for (; index < tmpScanEnd; index++)
+ {
+ const int16_t smp16 = *smpReadPtr++;
+ if (smp16 < minVal) minVal = smp16;
+ if (smp16 > maxVal) maxVal = smp16;
+ }
+
+ // read peak samples after fixed samples
+ if (index < scanEnd)
+ {
+ getMinMax16(&ptr16[index], scanEnd-index, &minVal2, &maxVal2);
+ if (minVal2 < minVal) minVal = minVal2;
+ if (maxVal2 > maxVal) maxVal = maxVal2;
+ }
+
+ *min16 = minVal;
+ *max16 = maxVal;
+}
+
+// for scanning sample data peak where loopEnd+NUM_FIXED_TAP_SAMPLES is within scan range (fixed interpolation tap samples)
+static void getSpecialMinMax8(sampleTyp *s, int32_t index, int32_t scanEnd, int8_t *min8, int8_t *max8)
+{
+ int8_t minVal, maxVal, minVal2, maxVal2;
+
+ const int8_t *ptr8 = (const int8_t *)s->pek;
+
+ minVal = 127;
+ maxVal = -128;
+
+ // read peak samples before fixed samples
+ if (index < s->fixedPos)
+ {
+ getMinMax8(&ptr8[index], s->fixedPos-index, &minVal, &maxVal);
+ index += s->fixedPos-index;
+ }
+
+ // read fixed samples
+ int32_t tmpScanEnd = index+NUM_FIXED_TAP_SAMPLES;
+ if (tmpScanEnd > scanEnd)
+ tmpScanEnd = scanEnd;
+
+ const int16_t *smpReadPtr = (const int16_t *)s->fixedSmp;
+ for (; index < tmpScanEnd; index++)
+ {
+ const int8_t smp8 = (int8_t)(*smpReadPtr++);
+ if (smp8 < minVal) minVal = smp8;
+ if (smp8 > maxVal) maxVal = smp8;
+ }
+
+ // read peak samples after fixed samples
+ if (index < scanEnd)
+ {
+ getMinMax8(&ptr8[index], scanEnd-index, &minVal2, &maxVal2);
+ if (minVal2 < minVal) minVal = minVal2;
+ if (maxVal2 > maxVal) maxVal = maxVal2;
+ }
+
+ *min8 = minVal;
+ *max8 = maxVal;
+}
+
+static void getSampleDataPeak(sampleTyp *s, int32_t index, int32_t numSamples, int16_t *outMin, int16_t *outMax)
+{
int8_t min8, max8;
int16_t min16, max16;
- if (numBytes == 0 || s->pek == NULL || s->len <= 0)
+ if (numSamples == 0 || s->pek == NULL || s->len <= 0)
{
*outMin = SAMPLE_AREA_Y_CENTER;
*outMax = SAMPLE_AREA_Y_CENTER;
@@ -957,12 +977,45 @@
if (s->typ & 16)
{
- // 16-bit sample
-
assert(!(index & 1));
+ index >>= 1;
+ numSamples >>= 1;
+ }
- getMinMax16((int16_t *)&s->pek[index], numBytes >> 1, &min16, &max16);
+ if (s->fixed && s->len > s->repL+s->repS)
+ {
+ const int32_t scanEnd = index + numSamples;
+ /* If the scan area is including the fixed samples (for branchless mixer interpolation),
+ ** do a special procedure to scan the original non-touched samples when needed.
+ */
+ const bool insideRange = index >= s->fixedPos && index < s->fixedPos+NUM_FIXED_TAP_SAMPLES;
+ if (insideRange || (index < s->fixedPos && scanEnd >= s->fixedPos))
+ {
+ if (s->typ & 16)
+ {
+ // 16-bit sample
+ getSpecialMinMax16(s, index, scanEnd, &min16, &max16);
+ *outMin = SAMPLE_AREA_Y_CENTER - ((min16 * SAMPLE_AREA_HEIGHT) >> 16);
+ *outMax = SAMPLE_AREA_Y_CENTER - ((max16 * SAMPLE_AREA_HEIGHT) >> 16);
+ }
+ else
+ {
+ // 8-bit sample
+ getSpecialMinMax8(s, index, scanEnd, &min8, &max8);
+ *outMin = SAMPLE_AREA_Y_CENTER - ((min8 * SAMPLE_AREA_HEIGHT) >> 8);
+ *outMax = SAMPLE_AREA_Y_CENTER - ((max8 * SAMPLE_AREA_HEIGHT) >> 8);
+ }
+
+ return;
+ }
+ }
+
+ if (s->typ & 16)
+ {
+ // 16-bit sample
+ const int16_t *smpPtr16 = (int16_t *)s->pek;
+ getMinMax16(&smpPtr16[index], numSamples, &min16, &max16);
*outMin = SAMPLE_AREA_Y_CENTER - ((min16 * SAMPLE_AREA_HEIGHT) >> 16);
*outMax = SAMPLE_AREA_Y_CENTER - ((max16 * SAMPLE_AREA_HEIGHT) >> 16);
}
@@ -969,9 +1022,7 @@
else
{
// 8-bit sample
-
- getMinMax8(&s->pek[index], numBytes, &min8, &max8);
-
+ getMinMax8(&s->pek[index], numSamples, &min8, &max8);
*outMin = SAMPLE_AREA_Y_CENTER - ((min8 * SAMPLE_AREA_HEIGHT) >> 8);
*outMax = SAMPLE_AREA_Y_CENTER - ((max8 * SAMPLE_AREA_HEIGHT) >> 8);
}
@@ -2675,7 +2726,7 @@
if (okBox(1, "System request", "Minimize sample?") != 1)
return;
- bool hasLoop = s->typ & 3;
+ const bool hasLoop = s->typ & 3;
if (hasLoop && s->len > s->repS+s->repL && s->repL < s->len)
{
lockMixerCallback();
--- a/src/ft2_sample_ed.h
+++ b/src/ft2_sample_ed.h
@@ -8,8 +8,8 @@
#define SAMPLE_AREA_Y_CENTER 250
sampleTyp *getCurSample(void);
-void fixSample(sampleTyp *s); // adds wrapped sample after loop/end (for branchless mixer interpolation)
-void restoreSample(sampleTyp *s); // reverts wrapped sample after loop/end (for branchless mixer interpolation)
+void fixSample(sampleTyp *s); // modifies samples before index 0, and after loop/end (for branchless mixer interpolation)
+void restoreSample(sampleTyp *s); // restores samples after loop/end
void clearSample(void);
void clearCopyBuffer(void);
int32_t getSampleMiddleCRate(sampleTyp *s);
--- a/src/ft2_sample_saver.c
+++ b/src/ft2_sample_saver.c
@@ -45,68 +45,53 @@
uint8_t vibratoType, vibratoSweep, vibratoDepth, vibratoRate;
} mptExtraChunk_t;
-static const char rangedDataStr[] = "Ranged data from FT2";
+static const char *rangedDataStr = "Ranged data from FT2";
// thread data
static bool saveRangeFlag;
static SDL_Thread *thread;
-// used to restore mixer interpolation fix .RAW/.IFF/.WAV files after save
-static bool fileRestoreSampleData(UNICHAR *filenameU, int32_t sampleDataOffset, sampleTyp *smp)
+// restores modified interpolation tap samples after loopEnd (for .RAW/.IFF/.WAV samples after save)
+static void fileRestoreFixedSampleData(UNICHAR *filenameU, uint32_t sampleDataOffset, sampleTyp *s)
{
- int8_t fixedSmp;
- FILE *f;
+ if (!s->fixed)
+ return; // nothing to restore
- if (!smp->fixed)
- return false; // nothing to fix
-
- f = UNICHAR_FOPEN(filenameU, "r+"); // open in read+update mode
+ FILE *f = UNICHAR_FOPEN(filenameU, "r+"); // open in read+update mode
if (f == NULL)
- return false;
+ return;
- if (smp->typ & 16)
- {
- // 16-bit sample
- if (smp->fixedPos < smp->len)
- {
- fseek(f, sampleDataOffset + smp->fixedPos, SEEK_SET);
- fwrite(&smp->fixedSmp1, sizeof (int16_t), 1, f);
- }
+ const bool sample16Bit = (s->typ & 16) ? true : false;
- if (smp->fixedPos+2 < smp->len)
- {
- fseek(f, sampleDataOffset + (smp->fixedPos + 2), SEEK_SET);
- fwrite(&smp->fixedSmp2, sizeof (int16_t), 1, f);
- }
+ uint32_t fixedPos = s->fixedPos;
+ if (sample16Bit)
+ fixedPos *= 2;
+
+ if (fixedPos >= (uint32_t)s->len)
+ return;
+
+ uint32_t bytesToWrite = NUM_FIXED_TAP_SAMPLES * (sample16Bit+1);
+ if (fixedPos+bytesToWrite > (uint32_t)s->len)
+ bytesToWrite = s->len - fixedPos;
+
+ fseek(f, sampleDataOffset+fixedPos, SEEK_SET);
+ if (sample16Bit)
+ {
+ fwrite(s->fixedSmp, sizeof (int16_t), bytesToWrite / 2, f);
}
else
{
- // 8-bit sample
- if (smp->fixedPos < smp->len)
+ for (uint32_t i = 0; i < bytesToWrite; i++)
{
- fseek(f, sampleDataOffset + smp->fixedPos, SEEK_SET);
-
- fixedSmp = (int8_t)smp->fixedSmp1;
+ int8_t fixedSmp = (int8_t)s->fixedSmp[i];
if (editor.sampleSaveMode == SMP_SAVE_MODE_WAV) // on 8-bit WAVs the sample data is unsigned
- fixedSmp ^= 0x80;
+ fixedSmp ^= 0x80; // signed -> unsigned
fwrite(&fixedSmp, sizeof (int8_t), 1, f);
}
-
- if (smp->fixedPos+1 < smp->len)
- {
- fseek(f, sampleDataOffset + (smp->fixedPos + 1), SEEK_SET);
-
- fixedSmp = (int8_t)smp->fixedSmp2;
- if (editor.sampleSaveMode == SMP_SAVE_MODE_WAV) // on 8-bit WAVs the sample data is unsigned
- fixedSmp ^= 0x80;
-
- fwrite(&fixedSmp, sizeof (int8_t), 1, f);
- }
}
fclose(f);
- return true;
}
static bool saveRawSample(UNICHAR *filenameU, bool saveRangedData)
@@ -113,19 +98,15 @@
{
int8_t *samplePtr;
uint32_t sampleLen;
- FILE *f;
- sampleTyp *smp;
- if (instr[editor.curInstr] == NULL ||
- instr[editor.curInstr]->samp[editor.curSmp].pek == NULL ||
- instr[editor.curInstr]->samp[editor.curSmp].len == 0)
+ instrTyp *ins = instr[editor.curInstr];
+ if (ins == NULL || ins->samp[editor.curSmp].pek == NULL || ins->samp[editor.curSmp].len == 0)
{
- okBoxThreadSafe(0, "System message", "Error saving sample: The sample is empty!");
+ okBoxThreadSafe(0, "System message", "The sample is empty!");
return false;
}
- smp = &instr[editor.curInstr]->samp[editor.curSmp];
-
+ sampleTyp *smp = &instr[editor.curInstr]->samp[editor.curSmp];
if (saveRangedData)
{
samplePtr = &smp->pek[getSampleRangeStart()];
@@ -137,7 +118,7 @@
samplePtr = smp->pek;
}
- f = UNICHAR_FOPEN(filenameU, "wb");
+ FILE *f = UNICHAR_FOPEN(filenameU, "wb");
if (f == NULL)
{
okBoxThreadSafe(0, "System message", "General I/O error during saving! Is the file in use?");
@@ -153,8 +134,10 @@
fclose(f);
- // restore mixer interpolation fix
- fileRestoreSampleData(filenameU, 0, smp);
+ // restore modified interpolation tap samples after loopEnd
+ const bool loopEnabled = (smp->typ & 3) ? true : false;
+ if (loopEnabled && smp->len > smp->repS+smp->repL)
+ fileRestoreFixedSampleData(filenameU, 0, smp);
editor.diskOpReadDir = true; // force diskop re-read
@@ -196,21 +179,18 @@
{
char *smpNamePtr;
int8_t *samplePtr;
- uint32_t sampleLen, smpNameLen, chunkLen, tmp32, sampleDataPos;
- FILE *f;
- sampleTyp *smp;
+ uint32_t sampleLen, smpNameLen, chunkLen;
- if (instr[editor.curInstr] == NULL ||
- instr[editor.curInstr]->samp[editor.curSmp].pek == NULL ||
- instr[editor.curInstr]->samp[editor.curSmp].len == 0)
+ instrTyp *ins = instr[editor.curInstr];
+ if (ins == NULL || ins->samp[editor.curSmp].pek == NULL || ins->samp[editor.curSmp].len == 0)
{
- okBoxThreadSafe(0, "System message", "Error saving sample: The sample is empty!");
+ okBoxThreadSafe(0, "System message", "The sample is empty!");
return false;
}
- smp = &instr[editor.curInstr]->samp[editor.curSmp];
+ sampleTyp *smp = &instr[editor.curInstr]->samp[editor.curSmp];
- f = UNICHAR_FOPEN(filenameU, "wb");
+ FILE *f = UNICHAR_FOPEN(filenameU, "wb");
if (f == NULL)
{
okBoxThreadSafe(0, "System message", "General I/O error during saving! Is the file in use?");
@@ -249,7 +229,7 @@
iffWriteUint32(f, 0); // samplesPerHiCycle
// samplesPerSec
- tmp32 = getSampleMiddleCRate(smp);
+ uint32_t tmp32 = getSampleMiddleCRate(smp);
if (tmp32 == 0 || tmp32 > 65535) tmp32 = 16726;
iffWriteUint16(f, (uint16_t)tmp32);
@@ -294,7 +274,7 @@
// "BODY" chunk
chunkLen = sampleLen;
iffWriteChunkHeader(f, "BODY", chunkLen);
- sampleDataPos = ftell(f);
+ const uint32_t sampleDataPos = ftell(f);
iffWriteChunkData(f, samplePtr, chunkLen);
// go back and fill in "FORM" chunk size
@@ -304,8 +284,10 @@
fclose(f);
- // restore interpolation sample fix (was used for audio mixer)
- fileRestoreSampleData(filenameU, sampleDataPos, smp);
+ // restore modified interpolation tap samples after loopEnd
+ const bool loopEnabled = (smp->typ & 3) ? true : false;
+ if (loopEnabled && smp->len > smp->repS+smp->repL)
+ fileRestoreFixedSampleData(filenameU, sampleDataPos, smp);
editor.diskOpReadDir = true; // force diskop re-read
@@ -317,30 +299,21 @@
{
char *smpNamePtr;
int8_t *samplePtr;
- uint8_t sampleBitDepth;
- uint32_t i, sampleLen, riffChunkSize, smpNameLen, tmpLen, progNameLen, sampleDataPos;
- FILE *f;
- sampleTyp *smp;
- instrTyp *ins;
+ uint32_t i, sampleLen, riffChunkSize, smpNameLen, tmpLen;
wavHeader_t wavHeader;
samplerChunk_t samplerChunk;
mptExtraChunk_t mptExtraChunk;
- ins = instr[editor.curInstr];
- if (ins == NULL)
+ instrTyp *ins = instr[editor.curInstr];
+ if (ins == NULL || ins->samp[editor.curSmp].pek == NULL || ins->samp[editor.curSmp].len == 0)
{
- okBoxThreadSafe(0, "System message", "Error saving sample: The sample is empty!");
+ okBoxThreadSafe(0, "System message", "The sample is empty!");
return false;
}
- smp = &ins->samp[editor.curSmp];
- if (smp->pek == NULL || smp->len == 0)
- {
- okBoxThreadSafe(0, "System message", "Error saving sample: The sample is empty!");
- return false;
- }
+ sampleTyp *smp = &ins->samp[editor.curSmp];
- f = UNICHAR_FOPEN(filenameU, "wb");
+ FILE *f = UNICHAR_FOPEN(filenameU, "wb");
if (f == NULL)
{
okBoxThreadSafe(0, "System message", "General I/O error during saving! Is the file in use?");
@@ -358,7 +331,7 @@
samplePtr = smp->pek;
}
- sampleBitDepth = (smp->typ & 16) ? 16 : 8;
+ const uint8_t sampleBitDepth = (smp->typ & 16) ? 16 : 8;
wavHeader.chunkID = 0x46464952; // "RIFF"
wavHeader.chunkSize = 0; // is filled later
@@ -378,7 +351,7 @@
fwrite(&wavHeader, sizeof (wavHeader_t), 1, f);
// write sample data
- sampleDataPos = ftell(f);
+ const uint32_t sampleDataPos = ftell(f);
if (sampleBitDepth == 16)
{
fwrite((int16_t *)samplePtr, sizeof (int16_t), sampleLen / 2, f);
@@ -464,7 +437,7 @@
}
}
- progNameLen = sizeof (PROG_NAME_STR) - 1;
+ const uint32_t progNameLen = sizeof (PROG_NAME_STR) - 1;
tmpLen = 4 + (4 + 4) + (progNameLen + 1 + ((progNameLen + 1) & 1));
if (smpNameLen > 0)
@@ -500,8 +473,10 @@
fclose(f);
- // restore mixer interpolation fix
- fileRestoreSampleData(filenameU, sampleDataPos, smp);
+ // restore modified interpolation tap samples after loopEnd
+ const bool loopEnabled = (smp->typ & 3) ? true : false;
+ if (loopEnabled && smp->len > smp->repS+smp->repL)
+ fileRestoreFixedSampleData(filenameU, sampleDataPos, smp);
editor.diskOpReadDir = true; // force diskop re-read
@@ -511,10 +486,6 @@
static int32_t SDLCALL saveSampleThread(void *ptr)
{
- const UNICHAR *oldPathU;
-
- (void)ptr;
-
if (editor.tmpFilenameU == NULL)
{
okBoxThreadSafe(0, "System message", "General I/O error during saving! Is the file in use?");
@@ -521,7 +492,7 @@
return false;
}
- oldPathU = getDiskOpCurPath();
+ const UNICHAR *oldPathU = getDiskOpCurPath();
// in "save range mode", we must enter the sample directory
if (saveRangeFlag)
@@ -538,6 +509,7 @@
if (saveRangeFlag)
UNICHAR_CHDIR(oldPathU);
+ (void)ptr;
return true;
}
--- a/src/helpdata/FT2.HLP
+++ b/src/helpdata/FT2.HLP
@@ -528,7 +528,7 @@
END
;***************************************************************************
;***************************************************************************
-@LHow to use Fasttracker 2.0
+@LHow to use Fasttracker II
>@X040@C002
>All "not-too-trivial" functions are presented below (ordered in
windows) with a short description.
@@ -782,11 +782,12 @@
>
>@X040@C001Interpolation:
>@X060@C002
-The mixing routine interpolates the sample value between the
-sample points to remove unwanted noise in the sound. Real FT2 uses
-2-tap linear interpolation, while this clone uses 4-tap cubic spline
-interpolation for improved high frequencies. Turning it off will make
-the audio sharper, but it will also be noisier.
+Selects what type of resampling interpolation to use.
+"None" uses no interpolation (nearest neighbor), which will result in
+aliasing (noise) in the sound. "Linear" is what real FT2 uses, which is a
+mediocre interpolation type. "Cubic spline" is the recommended setting
+for the best audio quality, although it may sometimes sound too filtered
+on low-quality samples (f.ex. Amiga MODs).
>@X040@C001Volume ramping:
>@X060@C002
@@ -894,20 +895,12 @@
>@C002A: This is normal. This is a limitation in the nature of scaling.
>@X020
>@C001Q: I found a bug!
->@C002A: Please send a mail to [email protected] and try to explain it.
+>@C002A: Please send me a mail (found at 16-bits.org) and try to explain it.
END
;***************************************************************************
;***************************************************************************
@LKnown bugs
->@X010
->@C001Sample editor:
->@C002
->@X010- When a looped sample is zoomed out in the sample editor, you could see
->@X021unexpected sample data at the loop-end point. This is because of a kludge
-for the resampling interpolation to work faster in the audio mixer, and the
-original FT2 has the same problem. I have made it so that if you zoom in to
-see the individual sample points, it will look like normal.
>@X010
>@C001Mouse / keyboard:
>
--- 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 27330
+#define HELP_DATA_LEN 26993
-const uint8_t helpData[27330] =
+const uint8_t helpData[26993] =
{
0x4C,0x3B,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
@@ -1146,1145 +1146,1117 @@
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,
- 0x1C,0x40,0x4C,0x48,0x6F,0x77,0x20,0x74,0x6F,0x20,0x75,0x73,
+ 0x1B,0x40,0x4C,0x48,0x6F,0x77,0x20,0x74,0x6F,0x20,0x75,0x73,
0x65,0x20,0x46,0x61,0x73,0x74,0x74,0x72,0x61,0x63,0x6B,0x65,
- 0x72,0x20,0x32,0x2E,0x30,0x0B,0x3E,0x40,0x58,0x30,0x34,0x30,
- 0x40,0x43,0x30,0x30,0x32,0x40,0x3E,0x41,0x6C,0x6C,0x20,0x22,
- 0x6E,0x6F,0x74,0x2D,0x74,0x6F,0x6F,0x2D,0x74,0x72,0x69,0x76,
- 0x69,0x61,0x6C,0x22,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,
- 0x6E,0x73,0x20,0x61,0x72,0x65,0x20,0x70,0x72,0x65,0x73,0x65,
- 0x6E,0x74,0x65,0x64,0x20,0x62,0x65,0x6C,0x6F,0x77,0x20,0x28,
- 0x6F,0x72,0x64,0x65,0x72,0x65,0x64,0x20,0x69,0x6E,0x22,0x77,
- 0x69,0x6E,0x64,0x6F,0x77,0x73,0x29,0x20,0x77,0x69,0x74,0x68,
- 0x20,0x61,0x20,0x73,0x68,0x6F,0x72,0x74,0x20,0x64,0x65,0x73,
- 0x63,0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x2E,0x00,0x17,0x3E,
- 0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x4D,0x61,
- 0x69,0x6E,0x20,0x73,0x63,0x72,0x65,0x65,0x6E,0x3A,0x01,0x3E,
- 0x22,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x42,0x50,0x4D,0x20,0x28,0x42,0x65,0x61,0x74,0x73,0x20,0x70,
- 0x65,0x72,0x20,0x6D,0x69,0x6E,0x75,0x74,0x65,0x29,0x3A,0x0B,
- 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,
- 0x54,0x68,0x65,0x20,0x42,0x50,0x4D,0x20,0x73,0x65,0x74,0x74,
- 0x69,0x6E,0x67,0x20,0x64,0x65,0x66,0x69,0x6E,0x65,0x73,0x20,
- 0x68,0x6F,0x77,0x20,0x66,0x61,0x73,0x74,0x20,0x28,0x74,0x69,
- 0x63,0x6B,0x73,0x2F,0x73,0x65,0x63,0x6F,0x6E,0x64,0x29,0x20,
- 0x74,0x68,0x65,0x20,0x6D,0x75,0x73,0x69,0x63,0x20,0x70,0x6C,
- 0x61,0x79,0x65,0x72,0x1C,0x77,0x69,0x6C,0x6C,0x20,0x72,0x75,
- 0x6E,0x2E,0x20,0x31,0x32,0x35,0x20,0x42,0x50,0x4D,0x20,0x3C,
- 0x2D,0x3E,0x20,0x35,0x30,0x20,0x48,0x7A,0x2E,0x28,0x3E,0x4E,
- 0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x6C,0x61,
- 0x79,0x65,0x72,0x20,0x74,0x69,0x63,0x6B,0x73,0x2F,0x73,0x65,
- 0x63,0x6F,0x6E,0x64,0x20,0x3D,0x20,0x42,0x50,0x4D,0x2A,0x32,
- 0x2F,0x35,0x00,0x16,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x53,0x70,0x64,0x2C,0x20,0x53,0x70,0x65,0x65,
- 0x64,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x2C,0x53,0x70,0x65,0x65,0x64,0x20,0x3D,0x20,0x6E,
- 0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x6C,0x61,
- 0x79,0x65,0x72,0x20,0x74,0x69,0x63,0x6B,0x73,0x2F,0x70,0x61,
- 0x74,0x74,0x65,0x72,0x6E,0x20,0x6C,0x69,0x6E,0x65,0x2E,0x00,
- 0x0F,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x41,0x64,0x64,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
- 0x43,0x30,0x30,0x32,0x3E,0x22,0x41,0x64,0x64,0x22,0x20,0x69,
- 0x73,0x20,0x74,0x68,0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,
- 0x20,0x6F,0x66,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,
- 0x6C,0x69,0x6E,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x75,
- 0x72,0x73,0x6F,0x72,0x20,0x6A,0x75,0x6D,0x70,0x73,0x20,0x77,
- 0x68,0x65,0x6E,0x20,0x79,0x6F,0x75,0x0C,0x65,0x64,0x69,0x74,
- 0x20,0x61,0x20,0x6E,0x6F,0x74,0x65,0x2E,0x00,0x0F,0x3E,0x40,
- 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x74,0x6E,
+ 0x72,0x20,0x49,0x49,0x0B,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x40,0x3E,0x41,0x6C,0x6C,0x20,0x22,0x6E,
+ 0x6F,0x74,0x2D,0x74,0x6F,0x6F,0x2D,0x74,0x72,0x69,0x76,0x69,
+ 0x61,0x6C,0x22,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,
+ 0x73,0x20,0x61,0x72,0x65,0x20,0x70,0x72,0x65,0x73,0x65,0x6E,
+ 0x74,0x65,0x64,0x20,0x62,0x65,0x6C,0x6F,0x77,0x20,0x28,0x6F,
+ 0x72,0x64,0x65,0x72,0x65,0x64,0x20,0x69,0x6E,0x22,0x77,0x69,
+ 0x6E,0x64,0x6F,0x77,0x73,0x29,0x20,0x77,0x69,0x74,0x68,0x20,
+ 0x61,0x20,0x73,0x68,0x6F,0x72,0x74,0x20,0x64,0x65,0x73,0x63,
+ 0x72,0x69,0x70,0x74,0x69,0x6F,0x6E,0x2E,0x00,0x17,0x3E,0x40,
+ 0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x4D,0x61,0x69,
+ 0x6E,0x20,0x73,0x63,0x72,0x65,0x65,0x6E,0x3A,0x01,0x3E,0x22,
+ 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x42,
+ 0x50,0x4D,0x20,0x28,0x42,0x65,0x61,0x74,0x73,0x20,0x70,0x65,
+ 0x72,0x20,0x6D,0x69,0x6E,0x75,0x74,0x65,0x29,0x3A,0x0B,0x3E,
+ 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x54,
+ 0x68,0x65,0x20,0x42,0x50,0x4D,0x20,0x73,0x65,0x74,0x74,0x69,
+ 0x6E,0x67,0x20,0x64,0x65,0x66,0x69,0x6E,0x65,0x73,0x20,0x68,
+ 0x6F,0x77,0x20,0x66,0x61,0x73,0x74,0x20,0x28,0x74,0x69,0x63,
+ 0x6B,0x73,0x2F,0x73,0x65,0x63,0x6F,0x6E,0x64,0x29,0x20,0x74,
+ 0x68,0x65,0x20,0x6D,0x75,0x73,0x69,0x63,0x20,0x70,0x6C,0x61,
+ 0x79,0x65,0x72,0x1C,0x77,0x69,0x6C,0x6C,0x20,0x72,0x75,0x6E,
+ 0x2E,0x20,0x31,0x32,0x35,0x20,0x42,0x50,0x4D,0x20,0x3C,0x2D,
+ 0x3E,0x20,0x35,0x30,0x20,0x48,0x7A,0x2E,0x28,0x3E,0x4E,0x75,
+ 0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x6C,0x61,0x79,
+ 0x65,0x72,0x20,0x74,0x69,0x63,0x6B,0x73,0x2F,0x73,0x65,0x63,
+ 0x6F,0x6E,0x64,0x20,0x3D,0x20,0x42,0x50,0x4D,0x2A,0x32,0x2F,
+ 0x35,0x00,0x16,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
+ 0x30,0x31,0x53,0x70,0x64,0x2C,0x20,0x53,0x70,0x65,0x65,0x64,
0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
- 0x32,0x1B,0x54,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,
- 0x74,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6E,0x75,
- 0x6D,0x62,0x65,0x72,0x2E,0x00,0x0E,0x3E,0x40,0x58,0x30,0x34,
- 0x30,0x40,0x43,0x30,0x30,0x31,0x4C,0x6E,0x3A,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x43,0x54,0x68,
- 0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,
- 0x6C,0x69,0x6E,0x65,0x73,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,
- 0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x70,0x61,
- 0x74,0x74,0x65,0x72,0x6E,0x2E,0x20,0x55,0x70,0x20,0x74,0x6F,
- 0x20,0x24,0x31,0x30,0x30,0x20,0x6C,0x69,0x6E,0x65,0x73,0x2E,
- 0x20,0x4E,0x6F,0x74,0x65,0x40,0x74,0x68,0x61,0x74,0x20,0x46,
- 0x54,0x32,0x20,0x77,0x6F,0x6E,0x27,0x74,0x20,0x77,0x61,0x72,
- 0x6E,0x20,0x79,0x6F,0x75,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,
- 0x20,0x64,0x65,0x63,0x72,0x65,0x61,0x73,0x65,0x20,0x74,0x68,
- 0x69,0x73,0x20,0x76,0x61,0x6C,0x75,0x65,0x2E,0x20,0x54,0x68,
- 0x65,0x20,0x6E,0x6F,0x74,0x65,0x73,0x20,0x61,0x74,0x37,0x74,
- 0x68,0x65,0x20,0x62,0x6F,0x74,0x74,0x6F,0x6D,0x20,0x6C,0x69,
- 0x6E,0x65,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x74,
- 0x68,0x72,0x6F,0x77,0x6E,0x20,0x6F,0x75,0x74,0x20,0x74,0x6F,
- 0x20,0x74,0x68,0x65,0x20,0x62,0x69,0x6E,0x61,0x72,0x79,0x20,
- 0x73,0x70,0x61,0x63,0x65,0x2E,0x00,0x10,0x3E,0x40,0x58,0x30,
- 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x45,0x78,0x70,0x64,0x3A,
+ 0x32,0x2C,0x53,0x70,0x65,0x65,0x64,0x20,0x3D,0x20,0x6E,0x75,
+ 0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x70,0x6C,0x61,0x79,
+ 0x65,0x72,0x20,0x74,0x69,0x63,0x6B,0x73,0x2F,0x70,0x61,0x74,
+ 0x74,0x65,0x72,0x6E,0x20,0x6C,0x69,0x6E,0x65,0x2E,0x00,0x0F,
+ 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x41,
+ 0x64,0x64,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+ 0x30,0x30,0x32,0x3E,0x22,0x41,0x64,0x64,0x22,0x20,0x69,0x73,
+ 0x20,0x74,0x68,0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,
+ 0x6F,0x66,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6C,
+ 0x69,0x6E,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,
+ 0x73,0x6F,0x72,0x20,0x6A,0x75,0x6D,0x70,0x73,0x20,0x77,0x68,
+ 0x65,0x6E,0x20,0x79,0x6F,0x75,0x0C,0x65,0x64,0x69,0x74,0x20,
+ 0x61,0x20,0x6E,0x6F,0x74,0x65,0x2E,0x00,0x0F,0x3E,0x40,0x58,
+ 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x74,0x6E,0x3A,
+ 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
+ 0x1B,0x54,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,
+ 0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6E,0x75,0x6D,
+ 0x62,0x65,0x72,0x2E,0x00,0x0E,0x3E,0x40,0x58,0x30,0x34,0x30,
+ 0x40,0x43,0x30,0x30,0x31,0x4C,0x6E,0x3A,0x0B,0x3E,0x40,0x58,
+ 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x43,0x54,0x68,0x65,
+ 0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x6F,0x66,0x20,0x6C,
+ 0x69,0x6E,0x65,0x73,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,
+ 0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x70,0x61,0x74,
+ 0x74,0x65,0x72,0x6E,0x2E,0x20,0x55,0x70,0x20,0x74,0x6F,0x20,
+ 0x24,0x31,0x30,0x30,0x20,0x6C,0x69,0x6E,0x65,0x73,0x2E,0x20,
+ 0x4E,0x6F,0x74,0x65,0x40,0x74,0x68,0x61,0x74,0x20,0x46,0x54,
+ 0x32,0x20,0x77,0x6F,0x6E,0x27,0x74,0x20,0x77,0x61,0x72,0x6E,
+ 0x20,0x79,0x6F,0x75,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x20,
+ 0x64,0x65,0x63,0x72,0x65,0x61,0x73,0x65,0x20,0x74,0x68,0x69,
+ 0x73,0x20,0x76,0x61,0x6C,0x75,0x65,0x2E,0x20,0x54,0x68,0x65,
+ 0x20,0x6E,0x6F,0x74,0x65,0x73,0x20,0x61,0x74,0x37,0x74,0x68,
+ 0x65,0x20,0x62,0x6F,0x74,0x74,0x6F,0x6D,0x20,0x6C,0x69,0x6E,
+ 0x65,0x20,0x77,0x69,0x6C,0x6C,0x20,0x62,0x65,0x20,0x74,0x68,
+ 0x72,0x6F,0x77,0x6E,0x20,0x6F,0x75,0x74,0x20,0x74,0x6F,0x20,
+ 0x74,0x68,0x65,0x20,0x62,0x69,0x6E,0x61,0x72,0x79,0x20,0x73,
+ 0x70,0x61,0x63,0x65,0x2E,0x00,0x10,0x3E,0x40,0x58,0x30,0x34,
+ 0x30,0x40,0x43,0x30,0x30,0x31,0x45,0x78,0x70,0x64,0x3A,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x44,
+ 0x45,0x78,0x70,0x61,0x6E,0x64,0x20,0x70,0x61,0x74,0x74,0x65,
+ 0x72,0x6E,0x2E,0x20,0x49,0x6E,0x73,0x65,0x72,0x74,0x73,0x20,
+ 0x61,0x20,0x62,0x6C,0x61,0x6E,0x6B,0x20,0x6C,0x69,0x6E,0x65,
+ 0x20,0x61,0x66,0x74,0x65,0x72,0x20,0x65,0x61,0x63,0x68,0x20,
+ 0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6C,0x69,0x6E,0x65,
+ 0x2E,0x20,0x55,0x73,0x65,0x66,0x75,0x6C,0x3C,0x69,0x66,0x20,
+ 0x79,0x6F,0x75,0x20,0x77,0x61,0x6E,0x74,0x20,0x74,0x6F,0x20,
+ 0x63,0x6F,0x6E,0x76,0x65,0x72,0x74,0x20,0x61,0x20,0x70,0x61,
+ 0x74,0x74,0x65,0x72,0x6E,0x20,0x74,0x68,0x61,0x74,0x20,0x72,
+ 0x75,0x6E,0x73,0x20,0x69,0x6E,0x20,0x73,0x70,0x65,0x65,0x64,
+ 0x20,0x32,0x2A,0x78,0x20,0x74,0x6F,0x20,0x61,0x1D,0x70,0x61,
+ 0x74,0x74,0x65,0x72,0x6E,0x20,0x74,0x68,0x61,0x74,0x20,0x72,
+ 0x75,0x6E,0x73,0x20,0x69,0x6E,0x20,0x73,0x70,0x65,0x65,0x64,
+ 0x20,0x78,0x2E,0x00,0x10,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
+ 0x43,0x30,0x30,0x31,0x53,0x68,0x6E,0x6B,0x3A,0x0B,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x2E,0x53,0x68,
+ 0x72,0x69,0x6E,0x6B,0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,
+ 0x2E,0x20,0x44,0x65,0x6C,0x65,0x74,0x65,0x73,0x20,0x61,0x6C,
+ 0x6C,0x20,0x6F,0x64,0x64,0x20,0x70,0x61,0x74,0x74,0x65,0x72,
+ 0x6E,0x20,0x6C,0x69,0x6E,0x65,0x73,0x2E,0x00,0x2A,0x3E,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,0x68,0x65,
+ 0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x2F,
+ 0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x73,0x65,0x6C,0x65,0x63,
+ 0x74,0x6F,0x72,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x3A,0x54,0x68,0x65,0x20,0x69,0x6E,0x73,
+ 0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x74,0x68,0x61,0x74,
+ 0x20,0x68,0x61,0x73,0x20,0x61,0x20,0x6D,0x61,0x72,0x6B,0x20,
+ 0x6F,0x6E,0x20,0x69,0x74,0x27,0x73,0x20,0x6E,0x61,0x6D,0x65,
+ 0x20,0x73,0x74,0x72,0x69,0x6E,0x67,0x2C,0x20,0x69,0x73,0x20,
+ 0x74,0x68,0x65,0x17,0x64,0x65,0x73,0x74,0x69,0x6E,0x61,0x74,
+ 0x69,0x6F,0x6E,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,
+ 0x6E,0x74,0x2E,0x3D,0x3E,0x54,0x68,0x65,0x20,0x69,0x6E,0x73,
+ 0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x74,0x68,0x61,0x74,
+ 0x20,0x68,0x61,0x73,0x20,0x61,0x20,0x6D,0x61,0x72,0x6B,0x20,
+ 0x6F,0x6E,0x20,0x69,0x74,0x27,0x73,0x20,0x6E,0x75,0x6D,0x62,
+ 0x65,0x72,0x2C,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x73,
+ 0x6F,0x75,0x72,0x63,0x65,0x0B,0x69,0x6E,0x73,0x74,0x72,0x75,
+ 0x6D,0x65,0x6E,0x74,0x2E,0x1F,0x3E,0x54,0x68,0x65,0x20,0x73,
+ 0x61,0x6D,0x65,0x20,0x67,0x6F,0x65,0x73,0x20,0x66,0x6F,0x72,
+ 0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x73,
+ 0x2E,0x42,0x3E,0x59,0x6F,0x75,0x20,0x63,0x68,0x61,0x6E,0x67,
+ 0x65,0x20,0x74,0x68,0x65,0x20,0x6E,0x61,0x6D,0x65,0x20,0x6F,
+ 0x6E,0x20,0x61,0x6E,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,
+ 0x65,0x6E,0x74,0x2F,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x62,
+ 0x79,0x20,0x63,0x6C,0x69,0x63,0x6B,0x69,0x6E,0x67,0x20,0x74,
+ 0x68,0x65,0x20,0x72,0x69,0x67,0x68,0x74,0x07,0x62,0x75,0x74,
+ 0x74,0x6F,0x6E,0x2E,0x00,0x12,0x3E,0x40,0x58,0x30,0x32,0x30,
+ 0x40,0x43,0x30,0x30,0x31,0x53,0x63,0x6F,0x70,0x65,0x73,0x3A,
0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
- 0x44,0x45,0x78,0x70,0x61,0x6E,0x64,0x20,0x70,0x61,0x74,0x74,
- 0x65,0x72,0x6E,0x2E,0x20,0x49,0x6E,0x73,0x65,0x72,0x74,0x73,
- 0x20,0x61,0x20,0x62,0x6C,0x61,0x6E,0x6B,0x20,0x6C,0x69,0x6E,
- 0x65,0x20,0x61,0x66,0x74,0x65,0x72,0x20,0x65,0x61,0x63,0x68,
- 0x20,0x70,0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x6C,0x69,0x6E,
- 0x65,0x2E,0x20,0x55,0x73,0x65,0x66,0x75,0x6C,0x3C,0x69,0x66,
- 0x20,0x79,0x6F,0x75,0x20,0x77,0x61,0x6E,0x74,0x20,0x74,0x6F,
- 0x20,0x63,0x6F,0x6E,0x76,0x65,0x72,0x74,0x20,0x61,0x20,0x70,
- 0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x74,0x68,0x61,0x74,0x20,
- 0x72,0x75,0x6E,0x73,0x20,0x69,0x6E,0x20,0x73,0x70,0x65,0x65,
- 0x64,0x20,0x32,0x2A,0x78,0x20,0x74,0x6F,0x20,0x61,0x1D,0x70,
- 0x61,0x74,0x74,0x65,0x72,0x6E,0x20,0x74,0x68,0x61,0x74,0x20,
- 0x72,0x75,0x6E,0x73,0x20,0x69,0x6E,0x20,0x73,0x70,0x65,0x65,
- 0x64,0x20,0x78,0x2E,0x00,0x10,0x3E,0x40,0x58,0x30,0x34,0x30,
- 0x40,0x43,0x30,0x30,0x31,0x53,0x68,0x6E,0x6B,0x3A,0x0B,0x3E,
- 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x2E,0x53,
- 0x68,0x72,0x69,0x6E,0x6B,0x20,0x70,0x61,0x74,0x74,0x65,0x72,
- 0x6E,0x2E,0x20,0x44,0x65,0x6C,0x65,0x74,0x65,0x73,0x20,0x61,
- 0x6C,0x6C,0x20,0x6F,0x64,0x64,0x20,0x70,0x61,0x74,0x74,0x65,
- 0x72,0x6E,0x20,0x6C,0x69,0x6E,0x65,0x73,0x2E,0x00,0x2A,0x3E,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,0x68,
- 0x65,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,
- 0x2F,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x73,0x65,0x6C,0x65,
- 0x63,0x74,0x6F,0x72,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
- 0x40,0x43,0x30,0x30,0x32,0x3A,0x54,0x68,0x65,0x20,0x69,0x6E,
- 0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x74,0x68,0x61,
- 0x74,0x20,0x68,0x61,0x73,0x20,0x61,0x20,0x6D,0x61,0x72,0x6B,
- 0x20,0x6F,0x6E,0x20,0x69,0x74,0x27,0x73,0x20,0x6E,0x61,0x6D,
- 0x65,0x20,0x73,0x74,0x72,0x69,0x6E,0x67,0x2C,0x20,0x69,0x73,
- 0x20,0x74,0x68,0x65,0x17,0x64,0x65,0x73,0x74,0x69,0x6E,0x61,
- 0x74,0x69,0x6F,0x6E,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,
- 0x65,0x6E,0x74,0x2E,0x3D,0x3E,0x54,0x68,0x65,0x20,0x69,0x6E,
- 0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x74,0x68,0x61,
- 0x74,0x20,0x68,0x61,0x73,0x20,0x61,0x20,0x6D,0x61,0x72,0x6B,
- 0x20,0x6F,0x6E,0x20,0x69,0x74,0x27,0x73,0x20,0x6E,0x75,0x6D,
- 0x62,0x65,0x72,0x2C,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,
- 0x73,0x6F,0x75,0x72,0x63,0x65,0x0B,0x69,0x6E,0x73,0x74,0x72,
- 0x75,0x6D,0x65,0x6E,0x74,0x2E,0x1F,0x3E,0x54,0x68,0x65,0x20,
- 0x73,0x61,0x6D,0x65,0x20,0x67,0x6F,0x65,0x73,0x20,0x66,0x6F,
- 0x72,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
- 0x73,0x2E,0x42,0x3E,0x59,0x6F,0x75,0x20,0x63,0x68,0x61,0x6E,
- 0x67,0x65,0x20,0x74,0x68,0x65,0x20,0x6E,0x61,0x6D,0x65,0x20,
- 0x6F,0x6E,0x20,0x61,0x6E,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,
- 0x6D,0x65,0x6E,0x74,0x2F,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,
- 0x62,0x79,0x20,0x63,0x6C,0x69,0x63,0x6B,0x69,0x6E,0x67,0x20,
- 0x74,0x68,0x65,0x20,0x72,0x69,0x67,0x68,0x74,0x07,0x62,0x75,
- 0x74,0x74,0x6F,0x6E,0x2E,0x00,0x12,0x3E,0x40,0x58,0x30,0x32,
- 0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x63,0x6F,0x70,0x65,0x73,
- 0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
- 0x32,0x22,0x3E,0x4C,0x65,0x66,0x74,0x20,0x62,0x75,0x74,0x74,
- 0x6F,0x6E,0x3A,0x20,0x54,0x75,0x72,0x6E,0x20,0x63,0x68,0x61,
- 0x6E,0x6E,0x65,0x6C,0x20,0x6F,0x6E,0x2F,0x6F,0x66,0x66,0x2E,
- 0x35,0x3E,0x52,0x69,0x67,0x68,0x74,0x20,0x62,0x75,0x74,0x74,
- 0x6F,0x6E,0x3A,0x20,0x54,0x75,0x72,0x6E,0x20,0x63,0x68,0x61,
- 0x6E,0x6E,0x65,0x6C,0x20,0x6D,0x75,0x6C,0x74,0x69,0x2D,0x72,
- 0x65,0x63,0x6F,0x72,0x64,0x2F,0x65,0x64,0x69,0x74,0x20,0x6F,
- 0x6E,0x2F,0x6F,0x66,0x66,0x2E,0x42,0x3E,0x4C,0x65,0x66,0x74,
- 0x2B,0x72,0x69,0x67,0x68,0x74,0x20,0x62,0x75,0x74,0x74,0x6F,
- 0x6E,0x3A,0x20,0x54,0x75,0x72,0x6E,0x20,0x61,0x6C,0x6C,0x20,
- 0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x73,0x20,0x6F,0x66,0x66,
- 0x20,0x65,0x78,0x63,0x65,0x70,0x74,0x20,0x74,0x68,0x65,0x20,
- 0x73,0x65,0x6C,0x65,0x63,0x74,0x65,0x64,0x20,0x6F,0x6E,0x65,
- 0x2E,0x00,0x1C,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,
- 0x31,0x49,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,
- 0x45,0x64,0x69,0x74,0x6F,0x72,0x3A,0x01,0x3E,0x22,0x3E,0x40,
- 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x57,0x68,0x61,
- 0x74,0x20,0x69,0x73,0x20,0x61,0x6E,0x20,0x69,0x6E,0x73,0x74,
- 0x72,0x75,0x6D,0x65,0x6E,0x74,0x3F,0x3A,0x0B,0x3E,0x40,0x58,
- 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1E,0x41,0x20,0x46,
- 0x61,0x73,0x74,0x74,0x72,0x61,0x63,0x6B,0x65,0x72,0x20,0x32,
- 0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,
- 0x69,0x73,0x3A,0x15,0x3E,0x20,0x20,0x20,0x31,0x20,0x56,0x6F,
- 0x6C,0x75,0x6D,0x65,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,
- 0x65,0x16,0x3E,0x20,0x20,0x20,0x31,0x20,0x50,0x61,0x6E,0x6E,
- 0x69,0x6E,0x67,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,
- 0x1D,0x3E,0x20,0x20,0x20,0x31,0x20,0x41,0x75,0x74,0x6F,0x2D,
- 0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x64,0x65,0x66,0x69,
- 0x6E,0x69,0x74,0x69,0x6F,0x6E,0x13,0x3E,0x20,0x20,0x20,0x31,
- 0x2E,0x2E,0x31,0x36,0x20,0x53,0x61,0x6D,0x70,0x6C,0x65,0x28,
- 0x73,0x29,0x1F,0x3E,0x20,0x20,0x20,0x31,0x20,0x4B,0x65,0x79,
- 0x62,0x6F,0x61,0x72,0x64,0x20,0x73,0x70,0x6C,0x69,0x74,0x20,
- 0x64,0x65,0x66,0x69,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x15,0x3E,
- 0x20,0x20,0x20,0x31,0x20,0x4D,0x49,0x44,0x49,0x20,0x64,0x65,
- 0x66,0x69,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x00,0x1B,0x3E,0x41,
- 0x20,0x46,0x61,0x73,0x74,0x74,0x72,0x61,0x63,0x6B,0x65,0x72,
- 0x20,0x32,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x69,0x73,
- 0x3A,0x29,0x3E,0x20,0x20,0x20,0x31,0x20,0x56,0x6F,0x6C,0x75,
- 0x6D,0x65,0x2F,0x50,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x2F,0x46,
- 0x69,0x6E,0x65,0x2D,0x74,0x75,0x6E,0x65,0x20,0x64,0x65,0x66,
- 0x69,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x14,0x3E,0x20,0x20,0x20,
- 0x31,0x20,0x52,0x65,0x6C,0x61,0x74,0x69,0x76,0x65,0x20,0x74,
- 0x6F,0x6E,0x65,0x2E,0x10,0x3E,0x20,0x20,0x20,0x31,0x20,0x57,
- 0x61,0x76,0x65,0x20,0x66,0x6F,0x72,0x6D,0x2E,0x00,0x1F,0x3E,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,0x68,
- 0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x65,0x6E,0x76,
- 0x65,0x6C,0x6F,0x70,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
- 0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x3E,0x41,0x6E,0x20,0x69,
- 0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x27,0x73,0x20,
- 0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x69,0x73,0x20,0x64,0x65,
- 0x66,0x69,0x6E,0x65,0x64,0x20,0x62,0x79,0x20,0x69,0x74,0x73,
- 0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,0x63,0x75,
- 0x72,0x76,0x65,0x2E,0x20,0x49,0x66,0x20,0x74,0x68,0x65,0x3E,
- 0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x68,
- 0x61,0x73,0x20,0x61,0x20,0x73,0x75,0x73,0x74,0x61,0x69,0x6E,
- 0x20,0x70,0x6F,0x69,0x6E,0x74,0x2C,0x20,0x74,0x68,0x65,0x20,
- 0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,0x77,0x69,0x6C,
- 0x6C,0x20,0x73,0x74,0x6F,0x70,0x20,0x61,0x74,0x20,0x74,0x68,
- 0x61,0x74,0x42,0x70,0x6F,0x69,0x6E,0x74,0x20,0x75,0x6E,0x74,
- 0x69,0x6C,0x20,0x61,0x20,0x6B,0x65,0x79,0x2D,0x6F,0x66,0x66,
- 0x20,0x6E,0x6F,0x74,0x65,0x20,0x68,0x61,0x73,0x20,0x62,0x65,
- 0x65,0x6E,0x20,0x70,0x6C,0x61,0x79,0x65,0x64,0x2E,0x20,0x57,
- 0x68,0x65,0x6E,0x20,0x61,0x20,0x6B,0x65,0x79,0x2D,0x6F,0x66,
- 0x66,0x20,0x6E,0x6F,0x74,0x65,0x20,0x69,0x73,0x1D,0x70,0x6C,
- 0x61,0x79,0x65,0x64,0x2C,0x20,0x74,0x68,0x65,0x20,0x22,0x66,
- 0x61,0x64,0x65,0x6F,0x75,0x74,0x22,0x20,0x62,0x65,0x67,0x69,
- 0x6E,0x73,0x2E,0x44,0x3E,0x4F,0x6E,0x65,0x20,0x70,0x69,0x78,
- 0x65,0x6C,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x65,0x6E,
- 0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,0x77,0x69,0x6E,0x64,0x6F,
- 0x77,0x20,0x63,0x6F,0x72,0x72,0x65,0x73,0x70,0x6F,0x6E,0x64,
- 0x73,0x20,0x74,0x6F,0x20,0x6F,0x6E,0x65,0x20,0x70,0x6C,0x61,
- 0x79,0x65,0x72,0x2D,0x74,0x69,0x63,0x6B,0x2E,0x20,0x49,0x66,
- 0x3C,0x74,0x68,0x65,0x20,0x42,0x50,0x4D,0x20,0x69,0x73,0x20,
- 0x31,0x32,0x35,0x2C,0x20,0x79,0x6F,0x75,0x27,0x6C,0x6C,0x20,
- 0x63,0x6F,0x6E,0x73,0x75,0x6D,0x65,0x20,0x35,0x30,0x20,0x70,
- 0x69,0x78,0x65,0x6C,0x2F,0x73,0x65,0x63,0x6F,0x6E,0x64,0x2E,
- 0x20,0x54,0x68,0x65,0x20,0x77,0x69,0x6E,0x64,0x6F,0x77,0x27,
- 0x73,0x1A,0x22,0x73,0x69,0x7A,0x65,0x22,0x20,0x69,0x73,0x20,
- 0x61,0x62,0x6F,0x75,0x74,0x20,0x36,0x20,0x73,0x65,0x63,0x6F,
- 0x6E,0x64,0x73,0x2E,0x3E,0x3E,0x49,0x66,0x20,0x79,0x6F,0x75,
- 0x20,0x70,0x72,0x65,0x73,0x73,0x20,0x74,0x68,0x65,0x20,0x72,
- 0x69,0x67,0x68,0x74,0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,0x62,
- 0x75,0x74,0x74,0x6F,0x6E,0x20,0x61,0x74,0x20,0x74,0x68,0x65,
- 0x20,0x70,0x72,0x65,0x64,0x65,0x66,0x69,0x6E,0x65,0x20,0x62,
- 0x75,0x74,0x74,0x6F,0x6E,0x73,0x2C,0x3F,0x79,0x6F,0x75,0x27,
- 0x6C,0x6C,0x20,0x73,0x74,0x6F,0x72,0x65,0x20,0x74,0x68,0x65,
- 0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x65,0x6E,0x76,
- 0x65,0x6C,0x6F,0x70,0x65,0x20,0x69,0x6E,0x74,0x6F,0x20,0x74,
- 0x68,0x61,0x74,0x20,0x70,0x72,0x65,0x64,0x65,0x66,0x69,0x6E,
- 0x65,0x20,0x63,0x65,0x6C,0x6C,0x2E,0x20,0x54,0x68,0x65,0x30,
- 0x70,0x72,0x65,0x64,0x65,0x66,0x69,0x6E,0x65,0x73,0x20,0x61,
- 0x72,0x65,0x20,0x73,0x74,0x6F,0x72,0x65,0x64,0x20,0x69,0x6E,
- 0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x75,
- 0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x66,0x69,0x6C,0x65,0x2E,
- 0x43,0x3E,0x50,0x72,0x65,0x64,0x65,0x66,0x69,0x6E,0x65,0x20,
- 0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x31,0x20,0x69,0x73,0x20,
- 0x74,0x68,0x65,0x20,0x64,0x65,0x66,0x61,0x75,0x6C,0x74,0x20,
- 0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x2E,0x20,0x54,0x68,
- 0x69,0x73,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x74,0x68,0x61,
- 0x74,0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x42,0x6C,0x6F,0x61,
- 0x64,0x20,0x61,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x2C,0x20,
- 0x69,0x74,0x20,0x77,0x69,0x6C,0x6C,0x20,0x67,0x65,0x74,0x20,
- 0x61,0x6C,0x6C,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,
- 0x20,0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,0x74,0x69,0x6F,0x6E,
- 0x20,0x66,0x72,0x6F,0x6D,0x20,0x70,0x72,0x65,0x64,0x65,0x66,
- 0x69,0x6E,0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x31,
- 0x2C,0x20,0x69,0x6E,0x63,0x6C,0x75,0x64,0x69,0x6E,0x67,0x20,
- 0x74,0x68,0x65,0x20,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x2E,
- 0x42,0x3E,0x4E,0x6F,0x74,0x65,0x20,0x74,0x68,0x61,0x74,0x20,
- 0x69,0x66,0x20,0x79,0x6F,0x75,0x20,0x74,0x75,0x72,0x6E,0x20,
- 0x74,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x2D,0x65,
- 0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,0x6F,0x66,0x66,0x2C,
- 0x20,0x79,0x6F,0x75,0x20,0x64,0x6F,0x6E,0x27,0x74,0x20,0x74,
- 0x75,0x72,0x6E,0x20,0x74,0x68,0x65,0x0C,0x76,0x69,0x62,0x72,
- 0x61,0x74,0x6F,0x20,0x6F,0x66,0x66,0x2E,0x00,0x20,0x3E,0x40,
+ 0x22,0x3E,0x4C,0x65,0x66,0x74,0x20,0x62,0x75,0x74,0x74,0x6F,
+ 0x6E,0x3A,0x20,0x54,0x75,0x72,0x6E,0x20,0x63,0x68,0x61,0x6E,
+ 0x6E,0x65,0x6C,0x20,0x6F,0x6E,0x2F,0x6F,0x66,0x66,0x2E,0x35,
+ 0x3E,0x52,0x69,0x67,0x68,0x74,0x20,0x62,0x75,0x74,0x74,0x6F,
+ 0x6E,0x3A,0x20,0x54,0x75,0x72,0x6E,0x20,0x63,0x68,0x61,0x6E,
+ 0x6E,0x65,0x6C,0x20,0x6D,0x75,0x6C,0x74,0x69,0x2D,0x72,0x65,
+ 0x63,0x6F,0x72,0x64,0x2F,0x65,0x64,0x69,0x74,0x20,0x6F,0x6E,
+ 0x2F,0x6F,0x66,0x66,0x2E,0x42,0x3E,0x4C,0x65,0x66,0x74,0x2B,
+ 0x72,0x69,0x67,0x68,0x74,0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,
+ 0x3A,0x20,0x54,0x75,0x72,0x6E,0x20,0x61,0x6C,0x6C,0x20,0x63,
+ 0x68,0x61,0x6E,0x6E,0x65,0x6C,0x73,0x20,0x6F,0x66,0x66,0x20,
+ 0x65,0x78,0x63,0x65,0x70,0x74,0x20,0x74,0x68,0x65,0x20,0x73,
+ 0x65,0x6C,0x65,0x63,0x74,0x65,0x64,0x20,0x6F,0x6E,0x65,0x2E,
+ 0x00,0x1C,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x49,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x45,
+ 0x64,0x69,0x74,0x6F,0x72,0x3A,0x01,0x3E,0x22,0x3E,0x40,0x58,
+ 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x57,0x68,0x61,0x74,
+ 0x20,0x69,0x73,0x20,0x61,0x6E,0x20,0x69,0x6E,0x73,0x74,0x72,
+ 0x75,0x6D,0x65,0x6E,0x74,0x3F,0x3A,0x0B,0x3E,0x40,0x58,0x30,
+ 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1E,0x41,0x20,0x46,0x61,
+ 0x73,0x74,0x74,0x72,0x61,0x63,0x6B,0x65,0x72,0x20,0x32,0x20,
+ 0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x69,
+ 0x73,0x3A,0x15,0x3E,0x20,0x20,0x20,0x31,0x20,0x56,0x6F,0x6C,
+ 0x75,0x6D,0x65,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,
+ 0x16,0x3E,0x20,0x20,0x20,0x31,0x20,0x50,0x61,0x6E,0x6E,0x69,
+ 0x6E,0x67,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x1D,
+ 0x3E,0x20,0x20,0x20,0x31,0x20,0x41,0x75,0x74,0x6F,0x2D,0x76,
+ 0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x64,0x65,0x66,0x69,0x6E,
+ 0x69,0x74,0x69,0x6F,0x6E,0x13,0x3E,0x20,0x20,0x20,0x31,0x2E,
+ 0x2E,0x31,0x36,0x20,0x53,0x61,0x6D,0x70,0x6C,0x65,0x28,0x73,
+ 0x29,0x1F,0x3E,0x20,0x20,0x20,0x31,0x20,0x4B,0x65,0x79,0x62,
+ 0x6F,0x61,0x72,0x64,0x20,0x73,0x70,0x6C,0x69,0x74,0x20,0x64,
+ 0x65,0x66,0x69,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x15,0x3E,0x20,
+ 0x20,0x20,0x31,0x20,0x4D,0x49,0x44,0x49,0x20,0x64,0x65,0x66,
+ 0x69,0x6E,0x69,0x74,0x69,0x6F,0x6E,0x00,0x1B,0x3E,0x41,0x20,
+ 0x46,0x61,0x73,0x74,0x74,0x72,0x61,0x63,0x6B,0x65,0x72,0x20,
+ 0x32,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x69,0x73,0x3A,
+ 0x29,0x3E,0x20,0x20,0x20,0x31,0x20,0x56,0x6F,0x6C,0x75,0x6D,
+ 0x65,0x2F,0x50,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x2F,0x46,0x69,
+ 0x6E,0x65,0x2D,0x74,0x75,0x6E,0x65,0x20,0x64,0x65,0x66,0x69,
+ 0x6E,0x69,0x74,0x69,0x6F,0x6E,0x14,0x3E,0x20,0x20,0x20,0x31,
+ 0x20,0x52,0x65,0x6C,0x61,0x74,0x69,0x76,0x65,0x20,0x74,0x6F,
+ 0x6E,0x65,0x2E,0x10,0x3E,0x20,0x20,0x20,0x31,0x20,0x57,0x61,
+ 0x76,0x65,0x20,0x66,0x6F,0x72,0x6D,0x2E,0x00,0x1F,0x3E,0x40,
0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,0x68,0x65,
- 0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x65,0x6E,0x76,
- 0x65,0x6C,0x6F,0x70,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
- 0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x3E,0x53,0x61,0x6D,0x65,
- 0x20,0x61,0x73,0x20,0x61,0x62,0x6F,0x76,0x65,0x2C,0x20,0x65,
- 0x78,0x63,0x65,0x70,0x74,0x20,0x66,0x72,0x6F,0x6D,0x20,0x74,
- 0x68,0x61,0x74,0x20,0x74,0x68,0x65,0x20,0x76,0x69,0x62,0x72,
- 0x61,0x74,0x6F,0x20,0x69,0x73,0x20,0x6E,0x6F,0x74,0x20,0x63,
- 0x6F,0x6E,0x6E,0x65,0x63,0x74,0x65,0x64,0x20,0x74,0x6F,0x15,
- 0x74,0x68,0x65,0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,
- 0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x2E,0x00,0x10,0x3E,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,0x75,
- 0x6E,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
- 0x30,0x30,0x32,0x3F,0x3E,0x54,0x68,0x65,0x20,0x66,0x69,0x6E,
- 0x65,0x2D,0x74,0x75,0x6E,0x65,0x20,0x72,0x65,0x73,0x6F,0x6C,
- 0x75,0x74,0x69,0x6F,0x6E,0x20,0x68,0x61,0x73,0x20,0x62,0x65,
- 0x65,0x6E,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x64,0x20,0x66,
- 0x72,0x6F,0x6D,0x20,0x61,0x20,0x73,0x69,0x67,0x6E,0x65,0x64,
- 0x20,0x6E,0x69,0x62,0x62,0x6C,0x65,0x27,0x28,0x2D,0x38,0x2E,
- 0x2E,0x2B,0x37,0x29,0x20,0x74,0x6F,0x20,0x61,0x20,0x73,0x69,
- 0x67,0x6E,0x65,0x64,0x20,0x62,0x79,0x74,0x65,0x20,0x28,0x2D,
- 0x31,0x32,0x38,0x2E,0x2E,0x2B,0x31,0x32,0x37,0x29,0x2E,0x00,
- 0x13,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x46,0x61,0x64,0x65,0x6F,0x75,0x74,0x3A,0x0B,0x3E,0x40,0x58,
- 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1B,0x3E,0x54,0x68,
- 0x69,0x73,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x66,0x61,
- 0x64,0x65,0x6F,0x75,0x74,0x20,0x73,0x70,0x65,0x65,0x64,0x2E,
- 0x00,0x19,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
- 0x31,0x56,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x73,0x77,0x65,
- 0x65,0x70,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
- 0x30,0x30,0x32,0x3E,0x3E,0x54,0x68,0x69,0x73,0x20,0x69,0x73,
- 0x20,0x74,0x68,0x65,0x20,0x74,0x69,0x6D,0x65,0x20,0x28,0x69,
- 0x6E,0x20,0x70,0x6C,0x61,0x79,0x65,0x72,0x20,0x74,0x69,0x63,
- 0x6B,0x73,0x29,0x20,0x74,0x68,0x61,0x74,0x20,0x77,0x69,0x6C,
- 0x6C,0x20,0x62,0x79,0x70,0x61,0x73,0x73,0x20,0x75,0x6E,0x74,
- 0x69,0x6C,0x20,0x74,0x68,0x65,0x2D,0x61,0x75,0x74,0x6F,0x2D,
- 0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x77,0x69,0x6C,0x6C,
- 0x20,0x72,0x65,0x61,0x63,0x68,0x20,0x69,0x74,0x27,0x73,0x20,
- 0x66,0x69,0x6E,0x61,0x6C,0x20,0x61,0x6D,0x70,0x6C,0x69,0x74,
- 0x75,0x64,0x65,0x2E,0x00,0x1E,0x3E,0x40,0x58,0x30,0x34,0x30,
- 0x40,0x43,0x30,0x30,0x31,0x54,0x68,0x65,0x20,0x70,0x69,0x61,
- 0x6E,0x6F,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x3A,
- 0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
- 0x3F,0x3E,0x54,0x68,0x65,0x20,0x70,0x69,0x61,0x6E,0x6F,0x20,
- 0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x20,0x64,0x65,0x66,
- 0x69,0x6E,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x6B,0x65,0x79,
- 0x20,0x73,0x70,0x6C,0x69,0x74,0x20,0x66,0x6F,0x72,0x20,0x61,
- 0x6E,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,
- 0x2E,0x20,0x54,0x6F,0x3F,0x63,0x68,0x61,0x6E,0x67,0x65,0x20,
- 0x74,0x68,0x65,0x20,0x6B,0x65,0x79,0x20,0x73,0x70,0x6C,0x69,
- 0x74,0x2C,0x20,0x63,0x68,0x6F,0x6F,0x73,0x65,0x20,0x61,0x20,
- 0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x77,0x69,0x74,0x68,0x69,
- 0x6E,0x20,0x74,0x68,0x65,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,
- 0x6D,0x65,0x6E,0x74,0x20,0x61,0x6E,0x64,0x1C,0x74,0x68,0x65,
- 0x6E,0x20,0x22,0x64,0x72,0x61,0x77,0x22,0x20,0x6F,0x6E,0x20,
- 0x74,0x68,0x65,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,
- 0x2E,0x42,0x3E,0x54,0x68,0x65,0x20,0x6E,0x6F,0x74,0x65,0x73,
- 0x20,0x70,0x6C,0x61,0x79,0x65,0x64,0x20,0x77,0x69,0x74,0x68,
- 0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,
- 0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,
- 0x61,0x72,0x65,0x20,0x69,0x6E,0x64,0x69,0x63,0x61,0x74,0x65,
- 0x64,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x09,0x6B,0x65,0x79,
- 0x62,0x6F,0x61,0x72,0x64,0x2E,0x00,0x1A,0x3E,0x40,0x58,0x30,
- 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x49,0x6D,0x70,0x6F,0x72,
- 0x74,0x61,0x6E,0x74,0x20,0x6E,0x6F,0x74,0x65,0x3A,0x0B,0x3E,
- 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x3E,
- 0x54,0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x2C,0x20,
- 0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x2C,0x20,0x74,0x75,0x6E,
- 0x65,0x20,0x61,0x6E,0x64,0x20,0x72,0x65,0x6C,0x61,0x74,0x69,
- 0x76,0x65,0x20,0x74,0x6F,0x6E,0x65,0x20,0x69,0x73,0x20,0x64,
- 0x65,0x66,0x69,0x6E,0x65,0x64,0x20,0x66,0x6F,0x72,0x20,0x45,
- 0x41,0x43,0x48,0x41,0x53,0x41,0x4D,0x50,0x4C,0x45,0x20,0x69,
- 0x6E,0x20,0x61,0x6E,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,
- 0x65,0x6E,0x74,0x2E,0x20,0x41,0x6C,0x6C,0x20,0x6F,0x74,0x68,
- 0x65,0x72,0x20,0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,0x74,0x69,
- 0x6F,0x6E,0x20,0x69,0x73,0x20,0x64,0x65,0x66,0x69,0x6E,0x65,
- 0x64,0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x12,0x65,0x6E,
- 0x74,0x69,0x72,0x65,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,
- 0x65,0x6E,0x74,0x2E,0x00,0x31,0x40,0x58,0x30,0x32,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x49,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,
- 0x6E,0x74,0x20,0x45,0x64,0x69,0x74,0x6F,0x72,0x20,0x45,0x78,
- 0x74,0x65,0x6E,0x73,0x69,0x6F,0x6E,0x3A,0x20,0x28,0x49,0x2E,
- 0x45,0x2E,0x45,0x78,0x74,0x2E,0x29,0x01,0x3E,0x10,0x3E,0x40,
- 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4D,0x49,0x44,
- 0x49,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x28,0x3E,0x27,0x70,0x2E,0x27,0x20,0x73,0x74,0x61,
- 0x6E,0x64,0x73,0x20,0x66,0x6F,0x72,0x20,0x22,0x70,0x72,0x6F,
- 0x67,0x72,0x61,0x6D,0x22,0x20,0x28,0x69,0x6E,0x73,0x74,0x72,
- 0x75,0x6D,0x65,0x6E,0x74,0x29,0x2E,0x40,0x3E,0x53,0x65,0x76,
- 0x65,0x72,0x61,0x6C,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,
- 0x65,0x6E,0x74,0x73,0x20,0x63,0x61,0x6E,0x20,0x68,0x61,0x76,
- 0x65,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x65,0x20,0x74,
- 0x72,0x61,0x6E,0x73,0x6D,0x69,0x74,0x20,0x63,0x68,0x61,0x6E,
- 0x6E,0x65,0x6C,0x20,0x62,0x75,0x74,0x20,0x77,0x69,0x74,0x68,
- 0x33,0x64,0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x74,0x20,0x70,
- 0x72,0x6F,0x67,0x72,0x61,0x6D,0x73,0x2E,0x20,0x46,0x54,0x32,
- 0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x73,0x20,0x74,0x68,0x65,
- 0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x73,0x20,0x6F,0x6E,
- 0x20,0x74,0x68,0x65,0x43,0x4D,0x49,0x44,0x49,0x2D,0x63,0x68,
- 0x61,0x6E,0x6E,0x65,0x6C,0x73,0x20,0x69,0x6E,0x73,0x74,0x61,
- 0x6E,0x74,0x6C,0x79,0x20,0x64,0x75,0x72,0x69,0x6E,0x67,0x20,
- 0x70,0x6C,0x61,0x79,0x20,0x69,0x66,0x20,0x64,0x69,0x66,0x66,
- 0x65,0x72,0x65,0x6E,0x74,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,
- 0x6D,0x73,0x20,0x61,0x72,0x65,0x20,0x75,0x73,0x65,0x64,0x2E,
- 0x3E,0x44,0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x74,0x20,0x70,
- 0x72,0x6F,0x67,0x72,0x61,0x6D,0x73,0x20,0x63,0x61,0x6E,0x6E,
- 0x6F,0x74,0x20,0x62,0x65,0x20,0x70,0x6C,0x61,0x79,0x65,0x64,
- 0x20,0x61,0x74,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x65,
- 0x20,0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x61,0x74,0x20,
- 0x74,0x68,0x65,0x11,0x73,0x61,0x6D,0x65,0x20,0x74,0x69,0x6D,
- 0x65,0x20,0x74,0x68,0x6F,0x75,0x67,0x68,0x2E,0x44,0x3E,0x49,
- 0x66,0x20,0x79,0x6F,0x75,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,
- 0x20,0x74,0x68,0x69,0x73,0x20,0x76,0x61,0x6C,0x75,0x65,0x2C,
- 0x20,0x74,0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,
- 0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x77,0x69,0x6C,0x6C,
- 0x20,0x62,0x65,0x20,0x74,0x72,0x61,0x6E,0x73,0x6D,0x69,0x74,
- 0x74,0x65,0x64,0x20,0x74,0x6F,0x1C,0x74,0x68,0x65,0x20,0x73,
- 0x79,0x6E,0x74,0x68,0x65,0x73,0x69,0x7A,0x65,0x72,0x20,0x69,
- 0x6D,0x6D,0x65,0x64,0x69,0x61,0x74,0x65,0x6C,0x79,0x2E,0x3E,
- 0x3E,0x53,0x6F,0x6D,0x65,0x20,0x73,0x79,0x6E,0x74,0x68,0x65,
- 0x73,0x69,0x7A,0x65,0x72,0x73,0x20,0x74,0x72,0x61,0x6E,0x73,
+ 0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x65,0x6E,0x76,0x65,
+ 0x6C,0x6F,0x70,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
+ 0x40,0x43,0x30,0x30,0x32,0x40,0x3E,0x41,0x6E,0x20,0x69,0x6E,
+ 0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x27,0x73,0x20,0x76,
+ 0x6F,0x6C,0x75,0x6D,0x65,0x20,0x69,0x73,0x20,0x64,0x65,0x66,
+ 0x69,0x6E,0x65,0x64,0x20,0x62,0x79,0x20,0x69,0x74,0x73,0x20,
+ 0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,0x63,0x75,0x72,
+ 0x76,0x65,0x2E,0x20,0x49,0x66,0x20,0x74,0x68,0x65,0x3E,0x69,
+ 0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x68,0x61,
+ 0x73,0x20,0x61,0x20,0x73,0x75,0x73,0x74,0x61,0x69,0x6E,0x20,
+ 0x70,0x6F,0x69,0x6E,0x74,0x2C,0x20,0x74,0x68,0x65,0x20,0x65,
+ 0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,0x77,0x69,0x6C,0x6C,
+ 0x20,0x73,0x74,0x6F,0x70,0x20,0x61,0x74,0x20,0x74,0x68,0x61,
+ 0x74,0x42,0x70,0x6F,0x69,0x6E,0x74,0x20,0x75,0x6E,0x74,0x69,
+ 0x6C,0x20,0x61,0x20,0x6B,0x65,0x79,0x2D,0x6F,0x66,0x66,0x20,
+ 0x6E,0x6F,0x74,0x65,0x20,0x68,0x61,0x73,0x20,0x62,0x65,0x65,
+ 0x6E,0x20,0x70,0x6C,0x61,0x79,0x65,0x64,0x2E,0x20,0x57,0x68,
+ 0x65,0x6E,0x20,0x61,0x20,0x6B,0x65,0x79,0x2D,0x6F,0x66,0x66,
+ 0x20,0x6E,0x6F,0x74,0x65,0x20,0x69,0x73,0x1D,0x70,0x6C,0x61,
+ 0x79,0x65,0x64,0x2C,0x20,0x74,0x68,0x65,0x20,0x22,0x66,0x61,
+ 0x64,0x65,0x6F,0x75,0x74,0x22,0x20,0x62,0x65,0x67,0x69,0x6E,
+ 0x73,0x2E,0x44,0x3E,0x4F,0x6E,0x65,0x20,0x70,0x69,0x78,0x65,
+ 0x6C,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x65,0x6E,0x76,
+ 0x65,0x6C,0x6F,0x70,0x65,0x20,0x77,0x69,0x6E,0x64,0x6F,0x77,
+ 0x20,0x63,0x6F,0x72,0x72,0x65,0x73,0x70,0x6F,0x6E,0x64,0x73,
+ 0x20,0x74,0x6F,0x20,0x6F,0x6E,0x65,0x20,0x70,0x6C,0x61,0x79,
+ 0x65,0x72,0x2D,0x74,0x69,0x63,0x6B,0x2E,0x20,0x49,0x66,0x3C,
+ 0x74,0x68,0x65,0x20,0x42,0x50,0x4D,0x20,0x69,0x73,0x20,0x31,
+ 0x32,0x35,0x2C,0x20,0x79,0x6F,0x75,0x27,0x6C,0x6C,0x20,0x63,
+ 0x6F,0x6E,0x73,0x75,0x6D,0x65,0x20,0x35,0x30,0x20,0x70,0x69,
+ 0x78,0x65,0x6C,0x2F,0x73,0x65,0x63,0x6F,0x6E,0x64,0x2E,0x20,
+ 0x54,0x68,0x65,0x20,0x77,0x69,0x6E,0x64,0x6F,0x77,0x27,0x73,
+ 0x1A,0x22,0x73,0x69,0x7A,0x65,0x22,0x20,0x69,0x73,0x20,0x61,
+ 0x62,0x6F,0x75,0x74,0x20,0x36,0x20,0x73,0x65,0x63,0x6F,0x6E,
+ 0x64,0x73,0x2E,0x3E,0x3E,0x49,0x66,0x20,0x79,0x6F,0x75,0x20,
+ 0x70,0x72,0x65,0x73,0x73,0x20,0x74,0x68,0x65,0x20,0x72,0x69,
+ 0x67,0x68,0x74,0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,0x62,0x75,
+ 0x74,0x74,0x6F,0x6E,0x20,0x61,0x74,0x20,0x74,0x68,0x65,0x20,
+ 0x70,0x72,0x65,0x64,0x65,0x66,0x69,0x6E,0x65,0x20,0x62,0x75,
+ 0x74,0x74,0x6F,0x6E,0x73,0x2C,0x3F,0x79,0x6F,0x75,0x27,0x6C,
+ 0x6C,0x20,0x73,0x74,0x6F,0x72,0x65,0x20,0x74,0x68,0x65,0x20,
+ 0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x65,0x6E,0x76,0x65,
+ 0x6C,0x6F,0x70,0x65,0x20,0x69,0x6E,0x74,0x6F,0x20,0x74,0x68,
+ 0x61,0x74,0x20,0x70,0x72,0x65,0x64,0x65,0x66,0x69,0x6E,0x65,
+ 0x20,0x63,0x65,0x6C,0x6C,0x2E,0x20,0x54,0x68,0x65,0x30,0x70,
+ 0x72,0x65,0x64,0x65,0x66,0x69,0x6E,0x65,0x73,0x20,0x61,0x72,
+ 0x65,0x20,0x73,0x74,0x6F,0x72,0x65,0x64,0x20,0x69,0x6E,0x20,
+ 0x74,0x68,0x65,0x20,0x63,0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,
+ 0x61,0x74,0x69,0x6F,0x6E,0x20,0x66,0x69,0x6C,0x65,0x2E,0x43,
+ 0x3E,0x50,0x72,0x65,0x64,0x65,0x66,0x69,0x6E,0x65,0x20,0x6E,
+ 0x75,0x6D,0x62,0x65,0x72,0x20,0x31,0x20,0x69,0x73,0x20,0x74,
+ 0x68,0x65,0x20,0x64,0x65,0x66,0x61,0x75,0x6C,0x74,0x20,0x65,
+ 0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x2E,0x20,0x54,0x68,0x69,
+ 0x73,0x20,0x6D,0x65,0x61,0x6E,0x73,0x20,0x74,0x68,0x61,0x74,
+ 0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x42,0x6C,0x6F,0x61,0x64,
+ 0x20,0x61,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x2C,0x20,0x69,
+ 0x74,0x20,0x77,0x69,0x6C,0x6C,0x20,0x67,0x65,0x74,0x20,0x61,
+ 0x6C,0x6C,0x20,0x65,0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,
+ 0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,0x74,0x69,0x6F,0x6E,0x20,
+ 0x66,0x72,0x6F,0x6D,0x20,0x70,0x72,0x65,0x64,0x65,0x66,0x69,
+ 0x6E,0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x31,0x2C,
+ 0x20,0x69,0x6E,0x63,0x6C,0x75,0x64,0x69,0x6E,0x67,0x20,0x74,
+ 0x68,0x65,0x20,0x76,0x69,0x62,0x72,0x61,0x74,0x6F,0x2E,0x42,
+ 0x3E,0x4E,0x6F,0x74,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x69,
+ 0x66,0x20,0x79,0x6F,0x75,0x20,0x74,0x75,0x72,0x6E,0x20,0x74,
+ 0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x2D,0x65,0x6E,
+ 0x76,0x65,0x6C,0x6F,0x70,0x65,0x20,0x6F,0x66,0x66,0x2C,0x20,
+ 0x79,0x6F,0x75,0x20,0x64,0x6F,0x6E,0x27,0x74,0x20,0x74,0x75,
+ 0x72,0x6E,0x20,0x74,0x68,0x65,0x0C,0x76,0x69,0x62,0x72,0x61,
+ 0x74,0x6F,0x20,0x6F,0x66,0x66,0x2E,0x00,0x20,0x3E,0x40,0x58,
+ 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,0x68,0x65,0x20,
+ 0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x65,0x6E,0x76,0x65,
+ 0x6C,0x6F,0x70,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
+ 0x40,0x43,0x30,0x30,0x32,0x40,0x3E,0x53,0x61,0x6D,0x65,0x20,
+ 0x61,0x73,0x20,0x61,0x62,0x6F,0x76,0x65,0x2C,0x20,0x65,0x78,
+ 0x63,0x65,0x70,0x74,0x20,0x66,0x72,0x6F,0x6D,0x20,0x74,0x68,
+ 0x61,0x74,0x20,0x74,0x68,0x65,0x20,0x76,0x69,0x62,0x72,0x61,
+ 0x74,0x6F,0x20,0x69,0x73,0x20,0x6E,0x6F,0x74,0x20,0x63,0x6F,
+ 0x6E,0x6E,0x65,0x63,0x74,0x65,0x64,0x20,0x74,0x6F,0x15,0x74,
+ 0x68,0x65,0x20,0x70,0x61,0x6E,0x6E,0x69,0x6E,0x67,0x20,0x65,
+ 0x6E,0x76,0x65,0x6C,0x6F,0x70,0x65,0x2E,0x00,0x10,0x3E,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x54,0x75,0x6E,
+ 0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
+ 0x30,0x32,0x3F,0x3E,0x54,0x68,0x65,0x20,0x66,0x69,0x6E,0x65,
+ 0x2D,0x74,0x75,0x6E,0x65,0x20,0x72,0x65,0x73,0x6F,0x6C,0x75,
+ 0x74,0x69,0x6F,0x6E,0x20,0x68,0x61,0x73,0x20,0x62,0x65,0x65,
+ 0x6E,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x64,0x20,0x66,0x72,
+ 0x6F,0x6D,0x20,0x61,0x20,0x73,0x69,0x67,0x6E,0x65,0x64,0x20,
+ 0x6E,0x69,0x62,0x62,0x6C,0x65,0x27,0x28,0x2D,0x38,0x2E,0x2E,
+ 0x2B,0x37,0x29,0x20,0x74,0x6F,0x20,0x61,0x20,0x73,0x69,0x67,
+ 0x6E,0x65,0x64,0x20,0x62,0x79,0x74,0x65,0x20,0x28,0x2D,0x31,
+ 0x32,0x38,0x2E,0x2E,0x2B,0x31,0x32,0x37,0x29,0x2E,0x00,0x13,
+ 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x46,
+ 0x61,0x64,0x65,0x6F,0x75,0x74,0x3A,0x0B,0x3E,0x40,0x58,0x30,
+ 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1B,0x3E,0x54,0x68,0x69,
+ 0x73,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x66,0x61,0x64,
+ 0x65,0x6F,0x75,0x74,0x20,0x73,0x70,0x65,0x65,0x64,0x2E,0x00,
+ 0x19,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x56,0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x73,0x77,0x65,0x65,
+ 0x70,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
+ 0x30,0x32,0x3E,0x3E,0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,
+ 0x74,0x68,0x65,0x20,0x74,0x69,0x6D,0x65,0x20,0x28,0x69,0x6E,
+ 0x20,0x70,0x6C,0x61,0x79,0x65,0x72,0x20,0x74,0x69,0x63,0x6B,
+ 0x73,0x29,0x20,0x74,0x68,0x61,0x74,0x20,0x77,0x69,0x6C,0x6C,
+ 0x20,0x62,0x79,0x70,0x61,0x73,0x73,0x20,0x75,0x6E,0x74,0x69,
+ 0x6C,0x20,0x74,0x68,0x65,0x2D,0x61,0x75,0x74,0x6F,0x2D,0x76,
+ 0x69,0x62,0x72,0x61,0x74,0x6F,0x20,0x77,0x69,0x6C,0x6C,0x20,
+ 0x72,0x65,0x61,0x63,0x68,0x20,0x69,0x74,0x27,0x73,0x20,0x66,
+ 0x69,0x6E,0x61,0x6C,0x20,0x61,0x6D,0x70,0x6C,0x69,0x74,0x75,
+ 0x64,0x65,0x2E,0x00,0x1E,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
+ 0x43,0x30,0x30,0x31,0x54,0x68,0x65,0x20,0x70,0x69,0x61,0x6E,
+ 0x6F,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x3A,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3F,
+ 0x3E,0x54,0x68,0x65,0x20,0x70,0x69,0x61,0x6E,0x6F,0x20,0x6B,
+ 0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x20,0x64,0x65,0x66,0x69,
+ 0x6E,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x6B,0x65,0x79,0x20,
+ 0x73,0x70,0x6C,0x69,0x74,0x20,0x66,0x6F,0x72,0x20,0x61,0x6E,
+ 0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x2E,
+ 0x20,0x54,0x6F,0x3F,0x63,0x68,0x61,0x6E,0x67,0x65,0x20,0x74,
+ 0x68,0x65,0x20,0x6B,0x65,0x79,0x20,0x73,0x70,0x6C,0x69,0x74,
+ 0x2C,0x20,0x63,0x68,0x6F,0x6F,0x73,0x65,0x20,0x61,0x20,0x73,
+ 0x61,0x6D,0x70,0x6C,0x65,0x20,0x77,0x69,0x74,0x68,0x69,0x6E,
+ 0x20,0x74,0x68,0x65,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,
+ 0x65,0x6E,0x74,0x20,0x61,0x6E,0x64,0x1C,0x74,0x68,0x65,0x6E,
+ 0x20,0x22,0x64,0x72,0x61,0x77,0x22,0x20,0x6F,0x6E,0x20,0x74,
+ 0x68,0x65,0x20,0x6B,0x65,0x79,0x62,0x6F,0x61,0x72,0x64,0x2E,
+ 0x42,0x3E,0x54,0x68,0x65,0x20,0x6E,0x6F,0x74,0x65,0x73,0x20,
+ 0x70,0x6C,0x61,0x79,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,
+ 0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,
+ 0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x61,
+ 0x72,0x65,0x20,0x69,0x6E,0x64,0x69,0x63,0x61,0x74,0x65,0x64,
+ 0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x09,0x6B,0x65,0x79,0x62,
+ 0x6F,0x61,0x72,0x64,0x2E,0x00,0x1A,0x3E,0x40,0x58,0x30,0x34,
+ 0x30,0x40,0x43,0x30,0x30,0x31,0x49,0x6D,0x70,0x6F,0x72,0x74,
+ 0x61,0x6E,0x74,0x20,0x6E,0x6F,0x74,0x65,0x3A,0x0B,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x3E,0x54,
+ 0x68,0x65,0x20,0x76,0x6F,0x6C,0x75,0x6D,0x65,0x2C,0x20,0x70,
+ 0x61,0x6E,0x6E,0x69,0x6E,0x67,0x2C,0x20,0x74,0x75,0x6E,0x65,
+ 0x20,0x61,0x6E,0x64,0x20,0x72,0x65,0x6C,0x61,0x74,0x69,0x76,
+ 0x65,0x20,0x74,0x6F,0x6E,0x65,0x20,0x69,0x73,0x20,0x64,0x65,
+ 0x66,0x69,0x6E,0x65,0x64,0x20,0x66,0x6F,0x72,0x20,0x45,0x41,
+ 0x43,0x48,0x41,0x53,0x41,0x4D,0x50,0x4C,0x45,0x20,0x69,0x6E,
+ 0x20,0x61,0x6E,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,
+ 0x6E,0x74,0x2E,0x20,0x41,0x6C,0x6C,0x20,0x6F,0x74,0x68,0x65,
+ 0x72,0x20,0x69,0x6E,0x66,0x6F,0x72,0x6D,0x61,0x74,0x69,0x6F,
+ 0x6E,0x20,0x69,0x73,0x20,0x64,0x65,0x66,0x69,0x6E,0x65,0x64,
+ 0x20,0x66,0x6F,0x72,0x20,0x74,0x68,0x65,0x12,0x65,0x6E,0x74,
+ 0x69,0x72,0x65,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,
+ 0x6E,0x74,0x2E,0x00,0x31,0x40,0x58,0x30,0x32,0x30,0x40,0x43,
+ 0x30,0x30,0x31,0x49,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
+ 0x74,0x20,0x45,0x64,0x69,0x74,0x6F,0x72,0x20,0x45,0x78,0x74,
+ 0x65,0x6E,0x73,0x69,0x6F,0x6E,0x3A,0x20,0x28,0x49,0x2E,0x45,
+ 0x2E,0x45,0x78,0x74,0x2E,0x29,0x01,0x3E,0x10,0x3E,0x40,0x58,
+ 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4D,0x49,0x44,0x49,
+ 0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
+ 0x32,0x28,0x3E,0x27,0x70,0x2E,0x27,0x20,0x73,0x74,0x61,0x6E,
+ 0x64,0x73,0x20,0x66,0x6F,0x72,0x20,0x22,0x70,0x72,0x6F,0x67,
+ 0x72,0x61,0x6D,0x22,0x20,0x28,0x69,0x6E,0x73,0x74,0x72,0x75,
+ 0x6D,0x65,0x6E,0x74,0x29,0x2E,0x40,0x3E,0x53,0x65,0x76,0x65,
+ 0x72,0x61,0x6C,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,
+ 0x6E,0x74,0x73,0x20,0x63,0x61,0x6E,0x20,0x68,0x61,0x76,0x65,
+ 0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x65,0x20,0x74,0x72,
+ 0x61,0x6E,0x73,0x6D,0x69,0x74,0x20,0x63,0x68,0x61,0x6E,0x6E,
+ 0x65,0x6C,0x20,0x62,0x75,0x74,0x20,0x77,0x69,0x74,0x68,0x33,
+ 0x64,0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x74,0x20,0x70,0x72,
+ 0x6F,0x67,0x72,0x61,0x6D,0x73,0x2E,0x20,0x46,0x54,0x32,0x20,
+ 0x63,0x68,0x61,0x6E,0x67,0x65,0x73,0x20,0x74,0x68,0x65,0x20,
+ 0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x73,0x20,0x6F,0x6E,0x20,
+ 0x74,0x68,0x65,0x43,0x4D,0x49,0x44,0x49,0x2D,0x63,0x68,0x61,
+ 0x6E,0x6E,0x65,0x6C,0x73,0x20,0x69,0x6E,0x73,0x74,0x61,0x6E,
+ 0x74,0x6C,0x79,0x20,0x64,0x75,0x72,0x69,0x6E,0x67,0x20,0x70,
+ 0x6C,0x61,0x79,0x20,0x69,0x66,0x20,0x64,0x69,0x66,0x66,0x65,
+ 0x72,0x65,0x6E,0x74,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,
+ 0x73,0x20,0x61,0x72,0x65,0x20,0x75,0x73,0x65,0x64,0x2E,0x3E,
+ 0x44,0x69,0x66,0x66,0x65,0x72,0x65,0x6E,0x74,0x20,0x70,0x72,
+ 0x6F,0x67,0x72,0x61,0x6D,0x73,0x20,0x63,0x61,0x6E,0x6E,0x6F,
+ 0x74,0x20,0x62,0x65,0x20,0x70,0x6C,0x61,0x79,0x65,0x64,0x20,
+ 0x61,0x74,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x65,0x20,
+ 0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x61,0x74,0x20,0x74,
+ 0x68,0x65,0x11,0x73,0x61,0x6D,0x65,0x20,0x74,0x69,0x6D,0x65,
+ 0x20,0x74,0x68,0x6F,0x75,0x67,0x68,0x2E,0x44,0x3E,0x49,0x66,
+ 0x20,0x79,0x6F,0x75,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x20,
+ 0x74,0x68,0x69,0x73,0x20,0x76,0x61,0x6C,0x75,0x65,0x2C,0x20,
+ 0x74,0x68,0x65,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,
+ 0x6E,0x75,0x6D,0x62,0x65,0x72,0x20,0x77,0x69,0x6C,0x6C,0x20,
+ 0x62,0x65,0x20,0x74,0x72,0x61,0x6E,0x73,0x6D,0x69,0x74,0x74,
+ 0x65,0x64,0x20,0x74,0x6F,0x1C,0x74,0x68,0x65,0x20,0x73,0x79,
+ 0x6E,0x74,0x68,0x65,0x73,0x69,0x7A,0x65,0x72,0x20,0x69,0x6D,
+ 0x6D,0x65,0x64,0x69,0x61,0x74,0x65,0x6C,0x79,0x2E,0x3E,0x3E,
+ 0x53,0x6F,0x6D,0x65,0x20,0x73,0x79,0x6E,0x74,0x68,0x65,0x73,
+ 0x69,0x7A,0x65,0x72,0x73,0x20,0x74,0x72,0x61,0x6E,0x73,0x6D,
+ 0x69,0x74,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x63,
+ 0x68,0x61,0x6E,0x67,0x65,0x20,0x69,0x6E,0x66,0x6F,0x72,0x6D,
+ 0x61,0x74,0x69,0x6F,0x6E,0x2E,0x20,0x49,0x66,0x20,0x74,0x68,
+ 0x65,0x43,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x69,0x6E,
+ 0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x69,0x6E,0x20,
+ 0x46,0x54,0x32,0x20,0x69,0x73,0x20,0x61,0x20,0x4D,0x49,0x44,
+ 0x49,0x2D,0x69,0x6E,0x73,0x74,0x72,0x2E,0x20,0x77,0x69,0x74,
+ 0x68,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x65,0x20,0x63,
+ 0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x61,0x73,0x3F,0x74,0x68,
+ 0x65,0x20,0x72,0x65,0x63,0x65,0x69,0x76,0x65,0x64,0x20,0x70,
+ 0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x63,0x68,0x61,0x6E,0x67,
+ 0x65,0x2C,0x20,0x69,0x74,0x27,0x73,0x20,0x4D,0x49,0x44,0x49,
+ 0x2D,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x77,0x69,0x6C,
+ 0x6C,0x20,0x62,0x65,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x64,
+ 0x2E,0x40,0x3E,0x49,0x66,0x20,0x79,0x6F,0x75,0x72,0x20,0x73,
+ 0x79,0x6E,0x74,0x68,0x65,0x73,0x69,0x7A,0x65,0x72,0x20,0x64,
+ 0x6F,0x65,0x73,0x6E,0x27,0x74,0x20,0x74,0x72,0x61,0x6E,0x73,
0x6D,0x69,0x74,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,
- 0x63,0x68,0x61,0x6E,0x67,0x65,0x20,0x69,0x6E,0x66,0x6F,0x72,
- 0x6D,0x61,0x74,0x69,0x6F,0x6E,0x2E,0x20,0x49,0x66,0x20,0x74,
- 0x68,0x65,0x43,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x69,
- 0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,0x74,0x20,0x69,0x6E,
- 0x20,0x46,0x54,0x32,0x20,0x69,0x73,0x20,0x61,0x20,0x4D,0x49,
- 0x44,0x49,0x2D,0x69,0x6E,0x73,0x74,0x72,0x2E,0x20,0x77,0x69,
- 0x74,0x68,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x65,0x20,
- 0x63,0x68,0x61,0x6E,0x6E,0x65,0x6C,0x20,0x61,0x73,0x3F,0x74,
- 0x68,0x65,0x20,0x72,0x65,0x63,0x65,0x69,0x76,0x65,0x64,0x20,
- 0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x63,0x68,0x61,0x6E,
- 0x67,0x65,0x2C,0x20,0x69,0x74,0x27,0x73,0x20,0x4D,0x49,0x44,
- 0x49,0x2D,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x77,0x69,
- 0x6C,0x6C,0x20,0x62,0x65,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,
- 0x64,0x2E,0x40,0x3E,0x49,0x66,0x20,0x79,0x6F,0x75,0x72,0x20,
- 0x73,0x79,0x6E,0x74,0x68,0x65,0x73,0x69,0x7A,0x65,0x72,0x20,
- 0x64,0x6F,0x65,0x73,0x6E,0x27,0x74,0x20,0x74,0x72,0x61,0x6E,
- 0x73,0x6D,0x69,0x74,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,
- 0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x2C,0x20,0x74,0x68,0x65,
- 0x72,0x65,0x27,0x73,0x20,0x6E,0x6F,0x3E,0x70,0x6F,0x69,0x6E,
- 0x74,0x20,0x69,0x6E,0x20,0x63,0x68,0x61,0x6E,0x67,0x69,0x6E,
- 0x67,0x20,0x69,0x74,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,
- 0x73,0x79,0x6E,0x74,0x68,0x65,0x73,0x69,0x7A,0x65,0x72,0x2C,
- 0x20,0x64,0x6F,0x20,0x69,0x74,0x20,0x69,0x6E,0x20,0x46,0x54,
- 0x32,0x20,0x69,0x6E,0x73,0x74,0x65,0x61,0x64,0x2E,0x00,0x18,
- 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x42,
- 0x65,0x6E,0x64,0x65,0x72,0x20,0x72,0x61,0x6E,0x67,0x65,0x3A,
+ 0x63,0x68,0x61,0x6E,0x67,0x65,0x2C,0x20,0x74,0x68,0x65,0x72,
+ 0x65,0x27,0x73,0x20,0x6E,0x6F,0x3E,0x70,0x6F,0x69,0x6E,0x74,
+ 0x20,0x69,0x6E,0x20,0x63,0x68,0x61,0x6E,0x67,0x69,0x6E,0x67,
+ 0x20,0x69,0x74,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,0x73,
+ 0x79,0x6E,0x74,0x68,0x65,0x73,0x69,0x7A,0x65,0x72,0x2C,0x20,
+ 0x64,0x6F,0x20,0x69,0x74,0x20,0x69,0x6E,0x20,0x46,0x54,0x32,
+ 0x20,0x69,0x6E,0x73,0x74,0x65,0x61,0x64,0x2E,0x00,0x18,0x3E,
+ 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x42,0x65,
+ 0x6E,0x64,0x65,0x72,0x20,0x72,0x61,0x6E,0x67,0x65,0x3A,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x38,
+ 0x3E,0x54,0x68,0x69,0x73,0x20,0x76,0x61,0x6C,0x75,0x65,0x20,
+ 0x64,0x65,0x66,0x69,0x6E,0x65,0x73,0x20,0x68,0x6F,0x77,0x20,
+ 0x6D,0x61,0x6E,0x79,0x20,0x6E,0x6F,0x74,0x65,0x73,0x20,0x74,
+ 0x68,0x65,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,0x6E,
+ 0x74,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x37,0x73,0x79,0x6E,
+ 0x74,0x68,0x65,0x73,0x69,0x7A,0x65,0x72,0x20,0x63,0x61,0x6E,
+ 0x20,0x62,0x65,0x20,0x70,0x69,0x74,0x63,0x68,0x62,0x65,0x6E,
+ 0x64,0x65,0x64,0x2E,0x20,0x46,0x54,0x32,0x20,0x75,0x73,0x65,
+ 0x73,0x20,0x74,0x68,0x69,0x73,0x20,0x76,0x61,0x6C,0x75,0x65,
+ 0x20,0x66,0x6F,0x72,0x37,0x74,0x72,0x61,0x6E,0x73,0x6D,0x69,
+ 0x74,0x74,0x69,0x6E,0x67,0x20,0x74,0x68,0x65,0x20,0x70,0x6F,
+ 0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x75,0x70,0x2F,
+ 0x64,0x6F,0x77,0x6E,0x20,0x61,0x6E,0x64,0x20,0x74,0x6F,0x6E,
+ 0x65,0x2D,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,
+ 0x13,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x73,0x20,0x63,0x6F,
+ 0x72,0x72,0x65,0x63,0x74,0x6C,0x79,0x2E,0x45,0x3E,0x54,0x68,
+ 0x65,0x20,0x4D,0x49,0x44,0x49,0x2D,0x70,0x69,0x74,0x63,0x68,
+ 0x62,0x65,0x6E,0x64,0x20,0x77,0x6F,0x72,0x6B,0x73,0x20,0x63,
+ 0x6F,0x72,0x72,0x65,0x63,0x74,0x6C,0x79,0x20,0x6F,0x6E,0x6C,
+ 0x79,0x20,0x77,0x69,0x74,0x68,0x20,0x6C,0x69,0x6E,0x65,0x61,
+ 0x72,0x20,0x66,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,0x20,
+ 0x74,0x61,0x62,0x6C,0x65,0x2E,0x00,0x18,0x40,0x58,0x30,0x32,
+ 0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x61,0x6D,0x70,0x6C,0x65,
+ 0x20,0x45,0x64,0x69,0x74,0x6F,0x72,0x3A,0x01,0x3E,0x2C,0x3E,
+ 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,0x6C,
+ 0x61,0x79,0x20,0x28,0x57,0x61,0x76,0x65,0x20,0x66,0x6F,0x72,
+ 0x6D,0x2C,0x20,0x72,0x61,0x6E,0x67,0x65,0x2C,0x20,0x64,0x69,
+ 0x73,0x70,0x6C,0x61,0x79,0x29,0x3A,0x0B,0x3E,0x40,0x58,0x30,
+ 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3C,0x3E,0x50,0x6C,0x61,
+ 0x79,0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,
+ 0x6E,0x74,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x77,0x69,
+ 0x74,0x68,0x20,0x74,0x6F,0x6E,0x65,0x20,0x64,0x69,0x73,0x70,
+ 0x6C,0x61,0x79,0x20,0x61,0x62,0x6F,0x76,0x65,0x20,0x74,0x68,
+ 0x65,0x20,0x22,0x73,0x74,0x6F,0x70,0x22,0x3D,0x62,0x75,0x74,
+ 0x74,0x6F,0x6E,0x2E,0x20,0x4E,0x6F,0x74,0x65,0x20,0x74,0x68,
+ 0x61,0x74,0x20,0x72,0x65,0x73,0x70,0x65,0x63,0x74,0x20,0x69,
+ 0x73,0x20,0x74,0x61,0x6B,0x65,0x6E,0x20,0x74,0x6F,0x20,0x74,
+ 0x68,0x65,0x20,0x70,0x61,0x72,0x74,0x69,0x63,0x75,0x6C,0x61,
+ 0x72,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x27,0x73,0x0E,0x72,
+ 0x65,0x6C,0x61,0x74,0x69,0x76,0x65,0x20,0x74,0x6F,0x6E,0x65,
+ 0x2E,0x00,0x16,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
+ 0x30,0x31,0x53,0x61,0x76,0x65,0x20,0x72,0x61,0x6E,0x67,0x65,
+ 0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
+ 0x32,0x3C,0x3E,0x53,0x74,0x6F,0x72,0x65,0x73,0x20,0x74,0x68,
+ 0x65,0x20,0x72,0x61,0x6E,0x67,0x65,0x20,0x73,0x70,0x65,0x63,
+ 0x69,0x66,0x69,0x65,0x64,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,
+ 0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x73,0x61,0x6D,
+ 0x70,0x6C,0x65,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6F,0x72,
+ 0x79,0x2E,0x00,0x11,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
+ 0x30,0x30,0x31,0x50,0x61,0x73,0x74,0x65,0x3A,0x0B,0x3E,0x40,
+ 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x3E,0x54,
+ 0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x64,0x61,
+ 0x74,0x61,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,
+ 0x70,0x79,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x69,0x73,
+ 0x20,0x73,0x74,0x6F,0x72,0x65,0x64,0x20,0x49,0x4E,0x54,0x4F,
+ 0x20,0x74,0x68,0x65,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,
+ 0x65,0x64,0x06,0x72,0x61,0x6E,0x67,0x65,0x2E,0x00,0x10,0x3E,
+ 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x72,
+ 0x6F,0x70,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+ 0x30,0x30,0x32,0x3E,0x3E,0x43,0x75,0x74,0x73,0x20,0x65,0x76,
+ 0x65,0x72,0x79,0x74,0x68,0x69,0x6E,0x67,0x20,0x62,0x75,0x74,
+ 0x20,0x74,0x68,0x65,0x20,0x72,0x61,0x6E,0x67,0x65,0x2E,0x20,
+ 0x4E,0x6F,0x74,0x68,0x69,0x6E,0x67,0x20,0x69,0x73,0x20,0x63,
+ 0x68,0x61,0x6E,0x67,0x65,0x64,0x20,0x69,0x6E,0x20,0x74,0x68,
+ 0x65,0x20,0x63,0x6F,0x70,0x79,0x19,0x62,0x75,0x66,0x66,0x65,
+ 0x72,0x20,0x62,0x79,0x20,0x74,0x68,0x69,0x73,0x20,0x6F,0x70,
+ 0x65,0x72,0x61,0x74,0x69,0x6F,0x6E,0x2E,0x00,0x12,0x3E,0x40,
+ 0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x6F,0x6C,
+ 0x75,0x6D,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x17,0x3E,0x4F,0x70,0x65,0x72,0x61,0x74,
+ 0x65,0x73,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,0x72,0x61,
+ 0x6E,0x67,0x65,0x2E,0x00,0x12,0x3E,0x40,0x58,0x30,0x34,0x30,
+ 0x40,0x43,0x30,0x30,0x31,0x58,0x2D,0x46,0x61,0x64,0x65,0x3A,
0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
- 0x38,0x3E,0x54,0x68,0x69,0x73,0x20,0x76,0x61,0x6C,0x75,0x65,
- 0x20,0x64,0x65,0x66,0x69,0x6E,0x65,0x73,0x20,0x68,0x6F,0x77,
- 0x20,0x6D,0x61,0x6E,0x79,0x20,0x6E,0x6F,0x74,0x65,0x73,0x20,
- 0x74,0x68,0x65,0x20,0x69,0x6E,0x73,0x74,0x72,0x75,0x6D,0x65,
- 0x6E,0x74,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x37,0x73,0x79,
- 0x6E,0x74,0x68,0x65,0x73,0x69,0x7A,0x65,0x72,0x20,0x63,0x61,
- 0x6E,0x20,0x62,0x65,0x20,0x70,0x69,0x74,0x63,0x68,0x62,0x65,
- 0x6E,0x64,0x65,0x64,0x2E,0x20,0x46,0x54,0x32,0x20,0x75,0x73,
- 0x65,0x73,0x20,0x74,0x68,0x69,0x73,0x20,0x76,0x61,0x6C,0x75,
- 0x65,0x20,0x66,0x6F,0x72,0x37,0x74,0x72,0x61,0x6E,0x73,0x6D,
- 0x69,0x74,0x74,0x69,0x6E,0x67,0x20,0x74,0x68,0x65,0x20,0x70,
- 0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,0x6F,0x20,0x75,0x70,
- 0x2F,0x64,0x6F,0x77,0x6E,0x20,0x61,0x6E,0x64,0x20,0x74,0x6F,
- 0x6E,0x65,0x2D,0x70,0x6F,0x72,0x74,0x61,0x6D,0x65,0x6E,0x74,
- 0x6F,0x13,0x63,0x6F,0x6D,0x6D,0x61,0x6E,0x64,0x73,0x20,0x63,
- 0x6F,0x72,0x72,0x65,0x63,0x74,0x6C,0x79,0x2E,0x45,0x3E,0x54,
- 0x68,0x65,0x20,0x4D,0x49,0x44,0x49,0x2D,0x70,0x69,0x74,0x63,
- 0x68,0x62,0x65,0x6E,0x64,0x20,0x77,0x6F,0x72,0x6B,0x73,0x20,
- 0x63,0x6F,0x72,0x72,0x65,0x63,0x74,0x6C,0x79,0x20,0x6F,0x6E,
- 0x6C,0x79,0x20,0x77,0x69,0x74,0x68,0x20,0x6C,0x69,0x6E,0x65,
- 0x61,0x72,0x20,0x66,0x72,0x65,0x71,0x75,0x65,0x6E,0x63,0x79,
- 0x20,0x74,0x61,0x62,0x6C,0x65,0x2E,0x00,0x18,0x40,0x58,0x30,
- 0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x61,0x6D,0x70,0x6C,
- 0x65,0x20,0x45,0x64,0x69,0x74,0x6F,0x72,0x3A,0x01,0x3E,0x2C,
- 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x50,
- 0x6C,0x61,0x79,0x20,0x28,0x57,0x61,0x76,0x65,0x20,0x66,0x6F,
- 0x72,0x6D,0x2C,0x20,0x72,0x61,0x6E,0x67,0x65,0x2C,0x20,0x64,
- 0x69,0x73,0x70,0x6C,0x61,0x79,0x29,0x3A,0x0B,0x3E,0x40,0x58,
- 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3C,0x3E,0x50,0x6C,
- 0x61,0x79,0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,
- 0x65,0x6E,0x74,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x77,
- 0x69,0x74,0x68,0x20,0x74,0x6F,0x6E,0x65,0x20,0x64,0x69,0x73,
- 0x70,0x6C,0x61,0x79,0x20,0x61,0x62,0x6F,0x76,0x65,0x20,0x74,
- 0x68,0x65,0x20,0x22,0x73,0x74,0x6F,0x70,0x22,0x3D,0x62,0x75,
- 0x74,0x74,0x6F,0x6E,0x2E,0x20,0x4E,0x6F,0x74,0x65,0x20,0x74,
- 0x68,0x61,0x74,0x20,0x72,0x65,0x73,0x70,0x65,0x63,0x74,0x20,
- 0x69,0x73,0x20,0x74,0x61,0x6B,0x65,0x6E,0x20,0x74,0x6F,0x20,
- 0x74,0x68,0x65,0x20,0x70,0x61,0x72,0x74,0x69,0x63,0x75,0x6C,
- 0x61,0x72,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x27,0x73,0x0E,
- 0x72,0x65,0x6C,0x61,0x74,0x69,0x76,0x65,0x20,0x74,0x6F,0x6E,
- 0x65,0x2E,0x00,0x16,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x53,0x61,0x76,0x65,0x20,0x72,0x61,0x6E,0x67,
- 0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x3C,0x3E,0x53,0x74,0x6F,0x72,0x65,0x73,0x20,0x74,
- 0x68,0x65,0x20,0x72,0x61,0x6E,0x67,0x65,0x20,0x73,0x70,0x65,
+ 0x44,0x3E,0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x61,0x20,
+ 0x74,0x6F,0x6F,0x6C,0x20,0x66,0x6F,0x72,0x20,0x6D,0x61,0x6B,
+ 0x69,0x6E,0x67,0x20,0x73,0x6D,0x6F,0x6F,0x74,0x68,0x20,0x6C,
+ 0x6F,0x6F,0x70,0x73,0x2E,0x20,0x53,0x70,0x65,0x63,0x69,0x66,
+ 0x79,0x20,0x61,0x20,0x72,0x61,0x6E,0x67,0x65,0x20,0x74,0x68,
+ 0x61,0x74,0x20,0x63,0x6F,0x76,0x65,0x72,0x73,0x41,0x74,0x68,
+ 0x65,0x20,0x66,0x69,0x72,0x73,0x74,0x20,0x6C,0x6F,0x6F,0x70,
+ 0x20,0x70,0x6F,0x69,0x6E,0x74,0x2E,0x20,0x4D,0x61,0x6B,0x65,
+ 0x20,0x73,0x75,0x72,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x74,
+ 0x68,0x65,0x72,0x65,0x20,0x69,0x73,0x20,0x61,0x73,0x20,0x6D,
+ 0x75,0x63,0x68,0x20,0x73,0x70,0x61,0x63,0x65,0x20,0x61,0x66,
+ 0x74,0x65,0x72,0x41,0x74,0x68,0x65,0x20,0x73,0x65,0x63,0x6F,
+ 0x6E,0x64,0x20,0x6C,0x6F,0x6F,0x70,0x20,0x70,0x6F,0x69,0x6E,
+ 0x74,0x20,0x61,0x73,0x20,0x74,0x68,0x65,0x20,0x72,0x61,0x6E,
+ 0x67,0x65,0x20,0x62,0x79,0x70,0x61,0x73,0x73,0x65,0x73,0x20,
+ 0x74,0x68,0x65,0x20,0x66,0x69,0x72,0x73,0x74,0x20,0x6C,0x6F,
+ 0x6F,0x70,0x20,0x70,0x6F,0x69,0x6E,0x74,0x2E,0x1F,0x50,0x72,
+ 0x65,0x73,0x73,0x20,0x74,0x68,0x65,0x20,0x58,0x2D,0x66,0x61,
+ 0x64,0x65,0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x2E,0x20,0x45,
+ 0x6E,0x6A,0x6F,0x79,0x21,0x00,0x18,0x3E,0x40,0x58,0x30,0x34,
+ 0x30,0x40,0x43,0x30,0x30,0x31,0x38,0x2D,0x42,0x69,0x74,0x2F,
+ 0x31,0x36,0x2D,0x62,0x69,0x74,0x3A,0x0B,0x3E,0x40,0x58,0x30,
+ 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x42,0x3E,0x49,0x66,0x20,
+ 0x79,0x6F,0x75,0x20,0x6C,0x6F,0x61,0x64,0x20,0x61,0x20,0x31,
+ 0x36,0x2D,0x62,0x69,0x74,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
+ 0x20,0x77,0x69,0x74,0x68,0x6F,0x75,0x74,0x20,0x68,0x65,0x61,
+ 0x64,0x65,0x72,0x2C,0x20,0x46,0x54,0x32,0x20,0x61,0x73,0x73,
+ 0x75,0x6D,0x65,0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x69,0x74,
+ 0x27,0x73,0x3E,0x61,0x6E,0x20,0x38,0x2D,0x62,0x69,0x74,0x20,
+ 0x73,0x61,0x6D,0x70,0x6C,0x65,0x2E,0x20,0x57,0x68,0x65,0x6E,
+ 0x20,0x70,0x72,0x65,0x73,0x73,0x69,0x6E,0x67,0x20,0x74,0x68,
+ 0x65,0x20,0x31,0x36,0x2D,0x62,0x69,0x74,0x20,0x62,0x75,0x74,
+ 0x74,0x6F,0x6E,0x2C,0x20,0x64,0x6F,0x20,0x6E,0x6F,0x74,0x20,
+ 0x70,0x72,0x65,0x73,0x73,0x23,0x22,0x63,0x6F,0x6E,0x76,0x65,
+ 0x72,0x74,0x22,0x20,0x77,0x68,0x65,0x6E,0x20,0x74,0x68,0x65,
+ 0x20,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x20,0x69,0x73,0x20,
+ 0x6D,0x61,0x64,0x65,0x2E,0x00,0x14,0x3E,0x40,0x58,0x30,0x34,
+ 0x30,0x40,0x43,0x30,0x30,0x31,0x4D,0x69,0x6E,0x69,0x6D,0x69,
+ 0x7A,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
+ 0x30,0x30,0x32,0x44,0x3E,0x54,0x68,0x69,0x73,0x20,0x66,0x75,
+ 0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x63,0x75,0x74,0x73,0x20,
+ 0x74,0x68,0x65,0x20,0x70,0x61,0x72,0x74,0x20,0x6F,0x66,0x20,
+ 0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x74,
+ 0x68,0x61,0x74,0x20,0x69,0x73,0x20,0x62,0x65,0x79,0x6F,0x6E,
+ 0x64,0x20,0x74,0x68,0x65,0x20,0x73,0x65,0x63,0x6F,0x6E,0x64,
+ 0x0B,0x6C,0x6F,0x6F,0x70,0x20,0x70,0x6F,0x69,0x6E,0x74,0x2E,
+ 0x00,0x2D,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x53,0x61,0x6D,0x70,0x6C,0x65,0x20,0x45,0x64,0x69,0x74,0x6F,
+ 0x72,0x20,0x45,0x78,0x74,0x65,0x6E,0x73,0x69,0x6F,0x6E,0x3A,
+ 0x20,0x28,0x53,0x2E,0x45,0x2E,0x45,0x78,0x74,0x2E,0x29,0x01,
+ 0x3E,0x27,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
+ 0x31,0x43,0x6F,0x70,0x79,0x2F,0x58,0x63,0x68,0x67,0x20,0x53,
+ 0x61,0x6D,0x70,0x6C,0x65,0x2F,0x49,0x6E,0x73,0x74,0x72,0x75,
+ 0x6D,0x65,0x6E,0x74,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
+ 0x40,0x43,0x30,0x30,0x32,0x3C,0x3E,0x54,0x68,0x65,0x20,0x73,
+ 0x6F,0x75,0x72,0x63,0x65,0x20,0x69,0x73,0x20,0x73,0x70,0x65,
0x63,0x69,0x66,0x69,0x65,0x64,0x20,0x69,0x6E,0x20,0x74,0x68,
- 0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6E,0x74,0x20,0x73,0x61,
- 0x6D,0x70,0x6C,0x65,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6F,
- 0x72,0x79,0x2E,0x00,0x11,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
- 0x43,0x30,0x30,0x31,0x50,0x61,0x73,0x74,0x65,0x3A,0x0B,0x3E,
- 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,0x3E,
- 0x54,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x64,
- 0x61,0x74,0x61,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x63,
- 0x6F,0x70,0x79,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x69,
- 0x73,0x20,0x73,0x74,0x6F,0x72,0x65,0x64,0x20,0x49,0x4E,0x54,
- 0x4F,0x20,0x74,0x68,0x65,0x20,0x73,0x70,0x65,0x63,0x69,0x66,
- 0x69,0x65,0x64,0x06,0x72,0x61,0x6E,0x67,0x65,0x2E,0x00,0x10,
- 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x43,
- 0x72,0x6F,0x70,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
- 0x43,0x30,0x30,0x32,0x3E,0x3E,0x43,0x75,0x74,0x73,0x20,0x65,
- 0x76,0x65,0x72,0x79,0x74,0x68,0x69,0x6E,0x67,0x20,0x62,0x75,
- 0x74,0x20,0x74,0x68,0x65,0x20,0x72,0x61,0x6E,0x67,0x65,0x2E,
- 0x20,0x4E,0x6F,0x74,0x68,0x69,0x6E,0x67,0x20,0x69,0x73,0x20,
- 0x63,0x68,0x61,0x6E,0x67,0x65,0x64,0x20,0x69,0x6E,0x20,0x74,
- 0x68,0x65,0x20,0x63,0x6F,0x70,0x79,0x19,0x62,0x75,0x66,0x66,
- 0x65,0x72,0x20,0x62,0x79,0x20,0x74,0x68,0x69,0x73,0x20,0x6F,
- 0x70,0x65,0x72,0x61,0x74,0x69,0x6F,0x6E,0x2E,0x00,0x12,0x3E,
- 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x6F,
- 0x6C,0x75,0x6D,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
- 0x40,0x43,0x30,0x30,0x32,0x17,0x3E,0x4F,0x70,0x65,0x72,0x61,
- 0x74,0x65,0x73,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,0x72,
- 0x61,0x6E,0x67,0x65,0x2E,0x00,0x12,0x3E,0x40,0x58,0x30,0x34,
- 0x30,0x40,0x43,0x30,0x30,0x31,0x58,0x2D,0x46,0x61,0x64,0x65,
+ 0x65,0x20,0x6C,0x69,0x6E,0x65,0x20,0x6E,0x75,0x6D,0x62,0x65,
+ 0x72,0x69,0x6E,0x67,0x20,0x63,0x6F,0x6C,0x75,0x6D,0x6E,0x20,
+ 0x6F,0x66,0x20,0x74,0x68,0x65,0x40,0x69,0x6E,0x73,0x74,0x72,
+ 0x2E,0x2F,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x6C,0x69,0x73,
+ 0x74,0x73,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x75,0x70,
+ 0x70,0x65,0x72,0x2D,0x72,0x69,0x67,0x68,0x74,0x20,0x63,0x6F,
+ 0x72,0x6E,0x65,0x72,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x20,
+ 0x73,0x63,0x72,0x65,0x65,0x6E,0x2E,0x20,0x54,0x68,0x65,0x29,
+ 0x64,0x65,0x73,0x74,0x69,0x6E,0x61,0x74,0x69,0x6F,0x6E,0x20,
+ 0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,
+ 0x6E,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x2E,0x2F,0x73,0x61,
+ 0x6D,0x70,0x6C,0x65,0x2E,0x00,0x15,0x3E,0x40,0x58,0x30,0x34,
+ 0x30,0x40,0x43,0x30,0x30,0x31,0x42,0x61,0x63,0x6B,0x77,0x61,
+ 0x72,0x64,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
+ 0x43,0x30,0x30,0x32,0x40,0x3E,0x4F,0x70,0x65,0x72,0x61,0x74,
+ 0x65,0x73,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,0x72,0x61,
+ 0x6E,0x67,0x65,0x20,0x28,0x6F,0x72,0x20,0x74,0x68,0x65,0x20,
+ 0x77,0x68,0x6F,0x6C,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
+ 0x20,0x69,0x66,0x20,0x6E,0x6F,0x20,0x72,0x61,0x6E,0x67,0x65,
+ 0x20,0x69,0x73,0x20,0x73,0x65,0x74,0x29,0x2E,0x00,0x13,0x3E,
+ 0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x6F,
+ 0x6E,0x76,0x65,0x72,0x74,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x34,0x3E,0x43,0x6F,0x6E,0x76,
+ 0x65,0x72,0x74,0x73,0x20,0x74,0x68,0x65,0x20,0x65,0x6E,0x74,
+ 0x69,0x72,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x66,
+ 0x72,0x6F,0x6D,0x2F,0x74,0x6F,0x20,0x73,0x69,0x67,0x6E,0x65,
+ 0x64,0x2F,0x75,0x6E,0x73,0x69,0x67,0x6E,0x65,0x64,0x2E,0x00,
+ 0x15,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
+ 0x43,0x6F,0x6E,0x76,0x65,0x72,0x74,0x20,0x57,0x3A,0x0B,0x3E,
+ 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3F,0x53,
+ 0x77,0x61,0x70,0x73,0x20,0x74,0x68,0x65,0x20,0x62,0x79,0x74,
+ 0x65,0x20,0x6F,0x72,0x64,0x65,0x72,0x20,0x74,0x6F,0x2F,0x66,
+ 0x72,0x6F,0x6D,0x20,0x49,0x6E,0x74,0x65,0x6C,0x20,0x66,0x72,
+ 0x6F,0x6D,0x2F,0x74,0x6F,0x20,0x4D,0x6F,0x74,0x6F,0x72,0x6F,
+ 0x6C,0x61,0x20,0x73,0x74,0x61,0x6E,0x64,0x61,0x72,0x64,0x20,
+ 0x6F,0x6E,0x12,0x74,0x68,0x65,0x20,0x65,0x6E,0x74,0x69,0x72,
+ 0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x2E,0x44,0x59,0x6F,
+ 0x75,0x27,0x6C,0x6C,0x20,0x6E,0x65,0x65,0x64,0x20,0x74,0x68,
+ 0x69,0x73,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,
+ 0x69,0x66,0x20,0x79,0x6F,0x75,0x20,0x69,0x6D,0x70,0x6F,0x72,
+ 0x74,0x20,0x31,0x36,0x2D,0x62,0x69,0x74,0x20,0x73,0x61,0x6D,
+ 0x70,0x6C,0x65,0x73,0x20,0x77,0x69,0x74,0x68,0x20,0x4D,0x6F,
+ 0x74,0x6F,0x72,0x6F,0x6C,0x61,0x2D,0x62,0x79,0x74,0x65,0x2D,
+ 0x6F,0x72,0x64,0x65,0x72,0x69,0x6E,0x67,0x20,0x28,0x66,0x2E,
+ 0x65,0x78,0x2E,0x20,0x4B,0x75,0x72,0x7A,0x77,0x65,0x69,0x6C,
+ 0x20,0x4B,0x32,0x30,0x30,0x30,0x20,0x73,0x61,0x6D,0x70,0x6C,
+ 0x65,0x73,0x2E,0x29,0x00,0x10,0x3E,0x40,0x58,0x30,0x34,0x30,
+ 0x40,0x43,0x30,0x30,0x31,0x45,0x63,0x68,0x6F,0x3A,0x0B,0x3E,
+ 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1E,0x4F,
+ 0x70,0x65,0x72,0x61,0x74,0x65,0x73,0x20,0x6F,0x6E,0x20,0x74,
+ 0x68,0x65,0x20,0x65,0x6E,0x74,0x69,0x72,0x65,0x20,0x73,0x61,
+ 0x6D,0x70,0x6C,0x65,0x2E,0x00,0x12,0x3E,0x40,0x58,0x30,0x34,
+ 0x30,0x40,0x43,0x30,0x30,0x31,0x46,0x69,0x78,0x20,0x44,0x43,
0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
- 0x32,0x44,0x3E,0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x61,
- 0x20,0x74,0x6F,0x6F,0x6C,0x20,0x66,0x6F,0x72,0x20,0x6D,0x61,
- 0x6B,0x69,0x6E,0x67,0x20,0x73,0x6D,0x6F,0x6F,0x74,0x68,0x20,
- 0x6C,0x6F,0x6F,0x70,0x73,0x2E,0x20,0x53,0x70,0x65,0x63,0x69,
- 0x66,0x79,0x20,0x61,0x20,0x72,0x61,0x6E,0x67,0x65,0x20,0x74,
- 0x68,0x61,0x74,0x20,0x63,0x6F,0x76,0x65,0x72,0x73,0x41,0x74,
- 0x68,0x65,0x20,0x66,0x69,0x72,0x73,0x74,0x20,0x6C,0x6F,0x6F,
- 0x70,0x20,0x70,0x6F,0x69,0x6E,0x74,0x2E,0x20,0x4D,0x61,0x6B,
- 0x65,0x20,0x73,0x75,0x72,0x65,0x20,0x74,0x68,0x61,0x74,0x20,
- 0x74,0x68,0x65,0x72,0x65,0x20,0x69,0x73,0x20,0x61,0x73,0x20,
- 0x6D,0x75,0x63,0x68,0x20,0x73,0x70,0x61,0x63,0x65,0x20,0x61,
- 0x66,0x74,0x65,0x72,0x41,0x74,0x68,0x65,0x20,0x73,0x65,0x63,
- 0x6F,0x6E,0x64,0x20,0x6C,0x6F,0x6F,0x70,0x20,0x70,0x6F,0x69,
- 0x6E,0x74,0x20,0x61,0x73,0x20,0x74,0x68,0x65,0x20,0x72,0x61,
- 0x6E,0x67,0x65,0x20,0x62,0x79,0x70,0x61,0x73,0x73,0x65,0x73,
- 0x20,0x74,0x68,0x65,0x20,0x66,0x69,0x72,0x73,0x74,0x20,0x6C,
- 0x6F,0x6F,0x70,0x20,0x70,0x6F,0x69,0x6E,0x74,0x2E,0x1F,0x50,
- 0x72,0x65,0x73,0x73,0x20,0x74,0x68,0x65,0x20,0x58,0x2D,0x66,
- 0x61,0x64,0x65,0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x2E,0x20,
- 0x45,0x6E,0x6A,0x6F,0x79,0x21,0x00,0x18,0x3E,0x40,0x58,0x30,
- 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x38,0x2D,0x42,0x69,0x74,
- 0x2F,0x31,0x36,0x2D,0x62,0x69,0x74,0x3A,0x0B,0x3E,0x40,0x58,
- 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x42,0x3E,0x49,0x66,
- 0x20,0x79,0x6F,0x75,0x20,0x6C,0x6F,0x61,0x64,0x20,0x61,0x20,
- 0x31,0x36,0x2D,0x62,0x69,0x74,0x20,0x73,0x61,0x6D,0x70,0x6C,
- 0x65,0x20,0x77,0x69,0x74,0x68,0x6F,0x75,0x74,0x20,0x68,0x65,
- 0x61,0x64,0x65,0x72,0x2C,0x20,0x46,0x54,0x32,0x20,0x61,0x73,
- 0x73,0x75,0x6D,0x65,0x73,0x20,0x74,0x68,0x61,0x74,0x20,0x69,
- 0x74,0x27,0x73,0x3E,0x61,0x6E,0x20,0x38,0x2D,0x62,0x69,0x74,
- 0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x2E,0x20,0x57,0x68,0x65,
- 0x6E,0x20,0x70,0x72,0x65,0x73,0x73,0x69,0x6E,0x67,0x20,0x74,
- 0x68,0x65,0x20,0x31,0x36,0x2D,0x62,0x69,0x74,0x20,0x62,0x75,
- 0x74,0x74,0x6F,0x6E,0x2C,0x20,0x64,0x6F,0x20,0x6E,0x6F,0x74,
- 0x20,0x70,0x72,0x65,0x73,0x73,0x23,0x22,0x63,0x6F,0x6E,0x76,
- 0x65,0x72,0x74,0x22,0x20,0x77,0x68,0x65,0x6E,0x20,0x74,0x68,
- 0x65,0x20,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x20,0x69,0x73,
- 0x20,0x6D,0x61,0x64,0x65,0x2E,0x00,0x14,0x3E,0x40,0x58,0x30,
- 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4D,0x69,0x6E,0x69,0x6D,
- 0x69,0x7A,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,
- 0x43,0x30,0x30,0x32,0x44,0x3E,0x54,0x68,0x69,0x73,0x20,0x66,
- 0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x63,0x75,0x74,0x73,
- 0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x72,0x74,0x20,0x6F,0x66,
- 0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,
- 0x74,0x68,0x61,0x74,0x20,0x69,0x73,0x20,0x62,0x65,0x79,0x6F,
- 0x6E,0x64,0x20,0x74,0x68,0x65,0x20,0x73,0x65,0x63,0x6F,0x6E,
- 0x64,0x0B,0x6C,0x6F,0x6F,0x70,0x20,0x70,0x6F,0x69,0x6E,0x74,
- 0x2E,0x00,0x2D,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,
- 0x31,0x53,0x61,0x6D,0x70,0x6C,0x65,0x20,0x45,0x64,0x69,0x74,
- 0x6F,0x72,0x20,0x45,0x78,0x74,0x65,0x6E,0x73,0x69,0x6F,0x6E,
- 0x3A,0x20,0x28,0x53,0x2E,0x45,0x2E,0x45,0x78,0x74,0x2E,0x29,
- 0x01,0x3E,0x27,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
- 0x30,0x31,0x43,0x6F,0x70,0x79,0x2F,0x58,0x63,0x68,0x67,0x20,
- 0x53,0x61,0x6D,0x70,0x6C,0x65,0x2F,0x49,0x6E,0x73,0x74,0x72,
- 0x75,0x6D,0x65,0x6E,0x74,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
- 0x30,0x40,0x43,0x30,0x30,0x32,0x3C,0x3E,0x54,0x68,0x65,0x20,
- 0x73,0x6F,0x75,0x72,0x63,0x65,0x20,0x69,0x73,0x20,0x73,0x70,
- 0x65,0x63,0x69,0x66,0x69,0x65,0x64,0x20,0x69,0x6E,0x20,0x74,
- 0x68,0x65,0x20,0x6C,0x69,0x6E,0x65,0x20,0x6E,0x75,0x6D,0x62,
- 0x65,0x72,0x69,0x6E,0x67,0x20,0x63,0x6F,0x6C,0x75,0x6D,0x6E,
- 0x20,0x6F,0x66,0x20,0x74,0x68,0x65,0x40,0x69,0x6E,0x73,0x74,
- 0x72,0x2E,0x2F,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x6C,0x69,
- 0x73,0x74,0x73,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x75,
- 0x70,0x70,0x65,0x72,0x2D,0x72,0x69,0x67,0x68,0x74,0x20,0x63,
- 0x6F,0x72,0x6E,0x65,0x72,0x20,0x6F,0x66,0x20,0x74,0x68,0x65,
- 0x20,0x73,0x63,0x72,0x65,0x65,0x6E,0x2E,0x20,0x54,0x68,0x65,
- 0x29,0x64,0x65,0x73,0x74,0x69,0x6E,0x61,0x74,0x69,0x6F,0x6E,
- 0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,
- 0x65,0x6E,0x74,0x20,0x69,0x6E,0x73,0x74,0x72,0x2E,0x2F,0x73,
- 0x61,0x6D,0x70,0x6C,0x65,0x2E,0x00,0x15,0x3E,0x40,0x58,0x30,
- 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x42,0x61,0x63,0x6B,0x77,
- 0x61,0x72,0x64,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,
- 0x40,0x43,0x30,0x30,0x32,0x40,0x3E,0x4F,0x70,0x65,0x72,0x61,
- 0x74,0x65,0x73,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,0x72,
- 0x61,0x6E,0x67,0x65,0x20,0x28,0x6F,0x72,0x20,0x74,0x68,0x65,
- 0x20,0x77,0x68,0x6F,0x6C,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,
- 0x65,0x20,0x69,0x66,0x20,0x6E,0x6F,0x20,0x72,0x61,0x6E,0x67,
- 0x65,0x20,0x69,0x73,0x20,0x73,0x65,0x74,0x29,0x2E,0x00,0x13,
- 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x43,
- 0x6F,0x6E,0x76,0x65,0x72,0x74,0x3A,0x0B,0x3E,0x40,0x58,0x30,
- 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x34,0x3E,0x43,0x6F,0x6E,
- 0x76,0x65,0x72,0x74,0x73,0x20,0x74,0x68,0x65,0x20,0x65,0x6E,
- 0x74,0x69,0x72,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,
- 0x66,0x72,0x6F,0x6D,0x2F,0x74,0x6F,0x20,0x73,0x69,0x67,0x6E,
- 0x65,0x64,0x2F,0x75,0x6E,0x73,0x69,0x67,0x6E,0x65,0x64,0x2E,
+ 0x32,0x3D,0x41,0x74,0x74,0x65,0x6D,0x70,0x74,0x73,0x20,0x74,
+ 0x6F,0x20,0x63,0x65,0x6E,0x74,0x65,0x72,0x20,0x61,0x20,0x73,
+ 0x61,0x6D,0x70,0x6C,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x68,
+ 0x61,0x73,0x20,0x75,0x6E,0x77,0x61,0x6E,0x74,0x65,0x64,0x20,
+ 0x44,0x43,0x20,0x6F,0x66,0x66,0x73,0x65,0x74,0x2F,0x62,0x69,
+ 0x61,0x73,0x2E,0x43,0x50,0x6C,0x65,0x61,0x73,0x65,0x20,0x6E,
+ 0x6F,0x74,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x69,0x74,0x20,
+ 0x69,0x73,0x20,0x75,0x73,0x69,0x6E,0x67,0x20,0x61,0x20,0x63,
+ 0x72,0x75,0x64,0x65,0x20,0x61,0x6C,0x67,0x6F,0x72,0x69,0x74,
+ 0x68,0x6D,0x2C,0x20,0x73,0x6F,0x20,0x69,0x74,0x20,0x63,0x61,
+ 0x6E,0x20,0x73,0x6F,0x6D,0x65,0x74,0x69,0x6D,0x65,0x73,0x22,
+ 0x66,0x61,0x69,0x6C,0x20,0x64,0x65,0x70,0x65,0x6E,0x64,0x69,
+ 0x6E,0x67,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,0x73,0x61,
+ 0x6D,0x70,0x6C,0x65,0x20,0x64,0x61,0x74,0x61,0x2E,0x00,0x14,
+ 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x52,
+ 0x65,0x73,0x61,0x6D,0x70,0x6C,0x65,0x3A,0x0B,0x3E,0x40,0x58,
+ 0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3C,0x4F,0x70,0x65,
+ 0x72,0x61,0x74,0x65,0x73,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,
+ 0x20,0x65,0x6E,0x74,0x69,0x72,0x65,0x20,0x73,0x61,0x6D,0x70,
+ 0x6C,0x65,0x2E,0x20,0x54,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,
+ 0x6C,0x65,0x27,0x73,0x20,0x72,0x65,0x6C,0x61,0x74,0x69,0x76,
+ 0x65,0x20,0x74,0x6F,0x6E,0x65,0x20,0x69,0x73,0x2C,0x63,0x68,
+ 0x61,0x6E,0x67,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x72,
+ 0x65,0x73,0x70,0x65,0x63,0x74,0x20,0x74,0x6F,0x20,0x74,0x68,
+ 0x65,0x20,0x72,0x65,0x73,0x61,0x6D,0x70,0x6C,0x69,0x6E,0x67,
+ 0x20,0x72,0x61,0x74,0x65,0x2E,0x00,0x16,0x3E,0x40,0x58,0x30,
+ 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4D,0x69,0x78,0x20,0x73,
+ 0x61,0x6D,0x70,0x6C,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x35,0x3E,0x4D,0x69,0x78,0x65,
+ 0x73,0x20,0x74,0x68,0x65,0x20,0x73,0x6F,0x75,0x72,0x63,0x65,
+ 0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x20,0x64,0x65,
+ 0x73,0x74,0x69,0x6E,0x61,0x74,0x69,0x6F,0x6E,0x20,0x74,0x6F,
+ 0x20,0x74,0x68,0x65,0x20,0x73,0x6F,0x75,0x72,0x63,0x65,0x2E,
0x00,0x15,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,
- 0x31,0x43,0x6F,0x6E,0x76,0x65,0x72,0x74,0x20,0x57,0x3A,0x0B,
- 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3F,
- 0x53,0x77,0x61,0x70,0x73,0x20,0x74,0x68,0x65,0x20,0x62,0x79,
- 0x74,0x65,0x20,0x6F,0x72,0x64,0x65,0x72,0x20,0x74,0x6F,0x2F,
- 0x66,0x72,0x6F,0x6D,0x20,0x49,0x6E,0x74,0x65,0x6C,0x20,0x66,
- 0x72,0x6F,0x6D,0x2F,0x74,0x6F,0x20,0x4D,0x6F,0x74,0x6F,0x72,
- 0x6F,0x6C,0x61,0x20,0x73,0x74,0x61,0x6E,0x64,0x61,0x72,0x64,
- 0x20,0x6F,0x6E,0x12,0x74,0x68,0x65,0x20,0x65,0x6E,0x74,0x69,
- 0x72,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x2E,0x44,0x59,
- 0x6F,0x75,0x27,0x6C,0x6C,0x20,0x6E,0x65,0x65,0x64,0x20,0x74,
- 0x68,0x69,0x73,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,
- 0x20,0x69,0x66,0x20,0x79,0x6F,0x75,0x20,0x69,0x6D,0x70,0x6F,
- 0x72,0x74,0x20,0x31,0x36,0x2D,0x62,0x69,0x74,0x20,0x73,0x61,
- 0x6D,0x70,0x6C,0x65,0x73,0x20,0x77,0x69,0x74,0x68,0x20,0x4D,
- 0x6F,0x74,0x6F,0x72,0x6F,0x6C,0x61,0x2D,0x62,0x79,0x74,0x65,
- 0x2D,0x6F,0x72,0x64,0x65,0x72,0x69,0x6E,0x67,0x20,0x28,0x66,
- 0x2E,0x65,0x78,0x2E,0x20,0x4B,0x75,0x72,0x7A,0x77,0x65,0x69,
- 0x6C,0x20,0x4B,0x32,0x30,0x30,0x30,0x20,0x73,0x61,0x6D,0x70,
- 0x6C,0x65,0x73,0x2E,0x29,0x00,0x10,0x3E,0x40,0x58,0x30,0x34,
- 0x30,0x40,0x43,0x30,0x30,0x31,0x45,0x63,0x68,0x6F,0x3A,0x0B,
- 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x1E,
- 0x4F,0x70,0x65,0x72,0x61,0x74,0x65,0x73,0x20,0x6F,0x6E,0x20,
- 0x74,0x68,0x65,0x20,0x65,0x6E,0x74,0x69,0x72,0x65,0x20,0x73,
- 0x61,0x6D,0x70,0x6C,0x65,0x2E,0x00,0x12,0x3E,0x40,0x58,0x30,
- 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x46,0x69,0x78,0x20,0x44,
- 0x43,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x3D,0x41,0x74,0x74,0x65,0x6D,0x70,0x74,0x73,0x20,
- 0x74,0x6F,0x20,0x63,0x65,0x6E,0x74,0x65,0x72,0x20,0x61,0x20,
- 0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x74,0x68,0x61,0x74,0x20,
- 0x68,0x61,0x73,0x20,0x75,0x6E,0x77,0x61,0x6E,0x74,0x65,0x64,
- 0x20,0x44,0x43,0x20,0x6F,0x66,0x66,0x73,0x65,0x74,0x2F,0x62,
- 0x69,0x61,0x73,0x2E,0x43,0x50,0x6C,0x65,0x61,0x73,0x65,0x20,
- 0x6E,0x6F,0x74,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x69,0x74,
- 0x20,0x69,0x73,0x20,0x75,0x73,0x69,0x6E,0x67,0x20,0x61,0x20,
- 0x63,0x72,0x75,0x64,0x65,0x20,0x61,0x6C,0x67,0x6F,0x72,0x69,
- 0x74,0x68,0x6D,0x2C,0x20,0x73,0x6F,0x20,0x69,0x74,0x20,0x63,
- 0x61,0x6E,0x20,0x73,0x6F,0x6D,0x65,0x74,0x69,0x6D,0x65,0x73,
- 0x22,0x66,0x61,0x69,0x6C,0x20,0x64,0x65,0x70,0x65,0x6E,0x64,
- 0x69,0x6E,0x67,0x20,0x6F,0x6E,0x20,0x74,0x68,0x65,0x20,0x73,
- 0x61,0x6D,0x70,0x6C,0x65,0x20,0x64,0x61,0x74,0x61,0x2E,0x00,
- 0x14,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x52,0x65,0x73,0x61,0x6D,0x70,0x6C,0x65,0x3A,0x0B,0x3E,0x40,
- 0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3C,0x4F,0x70,
- 0x65,0x72,0x61,0x74,0x65,0x73,0x20,0x6F,0x6E,0x20,0x74,0x68,
- 0x65,0x20,0x65,0x6E,0x74,0x69,0x72,0x65,0x20,0x73,0x61,0x6D,
- 0x70,0x6C,0x65,0x2E,0x20,0x54,0x68,0x65,0x20,0x73,0x61,0x6D,
- 0x70,0x6C,0x65,0x27,0x73,0x20,0x72,0x65,0x6C,0x61,0x74,0x69,
- 0x76,0x65,0x20,0x74,0x6F,0x6E,0x65,0x20,0x69,0x73,0x2C,0x63,
- 0x68,0x61,0x6E,0x67,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,
- 0x72,0x65,0x73,0x70,0x65,0x63,0x74,0x20,0x74,0x6F,0x20,0x74,
- 0x68,0x65,0x20,0x72,0x65,0x73,0x61,0x6D,0x70,0x6C,0x69,0x6E,
- 0x67,0x20,0x72,0x61,0x74,0x65,0x2E,0x00,0x16,0x3E,0x40,0x58,
- 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x4D,0x69,0x78,0x20,
- 0x73,0x61,0x6D,0x70,0x6C,0x65,0x3A,0x0B,0x3E,0x40,0x58,0x30,
- 0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x35,0x3E,0x4D,0x69,0x78,
- 0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x73,0x6F,0x75,0x72,0x63,
- 0x65,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x20,0x64,
- 0x65,0x73,0x74,0x69,0x6E,0x61,0x74,0x69,0x6F,0x6E,0x20,0x74,
- 0x6F,0x20,0x74,0x68,0x65,0x20,0x73,0x6F,0x75,0x72,0x63,0x65,
- 0x2E,0x00,0x15,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
- 0x30,0x31,0x44,0x72,0x61,0x77,0x20,0x6D,0x6F,0x64,0x65,0x3A,
+ 0x31,0x44,0x72,0x61,0x77,0x20,0x6D,0x6F,0x64,0x65,0x3A,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x40,
+ 0x42,0x79,0x20,0x70,0x72,0x65,0x73,0x73,0x69,0x6E,0x67,0x20,
+ 0x74,0x68,0x65,0x20,0x72,0x69,0x67,0x68,0x74,0x20,0x6D,0x6F,
+ 0x75,0x73,0x65,0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x20,0x69,
+ 0x6E,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,
+ 0x20,0x77,0x69,0x6E,0x64,0x6F,0x77,0x2C,0x20,0x79,0x6F,0x75,
+ 0x20,0x63,0x61,0x6E,0x1D,0x64,0x72,0x61,0x77,0x20,0x79,0x6F,
+ 0x75,0x72,0x20,0x77,0x61,0x76,0x65,0x66,0x6F,0x72,0x6D,0x73,
+ 0x20,0x6D,0x61,0x6E,0x75,0x61,0x6C,0x6C,0x79,0x2E,0x00,0x18,
+ 0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x43,0x6F,
+ 0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x3A,
+ 0x01,0x3E,0x15,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,
+ 0x30,0x31,0x41,0x75,0x74,0x6F,0x20,0x73,0x61,0x76,0x65,0x3A,
0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,
- 0x40,0x42,0x79,0x20,0x70,0x72,0x65,0x73,0x73,0x69,0x6E,0x67,
- 0x20,0x74,0x68,0x65,0x20,0x72,0x69,0x67,0x68,0x74,0x20,0x6D,
- 0x6F,0x75,0x73,0x65,0x20,0x62,0x75,0x74,0x74,0x6F,0x6E,0x20,
- 0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,
- 0x65,0x20,0x77,0x69,0x6E,0x64,0x6F,0x77,0x2C,0x20,0x79,0x6F,
- 0x75,0x20,0x63,0x61,0x6E,0x1D,0x64,0x72,0x61,0x77,0x20,0x79,
- 0x6F,0x75,0x72,0x20,0x77,0x61,0x76,0x65,0x66,0x6F,0x72,0x6D,
- 0x73,0x20,0x6D,0x61,0x6E,0x75,0x61,0x6C,0x6C,0x79,0x2E,0x00,
- 0x18,0x40,0x58,0x30,0x32,0x30,0x40,0x43,0x30,0x30,0x31,0x43,
- 0x6F,0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,
- 0x3A,0x01,0x3E,0x15,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
- 0x30,0x30,0x31,0x41,0x75,0x74,0x6F,0x20,0x73,0x61,0x76,0x65,
+ 0x43,0x49,0x66,0x20,0x74,0x68,0x65,0x20,0x61,0x75,0x74,0x6F,
+ 0x20,0x73,0x61,0x76,0x65,0x20,0x69,0x73,0x20,0x6F,0x6E,0x2C,
+ 0x20,0x46,0x54,0x32,0x20,0x77,0x69,0x6C,0x6C,0x20,0x75,0x70,
+ 0x64,0x61,0x74,0x65,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,0x6E,
+ 0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,0x66,
+ 0x69,0x6C,0x65,0x20,0x77,0x68,0x65,0x6E,0x15,0x79,0x6F,0x75,
+ 0x20,0x65,0x78,0x69,0x74,0x20,0x74,0x68,0x65,0x20,0x70,0x72,
+ 0x6F,0x67,0x72,0x61,0x6D,0x2E,0x00,0x25,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,0x49,0x2F,0x4F,
+ 0x20,0x64,0x65,0x76,0x69,0x63,0x65,0x73,0x3A,0x01,0x3E,0x19,
+ 0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x49,
+ 0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,0x6F,0x6E,
0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,
- 0x32,0x43,0x49,0x66,0x20,0x74,0x68,0x65,0x20,0x61,0x75,0x74,
- 0x6F,0x20,0x73,0x61,0x76,0x65,0x20,0x69,0x73,0x20,0x6F,0x6E,
- 0x2C,0x20,0x46,0x54,0x32,0x20,0x77,0x69,0x6C,0x6C,0x20,0x75,
- 0x70,0x64,0x61,0x74,0x65,0x20,0x74,0x68,0x65,0x20,0x63,0x6F,
- 0x6E,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6F,0x6E,0x20,
- 0x66,0x69,0x6C,0x65,0x20,0x77,0x68,0x65,0x6E,0x15,0x79,0x6F,
- 0x75,0x20,0x65,0x78,0x69,0x74,0x20,0x74,0x68,0x65,0x20,0x70,
- 0x72,0x6F,0x67,0x72,0x61,0x6D,0x2E,0x00,0x25,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,0x49,0x2F,
- 0x4F,0x20,0x64,0x65,0x76,0x69,0x63,0x65,0x73,0x3A,0x01,0x3E,
- 0x19,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,
- 0x49,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,0x6F,
- 0x6E,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,
- 0x30,0x32,0x3C,0x54,0x68,0x65,0x20,0x6D,0x69,0x78,0x69,0x6E,
- 0x67,0x20,0x72,0x6F,0x75,0x74,0x69,0x6E,0x65,0x20,0x69,0x6E,
- 0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x65,0x73,0x20,0x74,
- 0x68,0x65,0x20,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x76,0x61,
- 0x6C,0x75,0x65,0x20,0x62,0x65,0x74,0x77,0x65,0x65,0x6E,0x20,
- 0x74,0x68,0x65,0x42,0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x70,
- 0x6F,0x69,0x6E,0x74,0x73,0x20,0x74,0x6F,0x20,0x72,0x65,0x6D,
- 0x6F,0x76,0x65,0x20,0x75,0x6E,0x77,0x61,0x6E,0x74,0x65,0x64,
- 0x20,0x6E,0x6F,0x69,0x73,0x65,0x20,0x69,0x6E,0x20,0x74,0x68,
- 0x65,0x20,0x73,0x6F,0x75,0x6E,0x64,0x2E,0x20,0x52,0x65,0x61,
- 0x6C,0x20,0x46,0x54,0x32,0x20,0x75,0x73,0x65,0x73,0x45,0x32,
- 0x2D,0x74,0x61,0x70,0x20,0x6C,0x69,0x6E,0x65,0x61,0x72,0x20,
- 0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,0x6F,
- 0x6E,0x2C,0x20,0x77,0x68,0x69,0x6C,0x65,0x20,0x74,0x68,0x69,
- 0x73,0x20,0x63,0x6C,0x6F,0x6E,0x65,0x20,0x75,0x73,0x65,0x73,
- 0x20,0x34,0x2D,0x74,0x61,0x70,0x20,0x63,0x75,0x62,0x69,0x63,
- 0x20,0x73,0x70,0x6C,0x69,0x6E,0x65,0x20,0x45,0x69,0x6E,0x74,
- 0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,0x6F,0x6E,0x20,0x66,
- 0x6F,0x72,0x20,0x69,0x6D,0x70,0x72,0x6F,0x76,0x65,0x64,0x20,
- 0x68,0x69,0x67,0x68,0x20,0x66,0x72,0x65,0x71,0x75,0x65,0x6E,
- 0x63,0x69,0x65,0x73,0x2E,0x20,0x54,0x75,0x72,0x6E,0x69,0x6E,
- 0x67,0x20,0x69,0x74,0x20,0x6F,0x66,0x66,0x20,0x77,0x69,0x6C,
- 0x6C,0x20,0x6D,0x61,0x6B,0x65,0x2F,0x74,0x68,0x65,0x20,0x61,
- 0x75,0x64,0x69,0x6F,0x20,0x73,0x68,0x61,0x72,0x70,0x65,0x72,
- 0x2C,0x20,0x62,0x75,0x74,0x20,0x69,0x74,0x20,0x77,0x69,0x6C,
- 0x6C,0x20,0x61,0x6C,0x73,0x6F,0x20,0x62,0x65,0x20,0x6E,0x6F,
- 0x69,0x73,0x69,0x65,0x72,0x2E,0x00,0x1A,0x3E,0x40,0x58,0x30,
- 0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x56,0x6F,0x6C,0x75,0x6D,
- 0x65,0x20,0x72,0x61,0x6D,0x70,0x69,0x6E,0x67,0x3A,0x0B,0x3E,
- 0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x3B,0x45,
- 0x6E,0x61,0x62,0x6C,0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x61,
- 0x6E,0x74,0x69,0x2D,0x63,0x6C,0x69,0x63,0x6B,0x20,0x73,0x79,
- 0x73,0x74,0x65,0x6D,0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,
- 0x61,0x75,0x64,0x69,0x6F,0x20,0x6D,0x69,0x78,0x65,0x72,0x20,
- 0x28,0x46,0x54,0x32,0x2E,0x30,0x38,0x2B,0x29,0x2E,0x3B,0x50,
- 0x6C,0x65,0x61,0x73,0x65,0x20,0x6E,0x6F,0x74,0x65,0x20,0x74,
- 0x68,0x61,0x74,0x20,0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,
- 0x20,0x46,0x54,0x32,0x20,0x63,0x61,0x6E,0x27,0x74,0x20,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,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,0x12,0x3E,0x40,0x58,
- 0x30,0x34,0x30,0x40,0x43,0x30,0x30,0x31,0x53,0x63,0x6F,0x70,
- 0x65,0x73,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,
- 0x30,0x30,0x32,0x43,0x22,0x53,0x74,0x64,0x2E,0x22,0x20,0x28,
- 0x73,0x74,0x61,0x6E,0x64,0x61,0x72,0x64,0x29,0x20,0x77,0x69,
- 0x6C,0x6C,0x20,0x73,0x68,0x6F,0x77,0x20,0x74,0x68,0x65,0x20,
- 0x73,0x61,0x6D,0x70,0x6C,0x65,0x20,0x70,0x6F,0x69,0x6E,0x74,
- 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,
+ 0x32,0x35,0x53,0x65,0x6C,0x65,0x63,0x74,0x73,0x20,0x77,0x68,
+ 0x61,0x74,0x20,0x74,0x79,0x70,0x65,0x20,0x6F,0x66,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,0x75,0x73,0x65,0x2E,0x45,0x22,0x4E,0x6F,0x6E,
+ 0x65,0x22,0x20,0x75,0x73,0x65,0x73,0x20,0x6E,0x6F,0x20,0x69,
+ 0x6E,0x74,0x65,0x72,0x70,0x6F,0x6C,0x61,0x74,0x69,0x6F,0x6E,
+ 0x20,0x28,0x6E,0x65,0x61,0x72,0x65,0x73,0x74,0x20,0x6E,0x65,
+ 0x69,0x67,0x68,0x62,0x6F,0x72,0x29,0x2C,0x20,0x77,0x68,0x69,
+ 0x63,0x68,0x20,0x77,0x69,0x6C,0x6C,0x20,0x72,0x65,0x73,0x75,
+ 0x6C,0x74,0x20,0x69,0x6E,0x49,0x61,0x6C,0x69,0x61,0x73,0x69,
+ 0x6E,0x67,0x20,0x28,0x6E,0x6F,0x69,0x73,0x65,0x29,0x20,0x69,
+ 0x6E,0x20,0x74,0x68,0x65,0x20,0x73,0x6F,0x75,0x6E,0x64,0x2E,
+ 0x20,0x22,0x4C,0x69,0x6E,0x65,0x61,0x72,0x22,0x20,0x69,0x73,
+ 0x20,0x77,0x68,0x61,0x74,0x20,0x72,0x65,0x61,0x6C,0x20,0x46,
+ 0x54,0x32,0x20,0x75,0x73,0x65,0x73,0x2C,0x20,0x77,0x68,0x69,
+ 0x63,0x68,0x20,0x69,0x73,0x20,0x61,0x46,0x6D,0x65,0x64,0x69,
+ 0x6F,0x63,0x72,0x65,0x20,0x69,0x6E,0x74,0x65,0x72,0x70,0x6F,
+ 0x6C,0x61,0x74,0x69,0x6F,0x6E,0x20,0x74,0x79,0x70,0x65,0x2E,
+ 0x20,0x22,0x43,0x75,0x62,0x69,0x63,0x20,0x73,0x70,0x6C,0x69,
+ 0x6E,0x65,0x22,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x72,
+ 0x65,0x63,0x6F,0x6D,0x6D,0x65,0x6E,0x64,0x65,0x64,0x20,0x73,
+ 0x65,0x74,0x74,0x69,0x6E,0x67,0x48,0x66,0x6F,0x72,0x20,0x74,
+ 0x68,0x65,0x20,0x62,0x65,0x73,0x74,0x20,0x61,0x75,0x64,0x69,
+ 0x6F,0x20,0x71,0x75,0x61,0x6C,0x69,0x74,0x79,0x2C,0x20,0x61,
+ 0x6C,0x74,0x68,0x6F,0x75,0x67,0x68,0x20,0x69,0x74,0x20,0x6D,
+ 0x61,0x79,0x20,0x73,0x6F,0x6D,0x65,0x74,0x69,0x6D,0x65,0x73,
+ 0x20,0x73,0x6F,0x75,0x6E,0x64,0x20,0x74,0x6F,0x6F,0x20,0x66,
+ 0x69,0x6C,0x74,0x65,0x72,0x65,0x64,0x2A,0x6F,0x6E,0x20,0x6C,
+ 0x6F,0x77,0x2D,0x71,0x75,0x61,0x6C,0x69,0x74,0x79,0x20,0x73,
+ 0x61,0x6D,0x70,0x6C,0x65,0x73,0x20,0x28,0x66,0x2E,0x65,0x78,
+ 0x2E,0x20,0x41,0x6D,0x69,0x67,0x61,0x20,0x4D,0x4F,0x44,0x73,
+ 0x29,0x2E,0x00,0x1A,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,0x43,
+ 0x30,0x30,0x31,0x56,0x6F,0x6C,0x75,0x6D,0x65,0x20,0x72,0x61,
+ 0x6D,0x70,0x69,0x6E,0x67,0x3A,0x0B,0x3E,0x40,0x58,0x30,0x36,
+ 0x30,0x40,0x43,0x30,0x30,0x32,0x3B,0x45,0x6E,0x61,0x62,0x6C,
+ 0x65,0x73,0x20,0x74,0x68,0x65,0x20,0x61,0x6E,0x74,0x69,0x2D,
+ 0x63,0x6C,0x69,0x63,0x6B,0x20,0x73,0x79,0x73,0x74,0x65,0x6D,
+ 0x20,0x69,0x6E,0x20,0x74,0x68,0x65,0x20,0x61,0x75,0x64,0x69,
+ 0x6F,0x20,0x6D,0x69,0x78,0x65,0x72,0x20,0x28,0x46,0x54,0x32,
+ 0x2E,0x30,0x38,0x2B,0x29,0x2E,0x3B,0x50,0x6C,0x65,0x61,0x73,
+ 0x65,0x20,0x6E,0x6F,0x74,0x65,0x20,0x74,0x68,0x61,0x74,0x20,
+ 0x6F,0x72,0x69,0x67,0x69,0x6E,0x61,0x6C,0x20,0x46,0x54,0x32,
+ 0x20,0x63,0x61,0x6E,0x27,0x74,0x20,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,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,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,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,
+ 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,0x12,0x3E,0x40,0x58,0x30,0x34,0x30,0x40,
+ 0x43,0x30,0x30,0x31,0x53,0x63,0x6F,0x70,0x65,0x73,0x3A,0x0B,
+ 0x3E,0x40,0x58,0x30,0x36,0x30,0x40,0x43,0x30,0x30,0x32,0x43,
+ 0x22,0x53,0x74,0x64,0x2E,0x22,0x20,0x28,0x73,0x74,0x61,0x6E,
+ 0x64,0x61,0x72,0x64,0x29,0x20,0x77,0x69,0x6C,0x6C,0x20,0x73,
+ 0x68,0x6F,0x77,0x20,0x74,0x68,0x65,0x20,0x73,0x61,0x6D,0x70,
+ 0x6C,0x65,0x20,0x70,0x6F,0x69,0x6E,0x74,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,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,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,
- 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x4C,0x3B,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,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,0x4C,0x3E,0x40,0x43,0x30,0x30,0x32,0x41,0x3A,0x20,0x50,
+ 0x6C,0x65,0x61,0x73,0x65,0x20,0x73,0x65,0x6E,0x64,0x20,0x6D,
+ 0x65,0x20,0x61,0x20,0x6D,0x61,0x69,0x6C,0x20,0x28,0x66,0x6F,
+ 0x75,0x6E,0x64,0x20,0x61,0x74,0x20,0x31,0x36,0x2D,0x62,0x69,
+ 0x74,0x73,0x2E,0x6F,0x72,0x67,0x29,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,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,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,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,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,0x4F,0x3E,0x40,0x58,0x30,
- 0x32,0x31,0x75,0x6E,0x65,0x78,0x70,0x65,0x63,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,0x43,0x3E,0x40,0x43,
- 0x30,0x30,0x32,0x2D,0x20,0x4C,0x69,0x6E,0x75,0x78,0x3A,0x20,
- 0x54,0x68,0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,0x63,0x75,
- 0x72,0x73,0x6F,0x72,0x20,0x67,0x72,0x61,0x70,0x68,0x69,0x63,
- 0x73,0x20,0x63,0x61,0x6E,0x20,0x62,0x65,0x20,0x67,0x6C,0x69,
- 0x74,0x63,0x68,0x79,0x20,0x61,0x74,0x20,0x74,0x69,0x6D,0x65,
- 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,0x50,0x3E,0x40,0x58,0x30,
- 0x31,0x30,0x2D,0x20,0x46,0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,
- 0x65,0x6E,0x20,0x6D,0x6F,0x64,0x65,0x20,0x63,0x61,0x6E,0x20,
- 0x62,0x65,0x20,0x75,0x6E,0x62,0x65,0x61,0x72,0x61,0x62,0x6C,
- 0x79,0x20,0x73,0x6C,0x6F,0x77,0x20,0x6F,0x6E,0x20,0x61,0x20,
- 0x52,0x61,0x73,0x70,0x62,0x65,0x72,0x72,0x79,0x20,0x50,0x69,
- 0x20,0x28,0x65,0x76,0x65,0x6E,0x20,0x6F,0x6E,0x20,0x52,0x50,
- 0x69,0x20,0x34,0x29,0x01,0x3E,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,0x0C,0x40,0x4C,
+ 0x4B,0x6E,0x6F,0x77,0x6E,0x20,0x62,0x75,0x67,0x73,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,0x43,0x3E,0x40,0x43,0x30,
+ 0x30,0x32,0x2D,0x20,0x4C,0x69,0x6E,0x75,0x78,0x3A,0x20,0x54,
+ 0x68,0x65,0x20,0x6D,0x6F,0x75,0x73,0x65,0x20,0x63,0x75,0x72,
+ 0x73,0x6F,0x72,0x20,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x73,
+ 0x20,0x63,0x61,0x6E,0x20,0x62,0x65,0x20,0x67,0x6C,0x69,0x74,
+ 0x63,0x68,0x79,0x20,0x61,0x74,0x20,0x74,0x69,0x6D,0x65,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,0x50,0x3E,0x40,0x58,0x30,0x31,
+ 0x30,0x2D,0x20,0x46,0x75,0x6C,0x6C,0x73,0x63,0x72,0x65,0x65,
+ 0x6E,0x20,0x6D,0x6F,0x64,0x65,0x20,0x63,0x61,0x6E,0x20,0x62,
+ 0x65,0x20,0x75,0x6E,0x62,0x65,0x61,0x72,0x61,0x62,0x6C,0x79,
+ 0x20,0x73,0x6C,0x6F,0x77,0x20,0x6F,0x6E,0x20,0x61,0x20,0x52,
+ 0x61,0x73,0x70,0x62,0x65,0x72,0x72,0x79,0x20,0x50,0x69,0x20,
+ 0x28,0x65,0x76,0x65,0x6E,0x20,0x6F,0x6E,0x20,0x52,0x50,0x69,
+ 0x20,0x34,0x29,0x01,0x3E,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
--- a/src/mixer/ft2_center_mix.c
+++ b/src/mixer/ft2_center_mix.c
@@ -138,10 +138,10 @@
SET_BACK_MIXER_POS
}
-void centerMix8bNoLoopIntrp(voice_t *v, uint32_t numSamples)
+void centerMix8bNoLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
uint32_t i, samplesToMix, samplesLeft;
uint64_t posFrac;
@@ -158,19 +158,19 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_CINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_CINTRP
INC_POS
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_CINTRP
INC_POS
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_CINTRP
INC_POS
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_CINTRP
INC_POS
}
@@ -180,10 +180,10 @@
SET_BACK_MIXER_POS
}
-void centerMix8bLoopIntrp(voice_t *v, uint32_t numSamples)
+void centerMix8bLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
uint32_t i, samplesToMix, samplesLeft;
uint64_t posFrac;
@@ -191,6 +191,7 @@
GET_VOL_MONO
GET_MIXER_VARS
SET_BASE8
+ PREPARE_TAP_FIX8
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -198,24 +199,200 @@
LIMIT_MIX_NUM
samplesLeft -= samplesToMix;
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP
+ INC_POS
+ RENDER_8BIT_SMP_MONO_CINTRP
+ INC_POS
+ RENDER_8BIT_SMP_MONO_CINTRP
+ INC_POS
+ RENDER_8BIT_SMP_MONO_CINTRP
+ INC_POS
+ }
+ }
+
+ WRAP_LOOP
+ }
+
+ SET_BACK_MIXER_POS
+}
+
+void centerMix8bBidiLoopCIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int8_t *base, *revBase, *smpPtr;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac, tmpDelta;
+
+ GET_VOL_MONO
+ GET_MIXER_VARS
+ SET_BASE8_BIDI
+ PREPARE_TAP_FIX8
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ samplesLeft -= samplesToMix;
+
+ START_BIDI
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_MONO_CINTRP
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_MONO_CINTRP
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_MONO_CINTRP
+ INC_POS_BIDI
+ }
+ }
+
+ END_BIDI
+
+ WRAP_BIDI_LOOP
+ }
+
+ SET_BACK_MIXER_POS
+}
+
+void centerMix8bNoLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int8_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL_MONO
+ GET_MIXER_VARS
+ SET_BASE8
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ samplesLeft -= samplesToMix;
+
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
INC_POS
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
INC_POS
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
INC_POS
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
INC_POS
}
+ HANDLE_SAMPLE_END
+ }
+
+ SET_BACK_MIXER_POS
+}
+
+void centerMix8bLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int8_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL_MONO
+ GET_MIXER_VARS
+ SET_BASE8
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ samplesLeft -= samplesToMix;
+
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_MONO_LINTRP
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_MONO_LINTRP
+ INC_POS
+ RENDER_8BIT_SMP_MONO_LINTRP
+ INC_POS
+ RENDER_8BIT_SMP_MONO_LINTRP
+ INC_POS
+ RENDER_8BIT_SMP_MONO_LINTRP
+ INC_POS
+ }
+
WRAP_LOOP
}
@@ -222,10 +399,10 @@
SET_BACK_MIXER_POS
}
-void centerMix8bBidiLoopIntrp(voice_t *v, uint32_t numSamples)
+void centerMix8bBidiLoopLIntrp(voice_t *v, uint32_t numSamples)
{
const int8_t *base, *revBase, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
uint32_t i, samplesToMix, samplesLeft;
uint64_t posFrac, tmpDelta;
@@ -243,19 +420,19 @@
START_BIDI
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
INC_POS_BIDI
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
INC_POS_BIDI
}
END_BIDI
@@ -418,10 +595,10 @@
SET_BACK_MIXER_POS
}
-void centerMix8bRampNoLoopIntrp(voice_t *v, uint32_t numSamples)
+void centerMix8bRampNoLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
float fVolLDelta, fVolL;
uint32_t i, samplesToMix, samplesLeft;
@@ -440,7 +617,7 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_CINTRP
VOLUME_RAMPING_MONO
INC_POS
}
@@ -447,16 +624,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_CINTRP
VOLUME_RAMPING_MONO
INC_POS
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_CINTRP
VOLUME_RAMPING_MONO
INC_POS
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_CINTRP
VOLUME_RAMPING_MONO
INC_POS
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_CINTRP
VOLUME_RAMPING_MONO
INC_POS
}
@@ -468,10 +645,10 @@
SET_BACK_MIXER_POS
}
-void centerMix8bRampLoopIntrp(voice_t *v, uint32_t numSamples)
+void centerMix8bRampLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
float fVolLDelta, fVolL;
uint32_t i, samplesToMix, samplesLeft;
@@ -480,6 +657,7 @@
GET_VOL_MONO_RAMP
GET_MIXER_VARS_MONO_RAMP
SET_BASE8
+ PREPARE_TAP_FIX8
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -488,9 +666,168 @@
LIMIT_MIX_NUM_MONO_RAMP
samplesLeft -= samplesToMix;
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_8BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_8BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_8BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ }
+ }
+
+ WRAP_LOOP
+ }
+
+ SET_VOL_BACK_MONO
+ SET_BACK_MIXER_POS
+}
+
+void centerMix8bRampBidiLoopCIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int8_t *base, *revBase, *smpPtr;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ float fVolLDelta, fVolL;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac, tmpDelta;
+
+ GET_VOL_MONO_RAMP
+ GET_MIXER_VARS_MONO_RAMP
+ SET_BASE8_BIDI
+ PREPARE_TAP_FIX8
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ LIMIT_MIX_NUM_MONO_RAMP
+ samplesLeft -= samplesToMix;
+
+ START_BIDI
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ }
+ }
+ END_BIDI
+
+ WRAP_BIDI_LOOP
+ }
+
+ SET_VOL_BACK_MONO
+ SET_BACK_MIXER_POS
+}
+
+void centerMix8bRampNoLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int8_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ float fVolLDelta, fVolL;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL_MONO_RAMP
+ GET_MIXER_VARS_MONO_RAMP
+ SET_BASE8
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ LIMIT_MIX_NUM_MONO_RAMP
+ samplesLeft -= samplesToMix;
+
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS
}
@@ -497,20 +834,70 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS
}
+ HANDLE_SAMPLE_END
+ }
+
+ SET_VOL_BACK_MONO
+ SET_BACK_MIXER_POS
+}
+
+void centerMix8bRampLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int8_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ float fVolLDelta, fVolL;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL_MONO_RAMP
+ GET_MIXER_VARS_MONO_RAMP
+ SET_BASE8
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ LIMIT_MIX_NUM_MONO_RAMP
+ samplesLeft -= samplesToMix;
+
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_MONO_LINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_MONO_LINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_8BIT_SMP_MONO_LINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_8BIT_SMP_MONO_LINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_8BIT_SMP_MONO_LINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ }
+
WRAP_LOOP
}
@@ -518,10 +905,10 @@
SET_BACK_MIXER_POS
}
-void centerMix8bRampBidiLoopIntrp(voice_t *v, uint32_t numSamples)
+void centerMix8bRampBidiLoopLIntrp(voice_t *v, uint32_t numSamples)
{
const int8_t *base, *revBase, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
float fVolLDelta, fVolL;
uint32_t i, samplesToMix, samplesLeft;
@@ -541,7 +928,7 @@
START_BIDI
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS_BIDI
}
@@ -548,16 +935,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS_BIDI
- RENDER_8BIT_SMP_MONO_INTRP
+ RENDER_8BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS_BIDI
}
@@ -570,8 +957,6 @@
SET_BACK_MIXER_POS
}
-
-
/* ----------------------------------------------------------------------- */
/* 16-BIT CENTER MIXING ROUTINES */
/* ----------------------------------------------------------------------- */
@@ -704,10 +1089,10 @@
SET_BACK_MIXER_POS
}
-void centerMix16bNoLoopIntrp(voice_t *v, uint32_t numSamples)
+void centerMix16bNoLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
uint32_t i, samplesToMix, samplesLeft;
uint64_t posFrac;
@@ -724,19 +1109,19 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_CINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_CINTRP
INC_POS
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_CINTRP
INC_POS
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_CINTRP
INC_POS
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_CINTRP
INC_POS
}
@@ -746,10 +1131,10 @@
SET_BACK_MIXER_POS
}
-void centerMix16bLoopIntrp(voice_t *v, uint32_t numSamples)
+void centerMix16bLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
uint32_t i, samplesToMix, samplesLeft;
uint64_t posFrac;
@@ -757,6 +1142,7 @@
GET_VOL_MONO
GET_MIXER_VARS
SET_BASE16
+ PREPARE_TAP_FIX16
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -764,24 +1150,199 @@
LIMIT_MIX_NUM
samplesLeft -= samplesToMix;
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP
+ INC_POS
+ RENDER_16BIT_SMP_MONO_CINTRP
+ INC_POS
+ RENDER_16BIT_SMP_MONO_CINTRP
+ INC_POS
+ RENDER_16BIT_SMP_MONO_CINTRP
+ INC_POS
+ }
+ }
+
+ WRAP_LOOP
+ }
+
+ SET_BACK_MIXER_POS
+}
+
+void centerMix16bBidiLoopCIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int16_t *base, *revBase, *smpPtr;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac, tmpDelta;
+
+ GET_VOL_MONO
+ GET_MIXER_VARS
+ SET_BASE16_BIDI
+ PREPARE_TAP_FIX16
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ samplesLeft -= samplesToMix;
+
+ START_BIDI
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_MONO_CINTRP
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_MONO_CINTRP
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_MONO_CINTRP
+ INC_POS_BIDI
+ }
+ }
+ END_BIDI
+
+ WRAP_BIDI_LOOP
+ }
+
+ SET_BACK_MIXER_POS
+}
+
+void centerMix16bNoLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int16_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL_MONO
+ GET_MIXER_VARS
+ SET_BASE16
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ samplesLeft -= samplesToMix;
+
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
INC_POS
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
INC_POS
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
INC_POS
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
INC_POS
}
+ HANDLE_SAMPLE_END
+ }
+
+ SET_BACK_MIXER_POS
+}
+
+void centerMix16bLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int16_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL_MONO
+ GET_MIXER_VARS
+ SET_BASE16
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ samplesLeft -= samplesToMix;
+
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_MONO_LINTRP
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_MONO_LINTRP
+ INC_POS
+ RENDER_16BIT_SMP_MONO_LINTRP
+ INC_POS
+ RENDER_16BIT_SMP_MONO_LINTRP
+ INC_POS
+ RENDER_16BIT_SMP_MONO_LINTRP
+ INC_POS
+ }
+
WRAP_LOOP
}
@@ -788,10 +1349,10 @@
SET_BACK_MIXER_POS
}
-void centerMix16bBidiLoopIntrp(voice_t *v, uint32_t numSamples)
+void centerMix16bBidiLoopLIntrp(voice_t *v, uint32_t numSamples)
{
const int16_t *base, *revBase, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
uint32_t i, samplesToMix, samplesLeft;
uint64_t posFrac, tmpDelta;
@@ -809,19 +1370,19 @@
START_BIDI
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
INC_POS_BIDI
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
INC_POS_BIDI
}
END_BIDI
@@ -832,6 +1393,7 @@
SET_BACK_MIXER_POS
}
+
void centerMix16bRampNoLoop(voice_t *v, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
@@ -984,10 +1546,10 @@
SET_BACK_MIXER_POS
}
-void centerMix16bRampNoLoopIntrp(voice_t *v, uint32_t numSamples)
+void centerMix16bRampNoLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
float fVolLDelta, fVolL;
uint32_t i, samplesToMix, samplesLeft;
@@ -1006,7 +1568,7 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_CINTRP
VOLUME_RAMPING_MONO
INC_POS
}
@@ -1013,16 +1575,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_CINTRP
VOLUME_RAMPING_MONO
INC_POS
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_CINTRP
VOLUME_RAMPING_MONO
INC_POS
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_CINTRP
VOLUME_RAMPING_MONO
INC_POS
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_CINTRP
VOLUME_RAMPING_MONO
INC_POS
}
@@ -1034,10 +1596,10 @@
SET_BACK_MIXER_POS
}
-void centerMix16bRampLoopIntrp(voice_t *v, uint32_t numSamples)
+void centerMix16bRampLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
float fVolLDelta, fVolL;
uint32_t i, samplesToMix, samplesLeft;
@@ -1046,6 +1608,7 @@
GET_VOL_MONO_RAMP
GET_MIXER_VARS_MONO_RAMP
SET_BASE16
+ PREPARE_TAP_FIX16
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -1054,9 +1617,168 @@
LIMIT_MIX_NUM_MONO_RAMP
samplesLeft -= samplesToMix;
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_16BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_16BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_16BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ }
+ }
+
+ WRAP_LOOP
+ }
+
+ SET_VOL_BACK_MONO
+ SET_BACK_MIXER_POS
+}
+
+void centerMix16bRampBidiLoopCIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int16_t *base, *revBase, *smpPtr;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ float fVolLDelta, fVolL;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac, tmpDelta;
+
+ GET_VOL_MONO_RAMP
+ GET_MIXER_VARS_MONO_RAMP
+ SET_BASE16_BIDI
+ PREPARE_TAP_FIX16
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ LIMIT_MIX_NUM_MONO_RAMP
+ samplesLeft -= samplesToMix;
+
+ START_BIDI
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_MONO_CINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS_BIDI
+ }
+ }
+ END_BIDI
+
+ WRAP_BIDI_LOOP
+ }
+
+ SET_VOL_BACK_MONO
+ SET_BACK_MIXER_POS
+}
+
+void centerMix16bRampNoLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int16_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ float fVolLDelta, fVolL;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL_MONO_RAMP
+ GET_MIXER_VARS_MONO_RAMP
+ SET_BASE16
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ LIMIT_MIX_NUM_MONO_RAMP
+ samplesLeft -= samplesToMix;
+
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS
}
@@ -1063,20 +1785,70 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS
}
+ HANDLE_SAMPLE_END
+ }
+
+ SET_VOL_BACK_MONO
+ SET_BACK_MIXER_POS
+}
+
+void centerMix16bRampLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int16_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ float fVolLDelta, fVolL;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL_MONO_RAMP
+ GET_MIXER_VARS_MONO_RAMP
+ SET_BASE16
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ LIMIT_MIX_NUM_MONO_RAMP
+ samplesLeft -= samplesToMix;
+
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_MONO_LINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_MONO_LINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_16BIT_SMP_MONO_LINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_16BIT_SMP_MONO_LINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ RENDER_16BIT_SMP_MONO_LINTRP
+ VOLUME_RAMPING_MONO
+ INC_POS
+ }
+
WRAP_LOOP
}
@@ -1084,10 +1856,10 @@
SET_BACK_MIXER_POS
}
-void centerMix16bRampBidiLoopIntrp(voice_t *v, uint32_t numSamples)
+void centerMix16bRampBidiLoopLIntrp(voice_t *v, uint32_t numSamples)
{
const int16_t *base, *revBase, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
float fVolLDelta, fVolL;
uint32_t i, samplesToMix, samplesLeft;
@@ -1107,7 +1879,7 @@
START_BIDI
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS_BIDI
}
@@ -1114,16 +1886,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS_BIDI
- RENDER_16BIT_SMP_MONO_INTRP
+ RENDER_16BIT_SMP_MONO_LINTRP
VOLUME_RAMPING_MONO
INC_POS_BIDI
}
--- a/src/mixer/ft2_center_mix.h
+++ b/src/mixer/ft2_center_mix.h
@@ -3,27 +3,50 @@
#include <stdint.h>
#include "../ft2_audio.h"
+// no volume ramping
+
+// 8-bit
void centerMix8bNoLoop(voice_t *v, uint32_t numSamples);
void centerMix8bLoop(voice_t *v, uint32_t numSamples);
void centerMix8bBidiLoop(voice_t *v, uint32_t numSamples);
-void centerMix8bNoLoopIntrp(voice_t *v, uint32_t numSamples);
-void centerMix8bLoopIntrp(voice_t *v, uint32_t numSamples);
-void centerMix8bBidiLoopIntrp(voice_t *v, uint32_t numSamples);
+void centerMix8bNoLoopCIntrp(voice_t *v, uint32_t numSamples);
+void centerMix8bLoopCIntrp(voice_t *v, uint32_t numSamples);
+void centerMix8bBidiLoopCIntrp(voice_t *v, uint32_t numSamples);
+void centerMix8bNoLoopLIntrp(voice_t *v, uint32_t numSamples);
+void centerMix8bLoopLIntrp(voice_t *v, uint32_t numSamples);
+void centerMix8bBidiLoopLIntrp(voice_t *v, uint32_t numSamples);
+
+// 16-bit
void centerMix16bNoLoop(voice_t *v, uint32_t numSamples);
void centerMix16bLoop(voice_t *v, uint32_t numSamples);
void centerMix16bBidiLoop(voice_t *v, uint32_t numSamples);
-void centerMix16bNoLoopIntrp(voice_t *v, uint32_t numSamples);
-void centerMix16bLoopIntrp(voice_t *v, uint32_t numSamples);
-void centerMix16bBidiLoopIntrp(voice_t *v, uint32_t numSamples);
+void centerMix16bNoLoopCIntrp(voice_t *v, uint32_t numSamples);
+void centerMix16bLoopCIntrp(voice_t *v, uint32_t numSamples);
+void centerMix16bBidiLoopCIntrp(voice_t *v, uint32_t numSamples);
+void centerMix16bNoLoopLIntrp(voice_t *v, uint32_t numSamples);
+void centerMix16bLoopLIntrp(voice_t *v, uint32_t numSamples);
+void centerMix16bBidiLoopLIntrp(voice_t *v, uint32_t numSamples);
+
+// volume ramping
+
+// 8-bit
void centerMix8bRampNoLoop(voice_t *v, uint32_t numSamples);
void centerMix8bRampLoop(voice_t *v, uint32_t numSamples);
void centerMix8bRampBidiLoop(voice_t *v, uint32_t numSamples);
-void centerMix8bRampNoLoopIntrp(voice_t *v, uint32_t numSamples);
-void centerMix8bRampLoopIntrp(voice_t *v, uint32_t numSamples);
-void centerMix8bRampBidiLoopIntrp(voice_t *v, uint32_t numSamples);
+void centerMix8bRampNoLoopCIntrp(voice_t *v, uint32_t numSamples);
+void centerMix8bRampLoopCIntrp(voice_t *v, uint32_t numSamples);
+void centerMix8bRampBidiLoopCIntrp(voice_t *v, uint32_t numSamples);
+void centerMix8bRampNoLoopLIntrp(voice_t *v, uint32_t numSamples);
+void centerMix8bRampLoopLIntrp(voice_t *v, uint32_t numSamples);
+void centerMix8bRampBidiLoopLIntrp(voice_t *v, uint32_t numSamples);
+
+// 16bit
void centerMix16bRampNoLoop(voice_t *v, uint32_t numSamples);
void centerMix16bRampLoop(voice_t *v, uint32_t numSamples);
void centerMix16bRampBidiLoop(voice_t *v, uint32_t numSamples);
-void centerMix16bRampNoLoopIntrp(voice_t *v, uint32_t numSamples);
-void centerMix16bRampLoopIntrp(voice_t *v, uint32_t numSamples);
-void centerMix16bRampBidiLoopIntrp(voice_t *v, uint32_t numSamples);
+void centerMix16bRampNoLoopCIntrp(voice_t *v, uint32_t numSamples);
+void centerMix16bRampLoopCIntrp(voice_t *v, uint32_t numSamples);
+void centerMix16bRampBidiLoopCIntrp(voice_t *v, uint32_t numSamples);
+void centerMix16bRampNoLoopLIntrp(voice_t *v, uint32_t numSamples);
+void centerMix16bRampLoopLIntrp(voice_t *v, uint32_t numSamples);
+void centerMix16bRampBidiLoopLIntrp(voice_t *v, uint32_t numSamples);
--- a/src/mixer/ft2_cubic.c
+++ /dev/null
@@ -1,59 +1,0 @@
-#include <stdint.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include "ft2_cubic.h"
-
-float *fCubicLUT8 = NULL;
-float *fCubicLUT16 = NULL;
-
-/* 4-tap cubic spline interpolation (Horner's method)
-**
-** This simplified LUT formula has been used in several trackers, but
-** I think it originates from ModPlug Tracker (not sure about this).
-*/
-
-static void calcCubicLUT(float *fLUTPtr, const double dSale)
-{
- for (int32_t i = 0; i < CUBIC_PHASES; i++)
- {
- const double x = i * (1.0 / CUBIC_PHASES);
- const double x2 = x * x; // x^2
- const double x3 = x2 * x; // x^3
-
- *fLUTPtr++ = (float)((-0.5 * x3 + 1.0 * x2 - 0.5 * x) * dSale);
- *fLUTPtr++ = (float)(( 1.5 * x3 - 2.5 * x2 + 1.0) * dSale);
- *fLUTPtr++ = (float)((-1.5 * x3 + 2.0 * x2 + 0.5 * x) * dSale);
- *fLUTPtr++ = (float)(( 0.5 * x3 - 0.5 * x2) * dSale);
- }
-}
-
-bool calcCubicTable(void)
-{
- fCubicLUT8 = (float *)malloc(CUBIC_LUT_LEN * sizeof (float));
- if (fCubicLUT8 == NULL)
- return false;
-
- fCubicLUT16 = (float *)malloc(CUBIC_LUT_LEN * sizeof (float));
- if (fCubicLUT16 == NULL)
- return false;
-
- calcCubicLUT(fCubicLUT8, 1.0 / 128.0); // for 8-bit samples
- calcCubicLUT(fCubicLUT16, 1.0 / 32768.0); // for 16-bit samples
-
- return true;
-}
-
-void freeCubicTable(void)
-{
- if (fCubicLUT8 != NULL)
- {
- free(fCubicLUT8);
- fCubicLUT8 = NULL;
- }
-
- if (fCubicLUT16 != NULL)
- {
- free(fCubicLUT16);
- fCubicLUT16 = NULL;
- }
-}
--- a/src/mixer/ft2_cubic.h
+++ /dev/null
@@ -1,22 +1,0 @@
-#pragma once
-
-#include <stdbool.h>
-#include "../ft2_audio.h" // MIXER_FRAC_BITS definition
-
-// if you change this, also change CUBIC_PHASES_BITS
-#define CUBIC_PHASES 4096
-#define CUBIC_PHASES_BITS 12 /* log2(CUBIC_PHASES) */
-
-// don't change these!
-
-#define CUBIC_WIDTH 4
-#define CUBIC_WIDTH_BITS 2
-#define CUBIC_LUT_LEN (CUBIC_WIDTH * CUBIC_PHASES)
-#define CUBIC_FSHIFT (MIXER_FRAC_BITS-(CUBIC_PHASES_BITS+CUBIC_WIDTH_BITS))
-#define CUBIC_FMASK ((CUBIC_WIDTH*CUBIC_PHASES)-CUBIC_WIDTH)
-
-extern float *fCubicLUT8;
-extern float *fCubicLUT16;
-
-bool calcCubicTable(void);
-void freeCubicTable(void);
--- /dev/null
+++ b/src/mixer/ft2_cubicspline.c
@@ -1,0 +1,59 @@
+#include <stdint.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include "ft2_cubicspline.h"
+
+float *fCubicSplineLUT8 = NULL;
+float *fCubicSplineLUT16 = NULL;
+
+/* 4-tap cubic spline interpolation (Horner's method)
+**
+** This simplified LUT formula has been used in several trackers, but
+** I think it originates from ModPlug Tracker (not sure about this).
+*/
+
+static void calcCubicLUT(float *fLUTPtr, const double dSale)
+{
+ for (int32_t i = 0; i < CUBIC_PHASES; i++)
+ {
+ const double x = i * (1.0 / CUBIC_PHASES);
+ const double x2 = x * x; // x^2
+ const double x3 = x2 * x; // x^3
+
+ *fLUTPtr++ = (float)((-0.5 * x3 + 1.0 * x2 - 0.5 * x) * dSale);
+ *fLUTPtr++ = (float)(( 1.5 * x3 - 2.5 * x2 + 1.0) * dSale);
+ *fLUTPtr++ = (float)((-1.5 * x3 + 2.0 * x2 + 0.5 * x) * dSale);
+ *fLUTPtr++ = (float)(( 0.5 * x3 - 0.5 * x2) * dSale);
+ }
+}
+
+bool calcCubicTable(void)
+{
+ fCubicSplineLUT8 = (float *)malloc(CUBIC_LUT_LEN * sizeof (float));
+ if (fCubicSplineLUT8 == NULL)
+ return false;
+
+ fCubicSplineLUT16 = (float *)malloc(CUBIC_LUT_LEN * sizeof (float));
+ if (fCubicSplineLUT16 == NULL)
+ return false;
+
+ calcCubicLUT(fCubicSplineLUT8, 1.0 / 128.0); // for 8-bit samples
+ calcCubicLUT(fCubicSplineLUT16, 1.0 / 32768.0); // for 16-bit samples
+
+ return true;
+}
+
+void freeCubicTable(void)
+{
+ if (fCubicSplineLUT8 != NULL)
+ {
+ free(fCubicSplineLUT8);
+ fCubicSplineLUT8 = NULL;
+ }
+
+ if (fCubicSplineLUT16 != NULL)
+ {
+ free(fCubicSplineLUT16);
+ fCubicSplineLUT16 = NULL;
+ }
+}
--- /dev/null
+++ b/src/mixer/ft2_cubicspline.h
@@ -1,0 +1,22 @@
+#pragma once
+
+#include <stdbool.h>
+#include "../ft2_audio.h" // MIXER_FRAC_BITS definition
+
+// if you change this, also change CUBIC_PHASES_BITS
+#define CUBIC_PHASES 4096
+#define CUBIC_PHASES_BITS 12 /* log2(CUBIC_PHASES) */
+
+// don't change these!
+
+#define CUBIC_WIDTH 4
+#define CUBIC_WIDTH_BITS 2
+#define CUBIC_LUT_LEN (CUBIC_WIDTH * CUBIC_PHASES)
+#define CUBIC_FSHIFT (MIXER_FRAC_BITS-(CUBIC_PHASES_BITS+CUBIC_WIDTH_BITS))
+#define CUBIC_FMASK ((CUBIC_WIDTH*CUBIC_PHASES)-CUBIC_WIDTH)
+
+extern float *fCubicSplineLUT8;
+extern float *fCubicSplineLUT16;
+
+bool calcCubicTable(void);
+void freeCubicTable(void);
--- a/src/mixer/ft2_mix.c
+++ b/src/mixer/ft2_mix.c
@@ -9,14 +9,14 @@
** (Note: Mixing macros can be found in ft2_mix_macros.h)
**
** Specifications:
-** - Fast 4-tap cubic interpolation through 32-bit float LUT (optional)
-** - Linear volume ramping, matching FT2 (optional)
-** - 32.32 fixed-point logic for position delta
-** - 32-bit float logic for volumes/amplitudes
+** - Either no interpolation, 2-tap linear interpolation (FT2) or 4-tap cubic interpolation
+** - Linear volume ramping, matching FT2 (can be turned off)
+** - 32.32 fixed-point logic for resampling delta
+** - 32-bit single-precision float logic for mixing and interpolation
**
** This file has separate routines for EVERY possible sampling variation:
-** Interpolation on/off, volumeramp on/off, 8-bit, 16-bit, no loop, loop, bidi.
-** (24 mixing routines in total + another 24 for center-mixing)
+** Interpolation none/cubic/linear, volumeramp on/off, 8-bit, 16-bit, no loop, loop, bidi.
+** (36 mixing routines in total + another 36 for center-mixing)
**
** Every voice has a function pointer set to the according mixing routine on
** sample trigger (from replayer, but set in audio thread), using a function
@@ -24,13 +24,6 @@
** when changing any of the above attributes from the GUI, to prevent possible
** thread-related issues.
**
-** There's one problem with the 4-tap cubic spline resampling interpolation...
-** On looped samples where loopStart>0, the splines are not correct when reading
-** from the loopStart (or +1?) sample point. The difference in audio is very
-** minor, so it's not a big problem. It just has to stay like this the way the
-** mixer works. In cases where loopStart=0, the sample before index 0 (yes, we
-** allocate enough data and pre-increment main pointer to support negative
-** look-up), is already pre-fixed so that the splines will be correct.
** -----------------------------------------------------------------------------
*/
@@ -165,10 +158,10 @@
SET_BACK_MIXER_POS
}
-static void mix8bNoLoopIntrp(voice_t *v, uint32_t numSamples)
+static void mix8bNoLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
uint32_t i, samplesToMix, samplesLeft;
uint64_t posFrac;
@@ -185,19 +178,19 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_CINTRP
INC_POS
}
@@ -207,10 +200,10 @@
SET_BACK_MIXER_POS
}
-static void mix8bLoopIntrp(voice_t *v, uint32_t numSamples)
+static void mix8bLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
uint32_t i, samplesToMix, samplesLeft;
uint64_t posFrac;
@@ -218,6 +211,7 @@
GET_VOL
GET_MIXER_VARS
SET_BASE8
+ PREPARE_TAP_FIX8
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -225,24 +219,199 @@
LIMIT_MIX_NUM
samplesLeft -= samplesToMix;
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ INC_POS
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ INC_POS
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ INC_POS
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ INC_POS
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_CINTRP
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_CINTRP
+ INC_POS
+ RENDER_8BIT_SMP_CINTRP
+ INC_POS
+ RENDER_8BIT_SMP_CINTRP
+ INC_POS
+ RENDER_8BIT_SMP_CINTRP
+ INC_POS
+ }
+ }
+
+ WRAP_LOOP
+ }
+
+ SET_BACK_MIXER_POS
+}
+
+static void mix8bBidiLoopCIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int8_t *base, *revBase, *smpPtr;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac, tmpDelta;
+
+ GET_VOL
+ GET_MIXER_VARS
+ SET_BASE8_BIDI
+ PREPARE_TAP_FIX8
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ samplesLeft -= samplesToMix;
+
+ START_BIDI
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_CINTRP
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_CINTRP
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_CINTRP
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_CINTRP
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_CINTRP
+ INC_POS_BIDI
+ }
+ }
+ END_BIDI
+
+ WRAP_BIDI_LOOP
+ }
+
+ SET_BACK_MIXER_POS
+}
+
+static void mix8bNoLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int8_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL
+ GET_MIXER_VARS
+ SET_BASE8
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ samplesLeft -= samplesToMix;
+
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
INC_POS
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
INC_POS
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
INC_POS
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
INC_POS
}
+ HANDLE_SAMPLE_END
+ }
+
+ SET_BACK_MIXER_POS
+}
+
+static void mix8bLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int8_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL
+ GET_MIXER_VARS
+ SET_BASE8
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ samplesLeft -= samplesToMix;
+
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_LINTRP
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_LINTRP
+ INC_POS
+ RENDER_8BIT_SMP_LINTRP
+ INC_POS
+ RENDER_8BIT_SMP_LINTRP
+ INC_POS
+ RENDER_8BIT_SMP_LINTRP
+ INC_POS
+ }
+
WRAP_LOOP
}
@@ -249,10 +418,10 @@
SET_BACK_MIXER_POS
}
-static void mix8bBidiLoopIntrp(voice_t *v, uint32_t numSamples)
+static void mix8bBidiLoopLIntrp(voice_t *v, uint32_t numSamples)
{
const int8_t *base, *revBase, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
uint32_t i, samplesToMix, samplesLeft;
uint64_t posFrac, tmpDelta;
@@ -270,19 +439,19 @@
START_BIDI
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
INC_POS_BIDI
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
INC_POS_BIDI
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
INC_POS_BIDI
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
INC_POS_BIDI
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
INC_POS_BIDI
}
END_BIDI
@@ -445,10 +614,10 @@
SET_BACK_MIXER_POS
}
-static void mix8bRampNoLoopIntrp(voice_t *v, uint32_t numSamples)
+static void mix8bRampNoLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
float fVolLDelta, fVolRDelta, fVolL, fVolR;
uint32_t i, samplesToMix, samplesLeft;
@@ -467,7 +636,7 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
}
@@ -474,16 +643,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
}
@@ -495,10 +664,10 @@
SET_BACK_MIXER_POS
}
-static void mix8bRampLoopIntrp(voice_t *v, uint32_t numSamples)
+static void mix8bRampLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int8_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
float fVolLDelta, fVolRDelta, fVolL, fVolR;
uint32_t i, samplesToMix, samplesLeft;
@@ -507,6 +676,7 @@
GET_VOL_RAMP
GET_MIXER_VARS_RAMP
SET_BASE8
+ PREPARE_TAP_FIX8
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -515,9 +685,168 @@
LIMIT_MIX_NUM_RAMP
samplesLeft -= samplesToMix;
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_8BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_8BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_8BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS
+ }
+ }
+
+ WRAP_LOOP
+ }
+
+ SET_VOL_BACK
+ SET_BACK_MIXER_POS
+}
+
+static void mix8bRampBidiLoopCIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int8_t *base, *revBase, *smpPtr;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ float fVolLDelta, fVolRDelta, fVolL, fVolR;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac, tmpDelta;
+
+ GET_VOL_RAMP
+ GET_MIXER_VARS_RAMP
+ SET_BASE8_BIDI
+ PREPARE_TAP_FIX8
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ LIMIT_MIX_NUM_RAMP
+ samplesLeft -= samplesToMix;
+
+ START_BIDI
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_8BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ }
+ }
+ END_BIDI
+
+ WRAP_BIDI_LOOP
+ }
+
+ SET_VOL_BACK
+ SET_BACK_MIXER_POS
+}
+
+static void mix8bRampNoLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int8_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ float fVolLDelta, fVolRDelta, fVolL, fVolR;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL_RAMP
+ GET_MIXER_VARS_RAMP
+ SET_BASE8
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ LIMIT_MIX_NUM_RAMP
+ samplesLeft -= samplesToMix;
+
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS
}
@@ -524,20 +853,70 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS
}
+ HANDLE_SAMPLE_END
+ }
+
+ SET_VOL_BACK
+ SET_BACK_MIXER_POS
+}
+
+static void mix8bRampLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int8_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ float fVolLDelta, fVolRDelta, fVolL, fVolR;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL_RAMP
+ GET_MIXER_VARS_RAMP
+ SET_BASE8
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ LIMIT_MIX_NUM_RAMP
+ samplesLeft -= samplesToMix;
+
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_8BIT_SMP_LINTRP
+ VOLUME_RAMPING
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_8BIT_SMP_LINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_8BIT_SMP_LINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_8BIT_SMP_LINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_8BIT_SMP_LINTRP
+ VOLUME_RAMPING
+ INC_POS
+ }
+
WRAP_LOOP
}
@@ -545,10 +924,10 @@
SET_BACK_MIXER_POS
}
-static void mix8bRampBidiLoopIntrp(voice_t *v, uint32_t numSamples)
+static void mix8bRampBidiLoopLIntrp(voice_t *v, uint32_t numSamples)
{
const int8_t *base, *revBase, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
float fVolLDelta, fVolRDelta, fVolL, fVolR;
uint32_t i, samplesToMix, samplesLeft;
@@ -568,7 +947,7 @@
START_BIDI
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS_BIDI
}
@@ -575,16 +954,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_8BIT_SMP_INTRP
+ RENDER_8BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS_BIDI
}
@@ -597,8 +976,6 @@
SET_BACK_MIXER_POS
}
-
-
/* ----------------------------------------------------------------------- */
/* 16-BIT MIXING ROUTINES */
/* ----------------------------------------------------------------------- */
@@ -731,10 +1108,10 @@
SET_BACK_MIXER_POS
}
-static void mix16bNoLoopIntrp(voice_t *v, uint32_t numSamples)
+static void mix16bNoLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
uint32_t i, samplesToMix, samplesLeft;
uint64_t posFrac;
@@ -751,19 +1128,19 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_CINTRP
INC_POS
}
@@ -773,10 +1150,10 @@
SET_BACK_MIXER_POS
}
-static void mix16bLoopIntrp(voice_t *v, uint32_t numSamples)
+static void mix16bLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
uint32_t i, samplesToMix, samplesLeft;
uint64_t posFrac;
@@ -784,6 +1161,7 @@
GET_VOL
GET_MIXER_VARS
SET_BASE16
+ PREPARE_TAP_FIX16
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -791,24 +1169,199 @@
LIMIT_MIX_NUM
samplesLeft -= samplesToMix;
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ INC_POS
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ INC_POS
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ INC_POS
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ INC_POS
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_CINTRP
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_CINTRP
+ INC_POS
+ RENDER_16BIT_SMP_CINTRP
+ INC_POS
+ RENDER_16BIT_SMP_CINTRP
+ INC_POS
+ RENDER_16BIT_SMP_CINTRP
+ INC_POS
+ }
+ }
+
+ WRAP_LOOP
+ }
+
+ SET_BACK_MIXER_POS
+}
+
+static void mix16bBidiLoopCIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int16_t *base, *revBase, *smpPtr;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac, tmpDelta;
+
+ GET_VOL
+ GET_MIXER_VARS
+ SET_BASE16_BIDI
+ PREPARE_TAP_FIX16
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ samplesLeft -= samplesToMix;
+
+ START_BIDI
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ INC_POS_BIDI
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_CINTRP
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_CINTRP
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_CINTRP
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_CINTRP
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_CINTRP
+ INC_POS_BIDI
+ }
+ }
+ END_BIDI
+
+ WRAP_BIDI_LOOP
+ }
+
+ SET_BACK_MIXER_POS
+}
+
+static void mix16bNoLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int16_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL
+ GET_MIXER_VARS
+ SET_BASE16
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ samplesLeft -= samplesToMix;
+
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
INC_POS
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
INC_POS
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
INC_POS
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
INC_POS
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
INC_POS
}
+ HANDLE_SAMPLE_END
+ }
+
+ SET_BACK_MIXER_POS
+}
+
+static void mix16bLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int16_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL
+ GET_MIXER_VARS
+ SET_BASE16
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ samplesLeft -= samplesToMix;
+
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_LINTRP
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_LINTRP
+ INC_POS
+ RENDER_16BIT_SMP_LINTRP
+ INC_POS
+ RENDER_16BIT_SMP_LINTRP
+ INC_POS
+ RENDER_16BIT_SMP_LINTRP
+ INC_POS
+ }
+
WRAP_LOOP
}
@@ -815,10 +1368,10 @@
SET_BACK_MIXER_POS
}
-static void mix16bBidiLoopIntrp(voice_t *v, uint32_t numSamples)
+static void mix16bBidiLoopLIntrp(voice_t *v, uint32_t numSamples)
{
const int16_t *base, *revBase, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
uint32_t i, samplesToMix, samplesLeft;
uint64_t posFrac, tmpDelta;
@@ -836,19 +1389,19 @@
START_BIDI
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
INC_POS_BIDI
}
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
INC_POS_BIDI
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
INC_POS_BIDI
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
INC_POS_BIDI
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
INC_POS_BIDI
}
END_BIDI
@@ -1011,10 +1564,10 @@
SET_BACK_MIXER_POS
}
-static void mix16bRampNoLoopIntrp(voice_t *v, uint32_t numSamples)
+static void mix16bRampNoLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
float fVolLDelta, fVolRDelta, fVolL, fVolR;
uint32_t i, samplesToMix, samplesLeft;
@@ -1033,7 +1586,7 @@
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
}
@@ -1040,16 +1593,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_CINTRP
VOLUME_RAMPING
INC_POS
}
@@ -1061,10 +1614,10 @@
SET_BACK_MIXER_POS
}
-static void mix16bRampLoopIntrp(voice_t *v, uint32_t numSamples)
+static void mix16bRampLoopCIntrp(voice_t *v, uint32_t numSamples)
{
const int16_t *base, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
float fVolLDelta, fVolRDelta, fVolL, fVolR;
uint32_t i, samplesToMix, samplesLeft;
@@ -1073,6 +1626,7 @@
GET_VOL_RAMP
GET_MIXER_VARS_RAMP
SET_BASE16
+ PREPARE_TAP_FIX16
samplesLeft = numSamples;
while (samplesLeft > 0)
@@ -1081,9 +1635,168 @@
LIMIT_MIX_NUM_RAMP
samplesLeft -= samplesToMix;
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_16BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_16BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_16BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS
+ }
+ }
+
+ WRAP_LOOP
+ }
+
+ SET_VOL_BACK
+ SET_BACK_MIXER_POS
+}
+
+static void mix16bRampBidiLoopCIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int16_t *base, *revBase, *smpPtr;
+ float s0, s1, s2, s3, fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ float fVolLDelta, fVolRDelta, fVolL, fVolR;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac, tmpDelta;
+
+ GET_VOL_RAMP
+ GET_MIXER_VARS_RAMP
+ SET_BASE16_BIDI
+ PREPARE_TAP_FIX16
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ LIMIT_MIX_NUM_RAMP
+ samplesLeft -= samplesToMix;
+
+ START_BIDI
+ if (v->hasLooped) // the interpolation's -1 tap needs a special case from now on
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_CINTRP_TAP_FIX
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ }
+ }
+ else
+ {
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ RENDER_16BIT_SMP_CINTRP
+ VOLUME_RAMPING
+ INC_POS_BIDI
+ }
+ }
+ END_BIDI
+
+ WRAP_BIDI_LOOP
+ }
+
+ SET_VOL_BACK
+ SET_BACK_MIXER_POS
+}
+
+static void mix16bRampNoLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int16_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ float fVolLDelta, fVolRDelta, fVolL, fVolR;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL_RAMP
+ GET_MIXER_VARS_RAMP
+ SET_BASE16
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ LIMIT_MIX_NUM_RAMP
+ samplesLeft -= samplesToMix;
+
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS
}
@@ -1090,20 +1803,70 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS
}
+ HANDLE_SAMPLE_END
+ }
+
+ SET_VOL_BACK
+ SET_BACK_MIXER_POS
+}
+
+static void mix16bRampLoopLIntrp(voice_t *v, uint32_t numSamples)
+{
+ const int16_t *base, *smpPtr;
+ float fSample, *fMixBufferL, *fMixBufferR;
+ int32_t pos;
+ float fVolLDelta, fVolRDelta, fVolL, fVolR;
+ uint32_t i, samplesToMix, samplesLeft;
+ uint64_t posFrac;
+
+ GET_VOL_RAMP
+ GET_MIXER_VARS_RAMP
+ SET_BASE16
+
+ samplesLeft = numSamples;
+ while (samplesLeft > 0)
+ {
+ LIMIT_MIX_NUM
+ LIMIT_MIX_NUM_RAMP
+ samplesLeft -= samplesToMix;
+
+ for (i = 0; i < (samplesToMix & 3); i++)
+ {
+ RENDER_16BIT_SMP_LINTRP
+ VOLUME_RAMPING
+ INC_POS
+ }
+ samplesToMix >>= 2;
+ for (i = 0; i < samplesToMix; i++)
+ {
+ RENDER_16BIT_SMP_LINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_16BIT_SMP_LINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_16BIT_SMP_LINTRP
+ VOLUME_RAMPING
+ INC_POS
+ RENDER_16BIT_SMP_LINTRP
+ VOLUME_RAMPING
+ INC_POS
+ }
+
WRAP_LOOP
}
@@ -1111,10 +1874,10 @@
SET_BACK_MIXER_POS
}
-static void mix16bRampBidiLoopIntrp(voice_t *v, uint32_t numSamples)
+static void mix16bRampBidiLoopLIntrp(voice_t *v, uint32_t numSamples)
{
const int16_t *base, *revBase, *smpPtr;
- float fSample, fSample2, fSample3, fSample4, *fMixBufferL, *fMixBufferR;
+ float fSample, *fMixBufferL, *fMixBufferR;
int32_t pos;
float fVolLDelta, fVolRDelta, fVolL, fVolR;
uint32_t i, samplesToMix, samplesLeft;
@@ -1134,7 +1897,7 @@
START_BIDI
for (i = 0; i < (samplesToMix & 3); i++)
{
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS_BIDI
}
@@ -1141,16 +1904,16 @@
samplesToMix >>= 2;
for (i = 0; i < samplesToMix; i++)
{
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS_BIDI
- RENDER_16BIT_SMP_INTRP
+ RENDER_16BIT_SMP_LINTRP
VOLUME_RAMPING
INC_POS_BIDI
}
@@ -1165,57 +1928,113 @@
// -----------------------------------------------------------------------
-const mixFunc mixFuncTab[48] =
+const mixFunc mixFuncTab[72] =
{
- // normal mixing (this file)
+ /*
+ ** ---------------------------------
+ ** stereo mixing (this file)
+ ** ---------------------------------
+ */
+
+ // no volume ramping
+
+ // 8-bit
(mixFunc)mix8bNoLoop,
(mixFunc)mix8bLoop,
(mixFunc)mix8bBidiLoop,
- (mixFunc)mix8bNoLoopIntrp,
- (mixFunc)mix8bLoopIntrp,
- (mixFunc)mix8bBidiLoopIntrp,
+ (mixFunc)mix8bNoLoopCIntrp,
+ (mixFunc)mix8bLoopCIntrp,
+ (mixFunc)mix8bBidiLoopCIntrp,
+ (mixFunc)mix8bNoLoopLIntrp,
+ (mixFunc)mix8bLoopLIntrp,
+ (mixFunc)mix8bBidiLoopLIntrp,
+
+ // 16-bit
(mixFunc)mix16bNoLoop,
(mixFunc)mix16bLoop,
(mixFunc)mix16bBidiLoop,
- (mixFunc)mix16bNoLoopIntrp,
- (mixFunc)mix16bLoopIntrp,
- (mixFunc)mix16bBidiLoopIntrp,
+ (mixFunc)mix16bNoLoopCIntrp,
+ (mixFunc)mix16bLoopCIntrp,
+ (mixFunc)mix16bBidiLoopCIntrp,
+ (mixFunc)mix16bNoLoopLIntrp,
+ (mixFunc)mix16bLoopLIntrp,
+ (mixFunc)mix16bBidiLoopLIntrp,
+
+ // volume ramping
+
+ // 8-bit
(mixFunc)mix8bRampNoLoop,
(mixFunc)mix8bRampLoop,
(mixFunc)mix8bRampBidiLoop,
- (mixFunc)mix8bRampNoLoopIntrp,
- (mixFunc)mix8bRampLoopIntrp,
- (mixFunc)mix8bRampBidiLoopIntrp,
+ (mixFunc)mix8bRampNoLoopCIntrp,
+ (mixFunc)mix8bRampLoopCIntrp,
+ (mixFunc)mix8bRampBidiLoopCIntrp,
+ (mixFunc)mix8bRampNoLoopLIntrp,
+ (mixFunc)mix8bRampLoopLIntrp,
+ (mixFunc)mix8bRampBidiLoopLIntrp,
+
+ // 16-bit
(mixFunc)mix16bRampNoLoop,
(mixFunc)mix16bRampLoop,
(mixFunc)mix16bRampBidiLoop,
- (mixFunc)mix16bRampNoLoopIntrp,
- (mixFunc)mix16bRampLoopIntrp,
- (mixFunc)mix16bRampBidiLoopIntrp,
+ (mixFunc)mix16bRampNoLoopCIntrp,
+ (mixFunc)mix16bRampLoopCIntrp,
+ (mixFunc)mix16bRampBidiLoopCIntrp,
+ (mixFunc)mix16bRampNoLoopLIntrp,
+ (mixFunc)mix16bRampLoopLIntrp,
+ (mixFunc)mix16bRampBidiLoopLIntrp,
- // center mixing (ft2_center_mix.c)
+ /*
+ ** ---------------------------------
+ ** center mixing (ft2_center_mix.c)
+ ** ---------------------------------
+ */
+
+ // no volume ramping
+
+ // 8-bit
(mixFunc)centerMix8bNoLoop,
(mixFunc)centerMix8bLoop,
(mixFunc)centerMix8bBidiLoop,
- (mixFunc)centerMix8bNoLoopIntrp,
- (mixFunc)centerMix8bLoopIntrp,
- (mixFunc)centerMix8bBidiLoopIntrp,
+ (mixFunc)centerMix8bNoLoopCIntrp,
+ (mixFunc)centerMix8bLoopCIntrp,
+ (mixFunc)centerMix8bBidiLoopCIntrp,
+ (mixFunc)centerMix8bNoLoopLIntrp,
+ (mixFunc)centerMix8bLoopLIntrp,
+ (mixFunc)centerMix8bBidiLoopLIntrp,
+
+ // 16-bit
(mixFunc)centerMix16bNoLoop,
(mixFunc)centerMix16bLoop,
(mixFunc)centerMix16bBidiLoop,
- (mixFunc)centerMix16bNoLoopIntrp,
- (mixFunc)centerMix16bLoopIntrp,
- (mixFunc)centerMix16bBidiLoopIntrp,
+ (mixFunc)centerMix16bNoLoopCIntrp,
+ (mixFunc)centerMix16bLoopCIntrp,
+ (mixFunc)centerMix16bBidiLoopCIntrp,
+ (mixFunc)centerMix16bNoLoopLIntrp,
+ (mixFunc)centerMix16bLoopLIntrp,
+ (mixFunc)centerMix16bBidiLoopLIntrp,
+
+ // volume ramping
+
+ // 8-bit
(mixFunc)centerMix8bRampNoLoop,
(mixFunc)centerMix8bRampLoop,
(mixFunc)centerMix8bRampBidiLoop,
- (mixFunc)centerMix8bRampNoLoopIntrp,
- (mixFunc)centerMix8bRampLoopIntrp,
- (mixFunc)centerMix8bRampBidiLoopIntrp,
+ (mixFunc)centerMix8bRampNoLoopCIntrp,
+ (mixFunc)centerMix8bRampLoopCIntrp,
+ (mixFunc)centerMix8bRampBidiLoopCIntrp,
+ (mixFunc)centerMix8bRampNoLoopLIntrp,
+ (mixFunc)centerMix8bRampLoopLIntrp,
+ (mixFunc)centerMix8bRampBidiLoopLIntrp,
+
+ // 16-bit
(mixFunc)centerMix16bRampNoLoop,
(mixFunc)centerMix16bRampLoop,
(mixFunc)centerMix16bRampBidiLoop,
- (mixFunc)centerMix16bRampNoLoopIntrp,
- (mixFunc)centerMix16bRampLoopIntrp,
- (mixFunc)centerMix16bRampBidiLoopIntrp
+ (mixFunc)centerMix16bRampNoLoopCIntrp,
+ (mixFunc)centerMix16bRampLoopCIntrp,
+ (mixFunc)centerMix16bRampBidiLoopCIntrp,
+ (mixFunc)centerMix16bRampNoLoopLIntrp,
+ (mixFunc)centerMix16bRampLoopLIntrp,
+ (mixFunc)centerMix16bRampBidiLoopLIntrp
};
--- a/src/mixer/ft2_mix.h
+++ b/src/mixer/ft2_mix.h
@@ -5,4 +5,4 @@
typedef void (*mixFunc)(void *, int32_t);
-extern const mixFunc mixFuncTab[48]; // ft2_mix.c
+extern const mixFunc mixFuncTab[72]; // ft2_mix.c
--- a/src/mixer/ft2_mix_macros.h
+++ b/src/mixer/ft2_mix_macros.h
@@ -2,7 +2,7 @@
#include <assert.h>
#include "../ft2_audio.h"
-#include "ft2_cubic.h"
+#include "ft2_cubicspline.h"
/* ----------------------------------------------------------------------- */
/* GENERAL MIXER MACROS */
@@ -53,6 +53,14 @@
pos = v->pos; \
posFrac = v->posFrac; \
+#define PREPARE_TAP_FIX8 \
+ const int8_t *loopStartPtr = &v->base8[v->loopStart]; \
+ const float fTapFixSample = v->fTapFixSample; \
+
+#define PREPARE_TAP_FIX16 \
+ const int16_t *loopStartPtr = &v->base16[v->loopStart]; \
+ const float fTapFixSample = v->fTapFixSample; \
+
#define SET_BASE8 \
base = v->base8; \
smpPtr = base + pos; \
@@ -119,66 +127,136 @@
*fMixBufferL++ += fSample; \
*fMixBufferR++ += fSample; \
-// 4-tap cubic spline interpolation through LUT (mixer/ft2_cubic.c)
+// 2-tap linear interpolation (like FT2)
-#define INTERPOLATE(LUT, s0, s1, s2, s3, f) \
+#define LINEAR_INTERPOLATION16(s, f) \
{ \
- const float *t = (const float *)LUT + ((f >> CUBIC_FSHIFT) & CUBIC_FMASK); \
- s0 = (s0 * t[0]) + (s1 * t[1]) + (s2 * t[2]) + (s3 * t[3]); \
+ const float fFrac = (const float)((uint32_t)f * (1.0f / (UINT32_MAX+1.0f))); /* 0.0 .. 0.999f */ \
+ fSample = ((s[0] + (s[1]-s[0]) * fFrac)) * (1.0f / 32768.0f); \
} \
-/* 8bitbubsy: It may look like we are potentially going out of bounds by looking up sample point
-** -1, 1 and 2, but the sample data is actually padded on both the left (negative) and right side,
-** where correct samples are stored according to loop mode (or no loop).
+#define LINEAR_INTERPOLATION8(s, f) \
+{ \
+ const float fFrac = (const float)((uint32_t)f * (1.0f / (UINT32_MAX+1.0f))); /* 0.0f .. 0.999f */ \
+ fSample = ((s[0] + (s[1]-s[0]) * fFrac)) * (1.0f / 128.0f); \
+} \
+
+#define RENDER_8BIT_SMP_LINTRP \
+ assert(smpPtr >= base && smpPtr < base+v->end); \
+ LINEAR_INTERPOLATION8(smpPtr, posFrac) \
+ *fMixBufferL++ += fSample * fVolL; \
+ *fMixBufferR++ += fSample * fVolR; \
+
+#define RENDER_8BIT_SMP_MONO_LINTRP \
+ assert(smpPtr >= base && smpPtr < base+v->end); \
+ LINEAR_INTERPOLATION8(smpPtr, posFrac) \
+ fSample *= fVolL; \
+ *fMixBufferL++ += fSample; \
+ *fMixBufferR++ += fSample; \
+
+#define RENDER_16BIT_SMP_LINTRP \
+ assert(smpPtr >= base && smpPtr < base+v->end); \
+ LINEAR_INTERPOLATION16(smpPtr, posFrac) \
+ *fMixBufferL++ += fSample * fVolL; \
+ *fMixBufferR++ += fSample * fVolR; \
+
+#define RENDER_16BIT_SMP_MONO_LINTRP \
+ assert(smpPtr >= base && smpPtr < base+v->end); \
+ LINEAR_INTERPOLATION16(smpPtr, posFrac) \
+ fSample *= fVolL; \
+ *fMixBufferL++ += fSample; \
+ *fMixBufferR++ += fSample; \
+
+// 4-tap cubic spline interpolation (better quality, through LUT: mixer/ft2_cubicspline.c)
+
+/* 8bitbubsy: It may look like we are potentially going out of bounds while looking up the sample points,
+** but the sample data is actually padded on both the left (negative) and right side, where correct tap
+** samples are stored according to loop mode (or no loop).
**
-** The only issue is that the -1 look-up gets wrong information if loopStart>0 on looped-samples,
-** and the sample-position is at loopStart. The spline will get ever so slighty wrong because of this,
-** but it's barely audible anyway. Doing it elsewise would require a refactoring of how the audio mixer
-** works!
+** The mixer is also reading the correct sample on the -1 tap after the sample has looped at least once.
+**
*/
-#define RENDER_8BIT_SMP_INTRP \
+#define CUBICSPLINE_INTERPOLATION(LUT, s, f) \
+{ \
+ const float *t = (const float *)LUT + (((uint32_t)f >> CUBIC_FSHIFT) & CUBIC_FMASK); \
+ fSample = (s[-1] * t[0]) + (s[0] * t[1]) + (s[1] * t[2]) + (s[2] * t[3]); \
+} \
+
+#define CUBICSPLINE_INTERPOLATION_CUSTOM(LUT, f) \
+{ \
+ const float *t = (const float *)LUT + (((uint32_t)f >> CUBIC_FSHIFT) & CUBIC_FMASK); \
+ fSample = (s0 * t[0]) + (s1 * t[1]) + (s2 * t[2]) + (s3 * t[3]); \
+} \
+
+#define RENDER_8BIT_SMP_CINTRP \
assert(smpPtr >= base && smpPtr < base+v->end); \
- fSample = smpPtr[-1]; \
- fSample2 = smpPtr[0]; \
- fSample3 = smpPtr[1]; \
- fSample4 = smpPtr[2]; \
- INTERPOLATE(fCubicLUT8, fSample, fSample2, fSample3, fSample4, posFrac) \
+ CUBICSPLINE_INTERPOLATION(fCubicSplineLUT8, smpPtr, posFrac) \
*fMixBufferL++ += fSample * fVolL; \
*fMixBufferR++ += fSample * fVolR; \
-#define RENDER_8BIT_SMP_MONO_INTRP \
+#define RENDER_8BIT_SMP_MONO_CINTRP \
assert(smpPtr >= base && smpPtr < base+v->end); \
- fSample = smpPtr[-1]; \
- fSample2 = smpPtr[0]; \
- fSample3 = smpPtr[1]; \
- fSample4 = smpPtr[2]; \
- INTERPOLATE(fCubicLUT8, fSample, fSample2, fSample3, fSample4, posFrac) \
+ CUBICSPLINE_INTERPOLATION(fCubicSplineLUT8, smpPtr, posFrac) \
fSample *= fVolL; \
*fMixBufferL++ += fSample; \
*fMixBufferR++ += fSample; \
-#define RENDER_16BIT_SMP_INTRP \
+#define RENDER_16BIT_SMP_CINTRP \
assert(smpPtr >= base && smpPtr < base+v->end); \
- fSample = smpPtr[-1]; \
- fSample2 = smpPtr[0]; \
- fSample3 = smpPtr[1]; \
- fSample4 = smpPtr[2]; \
- INTERPOLATE(fCubicLUT16, fSample, fSample2, fSample3, fSample4, posFrac) \
+ CUBICSPLINE_INTERPOLATION(fCubicSplineLUT16, smpPtr, posFrac) \
*fMixBufferL++ += fSample * fVolL; \
*fMixBufferR++ += fSample * fVolR; \
-#define RENDER_16BIT_SMP_MONO_INTRP \
+#define RENDER_16BIT_SMP_MONO_CINTRP \
assert(smpPtr >= base && smpPtr < base+v->end); \
- fSample = smpPtr[-1]; \
- fSample2 = smpPtr[0]; \
- fSample3 = smpPtr[1]; \
- fSample4 = smpPtr[2]; \
- INTERPOLATE(fCubicLUT16, fSample, fSample2, fSample3, fSample4, posFrac) \
+ CUBICSPLINE_INTERPOLATION(fCubicSplineLUT16, smpPtr, posFrac) \
fSample *= fVolL; \
*fMixBufferL++ += fSample; \
*fMixBufferR++ += fSample; \
+#define RENDER_8BIT_SMP_CINTRP_TAP_FIX \
+ assert(smpPtr >= base && smpPtr < base+v->end); \
+ s0 = (smpPtr != loopStartPtr) ? smpPtr[-1] : fTapFixSample; \
+ s1 = smpPtr[0]; \
+ s2 = smpPtr[1]; \
+ s3 = smpPtr[2]; \
+ CUBICSPLINE_INTERPOLATION_CUSTOM(fCubicSplineLUT8, posFrac) \
+ *fMixBufferL++ += fSample * fVolL; \
+ *fMixBufferR++ += fSample * fVolR; \
+
+#define RENDER_8BIT_SMP_MONO_CINTRP_TAP_FIX \
+ assert(smpPtr >= base && smpPtr < base+v->end); \
+ s0 = (smpPtr != loopStartPtr) ? smpPtr[-1] : fTapFixSample; \
+ s1 = smpPtr[0]; \
+ s2 = smpPtr[1]; \
+ s3 = smpPtr[2]; \
+ CUBICSPLINE_INTERPOLATION_CUSTOM(fCubicSplineLUT8, posFrac) \
+ fSample *= fVolL; \
+ *fMixBufferL++ += fSample; \
+ *fMixBufferR++ += fSample; \
+
+#define RENDER_16BIT_SMP_CINTRP_TAP_FIX \
+ assert(smpPtr >= base && smpPtr < base+v->end); \
+ s0 = (smpPtr != loopStartPtr) ? smpPtr[-1] : fTapFixSample; \
+ s1 = smpPtr[0]; \
+ s2 = smpPtr[1]; \
+ s3 = smpPtr[2]; \
+ CUBICSPLINE_INTERPOLATION_CUSTOM(fCubicSplineLUT16, posFrac) \
+ *fMixBufferL++ += fSample * fVolL; \
+ *fMixBufferR++ += fSample * fVolR; \
+
+#define RENDER_16BIT_SMP_MONO_CINTRP_TAP_FIX \
+ assert(smpPtr >= base && smpPtr < base+v->end); \
+ s0 = (smpPtr != loopStartPtr) ? smpPtr[-1] : fTapFixSample; \
+ s1 = smpPtr[0]; \
+ s2 = smpPtr[1]; \
+ s3 = smpPtr[2]; \
+ CUBICSPLINE_INTERPOLATION_CUSTOM(fCubicSplineLUT16, posFrac) \
+ fSample *= fVolL; \
+ *fMixBufferL++ += fSample; \
+ *fMixBufferR++ += fSample; \
+
/* ----------------------------------------------------------------------- */
/* SAMPLES-TO-MIX LIMITING MACROS */
/* ----------------------------------------------------------------------- */
@@ -262,15 +340,27 @@
#define WRAP_LOOP \
pos = (int32_t)(smpPtr - base); \
- while (pos >= v->end) \
- pos -= v->loopLength; \
+ if (pos >= v->end) \
+ { \
+ do \
+ { \
+ pos -= v->loopLength; \
+ } \
+ while (pos >= v->end); \
+ v->hasLooped = true; \
+ } \
smpPtr = base + pos; \
#define WRAP_BIDI_LOOP \
- while (pos >= v->end) \
+ if (pos >= v->end) \
{ \
- pos -= v->loopLength; \
- v->backwards ^= 1; \
+ do \
+ { \
+ pos -= v->loopLength; \
+ v->backwards ^= 1; \
+ } \
+ while (pos >= v->end); \
+ v->hasLooped = true; \
} \
#define END_BIDI \
--- a/src/mixer/ft2_silence_mix.h
+++ b/src/mixer/ft2_silence_mix.h
@@ -27,6 +27,8 @@
pos = v->loopStart + ((pos - v->end) % v->loopLength); \
else \
pos = v->loopStart; \
+ \
+ v->hasLooped = true; \
} \
#define SILENCE_MIX_BIDI_LOOP \
@@ -45,6 +47,7 @@
{ \
pos = v->loopStart; \
} \
+ v->hasLooped = true; \
} \
void silenceMixRoutine(voice_t *v, int32_t numSamples);
--- a/vs2019_project/ft2-clone/ft2-clone.vcxproj
+++ b/vs2019_project/ft2-clone/ft2-clone.vcxproj
@@ -92,7 +92,7 @@
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>__WINDOWS_MM__;NDEBUG;WIN32;_CRT_SECURE_NO_WARNINGS;_USE_MATH_DEFINES;HAVE_M_PI;HAS_MIDI</PreprocessorDefinitions>
+ <PreprocessorDefinitions>__WINDOWS_MM__;NDEBUG;WIN32;_CRT_SECURE_NO_WARNINGS;HAS_MIDI</PreprocessorDefinitions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<IntrinsicFunctions>true</IntrinsicFunctions>
<StringPooling>true</StringPooling>
@@ -142,7 +142,7 @@
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>__WINDOWS_MM__;NDEBUG;WIN32;_CRT_SECURE_NO_WARNINGS;_USE_MATH_DEFINES;HAVE_M_PI;HAS_MIDI</PreprocessorDefinitions>
+ <PreprocessorDefinitions>__WINDOWS_MM__;NDEBUG;WIN32;_CRT_SECURE_NO_WARNINGS;HAS_MIDI</PreprocessorDefinitions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<IntrinsicFunctions>true</IntrinsicFunctions>
<StringPooling>true</StringPooling>
@@ -199,7 +199,7 @@
<WarningLevel>Level4</WarningLevel>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>__WINDOWS_MM__;_CRTDBG_MAP_ALLOC;DEBUG;_DEBUG;WIN32;_CRT_SECURE_NO_WARNINGS;_USE_MATH_DEFINES;HAVE_M_PI;HAS_MIDI</PreprocessorDefinitions>
+ <PreprocessorDefinitions>__WINDOWS_MM__;_CRTDBG_MAP_ALLOC;DEBUG;_DEBUG;WIN32;_CRT_SECURE_NO_WARNINGS;HAS_MIDI</PreprocessorDefinitions>
<FloatingPointModel>Fast</FloatingPointModel>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
<TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
@@ -237,7 +237,7 @@
<WarningLevel>Level4</WarningLevel>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>__WINDOWS_MM__;_CRTDBG_MAP_ALLOC;DEBUG;_DEBUG;WIN32;_CRT_SECURE_NO_WARNINGS;_USE_MATH_DEFINES;HAVE_M_PI;HAS_MIDI</PreprocessorDefinitions>
+ <PreprocessorDefinitions>__WINDOWS_MM__;_CRTDBG_MAP_ALLOC;DEBUG;_DEBUG;WIN32;_CRT_SECURE_NO_WARNINGS;HAS_MIDI</PreprocessorDefinitions>
<FloatingPointModel>Fast</FloatingPointModel>
<StringPooling>
</StringPooling>
@@ -336,7 +336,7 @@
<ClCompile Include="..\..\src\gfxdata\ft2_bmp_instr.c" />
<ClCompile Include="..\..\src\gfxdata\ft2_bmp_looppins.c" />
<ClCompile Include="..\..\src\gfxdata\ft2_bmp_scopes.c" />
- <ClCompile Include="..\..\src\mixer\ft2_cubic.c" />
+ <ClCompile Include="..\..\src\mixer\ft2_cubicspline.c" />
<ClCompile Include="..\..\src\mixer\ft2_mix.c" />
<ClCompile Include="..\..\src\mixer\ft2_center_mix.c" />
<ClCompile Include="..\..\src\mixer\ft2_silence_mix.c" />
@@ -400,7 +400,7 @@
<ClInclude Include="..\..\src\ft2_unicode.h" />
<ClInclude Include="..\..\src\ft2_video.h" />
<ClInclude Include="..\..\src\ft2_wav_renderer.h" />
- <ClInclude Include="..\..\src\mixer\ft2_cubic.h" />
+ <ClInclude Include="..\..\src\mixer\ft2_cubicspline.h" />
<ClInclude Include="..\..\src\mixer\ft2_mix.h" />
<ClInclude Include="..\..\src\mixer\ft2_mix_macros.h" />
<ClInclude Include="..\..\src\mixer\ft2_center_mix.h" />
--- a/vs2019_project/ft2-clone/ft2-clone.vcxproj.filters
+++ b/vs2019_project/ft2-clone/ft2-clone.vcxproj.filters
@@ -84,7 +84,7 @@
<ClCompile Include="..\..\src\mixer\ft2_silence_mix.c">
<Filter>mixer</Filter>
</ClCompile>
- <ClCompile Include="..\..\src\mixer\ft2_cubic.c">
+ <ClCompile Include="..\..\src\mixer\ft2_cubicspline.c">
<Filter>mixer</Filter>
</ClCompile>
</ItemGroup>
@@ -233,7 +233,7 @@
<ClInclude Include="..\..\src\mixer\ft2_silence_mix.h">
<Filter>mixer</Filter>
</ClInclude>
- <ClInclude Include="..\..\src\mixer\ft2_cubic.h">
+ <ClInclude Include="..\..\src\mixer\ft2_cubicspline.h">
<Filter>mixer</Filter>
</ClInclude>
</ItemGroup>