* winsup.api/devdsp.c: New file, testing fhandler_dev_dsp code.

* winsup.api/devdsp_okay.h: Ditto.
This commit is contained in:
Corinna Vinschen 2004-03-24 10:20:14 +00:00
parent a65cfe3c8c
commit e4736d89a8
3 changed files with 1154 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2004-03-24 Gerd Spalink <Gerd.Spalink@t-online.de>
* winsup.api/devdsp.c: New file, testing fhandler_dev_dsp code.
* winsup.api/devdsp_okay.h: Ditto.
2004-03-06 Christopher Faylor <cgf@redhat.com>
* winsup.api/known_bugs.tcl: Remove mknod01 since mknod now works.

View File

@ -0,0 +1,618 @@
/* devdsp.c: Device tests for /dev/dsp
Copyright 2004 Red Hat, Inc
Written by Gerd Spalink (Gerd.Spalink@t-online.de)
This file is part of Cygwin.
This software is a copyrighted work licensed under the terms of the
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
details. */
/* Conventions used here:
We use the libltp framework
1. Any unexpected behaviour leads to an exit with nonzero exit status
2. Unexpected behaviour from /dev/dsp results in an exit status of TFAIL
3. Unexpected behaviour from OS (malloc, fork, waitpid...) result
in an exit status of TBROK */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/soundcard.h>
#include <math.h>
#include <errno.h>
#include "test.h" /* use libltp framework */
static const char wavfile_okay[] =
{
#include "devdsp_okay.h" /* a sound sample */
};
/* Globals required by libltp */
const char *TCID = "devdsp"; /* set test case identifier */
int TST_TOTAL = 32;
/* Prototypes */
void sinegen (void *wave, int rate, int bits, int len, int stride);
void sinegenw (int freq, int samprate, short *value, int len, int stride);
void sinegenb (int freq, int samprate, unsigned char *value, int len,
int stride);
void playtest (int fd, int rate, int stereo, int bits);
void rectest (int fd, int rate, int stereo, int bits);
void rwtest (int fd, int rate, int stereo, int bits);
void setpars (int fd, int rate, int stereo, int bits);
void forkplaytest (void);
void forkrectest (void);
void recordingtest (void);
void playbacktest (void);
void monitortest (void);
void ioctltest (void);
void playwavtest (void);
void syncwithchild (pid_t pid, int expected_exit_status);
void cleanup (void);
static int expect_child_failure = 0;
/* Sampling rates we want to test */
static const int rates[] = { 44100, 22050, 8000 };
/* Combinations of stereo/bits we want to test */
struct sb
{
int stereo;
int bits;
};
static const struct sb sblut[] = { {0, 8}, {0, 16}, {1, 8}, {1, 16} };
int
main (int argc, char *argv[])
{
/* tst_brkm(TBROK, cleanup, "see if it breaks all right"); */
ioctltest ();
playbacktest ();
recordingtest ();
monitortest ();
forkplaytest ();
forkrectest ();
playwavtest ();
tst_exit ();
/* NOTREACHED */
return 0;
}
/* test some extra ioctls */
void
ioctltest (void)
{
int audio1;
int ioctl_par;
audio1 = open ("/dev/dsp", O_WRONLY);
if (audio1 < 0)
{
tst_brkm (TFAIL, cleanup, "open W: %s", strerror (errno));
}
setpars (audio1, 44100, 1, 16);
/* Note: block size may depend on parameters */
if (ioctl (audio1, SNDCTL_DSP_GETBLKSIZE, &ioctl_par) < 0)
{
tst_brkm (TFAIL, cleanup, "ioctl GETBLKSIZE: %s", strerror (errno));
}
tst_resm (TPASS, "ioctl get buffer size=%d", ioctl_par);
if (ioctl (audio1, SNDCTL_DSP_GETFMTS, &ioctl_par) < 0)
{
tst_brkm (TFAIL, cleanup, "ioctl GETFMTS: %s", strerror (errno));
}
tst_resm (TPASS, "ioctl get formats=%08x", ioctl_par);
if (close (audio1) < 0)
{
tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
}
}
/* test write / play */
void
playbacktest (void)
{
int audio1, audio2;
int rate, k;
audio1 = open ("/dev/dsp", O_WRONLY);
if (audio1 < 0)
{
tst_brkm (TFAIL, cleanup, "Error open /dev/dsp W: %s",
strerror (errno));
}
audio2 = open ("/dev/dsp", O_WRONLY);
if (audio2 >= 0)
{
tst_brkm (TFAIL, cleanup,
"Second open /dev/dsp W succeeded, but is expected to fail");
}
if (errno != EBUSY)
{
tst_brkm (TFAIL, cleanup, "Expected EBUSY here, exit: %s",
strerror (errno));
}
for (rate = 0; rate < sizeof (rates) / sizeof (int); rate++)
for (k = 0; k < sizeof (sblut) / sizeof (struct sb); k++)
{
playtest (audio1, rates[rate], sblut[k].stereo, sblut[k].bits);
tst_resm (TPASS, "Play bits=%2d stereo=%d rate=%5d",
sblut[k].bits, sblut[k].stereo, rates[rate]);
}
if (close (audio1) < 0)
{
tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
}
}
/* test read / record */
void
recordingtest (void)
{
int audio1, audio2;
int rate, k;
/* test read / record */
audio1 = open ("/dev/dsp", O_RDONLY);
if (audio1 < 0)
{
tst_brkm (TFAIL, cleanup, "Error open /dev/dsp R: %s",
strerror (errno));
}
audio2 = open ("/dev/dsp", O_RDONLY);
if (audio2 >= 0)
{
tst_brkm (TFAIL, cleanup,
"Second open /dev/dsp R succeeded, but is expected to fail");
}
if (errno != EBUSY)
{
tst_brkm (TFAIL, cleanup, "Expected EBUSY here, exit: %s",
strerror (errno));
}
for (rate = 0; rate < sizeof (rates) / sizeof (int); rate++)
for (k = 0; k < sizeof (sblut) / sizeof (struct sb); k++)
{
rectest (audio1, rates[rate], sblut[k].stereo, sblut[k].bits);
tst_resm (TPASS, "Record bits=%2d stereo=%d rate=%5d",
sblut[k].bits, sblut[k].stereo, rates[rate]);
}
if (close (audio1) < 0)
{
tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
}
}
/* simultaneous read/write */
void
monitortest (void)
{
int fd;
fd = open ("/dev/dsp", O_RDWR);
if (fd < 0)
{
tst_brkm (TFAIL, cleanup, "open RW: %s", strerror (errno));
}
rwtest (fd, 44100, 1, 16);
tst_resm (TPASS, "Record+Play rate=44100, stereo, 16 bits");
if (close (fd) < 0)
{
tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
}
}
void
forkrectest (void)
{
int pid;
int fd;
fd = open ("/dev/dsp", O_RDONLY);
if (fd < 0)
{
tst_brkm (TFAIL, cleanup, "Error open /dev/dsp R: %s",
strerror (errno));
}
pid = fork ();
if (pid < 0)
{
tst_brkm (TBROK, cleanup, "Fork failed: %s", strerror (errno));
}
if (pid)
{
tst_resm (TINFO, "forked, child PID=%d", pid);
sleep (1);
tst_resm (TINFO, "parent records..");
rectest (fd, 22050, 1, 16);
tst_resm (TINFO, "parent done");
syncwithchild (pid, 0);
}
else
{ /* child */
tst_resm (TINFO, "child records..");
rectest (fd, 44100, 1, 16);
tst_resm (TINFO, "child done");
fflush (stdout);
exit (0); /* implicit close */
}
tst_resm (TPASS, "child records after fork");
/* fork again, but now we have done a read before,
* so the child is expected to fail
*/
pid = fork ();
if (pid < 0)
{
tst_brkm (TBROK, cleanup, "Fork failed: %s", strerror (errno));
}
if (pid)
{
tst_resm (TINFO, "forked, child PID=%d", pid);
tst_resm (TINFO, "parent records again ..");
rectest (fd, 22050, 1, 16);
tst_resm (TINFO, "parent done");
syncwithchild (pid, TFAIL); /* expecting error exit */
}
else
{ /* child */
expect_child_failure = 1;
tst_resm (TINFO, "child trying to record (should fail)..");
rectest (fd, 44100, 1, 16);
/* NOTREACHED */
tst_resm (TINFO, "child done");
fflush (stdout);
exit (0); /* implicit close */
}
if (close (fd) < 0)
{
tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
}
tst_resm (TPASS, "child cannot record if parent is already recording");
}
void
forkplaytest (void)
{
int pid;
int fd;
fd = open ("/dev/dsp", O_WRONLY);
if (fd < 0)
{
tst_brkm (TFAIL, cleanup, "Error open /dev/dsp R: %s",
strerror (errno));
}
pid = fork ();
if (pid < 0)
{
tst_brkm (TBROK, cleanup, "Fork failed: %s", strerror (errno));
}
if (pid)
{
tst_resm (TINFO, "forked, child PID=%d", pid);
sleep (1);
tst_resm (TINFO, "parent plays..");
playtest (fd, 22050, 0, 8);
tst_resm (TINFO, "parent done");
syncwithchild (pid, 0);
}
else
{ /* child */
tst_resm (TINFO, "child plays..");
playtest (fd, 44100, 1, 16);
tst_resm (TINFO, "child done");
fflush (stdout);
exit (0); /* implicit close */
}
tst_resm (TPASS, "child plays after fork");
/* fork again, but now we have done a write before,
* so the child is expected to fail
*/
pid = fork ();
if (pid < 0)
{
tst_brkm (TBROK, cleanup, "Fork failed");
}
if (pid)
{
tst_resm (TINFO, "forked, child PID=%d", pid);
tst_resm (TINFO, "parent plays again..");
playtest (fd, 22050, 0, 8);
tst_resm (TINFO, "parent done");
syncwithchild (pid, TFAIL); /* expected failure */
}
else
{ /* child */
expect_child_failure = 1;
tst_resm (TINFO, "child trying to play (should fail)..");
playtest (fd, 44100, 1, 16);
/* NOTREACHED */
tst_resm (TINFO, "child done");
fflush (stdout);
exit (0); /* implicit close */
}
if (close (fd) < 0)
{
tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
}
tst_resm (TPASS, "child cannot play if parent is already playing");
}
void
playtest (int fd, int rate, int stereo, int bits)
{ /* Play sine waves, always 0.25 sec */
void *wave;
int n, c, b;
int size;
if (stereo)
c = 2;
else
c = 1;
if (bits == 8)
b = 1;
else
b = 2;
size = rate / 4 * c * b;
wave = malloc (size);
if (wave == NULL)
{
tst_brkm (TBROK, cleanup, "Malloc failed, exit");
}
setpars (fd, rate, stereo, bits);
sinegen (wave, rate, bits, rate / 4, c);
if ((n = write (fd, wave, size)) < 0)
{
tst_brkm (TFAIL, cleanup, "write: %s", strerror (errno));
}
if (n != size)
{
tst_brkm (TFAIL, cleanup, "Wrote %d, expected %d; exit", n, size);
}
free (wave);
}
void
rectest (int fd, int rate, int stereo, int bits)
{
void *wave;
int n, c, b;
int size;
if (stereo)
c = 2;
else
c = 1;
if (bits == 8)
b = 1;
else
b = 2;
size = rate / 4 * c * b;
wave = malloc (size);
if (wave == NULL)
{
tst_brkm (TBROK, cleanup, "Malloc failed, exit");
}
setpars (fd, rate, stereo, bits);
if ((n = read (fd, wave, size)) < 0)
{
tst_brkm (TFAIL, cleanup, "read: %s", strerror (errno));
}
if (n != size)
{
tst_brkm (TFAIL, cleanup, "Read n=%d (%d expected); exit", n, size);
}
if ((n = read (fd, wave, size)) < 0)
{
tst_brkm (TFAIL, cleanup, "read: %s", strerror (errno));
}
if (n != size)
{
tst_brkm (TFAIL, cleanup, "Read n=%d (%d expected); exit", n, size);
}
free (wave);
}
void
rwtest (int fd, int rate, int stereo, int bits)
{
int pid;
void *wave;
int n, c, b;
int size;
if (stereo)
c = 2;
else
c = 1;
if (bits == 8)
b = 1;
else
b = 2;
size = rate / 4 * c * b;
wave = malloc (size);
if (wave == NULL)
{
tst_brkm (TBROK, cleanup, "Malloc failed, exit");
}
setpars (fd, rate, stereo, bits);
pid = fork ();
if (pid < 0)
{
tst_brkm (TBROK, cleanup, "Fork failed: %s", strerror (errno));
}
if (pid)
{
tst_resm (TINFO, "forked, child PID=%d parent records", pid);
if ((n = read (fd, wave, size)) < 0)
{
tst_brkm (TFAIL, cleanup, "read: %s", strerror (errno));
}
if (n != size)
{
tst_brkm (TFAIL, cleanup, "Read n=%d (%d expected)", n, size);
}
free (wave);
syncwithchild (pid, 0);
}
else
{ /* child */
tst_resm (TINFO, "child plays");
sinegen (wave, rate, bits, rate / 4, c);
if ((n = write (fd, wave, size)) < 0)
{
tst_brkm (TFAIL, cleanup, "child write: %s", strerror (errno));
}
if (n != size)
{
tst_brkm (TFAIL, cleanup, "child write n=%d OK (%d expected)", n,
size);
}
free (wave);
exit (0);
}
}
void
setpars (int fd, int rate, int stereo, int bits)
{
int ioctl_par = 0;
if (ioctl (fd, SNDCTL_DSP_SAMPLESIZE, &bits) < 0)
{
if (expect_child_failure)
{ /* Note: Don't print this to stderr because we expect failures here
* for the some cases after fork()
*/
tst_resm (TINFO, "ioctl SNDCTL_DSP_SAMPLESIZE: %s",
strerror (errno));
exit (TFAIL);
}
else
{
tst_brkm (TFAIL, cleanup, "ioctl SNDCTL_DSP_SAMPLESIZE: %s",
strerror (errno));
}
}
if (ioctl (fd, SNDCTL_DSP_STEREO, &stereo) < 0)
{
tst_brkm (TFAIL, cleanup, "ioctl SNDCTL_DSP_STEREO: %s",
strerror (errno));
}
if (ioctl (fd, SNDCTL_DSP_SPEED, &rate) < 0)
{
tst_brkm (TFAIL, cleanup, "ioctl SNDCTL_DSP_SPEED: %s",
strerror (errno));
}
if (ioctl (fd, SNDCTL_DSP_SYNC, &ioctl_par) < 0)
{
tst_brkm (TFAIL, cleanup, "ioctl SNDCTL_DSP_SYNC: %s",
strerror (errno));
}
}
void
syncwithchild (pid_t pid, int expected_exit_status)
{
int status;
if (waitpid (pid, &status, 0) != pid)
{
tst_brkm (TBROK, cleanup, "Wait for child: %s", strerror (errno));
}
if (!WIFEXITED (status))
{
tst_brkm (TBROK, cleanup, "Child had abnormal exit");
}
if (WEXITSTATUS (status) != expected_exit_status)
{
tst_brkm (TBROK, cleanup, "Child had exit status != 0");
}
}
void
sinegen (void *wave, int rate, int bits, int len, int stride)
{
if (bits == 8)
{
sinegenb (1000, rate, (unsigned char *) wave, len, stride);
if (stride == 2)
sinegenb (800, rate, (unsigned char *) wave + 1, len, stride);
}
else
{
sinegenw (1000, rate, (short *) wave, len, stride);
if (stride == 2)
sinegenw (800, rate, (short *) wave + 1, len, stride);
}
}
void
sinegenw (int freq, int samprate, short *value, int len, int stride)
{
double phase, incr;
phase = 0.0;
incr = M_PI * 2.0 * (double) freq / (double) samprate;
while (len-- > 0)
{
*value = (short) floor (0.5 + 32766.5 * sin (phase));
value += stride;
phase += incr;
}
}
void
sinegenb (int freq, int samprate, unsigned char *value, int len, int stride)
{
double phase, incr;
phase = 0.0;
incr = M_PI * 2.0 * (double) freq / (double) samprate;
while (len-- > 0)
{
*value = (unsigned char) floor (128.5 + 126.5 * sin (phase));
value += stride;
phase += incr;
}
}
void
playwavtest (void)
{
int audio;
int size = sizeof (wavfile_okay);
int n;
audio = open ("/dev/dsp", O_WRONLY);
if (audio < 0)
{
tst_brkm (TFAIL, cleanup, "Error open /dev/dsp W: %s",
strerror (errno));
}
if ((n = write (audio, wavfile_okay, size)) < 0)
{
tst_brkm (TFAIL, cleanup, "write: %s", strerror (errno));
}
if (n != size)
{
tst_brkm (TFAIL, cleanup, "Wrote %d, expected %d; exit", n, size);
}
if (close (audio) < 0)
{
tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
}
tst_resm (TPASS, "Set parameters from wave file header");
}
void
cleanup (void)
{
}

