From e4736d89a875cd3699c0777c59ebea3e282aa3c1 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 24 Mar 2004 10:20:14 +0000 Subject: [PATCH] * winsup.api/devdsp.c: New file, testing fhandler_dev_dsp code. * winsup.api/devdsp_okay.h: Ditto. --- winsup/testsuite/ChangeLog | 5 + winsup/testsuite/winsup.api/devdsp.c | 618 ++++++++++++++++++++++ winsup/testsuite/winsup.api/devdsp_okay.h | 531 +++++++++++++++++++ 3 files changed, 1154 insertions(+) create mode 100644 winsup/testsuite/winsup.api/devdsp.c create mode 100644 winsup/testsuite/winsup.api/devdsp_okay.h diff --git a/winsup/testsuite/ChangeLog b/winsup/testsuite/ChangeLog index 3a790587e..fa53a2f3f 100644 --- a/winsup/testsuite/ChangeLog +++ b/winsup/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-03-24 Gerd Spalink + + * winsup.api/devdsp.c: New file, testing fhandler_dev_dsp code. + * winsup.api/devdsp_okay.h: Ditto. + 2004-03-06 Christopher Faylor * winsup.api/known_bugs.tcl: Remove mknod01 since mknod now works. diff --git a/winsup/testsuite/winsup.api/devdsp.c b/winsup/testsuite/winsup.api/devdsp.c new file mode 100644 index 000000000..81d664ada --- /dev/null +++ b/winsup/testsuite/winsup.api/devdsp.c @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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) +{ +} diff --git a/winsup/testsuite/winsup.api/devdsp_okay.h b/winsup/testsuite/winsup.api/devdsp_okay.h new file mode 100644 index 000000000..0fefa635c --- /dev/null +++ b/winsup/testsuite/winsup.api/devdsp_okay.h @@ -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 +