Updated Hively Player with cleaner filter generator source, and updated DUMB with more faithful tempo calculation

CQTexperiment
Chris Moeller 2014-04-11 16:35:54 -07:00
parent e0b4748d85
commit 7b38371ca7
5 changed files with 430 additions and 532 deletions

View File

@ -73,10 +73,9 @@ sigdata->flags & IT_COMPATIBLE_GXX
#define IT_INSM_SIGNATURE DUMB_ID('M', 'S', 'N', 'I')
/* 1 minute per 4 rows, each row 6 ticks; this is divided by the tempo to get
* the interval between ticks.
/* This is divided by the tempo times 256 to get the interval between ticks.
*/
#define TICK_TIME_DIVIDEND ((65536 * 60) / (4 * 6))
#define TICK_TIME_DIVIDEND (65536 * 5 * 128)

View File

@ -4024,7 +4024,7 @@ static void process_all_playing(DUMB_IT_SIGRENDERER *sigrenderer)
DUMB_IT_SIGDATA *sigdata = sigrenderer->sigdata;
int i;
float invt2g = 1.0f / ((float)TICK_TIME_DIVIDEND / (float)sigrenderer->tempo);
float invt2g = 1.0f / ((float)TICK_TIME_DIVIDEND / (float)sigrenderer->tempo / 256.0f);
for (i = 0; i < DUMB_IT_N_CHANNELS; i++) {
IT_CHANNEL *channel = &sigrenderer->channel[i];
@ -4431,7 +4431,7 @@ static int process_tick(DUMB_IT_SIGRENDERER *sigrenderer)
if (sigrenderer->globalvolume == 0) {
if (sigrenderer->callbacks->global_volume_zero) {
LONG_LONG t = sigrenderer->gvz_sub_time + ((LONG_LONG)TICK_TIME_DIVIDEND << 16) / sigrenderer->tempo;
LONG_LONG t = sigrenderer->gvz_sub_time + ((TICK_TIME_DIVIDEND / (sigrenderer->tempo << 8)) << 16);
sigrenderer->gvz_time += (int)(t >> 16);
sigrenderer->gvz_sub_time = (int)t & 65535;
if (sigrenderer->gvz_time >= 65536 * 12) {
@ -4452,7 +4452,7 @@ static int process_tick(DUMB_IT_SIGRENDERER *sigrenderer)
process_all_playing(sigrenderer);
{
LONG_LONG t = ((LONG_LONG)TICK_TIME_DIVIDEND << 16) / sigrenderer->tempo;
LONG_LONG t = (TICK_TIME_DIVIDEND / (sigrenderer->tempo << 8)) << 16;
if ( sigrenderer->sigdata->flags & IT_WAS_AN_STM ) {
t /= 16;
}
@ -4468,6 +4468,7 @@ static int process_tick(DUMB_IT_SIGRENDERER *sigrenderer)
int dumb_it_max_to_mix = 64;
#if 0
static const int aiMODVol[] =
{
0,
@ -4480,6 +4481,7 @@ static const int aiMODVol[] =
785, 801, 817, 833, 849, 865, 881, 897,
913, 929, 945, 961, 977, 993, 1009, 1024
};
#endif
static const int aiPTMVolScaled[] =
{

View File

@ -17,62 +17,12 @@
#include <math.h>
#include "hvl_replay.h"
// USE_HVL_FILTER_FOR_HVL - see hvl_replay.h - define there to use original hvl filter gen function for hvl files
#include "hvl_tables.h"
#undef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
const int32 stereopan_left[] = { 128, 96, 64, 32, 0 };
const int32 stereopan_right[] = { 128, 160, 193, 225, 255 };
/*
** Waves
*/
#define WHITENOISELEN (0x280*3)
#define WO_LOWPASSES 0
#define WO_TRIANGLE_04 (WO_LOWPASSES+((0xfc+0xfc+0x80*0x1f+0x80+3*0x280)*31))
#define WO_TRIANGLE_08 (WO_TRIANGLE_04+0x04)
#define WO_TRIANGLE_10 (WO_TRIANGLE_08+0x08)
#define WO_TRIANGLE_20 (WO_TRIANGLE_10+0x10)
#define WO_TRIANGLE_40 (WO_TRIANGLE_20+0x20)
#define WO_TRIANGLE_80 (WO_TRIANGLE_40+0x40)
#define WO_SAWTOOTH_04 (WO_TRIANGLE_80+0x80)
#define WO_SAWTOOTH_08 (WO_SAWTOOTH_04+0x04)
#define WO_SAWTOOTH_10 (WO_SAWTOOTH_08+0x08)
#define WO_SAWTOOTH_20 (WO_SAWTOOTH_10+0x10)
#define WO_SAWTOOTH_40 (WO_SAWTOOTH_20+0x20)
#define WO_SAWTOOTH_80 (WO_SAWTOOTH_40+0x40)
#define WO_SQUARES (WO_SAWTOOTH_80+0x80)
#define WO_WHITENOISE (WO_SQUARES+(0x80*0x20))
#define WO_HIGHPASSES (WO_WHITENOISE+WHITENOISELEN)
#define WAVES_SIZE (WO_HIGHPASSES+((0xfc+0xfc+0x80*0x1f+0x80+3*0x280)*31))
int8 waves[WAVES_SIZE];
#ifdef USE_HVL_FILTER_FOR_HVL
int8 ahxwaves[WAVES_SIZE];
#endif
const int16 vib_tab[] =
{
0,24,49,74,97,120,141,161,180,197,212,224,235,244,250,253,255,
253,250,244,235,224,212,197,180,161,141,120,97,74,49,24,
0,-24,-49,-74,-97,-120,-141,-161,-180,-197,-212,-224,-235,-244,-250,-253,-255,
-253,-250,-244,-235,-224,-212,-197,-180,-161,-141,-120,-97,-74,-49,-24
};
const uint16 period_tab[] =
{
0x0000, 0x0D60, 0x0CA0, 0x0BE8, 0x0B40, 0x0A98, 0x0A00, 0x0970,
0x08E8, 0x0868, 0x07F0, 0x0780, 0x0714, 0x06B0, 0x0650, 0x05F4,
0x05A0, 0x054C, 0x0500, 0x04B8, 0x0474, 0x0434, 0x03F8, 0x03C0,
0x038A, 0x0358, 0x0328, 0x02FA, 0x02D0, 0x02A6, 0x0280, 0x025C,
0x023A, 0x021A, 0x01FC, 0x01E0, 0x01C5, 0x01AC, 0x0194, 0x017D,
0x0168, 0x0153, 0x0140, 0x012E, 0x011D, 0x010D, 0x00FE, 0x00F0,
0x00E2, 0x00D6, 0x00CA, 0x00BE, 0x00B4, 0x00AA, 0x00A0, 0x0097,
0x008F, 0x0087, 0x007F, 0x0078, 0x0071
};
uint32 panning_left[256], panning_right[256];
@ -167,421 +117,6 @@ void hvl_GenSquare( int8 *buf )
}
}
static float64 clip( float64 x )
{
if( x > 127.f )
x = 127.f;
else if( x < -128.f )
x = -128.f;
return x;
}
#ifdef USE_HVL_FILTER_FOR_HVL
void hvl_GenFilterWaves( int8 *buf, int8 *lowbuf, int8 *highbuf )
{
static const uint16 lentab[45] = { 3, 7, 0xf, 0x1f, 0x3f, 0x7f, 3, 7, 0xf, 0x1f, 0x3f, 0x7f,
0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
(0x280*3)-1 };
float64 freq;
uint32 temp;
for( temp=0, freq=8.3115f; temp<31; temp++, freq+=3.f )
{
uint32 wv;
int8 *a0 = buf;
for( wv=0; wv<6+6+0x20+1; wv++ )
{
float64 fre, high, mid, low;
uint32 i;
mid = 0.f;
low = 0.f;
fre = freq * 1.17250f / 100.0f;
for( i=0; i<=lentab[wv]; i++ )
{
high = a0[i] - mid - low;
high = clip( high );
mid += high * fre;
mid = clip( mid );
low += mid * fre;
low = clip( low );
}
for( i=0; i<=lentab[wv]; i++ )
{
high = a0[i] - mid - low;
high = clip( high );
mid += high * fre;
mid = clip( mid );
low += mid * fre;
low = clip( low );
*lowbuf++ = (int8)low;
*highbuf++ = (int8)high;
}
a0 += lentab[wv]+1;
}
}
}
#endif
static const int16 filter_thing[] =
{
0xFB77, 0xEEC3, 0xE407, 0xCCDA, 0x027B, 0x33C7, 0x088D, 0x1901,
0x2351, 0x3F02, 0x3494, 0x14F0, 0x18CD, 0x319B, 0x4A69, 0x6336,
0x7700, 0x7F00, 0x7F00, 0x7F03, 0x7B89, 0x743C, 0x6A16, 0x5DFC,
0x50BB, 0x4304, 0x3692, 0x2C6F, 0x242F, 0x1D77, 0x17FE, 0x138A,
0x0FEA, 0x0CF6, 0x0A8E, 0x0882, 0x06DB, 0x0587, 0x0475, 0x038D,
0x02CC, 0x0233, 0x01BC, 0x014B, 0xFD67, 0xF7DE, 0xE7E6, 0xDBED,
0xCACA, 0x3101, 0x2591, 0x0F6F, 0x2099, 0x2BEE, 0x4836, 0x1B05,
0x0F08, 0x21BB, 0x4377, 0x6533, 0x7DA3, 0x7F00, 0x7EC7, 0x780E,
0x6B20, 0x5A61, 0x47DD, 0x362D, 0x28BD, 0x1EA3, 0x1709, 0x1153,
0x0D07, 0x09CB, 0x075D, 0x056D, 0x03FF, 0x02D0, 0x0212, 0x0161,
0x0104, 0x00AD, 0x0060, 0x0020, 0xFFEE, 0xFFC9, 0xFFB1, 0xFFA4,
0xFFA1, 0xFCBA, 0xF363, 0xE37E, 0xCF9E, 0xE43D, 0x367A, 0x1965,
0x1752, 0x23AD, 0x3A63, 0x41F1, 0x17C1, 0x0BE8, 0x2AA9, 0x5553,
0x7A8B, 0x7F00, 0x7D44, 0x70C0, 0x5C86, 0x4508, 0x2FC9, 0x2115,
0x16E6, 0x0FDA, 0x0AF9, 0x0798, 0x0542, 0x0384, 0x0259, 0x0173,
0x00DF, 0x0089, 0x0040, 0x0007, 0xFFDE, 0xFFC6, 0xFFBB, 0xFFBA,
0xFFC1, 0xFFCC, 0xFFD9, 0xFFE6, 0xFFF2, 0xFFFB, 0x1378, 0xEE84,
0xE05A, 0xC5D4, 0x0B4E, 0x31B3, 0x1313, 0x1F4A, 0x2616, 0x45DF,
0x2E0E, 0x13EB, 0x09D8, 0x3397, 0x672F, 0x7F00, 0x7EC9, 0x7012,
0x564D, 0x3949, 0x2460, 0x1719, 0x0EAA, 0x0950, 0x05E9, 0x038F,
0x0224, 0x014A, 0x008F, 0x0003, 0xFFAA, 0xFF7E, 0xFF75, 0xFF83,
0xFF9F, 0xFFBF, 0xFFDD, 0xFFF5, 0x0006, 0x000F, 0x0013, 0x0013,
0x0010, 0x000C, 0x0008, 0x1ADD, 0xE985, 0xDC57, 0xC2A3, 0x25E9,
0x2A8D, 0x103D, 0x269A, 0x2A91, 0x4B24, 0x1FD9, 0x10BD, 0x0865,
0x3C85, 0x779A, 0x7F00, 0x760C, 0x599E, 0x377B, 0x2031, 0x12AD,
0x0AD6, 0x0649, 0x03A5, 0x01F5, 0x00DC, 0x0051, 0x0023, 0x0002,
0xFFEE, 0xFFE6, 0xFFE7, 0xFFEC, 0xFFF3, 0xFFF9, 0xFFFF, 0x0002,
0x0004, 0x0004, 0x0003, 0x0002, 0x0001, 0x0000, 0x0000, 0xFFFF,
0x097F, 0xE4D4, 0xD636, 0xC6FE, 0x31B0, 0x2314, 0x0E82, 0x2A8C,
0x314E, 0x4C62, 0x1B03, 0x0EA1, 0x0750, 0x4573, 0x7F00, 0x7F6E,
0x66AE, 0x3FAE, 0x219D, 0x11BE, 0x095D, 0x04F1, 0x0257, 0x011B,
0x002D, 0xFFA4, 0xFF73, 0xFF7D, 0xFFA3, 0xFFCF, 0xFFF2, 0x0008,
0x0012, 0x0012, 0x000E, 0x0008, 0x0003, 0x0000, 0xFFFE, 0xFFFD,
0xFFFE, 0xFFFE, 0xFFFF, 0x0000, 0x0000, 0xF1BA, 0xE0B8, 0xCE39,
0xD4B0, 0x3539, 0x1CAE, 0x0D02, 0x2C42, 0x3A0B, 0x4951, 0x1954,
0x0CF7, 0x067C, 0x4E61, 0x7F00, 0x77EB, 0x5274, 0x2978, 0x13D3,
0x0979, 0x0487, 0x01DD, 0x00C4, 0x0001, 0xFFA3, 0xFF93, 0xFFAE,
0xFFD4, 0xFFF4, 0x0007, 0x000E, 0x000D, 0x0009, 0x0004, 0x0000,
0xFFFE, 0xFFFE, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0xE1AB, 0xDD5D, 0xC593, 0xE91A, 0x34EE, 0x17FB,
0x0BAC, 0x2C14, 0x429E, 0x40DA, 0x1781, 0x0BA3, 0x05D1, 0x574F,
0x7F00, 0x6DB3, 0x3CD8, 0x1A34, 0x0B48, 0x04DB, 0x0217, 0x00BC,
0x0020, 0xFFD1, 0xFFC0, 0xFFD1, 0xFFEA, 0xFFFD, 0x0007, 0x0008,
0x0005, 0x0003, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDC89,
0xDAC4, 0xBDC0, 0xFEB1, 0x32C9, 0x14D5, 0x0A90, 0x2BB8, 0x4936,
0x3581, 0x1551, 0x0A8F, 0x0547, 0x603D, 0x7F00, 0x5FEC, 0x2A63,
0x1059, 0x064E, 0x026E, 0x00B8, 0x000F, 0xFFC7, 0xFFC5, 0xFFDE,
0xFFF7, 0x0005, 0x0008, 0x0006, 0x0002, 0x0000, 0xFFFF, 0xFFFF,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0xDE80, 0xD8C5, 0xB789, 0x1114,
0x2F9E, 0x12C9, 0x09A8, 0x2BDE, 0x4D5B, 0x2BA2, 0x1359, 0x09A9,
0x04D4, 0x692B, 0x7F00, 0x5057, 0x1D06, 0x09F6, 0x036B, 0x00D4,
0x0033, 0xFFE2, 0xFFD5, 0xFFE7, 0xFFFA, 0x0003, 0x0005, 0x0003,
0x0001, 0x0000, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0xE4D0, 0xD70B, 0xB2E4, 0x1EB8, 0x2BD7, 0x1161, 0x08E7,
0x2D67, 0x4F9C, 0x2510, 0x11C9, 0x08E8, 0x0474, 0x7219, 0x7C55,
0x3F6B, 0x133C, 0x05D5, 0x01C4, 0x0056, 0xFFF9, 0xFFE0, 0xFFEC,
0xFFFB, 0x0002, 0x0003, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xED7D, 0xD522,
0xB289, 0x2800, 0x27CE, 0x1049, 0x0842, 0x30EC, 0x50A9, 0x2153,
0x1082, 0x0842, 0x0421, 0x7B07, 0x73E8, 0x2E8C, 0x0C60, 0x0349,
0x0079, 0x0011, 0xFFEA, 0xFFEE, 0xFFFB, 0x0002, 0x0002, 0x0001,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0xF6E3, 0xD287, 0xB4A8, 0x2DF5, 0x23D7,
0x0F53, 0x07B3, 0x3641, 0x50A6, 0x1F47, 0x0F66, 0x07B3, 0x03D9,
0x7F00, 0x6B22, 0x20FE, 0x079D, 0x01C1, 0x002D, 0xFFF5, 0xFFF0,
0xFFFB, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x001D, 0xCEB8, 0xB9CD, 0x3192, 0x2037, 0x0E6D, 0x0736, 0x3D2E,
0x4F2F, 0x1DEA, 0x0E6C, 0x0736, 0x039B, 0x7F00, 0x622C, 0x188C,
0x04DD, 0x00F6, 0xFFB9, 0xFFB2, 0xFFEF, 0x0008, 0x0007, 0x0001,
0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x08B8, 0xC94F, 0xC47E,
0x338E, 0x1D17, 0x0D96, 0x06C8, 0x4401, 0x4BD3, 0x1CA4, 0x0D90,
0x06C8, 0x0364, 0x7F00, 0x5811, 0x1100, 0x02DB, 0x0012, 0xFF8B,
0xFFD8, 0x0008, 0x0009, 0x0002, 0xFFFF, 0xFFFF, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x1065, 0xC224, 0xD328, 0x3460, 0x1A87, 0x0CD1,
0x0667, 0x4B18, 0x469A, 0x1B42, 0x0CCC, 0x0667, 0x0333, 0x7F00,
0x4CC9, 0x0A92, 0x017C, 0xFF6C, 0xFFAA, 0x0002, 0x000D, 0x0003,
0xFFFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x16E7,
0xBA2A, 0xDB0C, 0x344D, 0x187E, 0x0C20, 0x060F, 0x5204, 0x402F,
0x19D8, 0x0C1E, 0x060F, 0x0308, 0x7F00, 0x40F9, 0x0781, 0x00DD,
0xFFA1, 0xFFD9, 0x0005, 0x0005, 0x0000, 0xFFFF, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x1C0C, 0xB0D2, 0xE7CE, 0x337D,
0x16EA, 0x0B82, 0x05C1, 0x5814, 0x399A, 0x1881, 0x0B82, 0x05C1,
0x02E1, 0x7F00, 0x3535, 0x04EF, 0x0074, 0xFFCB, 0xFFF1, 0x0004,
0x0002, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x1FB5, 0xAD77, 0xF515, 0x3209, 0x15AE, 0x0AF4, 0x057A,
0x5CA5, 0x340E, 0x174A, 0x0AF4, 0x057A, 0x02BD, 0x7F00, 0x29BF,
0x0308, 0xFFC8, 0xFFC8, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2170, 0xB20F,
0x01FC, 0x300B, 0x14AF, 0x0A73, 0x0539, 0x6215, 0x2FE7, 0x1634,
0x0A73, 0x053A, 0x029D, 0x7F00, 0x1EE1, 0x01B1, 0xFFDC, 0xFFEA,
0x0003, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x2128, 0xB6D5, 0x0E58, 0x2D9F, 0x13D8,
0x09FE, 0x04FF, 0x68E7, 0x2CD8, 0x153A, 0x09FD, 0x04FF, 0x027F,
0x7F00, 0x14ED, 0x00D4, 0xFFA1, 0x0000, 0x0004, 0xFFFF, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x1F29, 0xA209, 0x1989, 0x2AEA, 0x1313, 0x0992, 0x04C9, 0x6FC3,
0x2AA6, 0x1456, 0x0992, 0x04C9, 0x0264, 0x7F00, 0x0C3B, 0x0053,
0xFFDD, 0x0002, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1BB0, 0x8888, 0x235E,
0x2819, 0x1258, 0x092F, 0x0498, 0x7023, 0x28FE, 0x1384, 0x092F,
0x0497, 0x024C, 0x7F00, 0x0780, 0xFF65, 0xFFF3, 0x0004, 0xFFFF,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x1740, 0x808D, 0x2BF1, 0x255C, 0x11A7, 0x08D4,
0x046A, 0x7006, 0x2781, 0x12C3, 0x08D4, 0x046A, 0x0235, 0x7F00,
0x0423, 0xFFB7, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1215,
0x800F, 0x338F, 0x22E6, 0x10FF, 0x087F, 0x0440, 0x6F1E, 0x262F,
0x120F, 0x087F, 0x043F, 0x0220, 0x7F00, 0x01B2, 0xFFEA, 0x0001,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0C3C, 0x8000, 0x3B79, 0x20EE,
0x1062, 0x0831, 0x0419, 0x780C, 0x24DF, 0x1168, 0x0831, 0x0419,
0x020C, 0x7F00, 0x004B, 0xFFFA, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0541, 0x8000, 0x417D, 0x1FAB, 0x0FD0, 0x07E9, 0x03F4,
0x7F00, 0x2398, 0x10CE, 0x07E9, 0x03F4, 0x01FA, 0x7E81, 0x0188,
0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFD3E, 0x8000,
0x45D7, 0x1F45, 0x0F49, 0x07A4, 0x03D2, 0x7F00, 0x228B, 0x103D,
0x07A5, 0x03D2, 0x01E9, 0x79D0, 0x0687, 0x007A, 0x000A, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0xF416, 0x8000, 0x49EB, 0x1FE3, 0x0ED7,
0x0765, 0x03B2, 0x7F00, 0x21A5, 0x0FB6, 0x0765, 0x03B1, 0x01D9,
0x74CF, 0x0C02, 0x013C, 0x0034, 0x000B, 0x0003, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0xE94C, 0x8000, 0x4D8B, 0x21B2, 0x0E9B, 0x0729, 0x0395, 0x7F00,
0x1F2E, 0x0F31, 0x0729, 0x0394, 0x01CB, 0x6F7D, 0x11D7, 0x02DB,
0x00CE, 0x0042, 0x0017, 0x0008, 0x0001, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDBED, 0x8000, 0x506B,
0x24C0, 0x0F01, 0x06F8, 0x0379, 0x7F00, 0x1956, 0x0E68, 0x06F0,
0x0379, 0x01BF, 0x69DB, 0x17E0, 0x0563, 0x0139, 0x0087, 0x0041,
0x0021, 0x0011, 0x0007, 0x0004, 0x0002, 0x0002, 0x0002, 0x0002,
0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
0x0002, 0x0002, 0xCE57, 0x04A4, 0x0526, 0xFB66, 0xEF30, 0x9930,
0xC5AD, 0xF94C, 0xFA32, 0x09BE, 0x0E1B, 0x5703, 0x6B3A, 0x83A1,
0x8C1C, 0x996E, 0xAB98, 0xC1F8, 0xDAA8, 0xF375, 0x0C42, 0x2499,
0x3BB1, 0x50ED, 0x63E3, 0x744E, 0x7F00, 0x7F00, 0x7F00, 0x7F00,
0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00,
0x7F00, 0x7FEC, 0x7F58, 0x7FEE, 0x7F36, 0x7F93, 0x7FDA, 0x22B6,
0x06E2, 0x01FA, 0xF97F, 0xD0B0, 0x9FBF, 0xDEBF, 0xF750, 0x00F7,
0x0CD8, 0x26C6, 0x64BB, 0x70ED, 0x86B8, 0x9666, 0xAF0A, 0xCF0C,
0xF0C8, 0x127D, 0x32F3, 0x5058, 0x6982, 0x7DD7, 0x7F00, 0x7F00,
0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7FFA, 0x7FB8, 0x7F87,
0x7F00, 0x7F99, 0x7F00, 0x7F4B, 0x7F7E, 0x7F9D, 0x7FA9, 0x7FA7,
0x7F9B, 0x7F88, 0x7F70, 0x7F56, 0x1827, 0x085D, 0xFD8A, 0xF58E,
0xAAA0, 0xB87E, 0xE9B1, 0xF78F, 0x089F, 0x1097, 0x44D0, 0x676B,
0x7417, 0x8ABF, 0xA3D4, 0xCA53, 0xF4FD, 0x1F5D, 0x4681, 0x6766,
0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7FE2,
0x7F97, 0x7F64, 0x7FF4, 0x7F25, 0x7F5A, 0x7F75, 0x7F7C, 0x7F74,
0x7F62, 0x7F4C, 0x7F34, 0x7F1E, 0x7F0C, 0x7EFE, 0x7EF4, 0x7EEE,
0x7EEC, 0x0E14, 0x08C8, 0xFA29, 0xEA14, 0x9750, 0xCB17, 0xED77,
0xFA92, 0x0D73, 0x1B3D, 0x5BC7, 0x6C4C, 0x7626, 0x8FB7, 0xB465,
0xE741, 0x1ACD, 0x4A39, 0x7012, 0x7F00, 0x7F00, 0x7F00, 0x7F00,
0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F9B, 0x7FE7, 0x7FF5, 0x7FDA,
0x7FA9, 0x7F70, 0x7F3C, 0x7F11, 0x7EF4, 0x7EE2, 0x7EDC, 0x7EDD,
0x7EE2, 0x7EE9, 0x7EF1, 0x7EF8, 0x7EFD, 0x7F01, 0x1F29, 0x07B7,
0xF8BB, 0xD9E8, 0x9ADB, 0xD85A, 0xEF6F, 0x0056, 0x105E, 0x2993,
0x6293, 0x6F41, 0x779A, 0x95A1, 0xC7C2, 0x0448, 0x3E6E, 0x6CE0,
0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7FDE, 0x7F77, 0x7FFF,
0x7F13, 0x7F29, 0x7F2D, 0x7F27, 0x7F1B, 0x7F0F, 0x7F04, 0x7EFD,
0x7EF9, 0x7EF8, 0x7EF9, 0x7EFA, 0x7EFC, 0x7EFE, 0x7EFF, 0x7F00,
0x7F00, 0x7F00, 0x7EFF, 0x38C1, 0x056D, 0xF814, 0xC623, 0xA713,
0xE15B, 0xF142, 0x07C2, 0x1262, 0x38E2, 0x63C5, 0x715B, 0x78AE,
0x9C7C, 0xDBB2, 0x2144, 0x5DAB, 0x7F00, 0x7F00, 0x7F00, 0x7F00,
0x7F00, 0x7F00, 0x7FC4, 0x7FFA, 0x7FD7, 0x7F8E, 0x7F43, 0x7F0A,
0x7EEA, 0x7EDE, 0x7EE0, 0x7EE8, 0x7EF2, 0x7EFB, 0x7F00, 0x7F03,
0x7F03, 0x7F02, 0x7F01, 0x7F00, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x44FF, 0x022D, 0xF638, 0xB1EC, 0xB3D3, 0xE6DC, 0xF2F4, 0x1027,
0x1555, 0x4964, 0x65A0, 0x7308, 0x7983, 0xA447, 0xEFC0, 0x3BF3,
0x755D, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7FA2, 0x7FBC,
0x7F8E, 0x7F4A, 0x7F13, 0x7EF2, 0x7EE6, 0x7EE8, 0x7EF0, 0x7EF8,
0x7EFE, 0x7F01, 0x7F02, 0x7F01, 0x7F00, 0x7EFF, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x3F9E, 0xFE6E, 0xF23E,
0xA271, 0xBEFF, 0xEA01, 0xF459, 0x186B, 0x1AB5, 0x58FD, 0x6858,
0x745C, 0x7A2D, 0xAD04, 0x0454, 0x552E, 0x7F00, 0x7F00, 0x7F00,
0x7F00, 0x7FB7, 0x7F40, 0x7F6E, 0x7F58, 0x7F2D, 0x7F08, 0x7EF5,
0x7EF0, 0x7EF4, 0x7EF9, 0x7EFD, 0x7F00, 0x7F00, 0x7F00, 0x7EFF,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x347C, 0xFAB9, 0xED47, 0x9AA4, 0xC870, 0xEBE1,
0xF572, 0x1E07, 0x2265, 0x6469, 0x6AD4, 0x7570, 0x7AB7, 0xB6B2,
0x16F0, 0x681C, 0x7F00, 0x7F00, 0x7F00, 0x7FEB, 0x7F45, 0x7F6C,
0x7F4A, 0x7F1C, 0x7EFC, 0x7EF1, 0x7EF3, 0x7EF9, 0x7EFE, 0x7F00,
0x7F00, 0x7F00, 0x7EFF, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x28BB,
0xF78E, 0xE420, 0x99DD, 0xD05D, 0xED36, 0xF656, 0x2213, 0x2B5A,
0x6A73, 0x6CB8, 0x7655, 0x7B2A, 0xC151, 0x2A7D, 0x790E, 0x7F00,
0x7F00, 0x7F00, 0x7F00, 0x7F48, 0x7F3B, 0x7F18, 0x7EFF, 0x7EF6,
0x7EF7, 0x7EFB, 0x7EFE, 0x7F00, 0x7F00, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x1E75, 0xF544, 0xD834, 0x9DAA,
0xD6E9, 0xEE5D, 0xF717, 0x24B5, 0x34A1, 0x6D21, 0x6E35, 0x7717,
0x7B8B, 0xCCE1, 0x3DC8, 0x7F00, 0x7F00, 0x7F00, 0x7FCB, 0x7F26,
0x7F30, 0x7F16, 0x7F00, 0x7EF9, 0x7EFA, 0x7EFC, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x16D0, 0xF3F4, 0xCBF1, 0xA3BF, 0xDC27, 0xEF79, 0xF7BC,
0x26A4, 0x3DE3, 0x6E84, 0x6F7A, 0x77BC, 0x7BDE, 0xD962, 0x4F0B,
0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F26, 0x7F16, 0x7F02, 0x7EFB,
0x7EFB, 0x7EFE, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x11F0, 0xF371,
0xC1E6, 0xAAA0, 0xE033, 0xF08A, 0xF84C, 0x28A1, 0x4735, 0x6FC4,
0x7098, 0x784C, 0x7C25, 0xE441, 0x5DE5, 0x7F00, 0x7F00, 0x7FE9,
0x7F17, 0x7F16, 0x7F05, 0x7EFC, 0x7EFC, 0x7EFD, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x0F7C, 0xF342, 0xB6DF, 0xB189, 0xE338,
0xF187, 0xF8C9, 0x2B06, 0x509A, 0x7144, 0x7193, 0x78C8, 0x7C63,
0xED84, 0x6A6B, 0x7F00, 0x7F00, 0x7F88, 0x7F73, 0x7F12, 0x7EEF,
0x7EF4, 0x7EFE, 0x7F00, 0x7F00, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x0F12, 0xF2B4, 0xAA33, 0xB822, 0xE56F, 0xF269, 0xF936, 0x2EE9,
0x59B0, 0x72F5, 0x726E, 0x7936, 0x7C9A, 0xF717, 0x75F2, 0x7F00,
0x7F00, 0x7FBB, 0x7F39, 0x7EF0, 0x7EF0, 0x7EFD, 0x7F01, 0x7F00,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x1051, 0xF0E3, 0xA18C,
0xBE4C, 0xE714, 0xF330, 0xF998, 0x33B3, 0x61CB, 0x74A7, 0x7332,
0x7998, 0x7CCB, 0x00FB, 0x7FF6, 0x7F00, 0x7FED, 0x7F8C, 0x7EFC,
0x7EEA, 0x7EFB, 0x7F01, 0x7F00, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x12E5, 0xECCF, 0x98BC, 0xC3FC, 0xE858, 0xF3E1,
0xF9EF, 0x39A7, 0x6850, 0x7630, 0x73E0, 0x79EF, 0x7CF7, 0x0B2F,
0x7F00, 0x7F00, 0x7F91, 0x7F44, 0x7EF7, 0x7EF5, 0x7EFE, 0x7F00,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x167B,
0xE76E, 0x93CA, 0xC92C, 0xE964, 0xF47D, 0xFA3E, 0x40A5, 0x6D08,
0x778A, 0x747D, 0x7A3E, 0x7D1E, 0x15B3, 0x7F00, 0x7F00, 0x7F50,
0x7F1D, 0x7EF9, 0x7EFB, 0x7EFF, 0x7EFF, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x1AF2, 0xDD31, 0x9374, 0xCDD7,
0xEA52, 0xF50B, 0xFA85, 0x484D, 0x700F, 0x78BA, 0x750B, 0x7A84,
0x7D42, 0x2088, 0x7F00, 0x7F00, 0x7F6F, 0x7EFF, 0x7EF6, 0x7EFE,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x1FAB, 0xD337, 0x963B, 0xD1F3, 0xEB33, 0xF58C, 0xFAC5,
0x4D79, 0x721D, 0x79CB, 0x758C, 0x7AC5, 0x7D62, 0x2BAD, 0x7F00,
0x7F00, 0x7F31, 0x7EFC, 0x7EFC, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x241F, 0xCC6D,
0x9B30, 0xD57A, 0xEC0B, 0xF601, 0xFB00, 0x5244, 0x73C4, 0x7AC4,
0x7601, 0x7B00, 0x7D7F, 0x3722, 0x7F00, 0x7FA9, 0x7F11, 0x7EF6,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x280C, 0xBE21, 0xA145, 0xD867, 0xECDA,
0xF66D, 0xFB36, 0x55B1, 0x7546, 0x7BA8, 0x766D, 0x7B36, 0x7D9A,
0x42E8, 0x7F00, 0x7F45, 0x7F02, 0x7EFC, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x2B18, 0xA865, 0xA7BA, 0xDAC1, 0xED9F, 0xF6CF, 0xFB67, 0x5207,
0x76C6, 0x7C7B, 0x76CF, 0x7B67, 0x7DB3, 0x4EFE, 0x7F00, 0x7F4F,
0x7EF5, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x2D13, 0xB2BE, 0xAE1E,
0xDC9C, 0xEE56, 0xF72B, 0xFB95, 0x4C1E, 0x7845, 0x7D3D, 0x772B,
0x7B95, 0x7DC9, 0x5B64, 0x7F00, 0x7F17, 0x7EFC, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x2E1B, 0xCE29, 0xB467, 0xDE0E, 0xEEFF, 0xF77F,
0xFBBF, 0x4843, 0x79BD, 0x7DF0, 0x777F, 0x7BBE, 0x7DDE, 0x681B,
0x7F00, 0x7F02, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x2E32,
0xE25E, 0xBB9A, 0xDF40, 0xEF9C, 0xF7CD, 0xFBE6, 0x68ED, 0x7B21,
0x7E96, 0x77CD, 0x7BE6, 0x7DF1, 0x7522, 0x7F49, 0x7EFE, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF,
0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x2D4F, 0xF4E0, 0xC241, 0xE05F,
0xF02D, 0xF817, 0xFC0A, 0x77E5, 0x7C6A, 0x7F31, 0x7817, 0x7C0B,
0x7E05, 0x7F00, 0x7F0C, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x2B1D, 0xEB4A, 0xC91D, 0xE1A6, 0xF0B7, 0xF85A, 0xFC2C,
0x6D81, 0x7DA5, 0x7FC1, 0x785A, 0x7C2D, 0x7E16, 0x7F00, 0x7FD9,
0x7F18, 0x7F01, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x2782, 0xE163,
0xCFFB, 0xE34C, 0xF13A, 0xF89A, 0xFC4C, 0x615E, 0x7ED9, 0x7F00,
0x7899, 0x7C4B, 0x7E26, 0x7F00, 0x7F00, 0x7F44, 0x7F0F, 0x7F03,
0x7F00, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x2237, 0xD728, 0xD6A1, 0xE592, 0xF1CA,
0xF8D5, 0xFC6B, 0x5DFA, 0x7F58, 0x7F00, 0x78D6, 0x7C6A, 0x7E35,
0x7F00, 0x7F00, 0x7FD9, 0x7F4F, 0x7F19, 0x7F08, 0x7F02, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE,
0x1A9B, 0xCC9C, 0xDCAB, 0xE8B3, 0xF2A3, 0xF910, 0xFC86, 0x7B5E,
0x7DF6, 0x7F00, 0x790C, 0x7C86, 0x7E44, 0x7F00, 0x7F00, 0x7F00,
0x7F74, 0x7F3D, 0x7F1D, 0x7F0E, 0x7F06, 0x7F02, 0x7F01, 0x7F00,
0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00,
0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00,
0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x12E3
};
static int32 clipshifted8(int32 in)
{
int16 top = (int16)(in >> 16);
@ -590,47 +125,38 @@ static int32 clipshifted8(int32 in)
return in;
}
static void hvl_AhxGenFilterWaves( int8 *buf, int8 *lowbuf, int8 *highbuf )
void hvl_GenFilterWaves( int8 *buf, int8 *lowbuf, int8 *highbuf )
{
static const uint16 lentab[45] = { 3, 7, 0xf, 0x1f, 0x3f, 0x7f, 3, 7, 0xf, 0x1f, 0x3f, 0x7f,
0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
(0x280*3)-1 };
const int16 * mid_table = &filter_thing[0];
const int16 * low_table = &filter_thing[1395];
int32 d5;
int32 temp;
for( temp=0, d5 = 25; temp<31; temp++, d5 += 9 )
int32 freq;
int32 i;
for( i=0, freq = 25; i<31; i++, freq += 9 )
{
uint32 wv;
int8 *a0 = buf;
int8 *a0 = buf;
for( wv=0; wv<6+6+0x20+1; wv++ )
{
int32 d2, d3;
uint32 i;
d2 = *mid_table++ << 8;
d3 = *low_table++ << 8;
for( i=0; i<=lentab[wv]; i++ )
int32 in, fre, high, mid, low;
uint32 j;
mid = *mid_table++ << 8;
low = *low_table++ << 8;
for( j=0; j<=lentab[wv]; j++ )
{
int32 d0, d1, d4;
d0 = (int32)a0[i] << 16;
d1 = clipshifted8( d0 - d2 - d3 );
*highbuf++ = d1 >> 16;
d4 = d1 >> 8;
d4 *= d5;
d2 = clipshifted8(d2 + d4);
d4 = d2 >> 8;
d4 *= d5;
d3 = clipshifted8(d3 + d4);
*lowbuf++ = d3 >> 16;
in = a0[j] << 16;
high = clipshifted8( in - mid - low );
fre = (high >> 8) * freq;
mid = clipshifted8(mid + fre);
fre = (mid >> 8) * freq;
low = clipshifted8(low + fre);
*highbuf++ = high >> 16;
*lowbuf++ = low >> 16;
}
a0 += lentab[wv]+1;
}
}
@ -785,13 +311,7 @@ void hvl_InitReplayer( void )
hvl_GenTriangle( &waves[WO_TRIANGLE_80], 0x80 );
hvl_GenSquare( &waves[WO_SQUARES] );
hvl_GenWhiteNoise( &waves[WO_WHITENOISE], WHITENOISELEN );
#ifdef USE_HVL_FILTER_FOR_HVL
memcpy( &ahxwaves[WO_TRIANGLE_04], &waves[WO_TRIANGLE_04], WO_HIGHPASSES - WO_TRIANGLE_04 );
hvl_GenFilterWaves( &waves[WO_TRIANGLE_04], &waves[WO_LOWPASSES], &waves[WO_HIGHPASSES] );
hvl_AhxGenFilterWaves( &ahxwaves[WO_TRIANGLE_04], &ahxwaves[WO_LOWPASSES], &ahxwaves[WO_HIGHPASSES] );
#else
hvl_AhxGenFilterWaves( &waves[WO_TRIANGLE_04], &waves[WO_LOWPASSES], &waves[WO_HIGHPASSES] );
#endif
}
struct hvl_tune *hvl_load_ahx( uint8 *buf, uint32 buflen, uint32 defstereo, uint32 freq )
@ -841,9 +361,6 @@ struct hvl_tune *hvl_load_ahx( uint8 *buf, uint32 buflen, uint32 defstereo, uint
return NULL;
}
#ifdef USE_HVL_FILTER_FOR_HVL
ht->ht_IsHt = 0;
#endif
ht->ht_Frequency = freq;
ht->ht_FreqF = (float64)freq;
@ -859,15 +376,9 @@ struct hvl_tune *hvl_load_ahx( uint8 *buf, uint32 buflen, uint32 defstereo, uint
hvl_blip_set_rates(ht->ht_BlipBuffers[0], 65536, 1);
hvl_blip_set_rates(ht->ht_BlipBuffers[1], 65536, 1);
#ifdef USE_HVL_FILTER_FOR_HVL
ht->ht_WaveformTab[0] = &ahxwaves[WO_TRIANGLE_04];
ht->ht_WaveformTab[1] = &ahxwaves[WO_SAWTOOTH_04];
ht->ht_WaveformTab[3] = &ahxwaves[WO_WHITENOISE];
#else
ht->ht_WaveformTab[0] = &waves[WO_TRIANGLE_04];
ht->ht_WaveformTab[1] = &waves[WO_SAWTOOTH_04];
ht->ht_WaveformTab[3] = &waves[WO_WHITENOISE];
#endif
ht->ht_Channels = 4;
ht->ht_PositionNr = posn;
@ -1108,9 +619,6 @@ struct hvl_tune *hvl_LoadTune( const uint8 *buf, uint32 buflen, uint32 freq, uin
return NULL;
}
#ifdef USE_HVL_FILTER_FOR_HVL
ht->ht_IsHt = 1;
#endif
ht->ht_Version = buf[3]; // 1.5
ht->ht_Frequency = freq;
ht->ht_FreqF = (float64)freq;
@ -2089,13 +1597,7 @@ void hvl_process_frame( struct hvl_tune *ht, struct hvl_voice *voice )
int32 Delta;
int8 *SquarePtr;
int32 X;
#ifdef USE_HVL_FILTER_FOR_HVL
int8 *thewaves = (ht->ht_IsHt) ? waves : ahxwaves;
SquarePtr = &thewaves[WO_SQUARES+(voice->vc_FilterPos-0x20)*(0xfc+0xfc+0x80*0x1f+0x80+0x280*3)];
#else
SquarePtr = &waves[WO_SQUARES+(voice->vc_FilterPos-0x20)*(0xfc+0xfc+0x80*0x1f+0x80+0x280*3)];
#endif
X = voice->vc_SquarePos << (5 - voice->vc_WaveLength);
if( X > 0x20 )

View File

@ -7,8 +7,6 @@ extern "C" {
#include <stdint.h>
// #define USE_HVL_FILTER_FOR_HVL
typedef int8_t int8;
typedef uint8_t uint8;
typedef int16_t int16;
@ -230,9 +228,6 @@ struct hvl_tune
int32 ht_defpanright;
int32 ht_mixgain;
uint8 ht_Version;
#ifdef USE_HVL_FILTER_FOR_HVL
uint8 ht_IsHt;
#endif
};
void hvl_DecodeFrame( struct hvl_tune *ht, int8 *buf1, int8 *buf2, int32 bufmod );

View File

@ -0,0 +1,400 @@
#define WHITENOISELEN (0x280*3)
#define WO_LOWPASSES 0
#define WO_TRIANGLE_04 (WO_LOWPASSES+((0xfc+0xfc+0x80*0x1f+0x80+3*0x280)*31))
#define WO_TRIANGLE_08 (WO_TRIANGLE_04+0x04)
#define WO_TRIANGLE_10 (WO_TRIANGLE_08+0x08)
#define WO_TRIANGLE_20 (WO_TRIANGLE_10+0x10)
#define WO_TRIANGLE_40 (WO_TRIANGLE_20+0x20)
#define WO_TRIANGLE_80 (WO_TRIANGLE_40+0x40)
#define WO_SAWTOOTH_04 (WO_TRIANGLE_80+0x80)
#define WO_SAWTOOTH_08 (WO_SAWTOOTH_04+0x04)
#define WO_SAWTOOTH_10 (WO_SAWTOOTH_08+0x08)
#define WO_SAWTOOTH_20 (WO_SAWTOOTH_10+0x10)
#define WO_SAWTOOTH_40 (WO_SAWTOOTH_20+0x20)
#define WO_SAWTOOTH_80 (WO_SAWTOOTH_40+0x40)
#define WO_SQUARES (WO_SAWTOOTH_80+0x80)
#define WO_WHITENOISE (WO_SQUARES+(0x80*0x20))
#define WO_HIGHPASSES (WO_WHITENOISE+WHITENOISELEN)
#define WAVES_SIZE (WO_HIGHPASSES+((0xfc+0xfc+0x80*0x1f+0x80+3*0x280)*31))
static const uint16 lentab[45] = { 3, 7, 0xf, 0x1f, 0x3f, 0x7f, 3, 7, 0xf, 0x1f, 0x3f, 0x7f,
0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
(0x280*3)-1 };
static const int16 vib_tab[] =
{
0,24,49,74,97,120,141,161,180,197,212,224,235,244,250,253,255,
253,250,244,235,224,212,197,180,161,141,120,97,74,49,24,
0,-24,-49,-74,-97,-120,-141,-161,-180,-197,-212,-224,-235,-244,-250,-253,-255,
-253,-250,-244,-235,-224,-212,-197,-180,-161,-141,-120,-97,-74,-49,-24
};
static const uint16 period_tab[] =
{
0x0000, 0x0D60, 0x0CA0, 0x0BE8, 0x0B40, 0x0A98, 0x0A00, 0x0970,
0x08E8, 0x0868, 0x07F0, 0x0780, 0x0714, 0x06B0, 0x0650, 0x05F4,
0x05A0, 0x054C, 0x0500, 0x04B8, 0x0474, 0x0434, 0x03F8, 0x03C0,
0x038A, 0x0358, 0x0328, 0x02FA, 0x02D0, 0x02A6, 0x0280, 0x025C,
0x023A, 0x021A, 0x01FC, 0x01E0, 0x01C5, 0x01AC, 0x0194, 0x017D,
0x0168, 0x0153, 0x0140, 0x012E, 0x011D, 0x010D, 0x00FE, 0x00F0,
0x00E2, 0x00D6, 0x00CA, 0x00BE, 0x00B4, 0x00AA, 0x00A0, 0x0097,
0x008F, 0x0087, 0x007F, 0x0078, 0x0071
};
static const int32 stereopan_left[] = { 128, 96, 64, 32, 0 };
static const int32 stereopan_right[] = { 128, 160, 193, 225, 255 };
static const int16 filter_thing[] =
{
-1161, -4413, -7161, -13094, 635, 13255, 2189, 6401,
9041, 16130, 13460, 5360, 6349, 12699, 19049, 25398,
30464, 32512, 32512, 32515, 31625, 29756, 27158, 24060,
20667, 17156, 13970, 11375, 9263, 7543, 6142, 5002,
4074, 3318, 2702, 2178, 1755, 1415, 1141, 909,
716, 563, 444, 331, -665, -2082, -6170, -9235,
-13622, 12545, 9617, 3951, 8345, 11246, 18486, 6917,
3848, 8635, 17271, 25907, 32163, 32512, 32455, 30734,
27424, 23137, 18397, 13869, 10429, 7843, 5897, 4435,
3335, 2507, 1885, 1389, 1023, 720, 530, 353,
260, 173, 96, 32, -18, -55, -79, -92,
-95, -838, -3229, -7298, -12386, -7107, 13946, 6501,
5970, 9133, 14947, 16881, 6081, 3048, 10921, 21843,
31371, 32512, 32068, 28864, 23686, 17672, 12233, 8469,
5862, 4058, 2809, 1944, 1346, 900, 601, 371,
223, 137, 64, 7, -34, -58, -69, -70,
-63, -52, -39, -26, -14, -5, 4984, -4476,
-8102, -14892, 2894, 12723, 4883, 8010, 9750, 17887,
11790, 5099, 2520, 13207, 26415, 32512, 32457, 28690,
22093, 14665, 9312, 5913, 3754, 2384, 1513, 911,
548, 330, 143, 3, -86, -130, -139, -125,
-97, -65, -35, -11, 6, 15, 19, 19,
16, 12, 8, 6877, -5755, -9129, -15709, 9705,
10893, 4157, 9882, 10897, 19236, 8153, 4285, 2149,
15493, 30618, 32512, 30220, 22942, 14203, 8241, 4781,
2774, 1609, 933, 501, 220, 81, 35, 2,
-18, -26, -25, -20, -13, -7, -1, 2,
4, 4, 3, 2, 1, 0, 0, -1,
2431, -6956, -10698, -14594, 12720, 8980, 3714, 10892,
12622, 19554, 6915, 3745, 1872, 17779, 32512, 32622,
26286, 16302, 8605, 4542, 2397, 1265, 599, 283,
45, -92, -141, -131, -93, -49, -14, 8,
18, 18, 14, 8, 3, 0, -2, -3,
-2, -2, -1, 0, 0, -3654, -8008, -12743,
-11088, 13625, 7342, 3330, 11330, 14859, 18769, 6484,
3319, 1660, 20065, 32512, 30699, 21108, 10616, 5075,
2425, 1159, 477, 196, 1, -93, -109, -82,
-44, -12, 7, 14, 13, 9, 4, 0,
-2, -2, -1, -1, 0, 0, 0, 0,
0, 0, -7765, -8867, -14957, -5862, 13550, 6139,
2988, 11284, 17054, 16602, 6017, 2979, 1489, 22351,
32512, 28083, 15576, 6708, 2888, 1243, 535, 188,
32, -47, -64, -47, -22, -3, 7, 8,
5, 3, 0, -1, -1, -1, 0, 0,
0, 0, 0, 0, 0, 0, 0, -9079,
-9532, -16960, -335, 13001, 5333, 2704, 11192, 18742,
13697, 5457, 2703, 1351, 24637, 32512, 24556, 10851,
4185, 1614, 622, 184, 15, -57, -59, -34,
-9, 5, 8, 6, 2, 0, -1, -1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -8576, -10043, -18551, 4372,
12190, 4809, 2472, 11230, 19803, 11170, 4953, 2473,
1236, 26923, 32512, 20567, 7430, 2550, 875, 212,
51, -30, -43, -25, -6, 3, 5, 3,
1, 0, -1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -6960, -10485, -19740, 7864, 11223, 4449, 2279,
11623, 20380, 9488, 4553, 2280, 1140, 29209, 31829,
16235, 4924, 1493, 452, 86, -7, -32, -20,
-5, 2, 3, 2, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, -4739, -10974,
-19831, 10240, 10190, 4169, 2114, 12524, 20649, 8531,
4226, 2114, 1057, 31495, 29672, 11916, 3168, 841,
121, 17, -22, -18, -5, 2, 2, 1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -2333, -11641, -19288, 11765, 9175,
3923, 1971, 13889, 20646, 8007, 3942, 1971, 985,
32512, 27426, 8446, 1949, 449, 45, -11, -16,
-5, 1, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
29, -12616, -17971, 12690, 8247, 3693, 1846, 15662,
20271, 7658, 3692, 1846, 923, 32512, 25132, 6284,
1245, 246, -71, -78, -17, 8, 7, 1,
-1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 2232, -14001, -15234,
13198, 7447, 3478, 1736, 17409, 19411, 7332, 3472,
1736, 868, 32512, 22545, 4352, 731, 18, -117,
-40, 8, 9, 2, -1, -1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 4197, -15836, -11480, 13408, 6791, 3281,
1639, 19224, 18074, 6978, 3276, 1639, 819, 32512,
19657, 2706, 380, -148, -86, 2, 13, 3,
-2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 5863,
-17878, -9460, 13389, 6270, 3104, 1551, 20996, 16431,
6616, 3102, 1551, 776, 32512, 16633, 1921, 221,
-95, -39, 5, 5, 0, -1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 7180, -20270, -6194, 13181,
5866, 2946, 1473, 22548, 14746, 6273, 2946, 1473,
737, 32512, 13621, 1263, 116, -53, -15, 4,
2, -1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 8117, -21129, -2795, 12809, 5550, 2804, 1402,
23717, 13326, 5962, 2804, 1402, 701, 32512, 10687,
776, -56, -56, 4, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 8560, -19953,
508, 12299, 5295, 2675, 1337, 25109, 12263, 5684,
2675, 1338, 669, 32512, 7905, 433, -36, -22,
3, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 8488, -18731, 3672, 11679, 5080,
2558, 1279, 26855, 11480, 5434, 2557, 1279, 639,
32512, 5357, 212, -95, 0, 4, -1, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
7977, -24055, 6537, 10986, 4883, 2450, 1225, 28611,
10918, 5206, 2450, 1225, 612, 32512, 3131, 83,
-35, 2, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 7088, -30584, 9054,
10265, 4696, 2351, 1176, 28707, 10494, 4996, 2351,
1175, 588, 32512, 1920, -155, -13, 4, -1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 5952, -32627, 11249, 9564, 4519, 2260,
1130, 28678, 10113, 4803, 2260, 1130, 565, 32512,
1059, -73, -1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 4629,
-32753, 13199, 8934, 4351, 2175, 1088, 28446, 9775,
4623, 2175, 1087, 544, 32512, 434, -22, 1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 3132, -32768, 15225, 8430,
4194, 2097, 1049, 30732, 9439, 4456, 2097, 1049,
524, 32512, 75, -6, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 1345, -32768, 16765, 8107, 4048, 2025, 1012,
32512, 9112, 4302, 2025, 1012, 506, 32385, 392,
5, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, -706, -32768,
17879, 8005, 3913, 1956, 978, 32512, 8843, 4157,
1957, 978, 489, 31184, 1671, 122, 10, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -3050, -32768, 18923, 8163, 3799,
1893, 946, 32512, 8613, 4022, 1893, 945, 473,
29903, 3074, 316, 52, 11, 3, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
-5812, -32768, 19851, 8626, 3739, 1833, 917, 32512,
7982, 3889, 1833, 916, 459, 28541, 4567, 731,
206, 66, 23, 8, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, -9235, -32768, 20587,
9408, 3841, 1784, 889, 32512, 6486, 3688, 1776,
889, 447, 27099, 6112, 1379, 313, 135, 65,
33, 17, 7, 4, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
2, 2, -12713, 1188, 1318, -1178, -4304, -26320,
-14931, -1716, -1486, 2494, 3611, 22275, 27450, -31839,
-29668, -26258, -21608, -15880, -9560, -3211, 3138, 9369,
15281, 20717, 25571, 29774, 32512, 32512, 32512, 32512,
32512, 32512, 32512, 32512, 32512, 32512, 32512, 32512,
32512, 32748, 32600, 32750, 32566, 32659, 32730, 8886,
1762, 506, -1665, -12112, -24641, -8513, -2224, 247,
3288, 9926, 25787, 28909, -31048, -27034, -20726, -12532,
-3896, 4733, 13043, 20568, 27010, 32215, 32512, 32512,
32512, 32512, 32512, 32512, 32512, 32762, 32696, 32647,
32512, 32665, 32512, 32587, 32638, 32669, 32681, 32679,
32667, 32648, 32624, 32598, 6183, 2141, -630, -2674,
-21856, -18306, -5711, -2161, 2207, 4247, 17616, 26475,
29719, -30017, -23596, -13741, -2819, 8029, 18049, 26470,
32512, 32512, 32512, 32512, 32512, 32512, 32512, 32738,
32663, 32612, 32756, 32549, 32602, 32629, 32636, 32628,
32610, 32588, 32564, 32542, 32524, 32510, 32500, 32494,
32492, 3604, 2248, -1495, -5612, -26800, -13545, -4745,
-1390, 3443, 6973, 23495, 27724, 30246, -28745, -19355,
-6335, 6861, 19001, 28690, 32512, 32512, 32512, 32512,
32512, 32512, 32512, 32512, 32667, 32743, 32757, 32730,
32681, 32624, 32572, 32529, 32500, 32482, 32476, 32477,
32482, 32489, 32497, 32504, 32509, 32513, 7977, 1975,
-1861, -9752, -25893, -10150, -4241, 86, 4190, 10643,
25235, 28481, 30618, -27231, -14398, 1096, 15982, 27872,
32512, 32512, 32512, 32512, 32512, 32734, 32631, 32767,
32531, 32553, 32557, 32551, 32539, 32527, 32516, 32509,
32505, 32504, 32505, 32506, 32508, 32510, 32511, 32512,
32512, 32512, 32511, 14529, 1389, -2028, -14813, -22765,
-7845, -3774, 1986, 4706, 14562, 25541, 29019, 30894,
-25476, -9294, 8516, 23979, 32512, 32512, 32512, 32512,
32512, 32512, 32708, 32762, 32727, 32654, 32579, 32522,
32490, 32478, 32480, 32488, 32498, 32507, 32512, 32515,
32515, 32514, 32513, 32512, 32510, 32510, 32510, 32510,
17663, 557, -2504, -19988, -19501, -6436, -3340, 4135,
5461, 18788, 26016, 29448, 31107, -23481, -4160, 15347,
30045, 32512, 32512, 32512, 32512, 32512, 32674, 32700,
32654, 32586, 32531, 32498, 32486, 32488, 32496, 32504,
32510, 32513, 32514, 32513, 32512, 32511, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 16286, -402, -3522,
-23951, -16641, -5631, -2983, 6251, 6837, 22781, 26712,
29788, 31277, -21244, 1108, 21806, 32512, 32512, 32512,
32512, 32695, 32576, 32622, 32600, 32557, 32520, 32501,
32496, 32500, 32505, 32509, 32512, 32512, 32512, 32511,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 13436, -1351, -4793, -25948, -14224, -5151,
-2702, 7687, 8805, 25705, 27348, 30064, 31415, -18766,
5872, 26652, 32512, 32512, 32512, 32747, 32581, 32620,
32586, 32540, 32508, 32497, 32499, 32505, 32510, 32512,
32512, 32512, 32511, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 10427,
-2162, -7136, -26147, -12195, -4810, -2474, 8723, 11098,
27251, 27832, 30293, 31530, -16047, 10877, 30990, 32512,
32512, 32512, 32512, 32584, 32571, 32536, 32511, 32502,
32503, 32507, 32510, 32512, 32512, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 7797, -2748, -10188, -25174,
-10519, -4515, -2281, 9397, 13473, 27937, 28213, 30487,
31627, -13087, 15816, 32512, 32512, 32512, 32715, 32550,
32560, 32534, 32512, 32505, 32506, 32508, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 5840, -3084, -13327, -23617, -9177, -4231, -2116,
9892, 15843, 28292, 28538, 30652, 31710, -9886, 20235,
32512, 32512, 32512, 32512, 32550, 32534, 32514, 32507,
32507, 32510, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 4592, -3215,
-15898, -21856, -8141, -3958, -1972, 10401, 18229, 28612,
28824, 30796, 31781, -7103, 24037, 32512, 32512, 32745,
32535, 32534, 32517, 32508, 32508, 32509, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 3964, -3262, -18721, -20087, -7368,
-3705, -1847, 11014, 20634, 28996, 29075, 30920, 31843,
-4732, 27243, 32512, 32512, 32648, 32627, 32530, 32495,
32500, 32510, 32512, 32512, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
3858, -3404, -21965, -18398, -6801, -3479, -1738, 12009,
22960, 29429, 29294, 31030, 31898, -2281, 30194, 32512,
32512, 32699, 32569, 32496, 32496, 32509, 32513, 32512,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 4177, -3869, -24180,
-16820, -6380, -3280, -1640, 13235, 25035, 29863, 29490,
31128, 31947, 251, 32758, 32512, 32749, 32652, 32508,
32490, 32507, 32513, 32512, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 4837, -4913, -26436, -15364, -6056, -3103,
-1553, 14759, 26704, 30256, 29664, 31215, 31991, 2863,
32512, 32512, 32657, 32580, 32503, 32501, 32510, 32512,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 5755,
-6290, -27702, -14036, -5788, -2947, -1474, 16549, 27912,
30602, 29821, 31294, 32030, 5555, 32512, 32512, 32592,
32541, 32505, 32507, 32511, 32511, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 6898, -8911, -27788, -12841,
-5550, -2805, -1403, 18509, 28687, 30906, 29963, 31364,
32066, 8328, 32512, 32512, 32623, 32511, 32502, 32510,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 8107, -11465, -27077, -11789, -5325, -2676, -1339,
19833, 29213, 31179, 30092, 31429, 32098, 11181, 32512,
32512, 32561, 32508, 32508, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 9247, -13203,
-25808, -10886, -5109, -2559, -1280, 21060, 29636, 31428,
30209, 31488, 32127, 14114, 32512, 32681, 32529, 32502,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 10252, -16863, -24251, -10137, -4902,
-2451, -1226, 21937, 30022, 31656, 30317, 31542, 32154,
17128, 32512, 32581, 32514, 32508, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
11032, -22427, -22598, -9535, -4705, -2353, -1177, 20999,
30406, 31867, 30415, 31591, 32179, 20222, 32512, 32591,
32501, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 11539, -19778, -20962,
-9060, -4522, -2261, -1131, 19486, 30789, 32061, 30507,
31637, 32201, 23396, 32512, 32535, 32508, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 11803, -12759, -19353, -8690, -4353, -2177,
-1089, 18499, 31165, 32240, 30591, 31678, 32222, 26651,
32512, 32514, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 11826,
-7586, -17510, -8384, -4196, -2099, -1050, 26861, 31521,
32406, 30669, 31718, 32241, 29986, 32585, 32510, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 32511, 32511, 32511, 32511,
32511, 32511, 32511, 32511, 11599, -2848, -15807, -8097,
-4051, -2025, -1014, 30693, 31850, 32561, 30743, 31755,
32261, 32512, 32524, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 11037, -5302, -14051, -7770, -3913, -1958, -980,
28033, 32165, 32705, 30810, 31789, 32278, 32512, 32729,
32536, 32513, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 10114, -7837,
-12293, -7348, -3782, -1894, -948, 24926, 32473, 32512,
30873, 31819, 32294, 32512, 32512, 32580, 32527, 32515,
32512, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 8759, -10456, -10591, -6766, -3638,
-1835, -917, 24058, 32600, 32512, 30934, 31850, 32309,
32512, 32512, 32729, 32591, 32537, 32520, 32514, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
32510, 32510, 32510, 32510, 32510, 32510, 32510, 32510,
6811, -13156, -9045, -5965, -3421, -1776, -890, 31582,
32246, 32512, 30988, 31878, 32324, 32512, 32512, 32512,
32628, 32573, 32541, 32526, 32518, 32514, 32513, 32512,
32512, 32512, 32512, 32512, 32512, 32512, 32512, 32512,
32512, 32512, 32512, 32512, 32512, 32512, 32512, 32512,
32512, 32512, 32512, 32512, 32512, 4835
};