View File

@ -0,0 +1,531 @@
/* This is the decimal representation of a wave file.
It contains the spoken word "okay" sampled at 11025 Hz
and 8 bit resolution. */
82, 73, 70, 70, 108, 30, 0, 0, 87, 65, 86, 69, 102, 109, 116, 32, 16, 0, 0,
0, 1, 0, 1, 0, 17, 43, 0, 0, 17, 43, 0, 0, 1, 0, 8, 0, 100, 97, 116, 97,
72, 30, 0, 0, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116,
116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116,
116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 115, 114, 114, 115, 115,
115, 117, 117, 117, 116, 115, 115, 115, 115, 116, 116, 116, 118, 116, 115,
115, 115, 115, 115, 116, 116, 116, 117, 116, 116, 115, 116, 116, 116, 116,
117, 116, 116, 117, 116, 115, 116, 116, 116, 117, 117, 117, 116, 116, 117,
116, 116, 116, 117, 117, 117, 117, 116, 116, 116, 118, 117, 117, 117, 117,
116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 116, 116, 116, 116, 116,
116, 116, 117, 116, 116, 116, 115, 116, 116, 116, 116, 116, 117, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 117, 115, 115, 116, 116, 116, 116,
116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 119, 118, 118, 118,
118, 119, 119, 119, 119, 119, 120, 120, 120, 120, 121, 120, 120, 120, 120,
121, 121, 120, 119, 118, 116, 115, 114, 115, 114, 113, 112, 112, 111, 112,
113, 114, 116, 116, 117, 117, 117, 116, 115, 115, 115, 115, 116, 115, 115,
114, 114, 114, 114, 114, 114, 114, 116, 115, 115, 115, 114, 114, 113, 113,
114, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116,
115, 115, 115, 115, 116, 116, 116, 118, 117, 117, 117, 117, 117, 118, 118,
119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 120, 119, 118,
117, 117, 117, 116, 117, 116, 116, 115, 115, 115, 115, 115, 116, 116, 117,
116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 113, 113, 113, 113,
113, 113, 113, 115, 114, 113, 113, 113, 113, 114, 114, 114, 115, 114, 114,
114, 114, 114, 114, 114, 115, 116, 115, 115, 115, 115, 114, 114, 115, 115,
115, 117, 116, 116, 116, 116, 116, 116, 117, 117, 118, 118, 119, 118, 118,
118, 118, 119, 120, 120, 121, 121, 122, 122, 123, 124, 125, 126, 127, 126,
126, 126, 126, 127, -127, 124, 114, 102, 94, 89, 94, 102, 109, 115, 120,
124, 123, 122, 121, 117, 116, 121, 124, 125, 124, 120, 114, 109, 107, 105,
104, 108, 111, 115, 118, 120, 118, 116, 114, 114, 116, 117, 119, 120, 119,
118, 116, 113, 112, 111, 113, 117, 120, 122, 122, 121, 118, 115, 114, 113,
112, 113, 114, 113, 114, 114, 112, 111, 110, 110, 113, 116, 118, 119, 120,
119, 116, 115, 114, 112, 111, 114, 114, 115, 115, 113, 110, 109, 110, 113,
115, 118, 120, 120, 119, 119, 116, 114, 112, 112, 113, 114, 115, 115, 114,
115, 114, 114, 115, 117, 117, 118, 119, 119, 118, 117, 116, 115, 115, 116,
116, 118, 119, 119, 119, 118, 118, 118, 119, 120, 121, 122, 123, 123, 123,
122, 122, 124, 122, 121, 119, 118, 117, 115, 115, 115, 115, 116, 117, 118,
118, 119, 117, 112, 110, 110, 110, 111, 117, 118, 118, 118, 119, 118, 116,
115, 114, 114, 116, 118, 118, 116, 116, 115, 113, 112, 113, 113, 114, 117,
117, 117, 117, 115, 113, 112, 111, 108, 108, 110, 111, 113, 115, 116, 115,
115, 116, 116, 114, 115, 115, 114, 115, 114, 112, 111, 113, 112, 113, 115,
116, 117, 118, 118, 117, 116, 117, 115, 115, 116, 117, 117, 118, 118, 119,
119, 119, 120, 122, 122, 124, 125, 126, -128, -127, -126, -124, -121,
-117, -112, -113, -123, 121, 108, 91, 75, 75, 84, 91, 103, 119, 127, -128,
-126, -127, 124, 120, 122, 121, 123, 127, 126, 120, 114, 110, 104, 99,
101, 104, 107, 114, 120, 123, 123, 122, 119, 116, 116, 117, 116, 117, 118,
117, 115, 113, 111, 110, 111, 113, 116, 120, 123, 124, 123, 121, 118, 115,
113, 112, 112, 112, 114, 113, 112, 110, 107, 107, 107, 110, 112, 116, 119,
120, 119, 118, 115, 113, 110, 110, 111, 112, 113, 114, 114, 116, 115, 114,
115, 116, 117, 118, 119, 119, 118, 117, 116, 115, 113, 114, 114, 115, 117,
119, 119, 120, 120, 120, 121, 122, 123, 123, 125, 127, -128, -127, -126,
-126, -124, -121, -120, -119, -123, 124, 113, 101, 90, 81, 81, 87, 96,
108, 121, 127, -127, -125, -125, 126, 122, 121, 120, 120, 122, 121, 118,
114, 110, 106, 103, 102, 104, 106, 112, 117, 120, 122, 123, 122, 119, 117,
117, 116, 115, 116, 116, 115, 115, 114, 113, 113, 113, 115, 117, 119, 120,
120, 120, 118, 114, 112, 110, 108, 108, 108, 109, 110, 112, 111, 112, 112,
112, 112, 112, 114, 117, 117, 118, 117, 115, 113, 112, 111, 111, 113, 114,
116, 118, 119, 119, 118, 118, 118, 117, 117, 117, 118, 117, 118, 118, 118,
119, 119, 120, 121, 122, 124, 126, 127, -128, -127, -124, -122, -120,
-117, -115, -117, -125, 119, 102, 85, 77, 76, 83, 91, 103, 115, 124, -125,
-122, -126, 124, 121, 119, 119, 121, 122, 121, 118, 117, 114, 109, 106,
103, 102, 107, 112, 117, 119, 122, 122, 120, 119, 117, 114, 112, 114, 114,
115, 116, 115, 114, 114, 114, 114, 116, 116, 118, 119, 120, 121, 119, 116,
113, 109, 108, 107, 107, 109, 111, 112, 113, 114, 115, 113, 112, 112, 112,
113, 114, 115, 116, 115, 114, 113, 113, 113, 113, 113, 114, 117, 117, 118,
118, 117, 117, 117, 116, 116, 117, 117, 118, 119, 118, 118, 118, 118, 119,
120, 121, 122, 124, 126, -128, -127, -125, -124, -123, -120, -117, -114,
-115, -123, 119, 102, 84, 76, 76, 80, 90, 102, 115, 125, -124, -120, -125,
124, 121, 119, 119, 120, 121, 121, 120, 119, 117, 110, 105, 101, 101, 104,
110, 114, 118, 121, 123, 122, 120, 118, 115, 113, 114, 116, 116, 117, 117,
115, 115, 114, 114, 113, 114, 117, 118, 120, 120, 119, 117, 114, 111, 109,
107, 107, 107, 109, 112, 115, 115, 115, 115, 115, 114, 113, 113, 113, 113,
114, 114, 114, 114, 113, 113, 113, 114, 116, 117, 118, 119, 119, 120, 118,
118, 117, 116, 117, 117, 118, 118, 118, 119, 119, 120, 121, 121, 121, 123,
124, 125, 126, -128, -127, -124, -121, -118, -116, -112, -114, -123, 118,
99, 81, 75, 77, 82, 92, 104, 114, 125, -123, -122, -128, 123, 120, 118,
119, 121, 121, 120, 121, 121, 117, 112, 107, 102, 102, 105, 110, 114, 118,
121, 124, 123, 121, 118, 114, 113, 113, 113, 115, 116, 116, 117, 117, 116,
115, 115, 115, 115, 116, 118, 119, 118, 118, 115, 112, 110, 107, 106, 107,
110, 112, 115, 117, 118, 117, 117, 115, 113, 112, 112, 111, 112, 113, 113,
113, 114, 114, 116, 115, 116, 117, 118, 119, 119, 118, 118, 117, 116, 115,
116, 116, 117, 118, 119, 121, 120, 120, 121, 121, 121, 121, 121, 122, 123,
125, 125, 126, -127, -124, -122, -119, -117, -115, -117, -123, 120, 102,
88, 81, 80, 85, 92, 100, 110, 120, -127, -125, 127, 123, 121, 120, 121,
122, 121, 121, 123, 122, 119, 114, 109, 104, 103, 104, 107, 110, 114, 117,
119, 121, 121, 119, 117, 114, 114, 114, 116, 117, 117, 117, 118, 118, 117,
115, 113, 113, 113, 115, 116, 117, 116, 114, 113, 110, 109, 109, 110, 111,
113, 116, 117, 117, 116, 115, 112, 111, 110, 109, 112, 113, 115, 117, 118,
117, 117, 116, 115, 114, 115, 115, 116, 118, 119, 120, 120, 120, 118, 117,
116, 116, 116, 118, 118, 120, 121, 122, 122, 122, 120, 120, 120, 121, 123,
125, 127, -126, -123, -121, -120, -119, -118, -120, -128, 115, 101, 91,
87, 86, 89, 94, 100, 109, 117, 123, 125, 123, 121, 119, 119, 120, 121,
120, 121, 122, 122, 121, 117, 112, 107, 105, 106, 106, 108, 111, 113, 117,
119, 119, 118, 117, 114, 113, 114, 115, 116, 117, 118, 119, 120, 118, 117,
114, 112, 112, 113, 113, 114, 114, 114, 114, 112, 111, 110, 110, 110, 111,
113, 114, 115, 115, 115, 113, 112, 111, 110, 111, 111, 113, 115, 116, 117,
117, 117, 116, 115, 115, 113, 114, 115, 116, 118, 119, 120, 120, 119, 118,
118, 117, 116, 117, 118, 119, 120, 121, 121, 121, 121, 121, 121, 121, 122,
123, 125, 127, -128, -126, -124, -122, -120, -120, -126, 119, 108, 101,
93, 91, 93, 93, 97, 105, 112, 117, 120, 120, 118, 117, 118, 118, 117, 118,
120, 122, 123, 123, 121, 116, 114, 110, 108, 107, 107, 108, 110, 114, 116,
117, 117, 116, 115, 114, 114, 114, 115, 117, 117, 119, 120, 120, 119, 118,
116, 115, 114, 113, 113, 112, 112, 112, 111, 111, 111, 111, 112, 112, 113,
113, 115, 116, 116, 116, 115, 115, 113, 113, 113, 113, 114, 115, 116, 117,
117, 117, 116, 116, 115, 116, 116, 116, 117, 118, 119, 120, 120, 120, 119,
119, 118, 118, 117, 117, 118, 119, 119, 120, 121, 121, 122, 123, 121, 121,
121, 122, 123, 125, 127, -127, -126, -125, -124, -127, 122, 115, 109, 103,
100, 101, 100, 102, 105, 109, 114, 115, 115, 115, 113, 113, 114, 114, 115,
117, 120, 121, 122, 123, 121, 118, 116, 113, 112, 111, 111, 111, 112, 114,
115, 116, 116, 115, 114, 113, 114, 113, 113, 114, 115, 117, 120, 121, 121,
120, 119, 118, 117, 115, 113, 113, 113, 113, 114, 114, 113, 113, 111, 111,
111, 111, 112, 112, 114, 116, 116, 117, 116, 116, 115, 115, 114, 114, 114,
116, 116, 117, 118, 118, 118, 118, 117, 117, 116, 116, 116, 118, 118, 119,
119, 118, 118, 118, 117, 117, 117, 117, 117, 119, 119, 119, 120, 120, 120,
120, 120, 119, 119, 119, 119, 120, 120, 120, 121, 120, 120, 120, 120, 120,
120, 119, 118, 117, 115, 114, 113, 113, 112, 112, 112, 112, 113, 113, 113,
114, 113, 113, 113, 113, 113, 114, 115, 116, 118, 117, 117, 117, 116, 116,
116, 115, 115, 115, 115, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115,
117, 116, 117, 117, 117, 117, 117, 117, 117, 116, 116, 117, 116, 115, 115,
115, 115, 115, 115, 115, 114, 115, 114, 114, 114, 114, 114, 115, 115, 116,
117, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 118, 117, 117, 117,
116, 116, 116, 116, 116, 117, 117, 118, 118, 117, 117, 117, 117, 117, 117,
117, 117, 117, 117, 118, 117, 117, 117, 116, 116, 116, 116, 116, 117, 117,
118, 117, 117, 117, 117, 116, 117, 117, 117, 117, 117, 117, 118, 117, 117,
116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 115, 115,
115, 115, 115, 116, 114, 114, 115, 115, 115, 115, 116, 116, 116, 117, 116,
116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117,
118, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 117, 115, 115,
116, 116, 116, 117, 117, 117, 117, 117, 118, 117, 117, 117, 117, 117, 117,
117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 117, 117, 116,
117, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 118, 117, 117, 116,
116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 117, 117,
116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116,
116, 118, 117, 117, 117, 116, 116, 116, 116, 116, 115, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115,
115, 115, 116, 116, 117, 117, 117, 117, 117, 118, 116, 116, 116, 116, 116,
116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 117, 117,
117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
116, 117, 117, 116, 116, 116, 116, 116, 115, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116,
116, 117, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 115, 115, 116,
116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116,
116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117,
116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116,
116, 117, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
116, 116, 116, 116, 117, 116, 117, 116, 117, 117, 117, 117, 117, 116, 116,
116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116,
116, 116, 116, 117, 116, 116, 117, 117, 116, 116, 116, 117, 116, 116, 116,
116, 116, 116, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 117,
116, 116, 116, 116, 116, 117, 117, 116, 116, 117, 118, 117, 117, 117, 117,
116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 117, 117,
117, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116,
116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116,
116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116,
116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116,
116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116,
114, 108, 108, 118, 125, -126, 123, 98, 95, 109, 117, 124, 127, 123, 118,
109, 103, 113, 125, -127, 120, 108, 106, 112, 115, 112, 110, 112, 111,
112, 112, 116, 120, 120, 118, 114, 113, 120, 122, 119, 116, 115, 115, 117,
117, 116, 115, 115, 115, 112, 107, 109, 119, 121, 120, 118, 114, 117, 120,
118, 119, 119, 117, 119, 116, 113, 119, 120, 117, 114, 112, 114, 117, 117,
116, 113, 114, 118, 117, 117, 119, 121, 118, 113, 114, 116, 116, 118, 116,
114, 113, 111, 112, 117, 118, 121, 119, 117, 117, 113, 110, 114, 117, 119,
117, 114, 113, 113, 114, 115, 115, 117, 117, 114, 114, 116, 119, 121, 119,
115, 116, 117, 117, 120, 122, 121, 115, 109, 112, 117, 117, 116, 115, 116,
117, 113, 113, 116, 118, 118, 115, 115, 118, 120, 120, 120, 118, 119, 120,
119, 119, 118, 119, 119, 117, 116, 117, 118, 119, 116, 115, 117, 118, 118,
118, 118, 118, 119, 119, 120, 120, 121, 120, 118, 118, 119, 119, 119, 118,
118, 117, 116, 117, 117, 118, 118, 117, 116, 117, 116, 117, 119, 118, 117,
116, 118, 120, 117, 117, 119, 120, 119, 118, 118, 118, 119, 118, 117, 116,
119, 118, 117, 116, 117, 118, 118, 117, 116, 117, 118, 117, 116, 116, 117,
118, 117, 115, 116, 118, 119, 117, 117, 119, 117, 117, 116, 117, 118, 118,
117, 116, 116, 117, 117, 117, 116, 116, 116, 117, 116, 115, 116, 116, 116,
118, 117, 116, 116, 117, 117, 117, 117, 117, 116, 115, 116, 116, 117, 118,
116, 114, 115, 115, 116, 116, 117, 117, 115, 115, 116, 116, 118, 118, 117,
117, 116, 116, 117, 117, 118, 117, 116, 116, 115, 115, 115, 115, 116, 118,
116, 115, 115, 116, 116, 116, 116, 117, 117, 117, 118, 117, 117, 117, 117,
116, 116, 116, 117, 115, 115, 114, 114, 115, 115, 115, 116, 115, 114, 114,
117, 116, 116, 115, 115, 115, 116, 116, 116, 116, 116, 115, 116, 116, 116,
116, 115, 115, 115, 116, 115, 115, 115, 116, 116, 116, 116, 115, 115, 116,
116, 117, 116, 116, 116, 117, 117, 116, 116, 116, 117, 117, 118, 117, 117,
117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117,
118, 118, 117, 118, 117, 117, 117, 117, 117, 118, 117, 117, 116, 115, 117,
117, 117, 116, 115, 116, 117, 117, 117, 117, 117, 117, 116, 117, 117, 117,
116, 115, 115, 116, 117, 118, 116, 116, 118, 117, 116, 117, 117, 117, 116,
116, 116, 117, 116, 117, 115, 115, 116, 117, 117, 116, 115, 115, 117, 118,
119, 117, 116, 116, 115, 116, 117, 117, 116, 115, 115, 117, 117, 117, 115,
115, 115, 115, 114, 115, 116, 116, 115, 116, 116, 116, 116, 115, 116, 116,
116, 116, 115, 116, 116, 116, 116, 115, 116, 117, 116, 117, 118, 116, 116,
116, 116, 116, 117, 117, 117, 117, 118, 118, 117, 118, 118, 117, 116, 117,
117, 118, 118, 117, 115, 117, 118, 118, 118, 117, 115, 115, 117, 118, 117,
116, 116, 114, 115, 117, 117, 117, 116, 115, 116, 116, 116, 117, 116, 116,
115, 115, 115, 115, 116, 115, 114, 116, 115, 115, 115, 114, 113, 113, 113,
113, 114, 113, 112, 111, 113, 114, 113, 113, 114, 112, 113, 113, 113, 114,
113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 116, 117, 116, 116,
116, 117, 117, 117, 117, 117, 117, 118, 118, 120, 120, 121, 120, 120, 122,
123, 123, 125, 126, 127, -128, -128, -126, -124, -121, -117, -112, -113,
-127, 106, 94, 105, 117, 114, 106, 94, 85, 89, 105, 116, 121, 118, 109,
106, 116, 127, -126, 127, 121, 116, 115, 117, 117, 117, 116, 112, 103, 99,
106, 110, 111, 108, 103, 104, 109, 112, 115, 116, 114, 111, 110, 113, 116,
118, 116, 112, 110, 111, 112, 112, 114, 115, 113, 111, 111, 113, 116, 118,
116, 115, 115, 117, 119, 120, 120, 120, 121, 122, 125, -126, -121, -119,
-116, -111, -107, -100, -101, -111, 110, 73, 90, 124, 119, 96, 82, 71, 71,
95, 119, -127, 126, 114, 103, 115, -117, -108, -116, -126, 123, 119, 116,
114, 116, 118, 112, 101, 91, 93, 103, 112, 113, 107, 108, 111, 114, 120,
125, 124, 119, 111, 110, 116, 120, 117, 112, 107, 106, 108, 112, 112, 114,
114, 110, 107, 110, 115, 118, 117, 114, 111, 110, 112, 114, 116, 116, 114,
110, 110, 113, 117, 118, 116, 113, 114, 117, 118, 119, 120, 122, 123, 122,
124, -127, -124, -122, -117, -114, -112, -110, -103, -96, -116, 80, 53,
97, -125, 112, 89, 77, 65, 73, 107, -121, -114, -123, 113, 104, 127, -104,
-103, -117, -127, 124, 115, 106, 105, 113, 117, 108, 91, 80, 86, 103, 114,
112, 110, 111, 111, 113, 122, -127, -128, 120, 113, 110, 114, 117, 115,
112, 109, 106, 105, 105, 109, 116, 116, 109, 105, 108, 115, 119, 120, 117,
114, 112, 114, 118, 122, 124, 120, 117, 118, 121, 125, -128, -127, -124,
-121, -116, -108, -93, -75, -73, -120, 57, 40, 106, -108, 120, 81, 62, 48,
59, 104, -106, -99, -123, 106, 100, -128, -96, -92, -107, -120, 127, 108,
93, 100, 118, 123, 105, 79, 69, 82, 106, 119, 118, 116, 117, 116, 118,
127, -121, -123, 121, 111, 108, 110, 110, 111, 111, 109, 105, 101, 102,
112, 121, 122, 112, 105, 111, 120, 123, 120, 115, 112, 108, 110, 114, 115,
113, 111, 109, 111, 115, 119, 122, 122, 120, 120, 120, 125, -124, -119,
-117, -118, -114, -105, -88, -73, -79, 120, 40, 37, 115, -106, 109, 69,
57, 51, 67, 119, -95, -97, -125, 108, 110, -118, -92, -93, -109, -122,
120, 97, 84, 95, 118, 121, 98, 72, 68, 88, 110, 123, 124, 123, 123, 119,
115, 125, -119, -125, 116, 106, 103, 104, 106, 110, 114, 111, 103, 99,
105, 120, -127, 123, 111, 105, 111, 118, 120, 118, 114, 109, 106, 110,
116, 122, 122, 118, 114, 117, 121, 126, -126, -124, -123, -122, -119,
-106, -88, -68, -59, -99, 61, 9, 75, -100, -117, 80, 54, 47, 46, 87, -103,
-78, -104, 115, 104, 124, -100, -85, -95, -114, -127, 105, 76, 77, 110,
-127, 111, 76, 60, 73, 101, 122, -127, -126, -128, 122, 116, 123, -120,
-116, 124, 107, 99, 98, 99, 105, 114, 112, 104, 96, 100, 115, -126, -126,
118, 108, 107, 116, 122, 121, 117, 111, 103, 103, 110, 116, 119, 117, 113,
112, 114, 118, 126, -126, 126, 123, 125, -126, -114, -104, -96, -88, -76,
-72, -119, 48, 20, 94, -102, 120, 67, 50, 48, 60, 109, -94, -84, -115,
114, 111, -122, -94, -87, -104, -120, 120, 94, 71, 81, 115, 126, 100, 64,
58, 83, 118, -122, -126, 125, 125, 121, 117, 127, -118, -125, 111, 97, 94,
99, 101, 106, 110, 109, 103, 101, 108, 122, -126, 126, 113, 107, 112, 117,
117, 115, 114, 112, 108, 106, 112, 121, 123, 118, 115, 117, 120, 124,
-126, -122, -119, -118, -113, -100, -81, -57, -59, -123, 30, 11, 103, -96,
115, 62, 48, 42, 50, 108, -85, -76, -112, 114, 112, -121, -92, -85, -100,
-117, 119, 85, 63, 80, 117, 126, 99, 66, 60, 82, 115, -121, -120, -121,
-124, 120, 112, 123, -119, -123, 113, 96, 90, 92, 98, 108, 115, 113, 104,
102, 109, 124, -121, -127, 113, 105, 110, 116, 116, 114, 112, 109, 106,
107, 114, 121, 123, 119, 116, 116, 119, 124, -125, -122, -124, -123, -118,
-107, -90, -67, -56, -80, 87, 7, 42, -117, -104, 91, 53, 46, 44, 72, -117,
-74, -89, -126, 111, 118, -113, -89, -90, -107, -124, 104, 68, 64, 98,
-127, 118, 84, 59, 68, 102, -124, -119, -121, -121, 126, 113, 114, -127,
-119, 124, 101, 88, 91, 96, 104, 114, 116, 109, 103, 104, 118, -122, -122,
117, 103, 105, 115, 120, 118, 115, 113, 108, 104, 109, 120, 124, 122, 117,
114, 117, 124, -124, -121, -118, -117, -113, -103, -83, -60, -52, -107,
44, 4, 87, -98, 125, 70, 50, 45, 49, 99, -96, -77, -103, 123, 112, 126,
-102, -88, -100, -113, 124, 87, 58, 76, 118, -127, 102, 71, 65, 85, 119,
-121, -121, -118, -121, 120, 111, 119, -123, -126, 110, 92, 88, 92, 98,
109, 117, 113, 106, 104, 113, -128, -119, -128, 111, 104, 109, 115, 119,
119, 116, 110, 102, 103, 116, 126, 124, 117, 113, 115, 120, 125, -125,
-120, -120, -119, -115, -103, -81, -59, -57, -105, 50, 7, 84, -101, -126,
76, 51, 40, 49, 101, -94, -80, -103, 125, 113, 124, -106, -92, -100, -112,
124, 85, 58, 76, 116, -125, 106, 74, 63, 85, 120, -119, -118, -120, -126,
118, 112, 120, -125, -128, 109, 91, 87, 93, 99, 110, 117, 113, 106, 104,
114, -127, -120, 126, 110, 103, 109, 116, 119, 117, 113, 109, 102, 105,
117, 126, 123, 115, 111, 114, 121, 127, -124, -123, -125, -124, -116,
-104, -88, -70, -55, -77, 91, 9, 45, -118, -108, 94, 59, 43, 42, 77, -116,
-79, -91, -123, 111, 116, -114, -93, -99, -110, -124, 98, 63, 65, 105,
-125, 117, 84, 65, 79, 111, -122, -118, -121, -125, 123, 112, 114, 127,
-126, 114, 94, 88, 90, 97, 105, 114, 115, 110, 105, 110, 124, -121, -125,
115, 105, 108, 115, 117, 114, 112, 110, 104, 103, 112, 123, 125, 118, 113,
113, 117, 125, -126, -125, -127, 127, -125, -115, -101, -88, -76, -68,
-80, 107, 24, 42, -128, -109, 97, 59, 47, 48, 79, -122, -89, -97, -124,
115, 118, -114, -97, -102, -115, -127, 102, 71, 72, 103, 127, 117, 88, 68,
81, 113, -121, -122, -127, -128, 122, 115, 116, 123, 125, 114, 98, 91, 94,
100, 106, 111, 111, 108, 105, 113, 125, -125, 126, 114, 108, 111, 117,
118, 114, 110, 108, 104, 105, 112, 118, 120, 117, 114, 113, 118, 125,
-128, 127, 124, 122, 125, -122, -111, -104, -100, -92, -79, -73, -101, 75,
26, 82, -115, 122, 74, 55, 51, 67, 108, -110, -100, -111, -128, 117, -126,
-105, -102, -115, -125, 118, 92, 77, 87, 113, 122, 103, 79, 75, 101, -126,
-119, 127, 121, 123, 122, 118, 119, 124, 118, 102, 91, 93, 101, 106, 106,
107, 109, 111, 114, 121, -128, 127, 119, 111, 111, 115, 116, 112, 109,
108, 108, 106, 106, 112, 120, 121, 117, 114, 117, 122, 125, 126, 124, 124,
126, -127, -122, -115, -110, -108, -100, -87, -77, -87, 108, 40, 60, 127,
-123, 89, 65, 60, 65, 92, -127, -107, -105, -121, 116, 119, -117, -106,
-112, -121, 123, 101, 83, 85, 108, 123, 110, 88, 80, 97, 121, -125, 126,
119, 121, 123, 120, 119, 121, 118, 107, 96, 94, 101, 106, 106, 105, 108,
111, 114, 120, 123, 125, 123, 116, 111, 111, 114, 113, 109, 108, 106, 105,
108, 114, 119, 120, 116, 114, 119, 124, 126, 124, 122, 121, 123, 125,
-128, -123, -119, -116, -114, -105, -94, -86, -86, -109, 86, 49, 90, -124,
117, 83, 64, 60, 76, 111, -118, -110, -118, 121, 114, -127, -108, -107,
-120, 125, 113, 98, 94, 102, 116, 115, 99, 87, 90, 107, 126, -127, 119,
115, 120, 123, 122, 121, 118, 112, 103, 98, 100, 107, 111, 107, 103, 104,
110, 119, 124, 123, 119, 116, 111, 111, 115, 117, 112, 108, 106, 106, 108,
114, 117, 118, 116, 115, 117, 121, 124, 124, 121, 117, 118, 123, 125, 126,
-128, -125, -123, -118, -109, -99, -92, -91, -98, -113, 97, 59, 90, -126,
118, 82, 61, 63, 84, 116, -122, -121, -127, 117, 115, -123, -106, -108,
-124, 119, 111, 105, 103, 106, 114, 113, 99, 89, 91, 107, 126, -127, 116,
109, 115, 124, 125, 123, 117, 108, 104, 103, 106, 110, 111, 107, 105, 106,
108, 113, 119, 121, 118, 113, 109, 112, 118, 120, 117, 109, 105, 108, 112,
116, 117, 116, 113, 110, 112, 118, 122, 120, 118, 117, 117, 119, 122, 125,
126, 125, 126, -124, -119, -115, -110, -104, -103, -100, -99, -103, 124,
76, 74, 109, 118, 96, 77, 69, 76, 100, 121, -127, -123, 127, 116, 123,
-116, -113, -120, 126, 118, 113, 107, 104, 108, 113, 108, 97, 93, 100,
115, 125, 119, 111, 114, 118, 121, 122, 119, 112, 108, 105, 106, 111, 111,
108, 107, 107, 109, 113, 118, 117, 116, 115, 113, 112, 116, 117, 114, 111,
108, 109, 110, 111, 113, 113, 113, 114, 113, 115, 118, 121, 120, 117, 117,
119, 122, 124, 124, 121, 121, 125, -125, -120, -117, -118, -114, -104,
-98, -100, -103, -110, 117, 80, 80, 110, 113, 95, 79, 68, 78, 102, 121,
-126, -123, 126, 117, 123, -118, -111, -118, 125, 114, 111, 110, 109, 110,
112, 105, 98, 96, 102, 115, 122, 117, 109, 111, 120, 123, 120, 115, 110,
110, 109, 110, 112, 111, 107, 107, 111, 113, 116, 116, 115, 113, 113, 113,
111, 112, 113, 111, 107, 107, 108, 111, 114, 113, 113, 114, 117, 120, 119,
118, 117, 116, 116, 118, 118, 117, 116, 117, 119, 121, 124, 126, -128,
-124, -122, -122, -119, -111, -102, -102, -106, -110, -114, 125, 91, 82,
104, 112, 95, 79, 73, 83, 103, 117, 123, 125, 124, 119, 122, -120, -113,
-121, 122, 116, 117, 118, 114, 108, 107, 107, 100, 97, 101, 109, 116, 114,
107, 110, 119, 125, 124, 119, 115, 113, 113, 114, 114, 115, 112, 108, 107,
109, 112, 114, 110, 108, 110, 110, 110, 112, 115, 114, 111, 109, 111, 115,
116, 114, 112, 113, 113, 115, 116, 116, 115, 115, 115, 115, 118, 121, 119,
118, 117, 118, 120, 123, 125, 125, 125, -128, -124, -119, -115, -111,
-107, -108, -108, -106, -105, -122, 93, 75, 100, 116, 100, 80, 74, 79, 95,
112, 120, 127, -128, 119, 118, -123, -110, -114, -128, 118, 116, 117, 114,
108, 108, 107, 103, 97, 99, 107, 116, 116, 110, 110, 119, 125, 125, 122,
118, 114, 114, 113, 114, 116, 113, 105, 103, 108, 114, 116, 111, 107, 107,
111, 114, 115, 115, 113, 112, 112, 111, 114, 116, 114, 112, 112, 113, 115,
116, 117, 116, 116, 115, 114, 116, 118, 118, 117, 117, 116, 119, 122, 123,
124, 124, 126, -128, -124, -120, -118, -117, -113, -110, -108, -107, -107,
-116, 112, 82, 91, 115, 110, 89, 78, 76, 87, 105, 117, 121, 126, 121, 115,
125, -115, -113, -124, 122, 116, 118, 120, 116, 111, 109, 104, 99, 99,
106, 113, 115, 110, 107, 112, 122, 126, 124, 119, 115, 114, 116, 117, 118,
114, 108, 105, 109, 113, 115, 112, 107, 107, 109, 112, 114, 114, 112, 110,
110, 113, 116, 118, 116, 112, 111, 113, 117, 118, 116, 115, 112, 112, 114,
115, 116, 116, 114, 114, 117, 118, 120, 121, 122, 121, 122, 124, -128,
-125, -124, -124, -121, -117, -114, -112, -110, -108, -108, -117, 110, 81,
92, 117, 112, 89, 79, 76, 87, 106, 117, 122, 124, 118, 111, 124, -112,
-110, -123, 121, 116, 119, 122, 118, 113, 108, 102, 98, 99, 106, 112, 114,
108, 105, 111, 121, 125, 124, 120, 116, 115, 116, 117, 119, 118, 112, 106,
107, 109, 111, 112, 111, 109, 109, 109, 110, 113, 116, 114, 113, 112, 113,
114, 115, 113, 113, 113, 113, 114, 114, 115, 114, 114, 114, 114, 114, 116,
117, 117, 117, 117, 117, 119, 121, 122, 121, 121, 124, 127, -125, -123,
-123, -120, -115, -112, -111, -109, -108, -112, 119, 87, 90, 116, 116, 94,
81, 78, 87, 103, 113, 118, 121, 117, 112, 120, -118, -112, -123, 121, 117,
120, 123, 121, 114, 109, 106, 101, 100, 105, 111, 113, 107, 103, 109, 119,
124, 122, 119, 116, 116, 119, 120, 120, 118, 113, 108, 109, 113, 114, 113,
107, 104, 107, 111, 113, 112, 112, 109, 110, 113, 116, 116, 115, 113, 111,
112, 114, 116, 115, 113, 111, 112, 113, 116, 115, 115, 115, 114, 114, 116,
118, 119, 119, 119, 119, 122, 123, 125, 127, -126, -124, -122, -120, -115,
-112, -111, -109, -107, -112, 117, 84, 91, 119, 118, 93, 78, 78, 87, 103,
112, 117, 120, 116, 112, 120, -118, -112, -122, 120, 117, 122, 125, 121,
114, 110, 107, 103, 102, 104, 110, 112, 107, 104, 110, 119, 123, 121, 118,
117, 118, 118, 119, 120, 119, 114, 110, 111, 112, 114, 114, 109, 107, 107,
110, 110, 112, 113, 111, 109, 111, 113, 116, 116, 114, 113, 114, 115, 116,
116, 114, 113, 113, 113, 114, 114, 114, 114, 114, 114, 116, 120, 120, 119,
119, 120, 122, 125, 127, -128, -126, -124, -123, -120, -115, -113, -113,
-110, -107, -112, 117, 86, 94, 122, 119, 93, 79, 81, 89, 103, 112, 116,
118, 115, 110, 119, -117, -111, -123, 120, 117, 123, -128, 124, 115, 110,
107, 104, 104, 106, 110, 110, 104, 103, 109, 119, 122, 119, 116, 117, 119,
119, 120, 121, 119, 114, 112, 112, 114, 115, 113, 108, 106, 109, 110, 110,
110, 110, 109, 110, 113, 114, 115, 115, 114, 114, 115, 116, 116, 116, 115,
112, 113, 115, 115, 114, 114, 113, 114, 117, 117, 117, 117, 118, 119, 121,
123, 124, 125, 126, -128, -125, -122, -120, -118, -118, -116, -112, -108,
-108, -128, 95, 88, 115, 125, 103, 84, 81, 86, 99, 111, 114, 117, 115,
109, 113, -124, -112, -120, 121, 116, 121, -128, 127, 119, 112, 108, 106,
103, 106, 110, 110, 106, 104, 106, 116, 122, 119, 116, 116, 117, 119, 120,
122, 119, 115, 112, 111, 114, 116, 114, 108, 105, 106, 111, 113, 111, 109,
108, 111, 113, 116, 116, 115, 113, 112, 114, 117, 118, 115, 113, 112, 114,
115, 116, 114, 114, 115, 114, 116, 117, 118, 118, 118, 118, 120, 122, 123,
124, 125, 126, -127, -124, -122, -119, -117, -116, -114, -111, -109, -121,
101, 86, 112, 126, 107, 89, 82, 86, 98, 107, 111, 115, 116, 110, 110, 127,
-116, -120, 122, 115, 120, -128, -128, 121, 113, 110, 109, 107, 107, 109,
111, 107, 103, 106, 115, 120, 117, 113, 115, 117, 119, 120, 119, 119, 116,
113, 113, 115, 116, 115, 110, 106, 108, 111, 111, 110, 110, 109, 109, 112,
115, 116, 116, 114, 114, 114, 116, 117, 116, 114, 112, 113, 115, 115, 115,
114, 114, 114, 115, 117, 117, 118, 118, 119, 120, 122, 121, 122, 125, 126,
127, -127, -125, -123, -120, -120, -117, -113, -110, -112, 126, 97, 94,
119, 124, 103, 87, 83, 89, 101, 109, 111, 114, 114, 108, 114, -126, -117,
-124, 120, 116, 123, -127, 126, 118, 113, 111, 108, 108, 109, 109, 109,
107, 104, 107, 116, 118, 115, 114, 115, 117, 118, 119, 118, 118, 115, 114,
113, 114, 115, 113, 110, 108, 110, 114, 112, 110, 110, 111, 113, 114, 114,
115, 114, 114, 114, 115, 116, 116, 115, 114, 114, 117, 117, 115, 114, 114,
115, 116, 116, 116, 116, 118, 117, 119, 120, 121, 122, 123, 125, 127,
-126, -125, -123, -119, -118, -117, -114, -113, -113, 125, 96, 95, 121,
123, 101, 88, 86, 92, 104, 109, 111, 114, 113, 108, 115, -126, -118, -126,
118, 115, 123, -127, 126, 118, 113, 110, 110, 109, 110, 110, 110, 107,
105, 108, 116, 118, 115, 113, 114, 117, 119, 119, 118, 119, 116, 114, 115,
116, 117, 115, 111, 109, 113, 114, 112, 110, 108, 109, 111, 113, 114, 113,
113, 114, 114, 115, 117, 116, 116, 116, 114, 115, 115, 114, 114, 114, 114,
114, 115, 116, 116, 117, 117, 119, 120, 120, 121, 122, 123, 125, 127,
-127, -126, -124, -122, -122, -119, -116, -115, -116, 125, 100, 98, 119,
122, 105, 92, 88, 94, 106, 109, 109, 113, 113, 109, 114, 126, -123, -128,
119, 116, 123, -128, 125, 117, 112, 111, 111, 111, 110, 110, 111, 108,
105, 109, 116, 117, 115, 113, 114, 116, 118, 117, 116, 117, 115, 113, 113,
114, 116, 115, 111, 109, 112, 114, 113, 111, 111, 112, 113, 113, 113, 114,
114, 114, 114, 116, 116, 116, 116, 115, 115, 116, 116, 115, 115, 116, 115,
115, 115, 116, 117, 118, 119, 120, 120, 121, 122, 124, 125, 127, -128,
-127, -125, -122, -121, -120, -119, -117, -117, 127, 102, 98, 119, 122,
106, 95, 90, 96, 106, 110, 110, 114, 115, 110, 114, 125, -124, -128, 119,
115, 120, 126, 124, 118, 114, 112, 112, 111, 111, 112, 112, 109, 107, 110,
116, 117, 115, 114, 113, 116, 118, 116, 116, 117, 116, 115, 115, 117, 117,
116, 111, 110, 112, 113, 113, 112, 110, 111, 113, 113, 113, 114, 115, 115,
116, 115, 116, 116, 116, 115, 115, 116, 116, 115, 116, 115, 115, 116, 116,
116, 117, 117, 118, 119, 120, 121, 121, 124, 125, 127, -128, -127, -125,
-124, -122, -121, -120, -118, -120, 119, 100, 107, 121, 116, 103, 96, 95,
100, 109, 110, 111, 115, 113, 111, 116, 126, -127, 124, 117, 114, 121,
125, 122, 116, 113, 111, 111, 112, 112, 113, 111, 107, 107, 112, 116, 117,
114, 112, 113, 117, 117, 116, 115, 115, 115, 115, 115, 115, 115, 114, 111,
111, 114, 115, 113, 111, 111, 112, 113, 113, 113, 114, 115, 114, 114, 115,
115, 116, 116, 115, 116, 116, 117, 115, 115, 115, 116, 116, 115, 116, 117,
118, 120, 120, 120, 121, 122, 123, 125, 127, -128, -128, -127, -125, -123,
-123, -124, -125, -126, 118, 105, 108, 118, 114, 105, 102, 99, 105, 112,
111, 112, 116, 115, 113, 117, 122, 124, 122, 116, 114, 119, 121, 119, 115,
113, 111, 112, 112, 112, 113, 112, 110, 111, 113, 116, 116, 114, 112, 113,
116, 116, 115, 114, 114, 114, 115, 114, 113, 115, 114, 114, 113, 114, 114,
113, 113, 112, 113, 114, 115, 113, 114, 114, 115, 116, 116, 116, 116, 116,
117, 116, 117, 116, 115, 115, 115, 116, 116, 116, 117, 117, 118, 119, 120,
121, 122, 123, 124, 125, 126, 127, 127, -127, -126, -127, -127, -127,
-126, 125, 112, 107, 116, 117, 111, 108, 104, 105, 112, 113, 113, 116,
117, 113, 114, 118, 120, 121, 118, 112, 114, 118, 118, 115, 113, 111, 112,
114, 113, 114, 115, 113, 111, 113, 115, 115, 115, 113, 110, 113, 114, 113,
114, 114, 113, 114, 115, 115, 117, 116, 115, 114, 114, 114, 113, 114, 113,
113, 113, 113, 113, 114, 114, 114, 115, 116, 116, 117, 116, 116, 116, 116,
116, 116, 116, 115, 116, 118, 117, 117, 117, 118, 118, 119, 120, 121, 122,
123, 123, 125, 126, 127, 126, 126, 126, 125, 126, 127, 126, 120, 114, 112,
117, 116, 112, 110, 108, 110, 115, 114, 114, 117, 116, 114, 115, 117, 118,
118, 116, 113, 114, 116, 115, 115, 112, 112, 114, 115, 115, 114, 114, 113,
114, 114, 114, 114, 114, 113, 112, 113, 114, 114, 114, 114, 114, 116, 117,
115, 116, 116, 115, 115, 114, 114, 114, 115, 113, 113, 115, 115, 115, 115,
115, 115, 116, 117, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 118,
118, 117, 117, 117, 118, 119, 120, 120, 121, 121, 122, 123, 124, 124, 124,
124, 123, 123, 123, 124, 124, 122, 119, 118, 117, 116, 117, 115, 113, 113,
114, 113, 115, 115, 115, 115, 115, 115, 115, 116, 115, 114, 113, 113, 114,
114, 113, 112, 114, 115, 114, 114, 113, 113, 115, 115, 113, 114, 114, 114,
113, 113, 114, 114, 115, 114, 115, 116, 116, 115, 115, 115, 115, 115, 115,
114, 115, 115, 114, 114, 115, 115, 115, 115, 115, 115, 117, 116, 116, 116,
116, 116, 116, 116, 116, 117, 117, 116, 116, 117, 117, 117, 117, 118, 119,
119, 119, 120, 120, 122, 121, 121, 121, 121, 121, 121, 120, 121, 122, 121,
121, 119, 118, 118, 119, 118, 117, 115, 116, 116, 115, 115, 115, 116, 116,
115, 116, 115, 115, 115, 114, 114, 114, 114, 114, 113, 112, 115, 115, 113,
114, 113, 114, 115, 115, 114, 114, 114, 113, 113, 114, 114, 114, 115, 114,
114, 116, 115, 115, 116, 115, 115, 115, 115, 115, 115, 115, 114, 115, 115,
115, 116, 116, 116, 116, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117,
117, 116, 117, 117, 117, 117, 117, 117, 118, 118, 119, 118, 119, 120, 120,
119, 119, 119, 120, 120, 119, 119, 119, 120, 119, 120, 119, 118, 118, 118,
117, 117, 117, 117, 116, 116, 115, 117, 116, 115, 115, 115, 115, 115, 115,
114, 115, 114, 114, 114, 114, 113, 113, 113, 113, 115, 114, 114, 113, 114,
114, 115, 114, 114, 115, 115, 114, 114, 114, 114, 114, 115, 115, 115, 116,
115, 115, 115, 115, 116, 115, 115, 115, 115, 116, 115, 116, 116, 116, 116,
116, 116, 116, 116, 117, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117,
118, 119, 118, 118, 118, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119,
119, 118, 118, 118, 119, 119, 119, 118, 117, 117, 117, 117, 117, 117, 116,
116, 116, 116, 116, 116, 116, 115, 117, 116, 115, 114, 114, 114, 114, 114,
114, 114, 116, 115, 114, 115, 115, 115, 115, 115, 115, 116, 115, 115, 115,
115, 115, 115, 115, 115, 115, 116, 115, 115, 115, 115, 115, 115, 115, 115,
116, 117, 115, 115, 116, 115, 116, 116, 116, 116, 116, 116, 117, 116, 116,
116, 116, 116, 116, 117, 117, 117, 117, 118, 117, 117, 117, 117, 117, 117,
117, 118, 117, 118, 118, 119, 118, 118, 118, 118, 117, 117, 117, 117, 117,
117, 117, 119, 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 117, 116,
116, 116, 116, 116, 116, 116, 115, 115, 116, 115, 115, 115, 115, 115, 116,
116, 116, 115, 116, 115, 115, 115, 115, 115, 115, 115, 115, 116, 117, 115,
115, 115, 116, 115, 115, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117,
118, 117, 117, 117, 117, 117, 117, 116, 116, 117, 117, 117, 118, 117, 117,
117, 118, 117, 117, 117, 117, 117, 117, 118, 117, 117, 117, 117, 117, 117,
117, 117, 117, 116, 116, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116,
115, 116, 116, 116, 115, 115, 115, 115, 116, 116, 116, 117, 116, 116, 115,
115, 116, 115, 115, 115, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
116, 116, 116, 116, 116, 116, 116, 117, 118, 117, 117, 117, 117, 117, 117,
117, 116, 116, 116, 117, 117, 116, 116, 116, 117, 117, 117, 117, 117, 117,
117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 117, 118, 116, 116,
116, 116, 117, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
116, 116, 116, 116, 115, 115, 116, 116, 116, 116, 117, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
116, 116, 116, 116, 117, 117, 117, 117, 118, 117, 116, 117, 117, 117, 117,
116, 116, 116, 116, 117, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 118, 117, 116, 116, 116,
116, 116, 116, 116, 116, 116, 117, 116, 117, 117, 116, 116, 116, 116, 116,
116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
116, 117, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116,
116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116,
116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
116, 116, 116, 116, 117, 117, 116, 116, 116, 116, 117, 116, 116, 116, 116,
116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116,
116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116,
116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116,
116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116,
116, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116,
116, 116, 116, 116, 116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116, 117, 116, 116, 116, 116, 116, 116, 116