Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Dead_Mozay:telegram
rnnoise
rnnoise-0.git20210122.1cbdbcf.obscpio
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File rnnoise-0.git20210122.1cbdbcf.obscpio of Package rnnoise
07070100000000000081A4000000000000000000000001600B393100000025000000000000000000000000000000000000002600000000rnnoise-0.git20210122.1cbdbcf/AUTHORSJean-Marc Valin <jmvalin@jmvalin.ca> 07070100000001000081A4000000000000000000000001600B39310000062D000000000000000000000000000000000000002600000000rnnoise-0.git20210122.1cbdbcf/COPYINGCopyright (c) 2017, Mozilla Copyright (c) 2007-2017, Jean-Marc Valin Copyright (c) 2005-2017, Xiph.Org Foundation Copyright (c) 2003-2004, Mark Borgerding Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.Org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 07070100000002000081A4000000000000000000000001600B393100000E93000000000000000000000000000000000000002A00000000rnnoise-0.git20210122.1cbdbcf/Makefile.amACLOCAL_AMFLAGS = -I m4 AM_CFLAGS = -I$(top_srcdir)/include $(DEPS_CFLAGS) dist_doc_DATA = COPYING AUTHORS README include_HEADERS = include/rnnoise.h lib_LTLIBRARIES = librnnoise.la noinst_HEADERS = src/arch.h \ src/celt_lpc.h \ src/common.h \ src/_kiss_fft_guts.h \ src/kiss_fft.h \ src/opus_types.h \ src/pitch.h \ src/rnn_data.h \ src/rnn.h \ src/tansig_table.h librnnoise_la_SOURCES = \ src/denoise.c \ src/rnn.c \ src/rnn_data.c \ src/rnn_reader.c \ src/pitch.c \ src/kiss_fft.c \ src/celt_lpc.c librnnoise_la_LIBADD = $(DEPS_LIBS) $(lrintf_lib) $(LIBM) librnnoise_la_LDFLAGS = -no-undefined \ -version-info @OP_LT_CURRENT@:@OP_LT_REVISION@:@OP_LT_AGE@ if OP_ENABLE_EXAMPLES noinst_PROGRAMS = examples/rnnoise_demo endif examples_rnnoise_demo_SOURCES = examples/rnnoise_demo.c examples_rnnoise_demo_LDADD = librnnoise.la pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = rnnoise.pc debug: $(MAKE) CFLAGS="${CFLAGS} -O0 -ggdb -DOP_ENABLE_ASSERTIONS" all EXTRA_DIST = \ rnnoise.pc.in \ rnnoise-uninstalled.pc.in \ doc/Doxyfile.in \ doc/Makefile # Targets to build and install just the library without the docs librnnoise install-librnnoise: NO_DOXYGEN = 1 rnnoise: all install-rnnoise: install # Or just the docs docs: doc/doxygen-build.stamp install-docs: @if [ -z "$(NO_DOXYGEN)" ]; then \ ( cd doc && \ echo "Installing documentation in $(DESTDIR)$(docdir)"; \ $(INSTALL) -d $(DESTDIR)$(docdir)/html/search; \ for f in `find html -type f \! -name "installdox"` ; do \ $(INSTALL_DATA) $$f $(DESTDIR)$(docdir)/$$f; \ done ) \ fi doc/doxygen-build.stamp: doc/Doxyfile \ $(top_srcdir)/include/*.h @[ -n "$(NO_DOXYGEN)" ] || ( cd doc && doxygen && touch $(@F) ) if HAVE_DOXYGEN # Or everything (by default) all-local: docs install-data-local: install-docs clean-local: $(RM) -r doc/html $(RM) -r doc/latex $(RM) doc/doxygen-build.stamp uninstall-local: $(RM) -r $(DESTDIR)$(docdir)/html endif # We check this every time make is run, with configure.ac being touched to # trigger an update of the build system files if update_version changes the # current PACKAGE_VERSION (or if package_version was modified manually by a # user with either AUTO_UPDATE=no or no update_version script present - the # latter being the normal case for tarball releases). # # We can't just add the package_version file to CONFIGURE_DEPENDENCIES since # simply running autoconf will not actually regenerate configure for us when # the content of that file changes (due to autoconf dependency checking not # knowing about that without us creating yet another file for it to include). # # The MAKECMDGOALS check is a gnu-make'ism, but will degrade 'gracefully' for # makes that don't support it. The only loss of functionality is not forcing # an update of package_version for `make dist` if AUTO_UPDATE=no, but that is # unlikely to be a real problem for any real user. $(top_srcdir)/configure.ac: force @case "$(MAKECMDGOALS)" in \ dist-hook) exit 0 ;; \ dist-* | dist | distcheck | distclean) _arg=release ;; \ esac; \ if ! $(top_srcdir)/update_version $$_arg 2> /dev/null; then \ if [ ! -e $(top_srcdir)/package_version ]; then \ echo 'PACKAGE_VERSION="unknown"' > $(top_srcdir)/package_version; \ fi; \ . $(top_srcdir)/package_version || exit 1; \ [ "$(PACKAGE_VERSION)" != "$$PACKAGE_VERSION" ] || exit 0; \ fi; \ touch $@ force: # Create a minimal package_version file when make dist is run. dist-hook: echo 'PACKAGE_VERSION="$(PACKAGE_VERSION)"' > $(top_distdir)/package_version .PHONY: rnnoise install-rnnoise docs install-docs 07070100000003000081A4000000000000000000000001600B393100000254000000000000000000000000000000000000002500000000rnnoise-0.git20210122.1cbdbcf/READMERNNoise is a noise suppression library based on a recurrent neural network. To compile, just type: % ./autogen.sh % ./configure % make Optionally: % make install While it is meant to be used as a library, a simple command-line tool is provided as an example. It operates on RAW 16-bit (machine endian) mono PCM files sampled at 48 kHz. It can be used as: ./examples/rnnoise_demo <noisy speech> <output denoised> The output is also a 16-bit raw PCM file. The latest version of the source is available from https://gitlab.xiph.org/xiph/rnnoise . The github repository is a convenience copy. 07070100000004000081A4000000000000000000000001600B393100000137000000000000000000000000000000000000002E00000000rnnoise-0.git20210122.1cbdbcf/TRAINING-README(1) cd src ; ./compile.sh (2) ./denoise_training signal.raw noise.raw count > training.f32 (note the matrix size and replace 500000 87 below) (3) cd training ; ./bin2hdf5.py ../src/training.f32 500000 87 training.h5 (4) ./rnn_train.py (5) ./dump_rnn.py weights.hdf5 ../src/rnn_data.c ../src/rnn_data.h 07070100000005000081ED000000000000000000000001600B3931000000E3000000000000000000000000000000000000002900000000rnnoise-0.git20210122.1cbdbcf/autogen.sh#!/bin/sh # Run this to set up the build system: configure, makefiles, etc. set -e srcdir=`dirname $0` test -n "$srcdir" && cd "$srcdir" echo "Updating build configuration files for rnnoise, please wait...." autoreconf -isf 07070100000006000081A4000000000000000000000001600B393100000EC2000000000000000000000000000000000000002B00000000rnnoise-0.git20210122.1cbdbcf/configure.ac# autoconf source script for generating configure dnl The package_version file will be automatically synced to the git revision dnl by the update_version script when configured in the repository, but will dnl remain constant in tarball releases unless it is manually edited. m4_define([CURRENT_VERSION], m4_esyscmd([ ./update_version 2>/dev/null || true if test -e package_version; then . ./package_version printf "$PACKAGE_VERSION" else printf "unknown" fi ])) AC_INIT([rnnoise],[CURRENT_VERSION],[jmvalin@jmvalin.ca]) AC_CONFIG_SRCDIR([src/denoise.c]) AC_CONFIG_MACRO_DIR([m4]) AC_USE_SYSTEM_EXTENSIONS AC_SYS_LARGEFILE AM_INIT_AUTOMAKE([1.11 foreign no-define dist-zip subdir-objects]) AM_MAINTAINER_MODE([enable]) AC_C_INLINE LT_INIT m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) AC_DEFINE([RNNOISE_BUILD], [], [This is a build of the library]) dnl Library versioning for libtool. dnl Please update these for releases. dnl CURRENT, REVISION, AGE dnl - library source changed -> increment REVISION dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0 dnl - interfaces added -> increment AGE dnl - interfaces removed -> AGE = 0 OP_LT_CURRENT=4 OP_LT_REVISION=1 OP_LT_AGE=4 AC_SUBST(OP_LT_CURRENT) AC_SUBST(OP_LT_REVISION) AC_SUBST(OP_LT_AGE) CC_CHECK_CFLAGS_APPEND( [-pedantic -Wall -Wextra -Wno-sign-compare -Wno-parentheses -Wno-long-long]) # Platform-specific tweaks case $host in *-mingw*) # -std=c89 causes some warnings under mingw. CC_CHECK_CFLAGS_APPEND([-U__STRICT_ANSI__]) # We need WINNT>=0x501 (WindowsXP) for getaddrinfo/freeaddrinfo. # It's okay to define this even when HTTP support is disabled, as it only # affects header declarations, not linking (unless we actually use some # XP-only functions). AC_DEFINE_UNQUOTED(_WIN32_WINNT,0x501, [We need at least WindowsXP for getaddrinfo/freeaddrinfo]) host_mingw=true ;; esac AM_CONDITIONAL(OP_WIN32, test "$host_mingw" = "true") AC_ARG_ENABLE([assertions], AS_HELP_STRING([--enable-assertions], [Enable assertions in code]),, enable_assertions=no) AS_IF([test "$enable_assertions" = "yes"], [ AC_DEFINE([OP_ENABLE_ASSERTIONS], [1], [Enable assertions in code]) ]) AC_ARG_ENABLE([examples], AS_HELP_STRING([--disable-examples], [Do not build example applications]),, enable_examples=yes) AM_CONDITIONAL([OP_ENABLE_EXAMPLES], [test "$enable_examples" = "yes"]) AS_CASE(["$ac_cv_search_lrintf"], ["no"],[], ["none required"],[], [lrintf_lib="$ac_cv_search_lrintf"]) LT_LIB_M AC_SUBST([lrintf_lib]) CC_ATTRIBUTE_VISIBILITY([default], [ CC_FLAG_VISIBILITY([CFLAGS="${CFLAGS} -fvisibility=hidden"]) ]) dnl Check for doxygen AC_ARG_ENABLE([doc], AS_HELP_STRING([--disable-doc], [Do not build API documentation]),, [enable_doc=yes] ) AS_IF([test "$enable_doc" = "yes"], [ AC_CHECK_PROG([HAVE_DOXYGEN], [doxygen], [yes], [no]) AC_CHECK_PROG([HAVE_DOT], [dot], [yes], [no]) ],[ HAVE_DOXYGEN=no ]) AM_CONDITIONAL([HAVE_DOXYGEN], [test "$HAVE_DOXYGEN" = "yes"]) AC_CONFIG_FILES([ Makefile rnnoise.pc rnnoise-uninstalled.pc doc/Doxyfile ]) AC_CONFIG_HEADERS([config.h]) AC_OUTPUT AC_MSG_NOTICE([ ------------------------------------------------------------------------ $PACKAGE_NAME $PACKAGE_VERSION: Automatic configuration OK. Assertions ................... ${enable_assertions} Hidden visibility ............ ${cc_cv_flag_visibility} API code examples ............ ${enable_examples} API documentation ............ ${enable_doc} ------------------------------------------------------------------------ ]) 07070100000007000041ED000000000000000000000001600B393100000000000000000000000000000000000000000000002200000000rnnoise-0.git20210122.1cbdbcf/doc07070100000008000081A4000000000000000000000001600B393100000206000000000000000000000000000000000000002E00000000rnnoise-0.git20210122.1cbdbcf/doc/Doxyfile.in# Process with doxygen to generate API documentation PROJECT_NAME = @PACKAGE_NAME@ PROJECT_NUMBER = @PACKAGE_VERSION@ PROJECT_BRIEF = "RNN-based noise suppressor." INPUT = @top_srcdir@/include/rnnoise.h OPTIMIZE_OUTPUT_FOR_C = YES QUIET = YES WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = YES JAVADOC_AUTOBRIEF = YES SORT_MEMBER_DOCS = NO HAVE_DOT = @HAVE_DOT@ 07070100000009000041ED000000000000000000000001600B393100000000000000000000000000000000000000000000002700000000rnnoise-0.git20210122.1cbdbcf/examples0707010000000A000081A4000000000000000000000001600B393100000861000000000000000000000000000000000000003600000000rnnoise-0.git20210122.1cbdbcf/examples/rnnoise_demo.c/* Copyright (c) 2018 Gregor Richards * Copyright (c) 2017 Mozilla */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include <stdio.h> #include "rnnoise.h" #define FRAME_SIZE 480 int main(int argc, char **argv) { int i; int first = 1; float x[FRAME_SIZE]; FILE *f1, *fout; DenoiseState *st; st = rnnoise_create(NULL); if (argc!=3) { fprintf(stderr, "usage: %s <noisy speech> <output denoised>\n", argv[0]); return 1; } f1 = fopen(argv[1], "rb"); fout = fopen(argv[2], "wb"); while (1) { short tmp[FRAME_SIZE]; fread(tmp, sizeof(short), FRAME_SIZE, f1); if (feof(f1)) break; for (i=0;i<FRAME_SIZE;i++) x[i] = tmp[i]; rnnoise_process_frame(st, x, x); for (i=0;i<FRAME_SIZE;i++) tmp[i] = x[i]; if (!first) fwrite(tmp, sizeof(short), FRAME_SIZE, fout); first = 0; } rnnoise_destroy(st); fclose(f1); fclose(fout); return 0; } 0707010000000B000041ED000000000000000000000001600B393100000000000000000000000000000000000000000000002600000000rnnoise-0.git20210122.1cbdbcf/include0707010000000C000081A4000000000000000000000001600B393100000CEB000000000000000000000000000000000000003000000000rnnoise-0.git20210122.1cbdbcf/include/rnnoise.h/* Copyright (c) 2018 Gregor Richards * Copyright (c) 2017 Mozilla */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef RNNOISE_H #define RNNOISE_H 1 #include <stdio.h> #ifdef __cplusplus extern "C" { #endif #ifndef RNNOISE_EXPORT # if defined(WIN32) # if defined(RNNOISE_BUILD) && defined(DLL_EXPORT) # define RNNOISE_EXPORT __declspec(dllexport) # else # define RNNOISE_EXPORT # endif # elif defined(__GNUC__) && defined(RNNOISE_BUILD) # define RNNOISE_EXPORT __attribute__ ((visibility ("default"))) # else # define RNNOISE_EXPORT # endif #endif typedef struct DenoiseState DenoiseState; typedef struct RNNModel RNNModel; /** * Return the size of DenoiseState */ RNNOISE_EXPORT int rnnoise_get_size(); /** * Return the number of samples processed by rnnoise_process_frame at a time */ RNNOISE_EXPORT int rnnoise_get_frame_size(); /** * Initializes a pre-allocated DenoiseState * * If model is NULL the default model is used. * * See: rnnoise_create() and rnnoise_model_from_file() */ RNNOISE_EXPORT int rnnoise_init(DenoiseState *st, RNNModel *model); /** * Allocate and initialize a DenoiseState * * If model is NULL the default model is used. * * The returned pointer MUST be freed with rnnoise_destroy(). */ RNNOISE_EXPORT DenoiseState *rnnoise_create(RNNModel *model); /** * Free a DenoiseState produced by rnnoise_create. * * The optional custom model must be freed by rnnoise_model_free() after. */ RNNOISE_EXPORT void rnnoise_destroy(DenoiseState *st); /** * Denoise a frame of samples * * in and out must be at least rnnoise_get_frame_size() large. */ RNNOISE_EXPORT float rnnoise_process_frame(DenoiseState *st, float *out, const float *in); /** * Load a model from a file * * It must be deallocated with rnnoise_model_free() */ RNNOISE_EXPORT RNNModel *rnnoise_model_from_file(FILE *f); /** * Free a custom model * * It must be called after all the DenoiseStates referring to it are freed. */ RNNOISE_EXPORT void rnnoise_model_free(RNNModel *model); #ifdef __cplusplus } #endif #endif 0707010000000D000041ED000000000000000000000001600B393100000000000000000000000000000000000000000000002100000000rnnoise-0.git20210122.1cbdbcf/m40707010000000E000081A4000000000000000000000001600B3931000029E7000000000000000000000000000000000000002F00000000rnnoise-0.git20210122.1cbdbcf/m4/attributes.m4dnl Macros to check the presence of generic (non-typed) symbols. dnl Copyright (c) 2006-2007 Diego Pettenò <flameeyes@gmail.com> dnl Copyright (c) 2006-2007 xine project dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2, or (at your option) dnl any later version. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA dnl 02110-1301, USA. dnl dnl As a special exception, the copyright owners of the dnl macro gives unlimited permission to copy, distribute and modify the dnl configure scripts that are the output of Autoconf when processing the dnl Macro. You need not follow the terms of the GNU General Public dnl License when using or distributing such scripts, even though portions dnl of the text of the Macro appear in them. The GNU General Public dnl License (GPL) does govern all other use of the material that dnl constitutes the Autoconf Macro. dnl dnl This special exception to the GPL applies to versions of the dnl Autoconf Macro released by this project. When you make and dnl distribute a modified version of the Autoconf Macro, you may extend dnl this special exception to the GPL to apply to your modified version as dnl well. dnl Check if the flag is supported by compiler dnl CC_CHECK_CFLAGS_SILENT([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) AC_DEFUN([CC_CHECK_CFLAGS_SILENT], [ AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]), [ac_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $1" AC_LINK_IFELSE([AC_LANG_SOURCE([int main() { return 0; }])], [eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"], [eval "AS_TR_SH([cc_cv_cflags_$1])='no'"]) CFLAGS="$ac_save_CFLAGS" ]) AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], [$2], [$3]) ]) dnl Check if the flag is supported by compiler (cacheable) dnl CC_CHECK_CFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) AC_DEFUN([CC_CHECK_CFLAGS], [ AC_CACHE_CHECK([if $CC supports $1 flag], AS_TR_SH([cc_cv_cflags_$1]), CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here! ) AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], [$2], [$3]) ]) dnl CC_CHECK_CFLAG_APPEND(FLAG, [action-if-found], [action-if-not-found]) dnl Check for CFLAG and appends them to CFLAGS if supported AC_DEFUN([CC_CHECK_CFLAG_APPEND], [ AC_CACHE_CHECK([if $CC supports $1 flag], AS_TR_SH([cc_cv_cflags_$1]), CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here! ) AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], [CFLAGS="$CFLAGS $1"; $2], [$3]) ]) dnl CC_CHECK_CFLAGS_APPEND([FLAG1 FLAG2], [action-if-found], [action-if-not]) AC_DEFUN([CC_CHECK_CFLAGS_APPEND], [ for flag in $1; do CC_CHECK_CFLAG_APPEND($flag, [$2], [$3]) done ]) dnl Check if the flag is supported by linker (cacheable) dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) AC_DEFUN([CC_CHECK_LDFLAGS], [ AC_CACHE_CHECK([if $CC supports $1 flag], AS_TR_SH([cc_cv_ldflags_$1]), [ac_save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $1" AC_LINK_IFELSE([AC_LANG_SOURCE([int main() { return 1; }])], [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"], [eval "AS_TR_SH([cc_cv_ldflags_$1])="]) LDFLAGS="$ac_save_LDFLAGS" ]) AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes], [$2], [$3]) ]) dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for dnl the current linker to avoid undefined references in a shared object. AC_DEFUN([CC_NOUNDEFINED], [ dnl We check $host for which systems to enable this for. AC_REQUIRE([AC_CANONICAL_HOST]) case $host in dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads dnl are requested, as different implementations are present; to avoid problems dnl use -Wl,-z,defs only for those platform not behaving this way. *-freebsd* | *-openbsd*) ;; *) dnl First of all check for the --no-undefined variant of GNU ld. This allows dnl for a much more readable commandline, so that people can understand what dnl it does without going to look for what the heck -z defs does. for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"]) break done ;; esac AC_SUBST([LDFLAGS_NOUNDEFINED]) ]) dnl Check for a -Werror flag or equivalent. -Werror is the GCC dnl and ICC flag that tells the compiler to treat all the warnings dnl as fatal. We usually need this option to make sure that some dnl constructs (like attributes) are not simply ignored. dnl dnl Other compilers don't support -Werror per se, but they support dnl an equivalent flag: dnl - Sun Studio compiler supports -errwarn=%all AC_DEFUN([CC_CHECK_WERROR], [ AC_CACHE_CHECK( [for $CC way to treat warnings as errors], [cc_cv_werror], [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror], [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])]) ]) ]) AC_DEFUN([CC_CHECK_ATTRIBUTE], [ AC_REQUIRE([CC_CHECK_WERROR]) AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))], AS_TR_SH([cc_cv_attribute_$1]), [ac_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $cc_cv_werror" AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])], [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"], [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"]) CFLAGS="$ac_save_CFLAGS" ]) AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes], [AC_DEFINE( AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1, [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))] ) $4], [$5]) ]) AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [ CC_CHECK_ATTRIBUTE( [constructor],, [extern void foo(); void __attribute__((constructor)) ctor() { foo(); }], [$1], [$2]) ]) AC_DEFUN([CC_ATTRIBUTE_DESTRUCTOR], [ CC_CHECK_ATTRIBUTE( [destructor],, [extern void foo(); void __attribute__((destructor)) dtor() { foo(); }], [$1], [$2]) ]) AC_DEFUN([CC_ATTRIBUTE_FORMAT], [ CC_CHECK_ATTRIBUTE( [format], [format(printf, n, n)], [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }], [$1], [$2]) ]) AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [ CC_CHECK_ATTRIBUTE( [format_arg], [format_arg(printf)], [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }], [$1], [$2]) ]) AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [ CC_CHECK_ATTRIBUTE( [visibility_$1], [visibility("$1")], [void __attribute__((visibility("$1"))) $1_function() { }], [$2], [$3]) ]) AC_DEFUN([CC_ATTRIBUTE_NONNULL], [ CC_CHECK_ATTRIBUTE( [nonnull], [nonnull()], [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }], [$1], [$2]) ]) AC_DEFUN([CC_ATTRIBUTE_UNUSED], [ CC_CHECK_ATTRIBUTE( [unused], , [void some_function(void *foo, __attribute__((unused)) void *bar);], [$1], [$2]) ]) AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [ CC_CHECK_ATTRIBUTE( [sentinel], , [void some_function(void *foo, ...) __attribute__((sentinel));], [$1], [$2]) ]) AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [ CC_CHECK_ATTRIBUTE( [deprecated], , [void some_function(void *foo, ...) __attribute__((deprecated));], [$1], [$2]) ]) AC_DEFUN([CC_ATTRIBUTE_ALIAS], [ CC_CHECK_ATTRIBUTE( [alias], [weak, alias], [void other_function(void *foo) { } void some_function(void *foo) __attribute__((weak, alias("other_function")));], [$1], [$2]) ]) AC_DEFUN([CC_ATTRIBUTE_MALLOC], [ CC_CHECK_ATTRIBUTE( [malloc], , [void * __attribute__((malloc)) my_alloc(int n);], [$1], [$2]) ]) AC_DEFUN([CC_ATTRIBUTE_PACKED], [ CC_CHECK_ATTRIBUTE( [packed], , [struct astructure { char a; int b; long c; void *d; } __attribute__((packed)); char assert@<:@(sizeof(struct astructure) == (sizeof(char)+sizeof(int)+sizeof(long)+sizeof(void*)))-1@:>@;], [$1], [$2]) ]) AC_DEFUN([CC_ATTRIBUTE_CONST], [ CC_CHECK_ATTRIBUTE( [const], , [int __attribute__((const)) twopow(int n) { return 1 << n; } ], [$1], [$2]) ]) AC_DEFUN([CC_FLAG_VISIBILITY], [ AC_REQUIRE([CC_CHECK_WERROR]) AC_CACHE_CHECK([if $CC supports -fvisibility=hidden], [cc_cv_flag_visibility], [cc_flag_visibility_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $cc_cv_werror" CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden], cc_cv_flag_visibility='yes', cc_cv_flag_visibility='no') CFLAGS="$cc_flag_visibility_save_CFLAGS"]) AS_IF([test "x$cc_cv_flag_visibility" = "xyes"], [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1, [Define this if the compiler supports the -fvisibility flag]) $1], [$2]) ]) AC_DEFUN([CC_FUNC_EXPECT], [ AC_REQUIRE([CC_CHECK_WERROR]) AC_CACHE_CHECK([if compiler has __builtin_expect function], [cc_cv_func_expect], [ac_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $cc_cv_werror" AC_COMPILE_IFELSE([AC_LANG_SOURCE( [int some_function() { int a = 3; return (int)__builtin_expect(a, 3); }])], [cc_cv_func_expect=yes], [cc_cv_func_expect=no]) CFLAGS="$ac_save_CFLAGS" ]) AS_IF([test "x$cc_cv_func_expect" = "xyes"], [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1, [Define this if the compiler supports __builtin_expect() function]) $1], [$2]) ]) AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [ AC_REQUIRE([CC_CHECK_WERROR]) AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported], [cc_cv_attribute_aligned], [ac_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $cc_cv_werror" for cc_attribute_align_try in 64 32 16 8 4 2; do AC_COMPILE_IFELSE([AC_LANG_SOURCE([ int main() { static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0; return c; }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break]) done CFLAGS="$ac_save_CFLAGS" ]) if test "x$cc_cv_attribute_aligned" != "x"; then AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned], [Define the highest alignment supported]) fi ]) 0707010000000F000081A4000000000000000000000001600B393100000140000000000000000000000000000000000000003800000000rnnoise-0.git20210122.1cbdbcf/rnnoise-uninstalled.pc.in# rnnoise uninstalled pkg-config file prefix= exec_prefix= libdir=${pcfiledir}/.libs includedir=${pcfiledir}/@top_srcdir@/include Name: rnnoise uninstalled Description: RNN-based noise suppression (not installed) Version: @PACKAGE_VERSION@ Conflicts: Libs: ${libdir}/librnnoise.la @lrintf_lib@ Cflags: -I${includedir} 07070100000010000081A4000000000000000000000001600B393100000125000000000000000000000000000000000000002C00000000rnnoise-0.git20210122.1cbdbcf/rnnoise.pc.in# rnnoise installed pkg-config file prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: rnnoise Description: RNN-based noise suppression Version: @PACKAGE_VERSION@ Conflicts: Libs: -L${libdir} -lrnnoise Libs.private: @lrintf_lib@ Cflags: -I${includedir}/ 07070100000011000041ED000000000000000000000001600B393100000000000000000000000000000000000000000000002200000000rnnoise-0.git20210122.1cbdbcf/src07070100000012000081A4000000000000000000000001600B39310000177A000000000000000000000000000000000000003300000000rnnoise-0.git20210122.1cbdbcf/src/_kiss_fft_guts.h/*Copyright (c) 2003-2004, Mark Borgerding All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/ #ifndef KISS_FFT_GUTS_H #define KISS_FFT_GUTS_H #define MIN(a,b) ((a)<(b) ? (a):(b)) #define MAX(a,b) ((a)>(b) ? (a):(b)) /* kiss_fft.h defines kiss_fft_scalar as either short or a float type and defines typedef struct { kiss_fft_scalar r; kiss_fft_scalar i; }kiss_fft_cpx; */ #include "kiss_fft.h" /* Explanation of macros dealing with complex math: C_MUL(m,a,b) : m = a*b C_FIXDIV( c , div ) : if a fixed point impl., c /= div. noop otherwise C_SUB( res, a,b) : res = a - b C_SUBFROM( res , a) : res -= a C_ADDTO( res , a) : res += a * */ #ifdef FIXED_POINT #include "arch.h" #define SAMP_MAX 2147483647 #define TWID_MAX 32767 #define TRIG_UPSCALE 1 #define SAMP_MIN -SAMP_MAX # define S_MUL(a,b) MULT16_32_Q15(b, a) # define C_MUL(m,a,b) \ do{ (m).r = SUB32_ovflw(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \ (m).i = ADD32_ovflw(S_MUL((a).r,(b).i) , S_MUL((a).i,(b).r)); }while(0) # define C_MULC(m,a,b) \ do{ (m).r = ADD32_ovflw(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \ (m).i = SUB32_ovflw(S_MUL((a).i,(b).r) , S_MUL((a).r,(b).i)); }while(0) # define C_MULBYSCALAR( c, s ) \ do{ (c).r = S_MUL( (c).r , s ) ;\ (c).i = S_MUL( (c).i , s ) ; }while(0) # define DIVSCALAR(x,k) \ (x) = S_MUL( x, (TWID_MAX-((k)>>1))/(k)+1 ) # define C_FIXDIV(c,div) \ do { DIVSCALAR( (c).r , div); \ DIVSCALAR( (c).i , div); }while (0) #define C_ADD( res, a,b)\ do {(res).r=ADD32_ovflw((a).r,(b).r); (res).i=ADD32_ovflw((a).i,(b).i); \ }while(0) #define C_SUB( res, a,b)\ do {(res).r=SUB32_ovflw((a).r,(b).r); (res).i=SUB32_ovflw((a).i,(b).i); \ }while(0) #define C_ADDTO( res , a)\ do {(res).r = ADD32_ovflw((res).r, (a).r); (res).i = ADD32_ovflw((res).i,(a).i);\ }while(0) #define C_SUBFROM( res , a)\ do {(res).r = ADD32_ovflw((res).r,(a).r); (res).i = SUB32_ovflw((res).i,(a).i); \ }while(0) #if defined(OPUS_ARM_INLINE_ASM) #include "arm/kiss_fft_armv4.h" #endif #if defined(OPUS_ARM_INLINE_EDSP) #include "arm/kiss_fft_armv5e.h" #endif #if defined(MIPSr1_ASM) #include "mips/kiss_fft_mipsr1.h" #endif #else /* not FIXED_POINT*/ # define S_MUL(a,b) ( (a)*(b) ) #define C_MUL(m,a,b) \ do{ (m).r = (a).r*(b).r - (a).i*(b).i;\ (m).i = (a).r*(b).i + (a).i*(b).r; }while(0) #define C_MULC(m,a,b) \ do{ (m).r = (a).r*(b).r + (a).i*(b).i;\ (m).i = (a).i*(b).r - (a).r*(b).i; }while(0) #define C_MUL4(m,a,b) C_MUL(m,a,b) # define C_FIXDIV(c,div) /* NOOP */ # define C_MULBYSCALAR( c, s ) \ do{ (c).r *= (s);\ (c).i *= (s); }while(0) #endif #ifndef CHECK_OVERFLOW_OP # define CHECK_OVERFLOW_OP(a,op,b) /* noop */ #endif #ifndef C_ADD #define C_ADD( res, a,b)\ do { \ CHECK_OVERFLOW_OP((a).r,+,(b).r)\ CHECK_OVERFLOW_OP((a).i,+,(b).i)\ (res).r=(a).r+(b).r; (res).i=(a).i+(b).i; \ }while(0) #define C_SUB( res, a,b)\ do { \ CHECK_OVERFLOW_OP((a).r,-,(b).r)\ CHECK_OVERFLOW_OP((a).i,-,(b).i)\ (res).r=(a).r-(b).r; (res).i=(a).i-(b).i; \ }while(0) #define C_ADDTO( res , a)\ do { \ CHECK_OVERFLOW_OP((res).r,+,(a).r)\ CHECK_OVERFLOW_OP((res).i,+,(a).i)\ (res).r += (a).r; (res).i += (a).i;\ }while(0) #define C_SUBFROM( res , a)\ do {\ CHECK_OVERFLOW_OP((res).r,-,(a).r)\ CHECK_OVERFLOW_OP((res).i,-,(a).i)\ (res).r -= (a).r; (res).i -= (a).i; \ }while(0) #endif /* C_ADD defined */ #ifdef FIXED_POINT /*# define KISS_FFT_COS(phase) TRIG_UPSCALE*floor(MIN(32767,MAX(-32767,.5+32768 * cos (phase)))) # define KISS_FFT_SIN(phase) TRIG_UPSCALE*floor(MIN(32767,MAX(-32767,.5+32768 * sin (phase))))*/ # define KISS_FFT_COS(phase) floor(.5+TWID_MAX*cos (phase)) # define KISS_FFT_SIN(phase) floor(.5+TWID_MAX*sin (phase)) # define HALF_OF(x) ((x)>>1) #elif defined(USE_SIMD) # define KISS_FFT_COS(phase) _mm_set1_ps( cos(phase) ) # define KISS_FFT_SIN(phase) _mm_set1_ps( sin(phase) ) # define HALF_OF(x) ((x)*_mm_set1_ps(.5f)) #else # define KISS_FFT_COS(phase) (kiss_fft_scalar) cos(phase) # define KISS_FFT_SIN(phase) (kiss_fft_scalar) sin(phase) # define HALF_OF(x) ((x)*.5f) #endif #define kf_cexp(x,phase) \ do{ \ (x)->r = KISS_FFT_COS(phase);\ (x)->i = KISS_FFT_SIN(phase);\ }while(0) #define kf_cexp2(x,phase) \ do{ \ (x)->r = TRIG_UPSCALE*celt_cos_norm((phase));\ (x)->i = TRIG_UPSCALE*celt_cos_norm((phase)-32768);\ }while(0) #endif /* KISS_FFT_GUTS_H */ 07070100000013000081A4000000000000000000000001600B393100001DCC000000000000000000000000000000000000002900000000rnnoise-0.git20210122.1cbdbcf/src/arch.h/* Copyright (c) 2003-2008 Jean-Marc Valin Copyright (c) 2007-2008 CSIRO Copyright (c) 2007-2009 Xiph.Org Foundation Written by Jean-Marc Valin */ /** @file arch.h @brief Various architecture definitions for CELT */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef ARCH_H #define ARCH_H #include "opus_types.h" #include "common.h" # if !defined(__GNUC_PREREQ) # if defined(__GNUC__)&&defined(__GNUC_MINOR__) # define __GNUC_PREREQ(_maj,_min) \ ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min)) # else # define __GNUC_PREREQ(_maj,_min) 0 # endif # endif #define CELT_SIG_SCALE 32768.f #define celt_fatal(str) _celt_fatal(str, __FILE__, __LINE__); #ifdef ENABLE_ASSERTIONS #include <stdio.h> #include <stdlib.h> #ifdef __GNUC__ __attribute__((noreturn)) #endif static OPUS_INLINE void _celt_fatal(const char *str, const char *file, int line) { fprintf (stderr, "Fatal (internal) error in %s, line %d: %s\n", file, line, str); abort(); } #define celt_assert(cond) {if (!(cond)) {celt_fatal("assertion failed: " #cond);}} #define celt_assert2(cond, message) {if (!(cond)) {celt_fatal("assertion failed: " #cond "\n" message);}} #else #define celt_assert(cond) #define celt_assert2(cond, message) #endif #define IMUL32(a,b) ((a)*(b)) #define MIN16(a,b) ((a) < (b) ? (a) : (b)) /**< Minimum 16-bit value. */ #define MAX16(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 16-bit value. */ #define MIN32(a,b) ((a) < (b) ? (a) : (b)) /**< Minimum 32-bit value. */ #define MAX32(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 32-bit value. */ #define IMIN(a,b) ((a) < (b) ? (a) : (b)) /**< Minimum int value. */ #define IMAX(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum int value. */ #define UADD32(a,b) ((a)+(b)) #define USUB32(a,b) ((a)-(b)) /* Set this if opus_int64 is a native type of the CPU. */ /* Assume that all LP64 architectures have fast 64-bit types; also x86_64 (which can be ILP32 for x32) and Win64 (which is LLP64). */ #if defined(__x86_64__) || defined(__LP64__) || defined(_WIN64) #define OPUS_FAST_INT64 1 #else #define OPUS_FAST_INT64 0 #endif #define PRINT_MIPS(file) #ifdef FIXED_POINT typedef opus_int16 opus_val16; typedef opus_int32 opus_val32; typedef opus_int64 opus_val64; typedef opus_val32 celt_sig; typedef opus_val16 celt_norm; typedef opus_val32 celt_ener; #define Q15ONE 32767 #define SIG_SHIFT 12 /* Safe saturation value for 32-bit signals. Should be less than 2^31*(1-0.85) to avoid blowing up on DC at deemphasis.*/ #define SIG_SAT (300000000) #define NORM_SCALING 16384 #define DB_SHIFT 10 #define EPSILON 1 #define VERY_SMALL 0 #define VERY_LARGE16 ((opus_val16)32767) #define Q15_ONE ((opus_val16)32767) #define SCALEIN(a) (a) #define SCALEOUT(a) (a) #define ABS16(x) ((x) < 0 ? (-(x)) : (x)) #define ABS32(x) ((x) < 0 ? (-(x)) : (x)) static OPUS_INLINE opus_int16 SAT16(opus_int32 x) { return x > 32767 ? 32767 : x < -32768 ? -32768 : (opus_int16)x; } #ifdef FIXED_DEBUG #include "fixed_debug.h" #else #include "fixed_generic.h" #ifdef OPUS_ARM_PRESUME_AARCH64_NEON_INTR #include "arm/fixed_arm64.h" #elif OPUS_ARM_INLINE_EDSP #include "arm/fixed_armv5e.h" #elif defined (OPUS_ARM_INLINE_ASM) #include "arm/fixed_armv4.h" #elif defined (BFIN_ASM) #include "fixed_bfin.h" #elif defined (TI_C5X_ASM) #include "fixed_c5x.h" #elif defined (TI_C6X_ASM) #include "fixed_c6x.h" #endif #endif #else /* FIXED_POINT */ typedef float opus_val16; typedef float opus_val32; typedef float opus_val64; typedef float celt_sig; typedef float celt_norm; typedef float celt_ener; #ifdef FLOAT_APPROX /* This code should reliably detect NaN/inf even when -ffast-math is used. Assumes IEEE 754 format. */ static OPUS_INLINE int celt_isnan(float x) { union {float f; opus_uint32 i;} in; in.f = x; return ((in.i>>23)&0xFF)==0xFF && (in.i&0x007FFFFF)!=0; } #else #ifdef __FAST_MATH__ #error Cannot build libopus with -ffast-math unless FLOAT_APPROX is defined. This could result in crashes on extreme (e.g. NaN) input #endif #define celt_isnan(x) ((x)!=(x)) #endif #define Q15ONE 1.0f #define NORM_SCALING 1.f #define EPSILON 1e-15f #define VERY_SMALL 1e-30f #define VERY_LARGE16 1e15f #define Q15_ONE ((opus_val16)1.f) /* This appears to be the same speed as C99's fabsf() but it's more portable. */ #define ABS16(x) ((float)fabs(x)) #define ABS32(x) ((float)fabs(x)) #define QCONST16(x,bits) (x) #define QCONST32(x,bits) (x) #define NEG16(x) (-(x)) #define NEG32(x) (-(x)) #define NEG32_ovflw(x) (-(x)) #define EXTRACT16(x) (x) #define EXTEND32(x) (x) #define SHR16(a,shift) (a) #define SHL16(a,shift) (a) #define SHR32(a,shift) (a) #define SHL32(a,shift) (a) #define PSHR32(a,shift) (a) #define VSHR32(a,shift) (a) #define PSHR(a,shift) (a) #define SHR(a,shift) (a) #define SHL(a,shift) (a) #define SATURATE(x,a) (x) #define SATURATE16(x) (x) #define ROUND16(a,shift) (a) #define SROUND16(a,shift) (a) #define HALF16(x) (.5f*(x)) #define HALF32(x) (.5f*(x)) #define ADD16(a,b) ((a)+(b)) #define SUB16(a,b) ((a)-(b)) #define ADD32(a,b) ((a)+(b)) #define SUB32(a,b) ((a)-(b)) #define ADD32_ovflw(a,b) ((a)+(b)) #define SUB32_ovflw(a,b) ((a)-(b)) #define MULT16_16_16(a,b) ((a)*(b)) #define MULT16_16(a,b) ((opus_val32)(a)*(opus_val32)(b)) #define MAC16_16(c,a,b) ((c)+(opus_val32)(a)*(opus_val32)(b)) #define MULT16_32_Q15(a,b) ((a)*(b)) #define MULT16_32_Q16(a,b) ((a)*(b)) #define MULT32_32_Q31(a,b) ((a)*(b)) #define MAC16_32_Q15(c,a,b) ((c)+(a)*(b)) #define MAC16_32_Q16(c,a,b) ((c)+(a)*(b)) #define MULT16_16_Q11_32(a,b) ((a)*(b)) #define MULT16_16_Q11(a,b) ((a)*(b)) #define MULT16_16_Q13(a,b) ((a)*(b)) #define MULT16_16_Q14(a,b) ((a)*(b)) #define MULT16_16_Q15(a,b) ((a)*(b)) #define MULT16_16_P15(a,b) ((a)*(b)) #define MULT16_16_P13(a,b) ((a)*(b)) #define MULT16_16_P14(a,b) ((a)*(b)) #define MULT16_32_P16(a,b) ((a)*(b)) #define DIV32_16(a,b) (((opus_val32)(a))/(opus_val16)(b)) #define DIV32(a,b) (((opus_val32)(a))/(opus_val32)(b)) #define SCALEIN(a) ((a)*CELT_SIG_SCALE) #define SCALEOUT(a) ((a)*(1/CELT_SIG_SCALE)) #define SIG2WORD16(x) (x) #endif /* !FIXED_POINT */ #ifndef GLOBAL_STACK_SIZE #ifdef FIXED_POINT #define GLOBAL_STACK_SIZE 120000 #else #define GLOBAL_STACK_SIZE 120000 #endif #endif #endif /* ARCH_H */ 07070100000014000081A4000000000000000000000001600B393100001DAC000000000000000000000000000000000000002D00000000rnnoise-0.git20210122.1cbdbcf/src/celt_lpc.c/* Copyright (c) 2009-2010 Xiph.Org Foundation Written by Jean-Marc Valin */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "celt_lpc.h" #include "arch.h" #include "common.h" #include "pitch.h" void _celt_lpc( opus_val16 *_lpc, /* out: [0...p-1] LPC coefficients */ const opus_val32 *ac, /* in: [0...p] autocorrelation values */ int p ) { int i, j; opus_val32 r; opus_val32 error = ac[0]; #ifdef FIXED_POINT opus_val32 lpc[LPC_ORDER]; #else float *lpc = _lpc; #endif RNN_CLEAR(lpc, p); if (ac[0] != 0) { for (i = 0; i < p; i++) { /* Sum up this iteration's reflection coefficient */ opus_val32 rr = 0; for (j = 0; j < i; j++) rr += MULT32_32_Q31(lpc[j],ac[i - j]); rr += SHR32(ac[i + 1],3); r = -SHL32(rr,3)/error; /* Update LPC coefficients and total error */ lpc[i] = SHR32(r,3); for (j = 0; j < (i+1)>>1; j++) { opus_val32 tmp1, tmp2; tmp1 = lpc[j]; tmp2 = lpc[i-1-j]; lpc[j] = tmp1 + MULT32_32_Q31(r,tmp2); lpc[i-1-j] = tmp2 + MULT32_32_Q31(r,tmp1); } error = error - MULT32_32_Q31(MULT32_32_Q31(r,r),error); /* Bail out once we get 30 dB gain */ #ifdef FIXED_POINT if (error<SHR32(ac[0],10)) break; #else if (error<.001f*ac[0]) break; #endif } } #ifdef FIXED_POINT for (i=0;i<p;i++) _lpc[i] = ROUND16(lpc[i],16); #endif } void celt_fir( const opus_val16 *x, const opus_val16 *num, opus_val16 *y, int N, int ord) { int i,j; opus_val16 rnum[ord]; for(i=0;i<ord;i++) rnum[i] = num[ord-i-1]; for (i=0;i<N-3;i+=4) { opus_val32 sum[4]; sum[0] = SHL32(EXTEND32(x[i ]), SIG_SHIFT); sum[1] = SHL32(EXTEND32(x[i+1]), SIG_SHIFT); sum[2] = SHL32(EXTEND32(x[i+2]), SIG_SHIFT); sum[3] = SHL32(EXTEND32(x[i+3]), SIG_SHIFT); xcorr_kernel(rnum, x+i-ord, sum, ord); y[i ] = ROUND16(sum[0], SIG_SHIFT); y[i+1] = ROUND16(sum[1], SIG_SHIFT); y[i+2] = ROUND16(sum[2], SIG_SHIFT); y[i+3] = ROUND16(sum[3], SIG_SHIFT); } for (;i<N;i++) { opus_val32 sum = SHL32(EXTEND32(x[i]), SIG_SHIFT); for (j=0;j<ord;j++) sum = MAC16_16(sum,rnum[j],x[i+j-ord]); y[i] = ROUND16(sum, SIG_SHIFT); } } void celt_iir(const opus_val32 *_x, const opus_val16 *den, opus_val32 *_y, int N, int ord, opus_val16 *mem) { #ifdef SMALL_FOOTPRINT int i,j; for (i=0;i<N;i++) { opus_val32 sum = _x[i]; for (j=0;j<ord;j++) { sum -= MULT16_16(den[j],mem[j]); } for (j=ord-1;j>=1;j--) { mem[j]=mem[j-1]; } mem[0] = SROUND16(sum, SIG_SHIFT); _y[i] = sum; } #else int i,j; celt_assert((ord&3)==0); opus_val16 rden[ord]; opus_val16 y[N+ord]; for(i=0;i<ord;i++) rden[i] = den[ord-i-1]; for(i=0;i<ord;i++) y[i] = -mem[ord-i-1]; for(;i<N+ord;i++) y[i]=0; for (i=0;i<N-3;i+=4) { /* Unroll by 4 as if it were an FIR filter */ opus_val32 sum[4]; sum[0]=_x[i]; sum[1]=_x[i+1]; sum[2]=_x[i+2]; sum[3]=_x[i+3]; xcorr_kernel(rden, y+i, sum, ord); /* Patch up the result to compensate for the fact that this is an IIR */ y[i+ord ] = -SROUND16(sum[0],SIG_SHIFT); _y[i ] = sum[0]; sum[1] = MAC16_16(sum[1], y[i+ord ], den[0]); y[i+ord+1] = -SROUND16(sum[1],SIG_SHIFT); _y[i+1] = sum[1]; sum[2] = MAC16_16(sum[2], y[i+ord+1], den[0]); sum[2] = MAC16_16(sum[2], y[i+ord ], den[1]); y[i+ord+2] = -SROUND16(sum[2],SIG_SHIFT); _y[i+2] = sum[2]; sum[3] = MAC16_16(sum[3], y[i+ord+2], den[0]); sum[3] = MAC16_16(sum[3], y[i+ord+1], den[1]); sum[3] = MAC16_16(sum[3], y[i+ord ], den[2]); y[i+ord+3] = -SROUND16(sum[3],SIG_SHIFT); _y[i+3] = sum[3]; } for (;i<N;i++) { opus_val32 sum = _x[i]; for (j=0;j<ord;j++) sum -= MULT16_16(rden[j],y[i+j]); y[i+ord] = SROUND16(sum,SIG_SHIFT); _y[i] = sum; } for(i=0;i<ord;i++) mem[i] = _y[N-i-1]; #endif } int _celt_autocorr( const opus_val16 *x, /* in: [0...n-1] samples x */ opus_val32 *ac, /* out: [0...lag-1] ac values */ const opus_val16 *window, int overlap, int lag, int n) { opus_val32 d; int i, k; int fastN=n-lag; int shift; const opus_val16 *xptr; opus_val16 xx[n]; celt_assert(n>0); celt_assert(overlap>=0); if (overlap == 0) { xptr = x; } else { for (i=0;i<n;i++) xx[i] = x[i]; for (i=0;i<overlap;i++) { xx[i] = MULT16_16_Q15(x[i],window[i]); xx[n-i-1] = MULT16_16_Q15(x[n-i-1],window[i]); } xptr = xx; } shift=0; #ifdef FIXED_POINT { opus_val32 ac0; ac0 = 1+(n<<7); if (n&1) ac0 += SHR32(MULT16_16(xptr[0],xptr[0]),9); for(i=(n&1);i<n;i+=2) { ac0 += SHR32(MULT16_16(xptr[i],xptr[i]),9); ac0 += SHR32(MULT16_16(xptr[i+1],xptr[i+1]),9); } shift = celt_ilog2(ac0)-30+10; shift = (shift)/2; if (shift>0) { for(i=0;i<n;i++) xx[i] = PSHR32(xptr[i], shift); xptr = xx; } else shift = 0; } #endif celt_pitch_xcorr(xptr, xptr, ac, fastN, lag+1); for (k=0;k<=lag;k++) { for (i = k+fastN, d = 0; i < n; i++) d = MAC16_16(d, xptr[i], xptr[i-k]); ac[k] += d; } #ifdef FIXED_POINT shift = 2*shift; if (shift<=0) ac[0] += SHL32((opus_int32)1, -shift); if (ac[0] < 268435456) { int shift2 = 29 - EC_ILOG(ac[0]); for (i=0;i<=lag;i++) ac[i] = SHL32(ac[i], shift2); shift -= shift2; } else if (ac[0] >= 536870912) { int shift2=1; if (ac[0] >= 1073741824) shift2++; for (i=0;i<=lag;i++) ac[i] = SHR32(ac[i], shift2); shift += shift2; } #endif return shift; } 07070100000015000081A4000000000000000000000001600B3931000007F8000000000000000000000000000000000000002D00000000rnnoise-0.git20210122.1cbdbcf/src/celt_lpc.h/* Copyright (c) 2009-2010 Xiph.Org Foundation Written by Jean-Marc Valin */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef PLC_H #define PLC_H #include "arch.h" #include "common.h" #if defined(OPUS_X86_MAY_HAVE_SSE4_1) #include "x86/celt_lpc_sse.h" #endif #define LPC_ORDER 24 void _celt_lpc(opus_val16 *_lpc, const opus_val32 *ac, int p); void celt_fir( const opus_val16 *x, const opus_val16 *num, opus_val16 *y, int N, int ord); void celt_iir(const opus_val32 *x, const opus_val16 *den, opus_val32 *y, int N, int ord, opus_val16 *mem); int _celt_autocorr(const opus_val16 *x, opus_val32 *ac, const opus_val16 *window, int overlap, int lag, int n); #endif /* PLC_H */ 07070100000016000081A4000000000000000000000001600B3931000004D0000000000000000000000000000000000000002B00000000rnnoise-0.git20210122.1cbdbcf/src/common.h #ifndef COMMON_H #define COMMON_H #include "stdlib.h" #include "string.h" #define RNN_INLINE inline #define OPUS_INLINE inline /** RNNoise wrapper for malloc(). To do your own dynamic allocation, all you need t o do is replace this function and rnnoise_free */ #ifndef OVERRIDE_RNNOISE_ALLOC static RNN_INLINE void *rnnoise_alloc (size_t size) { return malloc(size); } #endif /** RNNoise wrapper for free(). To do your own dynamic allocation, all you need to do is replace this function and rnnoise_alloc */ #ifndef OVERRIDE_RNNOISE_FREE static RNN_INLINE void rnnoise_free (void *ptr) { free(ptr); } #endif /** Copy n elements from src to dst. The 0* term provides compile-time type checking */ #ifndef OVERRIDE_RNN_COPY #define RNN_COPY(dst, src, n) (memcpy((dst), (src), (n)*sizeof(*(dst)) + 0*((dst)-(src)) )) #endif /** Copy n elements from src to dst, allowing overlapping regions. The 0* term provides compile-time type checking */ #ifndef OVERRIDE_RNN_MOVE #define RNN_MOVE(dst, src, n) (memmove((dst), (src), (n)*sizeof(*(dst)) + 0*((dst)-(src)) )) #endif /** Set n elements of dst to zero */ #ifndef OVERRIDE_RNN_CLEAR #define RNN_CLEAR(dst, n) (memset((dst), 0, (n)*sizeof(*(dst)))) #endif #endif 07070100000017000081ED000000000000000000000001600B39310000008A000000000000000000000000000000000000002D00000000rnnoise-0.git20210122.1cbdbcf/src/compile.sh#!/bin/sh gcc -DTRAINING=1 -Wall -W -O3 -g -I../include denoise.c kiss_fft.c pitch.c celt_lpc.c rnn.c rnn_data.c -o denoise_training -lm 07070100000018000081A4000000000000000000000001600B393100004752000000000000000000000000000000000000002C00000000rnnoise-0.git20210122.1cbdbcf/src/denoise.c/* Copyright (c) 2018 Gregor Richards * Copyright (c) 2017 Mozilla */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include <stdlib.h> #include <string.h> #include <stdio.h> #include "kiss_fft.h" #include "common.h" #include <math.h> #include "rnnoise.h" #include "pitch.h" #include "arch.h" #include "rnn.h" #include "rnn_data.h" #define FRAME_SIZE_SHIFT 2 #define FRAME_SIZE (120<<FRAME_SIZE_SHIFT) #define WINDOW_SIZE (2*FRAME_SIZE) #define FREQ_SIZE (FRAME_SIZE + 1) #define PITCH_MIN_PERIOD 60 #define PITCH_MAX_PERIOD 768 #define PITCH_FRAME_SIZE 960 #define PITCH_BUF_SIZE (PITCH_MAX_PERIOD+PITCH_FRAME_SIZE) #define SQUARE(x) ((x)*(x)) #define NB_BANDS 22 #define CEPS_MEM 8 #define NB_DELTA_CEPS 6 #define NB_FEATURES (NB_BANDS+3*NB_DELTA_CEPS+2) #ifndef TRAINING #define TRAINING 0 #endif /* The built-in model, used if no file is given as input */ extern const struct RNNModel rnnoise_model_orig; static const opus_int16 eband5ms[] = { /*0 200 400 600 800 1k 1.2 1.4 1.6 2k 2.4 2.8 3.2 4k 4.8 5.6 6.8 8k 9.6 12k 15.6 20k*/ 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 34, 40, 48, 60, 78, 100 }; typedef struct { int init; kiss_fft_state *kfft; float half_window[FRAME_SIZE]; float dct_table[NB_BANDS*NB_BANDS]; } CommonState; struct DenoiseState { float analysis_mem[FRAME_SIZE]; float cepstral_mem[CEPS_MEM][NB_BANDS]; int memid; float synthesis_mem[FRAME_SIZE]; float pitch_buf[PITCH_BUF_SIZE]; float pitch_enh_buf[PITCH_BUF_SIZE]; float last_gain; int last_period; float mem_hp_x[2]; float lastg[NB_BANDS]; RNNState rnn; }; void compute_band_energy(float *bandE, const kiss_fft_cpx *X) { int i; float sum[NB_BANDS] = {0}; for (i=0;i<NB_BANDS-1;i++) { int j; int band_size; band_size = (eband5ms[i+1]-eband5ms[i])<<FRAME_SIZE_SHIFT; for (j=0;j<band_size;j++) { float tmp; float frac = (float)j/band_size; tmp = SQUARE(X[(eband5ms[i]<<FRAME_SIZE_SHIFT) + j].r); tmp += SQUARE(X[(eband5ms[i]<<FRAME_SIZE_SHIFT) + j].i); sum[i] += (1-frac)*tmp; sum[i+1] += frac*tmp; } } sum[0] *= 2; sum[NB_BANDS-1] *= 2; for (i=0;i<NB_BANDS;i++) { bandE[i] = sum[i]; } } void compute_band_corr(float *bandE, const kiss_fft_cpx *X, const kiss_fft_cpx *P) { int i; float sum[NB_BANDS] = {0}; for (i=0;i<NB_BANDS-1;i++) { int j; int band_size; band_size = (eband5ms[i+1]-eband5ms[i])<<FRAME_SIZE_SHIFT; for (j=0;j<band_size;j++) { float tmp; float frac = (float)j/band_size; tmp = X[(eband5ms[i]<<FRAME_SIZE_SHIFT) + j].r * P[(eband5ms[i]<<FRAME_SIZE_SHIFT) + j].r; tmp += X[(eband5ms[i]<<FRAME_SIZE_SHIFT) + j].i * P[(eband5ms[i]<<FRAME_SIZE_SHIFT) + j].i; sum[i] += (1-frac)*tmp; sum[i+1] += frac*tmp; } } sum[0] *= 2; sum[NB_BANDS-1] *= 2; for (i=0;i<NB_BANDS;i++) { bandE[i] = sum[i]; } } void interp_band_gain(float *g, const float *bandE) { int i; memset(g, 0, FREQ_SIZE); for (i=0;i<NB_BANDS-1;i++) { int j; int band_size; band_size = (eband5ms[i+1]-eband5ms[i])<<FRAME_SIZE_SHIFT; for (j=0;j<band_size;j++) { float frac = (float)j/band_size; g[(eband5ms[i]<<FRAME_SIZE_SHIFT) + j] = (1-frac)*bandE[i] + frac*bandE[i+1]; } } } CommonState common; static void check_init() { int i; if (common.init) return; common.kfft = opus_fft_alloc_twiddles(2*FRAME_SIZE, NULL, NULL, NULL, 0); for (i=0;i<FRAME_SIZE;i++) common.half_window[i] = sin(.5*M_PI*sin(.5*M_PI*(i+.5)/FRAME_SIZE) * sin(.5*M_PI*(i+.5)/FRAME_SIZE)); for (i=0;i<NB_BANDS;i++) { int j; for (j=0;j<NB_BANDS;j++) { common.dct_table[i*NB_BANDS + j] = cos((i+.5)*j*M_PI/NB_BANDS); if (j==0) common.dct_table[i*NB_BANDS + j] *= sqrt(.5); } } common.init = 1; } static void dct(float *out, const float *in) { int i; check_init(); for (i=0;i<NB_BANDS;i++) { int j; float sum = 0; for (j=0;j<NB_BANDS;j++) { sum += in[j] * common.dct_table[j*NB_BANDS + i]; } out[i] = sum*sqrt(2./22); } } #if 0 static void idct(float *out, const float *in) { int i; check_init(); for (i=0;i<NB_BANDS;i++) { int j; float sum = 0; for (j=0;j<NB_BANDS;j++) { sum += in[j] * common.dct_table[i*NB_BANDS + j]; } out[i] = sum*sqrt(2./22); } } #endif static void forward_transform(kiss_fft_cpx *out, const float *in) { int i; kiss_fft_cpx x[WINDOW_SIZE]; kiss_fft_cpx y[WINDOW_SIZE]; check_init(); for (i=0;i<WINDOW_SIZE;i++) { x[i].r = in[i]; x[i].i = 0; } opus_fft(common.kfft, x, y, 0); for (i=0;i<FREQ_SIZE;i++) { out[i] = y[i]; } } static void inverse_transform(float *out, const kiss_fft_cpx *in) { int i; kiss_fft_cpx x[WINDOW_SIZE]; kiss_fft_cpx y[WINDOW_SIZE]; check_init(); for (i=0;i<FREQ_SIZE;i++) { x[i] = in[i]; } for (;i<WINDOW_SIZE;i++) { x[i].r = x[WINDOW_SIZE - i].r; x[i].i = -x[WINDOW_SIZE - i].i; } opus_fft(common.kfft, x, y, 0); /* output in reverse order for IFFT. */ out[0] = WINDOW_SIZE*y[0].r; for (i=1;i<WINDOW_SIZE;i++) { out[i] = WINDOW_SIZE*y[WINDOW_SIZE - i].r; } } static void apply_window(float *x) { int i; check_init(); for (i=0;i<FRAME_SIZE;i++) { x[i] *= common.half_window[i]; x[WINDOW_SIZE - 1 - i] *= common.half_window[i]; } } int rnnoise_get_size() { return sizeof(DenoiseState); } int rnnoise_get_frame_size() { return FRAME_SIZE; } int rnnoise_init(DenoiseState *st, RNNModel *model) { memset(st, 0, sizeof(*st)); if (model) st->rnn.model = model; else st->rnn.model = &rnnoise_model_orig; st->rnn.vad_gru_state = calloc(sizeof(float), st->rnn.model->vad_gru_size); st->rnn.noise_gru_state = calloc(sizeof(float), st->rnn.model->noise_gru_size); st->rnn.denoise_gru_state = calloc(sizeof(float), st->rnn.model->denoise_gru_size); return 0; } DenoiseState *rnnoise_create(RNNModel *model) { DenoiseState *st; st = malloc(rnnoise_get_size()); rnnoise_init(st, model); return st; } void rnnoise_destroy(DenoiseState *st) { free(st->rnn.vad_gru_state); free(st->rnn.noise_gru_state); free(st->rnn.denoise_gru_state); free(st); } #if TRAINING int lowpass = FREQ_SIZE; int band_lp = NB_BANDS; #endif static void frame_analysis(DenoiseState *st, kiss_fft_cpx *X, float *Ex, const float *in) { int i; float x[WINDOW_SIZE]; RNN_COPY(x, st->analysis_mem, FRAME_SIZE); for (i=0;i<FRAME_SIZE;i++) x[FRAME_SIZE + i] = in[i]; RNN_COPY(st->analysis_mem, in, FRAME_SIZE); apply_window(x); forward_transform(X, x); #if TRAINING for (i=lowpass;i<FREQ_SIZE;i++) X[i].r = X[i].i = 0; #endif compute_band_energy(Ex, X); } static int compute_frame_features(DenoiseState *st, kiss_fft_cpx *X, kiss_fft_cpx *P, float *Ex, float *Ep, float *Exp, float *features, const float *in) { int i; float E = 0; float *ceps_0, *ceps_1, *ceps_2; float spec_variability = 0; float Ly[NB_BANDS]; float p[WINDOW_SIZE]; float pitch_buf[PITCH_BUF_SIZE>>1]; int pitch_index; float gain; float *(pre[1]); float tmp[NB_BANDS]; float follow, logMax; frame_analysis(st, X, Ex, in); RNN_MOVE(st->pitch_buf, &st->pitch_buf[FRAME_SIZE], PITCH_BUF_SIZE-FRAME_SIZE); RNN_COPY(&st->pitch_buf[PITCH_BUF_SIZE-FRAME_SIZE], in, FRAME_SIZE); pre[0] = &st->pitch_buf[0]; pitch_downsample(pre, pitch_buf, PITCH_BUF_SIZE, 1); pitch_search(pitch_buf+(PITCH_MAX_PERIOD>>1), pitch_buf, PITCH_FRAME_SIZE, PITCH_MAX_PERIOD-3*PITCH_MIN_PERIOD, &pitch_index); pitch_index = PITCH_MAX_PERIOD-pitch_index; gain = remove_doubling(pitch_buf, PITCH_MAX_PERIOD, PITCH_MIN_PERIOD, PITCH_FRAME_SIZE, &pitch_index, st->last_period, st->last_gain); st->last_period = pitch_index; st->last_gain = gain; for (i=0;i<WINDOW_SIZE;i++) p[i] = st->pitch_buf[PITCH_BUF_SIZE-WINDOW_SIZE-pitch_index+i]; apply_window(p); forward_transform(P, p); compute_band_energy(Ep, P); compute_band_corr(Exp, X, P); for (i=0;i<NB_BANDS;i++) Exp[i] = Exp[i]/sqrt(.001+Ex[i]*Ep[i]); dct(tmp, Exp); for (i=0;i<NB_DELTA_CEPS;i++) features[NB_BANDS+2*NB_DELTA_CEPS+i] = tmp[i]; features[NB_BANDS+2*NB_DELTA_CEPS] -= 1.3; features[NB_BANDS+2*NB_DELTA_CEPS+1] -= 0.9; features[NB_BANDS+3*NB_DELTA_CEPS] = .01*(pitch_index-300); logMax = -2; follow = -2; for (i=0;i<NB_BANDS;i++) { Ly[i] = log10(1e-2+Ex[i]); Ly[i] = MAX16(logMax-7, MAX16(follow-1.5, Ly[i])); logMax = MAX16(logMax, Ly[i]); follow = MAX16(follow-1.5, Ly[i]); E += Ex[i]; } if (!TRAINING && E < 0.04) { /* If there's no audio, avoid messing up the state. */ RNN_CLEAR(features, NB_FEATURES); return 1; } dct(features, Ly); features[0] -= 12; features[1] -= 4; ceps_0 = st->cepstral_mem[st->memid]; ceps_1 = (st->memid < 1) ? st->cepstral_mem[CEPS_MEM+st->memid-1] : st->cepstral_mem[st->memid-1]; ceps_2 = (st->memid < 2) ? st->cepstral_mem[CEPS_MEM+st->memid-2] : st->cepstral_mem[st->memid-2]; for (i=0;i<NB_BANDS;i++) ceps_0[i] = features[i]; st->memid++; for (i=0;i<NB_DELTA_CEPS;i++) { features[i] = ceps_0[i] + ceps_1[i] + ceps_2[i]; features[NB_BANDS+i] = ceps_0[i] - ceps_2[i]; features[NB_BANDS+NB_DELTA_CEPS+i] = ceps_0[i] - 2*ceps_1[i] + ceps_2[i]; } /* Spectral variability features. */ if (st->memid == CEPS_MEM) st->memid = 0; for (i=0;i<CEPS_MEM;i++) { int j; float mindist = 1e15f; for (j=0;j<CEPS_MEM;j++) { int k; float dist=0; for (k=0;k<NB_BANDS;k++) { float tmp; tmp = st->cepstral_mem[i][k] - st->cepstral_mem[j][k]; dist += tmp*tmp; } if (j!=i) mindist = MIN32(mindist, dist); } spec_variability += mindist; } features[NB_BANDS+3*NB_DELTA_CEPS+1] = spec_variability/CEPS_MEM-2.1; return TRAINING && E < 0.1; } static void frame_synthesis(DenoiseState *st, float *out, const kiss_fft_cpx *y) { float x[WINDOW_SIZE]; int i; inverse_transform(x, y); apply_window(x); for (i=0;i<FRAME_SIZE;i++) out[i] = x[i] + st->synthesis_mem[i]; RNN_COPY(st->synthesis_mem, &x[FRAME_SIZE], FRAME_SIZE); } static void biquad(float *y, float mem[2], const float *x, const float *b, const float *a, int N) { int i; for (i=0;i<N;i++) { float xi, yi; xi = x[i]; yi = x[i] + mem[0]; mem[0] = mem[1] + (b[0]*(double)xi - a[0]*(double)yi); mem[1] = (b[1]*(double)xi - a[1]*(double)yi); y[i] = yi; } } void pitch_filter(kiss_fft_cpx *X, const kiss_fft_cpx *P, const float *Ex, const float *Ep, const float *Exp, const float *g) { int i; float r[NB_BANDS]; float rf[FREQ_SIZE] = {0}; for (i=0;i<NB_BANDS;i++) { #if 0 if (Exp[i]>g[i]) r[i] = 1; else r[i] = Exp[i]*(1-g[i])/(.001 + g[i]*(1-Exp[i])); r[i] = MIN16(1, MAX16(0, r[i])); #else if (Exp[i]>g[i]) r[i] = 1; else r[i] = SQUARE(Exp[i])*(1-SQUARE(g[i]))/(.001 + SQUARE(g[i])*(1-SQUARE(Exp[i]))); r[i] = sqrt(MIN16(1, MAX16(0, r[i]))); #endif r[i] *= sqrt(Ex[i]/(1e-8+Ep[i])); } interp_band_gain(rf, r); for (i=0;i<FREQ_SIZE;i++) { X[i].r += rf[i]*P[i].r; X[i].i += rf[i]*P[i].i; } float newE[NB_BANDS]; compute_band_energy(newE, X); float norm[NB_BANDS]; float normf[FREQ_SIZE]={0}; for (i=0;i<NB_BANDS;i++) { norm[i] = sqrt(Ex[i]/(1e-8+newE[i])); } interp_band_gain(normf, norm); for (i=0;i<FREQ_SIZE;i++) { X[i].r *= normf[i]; X[i].i *= normf[i]; } } float rnnoise_process_frame(DenoiseState *st, float *out, const float *in) { int i; kiss_fft_cpx X[FREQ_SIZE]; kiss_fft_cpx P[WINDOW_SIZE]; float x[FRAME_SIZE]; float Ex[NB_BANDS], Ep[NB_BANDS]; float Exp[NB_BANDS]; float features[NB_FEATURES]; float g[NB_BANDS]; float gf[FREQ_SIZE]={1}; float vad_prob = 0; int silence; static const float a_hp[2] = {-1.99599, 0.99600}; static const float b_hp[2] = {-2, 1}; biquad(x, st->mem_hp_x, in, b_hp, a_hp, FRAME_SIZE); silence = compute_frame_features(st, X, P, Ex, Ep, Exp, features, x); if (!silence) { compute_rnn(&st->rnn, g, &vad_prob, features); pitch_filter(X, P, Ex, Ep, Exp, g); for (i=0;i<NB_BANDS;i++) { float alpha = .6f; g[i] = MAX16(g[i], alpha*st->lastg[i]); st->lastg[i] = g[i]; } interp_band_gain(gf, g); #if 1 for (i=0;i<FREQ_SIZE;i++) { X[i].r *= gf[i]; X[i].i *= gf[i]; } #endif } frame_synthesis(st, out, X); return vad_prob; } #if TRAINING static float uni_rand() { return rand()/(double)RAND_MAX-.5; } static void rand_resp(float *a, float *b) { a[0] = .75*uni_rand(); a[1] = .75*uni_rand(); b[0] = .75*uni_rand(); b[1] = .75*uni_rand(); } int main(int argc, char **argv) { int i; int count=0; static const float a_hp[2] = {-1.99599, 0.99600}; static const float b_hp[2] = {-2, 1}; float a_noise[2] = {0}; float b_noise[2] = {0}; float a_sig[2] = {0}; float b_sig[2] = {0}; float mem_hp_x[2]={0}; float mem_hp_n[2]={0}; float mem_resp_x[2]={0}; float mem_resp_n[2]={0}; float x[FRAME_SIZE]; float n[FRAME_SIZE]; float xn[FRAME_SIZE]; int vad_cnt=0; int gain_change_count=0; float speech_gain = 1, noise_gain = 1; FILE *f1, *f2; int maxCount; DenoiseState *st; DenoiseState *noise_state; DenoiseState *noisy; st = rnnoise_create(NULL); noise_state = rnnoise_create(NULL); noisy = rnnoise_create(NULL); if (argc!=4) { fprintf(stderr, "usage: %s <speech> <noise> <count>\n", argv[0]); return 1; } f1 = fopen(argv[1], "r"); f2 = fopen(argv[2], "r"); maxCount = atoi(argv[3]); for(i=0;i<150;i++) { short tmp[FRAME_SIZE]; fread(tmp, sizeof(short), FRAME_SIZE, f2); } while (1) { kiss_fft_cpx X[FREQ_SIZE], Y[FREQ_SIZE], N[FREQ_SIZE], P[WINDOW_SIZE]; float Ex[NB_BANDS], Ey[NB_BANDS], En[NB_BANDS], Ep[NB_BANDS]; float Exp[NB_BANDS]; float Ln[NB_BANDS]; float features[NB_FEATURES]; float g[NB_BANDS]; short tmp[FRAME_SIZE]; float vad=0; float E=0; if (count==maxCount) break; if ((count%1000)==0) fprintf(stderr, "%d\r", count); if (++gain_change_count > 2821) { speech_gain = pow(10., (-40+(rand()%60))/20.); noise_gain = pow(10., (-30+(rand()%50))/20.); if (rand()%10==0) noise_gain = 0; noise_gain *= speech_gain; if (rand()%10==0) speech_gain = 0; gain_change_count = 0; rand_resp(a_noise, b_noise); rand_resp(a_sig, b_sig); lowpass = FREQ_SIZE * 3000./24000. * pow(50., rand()/(double)RAND_MAX); for (i=0;i<NB_BANDS;i++) { if (eband5ms[i]<<FRAME_SIZE_SHIFT > lowpass) { band_lp = i; break; } } } if (speech_gain != 0) { fread(tmp, sizeof(short), FRAME_SIZE, f1); if (feof(f1)) { rewind(f1); fread(tmp, sizeof(short), FRAME_SIZE, f1); } for (i=0;i<FRAME_SIZE;i++) x[i] = speech_gain*tmp[i]; for (i=0;i<FRAME_SIZE;i++) E += tmp[i]*(float)tmp[i]; } else { for (i=0;i<FRAME_SIZE;i++) x[i] = 0; E = 0; } if (noise_gain!=0) { fread(tmp, sizeof(short), FRAME_SIZE, f2); if (feof(f2)) { rewind(f2); fread(tmp, sizeof(short), FRAME_SIZE, f2); } for (i=0;i<FRAME_SIZE;i++) n[i] = noise_gain*tmp[i]; } else { for (i=0;i<FRAME_SIZE;i++) n[i] = 0; } biquad(x, mem_hp_x, x, b_hp, a_hp, FRAME_SIZE); biquad(x, mem_resp_x, x, b_sig, a_sig, FRAME_SIZE); biquad(n, mem_hp_n, n, b_hp, a_hp, FRAME_SIZE); biquad(n, mem_resp_n, n, b_noise, a_noise, FRAME_SIZE); for (i=0;i<FRAME_SIZE;i++) xn[i] = x[i] + n[i]; if (E > 1e9f) { vad_cnt=0; } else if (E > 1e8f) { vad_cnt -= 5; } else if (E > 1e7f) { vad_cnt++; } else { vad_cnt+=2; } if (vad_cnt < 0) vad_cnt = 0; if (vad_cnt > 15) vad_cnt = 15; if (vad_cnt >= 10) vad = 0; else if (vad_cnt > 0) vad = 0.5f; else vad = 1.f; frame_analysis(st, Y, Ey, x); frame_analysis(noise_state, N, En, n); for (i=0;i<NB_BANDS;i++) Ln[i] = log10(1e-2+En[i]); int silence = compute_frame_features(noisy, X, P, Ex, Ep, Exp, features, xn); pitch_filter(X, P, Ex, Ep, Exp, g); //printf("%f %d\n", noisy->last_gain, noisy->last_period); for (i=0;i<NB_BANDS;i++) { g[i] = sqrt((Ey[i]+1e-3)/(Ex[i]+1e-3)); if (g[i] > 1) g[i] = 1; if (silence || i > band_lp) g[i] = -1; if (Ey[i] < 5e-2 && Ex[i] < 5e-2) g[i] = -1; if (vad==0 && noise_gain==0) g[i] = -1; } count++; #if 1 fwrite(features, sizeof(float), NB_FEATURES, stdout); fwrite(g, sizeof(float), NB_BANDS, stdout); fwrite(Ln, sizeof(float), NB_BANDS, stdout); fwrite(&vad, sizeof(float), 1, stdout); #endif } fprintf(stderr, "matrix size: %d x %d\n", count, NB_FEATURES + 2*NB_BANDS + 1); fclose(f1); fclose(f2); return 0; } #endif 07070100000019000081A4000000000000000000000001600B393100004229000000000000000000000000000000000000002D00000000rnnoise-0.git20210122.1cbdbcf/src/kiss_fft.c/*Copyright (c) 2003-2004, Mark Borgerding Lots of modifications by Jean-Marc Valin Copyright (c) 2005-2007, Xiph.Org Foundation Copyright (c) 2008, Xiph.Org Foundation, CSIRO All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/ /* This code is originally from Mark Borgerding's KISS-FFT but has been heavily modified to better suit Opus */ #ifndef SKIP_CONFIG_H # ifdef HAVE_CONFIG_H # include "config.h" # endif #endif #include "_kiss_fft_guts.h" #define CUSTOM_MODES /* The guts header contains all the multiplication and addition macros that are defined for complex numbers. It also declares the kf_ internal functions. */ static void kf_bfly2( kiss_fft_cpx * Fout, int m, int N ) { kiss_fft_cpx * Fout2; int i; (void)m; #ifdef CUSTOM_MODES if (m==1) { celt_assert(m==1); for (i=0;i<N;i++) { kiss_fft_cpx t; Fout2 = Fout + 1; t = *Fout2; C_SUB( *Fout2 , *Fout , t ); C_ADDTO( *Fout , t ); Fout += 2; } } else #endif { opus_val16 tw; tw = QCONST16(0.7071067812f, 15); /* We know that m==4 here because the radix-2 is just after a radix-4 */ celt_assert(m==4); for (i=0;i<N;i++) { kiss_fft_cpx t; Fout2 = Fout + 4; t = Fout2[0]; C_SUB( Fout2[0] , Fout[0] , t ); C_ADDTO( Fout[0] , t ); t.r = S_MUL(ADD32_ovflw(Fout2[1].r, Fout2[1].i), tw); t.i = S_MUL(SUB32_ovflw(Fout2[1].i, Fout2[1].r), tw); C_SUB( Fout2[1] , Fout[1] , t ); C_ADDTO( Fout[1] , t ); t.r = Fout2[2].i; t.i = -Fout2[2].r; C_SUB( Fout2[2] , Fout[2] , t ); C_ADDTO( Fout[2] , t ); t.r = S_MUL(SUB32_ovflw(Fout2[3].i, Fout2[3].r), tw); t.i = S_MUL(NEG32_ovflw(ADD32_ovflw(Fout2[3].i, Fout2[3].r)), tw); C_SUB( Fout2[3] , Fout[3] , t ); C_ADDTO( Fout[3] , t ); Fout += 8; } } } static void kf_bfly4( kiss_fft_cpx * Fout, const size_t fstride, const kiss_fft_state *st, int m, int N, int mm ) { int i; if (m==1) { /* Degenerate case where all the twiddles are 1. */ for (i=0;i<N;i++) { kiss_fft_cpx scratch0, scratch1; C_SUB( scratch0 , *Fout, Fout[2] ); C_ADDTO(*Fout, Fout[2]); C_ADD( scratch1 , Fout[1] , Fout[3] ); C_SUB( Fout[2], *Fout, scratch1 ); C_ADDTO( *Fout , scratch1 ); C_SUB( scratch1 , Fout[1] , Fout[3] ); Fout[1].r = ADD32_ovflw(scratch0.r, scratch1.i); Fout[1].i = SUB32_ovflw(scratch0.i, scratch1.r); Fout[3].r = SUB32_ovflw(scratch0.r, scratch1.i); Fout[3].i = ADD32_ovflw(scratch0.i, scratch1.r); Fout+=4; } } else { int j; kiss_fft_cpx scratch[6]; const kiss_twiddle_cpx *tw1,*tw2,*tw3; const int m2=2*m; const int m3=3*m; kiss_fft_cpx * Fout_beg = Fout; for (i=0;i<N;i++) { Fout = Fout_beg + i*mm; tw3 = tw2 = tw1 = st->twiddles; /* m is guaranteed to be a multiple of 4. */ for (j=0;j<m;j++) { C_MUL(scratch[0],Fout[m] , *tw1 ); C_MUL(scratch[1],Fout[m2] , *tw2 ); C_MUL(scratch[2],Fout[m3] , *tw3 ); C_SUB( scratch[5] , *Fout, scratch[1] ); C_ADDTO(*Fout, scratch[1]); C_ADD( scratch[3] , scratch[0] , scratch[2] ); C_SUB( scratch[4] , scratch[0] , scratch[2] ); C_SUB( Fout[m2], *Fout, scratch[3] ); tw1 += fstride; tw2 += fstride*2; tw3 += fstride*3; C_ADDTO( *Fout , scratch[3] ); Fout[m].r = ADD32_ovflw(scratch[5].r, scratch[4].i); Fout[m].i = SUB32_ovflw(scratch[5].i, scratch[4].r); Fout[m3].r = SUB32_ovflw(scratch[5].r, scratch[4].i); Fout[m3].i = ADD32_ovflw(scratch[5].i, scratch[4].r); ++Fout; } } } } #ifndef RADIX_TWO_ONLY static void kf_bfly3( kiss_fft_cpx * Fout, const size_t fstride, const kiss_fft_state *st, int m, int N, int mm ) { int i; size_t k; const size_t m2 = 2*m; const kiss_twiddle_cpx *tw1,*tw2; kiss_fft_cpx scratch[5]; kiss_twiddle_cpx epi3; kiss_fft_cpx * Fout_beg = Fout; #ifdef FIXED_POINT /*epi3.r = -16384;*/ /* Unused */ epi3.i = -28378; #else epi3 = st->twiddles[fstride*m]; #endif for (i=0;i<N;i++) { Fout = Fout_beg + i*mm; tw1=tw2=st->twiddles; /* For non-custom modes, m is guaranteed to be a multiple of 4. */ k=m; do { C_MUL(scratch[1],Fout[m] , *tw1); C_MUL(scratch[2],Fout[m2] , *tw2); C_ADD(scratch[3],scratch[1],scratch[2]); C_SUB(scratch[0],scratch[1],scratch[2]); tw1 += fstride; tw2 += fstride*2; Fout[m].r = SUB32_ovflw(Fout->r, HALF_OF(scratch[3].r)); Fout[m].i = SUB32_ovflw(Fout->i, HALF_OF(scratch[3].i)); C_MULBYSCALAR( scratch[0] , epi3.i ); C_ADDTO(*Fout,scratch[3]); Fout[m2].r = ADD32_ovflw(Fout[m].r, scratch[0].i); Fout[m2].i = SUB32_ovflw(Fout[m].i, scratch[0].r); Fout[m].r = SUB32_ovflw(Fout[m].r, scratch[0].i); Fout[m].i = ADD32_ovflw(Fout[m].i, scratch[0].r); ++Fout; } while(--k); } } #ifndef OVERRIDE_kf_bfly5 static void kf_bfly5( kiss_fft_cpx * Fout, const size_t fstride, const kiss_fft_state *st, int m, int N, int mm ) { kiss_fft_cpx *Fout0,*Fout1,*Fout2,*Fout3,*Fout4; int i, u; kiss_fft_cpx scratch[13]; const kiss_twiddle_cpx *tw; kiss_twiddle_cpx ya,yb; kiss_fft_cpx * Fout_beg = Fout; #ifdef FIXED_POINT ya.r = 10126; ya.i = -31164; yb.r = -26510; yb.i = -19261; #else ya = st->twiddles[fstride*m]; yb = st->twiddles[fstride*2*m]; #endif tw=st->twiddles; for (i=0;i<N;i++) { Fout = Fout_beg + i*mm; Fout0=Fout; Fout1=Fout0+m; Fout2=Fout0+2*m; Fout3=Fout0+3*m; Fout4=Fout0+4*m; /* For non-custom modes, m is guaranteed to be a multiple of 4. */ for ( u=0; u<m; ++u ) { scratch[0] = *Fout0; C_MUL(scratch[1] ,*Fout1, tw[u*fstride]); C_MUL(scratch[2] ,*Fout2, tw[2*u*fstride]); C_MUL(scratch[3] ,*Fout3, tw[3*u*fstride]); C_MUL(scratch[4] ,*Fout4, tw[4*u*fstride]); C_ADD( scratch[7],scratch[1],scratch[4]); C_SUB( scratch[10],scratch[1],scratch[4]); C_ADD( scratch[8],scratch[2],scratch[3]); C_SUB( scratch[9],scratch[2],scratch[3]); Fout0->r = ADD32_ovflw(Fout0->r, ADD32_ovflw(scratch[7].r, scratch[8].r)); Fout0->i = ADD32_ovflw(Fout0->i, ADD32_ovflw(scratch[7].i, scratch[8].i)); scratch[5].r = ADD32_ovflw(scratch[0].r, ADD32_ovflw(S_MUL(scratch[7].r,ya.r), S_MUL(scratch[8].r,yb.r))); scratch[5].i = ADD32_ovflw(scratch[0].i, ADD32_ovflw(S_MUL(scratch[7].i,ya.r), S_MUL(scratch[8].i,yb.r))); scratch[6].r = ADD32_ovflw(S_MUL(scratch[10].i,ya.i), S_MUL(scratch[9].i,yb.i)); scratch[6].i = NEG32_ovflw(ADD32_ovflw(S_MUL(scratch[10].r,ya.i), S_MUL(scratch[9].r,yb.i))); C_SUB(*Fout1,scratch[5],scratch[6]); C_ADD(*Fout4,scratch[5],scratch[6]); scratch[11].r = ADD32_ovflw(scratch[0].r, ADD32_ovflw(S_MUL(scratch[7].r,yb.r), S_MUL(scratch[8].r,ya.r))); scratch[11].i = ADD32_ovflw(scratch[0].i, ADD32_ovflw(S_MUL(scratch[7].i,yb.r), S_MUL(scratch[8].i,ya.r))); scratch[12].r = SUB32_ovflw(S_MUL(scratch[9].i,ya.i), S_MUL(scratch[10].i,yb.i)); scratch[12].i = SUB32_ovflw(S_MUL(scratch[10].r,yb.i), S_MUL(scratch[9].r,ya.i)); C_ADD(*Fout2,scratch[11],scratch[12]); C_SUB(*Fout3,scratch[11],scratch[12]); ++Fout0;++Fout1;++Fout2;++Fout3;++Fout4; } } } #endif /* OVERRIDE_kf_bfly5 */ #endif #ifdef CUSTOM_MODES static void compute_bitrev_table( int Fout, opus_int16 *f, const size_t fstride, int in_stride, opus_int16 * factors, const kiss_fft_state *st ) { const int p=*factors++; /* the radix */ const int m=*factors++; /* stage's fft length/p */ /*printf ("fft %d %d %d %d %d %d\n", p*m, m, p, s2, fstride*in_stride, N);*/ if (m==1) { int j; for (j=0;j<p;j++) { *f = Fout+j; f += fstride*in_stride; } } else { int j; for (j=0;j<p;j++) { compute_bitrev_table( Fout , f, fstride*p, in_stride, factors,st); f += fstride*in_stride; Fout += m; } } } /* facbuf is populated by p1,m1,p2,m2, ... where p[i] * m[i] = m[i-1] m0 = n */ static int kf_factor(int n,opus_int16 * facbuf) { int p=4; int i; int stages=0; int nbak = n; /*factor out powers of 4, powers of 2, then any remaining primes */ do { while (n % p) { switch (p) { case 4: p = 2; break; case 2: p = 3; break; default: p += 2; break; } if (p>32000 || (opus_int32)p*(opus_int32)p > n) p = n; /* no more factors, skip to end */ } n /= p; #ifdef RADIX_TWO_ONLY if (p!=2 && p != 4) #else if (p>5) #endif { return 0; } facbuf[2*stages] = p; if (p==2 && stages > 1) { facbuf[2*stages] = 4; facbuf[2] = 2; } stages++; } while (n > 1); n = nbak; /* Reverse the order to get the radix 4 at the end, so we can use the fast degenerate case. It turns out that reversing the order also improves the noise behaviour. */ for (i=0;i<stages/2;i++) { int tmp; tmp = facbuf[2*i]; facbuf[2*i] = facbuf[2*(stages-i-1)]; facbuf[2*(stages-i-1)] = tmp; } for (i=0;i<stages;i++) { n /= facbuf[2*i]; facbuf[2*i+1] = n; } return 1; } static void compute_twiddles(kiss_twiddle_cpx *twiddles, int nfft) { int i; #ifdef FIXED_POINT for (i=0;i<nfft;++i) { opus_val32 phase = -i; kf_cexp2(twiddles+i, DIV32(SHL32(phase,17),nfft)); } #else for (i=0;i<nfft;++i) { const double pi=3.14159265358979323846264338327; double phase = ( -2*pi /nfft ) * i; kf_cexp(twiddles+i, phase ); } #endif } int opus_fft_alloc_arch_c(kiss_fft_state *st) { (void)st; return 0; } /* * * Allocates all necessary storage space for the fft and ifft. * The return value is a contiguous block of memory. As such, * It can be freed with free(). * */ kiss_fft_state *opus_fft_alloc_twiddles(int nfft,void * mem,size_t * lenmem, const kiss_fft_state *base, int arch) { kiss_fft_state *st=NULL; size_t memneeded = sizeof(struct kiss_fft_state); /* twiddle factors*/ if ( lenmem==NULL ) { st = ( kiss_fft_state*)KISS_FFT_MALLOC( memneeded ); }else{ if (mem != NULL && *lenmem >= memneeded) st = (kiss_fft_state*)mem; *lenmem = memneeded; } if (st) { opus_int16 *bitrev; kiss_twiddle_cpx *twiddles; st->nfft=nfft; #ifdef FIXED_POINT st->scale_shift = celt_ilog2(st->nfft); if (st->nfft == 1<<st->scale_shift) st->scale = Q15ONE; else st->scale = (1073741824+st->nfft/2)/st->nfft>>(15-st->scale_shift); #else st->scale = 1.f/nfft; #endif if (base != NULL) { st->twiddles = base->twiddles; st->shift = 0; while (st->shift < 32 && nfft<<st->shift != base->nfft) st->shift++; if (st->shift>=32) goto fail; } else { st->twiddles = twiddles = (kiss_twiddle_cpx*)KISS_FFT_MALLOC(sizeof(kiss_twiddle_cpx)*nfft); compute_twiddles(twiddles, nfft); st->shift = -1; } if (!kf_factor(nfft,st->factors)) { goto fail; } /* bitrev */ st->bitrev = bitrev = (opus_int16*)KISS_FFT_MALLOC(sizeof(opus_int16)*nfft); if (st->bitrev==NULL) goto fail; compute_bitrev_table(0, bitrev, 1,1, st->factors,st); /* Initialize architecture specific fft parameters */ if (opus_fft_alloc_arch(st, arch)) goto fail; } return st; fail: opus_fft_free(st, arch); return NULL; } kiss_fft_state *opus_fft_alloc(int nfft,void * mem,size_t * lenmem, int arch) { return opus_fft_alloc_twiddles(nfft, mem, lenmem, NULL, arch); } void opus_fft_free_arch_c(kiss_fft_state *st) { (void)st; } void opus_fft_free(const kiss_fft_state *cfg, int arch) { if (cfg) { opus_fft_free_arch((kiss_fft_state *)cfg, arch); opus_free((opus_int16*)cfg->bitrev); if (cfg->shift < 0) opus_free((kiss_twiddle_cpx*)cfg->twiddles); opus_free((kiss_fft_state*)cfg); } } #endif /* CUSTOM_MODES */ void opus_fft_impl(const kiss_fft_state *st,kiss_fft_cpx *fout) { int m2, m; int p; int L; int fstride[MAXFACTORS]; int i; int shift; /* st->shift can be -1 */ shift = st->shift>0 ? st->shift : 0; fstride[0] = 1; L=0; do { p = st->factors[2*L]; m = st->factors[2*L+1]; fstride[L+1] = fstride[L]*p; L++; } while(m!=1); m = st->factors[2*L-1]; for (i=L-1;i>=0;i--) { if (i!=0) m2 = st->factors[2*i-1]; else m2 = 1; switch (st->factors[2*i]) { case 2: kf_bfly2(fout, m, fstride[i]); break; case 4: kf_bfly4(fout,fstride[i]<<shift,st,m, fstride[i], m2); break; #ifndef RADIX_TWO_ONLY case 3: kf_bfly3(fout,fstride[i]<<shift,st,m, fstride[i], m2); break; case 5: kf_bfly5(fout,fstride[i]<<shift,st,m, fstride[i], m2); break; #endif } m = m2; } } void opus_fft_c(const kiss_fft_state *st,const kiss_fft_cpx *fin,kiss_fft_cpx *fout) { int i; opus_val16 scale; #ifdef FIXED_POINT /* Allows us to scale with MULT16_32_Q16(), which is faster than MULT16_32_Q15() on ARM. */ int scale_shift = st->scale_shift-1; #endif scale = st->scale; celt_assert2 (fin != fout, "In-place FFT not supported"); /* Bit-reverse the input */ for (i=0;i<st->nfft;i++) { kiss_fft_cpx x = fin[i]; fout[st->bitrev[i]].r = SHR32(MULT16_32_Q16(scale, x.r), scale_shift); fout[st->bitrev[i]].i = SHR32(MULT16_32_Q16(scale, x.i), scale_shift); } opus_fft_impl(st, fout); } void opus_ifft_c(const kiss_fft_state *st,const kiss_fft_cpx *fin,kiss_fft_cpx *fout) { int i; celt_assert2 (fin != fout, "In-place FFT not supported"); /* Bit-reverse the input */ for (i=0;i<st->nfft;i++) fout[st->bitrev[i]] = fin[i]; for (i=0;i<st->nfft;i++) fout[i].i = -fout[i].i; opus_fft_impl(st, fout); for (i=0;i<st->nfft;i++) fout[i].i = -fout[i].i; } 0707010000001A000081A4000000000000000000000001600B3931000018D0000000000000000000000000000000000000002D00000000rnnoise-0.git20210122.1cbdbcf/src/kiss_fft.h/*Copyright (c) 2003-2004, Mark Borgerding Lots of modifications by Jean-Marc Valin Copyright (c) 2005-2007, Xiph.Org Foundation Copyright (c) 2008, Xiph.Org Foundation, CSIRO All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/ #ifndef KISS_FFT_H #define KISS_FFT_H #include <stdlib.h> #include <math.h> #include "arch.h" #include <stdlib.h> #define opus_alloc(x) malloc(x) #define opus_free(x) free(x) #ifdef __cplusplus extern "C" { #endif #ifdef USE_SIMD # include <xmmintrin.h> # define kiss_fft_scalar __m128 #define KISS_FFT_MALLOC(nbytes) memalign(16,nbytes) #else #define KISS_FFT_MALLOC opus_alloc #endif #ifdef FIXED_POINT #include "arch.h" # define kiss_fft_scalar opus_int32 # define kiss_twiddle_scalar opus_int16 #else # ifndef kiss_fft_scalar /* default is float */ # define kiss_fft_scalar float # define kiss_twiddle_scalar float # define KF_SUFFIX _celt_single # endif #endif typedef struct { kiss_fft_scalar r; kiss_fft_scalar i; }kiss_fft_cpx; typedef struct { kiss_twiddle_scalar r; kiss_twiddle_scalar i; }kiss_twiddle_cpx; #define MAXFACTORS 8 /* e.g. an fft of length 128 has 4 factors as far as kissfft is concerned 4*4*4*2 */ typedef struct arch_fft_state{ int is_supported; void *priv; } arch_fft_state; typedef struct kiss_fft_state{ int nfft; opus_val16 scale; #ifdef FIXED_POINT int scale_shift; #endif int shift; opus_int16 factors[2*MAXFACTORS]; const opus_int16 *bitrev; const kiss_twiddle_cpx *twiddles; arch_fft_state *arch_fft; } kiss_fft_state; #if defined(HAVE_ARM_NE10) #include "arm/fft_arm.h" #endif /*typedef struct kiss_fft_state* kiss_fft_cfg;*/ /** * opus_fft_alloc * * Initialize a FFT (or IFFT) algorithm's cfg/state buffer. * * typical usage: kiss_fft_cfg mycfg=opus_fft_alloc(1024,0,NULL,NULL); * * The return value from fft_alloc is a cfg buffer used internally * by the fft routine or NULL. * * If lenmem is NULL, then opus_fft_alloc will allocate a cfg buffer using malloc. * The returned value should be free()d when done to avoid memory leaks. * * The state can be placed in a user supplied buffer 'mem': * If lenmem is not NULL and mem is not NULL and *lenmem is large enough, * then the function places the cfg in mem and the size used in *lenmem * and returns mem. * * If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough), * then the function returns NULL and places the minimum cfg * buffer size in *lenmem. * */ kiss_fft_state *opus_fft_alloc_twiddles(int nfft,void * mem,size_t * lenmem, const kiss_fft_state *base, int arch); kiss_fft_state *opus_fft_alloc(int nfft,void * mem,size_t * lenmem, int arch); /** * opus_fft(cfg,in_out_buf) * * Perform an FFT on a complex input buffer. * for a forward FFT, * fin should be f[0] , f[1] , ... ,f[nfft-1] * fout will be F[0] , F[1] , ... ,F[nfft-1] * Note that each element is complex and can be accessed like f[k].r and f[k].i * */ void opus_fft_c(const kiss_fft_state *cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout); void opus_ifft_c(const kiss_fft_state *cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout); void opus_fft_impl(const kiss_fft_state *st,kiss_fft_cpx *fout); void opus_ifft_impl(const kiss_fft_state *st,kiss_fft_cpx *fout); void opus_fft_free(const kiss_fft_state *cfg, int arch); void opus_fft_free_arch_c(kiss_fft_state *st); int opus_fft_alloc_arch_c(kiss_fft_state *st); #if !defined(OVERRIDE_OPUS_FFT) /* Is run-time CPU detection enabled on this platform? */ #if defined(OPUS_HAVE_RTCD) && (defined(HAVE_ARM_NE10)) extern int (*const OPUS_FFT_ALLOC_ARCH_IMPL[OPUS_ARCHMASK+1])( kiss_fft_state *st); #define opus_fft_alloc_arch(_st, arch) \ ((*OPUS_FFT_ALLOC_ARCH_IMPL[(arch)&OPUS_ARCHMASK])(_st)) extern void (*const OPUS_FFT_FREE_ARCH_IMPL[OPUS_ARCHMASK+1])( kiss_fft_state *st); #define opus_fft_free_arch(_st, arch) \ ((*OPUS_FFT_FREE_ARCH_IMPL[(arch)&OPUS_ARCHMASK])(_st)) extern void (*const OPUS_FFT[OPUS_ARCHMASK+1])(const kiss_fft_state *cfg, const kiss_fft_cpx *fin, kiss_fft_cpx *fout); #define opus_fft(_cfg, _fin, _fout, arch) \ ((*OPUS_FFT[(arch)&OPUS_ARCHMASK])(_cfg, _fin, _fout)) extern void (*const OPUS_IFFT[OPUS_ARCHMASK+1])(const kiss_fft_state *cfg, const kiss_fft_cpx *fin, kiss_fft_cpx *fout); #define opus_ifft(_cfg, _fin, _fout, arch) \ ((*OPUS_IFFT[(arch)&OPUS_ARCHMASK])(_cfg, _fin, _fout)) #else /* else for if defined(OPUS_HAVE_RTCD) && (defined(HAVE_ARM_NE10)) */ #define opus_fft_alloc_arch(_st, arch) \ ((void)(arch), opus_fft_alloc_arch_c(_st)) #define opus_fft_free_arch(_st, arch) \ ((void)(arch), opus_fft_free_arch_c(_st)) #define opus_fft(_cfg, _fin, _fout, arch) \ ((void)(arch), opus_fft_c(_cfg, _fin, _fout)) #define opus_ifft(_cfg, _fin, _fout, arch) \ ((void)(arch), opus_ifft_c(_cfg, _fin, _fout)) #endif /* end if defined(OPUS_HAVE_RTCD) && (defined(HAVE_ARM_NE10)) */ #endif /* end if !defined(OVERRIDE_OPUS_FFT) */ #ifdef __cplusplus } #endif #endif 0707010000001B000081A4000000000000000000000001600B39310000135A000000000000000000000000000000000000002F00000000rnnoise-0.git20210122.1cbdbcf/src/opus_types.h/* (C) COPYRIGHT 1994-2002 Xiph.Org Foundation */ /* Modified by Jean-Marc Valin */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* opus_types.h based on ogg_types.h from libogg */ /** @file opus_types.h @brief Opus reference implementation types */ #ifndef OPUS_TYPES_H #define OPUS_TYPES_H /* Use the real stdint.h if it's there (taken from Paul Hsieh's pstdint.h) */ #if (defined(__STDC__) && __STDC__ && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (defined(__GNUC__) && (defined(_STDINT_H) || defined(_STDINT_H_)) || defined (HAVE_STDINT_H)) #include <stdint.h> typedef int16_t opus_int16; typedef uint16_t opus_uint16; typedef int32_t opus_int32; typedef uint32_t opus_uint32; #elif defined(_WIN32) # if defined(__CYGWIN__) # include <_G_config.h> typedef _G_int32_t opus_int32; typedef _G_uint32_t opus_uint32; typedef _G_int16 opus_int16; typedef _G_uint16 opus_uint16; # elif defined(__MINGW32__) typedef short opus_int16; typedef unsigned short opus_uint16; typedef int opus_int32; typedef unsigned int opus_uint32; # elif defined(__MWERKS__) typedef int opus_int32; typedef unsigned int opus_uint32; typedef short opus_int16; typedef unsigned short opus_uint16; # else /* MSVC/Borland */ typedef __int32 opus_int32; typedef unsigned __int32 opus_uint32; typedef __int16 opus_int16; typedef unsigned __int16 opus_uint16; # endif #elif defined(__MACOS__) # include <sys/types.h> typedef SInt16 opus_int16; typedef UInt16 opus_uint16; typedef SInt32 opus_int32; typedef UInt32 opus_uint32; #elif (defined(__APPLE__) && defined(__MACH__)) /* MacOS X Framework build */ # include <sys/types.h> typedef int16_t opus_int16; typedef u_int16_t opus_uint16; typedef int32_t opus_int32; typedef u_int32_t opus_uint32; #elif defined(__BEOS__) /* Be */ # include <inttypes.h> typedef int16 opus_int16; typedef u_int16 opus_uint16; typedef int32_t opus_int32; typedef u_int32_t opus_uint32; #elif defined (__EMX__) /* OS/2 GCC */ typedef short opus_int16; typedef unsigned short opus_uint16; typedef int opus_int32; typedef unsigned int opus_uint32; #elif defined (DJGPP) /* DJGPP */ typedef short opus_int16; typedef unsigned short opus_uint16; typedef int opus_int32; typedef unsigned int opus_uint32; #elif defined(R5900) /* PS2 EE */ typedef int opus_int32; typedef unsigned opus_uint32; typedef short opus_int16; typedef unsigned short opus_uint16; #elif defined(__SYMBIAN32__) /* Symbian GCC */ typedef signed short opus_int16; typedef unsigned short opus_uint16; typedef signed int opus_int32; typedef unsigned int opus_uint32; #elif defined(CONFIG_TI_C54X) || defined (CONFIG_TI_C55X) typedef short opus_int16; typedef unsigned short opus_uint16; typedef long opus_int32; typedef unsigned long opus_uint32; #elif defined(CONFIG_TI_C6X) typedef short opus_int16; typedef unsigned short opus_uint16; typedef int opus_int32; typedef unsigned int opus_uint32; #else /* Give up, take a reasonable guess */ typedef short opus_int16; typedef unsigned short opus_uint16; typedef int opus_int32; typedef unsigned int opus_uint32; #endif #define opus_int int /* used for counters etc; at least 16 bits */ #define opus_int64 long long #define opus_int8 signed char #define opus_uint unsigned int /* used for counters etc; at least 16 bits */ #define opus_uint64 unsigned long long #define opus_uint8 unsigned char #endif /* OPUS_TYPES_H */ 0707010000001C000081A4000000000000000000000001600B39310000366B000000000000000000000000000000000000002A00000000rnnoise-0.git20210122.1cbdbcf/src/pitch.c/* Copyright (c) 2007-2008 CSIRO Copyright (c) 2007-2009 Xiph.Org Foundation Written by Jean-Marc Valin */ /** @file pitch.c @brief Pitch analysis */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pitch.h" #include "common.h" //#include "modes.h" //#include "stack_alloc.h" //#include "mathops.h" #include "celt_lpc.h" #include "math.h" static void find_best_pitch(opus_val32 *xcorr, opus_val16 *y, int len, int max_pitch, int *best_pitch #ifdef FIXED_POINT , int yshift, opus_val32 maxcorr #endif ) { int i, j; opus_val32 Syy=1; opus_val16 best_num[2]; opus_val32 best_den[2]; #ifdef FIXED_POINT int xshift; xshift = celt_ilog2(maxcorr)-14; #endif best_num[0] = -1; best_num[1] = -1; best_den[0] = 0; best_den[1] = 0; best_pitch[0] = 0; best_pitch[1] = 1; for (j=0;j<len;j++) Syy = ADD32(Syy, SHR32(MULT16_16(y[j],y[j]), yshift)); for (i=0;i<max_pitch;i++) { if (xcorr[i]>0) { opus_val16 num; opus_val32 xcorr16; xcorr16 = EXTRACT16(VSHR32(xcorr[i], xshift)); #ifndef FIXED_POINT /* Considering the range of xcorr16, this should avoid both underflows and overflows (inf) when squaring xcorr16 */ xcorr16 *= 1e-12f; #endif num = MULT16_16_Q15(xcorr16,xcorr16); if (MULT16_32_Q15(num,best_den[1]) > MULT16_32_Q15(best_num[1],Syy)) { if (MULT16_32_Q15(num,best_den[0]) > MULT16_32_Q15(best_num[0],Syy)) { best_num[1] = best_num[0]; best_den[1] = best_den[0]; best_pitch[1] = best_pitch[0]; best_num[0] = num; best_den[0] = Syy; best_pitch[0] = i; } else { best_num[1] = num; best_den[1] = Syy; best_pitch[1] = i; } } } Syy += SHR32(MULT16_16(y[i+len],y[i+len]),yshift) - SHR32(MULT16_16(y[i],y[i]),yshift); Syy = MAX32(1, Syy); } } static void celt_fir5(const opus_val16 *x, const opus_val16 *num, opus_val16 *y, int N, opus_val16 *mem) { int i; opus_val16 num0, num1, num2, num3, num4; opus_val32 mem0, mem1, mem2, mem3, mem4; num0=num[0]; num1=num[1]; num2=num[2]; num3=num[3]; num4=num[4]; mem0=mem[0]; mem1=mem[1]; mem2=mem[2]; mem3=mem[3]; mem4=mem[4]; for (i=0;i<N;i++) { opus_val32 sum = SHL32(EXTEND32(x[i]), SIG_SHIFT); sum = MAC16_16(sum,num0,mem0); sum = MAC16_16(sum,num1,mem1); sum = MAC16_16(sum,num2,mem2); sum = MAC16_16(sum,num3,mem3); sum = MAC16_16(sum,num4,mem4); mem4 = mem3; mem3 = mem2; mem2 = mem1; mem1 = mem0; mem0 = x[i]; y[i] = ROUND16(sum, SIG_SHIFT); } mem[0]=mem0; mem[1]=mem1; mem[2]=mem2; mem[3]=mem3; mem[4]=mem4; } void pitch_downsample(celt_sig *x[], opus_val16 *x_lp, int len, int C) { int i; opus_val32 ac[5]; opus_val16 tmp=Q15ONE; opus_val16 lpc[4], mem[5]={0,0,0,0,0}; opus_val16 lpc2[5]; opus_val16 c1 = QCONST16(.8f,15); #ifdef FIXED_POINT int shift; opus_val32 maxabs = celt_maxabs32(x[0], len); if (C==2) { opus_val32 maxabs_1 = celt_maxabs32(x[1], len); maxabs = MAX32(maxabs, maxabs_1); } if (maxabs<1) maxabs=1; shift = celt_ilog2(maxabs)-10; if (shift<0) shift=0; if (C==2) shift++; #endif for (i=1;i<len>>1;i++) x_lp[i] = SHR32(HALF32(HALF32(x[0][(2*i-1)]+x[0][(2*i+1)])+x[0][2*i]), shift); x_lp[0] = SHR32(HALF32(HALF32(x[0][1])+x[0][0]), shift); if (C==2) { for (i=1;i<len>>1;i++) x_lp[i] += SHR32(HALF32(HALF32(x[1][(2*i-1)]+x[1][(2*i+1)])+x[1][2*i]), shift); x_lp[0] += SHR32(HALF32(HALF32(x[1][1])+x[1][0]), shift); } _celt_autocorr(x_lp, ac, NULL, 0, 4, len>>1); /* Noise floor -40 dB */ #ifdef FIXED_POINT ac[0] += SHR32(ac[0],13); #else ac[0] *= 1.0001f; #endif /* Lag windowing */ for (i=1;i<=4;i++) { /*ac[i] *= exp(-.5*(2*M_PI*.002*i)*(2*M_PI*.002*i));*/ #ifdef FIXED_POINT ac[i] -= MULT16_32_Q15(2*i*i, ac[i]); #else ac[i] -= ac[i]*(.008f*i)*(.008f*i); #endif } _celt_lpc(lpc, ac, 4); for (i=0;i<4;i++) { tmp = MULT16_16_Q15(QCONST16(.9f,15), tmp); lpc[i] = MULT16_16_Q15(lpc[i], tmp); } /* Add a zero */ lpc2[0] = lpc[0] + QCONST16(.8f,SIG_SHIFT); lpc2[1] = lpc[1] + MULT16_16_Q15(c1,lpc[0]); lpc2[2] = lpc[2] + MULT16_16_Q15(c1,lpc[1]); lpc2[3] = lpc[3] + MULT16_16_Q15(c1,lpc[2]); lpc2[4] = MULT16_16_Q15(c1,lpc[3]); celt_fir5(x_lp, lpc2, x_lp, len>>1, mem); } void celt_pitch_xcorr(const opus_val16 *_x, const opus_val16 *_y, opus_val32 *xcorr, int len, int max_pitch) { #if 0 /* This is a simple version of the pitch correlation that should work well on DSPs like Blackfin and TI C5x/C6x */ int i, j; #ifdef FIXED_POINT opus_val32 maxcorr=1; #endif for (i=0;i<max_pitch;i++) { opus_val32 sum = 0; for (j=0;j<len;j++) sum = MAC16_16(sum, _x[j], _y[i+j]); xcorr[i] = sum; #ifdef FIXED_POINT maxcorr = MAX32(maxcorr, sum); #endif } #ifdef FIXED_POINT return maxcorr; #endif #else /* Unrolled version of the pitch correlation -- runs faster on x86 and ARM */ int i; /*The EDSP version requires that max_pitch is at least 1, and that _x is 32-bit aligned. Since it's hard to put asserts in assembly, put them here.*/ #ifdef FIXED_POINT opus_val32 maxcorr=1; #endif celt_assert(max_pitch>0); celt_assert((((unsigned char *)_x-(unsigned char *)NULL)&3)==0); for (i=0;i<max_pitch-3;i+=4) { opus_val32 sum[4]={0,0,0,0}; xcorr_kernel(_x, _y+i, sum, len); xcorr[i]=sum[0]; xcorr[i+1]=sum[1]; xcorr[i+2]=sum[2]; xcorr[i+3]=sum[3]; #ifdef FIXED_POINT sum[0] = MAX32(sum[0], sum[1]); sum[2] = MAX32(sum[2], sum[3]); sum[0] = MAX32(sum[0], sum[2]); maxcorr = MAX32(maxcorr, sum[0]); #endif } /* In case max_pitch isn't a multiple of 4, do non-unrolled version. */ for (;i<max_pitch;i++) { opus_val32 sum; sum = celt_inner_prod(_x, _y+i, len); xcorr[i] = sum; #ifdef FIXED_POINT maxcorr = MAX32(maxcorr, sum); #endif } #ifdef FIXED_POINT return maxcorr; #endif #endif } void pitch_search(const opus_val16 *x_lp, opus_val16 *y, int len, int max_pitch, int *pitch) { int i, j; int lag; int best_pitch[2]={0,0}; #ifdef FIXED_POINT opus_val32 maxcorr; opus_val32 xmax, ymax; int shift=0; #endif int offset; celt_assert(len>0); celt_assert(max_pitch>0); lag = len+max_pitch; opus_val16 x_lp4[len>>2]; opus_val16 y_lp4[lag>>2]; opus_val32 xcorr[max_pitch>>1]; /* Downsample by 2 again */ for (j=0;j<len>>2;j++) x_lp4[j] = x_lp[2*j]; for (j=0;j<lag>>2;j++) y_lp4[j] = y[2*j]; #ifdef FIXED_POINT xmax = celt_maxabs16(x_lp4, len>>2); ymax = celt_maxabs16(y_lp4, lag>>2); shift = celt_ilog2(MAX32(1, MAX32(xmax, ymax)))-11; if (shift>0) { for (j=0;j<len>>2;j++) x_lp4[j] = SHR16(x_lp4[j], shift); for (j=0;j<lag>>2;j++) y_lp4[j] = SHR16(y_lp4[j], shift); /* Use double the shift for a MAC */ shift *= 2; } else { shift = 0; } #endif /* Coarse search with 4x decimation */ #ifdef FIXED_POINT maxcorr = #endif celt_pitch_xcorr(x_lp4, y_lp4, xcorr, len>>2, max_pitch>>2); find_best_pitch(xcorr, y_lp4, len>>2, max_pitch>>2, best_pitch #ifdef FIXED_POINT , 0, maxcorr #endif ); /* Finer search with 2x decimation */ #ifdef FIXED_POINT maxcorr=1; #endif for (i=0;i<max_pitch>>1;i++) { opus_val32 sum; xcorr[i] = 0; if (abs(i-2*best_pitch[0])>2 && abs(i-2*best_pitch[1])>2) continue; #ifdef FIXED_POINT sum = 0; for (j=0;j<len>>1;j++) sum += SHR32(MULT16_16(x_lp[j],y[i+j]), shift); #else sum = celt_inner_prod(x_lp, y+i, len>>1); #endif xcorr[i] = MAX32(-1, sum); #ifdef FIXED_POINT maxcorr = MAX32(maxcorr, sum); #endif } find_best_pitch(xcorr, y, len>>1, max_pitch>>1, best_pitch #ifdef FIXED_POINT , shift+1, maxcorr #endif ); /* Refine by pseudo-interpolation */ if (best_pitch[0]>0 && best_pitch[0]<(max_pitch>>1)-1) { opus_val32 a, b, c; a = xcorr[best_pitch[0]-1]; b = xcorr[best_pitch[0]]; c = xcorr[best_pitch[0]+1]; if ((c-a) > MULT16_32_Q15(QCONST16(.7f,15),b-a)) offset = 1; else if ((a-c) > MULT16_32_Q15(QCONST16(.7f,15),b-c)) offset = -1; else offset = 0; } else { offset = 0; } *pitch = 2*best_pitch[0]-offset; } #ifdef FIXED_POINT static opus_val16 compute_pitch_gain(opus_val32 xy, opus_val32 xx, opus_val32 yy) { opus_val32 x2y2; int sx, sy, shift; opus_val32 g; opus_val16 den; if (xy == 0 || xx == 0 || yy == 0) return 0; sx = celt_ilog2(xx)-14; sy = celt_ilog2(yy)-14; shift = sx + sy; x2y2 = SHR32(MULT16_16(VSHR32(xx, sx), VSHR32(yy, sy)), 14); if (shift & 1) { if (x2y2 < 32768) { x2y2 <<= 1; shift--; } else { x2y2 >>= 1; shift++; } } den = celt_rsqrt_norm(x2y2); g = MULT16_32_Q15(den, xy); g = VSHR32(g, (shift>>1)-1); return EXTRACT16(MIN32(g, Q15ONE)); } #else static opus_val16 compute_pitch_gain(opus_val32 xy, opus_val32 xx, opus_val32 yy) { return xy/sqrt(1+xx*yy); } #endif static const int second_check[16] = {0, 0, 3, 2, 3, 2, 5, 2, 3, 2, 3, 2, 5, 2, 3, 2}; opus_val16 remove_doubling(opus_val16 *x, int maxperiod, int minperiod, int N, int *T0_, int prev_period, opus_val16 prev_gain) { int k, i, T, T0; opus_val16 g, g0; opus_val16 pg; opus_val32 xy,xx,yy,xy2; opus_val32 xcorr[3]; opus_val32 best_xy, best_yy; int offset; int minperiod0; minperiod0 = minperiod; maxperiod /= 2; minperiod /= 2; *T0_ /= 2; prev_period /= 2; N /= 2; x += maxperiod; if (*T0_>=maxperiod) *T0_=maxperiod-1; T = T0 = *T0_; opus_val32 yy_lookup[maxperiod+1]; dual_inner_prod(x, x, x-T0, N, &xx, &xy); yy_lookup[0] = xx; yy=xx; for (i=1;i<=maxperiod;i++) { yy = yy+MULT16_16(x[-i],x[-i])-MULT16_16(x[N-i],x[N-i]); yy_lookup[i] = MAX32(0, yy); } yy = yy_lookup[T0]; best_xy = xy; best_yy = yy; g = g0 = compute_pitch_gain(xy, xx, yy); /* Look for any pitch at T/k */ for (k=2;k<=15;k++) { int T1, T1b; opus_val16 g1; opus_val16 cont=0; opus_val16 thresh; T1 = (2*T0+k)/(2*k); if (T1 < minperiod) break; /* Look for another strong correlation at T1b */ if (k==2) { if (T1+T0>maxperiod) T1b = T0; else T1b = T0+T1; } else { T1b = (2*second_check[k]*T0+k)/(2*k); } dual_inner_prod(x, &x[-T1], &x[-T1b], N, &xy, &xy2); xy = HALF32(xy + xy2); yy = HALF32(yy_lookup[T1] + yy_lookup[T1b]); g1 = compute_pitch_gain(xy, xx, yy); if (abs(T1-prev_period)<=1) cont = prev_gain; else if (abs(T1-prev_period)<=2 && 5*k*k < T0) cont = HALF16(prev_gain); else cont = 0; thresh = MAX16(QCONST16(.3f,15), MULT16_16_Q15(QCONST16(.7f,15),g0)-cont); /* Bias against very high pitch (very short period) to avoid false-positives due to short-term correlation */ if (T1<3*minperiod) thresh = MAX16(QCONST16(.4f,15), MULT16_16_Q15(QCONST16(.85f,15),g0)-cont); else if (T1<2*minperiod) thresh = MAX16(QCONST16(.5f,15), MULT16_16_Q15(QCONST16(.9f,15),g0)-cont); if (g1 > thresh) { best_xy = xy; best_yy = yy; T = T1; g = g1; } } best_xy = MAX32(0, best_xy); if (best_yy <= best_xy) pg = Q15ONE; else pg = best_xy/(best_yy+1); for (k=0;k<3;k++) xcorr[k] = celt_inner_prod(x, x-(T+k-1), N); if ((xcorr[2]-xcorr[0]) > MULT16_32_Q15(QCONST16(.7f,15),xcorr[1]-xcorr[0])) offset = 1; else if ((xcorr[0]-xcorr[2]) > MULT16_32_Q15(QCONST16(.7f,15),xcorr[1]-xcorr[2])) offset = -1; else offset = 0; if (pg > g) pg = g; *T0_ = 2*T+offset; if (*T0_<minperiod0) *T0_=minperiod0; return pg; } 0707010000001D000081A4000000000000000000000001600B39310000124A000000000000000000000000000000000000002A00000000rnnoise-0.git20210122.1cbdbcf/src/pitch.h/* Copyright (c) 2007-2008 CSIRO Copyright (c) 2007-2009 Xiph.Org Foundation Written by Jean-Marc Valin */ /** @file pitch.h @brief Pitch analysis */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef PITCH_H #define PITCH_H //#include "modes.h" //#include "cpu_support.h" #include "arch.h" void pitch_downsample(celt_sig *x[], opus_val16 *x_lp, int len, int C); void pitch_search(const opus_val16 *x_lp, opus_val16 *y, int len, int max_pitch, int *pitch); opus_val16 remove_doubling(opus_val16 *x, int maxperiod, int minperiod, int N, int *T0, int prev_period, opus_val16 prev_gain); /* OPT: This is the kernel you really want to optimize. It gets used a lot by the prefilter and by the PLC. */ static OPUS_INLINE void xcorr_kernel(const opus_val16 * x, const opus_val16 * y, opus_val32 sum[4], int len) { int j; opus_val16 y_0, y_1, y_2, y_3; celt_assert(len>=3); y_3=0; /* gcc doesn't realize that y_3 can't be used uninitialized */ y_0=*y++; y_1=*y++; y_2=*y++; for (j=0;j<len-3;j+=4) { opus_val16 tmp; tmp = *x++; y_3=*y++; sum[0] = MAC16_16(sum[0],tmp,y_0); sum[1] = MAC16_16(sum[1],tmp,y_1); sum[2] = MAC16_16(sum[2],tmp,y_2); sum[3] = MAC16_16(sum[3],tmp,y_3); tmp=*x++; y_0=*y++; sum[0] = MAC16_16(sum[0],tmp,y_1); sum[1] = MAC16_16(sum[1],tmp,y_2); sum[2] = MAC16_16(sum[2],tmp,y_3); sum[3] = MAC16_16(sum[3],tmp,y_0); tmp=*x++; y_1=*y++; sum[0] = MAC16_16(sum[0],tmp,y_2); sum[1] = MAC16_16(sum[1],tmp,y_3); sum[2] = MAC16_16(sum[2],tmp,y_0); sum[3] = MAC16_16(sum[3],tmp,y_1); tmp=*x++; y_2=*y++; sum[0] = MAC16_16(sum[0],tmp,y_3); sum[1] = MAC16_16(sum[1],tmp,y_0); sum[2] = MAC16_16(sum[2],tmp,y_1); sum[3] = MAC16_16(sum[3],tmp,y_2); } if (j++<len) { opus_val16 tmp = *x++; y_3=*y++; sum[0] = MAC16_16(sum[0],tmp,y_0); sum[1] = MAC16_16(sum[1],tmp,y_1); sum[2] = MAC16_16(sum[2],tmp,y_2); sum[3] = MAC16_16(sum[3],tmp,y_3); } if (j++<len) { opus_val16 tmp=*x++; y_0=*y++; sum[0] = MAC16_16(sum[0],tmp,y_1); sum[1] = MAC16_16(sum[1],tmp,y_2); sum[2] = MAC16_16(sum[2],tmp,y_3); sum[3] = MAC16_16(sum[3],tmp,y_0); } if (j<len) { opus_val16 tmp=*x++; y_1=*y++; sum[0] = MAC16_16(sum[0],tmp,y_2); sum[1] = MAC16_16(sum[1],tmp,y_3); sum[2] = MAC16_16(sum[2],tmp,y_0); sum[3] = MAC16_16(sum[3],tmp,y_1); } } static OPUS_INLINE void dual_inner_prod(const opus_val16 *x, const opus_val16 *y01, const opus_val16 *y02, int N, opus_val32 *xy1, opus_val32 *xy2) { int i; opus_val32 xy01=0; opus_val32 xy02=0; for (i=0;i<N;i++) { xy01 = MAC16_16(xy01, x[i], y01[i]); xy02 = MAC16_16(xy02, x[i], y02[i]); } *xy1 = xy01; *xy2 = xy02; } /*We make sure a C version is always available for cases where the overhead of vectorization and passing around an arch flag aren't worth it.*/ static OPUS_INLINE opus_val32 celt_inner_prod(const opus_val16 *x, const opus_val16 *y, int N) { int i; opus_val32 xy=0; for (i=0;i<N;i++) xy = MAC16_16(xy, x[i], y[i]); return xy; } void celt_pitch_xcorr(const opus_val16 *_x, const opus_val16 *_y, opus_val32 *xcorr, int len, int max_pitch); #endif 0707010000001E000081A4000000000000000000000001600B3931000016FC000000000000000000000000000000000000002800000000rnnoise-0.git20210122.1cbdbcf/src/rnn.c/* Copyright (c) 2008-2011 Octasic Inc. 2012-2017 Jean-Marc Valin */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include <math.h> #include "opus_types.h" #include "common.h" #include "arch.h" #include "tansig_table.h" #include "rnn.h" #include "rnn_data.h" #include <stdio.h> static OPUS_INLINE float tansig_approx(float x) { int i; float y, dy; float sign=1; /* Tests are reversed to catch NaNs */ if (!(x<8)) return 1; if (!(x>-8)) return -1; #ifndef FIXED_POINT /* Another check in case of -ffast-math */ if (celt_isnan(x)) return 0; #endif if (x<0) { x=-x; sign=-1; } i = (int)floor(.5f+25*x); x -= .04f*i; y = tansig_table[i]; dy = 1-y*y; y = y + x*dy*(1 - y*x); return sign*y; } static OPUS_INLINE float sigmoid_approx(float x) { return .5 + .5*tansig_approx(.5*x); } static OPUS_INLINE float relu(float x) { return x < 0 ? 0 : x; } void compute_dense(const DenseLayer *layer, float *output, const float *input) { int i, j; int N, M; int stride; M = layer->nb_inputs; N = layer->nb_neurons; stride = N; for (i=0;i<N;i++) { /* Compute update gate. */ float sum = layer->bias[i]; for (j=0;j<M;j++) sum += layer->input_weights[j*stride + i]*input[j]; output[i] = WEIGHTS_SCALE*sum; } if (layer->activation == ACTIVATION_SIGMOID) { for (i=0;i<N;i++) output[i] = sigmoid_approx(output[i]); } else if (layer->activation == ACTIVATION_TANH) { for (i=0;i<N;i++) output[i] = tansig_approx(output[i]); } else if (layer->activation == ACTIVATION_RELU) { for (i=0;i<N;i++) output[i] = relu(output[i]); } else { *(int*)0=0; } } void compute_gru(const GRULayer *gru, float *state, const float *input) { int i, j; int N, M; int stride; float z[MAX_NEURONS]; float r[MAX_NEURONS]; float h[MAX_NEURONS]; M = gru->nb_inputs; N = gru->nb_neurons; stride = 3*N; for (i=0;i<N;i++) { /* Compute update gate. */ float sum = gru->bias[i]; for (j=0;j<M;j++) sum += gru->input_weights[j*stride + i]*input[j]; for (j=0;j<N;j++) sum += gru->recurrent_weights[j*stride + i]*state[j]; z[i] = sigmoid_approx(WEIGHTS_SCALE*sum); } for (i=0;i<N;i++) { /* Compute reset gate. */ float sum = gru->bias[N + i]; for (j=0;j<M;j++) sum += gru->input_weights[N + j*stride + i]*input[j]; for (j=0;j<N;j++) sum += gru->recurrent_weights[N + j*stride + i]*state[j]; r[i] = sigmoid_approx(WEIGHTS_SCALE*sum); } for (i=0;i<N;i++) { /* Compute output. */ float sum = gru->bias[2*N + i]; for (j=0;j<M;j++) sum += gru->input_weights[2*N + j*stride + i]*input[j]; for (j=0;j<N;j++) sum += gru->recurrent_weights[2*N + j*stride + i]*state[j]*r[j]; if (gru->activation == ACTIVATION_SIGMOID) sum = sigmoid_approx(WEIGHTS_SCALE*sum); else if (gru->activation == ACTIVATION_TANH) sum = tansig_approx(WEIGHTS_SCALE*sum); else if (gru->activation == ACTIVATION_RELU) sum = relu(WEIGHTS_SCALE*sum); else *(int*)0=0; h[i] = z[i]*state[i] + (1-z[i])*sum; } for (i=0;i<N;i++) state[i] = h[i]; } #define INPUT_SIZE 42 void compute_rnn(RNNState *rnn, float *gains, float *vad, const float *input) { int i; float dense_out[MAX_NEURONS]; float noise_input[MAX_NEURONS*3]; float denoise_input[MAX_NEURONS*3]; compute_dense(rnn->model->input_dense, dense_out, input); compute_gru(rnn->model->vad_gru, rnn->vad_gru_state, dense_out); compute_dense(rnn->model->vad_output, vad, rnn->vad_gru_state); for (i=0;i<rnn->model->input_dense_size;i++) noise_input[i] = dense_out[i]; for (i=0;i<rnn->model->vad_gru_size;i++) noise_input[i+rnn->model->input_dense_size] = rnn->vad_gru_state[i]; for (i=0;i<INPUT_SIZE;i++) noise_input[i+rnn->model->input_dense_size+rnn->model->vad_gru_size] = input[i]; compute_gru(rnn->model->noise_gru, rnn->noise_gru_state, noise_input); for (i=0;i<rnn->model->vad_gru_size;i++) denoise_input[i] = rnn->vad_gru_state[i]; for (i=0;i<rnn->model->noise_gru_size;i++) denoise_input[i+rnn->model->vad_gru_size] = rnn->noise_gru_state[i]; for (i=0;i<INPUT_SIZE;i++) denoise_input[i+rnn->model->vad_gru_size+rnn->model->noise_gru_size] = input[i]; compute_gru(rnn->model->denoise_gru, rnn->denoise_gru_state, denoise_input); compute_dense(rnn->model->denoise_output, gains, rnn->denoise_gru_state); } 0707010000001F000081A4000000000000000000000001600B3931000008A4000000000000000000000000000000000000002800000000rnnoise-0.git20210122.1cbdbcf/src/rnn.h/* Copyright (c) 2017 Jean-Marc Valin */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef RNN_H_ #define RNN_H_ #include "rnnoise.h" #include "opus_types.h" #define WEIGHTS_SCALE (1.f/256) #define MAX_NEURONS 128 #define ACTIVATION_TANH 0 #define ACTIVATION_SIGMOID 1 #define ACTIVATION_RELU 2 typedef signed char rnn_weight; typedef struct { const rnn_weight *bias; const rnn_weight *input_weights; int nb_inputs; int nb_neurons; int activation; } DenseLayer; typedef struct { const rnn_weight *bias; const rnn_weight *input_weights; const rnn_weight *recurrent_weights; int nb_inputs; int nb_neurons; int activation; } GRULayer; typedef struct RNNState RNNState; void compute_dense(const DenseLayer *layer, float *output, const float *input); void compute_gru(const GRULayer *gru, float *state, const float *input); void compute_rnn(RNNState *rnn, float *gains, float *vad, const float *input); #endif /* RNN_H_ */ 07070100000020000081A4000000000000000000000001600B393100067C9F000000000000000000000000000000000000002D00000000rnnoise-0.git20210122.1cbdbcf/src/rnn_data.c/*This file is automatically generated from a Keras model*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "rnn.h" #include "rnn_data.h" static const rnn_weight input_dense_weights[1008] = { -10, 0, -3, 1, -8, -6, 3, -13, 1, 0, -3, -7, -5, -3, 6, -1, -6, 0, -6, -4, -1, -2, 1, 1, -7, 2, 21, 10, -5, -20, 24, 23, 37, 8, -2, 33, -6, 22, 13, -2, 50, 8, 13, 1, -15, 30, -10, 30, 0, 3, 5, 27, 1, 4, -3, 41, 56, 35, -2, 49, -13, 11, 13, -2, -47, 5, -16, -60, -15, 77, -17, 26, -3, 14, -21, 19, -5, -19, -13, 0, 10, 14, 9, 31, -13, -41, -10, 4, 22, 18, -48, -6, -10, 62, -3, -18, -14, 12, 26, -28, 3, 14, 25, -13, -19, 6, 5, 36, -3, -65, -12, 0, 31, -7, -9, 101, -4, 26, 16, 17, -12, -12, 14, -36, -3, 5, -15, 21, 2, 30, -3, 38, -4, 1, -6, 7, -7, 14, 38, -22, -30, -3, -7, 3, -39, -70, -126, 25, 34, 94, -67, -22, -33, 83, -47, -118, 4, 70, 33, 25, 62, -128, -76, -118, -113, 49, -12, -100, -18, -114, -33, 43, 32, 61, 40, -9, -106, 2, 36, -100, -40, -5, 20, -75, 61, -51, -9, 126, -27, -52, 5, -24, -21, -126, -114, -12, 15, 106, -2, 73, -125, 50, 13, -120, 35, 35, 4, -61, 29, -124, 6, -53, -69, -125, 64, -89, 36, -107, -103, -7, 27, 121, 69, 77, -35, 35, 95, -125, -49, 97, -45, -43, -23, 23, -28, -65, -118, 2, 8, -126, 27, -97, 92, 5, 55, 82, 17, -57, -115, 37, 8, -106, -46, 41, -2, 21, -44, 8, -73, -58, -39, 34, 89, -95, 95, -117, 120, -58, 31, 123, 1, -32, -109, -110, 60, -120, -43, -74, 5, 91, 26, 21, 114, 82, -83, -126, 123, 22, -16, -67, 25, -83, 46, 48, -34, -121, -124, -63, -35, -9, 31, 82, 123, 6, -3, 117, 93, -2, -13, -36, 124, -112, -6, -102, -5, -33, -15, 44, -69, -127, -23, -40, -34, -85, 68, 83, -1, 40, 8, 84, 118, -58, -55, -102, 123, -55, -14, -123, 44, -63, -14, 21, 35, 16, 24, -126, -13, -114, 35, 20, -36, 61, -9, 97, 34, 19, -32, -109, 76, -104, 99, -119, 45, -125, -51, -28, -8, -69, -8, 125, -45, -93, 113, 103, -41, -82, 52, 7, 126, 0, -40, 104, 55, -58, 17, -124, -93, -58, 8, -45, 1, 56, -123, 108, -47, -23, 115, 127, 17, -68, -13, 116, -82, -44, 45, 67, -120, -101, -15, -125, 120, -113, 17, -48, -73, 126, -64, -86, -118, -19, 112, -1, -66, -27, -62, 121, -86, -58, 50, 89, -38, -75, 95, -111, 12, -113, 2, -68, 2, -94, -121, 91, -5, 0, 79, 43, -7, -18, 79, 35, -38, 47, 1, -45, 83, -50, 102, 32, 55, -96, 15, -122, -69, 45, -27, 91, -62, -30, 46, -95, 22, -72, -97, -1, 14, -122, 28, 127, 61, -126, 121, 9, 68, -120, 49, -60, 90, 3, 43, 68, 54, 34, -10, 28, 21, -24, -54, 22, -113, -12, 82, -2, -17, -9, 127, 8, 116, -92, 0, -70, -33, 123, 66, 116, -74, -4, 74, -72, -22, -47, 1, -83, -60, -124, 1, 122, -57, -43, 49, 40, -126, -128, -8, -29, 28, -24, -123, -121, -70, -93, -37, -126, 11, -125, -37, 11, -31, -51, -124, 116, -128, 8, -25, 109, 75, -12, 7, 8, 10, 117, 124, -128, -128, 29, -26, 101, 21, -128, 87, 8, -39, 23, -128, 127, -127, 74, -55, 74, 112, 127, 4, 55, 44, -92, 123, 34, -93, 47, -21, -92, 17, 49, -121, 92, 7, -126, -125, 124, -74, 3, -59, 18, -91, 3, -9, 9, 56, 116, 7, -29, 33, 87, -21, -128, -13, 57, 74, 9, -29, -61, -97, -21, -95, -12, -114, 16, 82, 125, -7, 10, -24, 9, 77, -128, -102, -25, 3, -126, 10, 13, -18, 51, 26, 127, -79, 35, 51, 12, -50, -24, 1, -7, 22, 81, 65, 120, -30, -38, 85, 122, -4, -106, -11, 27, 53, 41, 8, -104, -66, -38, -124, 10, 12, 76, 117, -109, 9, 11, 2, -18, 3, 113, -16, -79, -39, -123, -20, -128, 2, 13, -33, -58, 10, 84, -104, 13, 64, 109, 1, 54, -12, 28, 24, 63, -126, 118, -82, 46, -12, -15, 14, -43, 60, 22, -32, -19, -46, 91, -107, 24, -94, 26, -47, 125, 6, 58, -15, -75, -26, -38, -35, 103, -16, -17, -13, 63, -2, 45, -45, -73, -23, 70, -87, 51, -17, 53, 76, 14, -18, -31, -14, 103, 8, 21, -28, -33, -20, -47, 6, 39, 40, -30, 7, -76, 55, 31, -20, -21, -59, 1, 25, -11, 17, 5, -13, -39, 0, -76, 50, -33, -29, -50, -16, -11, -12, -1, -46, 40, -10, 65, -19, 21, -41, -32, -83, -19, -4, 49, -60, 118, -24, -46, 9, 102, -20, 8, -19, 25, 31, -3, -37, 0, 25, 7, 29, 2, -39, 127, -64, -20, 64, 115, -30, 36, 100, 35, 122, 127, 127, -127, 127, -127, 19, 127, -89, -79, -32, 39, -127, 125, -80, 126, -127, 26, 8, 98, -8, -57, -90, -50, 126, 61, 127, -126, 40, -106, -68, 104, -125, -119, 11, 10, -127, 66, -56, -12, -126, -104, 27, 75, 38, -124, -126, -125, 84, -123, -45, -114, -128, 127, 103, -101, -124, 127, -11, -23, -123, 92, -123, 24, 126, 41, -2, -39, -27, -94, 40, -112, -48, 127, 58, 14, 38, -75, -64, 73, 117, 100, -119, -11, 6, 32, -126, -14, 35, 121, -10, 54, -60, 89, -3, 69, -25, -20, 43, -86, -34, 24, 27, 7, -81, -99, -23, -16, -26, 13, 35, -97, 80, -29, -13, -121, -12, -65, -94, 70, -89, -126, -95, 88, 33, 96, 29, -90, 69, 114, -78, 65, 90, -47, -47, 89, 1, -12, 3, 8, 30, 5, 2, -30, -1, 6, -7, 10, -4, 46, -27, -40, 22, -6, -17, 45, 24, -9, 23, -14, -63, -26, -12, -57, 27, 25, 55, -76, -47, 21, 34, 33, 26, 17, 14, 6, 9, 26, 25, -25, -25, -18 }; static const rnn_weight input_dense_bias[24] = { 38, -6, 127, 127, 127, -43, -127, 78, 127, 5, 127, 123, 127, 127, -128, -76, -126, 28, 127, 125, -30, 127, -89, -20 }; static const DenseLayer input_dense = { input_dense_bias, input_dense_weights, 42, 24, ACTIVATION_TANH }; static const rnn_weight vad_gru_weights[1728] = { -124, 23, -123, -33, -95, -4, 8, -84, 4, 101, -119, 116, -4, 123, 103, -51, 29, -124, -114, -49, 31, 9, 75, -128, 0, -49, 37, -50, 46, -21, -63, -104, 54, 82, 33, 21, 70, 127, -9, -79, -39, -23, -127, 107, 122, -96, -46, -18, -39, 13, -28, -48, 14, 56, -52, 49, -1, -121, 25, -18, -36, -52, -57, -30, 54, -124, -26, -47, 10, 39, 12, 2, 9, -127, -128, 102, 21, 11, -64, -71, 89, -113, -111, 54, 31, 94, 121, -40, 30, 40, -109, 73, -9, 108, -92, 2, -127, 116, 127, 127, -122, 95, 127, -37, -127, 28, 89, 10, 24, -104, -62, -67, -14, 38, 14, -71, 22, -41, 20, -50, 39, 63, 86, 127, -18, 79, 4, -51, 2, 33, 117, -113, -78, 56, -91, 37, 34, -45, -44, -22, 21, -16, 56, 30, -84, -79, 38, -74, 127, 9, -25, 2, 82, 61, 25, -26, 26, 11, 117, -65, 12, -58, 42, -62, -93, 11, 11, 124, -123, 80, -125, 11, -90, 42, 94, 4, -109, -1, 85, -52, 45, -26, -27, 77, -5, 30, 90, 0, 95, -7, 53, 29, -82, 22, -9, 74, 2, -12, -73, 114, 97, -64, 122, -77, 43, 91, 86, 126, 106, 72, 90, -43, 46, 96, -51, 21, 22, 68, 22, 41, 79, 75, -46, -105, 23, -116, 127, -123, 102, 57, 85, 10, -29, 34, 125, 126, 124, 81, -15, 54, 96, -128, 39, -124, 103, 74, 126, 127, -50, -71, -122, -64, 93, -75, 71, 105, 122, 123, 126, 122, -127, 33, -63, -74, 124, -71, 33, 41, -56, 19, 6, 65, 41, 90, -116, -3, -46, 75, -13, 98, -74, -42, 74, -95, -96, 81, 24, 32, -19, -123, 74, 55, 109, 115, 0, 32, 33, 12, -20, 9, 127, 127, -61, 79, -48, -54, -49, 101, -9, 27, -106, 74, 119, 77, 87, -126, -24, 127, 124, 31, 34, 127, 40, 3, -90, 127, 23, 57, -53, 127, -69, -88, -33, 127, 19, -46, -9, -125, 13, -126, -113, 127, -41, 46, 106, -62, 3, -10, 111, 49, -34, -24, -20, -112, 11, 101, -50, -34, 50, 65, -64, -106, 70, -48, 60, 9, -122, -45, 15, -112, -26, -4, 1, 39, 23, 58, -45, -80, 127, 82, 58, 30, -94, -119, 51, -89, 95, -107, 30, 127, 125, 58, -52, -42, -38, -20, -122, 115, 39, -26, 5, 73, 13, -39, 43, -23, -20, -125, 23, 35, 53, -61, -66, 72, -20, 33, 8, 35, 4, 7, 18, 19, 16, -45, -50, -71, 31, -29, -41, -27, 10, 14, 27, 9, -23, 98, 6, -94, 92, 127, -114, 59, -26, -100, -62, -127, -17, -85, -60, 126, -42, -6, 33, -120, -26, -126, -127, -35, -114, -31, 25, -126, -100, -126, -64, -46, -31, 30, 25, -74, -111, -97, -81, -104, -114, -19, -9, -116, -69, 22, 30, 59, 8, -51, 16, -97, 18, -4, -89, 80, -50, 3, 36, -67, 56, 69, -26, 107, -10, 58, -28, -4, -57, -72, -111, 0, -75, -119, 14, -75, -49, -66, -49, 8, -121, 22, -54, 121, 30, 54, -26, -126, -123, 56, 5, 48, 21, -127, -11, 23, 25, -82, 6, -25, 119, 78, 4, -104, 27, 61, -48, 37, -13, -52, 50, -50, 44, -1, -22, -43, -59, -78, -67, -32, -26, 9, -3, 40, 16, 19, 3, -9, 20, -6, -37, 28, 39, 17, -19, -10, 1, 6, -59, 74, 47, 3, -119, 0, -128, -107, -25, -22, -69, -23, -111, -42, -93, -120, 90, -85, -54, -118, 76, -79, 124, 101, -77, -75, -17, -71, -114, 68, 55, 79, -1, -123, -20, 127, -65, -123, -128, -87, 123, 9, -115, -14, 7, -4, 127, -79, -115, 125, -28, 89, -83, 49, 89, 119, -69, -5, 12, -49, 60, 57, -24, -99, -110, 76, -83, 125, 73, 81, 11, 8, -45, 1, 83, 13, -70, -2, 97, 112, -97, 53, -9, -94, 124, 44, -49, -24, 52, 76, -110, -70, -114, -12, 72, -4, -114, 43, -43, 81, 102, -84, -27, 62, -40, 52, 58, 124, -35, -51, -123, -43, 56, -75, -34, -35, -106, 93, -43, 14, -16, 46, 62, -97, 21, 30, -53, 21, -11, -33, -20, -95, 4, -126, 12, 45, 20, 108, 85, 11, 20, -40, 99, 4, -25, -18, -23, -12, -126, -55, -20, -44, -51, 91, -127, 127, -44, 7, 127, 78, 38, 125, -6, -94, -103, 73, 126, -126, 18, 59, -46, 106, 76, 116, -31, 75, -4, 92, 102, 32, -31, 73, 42, -21, -28, 57, 127, -8, -107, 115, 124, -94, -4, -128, 29, -57, 70, -82, 50, -13, -44, 38, 67, -93, 6, -39, -46, 56, 68, 27, 61, 26, 18, -72, 127, 22, 18, -31, 127, 61, -65, -38, 1, -67, -1, 8, -73, 46, -116, -94, 58, -49, 71, -40, -63, -82, -20, -60, 93, 76, 69, -106, 34, -31, 4, -25, 107, -18, 45, 4, -61, 126, 54, -126, -125, 41, 19, 44, 32, -98, 125, -24, 125, -96, -125, 15, 87, -4, -90, 18, -40, 28, -69, 67, 22, 41, 39, 7, -48, -44, 12, 69, -13, 2, 44, -38, 111, -7, -126, -22, -9, 74, -128, -36, -7, -123, -15, -79, -91, -37, -127, -122, 104, 30, 7, 98, -37, 111, -116, -47, 127, -45, 118, -111, -123, -120, -77, -64, -125, 124, 77, 111, 77, 18, -113, 117, -9, 67, -77, 126, 49, -20, -124, 39, 41, -124, -34, 114, -87, -126, 98, -20, 59, -17, -24, 125, 107, 54, 35, 33, -44, 12, -29, 125, -71, -28, -63, -114, 28, -17, 121, -36, 127, 89, -122, -49, -18, -48, 17, 24, 19, -64, -128, 13, 86, 45, 13, -49, 55, 84, 48, 80, -39, 99, -127, 70, -33, 30, 50, 126, -65, -117, -13, -20, -24, 127, 115, -72, -104, 63, 126, -42, 57, 17, 46, 21, 119, 110, -100, -60, -112, 62, -33, 28, 26, -22, -60, -33, -54, 78, 25, 32, -114, 86, 44, 26, 43, 76, 121, 19, 97, -2, -3, -73, -68, 6, -116, 6, -43, -97, 46, -128, -120, -31, -119, -29, 16, 16, -126, -128, -126, -46, -9, -3, 92, -31, -76, -126, -3, -107, -12, -23, -69, 5, 51, 27, -42, 23, -70, -128, -29, 22, 29, -126, -55, 50, -71, -3, 127, 44, -27, -70, -63, -66, -70, 104, 86, 115, 29, -92, 41, -90, 44, -11, -28, 20, -11, -63, -16, 43, 31, 17, -73, -31, -1, -17, -11, -39, 56, 18, 124, 72, -14, 28, 69, -121, -125, 34, 127, 63, 86, -80, -126, -125, -124, -47, 124, 77, 124, -19, 23, -7, -50, 96, -128, -93, 102, -53, -36, -87, 119, -125, 92, -126, 118, 102, 72, -2, 125, 10, 97, 124, -125, 125, 71, -20, -47, -116, -121, -4, -9, -32, 79, -124, -36, 33, -128, -74, 125, 23, 127, -29, -115, -32, 124, -89, 32, -107, 43, -17, 24, 24, 18, 29, -13, -15, -36, 62, -91, 4, -41, 95, 28, -23, 6, 46, 84, 66, 77, 68, -70, -1, -23, -6, 65, 70, -21, 9, 77, -12, 2, -118, 4, 9, -108, 84, 52, 2, 52, 13, -10, 58, -110, 18, 66, -95, -23, 70, 31, -3, 56, 56, -3, -7, 1, -27, -48, -61, 41, -4, 10, -62, 32, -7, -24, 9, -48, -60, -4, 79, -20, -38, -76, 68, -49, -97, 0, -15, 5, -100, -49, -95, -99, -115, -9, -40, 10, 104, 13, 56, 127, -27, -109, -94, -118, -102, -44, -85, 52, 127, -4, 14, 62, 121, -122, -26, -79, -42, -34, 1, 25, -38, -79, -58, -31, -31, -90, -30, -123, 32, -56, 125, 66, 124, -1, 3, 91, -103, -7, 23, 78, -18, 9, 69, -69, 76, -38, -33, -2, -98, 18, 106, 84, 55, 87, -47, 35, -124, 64, 41, -14, 46, 25, -2, 120, -21, 82, 19, -79, -37, -3, -8, -16, 21, 19, -5, -28, -112, 39, -6, -30, 53, -69, 53, 46, 127, 123, 78, 20, 28, -7, 73, 72, 17, -40, 41, 111, 57, 32, -95, 29, 28, -39, -65, 54, -20, -63, 29, -67, 3, 44, -57, -47, 11, 61, -22, -44, 61, 48, -100, 20, 125, 96, -24, -16, 3, -69, -126, 74, -125, 9, 45, -67, -123, -59, -72, 118, 69, 45, 50, -57, 67, 13, -66, -106, 47, 62, 22, -1, -22, -25, -40, -125, 3, 125, 32, 102, -56, -25, -75, -30, 122, 60, -13, 36, -73, 7, -84, 124, 40, -118, 17, -87, -118, -8, 3, -27, 111, -40, 40, -51, 127, 125, -45, -30, -54, 46, 80, -1, -30, 101, -17, 18, 26, 54, 7, -12, 1, -127, 123, -122, -27, -75, 64, 10, 25, -15, -44, 127, -127, 5, -84, -81, -7, 19, -26, 126, 15, 116, -126, 14, -76, 44, 62, -110, -124, 125, -29, -87, -3, -69, 82, 90, 57, -123, 123, 100, -19, -51, -32, 69, 37, -57, -128, -124, -72, -13, 51, -7, -45, -73, 5, 99, -26, -117, -96, -109, 4, -31, -12, 0, 31, -42, -27, 12, -81, 118, 39, 83, 14, 41, -126, 107, -82, 94, -116, -122, -47, -109, -84, -128, -35, -56, 66, 8, -65, 19, 42, -46, -72, -109, 41, 43, -127, -113, 58, 127, 42, -75, -1, 65, 117, -55, -113, -123, 124, 43, -96, -115, -19, 68, 15, 94, 3, 75, 0, 34, 9, 42, 110, -48, 92, -76, 99, -17, 27, 32, 13, 125, 50, -17, 56, 4, 53, 34, -8, 99, 80, -126, -21, -65, -11, -46, 44, -81, -3, -121, 123, 66, -81, -84, 119, 127, 84, 105, 45, -66, -42, -23, 32, -25, 12, 111, 127, 88, 125, 30, 24, -127, -9, -54, 127, -116, -119, 88, 70, 94, -120, 35, -93, 15, 22, -21, 25, -110, -123, -45, 8, -109, 125, -122, -86, -126, 8, -14, -120, -45, -45, 69, -125, -122, 6, 81, 86, 125, 95, 54, 77, 54, -123, 126, -85, -117, 56, 11, 0, -61, -91, -12, -2, -113, -3, -15, -122, -63, -91, 10, 84, -111, 125, 93, 21, 62, -78, -116, 13, -57, 28, -124, 126, 110, 12, 15, 95, 15, -19, -125, -97, 52, -7, 101, 9, 20, -125, -26, -56, 72, 77, 12, -126, 22, -29, 47, 62, 95, 112, 69, 32, 97, -83, -8, -5, 67, -63, -123, 79, 59, 0, -6, -17, 4, -111, -52, 27, 65, 0 }; static const rnn_weight vad_gru_recurrent_weights[1728] = { 65, 83, 35, 56, 24, -34, -28, -2, 125, 19, 42, -9, 124, -53, 24, -87, 11, 35, -81, -35, -125, -31, 123, -21, 33, -91, 113, -93, 45, -6, 53, 38, -92, 8, -27, 87, 4, 43, 43, 10, -128, -128, -46, 127, -38, -45, 25, -87, 19, 5, 52, -96, -23, -29, 121, -126, -24, -20, -2, 69, -50, 6, 71, -81, -125, 90, -94, 1, -38, 36, 89, 17, -60, 71, -48, 18, -15, 44, -18, 59, 11, 114, -51, 32, 110, 1, 4, 109, -24, 127, 27, 60, 88, 24, 45, -59, 75, -36, 8, 57, -32, -25, 13, 126, -89, -61, -76, 127, 18, -62, -68, 23, -113, 5, 126, 43, -88, 26, -78, 18, 75, 21, 9, -74, 20, 41, 126, -118, -15, 9, 116, 126, -127, 34, -6, 126, -128, -53, -54, -55, -121, 70, 127, -12, -68, 82, -25, 104, -126, 126, -21, -26, 124, -75, -127, -120, 13, 61, -64, -108, -63, -65, -44, -35, -61, -39, 109, -74, 113, -3, 108, -30, 125, 120, 39, 125, -128, -95, -99, 111, 9, 25, 114, -75, -92, -54, -12, -32, -38, 10, 31, 10, 63, 51, 40, -99, 74, 4, 50, -128, -36, -35, -11, -28, -126, -7, 66, -58, -126, -22, -83, -61, -127, 49, 126, -8, 7, 62, 36, -11, -32, -44, 63, 116, 41, 65, -127, 126, 63, -30, -96, 74, -92, 127, 38, -18, -128, 68, -5, 101, -4, 85, 58, 79, 0, -58, 8, 119, -70, -1, -79, -68, 114, -28, -90, -6, -112, 2, 127, -8, 10, 55, -59, -126, 127, 125, 80, 72, 35, -54, 95, -124, -124, 79, 23, -46, -61, -127, -100, 99, -77, 8, -87, 5, -2, 49, 85, 7, -71, 82, 53, -41, 22, -22, -93, -103, 6, 52, -56, 14, -8, -111, 85, 16, 54, 32, -118, -24, 61, -53, 96, -70, -5, -17, -67, -84, -7, -82, -107, -96, 21, -83, -58, 50, 12, -126, -1, -28, 34, -126, 115, 17, 91, 1, -127, 72, 11, 126, -81, 6, 96, -8, 77, 15, -6, 63, -27, 20, -123, -109, 85, -79, -17, 126, -92, 2, -61, 20, 14, 17, 121, 123, 30, 57, 120, 127, 57, 42, 117, 98, 67, 39, -20, -70, 100, 7, 125, 122, 40, 16, -79, 125, 83, 41, -106, -57, 24, 55, 27, -66, -111, -44, -7, -43, -66, 121, 42, -128, -45, 35, 15, -127, 34, -35, -34, -40, -18, -6, 63, 111, 31, 116, 127, 19, 24, -71, -39, 34, 11, 19, -40, 27, 12, 106, -10, 56, -82, -106, -2, -50, -52, 114, -126, -34, -43, -68, 10, 76, 57, -118, -128, 37, -104, 76, 125, 3, -76, 127, -29, 84, -94, -15, 55, 125, 79, 127, -57, -125, 104, -68, 126, 126, -77, 51, 45, 33, -109, 115, -11, 1, 95, -121, -5, -9, -126, -114, 39, 68, -126, -107, -51, -42, 24, -8, 51, -27, -43, 66, -45, 62, -98, -109, 69, 67, 0, -125, -128, 49, 31, 126, -122, 2, -55, -67, -126, -70, -128, -125, -77, 25, 16, -8, -102, 11, -75, 82, 38, -5, 5, 19, 34, 47, -127, -93, 21, 24, -97, -18, 31, 39, 34, -20, 22, 123, 7, -77, -81, -46, -9, 1, 23, 39, -127, -43, -8, -50, 10, -21, 59, -9, -4, -13, -27, 44, 127, 52, -47, 70, -43, 52, 101, -49, 27, 45, 49, 33, -125, 55, 114, 20, -1, 76, -24, -96, 105, 24, 126, 75, -21, -105, 13, -42, 40, 126, -30, -39, -95, 125, -63, 11, 6, 125, 125, -14, 5, 42, -61, -4, 49, 88, 6, -107, -28, 19, -29, 47, 126, 6, -46, -89, -18, 91, -20, -6, 118, -21, -22, 39, 115, 11, -42, 54, 73, -55, -77, 62, -27, -59, -99, -12, -127, -40, 56, -3, -124, -91, 71, -111, 6, -19, 82, -24, -35, 102, -42, 7, -126, -126, -125, 18, 98, -52, 127, 105, -52, 40, -83, 126, -122, 109, 5, 127, 48, 6, 5, -125, 100, -16, 29, 85, -89, 8, 4, 41, 62, -127, 62, 122, 85, 122, -107, 8, -125, 93, -127, 127, 102, 19, 19, -66, 41, -42, 114, 127, -48, -117, -29, -6, -73, -102, -3, -19, 0, 88, 42, 87, -117, -20, 2, 122, 28, 63, 71, 66, 120, 93, 124, -43, 49, 103, 31, 90, -91, -22, -126, 26, -24, -21, 51, -126, 87, -103, -69, -10, -66, -23, 20, 97, 36, 25, -127, 30, -20, -63, 30, 51, -116, 23, 40, -39, 36, -83, -77, -25, -50, 110, 14, 13, -109, 125, -65, -55, -87, 124, -126, -32, -72, -108, 127, 127, -125, -124, 61, 121, 102, -128, -127, 16, 100, 127, -124, -68, 72, -93, -128, 43, -93, -19, -125, -97, -113, -33, 83, 127, -44, 127, -75, 127, 16, 44, 50, -122, 23, 118, 46, 19, 26, -128, 10, 4, 99, -14, -82, -13, 30, 125, 57, 65, 60, -71, 35, 98, 28, 7, 1, 43, 89, 70, 75, 121, -59, 82, -126, -53, -16, -116, -65, 52, -52, 0, 80, 35, 45, -61, 46, 8, 107, 27, -26, -118, 90, 57, -10, 7, -15, 0, -39, -4, 12, 29, -1, 116, 84, 79, 119, 125, -59, 28, -6, -25, -43, 2, 90, 79, 67, 103, -82, 2, -6, 125, 19, 73, 0, -105, 112, -17, 104, 107, 124, 106, 19, 56, -44, 55, -112, 6, -39, -83, 126, -93, -98, 57, -120, -23, -38, 2, -31, -48, 106, 127, 127, 69, 16, 110, 71, 104, 62, -12, -22, 42, -37, -94, 34, -1, -32, -12, -124, -47, -13, 60, -75, -66, 58, -127, -2, 64, 76, -106, 73, -49, -31, 127, 126, 31, 16, 127, -110, 107, -16, -53, 20, 69, -14, -125, 59, -44, 15, 120, 125, 125, 43, 6, 19, -58, 127, 127, 43, 16, 82, 97, -127, 127, -93, -41, 88, 0, 77, -15, 116, 16, -124, -31, -3, 95, -40, -126, -54, -126, -83, -8, -59, 6, 67, -29, 4, 124, -10, 112, -28, -8, 85, -21, 45, 84, 6, -8, 11, 72, 32, 84, -62, 77, 2, -36, 75, 31, -50, 116, 126, 119, -88, -55, -14, -37, 126, 40, -108, -6, -6, 57, 64, -28, -76, 30, -117, -93, 31, -92, -44, -64, 94, 58, 65, 114, 41, 47, 71, 42, -26, 99, -126, 57, -5, 74, -19, -113, -1, 67, -21, 126, 1, -3, 33, 60, -82, 37, -48, 89, 114, -38, 127, -114, 35, 58, -5, 21, -46, 121, -123, -43, 127, 115, 123, 122, -101, 126, 127, 81, 52, 89, -127, 102, 42, 117, -9, -2, 125, 127, 110, 96, 120, 66, 70, 124, 55, 84, -38, -58, 119, -127, -16, -79, 123, 18, -127, -50, -38, 120, -85, 1, 7, -56, 108, -77, -2, 21, 37, 1, 13, -105, -69, 28, -87, 33, -104, -51, 126, 41, 3, -121, 28, 71, 58, 86, -8, 127, 94, -55, 125, 40, -19, 127, -33, -87, -23, 7, -111, -68, 9, 84, -119, 55, -82, 78, -37, -20, -9, -23, 53, -13, 15, -46, 116, 126, -127, 56, -126, 125, -7, -1, 45, 26, 125, 121, 29, 47, -86, 30, 10, 76, -125, -7, 23, 92, -12, -39, -18, 92, -97, -8, -85, -41, 49, -50, 123, -37, -126, -30, 14, 79, -49, -65, 9, -36, -38, -96, 85, -24, -13, 37, -25, -5, -64, -127, 55, -60, -18, -61, -63, 127, 56, 67, 15, 124, 72, 120, 127, 40, -10, 114, 24, -23, 46, 78, -53, 125, 86, 124, 86, 0, 38, 93, 21, 127, 123, 75, -72, 13, 48, 33, 83, -51, 15, -32, -49, -33, 120, 64, 7, 9, 65, 60, 21, -21, -61, -53, -113, 84, -97, 101, 37, -114, -27, 41, 73, 126, -10, 59, 61, -15, 70, -13, 82, -4, 69, 56, 94, -91, -50, 92, -74, -48, 53, -7, -107, 127, 28, 30, -26, -21, -61, 77, 82, 64, -91, -125, 122, -104, 127, 123, 122, 123, 76, -126, 127, -6, -80, 7, 40, -66, -65, 54, -2, 23, 96, -64, 74, 2, -53, -12, -123, 39, 60, -20, 16, -17, -97, 23, -4, -53, -122, 32, -16, -54, -95, 43, 71, -1, -67, -33, 41, 18, 72, 28, -83, 31, -100, -91, -27, 10, -128, -106, 2, 76, -13, 42, 34, 112, -19, 44, 40, -9, -11, 65, 92, -43, -125, 2, 47, -32, 25, 122, -29, 12, 101, -8, -126, -23, 43, 7, 125, -20, -124, 82, -2, 13, -73, -106, 115, 31, 116, -23, -44, -71, 84, 3, 47, 91, 127, 127, -15, 95, 7, 93, 5, 113, -50, 54, 11, 13, -127, 17, 72, 43, -23, 5, -70, 20, 15, -27, 99, 69, -109, -122, -94, 16, 127, 0, 116, 104, 45, 108, -34, 87, 72, -14, 118, 46, 42, 109, -26, 95, 93, 127, 60, 127, -93, -54, -122, 34, -105, 56, 55, 103, 125, -71, -50, 95, -72, 127, 107, 21, 73, 126, 61, 127, 127, 24, -62, 90, 73, 90, -46, -78, -124, 72, 123, -42, 50, -107, 17, -32, -62, -89, 124, 1, 80, -2, 117, 119, -65, -127, -95, -121, -52, 103, 66, 75, -3, -62, -127, 127, -74, 124, 79, 49, 40, 105, -67, -71, -70, 43, 127, 119, -4, 66, 43, 23, 91, -126, 15, 63, -119, 112, 103, 15, -99, 31, -127, 69, 116, -46, -67, 2, -126, -29, 30, 30, -69, -98, -47, -87, -70, -127, 23, -73, 30, -7, 94, -52, -65, 98, -45, 97, 53, 23, -9, -22, -52, -47, 6, -1, -85, -15, -61, -14, 68, 110, -10, -121, -25, -35, -15, -94, -123, 27, 75, 48, -66, -56, -44, 93, 109, 67, -36, 24, 70, -126, 8, -127, 126, 52, 11, -32, 120, -13, -26, -28, -125, 127, 106, -50, 124, 36, -126, -12, 0, -23, 76, -71, -126, -12, -17, -82, 12, 124, 57, 33, 4, 77, -46, 71, -34, 72, 125, -128, 124, -24, -128, 75, -120, 69, -45, 55, 33, 127, -33, 4, -105, -41, -59, -91, 123, 44, -127, 127, -67, 52, 25, -125, -65, 100, -25, 123, 6, 11, -123, -92, -33, 126, -17, -4, 29, 33, 127, 96, 3, 87, -48, -18, -70, 123, 58, -127, -3, -52, -1, -36, -41, 127, 51, -52, -27, 46, -83, 57, 9, 126, 127, 94, 79, -37, -127, -40, 67, 52, 82, -66, 122, -13, -73, 127, -8, -80, 46, -48, 4, -54 }; static const rnn_weight vad_gru_bias[72] = { 124, 125, -57, -126, 53, 123, 127, -75, 68, 102, -2, 116, 124, 127, 124, 125, 126, 123, -16, 48, 125, 126, 78, 85, 11, 126, -30, -30, -64, -3, -105, -29, -17, 69, 63, 2, -32, -10, -62, 113, -52, 112, -109, 112, 7, -40, 73, 53, 62, 6, -2, 0, 0, 100, -16, 26, -24, 56, 26, -10, -33, 41, 70, 109, -29, 127, 34, -66, 49, 53, 27, 62 }; static const GRULayer vad_gru = { vad_gru_bias, vad_gru_weights, vad_gru_recurrent_weights, 24, 24, ACTIVATION_RELU }; static const rnn_weight noise_gru_weights[12960] = { -10, -8, 5, -72, 7, 55, -38, 3, 10, 4, 21, 60, 73, 0, -3, 34, 49, -36, 17, 8, 18, 41, -51, -42, 34, -8, 126, 15, 112, 74, -60, -60, 53, -17, 65, 6, 74, -1, 26, 80, -46, -99, -47, 40, 29, -21, 85, -75, 27, -117, 46, -22, -76, 56, 16, -67, -49, -63, -35, -10, -20, 10, 68, 7, -1, 37, 58, -53, 6, -79, -20, 12, 6, 91, -63, 67, 58, -13, -23, -74, -50, -77, -53, -22, -56, 123, -33, 28, 74, -85, -9, -57, -32, 38, 21, 122, 40, 23, -30, -81, -68, -29, -14, -98, -1, -62, -32, 19, 102, 26, 28, -23, 104, 28, -43, -20, -41, 28, 80, -22, -88, 6, -26, 14, 34, -46, 57, -33, -105, -16, 3, -17, -55, -1, -47, -122, 11, 16, 62, 78, -1, -64, 71, 57, -5, 45, 65, -93, 31, 30, -25, 21, 23, 32, -1, -75, -10, 75, -90, 21, 7, -110, -77, -39, 18, -39, 54, -97, 12, 52, -97, 17, 73, 120, -81, -114, 67, 82, 29, -71, -47, 69, -64, 17, -105, -24, -70, -32, -2, -112, -31, -48, 1, 22, 92, -21, -89, -65, 16, 49, 3, 15, 80, -21, -1, 37, -4, -25, 12, -80, -43, 56, -7, 36, -20, 18, -12, 39, 66, 74, -100, 117, 76, -82, -93, 63, 56, 36, 5, 41, -57, 31, -47, -14, 52, -22, -56, 29, -123, -104, 41, -113, 124, -106, -36, 41, -86, -40, 44, 28, -6, 114, -32, -17, -26, -77, -69, 42, -33, 61, 28, 82, -18, 71, -53, -63, 122, -38, -49, -108, -32, 126, 126, 45, 43, -56, 61, 9, -20, -53, 122, 98, -3, 3, 24, -3, 80, -42, -20, 57, -34, 108, -26, 48, 116, -14, 53, 5, -45, 21, -55, 114, -49, -29, -44, -5, -70, 98, 63, -115, -66, 53, -55, -19, 83, -12, 7, 47, 42, 15, -36, 44, 75, -85, 105, -84, -17, -127, 15, -67, -105, 23, 36, -1, -16, -116, 21, 58, 69, -57, -104, -81, -49, 91, 26, -72, 33, -31, -37, -79, 5, 9, 123, -61, 11, 67, -14, -29, 41, -53, 37, -59, -20, -24, 95, 125, -66, -26, 17, 28, -43, -8, -100, 80, -6, 0, 37, -123, -54, -92, 28, 56, 127, 48, 11, -58, 99, -90, 63, -4, 6, 10, 37, -38, -15, 31, 5, -39, 25, -17, 24, -23, -64, -68, 41, 65, 28, -113, -115, -27, -51, 50, 9, -101, 73, -41, -104, 88, -71, 3, -87, 119, -73, 20, -35, 0, -30, 34, -31, -9, -4, 23, -19, 35, -16, 111, 66, -52, -107, 101, 54, -2, -3, 109, -40, -2, 119, 74, -26, -116, -105, -90, 25, -111, -43, -92, -3, -104, 102, 11, 19, -83, 14, -62, 38, 57, 50, -10, 36, -95, 124, 32, -34, -123, -7, -109, 124, -119, -67, -116, -31, 114, -65, -34, -126, 8, 8, 5, 53, -28, 53, 84, -9, -14, 92, -70, 74, 116, -4, 121, -49, 108, 0, 126, 123, -1, -25, 24, 56, -121, 20, -47, -41, -11, -22, -32, -40, -41, -66, 29, -128, -30, -28, 31, -39, 30, 57, -96, 63, -121, 71, 1, -29, -20, 72, 114, 12, -43, 23, -75, 24, -4, -123, 17, 18, -68, -23, 51, -30, 39, -125, -48, 13, -119, -75, -74, 51, 125, -10, 29, -103, 6, -28, 22, -45, 19, 17, 19, 33, -3, -18, -30, -12, -25, -128, 61, 94, 47, -56, 59, -62, 66, -28, 18, -115, 12, -3, -80, 60, -62, 55, -16, 68, 23, -6, 109, 11, 0, -7, -96, -11, 21, 44, -75, -8, -10, -10, 69, 14, 14, -41, 26, 67, 37, -30, 44, 11, -16, 3, 66, 1, -18, 21, 96, -29, -100, 27, -8, -98, 21, -2, 58, -45, -15, 93, 37, -66, -48, -7, -5, 39, -57, 17, -81, 42, 0, -40, 123, 3, 118, -14, 56, -113, -68, -127, 74, -78, 46, 97, -61, -42, 68, -32, 16, -10, -82, -6, 1, 98, -48, 20, 32, -102, -35, 45, -5, -91, 26, 37, 18, 59, -88, -29, 17, 43, 33, 14, 6, -37, -37, 5, -7, -37, -13, 72, -6, -128, -43, 17, 32, 45, -26, 4, -85, -59, 8, 5, -27, 51, 55, 42, -79, -13, -51, 49, 70, -26, -21, 9, 27, 21, -26, -76, 28, 1, 89, -76, 23, -4, 10, 31, -13, -22, 3, 41, 24, 18, 25, -55, 10, -23, 4, -72, -18, -91, -50, 1, -55, 12, -26, -43, 11, -14, 27, -82, -73, 36, 27, -20, 62, 53, 100, 75, -12, -37, -77, -127, 32, -21, -24, 34, -26, -39, -5, -66, 94, -97, 19, 16, 61, 59, 65, 37, -64, 26, -34, 63, 74, 7, 38, -2, -27, 82, -73, -10, 37, -43, 1, 23, 24, 25, -5, 13, 6, -76, 78, 46, 44, -107, 14, 7, -22, 28, -125, 47, -48, 28, -16, 15, 1, -16, 21, 15, 51, 37, -17, 2, 39, -23, -28, 10, -51, -48, -1, 6, 88, 38, 22, -40, 37, -22, -23, 67, -4, -3, -6, 9, 108, -32, 31, 77, 28, -101, -23, -10, -38, -13, 12, -34, 55, 24, -4, 48, 29, -72, -83, 41, -31, -49, -68, 5, -3, 124, -19, 44, -94, -4, -8, -31, 9, -21, 58, -60, 24, 13, -9, 97, 53, 93, -51, 105, 55, 36, -32, 6, -51, -99, 19, 39, -63, -64, 29, 22, 5, -24, -74, 72, -6, 35, 37, -25, 65, 74, 29, 30, 65, 91, 30, -42, 15, 42, -64, -87, -68, 53, -78, -33, 21, -60, 33, 7, 6, 10, 68, 55, -47, 51, -56, 79, -29, -1, -66, -29, 50, 66, -12, -67, 69, -53, -90, -31, -123, 49, 7, 10, -6, 55, -61, -14, -6, 59, -2, -41, 21, 10, -21, -24, -23, -34, 30, -49, -41, -27, 36, -56, 46, 7, 18, -23, 78, -49, 1, -37, 43, 77, -21, -19, 18, 14, 35, 92, 39, -39, 44, -58, -1, 4, -63, 27, 79, -14, -7, -41, -34, -24, -25, 13, -14, -30, 5, -62, 13, -52, 53, 40, -18, -29, 52, -20, 11, 20, 23, -47, 51, 30, -91, -46, 39, 4, 53, -18, 2, -28, -12, 62, -29, -57, -13, -20, 60, -15, 3, 49, -26, 0, -30, -18, 97, 11, 52, 43, 87, 107, -94, -30, 63, -4, -62, 48, 2, 22, 7, -11, -79, -41, 18, -28, 9, 30, -58, 80, -64, 45, 2, 28, -49, -25, -34, 25, 87, 108, -8, -42, -34, 61, -14, -13, 62, -98, -5, 23, 15, -2, -1, -6, -52, 40, -33, 61, -38, 76, -115, -23, 22, 17, 25, 63, -37, -32, 26, -19, -8, 54, 6, -39, -28, 25, 40, -29, 33, 10, -50, 20, 25, 6, -22, 69, -24, -115, 2, -13, -28, 28, -8, 109, -18, -64, 96, 6, 7, 31, -10, 7, -34, 24, -10, 50, 23, -59, -55, 45, 37, -98, 27, -17, -47, 63, 57, 13, 35, 4, -85, -65, 52, -54, -19, -40, 4, -68, -61, -85, 98, -81, 44, 25, -17, 44, -33, -31, -44, 21, -6, -29, -32, -2, 50, -31, -16, 46, 50, -54, -18, 70, -88, -44, 26, -51, -34, 21, 48, -16, -15, 5, -28, -37, 25, -52, 25, 37, -60, 19, -18, -49, 72, -120, -1, 65, -61, -28, 25, -114, 89, -61, 126, -48, -64, 69, 37, 46, 9, 18, -117, -35, 64, -75, 28, 127, 33, -63, 22, -15, -28, -9, -41, 27, 68, -4, 54, 4, -89, -8, -10, 83, 73, -11, -90, -8, 14, -92, -38, 11, -22, -36, 33, -37, -38, -126, -74, -5, -12, -8, -4, -28, -47, -30, -30, -6, 43, -5, 56, 3, -16, -83, -73, -51, 23, -99, -10, -2, 57, -18, -17, -53, 3, -21, 35, 25, -116, -20, -33, 89, -44, 49, 102, -74, -57, -65, -127, -33, 59, 60, 20, -60, -1, -18, 10, -30, 106, 3, -24, -15, 93, 45, -22, 7, 55, 9, -27, -82, 3, 19, 9, 4, -14, -43, -36, -19, 97, 85, 31, 42, -35, -19, -12, -1, 68, -53, 46, -127, -93, 16, -63, -58, -126, 55, 6, -52, 97, -41, 59, 49, -9, 10, 54, -42, 5, -11, -25, -1, 35, 72, 52, 28, -6, -54, 30, -28, 18, 38, -17, 57, -8, -44, -20, 42, -20, 94, -46, -2, -81, 110, 27, -66, 5, 63, 36, -51, -55, -27, 71, 125, -5, -12, -57, 65, -98, 36, -12, 17, -8, -13, -8, -17, -52, -109, 15, -31, 31, 9, -23, -22, -11, 10, 55, -11, -52, -69, 52, 10, -23, 47, -35, -4, -65, 15, 33, 53, -14, -104, 26, -26, -29, -8, 97, -2, 58, -127, -4, -106, 35, 53, -2, -71, 2, 79, 54, 39, -74, -121, 124, 41, 25, -33, 4, 28, -18, -9, -43, 59, -11, 31, -19, -122, 86, 25, 54, -40, -18, 49, -25, -28, 118, 65, -102, 111, -39, -7, -89, -38, -17, 79, 0, -50, 72, 51, 22, 24, 36, 59, 1, 66, -119, -84, -8, 102, 44, 15, 56, 26, -74, -29, 28, 13, -75, 32, 78, -38, -45, -80, -90, 13, 3, 34, -76, -122, 120, -82, -34, 6, -32, -100, -89, 14, -14, 73, 24, -41, 53, 30, -80, -63, 51, -17, 33, 47, -17, 14, -17, 32, 74, -52, 2, 14, -67, -16, -18, -57, 18, -14, 44, -73, 45, 107, 38, 69, -24, -12, 114, -15, 91, 10, -26, -51, 78, 63, -78, -5, -120, 14, 32, -6, -25, -49, 67, 20, -66, 7, 65, 46, -41, -32, 62, 41, -50, -87, -34, 64, 70, 23, -36, 44, -51, -127, -22, -102, 33, -58, -23, 105, -29, -33, 47, 9, -44, 35, -36, -21, 126, -90, -34, 105, -6, 18, -35, 3, -14, 65, 114, -2, -25, -27, -72, -63, 61, -109, -13, -113, 8, -45, 22, 105, 6, 45, -47, 65, 16, 79, 28, -21, 82, 37, -15, -64, -34, -114, 29, 67, 43, 78, 52, 34, -84, -54, -48, -65, 63, -8, 18, -16, 10, 3, 71, -101, 119, -24, 88, -26, 33, -38, -80, 14, -123, 24, -33, -20, 52, -1, -40, 49, -13, 8, -39, 23, -5, -11, -23, -10, -17, -25, 43, 29, -13, -34, -19, -35, -18, -21, 51, -21, -3, -19, 12, -2, 50, 48, 22, -56, 39, -5, -38, -60, -11, 36, 33, 13, -53, -9, 94, 8, -62, 55, -11, 101, 22, 2, -8, -127, 98, -25, -37, -73, 71, -16, 45, 67, 8, -17, -90, -91, 23, -120, -39, -9, 28, -128, 8, -52, -107, -27, 68, 33, -31, 29, 124, -26, 30, -10, -31, 33, 47, 9, -65, -46, 13, -90, 126, 99, -37, -81, 1, -61, 15, -4, 4, -9, -34, -33, -33, -28, -49, 14, -93, 87, -80, 59, -56, -50, -45, 45, -65, -97, 6, -121, 6, -113, 19, 56, -21, 4, 12, 87, 5, -112, 126, 69, 27, -70, 82, 31, -27, -123, -16, 21, 32, -5, 83, -95, -7, -1, 93, -9, 15, 124, 21, 21, -7, -45, -16, -66, 5, -34, -118, -16, -32, -34, -44, 2, 124, -78, 8, 90, -27, 127, 44, -28, 114, -30, 114, -8, 27, -56, 18, 59, -24, -62, 16, -25, -31, 71, 17, 3, 12, 92, -4, -78, 37, 127, 85, -3, -17, 80, 32, -2, 84, -71, -31, 62, -26, 47, -81, -51, -95, 66, -52, -57, -31, -10, 54, 116, 88, -3, -122, -93, 7, 37, -70, -28, -91, 39, 12, -94, 41, 44, 70, -55, 69, 20, 56, -34, 1, 9, -34, -37, -4, -2, 23, 68, -44, 2, -46, -5, -72, -104, -94, -56, -30, -59, 56, 14, 108, 36, 115, -96, 29, -114, 105, -64, 5, 65, -82, 25, -10, 117, 58, 20, -19, 122, 33, -37, 35, -19, -120, 6, -10, 78, -34, 126, -116, -37, 59, -30, 55, 47, 51, -42, 11, -2, -26, 29, 25, 51, -5, -34, 89, -29, 76, -51, -44, 9, -17, 46, -42, 5, -52, -24, -14, 6, 127, 127, -9, -5, -81, -2, 65, -67, 72, 99, 14, -13, -6, -7, -36, -54, -6, -4, 30, -29, -27, -28, -56, 83, -1, 29, -24, -48, -23, -20, 11, -2, -4, -31, 39, -45, 0, -18, -73, -29, 48, 51, -20, 61, 24, -62, 75, -32, -18, -44, -38, 44, 26, 38, -56, 14, -34, -48, -7, 19, -55, 20, -95, 45, 16, 13, 93, -13, 21, -72, 23, 124, -33, -52, 51, 5, 8, -25, -10, -77, 102, -25, -1, -14, 14, 4, 16, -28, 98, 18, -43, -26, 12, -30, -86, -68, 81, 9, -50, 80, -56, -11, 37, 24, -11, 28, 1, 55, 36, 34, 23, -87, -58, 10, 31, -11, 19, -48, 48, 95, -12, 33, -46, 100, 52, 32, -49, -24, -27, 46, -6, -31, 21, 39, 33, 63, -65, -35, 79, 127, 11, 34, -13, -124, 10, -54, 24, 3, 24, 11, 16, -19, -45, 36, 52, -32, 90, -33, -68, -51, 33, -16, 34, 65, 98, -8, 125, 60, -83, -21, 6, 111, 87, -46, -59, 44, -7, 89, 124, 28, 32, 30, 68, 106, -37, -1, -2, -97, -57, -92, -37, 56, -75, 22, -31, 100, -44, -10, 12, -2, 95, 36, 3, 74, 35, 127, 51, -41, 72, 27, 59, -105, 103, -2, -32, -116, 23, 43, 6, 48, -20, 110, 66, -42, -28, -41, -10, 33, 117, 14, 89, -18, -36, 54, 39, 88, -72, -27, 109, 27, -13, -119, 54, -18, -14, 85, -12, 64, 6, 44, -15, -66, -46, -18, 90, 109, 98, 119, -28, 11, 46, 29, 115, -20, -106, -27, 97, -45, -82, 43, -103, 122, -14, -122, 24, 10, -128, 14, 10, 72, 40, -71, -10, -21, -99, -103, 2, -120, 50, 0, 35, -100, 46, 77, 88, -28, -1, 26, -46, -3, -22, -37, -11, -82, -82, -128, -21, -16, -4, -9, -69, -5, 40, 0, -63, 33, 19, -14, 83, 54, 24, 66, -8, 24, -122, -44, -32, 86, 38, -3, 6, 48, 32, 62, 34, 3, -42, 28, -11, -23, -23, 21, 12, -2, 36, 4, -20, -1, 64, -20, 11, 73, 23, -7, -50, 42, 7, 99, 40, -19, 39, 26, 65, 117, 7, -16, -6, 79, 70, -48, -12, 47, 19, 7, -54, -7, -43, 39, 50, 23, 53, -48, -97, 28, 6, 83, -25, 42, 38, 19, 32, -59, 22, -60, -94, -45, -45, 83, -3, -69, 75, 34, 61, 66, 30, 19, -14, -32, -4, 13, -38, 8, -36, 31, -48, -56, -49, -24, 72, -73, 60, 17, -40, 6, 125, 27, -18, 41, 28, 44, 29, -32, 45, -33, -6, -41, 123, 5, -31, 89, 92, 20, -66, 73, -39, -51, 0, -31, 21, 69, 99, -50, -3, -13, -10, -5, 72, 14, -13, -57, 20, -33, 107, -84, 5, -57, -37, -10, -46, -80, -108, 3, 49, -36, -28, -44, 34, -125, 41, 48, -3, -33, 2, 12, 27, -56, -41, 18, -42, -25, 81, -67, -86, -29, -7, 94, -89, 30, 84, 73, -21, 40, 29, -27, -19, -35, 68, 64, -4, -100, -102, -94, -19, -18, -30, -36, 26, -2, 33, -93, 56, 67, 103, -73, -101, -45, 18, 11, 18, -33, 43, 34, 37, -71, 27, -38, -13, -26, -13, -16, 113, 33, 84, -26, -55, -17, -13, 15, 32, -8, -37, 32, -5, 113, -10, 126, 53, 23, -24, -52, -11, -55, -9, -37, -33, 40, 65, 3, -95, -65, 78, -13, -75, -22, 9, 93, 68, 46, 127, 16, 87, -47, 59, -36, -5, -3, 37, 16, 66, 19, -69, 42, -15, -18, 76, 96, 91, -7, 24, -29, 47, -20, 56, 45, -54, 50, -70, -52, 54, 41, 20, 63, 71, -63, 40, 1, 80, 20, -39, 6, -35, 71, -40, 7, -28, 63, -7, -49, -12, 1, -16, 73, 9, 50, -46, -10, 73, -81, 94, -13, 6, -1, 31, -19, 15, 41, 3, -17, 0, -85, -93, -86, -10, -37, 47, -6, -62, 30, 35, 20, 99, 37, 63, -17, -42, -28, -96, 2, -22, 3, 15, 28, 11, -115, 48, -34, 6, -30, -78, -85, 38, 25, -32, -29, -97, 2, 14, 26, 47, 99, 119, 71, 8, -60, 42, -55, 30, 53, 1, 31, -103, -20, -11, 0, 87, 37, -5, 89, 15, -32, -12, 55, 60, 3, -32, -124, -2, -88, 53, -51, 55, -4, -53, -46, 94, 18, 57, -72, 14, -41, 11, 14, -29, -3, -4, -9, 34, 18, -10, -72, -14, -82, -90, -31, 11, -120, -48, 44, 3, -6, 79, -15, 8, -16, -89, 20, -125, -72, 69, 19, 118, -54, -2, -10, 50, -28, -3, 17, -22, 104, 17, 101, -61, -9, -117, 5, -24, -105, -117, -115, 28, -120, 36, -62, -77, 50, 67, 79, -41, -9, 4, 2, 15, 114, -12, -16, 15, -49, 50, -122, -46, 30, 39, 56, 49, 14, -28, -71, -125, 36, 115, -46, 47, -45, -16, 69, 113, -7, -119, -43, -16, 17, -11, 102, 120, -34, 64, -5, -53, 14, 0, -124, 120, 14, -26, 42, 74, 55, -12, 103, -37, 27, -54, 13, -54, -9, 39, 6, 6, -28, 43, 54, 21, 46, -90, -58, 122, -21, -81, -13, -39, 50, 106, -2, 49, 9, -16, 24, 15, -73, 110, 1, 104, 52, -104, 2, -35, -17, 8, -58, 60, 26, 68, -123, 6, 44, 70, -40, -4, -95, -21, -110, 51, 80, -19, -97, -5, -50, -100, -23, -30, 46, -66, -18, -38, -48, 38, -9, -26, -71, 21, 25, 14, 16, 53, 14, -56, 20, 79, -87, 50, -7, -28, 52, 4, 11, -17, -26, 39, 2, 25, 6, 13, 11, 18, -56, -36, 46, -115, 32, -80, -44, -7, -32, -13, 74, -61, 9, -89, 14, 80, 20, -61, 109, -21, -66, -34, -126, -6, 12, 22, -14, 55, -28, -47, -59, -12, 2, -38, 73, -42, 91, -87, 37, -4, 29, 33, 122, 43, 85, 41, -50, 11, 29, 60, -4, 31, -18, 8, -27, -75, 76, -13, 35, 18, -49, -34, -33, 6, 51, 51, -41, 53, 47, 21, 62, -52, 30, 5, 16, 78, -22, 28, -21, 31, -16, 21, -2, 62, -94, -30, -83, -92, 122, -41, -113, -27, -51, -123, 4, -116, 4, -68, -14, 3, -21, -5, 29, -31, -15, -4, -27, -24, 10, -121, -119, -30, -37, -74, -32, -63, -46, -69, -72, -44, 90, 84, 21, -16, 79, -16, -32, -111, 10, -25, 97, 57, -59, -69, -83, -36, -24, -90, 14, 76, -23, -16, 2, 26, 26, -50, 23, 120, 44, 32, -12, -29, -11, -45, 8, 41, -28, 107, -32, -40, -92, -8, -76, -52, 76, 79, 93, 16, 86, 46, -14, 53, -65, 53, 92, 63, 44, -30, 7, 5, -4, 20, 22, 14, 8, 9, -58, -99, -30, -119, 46, 2, -23, 34, 51, -63, 45, -84, -8, 36, -59, -2, -98, -6, 29, 121, -26, -1, -20, 39, 25, -66, -56, 8, -40, -7, 25, -79, 90, 72, -55, -12, -20, -123, -39, -25, -65, -12, 47, 30, 33, 55, 18, 19, -22, 35, 86, 65, 11, 119, -32, -47, -107, 80, -50, -43, 44, -1, -14, 49, 17, 33, 13, 84, 64, 125, 97, 17, 20, 20, -62, -7, -13, -16, -8, 18, -36, -89, -13, 98, 21, 108, -35, 51, 44, -127, -31, 40, -83, 50, -122, 16, -82, -105, -58, 65, 76, -31, 61, 40, 28, -92, 43, -59, 63, -33, -33, 24, -37, -22, 7, 51, 54, 29, 12, 40, 68, -44, 79, 52, -3, 10, -62, 35, -26, 70, 40, 61, 83, -73, 97, 16, 33, 49, 0, -83, -15, -101, 67, -26, 108, 113, 3, 93, -15, 83, 27, -67, 71, 119, -48, -31, -28, 4, 4, -15, -46, 13, -17, -70, 78, 49, 36, 21, -72, -45, -1, -31, -52, 1, 61, -17, -18, -71, 69, -65, -11, 104, -25, 52, 7, -70, -14, -8, -16, -13, 72, 37, -91, -80, 31, 7, -33, -59, -12, -20, 26, 48, 69, -16, -87, -13, -11, -14, -14, 58, -2, -3, -119, -17, 31, -17, -23, 75, 62, 43, -97, -42, -23, -9, -5, -11, -43, 21, 37, -37, 6, -3, 14, 8, 18, -98, 37, -14, -50, -36, 31, 123, 7, 19, 95, 17, 22, 15, -7, 59, 62, 18, -93, 10, 23, 42, -26, -23, -32, -28, 10, 42, 19, 38, 8, 31, -109, -5, 81, -25, -40, 35, -96, -117, -12, -4, -15, 13, 84, -70, -4, -93, 24, 28, -66, -45, -70, -118, -33, 116, -6, 7, -54, 2, 11, 85, 34, -4, 67, 67, -96, -13, 3, 11, 50, 62, -61, -28, 7, -17, 11, 22, -61, 62, 45, 42, 50, -26, -43, 114, 69, 121, 53, 127, 15, -3, 50, 30, 70, 26, 25, -15, 35, -72, -48, -11, 15, 29, 42, -40, 12, -38, -3, 16, -81, 65, 53, 84, -48, -66, 11, 23, -22, 77, 21, 115, -87, -35, -50, -89, -121, 67, 18, 8, 40, 66, -3, 11, -24, -100, 70, 35, 16, 16, -31, -62, 71, 64, 74, -124, -15, -26, -17, -26, -55, 71, -22, 20, -35, 24, -48, 40, 56, 27, -35, -14, -8, -34, 113, 41, 58, -8, -2, -114, -38, -73, -28, -57, 70, 3, -22, 64, 31, 29, -46, -43, 88, 11, -67, -6, 71, -27, -24, -38, -24, -80, -21, 36, -32, -84, 37, 55, -22, 24, -54, 11, -94, -28, 8, -30, -46, 39, 25, 0, 6, 93, 34, 8, 3, 26, -76, -69, 4, -71, 57, -65, -90, -40, -43, -56, -16, -53, -11, -11, 7, 45, -16, 7, 11, 39, -38, -9, -81, -86, -50, -16, -39, -18, -11, -10, -69, -44, -58, -49, 58, -63, 2, 64, 5, -81, -36, 42, 56, 24, 11, 2, 36, 92, 78, 33, -2, -98, -55, 46, 14, 14, 42, -14, -12, -6, -41, -69, 88, -122, 36, 34, 12, -15, 18, -98, 58, -28, 44, 4, -107, 85, 46, 27, 8, 58, 66, -70, -8, 21, -110, -9, 89, -83, 55, 59, -110, 51, 44, 11, 16, 108, 43, -33, -18, -34, 2, -3, 28, -50, 53, 14, 44, 6, -19, 23, 41, 75, 72, -18, 12, -51, 34, -86, 28, 30, -103, 74, 4, -43, 49, 10, -31, -10, -17, -65, -82, -92, -17, 25, 1, -9, 30, 81, 15, 9, 72, 52, 27, 19, 61, 14, -64, 62, 5, -1, -16, -21, -25, -59, 28, -7, 28, -35, -28, -17, -16, -46, -25, -25, -79, -33, -112, 21, 41, 13, -6, 53, 7, 17, -54, -39, -91, -94, 70, -128, -66, 28, -7, -93, -120, 54, -47, 35, -111, -58, 54, -5, -48, 11, -18, -104, -70, -78, 54, -7, 17, -8, -96, 72, -119, -125, 28, -107, 14, 16, -38, -48, 63, -21, 74, -45, -65, -94, 118, 39, -100, 39, -41, 13, 19, -122, -55, 10, 23, 33, 20, -68, 24, -41, -113, 12, 95, 26, 0, -17, -42, -66, -11, -107, -86, 76, 29, 49, -108, 112, -28, 124, -55, -96, -23, 34, 91, -30, 61, -94, 102, -18, 19, -77, -60, 13, -125, -28, 7, -34, -91, 22, -12, -50, 17, -8, 2, 7, -18, -62, 51, -37, -55, 19, 35, -30, 8, 46, -42, -56, -128, 61, -35, -16, -81, -8, -30, -59, -22, -111, 6, -45, -76, 29, 16, -72, -34, -28, 22, -5, -116, 3, 18, -9, -56, -48, 18, 56, -97, -21, -121, -116, -6, -24, -62, -26, -21, -69, -52, -48, -22, 23, 72, -35, 68, 39, 47, 37, -18, 0, -76, 26, 114, -10, 25, 5, -12, 70, 17, -105, -25, -112, 5, 24, -8, 7, -38, -119, -21, 34, 125, -125, -2, 5, -6, 81, 40, 60, 54, -104, 22, -42, -2, 120, -33, 16, 38, -30, -23, -83, -60, -1, 86, 92, -59, -10, -6, -11, -68, -96, -53, -3, -9, -17, -17, 109, 34, -15, -121, -40, 5, 89, -38, -26, 38, -47, -80, -40, -116, -34, -30, -76, -35, -39, -118, 27, 0, -67, 76, 0, -5, -2, 72, -15, -1, -94, -75, -62, 37, -6, -91, 59, -15, -8, -124, -25, -46, 17, -22, 28, 5, -50, 21, 63, -7, 12, 67, 33, 16, -35, -73, -120, -30, -14, -113, -77, 45, 84, -16, -50, -21, 44, -97, 6, -61, -40, 29, -104, 28, 4, -17, 50, 14, 44, 13, -61, -34, -28, -8, 105, 67, 0, 31, -113, -121, -65, -21, 24, 57, 12, -16, 9, -5, -1, 38, -61, -30, 60, -7, -55, 7, 32, 39, -33, 12, 30, -60, 13, -75, 3, 55, -40, -16, 20, -86, 68, 24, -57, 72, 24, -8, 62, -126, -42, 54, 122, 125, 64, 25, -38, -45, -78, -33, -109, 57, 15, -79, -1, 73, 7, -20, -42, -67, -13, -24, -69, 38, -38, -22, -115, 70, 15, -104, 67, -35, -114, 27, 31, -80, -5, 27, -8, -11, -58, 39, -29, 1, -18, -4, 23, -12, 46, 33, 32, 21, -14, 8, -13, 43, -8, 25, -37, 55, -30, -37, -39, -2, -117, -12, -14, -3, -10, 30, -27, 9, 7, -32, -25, -101, -115, -40, -8, -5, -38, 34, 44, 45, -62, 45, -25, 100, -29, 52, 24, -32, 66, 31, 112, 72, 12, 121, -57, 21, 125, 55, 36, -33, 22, 2, 52, 40, 25, -1, 26, 6, -23, -18, -16, 11, 25, 17, -62, 6, -60, -25, 65, 50, 114, 62, -44, -19, 43, 70, 76, 40, -8, 47, -31, -64, 17, -34, 42, 8, 20, -19, -7, -59, 54, 26, -31, 120, 18, -55, -3, 4, -2, 58, -113, 10, -41, -6, -13, 2, 9, 28, -20, -34, 74, -44, 45, 49, 1, -9, 72, -13, -65, -50, 17, 22, 32, -10, 87, -21, -43, -21, -24, 5, -83, 20, 29, -54, 14, -20, -48, 94, 125, -17, 16, -15, 24, 15, 17, 26, -34, 52, -4, 18, -59, -1, 4, 14, 62, 17, -54, -41, 29, -77, -15, 31, 29, 13, 5, 27, -35, 33, 8, 48, -21, 30, -5, -22, -67, -118, 18, 0, 69, 26, 2, -120, 65, 27, -28, 57, 41, 48, 7, -52, 14, 6, -11, 54, -17, -40, -28, 82, -14, -27, -12, 2, 16, 30, -113, 13, -48, -37, 61, 72, 2, 8, -30, -30, 39, -78, -96, 42, -80, -16, 45, -28, 57, 24, -123, -47, -7, 32, -25, 6, -76, 50, 97, -89, -40, -49, 89, 70, 114, -29, -14, -43, -127, 83, -100, -79, -16, -19, 78, -27, 46, -30, -65, 37, 46, 34, -12, -41, -29, -17, -68, 53, 99, 59, 51, 69, -11, 32, -5, -53, 33, -14, 4, 55, -68, 23, 26, -63, -123, -31, -39, -67, 58, -6, 23, -3, 25, 41, 12, -31, -11, -55, -63, -90, 8, -11, 27, -31, -127, 15, 29, 28, -74, -46, 44, -1, -122, -46, -44, -113, 40, 11, 23, -44, 4, 6, -26, -118, 30, -70, 42, 19, -29, 45, -76, 34, 11, -94, 1, 125, -26, 11, 35, 39, 48, -20, -83, 48, -36, -23, -53, 11, -53, -38, 57, -34, 33, -59, -2, 51, 121, -3, -29, 30, -48, 51, 20, 36, 2, -22, -12, 42, -7, -8, -52, 20, -66, 61, -64, -53, -21, -83, 9, -20, -39, 61, 6, -75, -13, -12, 42, 90, 48, -17, 47, -3, -97, 4, -87, -7, -39, -19, -14, -64, 70, 27, 86, 30, -23, -23, 110, -21, -81, -38, 63, 20, 44, 10, -1, -106, -26, -122, -45, -25, -61, -7, -45, 3, -3, -8, 4, 1, -38, -14, -41, -31, -10, 2, 0, -54, -37, 96, 25, -52, 4, -2, 25, -2, 16, 21, -15, 39, -29, 58, -77, 62, 39, -53, -66, -14, -78, 31, 47, 5, -43, 12, 38, 45, 33, -33, 53, 31, -14, 18, -28, 40, 36, -32, 68, -77, 78, -31, 10, 124, 23, 26, 61, -46, 80, 17, -17, -11, -64, -27, 72, -54, 55, -1, -8, -102, 33, 9, 38, 39, 122, -36, -21, 51, -27, -16, -12, 35, -7, -13, 0, -117, 49, 0, -53, 4, -91, -61, 5, -30, -102, -43, 17, 13, -48, 44, -40, 27, 84, -19, -13, 72, 101, 10, 12, -16, 15, -37, 18, -37, 1, 22, -79, -55, -42, 6, 123, -8, -31, -19, 35, -31, -74, -35, 30, -21, 30, -76, -8, -57, 11, -9, 29, -46, 29, -30, -15, -1, -43, 13, -9, -3, -72, -3, 36, -62, -91, -5, 32, 7, 10, 0, -46, -44, -8, 23, 39, -3, 15, 13, 19, -107, 7, -45, 11, 30, -72, -23, -25, -93, -116, 19, -1, -36, -25, -4, -59, 18, -22, -88, 0, -20, 12, 82, 10, 44, 89, 64, 100, -39, 101, 60, 70, 93, 108, 121, 120, -20, 31, 20, 66, 123, -11, -118, 4, 82, 32, -19, 24, 4, 6, 28, -9, 57, 76, -15, 79, 86, 123, 79, -94, 23, 73, 90, -54, -43, 4, 12, 12, 121, -49, 3, -45, -6, 33, -10, 74, -30, -56, 35, 54, -92, 29, 10, 82, 84, 95, 112, 36, -54, -120, -83, 78, -1, 36, 54, 57, 3, 26, -48, 1, -46, -3, -22, 48, 45, -38, -51, -19, 33, -14, -88, 61, -39, 17, -4, -56, -100, 19, -40, -72, 7, -33, -6, 21, -64, -122, -40, 14, -119, -102, -69, 14, -19, -8, 60, 23, -128, -37, -28, -40, -2, 13, -4, -22, -15, 15, -2, -35, 42, -118, -4, -77, -1, -127, -35, -19, -68, -58, -72, -4, 8, -1, -15, -4, -125, 6, -108, -9, 56, -121, -6, 13, 0, 1, -118, 119, -13, 42, -52, -72, -72, 52, -61, -18, -37, 63, -112, 23, 31, -119, 34, 61, 46, 127, -68, -120, 19, -21, -12, 41, 25, -112, 21, 92, 83, 78, -63, -20, -61, 8, -24, 27, -19, 76, 31, -4, -22, 2, 8, 88, 122, -27, -72, -30, -52, -42, 25, -44, -67, 33, -65, 28, -64, -36, -127, -5, 119, 23, -112, -8, 84, 51, 77, -32, 93, 21, -3, 9, 10, -23, -109, 40, -99, -9, -10, 32, -21, -1, 1, -31, -54, 47, -49, -5, -83, -61, 4, 1, -2, 7, 45, -85, -78, -9, 122, -24, 26, 57, -10, 18, -14, -4, 3, -97, -7, -17, -4, -24, 0, -69, 40, 67, -63, 20, 51, 6, -36, 21, 53, -57, -41, -103, -34, 29, -88, 2, 49, 56, 31, -37, -26, -8, -22, 28, 18, -44, 0, -54, 61, 52, -97, 56, 7, 90, -17, 97, 1, -116, -86, -80, -64, -18, -26, -47, 105, -111, -16, 49, 23, 116, 127, 1, -11, 8, -2, -31, -51, 59, 21, 78, 90, 61, -4, -8, -82, 117, -34, 102, 8, -63, 96, -41, 25, 35, -15, -18, -13, 79, -33, -34, -75, -103, -82, -41, 37, -56, 13, 54, -84, -56, 88, 7, -66, -74, -3, -23, -118, -19, -34, 7, -44, -8, 26, -37, -9, 52, -58, 27, 54, -128, -15, -5, -126, 27, 61, 50, -15, 72, -37, -35, 17, -125, -16, 27, -34, -41, 9, -77, -1, 23, -91, -66, 38, -38, 41, -90, 67, -18, 16, 58, 23, -22, -11, 25, -10, 13, -71, 90, -13, 34, -41, 26, -124, 40, -42, -15, -29, 33, -8, -41, -84, -17, 78, -73, 120, -31, 69, 77, 54, 96, 7, -25, 98, 48, 120, 78, 65, 59, 59, 124, 69, 41, 33, -93, 32, 51, 44, -3, -127, -90, -25, -26, 37, 27, -14, 119, -46, 84, 4, -27, -3, -53, -12, 49, 86, 44, -15, 69, 15, -95, -18, 99, 27, -17, 1, -35, -11, 27, 15, -30, -78, -3, 41, 7, 127, -1, 102, 24, 45, 39, -37, -50, 11, 0, -16, 5, 23, -18, 63, 89, 63, 34, 47, -126, -8, 77, 21, -121, -51, -9, 29, 42, 43, 60, -107, 24, -35, 40, -36, 42, -35, -62, -23, -19, 43, 2, -52, 12, -70, 17, -122, -23, -54, 45, 19, 31, 40, -60, -9, 8, -38, 3, -62, -38, 15, 29, -15, 45, 18, -42, 66, 17, 48, -124, 39, -53, -52, 36, -16, -10, 18, 90, -29, 2, 26, 15, -11, -22, 65, 18, 53, 89, -88, 122, -86, 82, -63, -16, 111, 40, 55, 61, 22, 126, 17, -45, -58, 23, -30, 61, -98, 48, -35, -72, -7, -52, 25, -89, 80, -98, 15, -85, 78, 13, 6, -11, 52, -2, 29, -3, -3, 7, -37, 88, 61, -98, 8, -35, 10, -73, 11, 63, 27, -38, 30, -46, 2, 45, 20, 7, 45, 74, 67, 78, 27, -28, 33, 53, -119, -42, 32, 56, 34, -67, 49, 3, -36, 11, -62, 122, 6, -47, -3, -17, -40, 35, -48, 98, -67, -31, -35, 11, -64, 42, -18, -34, 33, -48, 26, -28, -6, -68, 33, 2, -70, -78, -27, 45, -20, 6, 13, -43, -35, -23, 4, 25, -49, 18, 8, 1, -15, -26, -41, 13, -16, -28, -8, -24, 23, -87, -22, 6, -26, 33, -16, -35, 19, -5, -27, -7, -74, 5, -81, 26, 15, 119, -15, 35, -111, -64, -70, -53, 34, -9, -30, -14, 20, -51, 57, 15, -13, 57, -74, -7, -39, -36, -3, -30, 13, -32, 8, -20, 47, -61, -63, -53, 33, 15, 32, 24, 81, -39, -42, -43, 46, 29, 26, 6, -30, -6, 42, 11, 23, -31, -22, 18, 18, -53, 28, 30, -18, -49, 53, -57, -13, 27, 31, -1, -7, -21, -6, -100, 49, -69, 120, -53, 10, 59, 14, -24, -27, 80, -63, -28, -26, -9, -13, -65, 8, -28, -13, 1, 66, -4, -20, -5, 25, -41, -18, 37, -16, -17, 9, -52, -32, 92, -26, -8, 9, -42, 26, 2, -15, 81, -13, -20, -7, -14, 75, -36, 44, 10, 6, 21, -38, -74, 15, 12, 58, -34, -22, 69, -41, -19, -60, 42, -57, -12, 9, 19, 10, -18, 3, -42, -23, 32, 9, 83, 38, 76, -111, 76, -98, 88, -114, -63, 0, -19, 41, 37, -33, 36, -7, 8, 53, 74, 51, 12, -16, 6, -15, -127, -5, 87, -51, 27, 72, 12, -104, -7, 53, 124, -21, -103, 122, 14, 56, -21, 52, -64, -23, 88, 122, -82, 0, 13, -54, -52, 31, 93, 122, -49, 15, -71, 84, 41, -53, -124, -43, 88, 70, 42, -5, 120, 77, -23, -94, -57, 51, -79, 58, 0, 8, -21, -61, -19, -37, 126, -11, -53, 20, -10, -68, 79, -124, -30, -59, -25, -8, -29, -125, 26, -36, -28, -64, -8, -5, 100, 70, -20, 7, -126, -54, 4, -1, 45, -18, 73, -19, -123, -64, 11, 20, 22, 1, 1, 3, -12, -41, 91, -69, -75, 16, 46, -29, -66, -31, -79, -85, -10, 41, -10, -83, -121, -10, -17, -90, 6, -128, -51, 76, 40, -19, 81, -123, 104, -17, 88, 19, 30, 92, 58, 29, 95, 14, 84, 109, 12, 20, -96, -16, -20, -45, -120, -13, -98, -126, 66, -104, 6, 106, 91, -1, 59, -50, 5, -24, -66, 32, 69, 68, 29, 23, -24, 63, -17, 55, -57, 5, 20, 66, -9, -25, 74, -16, -115, 71, -6, 4, 63, 34, -45, 30, 58, 37, 26, -22, -26, -32, 6, 9, 83, -30, -8, -2, 75, 43, 71, -62, -104, 44, 35, -75, -85, 21, -51, -1, 74, -97, 26, -67, 28, -34, -75, -62, -4, -55, -34, -24, 12, 16, -20, -4, -54, -62, -7, 20, -126, -1, 24, 4, 10, 32, -44, -76, -13, -49, -28, 6, -6, 34, 1, 17, 84, -22, -2, -40, 30, -34, -35, -91, -57, 30, 20, -15, 14, -27, 25, 24, 5, 13, 7, -112, -3, -30, 38, -33, 3, 25, 111, -20, -48, -23, 58, 5, -30, 29, 122, -72, 45, 110, -16, 47, -21, -16, 0, 34, 13, 40, -19, -14, 36, 9, 24, -6, -59, 39, 121, 123, -29, 25, 38, 52, 53, 31, -107, -89, 12, -29, -9, 59, -3, -13, 41, 67, 0, 64, 46, -23, 17, -52, 4, 34, -41, -47, 54, -19, 125, -13, -17, -56, -6, -1, 4, -28, -59, 72, 23, 39, 78, -114, 31, 5, -35, -39, 80, -30, 19, -117, -45, -74, 53, -26, 120, 22, -99, -24, 49, -60, -37, -15, 24, -29, -1, -2, -19, 4, 34, -8, -47, -15, 1, -78, 68, -33, 18, -11, -14, -6, -29, 10, -57, 2, -22, 37, 1, 52, -118, -22, -81, 25, 4, 35, -25, 16, -22, -97, -12, -73, 26, 13, 11, -36, -48, -63, -24, -16, -31, 19, -67, -11, 127, -13, 9, -31, 110, 83, -107, 25, 33, 63, 122, -30, 18, -61, -128, -49, -92, 10, -103, -37, 1, -21, -91, 80, 61, 41, -84, -24, 112, -15, -38, 2, -3, 7, 22, 68, -67, 44, -15, -75, -13, -71, 7, 52, -118, -88, 27, -34, -69, 30, 4, 88, -91, 4, -5, 13, -14, -32, 9, 47, 93, -27, 98, -5, 40, -65, 38, -21, 35, 62, -40, 10, 14, 4, 13, 17, -50, -23, 12, -90, -13, 35, 63, 23, 35, -128, 3, -103, 14, -53, -72, -31, 13, -42, -63, 17, -58, 6, 25, -24, -116, -48, -20, -41, -39, 80, -47, -54, -27, 38, -50, -116, -38, -76, 18, -39, -38, 12, 15, -75, 12, -62, 10, 33, -23, -21, -38, -95, -118, -71, -11, -25, 4, -52, -118, -2, -11, -117, -38, -119, 12, -24, -53, 43, 8, 64, 21, -37, 53, 27, -54, 40, -83, 55, 90, -16, 48, 39, -35, 102, -15, -63, 94, -6, 45, -23, -64, -123, 43, -29, 7, -23, 118, -58, -46, 23, -73, 37, -53, -8, 7, -9, -24, -33, -48, 31, 26, 28, 52, -48, 43, 33, -22, 56, 77, -26, -85, -66, 42, 0, -49, 12, -18, 26, 56, -13, 13, -14, 7, -29, -4, -89, 40, 25, 45, -15, 35, -7, 42, -7, -59, -10, 30, -92, -29, 3, -60, 1, 12, -6, 64, 0, 57, -99, 24, -46, 13, 1, 56, -21, -11, 0, -41, -15, -28, -36, 14, 17, -42, -57, 49, -9, -11, -23, 16, -103, 18, -28, 1, 13, -86, 4, -7, -22, -6, 5, -11, 41, -32, 55, -45, 1, -125, -39, -20, -12, 0, -20, 66, -17, -17, 3, 33, 24, 3, 55, -100, -103, 49, -127, 59, 74, -10, -93, -60, 45, -27, -23, 13, 107, 38, -75, -31, 70, -10, 12, -104, -68, -6, 31, 82, 17, 74, 56, 113, 72, 42, -52, -4, 75, 40, -117, -16, 15, 42, 19, 6, 33, -41, 92, 60, -13, 28, -12, -17, -11, -90, -118, 35, 21, -63, -32, -48, -50, 22, -25, -20, 41, 28, 22, 24, 8, -7, 14, 30, -20, 5, 59, -28, -21, 2, -41, 65, 56, -47, -94, -5, 19, -82, -60, -16, -22, -73, 16, 65, -35, 49, -34, 26, -20, 51, -28, -2, -34, 81, 8, -53, 2, 50, -43, 0, -48, -78, -5, -7, -37, 26, 98, -22, 7, -10, 37, 0, -23, 118, -14, -33, -11, 23, 3, -64, 3, 41, 102, -56, -101, 34, 1, 82, -22, -66, -1, 7, 58, 3, -27, -57, -7, -7, -72, 0, 84, 17, 14, 126, -87, 35, -3, 70, 126, -43, 50, 90, 52, 10, 102, -35, 23, -40, -91, 15, 26, 6, 102, -42, 16, -84, -9, -40, 63, 13, 27, -14, 98, 120, 59, -123, 21, 48, 121, -61, 32, 49, -23, 13, 45, 45, 58, -76, -14, -35, -6, 65, 32, -57, 99, 14, -81, 34, 34, 46, 70, 9, 31, -23, -48, -14, 14, -9, -62, -48, -18, 103, -45, 9, -8, 29, 46, -17, 45, 41, -58, -53, 1, -35, 31, -80, -26, 30, 88, -39, -76, 40, -9, 24, 10, -26, 31, -48, -17, 16, -10, -126, -57, -22, -127, -20, -50, 62, 12, 65, 43, -23, -63, 6, -64, 23, -38, -11, -91, -43, -6, 5, -21, 40, 49, -120, -58, 7, 20, -13, 44, -27, 61, -7, -21, -83, 44, -28, 9, -77, -45, -15, -97, -80, -25, -29, 89, -43, -51, -7, -3, -40, 89, -67, 118, 3, -38, 5, 4, 12, 6, 79, -28, -6, 27, -17, -23, 74, 33, 29, 22, -97, -64, -119, 33, 10, -115, 124, 33, 59, -41, 49, 34, -77, 3, -31, -15, 67, 31, 47, 89, -66, 33, -40, 33, -5, -46, -44, -25, 109, -93, 50, -119, 26, 122, 85, 10, -1, -29, -124, 61, 21, -67, -41, -47, -55, -27, 123, -30, 20, -88, 78, -49, -4, -88, -17, -10, -7, 86, -48, -30, 82, 46, 42, 45, -23, -112, -32, 1, -35, 0, -70, 49, 5, -65, -128, 36, 86, 14, 127, 9, -24, -16, 6, -42, 36, -127, -91, 24, -112, -48, 32, -48, 17, 50, -123, -4, 68, -35, 10, 105, 5, -2, -126, -34, 57, -123, 14, 25, -27, 1, -85, 3, -28, -123, -51, 8, 15, -60, 9, 28, -71, -67, 88, 24, 65, 123, -28, 20, 65, 79, -45, 118, 63, -88, 83, -98, 91, 11, -31, 118, -109, 36, 53, -68, 11, 22, -76, -38, -14, -85, 116, 109, -28, -34, 47, 41, -9, -27, -27, 4, 17, 2, 73, 86, -68, 56, 13, 40, -24, -23, -4, -45, 80, -84, 28, 8, -32, 116, 87, -19, -7, 10, 42, -43, 104, 34, 13, 39, 37, 13, 80, -1, -20, 51, 27, -30, 79, -45, -5, 10, 25, 91, 24, -43, 22, 99, 100, 32, 8, 60, 100, 48, -10, 5, 15, 15, 26, 6, -51, 40, 19, 45, 127, -11, -46, 31, -26, -50, 54, -9, 21, 4, -126, -37, -16, -66, 23, 17, -28, -10, 55, -31, 23, 37, 22, 13, -10, 86, -17, 6, 51, 16, 44, -5, -31, 42, 4, -73, -44, 14, -5, -2, 1, 14, 7, 37, 11, 1, 13, 11, 5, 4, -37, 10, 19, 5, 3, -15, 15, -26, 17, -5, -1, 30, 32, 8, -7, -5, -12, -12, 11, 6, -26, -19, -9, 8, 7, -10, 19, 11, -3, 13, 14, 6, 7, -13, -5, 39, -17, -6, 33, -8, -16, 31, -35, 1, -32, -62, 16, 11, -6, 37, -5, -16, -10, -47, -10, 12, -9, 26, 4, 49, 1, -18, 26, 10, -5, -23, 17, -21, -35, -70, 58, 22, 5, -62, 17, -9, -15, 25, 7, 9, 14, 3, 17, 0, -9, 9, 8, -5, 22, 4, -1, 7, -7, 32, 24, 10, -39, 3, -27, 33, 3, 4, -3, -1, -9, -3, -1, -27, -2, 4, -3, 4, 0, 1, 5, -11, 11, 15, 10, 6, 0, -8, -13, 3, -1, 12, 9, 7, -6, 5, -15, 44, 18, -14, -17, -16, -15, -26, 25, -7, 3, 9, 15, 0, -11, 10, 7, 2, -14, -43, 8, 45, 18, 1, -5, 1, 18, -12, 1, -25, -18, 1, -63, 4, 32, 8, -52, 15, -54, -27, 12, -27, -35, -53, 18, -10, -14, 34, 4, -23, -10, 51, 54, 5, 20, -19, 62, -66, -38, 27, -18, 10, 43, 40, 67, -9, -29, -34, 54, 1, 18, -17, 61, 26, 5, 113, 22, 1, 6, 63, -29, 47, 118, -41, -12, -4, 7, -41, -27, -3, 14, 1, -20, 38, -15, 10, 12, -35, -38, -33, -9, 10, -56, -38, -9, -9, -55, 26, 26, -15, 5, 12, -43, 30, 8, -68, -11, 14, -33, -2, 23, 8, -8, 27, 3, 22, -15, -23, 14, 22, -44, 12, -52, 36, 1, 3, -40, -55, 16, -40, 7, 27, 27, -45, 22, -17, 26, -23, -26, -2, 30, -15, 19, 4, -1, 30, -24, -3, -36, -33, 13, 13, -21, -1, 28, 21, 32, 19, -7, -13, 16, -9, -23, -33, -66, -13, -44, 15, -18, 14, 9, -23, -68, -7, 55, -12, -98, -32, -4, -6, -13, 11, 33, -30, -5, -27, -40, 52, 106, -40, -13, 19, -35, -17, -40, -24, 9, -90, 54, -1, -58, 15, 101, 18, -15, -105, 90, 39, 23, -7, 70, 8, -24, -89, 19, -21, -8, 18, -74, 112, -86, -14, 47, -81, 43, -50, 2, 13, -9, -38, 23, -12, -64, -10, 13, 23, 29, 106, -25, -22, -115, -43, -5, -2, 5, 7, 7, 33, 8, -60, 10, -48, -47, 6, 50, 43, -3, 15, -17, 36, 1, -17, -14, 7, -22, -24, -110, 21, 3, 64, 99, -31, 3, -10, -21, -7, 20, -61, -22, -50, 31, 35, 0, 4, -8, -35, -26, 13, 56, 32, -12, -10, -7, -45, -5, 15, -17, 78, -11, 51, 15, -26, -16, -40, -20, 31, 0, 12, -52, 25, -33, 22, -26, -12, 81, -17, -19, -12, 3, 60, -76, 11, -5, 24, 9, 34, 2, 54, 12, -68, -18, 10, -33, 50, -2, -52, -43, 10, -18, -6, -20, 69, -4, 15, -59, -21, 5, -18, -45, 32, 21, 87, 19, -24, -85, 26, -56, 64, 27, -14, -35, 13, -18, 45, -33, -77, -36, -123, 55, 13, 61, -15, 6, -41, -21, 86, -19, 72, -10, -12, -27, -114, -25, -8, -31, 8, -4, 17, -27, 31, -5, -1, -10, 52, 55, -70, -55, 23, 52, 45, 32, -57, -30, 6, -20, -1, 20, -48, -10, 47, -21, 13, -27, 50, -25, 46, -20, 7, 12, -3, -39, -36, 22, -42, 24, 27, -12, -13, 3, -28, -52, 14, 48, -13, 30, -6, -4, -37, 13, -12, 28, -9, 48, -30, -25, 0, -6, 49, -9, 39, 10, 66, -32, -43, 85, 5, -4, -9, 76, 16, 46, -18, -122, -59, 48, -35, -26, 20, 13, -23, -41, -26, 51, 120, -54, -38, -53, -1, 126, 3, 8, 84, -49, -40, 33, 88, 113, 22, -54, 0, 44, 10, -76, 80, -75, 66, -58, 10, 109, -24, -17, 49, 11, -32, 1, 15, 55, 103, 56, 10, 48, -28, 83, 6, 28, 19, 5, -46, 23, 89, 74, 32, 4, -24, 23, 0, 26, 11, 38, 42, -6, -2, -8, 5, -8, -7, -9, -1, 40, 15, -59, 8, 43, -36, 24, -75, 43, -37, 0, -43, -27, -15, -78, -11, 17, 9, -12, -41, -36, -87, 7, -36, 1, 15, -29, 27, -60, 106, 77, 4, 39, 20, -5, 123, -45, -2, -28, 8, 6, -32, 20, -8, 3, -27, 13, 0, -75, 6, -52, 8, -2, 105, 89, 6, 22, 29, -18, 20, -60, 39, 61, 39, 14, 2, 26, 15, -21, 14, 95, 57, -7, 29, -43, 10, -70, -23, 112, -14, -24, -41, 2, -25, -121, 30, 111, -19, 23, 24, 48, 21, 85, -3, -31, 6, 16, -3, -59, -120, 44, 33, -11, 7, -126, -128, 5, 10, 19, 73, -36, 24, -16, -18, 57, -103, -126, -16, 67, 39, -40, 120, 61, 2, -44, -1, 45, -14, 56, 12, 30, 46, -6, 13, -8, 30, 25, -54, -6, -8, -7, -38, -23, -16, 16, 56, -19, -13, 36, -70, 9, -22, -8, -67, -3, 16, 6, -22, 87, -6, 23, 0, 3, -49, 71, 21, 41, 55, 14, -25, 8, -8, -8, 127, 62, -75, -25, -2, 4, -46, 49, -123, -58, -92, -127, -23, 22, -125, -32, 34, 125, 13, 93, 53, -47, 122, -80, 50, 119, 1, 40, -127, -118, 33, 124, 22, -93, 9, -38, 49, 58, -52, -117, 41, 120, -120, 44, -74, -7, 9, -26, -107, 7, 21, 13, 72, -7, 116, 45, -82, 3, 60, 104, -127, -81, -122, -69, -105, -28, -6, -16, -12, 97, -113, 119, -48, 127, 124, 124, -126, -6, 78, -72, 72, 38, 127, 34, 116, 33, 34, 127, 45, -17, 28, 127, 65, -124, -29, 23, -128, 50, -18, 110, 76, -70, -125, -20, -65, -49, -44, 20, 20, -12, 93, -31, -105, -120, 71, 113, 51, -125, -56, -46, -70, 60, 68, -54, -126, 84, -121, -39, -66, -125, 120, -13, 124, -24, 67, -8, 120, -14, -93, -52, -78, 11, -27, -52, 65, -128, 11, 17, 6, -5, 32, 120, -121, 0, 45, -3, 93, 104, 108, -41, -7, 46, 19, -10, 93, -27, -91, -112, -128, -125, 45, 21, -125, 1, 64, 38, -127, 97, -5, -37, 94, 52, 24, 122, -125, 23, 98, 63, -37, 85, -40, -63, -1, 93, 127, -8, 60, -56, 94, -16, 127, -96, 17, 58, -6, 110, 71, 66, -4, -95, 12, 81, 105, 19, 83, -84, 125, -66, -46, -25, -58, -76, -125, 39, 127, -57, -75, -56, -64, 56, -123, 45, -53, -83, -7, -111, 44, -126, 34, 97, -65, 104, -67, 114, 11, 127, -122, 120, -64, -8, 6, -106, 24, -55, 104, -4, -52, -38, 21, 126, -119, -95, -8, -127, 122, -23, 126, -60, -54, 42, 36, 120, -128, -46, -127, 55, -40, -38, 70, -8, -125, -127, -124, -128, -14, -56, 115, 60, 60, -123, -37, -128, 48, 104, 125, -88, -67, 38, 23, 23, 106, -83, 121, -30, -44, 126, 17, -42, -23, 127, -1, -73, -76, -124, 104, -5, -58, 86, -112, 23, -57, -100, -2, 26, 21, 88, 75, -127, 71, 124, -27, 94, 25, 120, -125, -120, -113, 126, -127, 31, 127, 18, -124, 74, -125, 15, 23, 43, 103, 123, 74, -47, 96, -102, -14, 127, -20, 124, -82, -121, 106, -112, 5, 44, 99, -17, 122, 69, -46, 74, 29, -56, -127, -53, 51, 93, 79, -85, 87, -126, -100, -29, 116, -121, 127, 126, -21, 119, 3, -77, 17, 120, 52, 127, 106, -4, -112, -30, 124, -34, 2, -103, 125, 127, -68, -109, -36, 3, 68, -119, 127, 118, 126, -99, -89, 38, -53, -121, 67, 95, -44, -39, 82, 127, 75, -127, 91, -12, -67, -91, 37, 4, 40, -122, 65, -84, -8, 30, 46, -1, 55, -55, 106, 12, -61, 47, -11, -102, 54, 96, 18, -4, 75, -93, 76, 73, 119, -24, 108, -9, 124, -127, 116, -43, 110, 48, 15, -32, 33, -95, 23, -9, 78, 113, 123, 127, -104, 40, -29, -57, 74, -114, 121, -41, -113, 127, 6, 123, 83, 81, -39, -27, -30, -120, 58, 14, 16, 2, 6, 13, -41, 120, -112, 11, 121, 124, 58, -126, 77, 32, -124, -32, -13, 39, -92, 36, -33, -46, -13, 125, 20, -127, 108, -109, -97, -57, 26, -108, 82, 78, -127, -84, 32, 31, -96, -124, 60, 96, -121, -107, -113, -14, 113, 15, 69, -53, 11, 91, -44, -33, 56, -75, -127, -122, 114, -27, 34, 36, 120, 122, -70, -16, -35, -122, -119, 4, 127, -86, -18, -113, -74, 87, -83, -123, 65, -1, -14, -119, 32, -20, -122, 31, -18, 23, 119, 120, 112, -107, 29, 24, -123, 22, 67, 127, 106, -128, 79, 17, 73, -53, -27, 58, -10, -7, 127, -51, -119, 15, -74, -113, -45, -36, 44, -120, 105, -80, 98, 103, -102, -22, -108, 7, -122, 70, 89, -127, 58, -33, -8, 91, -1, -4, -62, 127, 65, 74, -124, -111, -67, 89, 12, -122, -25, 45, 117, -73, 23, 51, 15, 88, 25, 116, 77, 95, 121, -5, 103, 80, 108, 127, 100, 8, -113, -112, 119, -106, 127, -114, -82, 125, 81, -127, -121, 127, -124, -8, -126, 58, 127, -126, 119, 25, 26, -68, -83, 77, 70, 51, -64, -30, 127, 127, -126, -124, 127, -128, -119, -1, 122, 112, 13, 94, 46, -22, 80, -26, 102, -122, -35, 37, -11, -108, -128, -95, -111, 125, -123, -79, 116, 8, 90, 97, 26, -34, 109, 120, 61, 69, -5, 4, 119, 11, -61, 91, -3, 38, 19, 127, -87, 125, 125, 33, 127, 46, 39, 4, 36, 121, 127, -124, -27, -25, -79, 39, 105, -71, 30, -14, 78, -123, 119, 80, 106, 125, -59, 125, -106, 24, 30, -68, -116, -56, -78, -13, 103, 10, 120, -29, 82, 119, -107, -32, 17, -41, 123, -126, 54, 121, 54, 127, 10, 119, 126, -120, 40, 115, 121, 85, -13, -11, 103, 33, 60, 72, -21, 50, -66, 127, -69, 33, -118, -128, 29, -12, 123, 125, 45, 127, -121, -74, -72, 80, -82, -55, 120, 0, -65, -39, -124, 63, 126, -20, 124, -21, 109, 127, -119, -125, 98, -125, -36, -94, 58, -34, -123, 108, -24, -61, 42, -10, -63, -14, -76, -3, 22, -109, -1, -126, 58, 119, 9, -83, 124, 75, -17, -33, 58, 40, 114, -126, -31, 120, 64, 20, -21, -37, -33, -19, -51, 42, 1, 127, 39, 62, 125, -86, 62, 22, -12, -22, 2, -48, -28, -117, -60, -3, -60, 101, -29, 25, 83, 41, 75, -83, 65, -88, 10, 104, 22, 93, -11, -86, -67, 98, -18, 44, 126, -100, -123, 49, 126, -80, -44, -39, -14, 108, -122, -126, 84, 102, 77, 112, -61, 125, 121, 35, 102, -124, -9, 119, -119, 45, 19, 114, 127, 61, -7, -57, -103, -104, 88, -30, -125, 123, 123, -121, 125, -5, 127, -49, 28, 127, -69, 87, 5, 73, 127, 126, -12, -9, 46, -4, -122, 42, -54, 18, -17, 85, 39, 127, -117, -127, 0, -91, 24, -6, -103, -39, -126, 127, -7, -19, 95, 79, -36, 118, 95, -65, -89, 117, 76, -47, -124, -53, 5, -53, -15, 71, 124, -56, 35, 48, -54, 104, -76, 43, 65, -121, -70, -48, 40, 18, -128, -8, 42, 124, 33, -5, 102, -124, -128, 120, -128, 51, -99, -88, -128, -121, -70, 92, 78, 112, 110, 122, 117, -107, 97, 111, 65, -52, -23, -116, -5, -113, 11, -38, -37, 127, 119, 23, 124, -43, 79, 124, 125, -122, 67, -104, -127, -53, -24, -112, 120, 92, 69, -93, -6, -118, 110, 111, -128, 15, -46, -118, -121, -35, 107, 115, 116, 67, 117, -30, -96, 126, -20, 127, -127, 108, 22, 123, -46, 63, 112, 121, 8, 124, -125, -90, 14, 4, -5, 127, -119, 99, -63, 1, -107, -103, -86, -28, 42, 103, 67, 32, -48, -95, 78, -77, -91, -46, -128, -84, 14, 125, 8, -73, -124, 11, 66, 111, -125, -4, -37, -125, -83, -29, -47, 71, 122, -42, 34, -31, 103, 103, 21, 22, -103, -102, -83, -120, 127, -15, -80, 125, -92, -34, -123, 21, 80, -71, 111, -65, 119, -119, -109, 109, -26, -100, 10, 16, -127, -79, -121, 4, 70, 19, 19, 39, -35, -25, 33, -118, 1, 113, 93, -63, 52, 30, -22, 39, 117, -7, 48, 50, 93, 9, -8, 45, 36, -125, -8, -121, 39, -76, -92, -19, 95, 101, 19, 59, -72, -106, 82, 121, -74, -123, -66, 121, -24, -69, 116, -28, 6, -17, -69, -38, -90, 76, 33, -127, -67, 127, 31, 122, -113, 106, 123, -120, 83, 117, -41, 83, -48, 29, 123, 42, -5, -84, -103, 106, -116, -9, -124, 117, 17, 120, -121, -15, 73, -91, 120, -127, -70, 126, -128, 99, 127, 117, 124, -13, -118, -27, -82, -52, -31, 39, -104, -125, 102, 14, -120, -94, 60, -39, -58, 9, 51, 120, -111, -103, 126, 54, -112, -124, 126, -10, 108, -39, 54, 51, -116, 61, 126, -72, 69, -60, 125, -17, 4, 46, 43, 127, 26, -51, 9, -104, 125, 37, 95, 45, -67, -65, 62, 122, -66, -22, -89, -28, -99, -117, -81, -31, -51, 127, 88, -121, 8, 62, -4, -45, 16, -68, 9, -3, -73, -71, 29, -42, 69, -46, 115, 123, -14, -118, 51, -3, 79, -91, -74, 91, -7, -119, 127, -95, -30, -49, 62, -16, 62, 69, 58, 72, 5, 40, -121, -66, -4, 117, -121, 101, 53, 97, -118, -111, -127, 115, 122, 40, -3, -44, -5, -13, 5, 121, 49, 40, -124, -59, 126, 6, -30, -98, -116, -2, 65, 29, -126, -121, -123, 15, 127, 119, -120, -51, -71, 127, 7, 1, -112, 33, 106, -20, -114, 59, -105, -81, -11, 28, 96, 4, -92, 27, 32, -125, -60, -107, 69, -106, 23, 100, -53, -105, 13, -68, -126, 109, 22, -127, 27, -127, 26, -127, -122, 127, -88, 66, 2, -105, -3, -113, -126, -40, 74, 44, -9, 107, 41, -74, 77, -74, 77, 127, 106, 53, 108, -71, -105, 122, 99, -114, -123, 24, -127, -62, -20, 125, -12, 38, -43, -108, -33, -125, 103, -9, -67, 127, -3, -113, -128, 71, 120, 57, -127, -117, -122, 127, 124, 15, -54, 122, -24, -24, -58, -25, 50, 76, -56, -119, 64, -88, -36, 125, 8, -117, 126, -60, -116, -127, 105, 69, 10, -127, -112, -31, -89, -58, 71, 31, -62, -2, -127, 8, -74, 124, -84, -87, -119, -103, 41, -128, -66, 127, -93, 55, 127, 19, 127, -97, -22, -54, -124, -78, 32, 70, 26, -1, 124, 101, -127, -125, -82, 80, 98, 1, -40, 30, -66, 33, -15, 85, 125, 74, 75, -73, 11, 126, 127, -34, -44, -47, 117, -124, 118, -126, -68, -126, -111, 116, 27, 92, 101, 45, 15, -113, 44, 47, 122, -128, 45, -81, -90, 116, -117, 127, 10, -7, -2, 2, 79, 46, -70, 72, 35, -35, -125, -44, 34, -83, 9, -26, 92, -121, -73, -105, -116, -6, 113, 43, 47, -86, -1, -21, 78, -120, -31, 124, 118, 127, -78, -113, 79, -47, 124, 120, -79, -31, 66, -4, -117, 125, 65, 127, 14, -69, 84, 126, 89, 82, 86, 114, -65, 15, -68, 57, -10, 123, -110, -108, -113, 93, 86, 83, -26, -118, -86, -87, -41, -126, -14, -127, 127, 55, 126, -85, -87, -62, -126, 59, 127, 89, -72, -123, -44, -63, 5, -34, 107, 37, 127, -102, -50, 39, -126, -85, 118, 122, 82, -125, -124, 106, -128, 52, 26, -128, 40, 11, 105, 91, 23, -4, 88, 14, -44, -5, 111, -122, -27, -125, -81, -69, -25, 87, 23, 125, -64, -31, 50, -120, -124, -123, -109, 118, 32, 103, -6, -54, -76, 76, -97, -3, 126, -47, 122, -22, -52, -125, -6, -75, -79, -38, 79, -49, 77, -104, -77, -35, -104, -128, -81, 36, 124, -59, -36, 74, -6, 39, -60, -31, 81, 123, -84, -123, -10, 124, -69, -53, -125, -126, 5, -20, 28, -68, 33, 118, -62, -122, 78, -63, -3, 126, 22, 28, 127, 100, 111, 14, -28, -77, 89, 124, 27, 56, -118, 126, 123, -35, -112, -7, 38, -122, -61, -70, 124, -64, 127, -22, 84, -57, -24, 17, -76, 24, 44, 115, 107, 118, -39, 89, 35, 126, 121, 23, 50, -25, 116, 63, -107, -122, 67, 114, 126, 108, -27, 38, -60, -44, -127, 7, -88, -46, 52, 119, -96, -84, 93, 43, -94, 39, 44, -98, 84, -69, -33, -116, -122, 81, -22, 63, 104, -62, 126, -127, 78, -117, 109, 111, 108, -40, -52, 45, -118, -22, -50, -125, 7, -51, 125, -33, -106, 17, 119, -122, -98, -18, 3, 16, 5, 101, 8, 50, -1, 102, -108, 85, 65, 95, 4, 116, 2, -67, 21, -47, 50, -67, -31, 58, 28, -23, -32, -13, 59, -23, -80, -21, -13, -45, -91, -2, -24, -123, 30, -92, 51, 127, -73, -10, 118, 127, -12, -123, -57, -116, 46, 113, -128, -118, 33, -32, 87, -110, 121, -102, 125, -124, -60, -50, 20, -110, -56, 0, 61, -107, -75, -126, -46, 118, -14, 58, -125, 8, 13, 31, 73, -115, -120, 47, 122, -85, -17, 31, 6, -65, 70, 106, 123, -108, 40, -71, -20, -89, -74, -88, -32, -12, 24, -45, 73, 127, -39, -43, 110, 36, 76, -1, 113, 83, 95, 15, 53, 8, -9, -126, -33, -102, -51, 69, -128, -14, -98, 15, 119, -79, -15, -57, 126, -55, -82, -95, 37, 99, 73, 121, -1, -40, 120, -127, -24, -22, -15, 22, -24, 28, -117, -3, -26, 18, -54, 122, 73, 127, 116, -114, -40, -123, -66, 9, 4, 35, 78, 57, 52, 51, -2, 85, -10, -9, -20, -22, -69, 106, -11, 36, 19, 48, 127, 7, 70, -121, 16, -19, 114, -17, -117, -126, -3, -60, 26, 72, -123, -126, 33, 26, -128, -118, -84, -86, 121, -84, 80, -87, -56, -106, -79, -127, -3, -44, 7, 17, 36, 103, -1, -31, 127, -106, -20, -78, -45, -91, 120, 77, 114, -122, -48, 16, -102, 6, 56, 26, 127, 105, -103, -117, 31, -124, 1, 19, 31, -13, -82, -118, 123, 88, -24, 26, 107, -98, -46, -13, 24, -2, -6, 81, -25, 55, 10, -38, -75, -60, -73, -52, 87, -41, -88, -127, -123, -113, -25, -120, -67, 40, -58, 29, -87, 117, 88, 40, -50, -117, 124, -95, -12, -25, 100, -28, 0, 11, 13, 62, -30, 26, -74, 127, 78, 127, -103, -128, 3, 31, 112, -35, -32, 121, 126, 69, -2, 4, 86, 123, 100, -127, -83, -11, -34, 75, -75, 52, 9, 118, 127, 5, -12, -93, -108, 17, -9, -21, -62, -101, -10, 122, -24, 39, -100, -121, -118, -58, 0, -55, 97, 120, 120, 26, -22, -75, -22, 57, -89, 107, 117, -32, 75, -100, 49, 17, -20, 96, -64, 72, 28, 125, 38, -127, -69, 108, 33, -100, 36, 39, 3, 82, -50, -1, 127, -86, 74, 44, -64, -124, -83, 13, 18, -39, 40, -20, 92, -70, -16, -15, -17, -61, 91, 51, 114, 1, -21, -29, 123, 20, -20, 5, -19, 7, -1, 86, 121, 12, 77, 23, 17, -83, 16, -34, 28, -2, -76, -27, -52, -33, 64, -83, 122, -2, 64, -128, -9, 122, 127, -42, -37, 97, 2, 118, 38, -32, 49, 46, 60, 52, -128, 0, 72, -2, 114, -109, -8, -37, 48, 65, -21, 127, 66, -48, -128, 123, -26, 39, 8, 63, 2, -122, 35, 99, 56, -89, -1, -37, 3, 2, -126, 52, 4, 17, 46, -104, -126, -105, -46, -125, -2, 27, 35, 45, -119, 42, 115, -18, 34, 56, 104, 2, 61, 52, 124, -34, -73, 110, 19, 9, -15, -74, -6, -56, 86, -96, 17, -127, 28, -126, 3, 29, -127, 76, 37, 125, 7, -7, 127, 52, 94, 23, 123, -115, 120, 41, 91, -88, 87, -50, -49, 88, 51, 1, -7, -20, 77, -39, -92, -47, -49, 33, -67, -33, 25, 29, 44, 14, -37, 118, -126, -63, 125, -6, 19, -124, -9, 104, -121, -94, 47, -101, -5, 90, 86, 64, -126, 29, 126, -128, 59, -105, 63, 1, 34, 62, -43, 101, -109, -112, -22, 39, 86, 48, -84, -126, -110, -43, -51, 68, 7, -99, -81, 109, -43, -127, 2, 118, 123, -127, -31, 21, 55, 36, 113, 19, -48, 123, 60, -1, -123, -108, 20, 32, -128, -13, -11, -123, 72, -115, 126, 47, 61, -126, 89, 118, -20, 14, -127, -19, 102, 20, 11, 98, -71, -87, 24, -3, 127, 13, 92, -127, 83, -69, 9, -118, -38, -53, 19, 14, 27, -125, -9, 110, 115, 7, 126, 112, -124, 119, -43, -8, 127, 29, -9, -29, -32, -110, 64, -108, 0, -92, 127, -12, -19, 31, -18, 2, 79, -52, 32, 79, -79, -83, 27, -35, -89, -124, -125, 67, 23, 82, -37, -125, 127, -92, -1, 5, 14, -117, 52, 42, 57, 94, -87, -123, -60, -11, -7, -47, -122, -20, -8, 123, -118, -13, -128, -95, -127, 74, -104, -69, -125, 35, -30, 87, -64, -11, 124, -69, -93, 125, -119, 123, 106, -121, -22, -68, 81, 124, -22, -96, -126, 69, 35, 29, -125, -85, 106, -59, -60, -61, -121, 88, 87, -67, -112, -65, 127, 73, -47, -122, -42, 127, 113, -121, 23, 26, -12, 109, 76, 19, -21, -30, -11, -31, 12, -66, -17, 118, -83, -109, -128, -53, -49, -128, 96, -2, 76, 102, -6, -19, -126, 30, 61, -96, 51, 54, -8, 75, 117, 111, 87, -126, 104, -123, -42, -82, -112, 58, 39, 127, -123, 68, -107, -128, 13, -81, 76, -108, 28, -49, -52, -67, 16, -19, -23, 31, -127, 84, -15, 21, 3, -70, -119, 26, 91, -122, -122, 89, -117, 24, -78, 41, -17, -65, -114, -49, 7, -113, 78, 48, 117, 53, -110, -28, -49, -60, -128, -44, -67, 125, 16, -26, -119, 72, -41, -83, 120, 51, 114, -56, 127, -20, -15, -45, 61, -62, 119, -43, 118, -126, -32, -38, -112, -108, 121, 15, -84, -90, 87, 83, 43, -41, 85, -128, -3, 103, -122, 124, 18, -52, -58, -128, 109, -122, -49, -21, -110, 105, 2, -19, -4, 111, -16, 74, -73, -27, -126, -44, 125, -126, -1, 49, -59, -66, -53, 116, 123, 126, -105, 119, 127, 127, 40, 43, -44, -63, 18, -111, 124, -91, 18, 10, -83, 4, -17, 1, 78, 121, -79, 9, -128, 5, 112, 3, 13, -104, 55, -54, 3, 58, 27, 41, -45, -46, -26, -38, -59, 122, -41, -34, 63, -40, 8, -4, -12, 4, -75, 2, 83, -25, 25, 109, 46, 30, -9, 75, -45, -57, -58, -118, 74, 89, -124, -6, 25, -82, -107, -58, -30, 117, 116, -19, 123, -30, -23, 51, -11, -13, 8, 50, -121, -11, 46, -78, 120, -127, -6, 33, 53, 52, 126, -72, 109, -113, -118, -16, -82, -71, 2, -43, -122, 55, -33, 49, -26, -118, 24, 113, -24, 28, 77, -118, 12, 90, 95, 25, 127, 29, 101, 116, -9, -87, -78, 120, 120, 114, -122, 79, -94, -89, 61, -39, 5, -127, -14, 29, -127, -74, 76, 9, -94, 73, -125, -62, -28, 47, 86, -83, -124, -68, -11, -68, -31, 98, -79, -123, 122, 62, -103, -16, -48, 49, -79, -106, 65, 118, 56, 73, 53, -11, -112, -97, -73, -39, 5, -69, 111, -45, 13, -3, 65, 4, -4, -88, 121, 11, 45, -19, 87, 84, -67, -114, 73, -83, -19, 30, 35, -79, 55, 77, -81, 63, -71, 2, -83, 44, 127, 61, -75, 9, -125, 65, -128, -23, -110, 43, -11, -19, -36, -102, -77, 122, 63, 95, 105, -18, 11, 36, 125, -71, -59, -8, 16, 95, -61, -102, -125, -69, 29, -16, -52, -27, 55, 102, -24, -105, 52, -10, -123, -39, 81, -128, -11, 91, 40, 11, 123, 27, 26, -28, -97, -122, -121, 27, 49, 24, 112, -34, -71, 125, 115, 75, 73, -65, 68, 53, -99, -37, -86, 59, 73, -115, -128, 37, -66, -66, -76, 115, -128, 20, -56, 3, 36, 91, -85, -121, 120, 24, -17, 108, 38, -82, 87, -39, 92, -10, 58, -20, -30, 46, 66, -10, -95, -16, -57, -108, 68, -14, -57, -113, -55, -7, -91, 53, 112, 22, 24, 26, 102, -29, 76, 41, 13, 27, 17, 86, -33, 126, 103, 50, -11, -49, -118, -103, 26, 116, 47, -56, -88, -40, -24, -56, -2, 87, 105, -99, 104, -54, 14, 25, 118, -125, 11, 28, -76, -70, -32, -71, 97, 15, -22, -35, -100, -21, 24, -25, 17, -31, 80, -65, 50, 37, 115, 84, 53, 5, -33, -33, -99, 25, -11, 20, 86, -96, 44, 86, 126, -111, 66, 21, 0, 63, -123, 93, -15, 36, 127, -76, -123, -72, -111, -127, -62, 1, -85, 1, -32, 61, 50, 57, 27, 87, -34, -30, -2, 28, 111, -59, -18, 16, 3, 82, 4, -128, 126, -76, -21, -122, -21, -93, -28, 42, -52, 1, -16, 37, 67, 17, -91, 29, 121, 6, 118, -43, -54, -125, 87, 4, -25, 50, 124, 57, 43, 22, -51, 21, -49, 21, 12, 71, 122, 45, -66, -58, -54, 44, 41, 52, -6, 84, -56, 127, -122, 57, 75, -42, 127, -11, -42, 31, -124, 54, 21, 5, -23, 108, 123, -64, 23, 45, 100, -28, -86, -50, -32, -27, 116, 99, 58, 35, -64, 71, 32, -51, 63, 0, 46, -89, -69, 40, -12, 27, 71, -24, -76, 91, -40, -88, 119, 47, 126, -122, -81, -81, 7, 10, 50, 113, 2, 58, 26, -55, -98, -59, -50, -59, -110, -125, 16, -59, -41, -16, 103, 48, 83, -26, 54, -119, 11, -36, 126, -16, 35, 38, -96, 118, 0, -43, -30, -26, 21, -28, 32, -75, -17, 29, -7, -127, -16, -23, 3, 18, 75, -42, 97, 117, 26, 126, 118, 62, -126, 17, -112, -70, 119, -47, 60, -42, -49, -33, 69, -43, 79, 7, 80, 116, -45, 113, -45, -74, 72, 21, 63, 19, -116, -15, -110, -67, -121, -2, -42, 101, 79, -36, 15, -50, 81, 127, -51, 120, -47, 38, 22, -75, 126, -39, -38, -123, -13, 31, 16, 62, -119, -76, 35, -7, 17, -11, -122, -6, 65, 93, 36, 104, -100, 73, -9, 95, 92, -80, 75, 34, -65, 18, -112, 20, 0, -27, -2, -127, 54, 25, -45, -61, -126, -53, -15, -29, -7, -1, -41, -126, 21, -124, -75, 86, -43, 62, 75, 55, 122, 54, -8, -124, -109, 108, 71, 20, -26, 28, -29, 11, 125, -51, 90, -11, 29, 67, -124, -80, 51, 8, 72, 46, -120, -75, -44, -52, 34, 2, -19, 127, 113, -34, -97, 85, -32, -58, -5, 35, 125, 80, -17, 40, -34, -30, -50, 6, -63, -40, 102, -12, -17, -2, -80, 120, 66, 121, -40, 87, -13, -38, 36, -36, 1, -6, 72, 61, -1, 82, -102, -37, -32, 4, -6, 66, -73, 126, -6, -4, -42, -27, 24, 118, 5, 10, -32, -20, -36, -23, -74, 5, 85, 67, -45, -115, -101, 115, 85, -75, -61, 29, -17, -89, 104, 91, -46, 102, -68, 56, -112, -67, -75, -114, 45, 111, -35, -51, -125, -87, -20, 59, -120, -15, -22, 1, -96, -95, 15, 119, -14, -111, 18, -6, -42, -88, 42, -2, 22, 112, 89, 97, 40, 98, 117, -123, -4, -27, 61, -96, -83, 10, -1, -1, 31, 51, 1, 9, -93, 47, -38, 88, -75, -79, -28, 13, -16, -31, -94, 36, 63, 120, -72, -127, 4, 78, 21, 34, -30, 43, 23, -123, -124, 17, -71, 38, -103, 3, -15, 17, 124, 84, -88, -21, 73, 37, 50, 44, 107, 34, 81, 33, -55, 2, 8, 33, -15, 10, -119, 33, 10, -10, 44, 74, -70, -67, 90, 7, -67, 28, -123, 33, -27, 63, 2, 123, 87, 5, -76, 53, -128, -55, 120, -115, 111, -43, 16, 14, 98, -2, -24, 46, -4, -123, 34, -50, 113, 27, 38, 117, 106, 46, 10, 2, -2, 72, -123, 3, 14, 28, 3, -124, -51, -40, 73, -117, 32, 86, 22, -32, -76, -119, 83, -96, -94, -51, -51, -87, 53, 94, -87, -2, -22, 36, -127, -34, 77, 127, 121, 57, 39, -71, 98, 13, 13, -43, 3, -34, 71, 124, 117, 48, 74, 10, 20, -2, -105, -71, 10, 62, -74, 4, 74, -17, -40, -50, -116, 29, 27, 47, 68, 7, -60, 67, -58, -119, 53, -25, -79, -102, 70, 27, 5, -14, -74, 51, -12, -13, 1, 17, -22, -87, -12, 0, -50, 19, -114, -33, -56, -99, 45, -27, -6, 47, 21, 21, -91, 35, 87, -32, 8, -126, -2, -51, -122, 93, -63, -118, 4, -36, 40, -46, 56, -79, 126, 30, -4, 81, 11, 12, 106, -1, -89, -90, -45, 46, -118, 12, -81, 75, -99, 20, -120, 78, 5, 93, 79, 9, 101, -47, -78, -104, -62, 123, -13, 108, 101, -55, 27, -4, -127, -35, 63, 79, -98, 36, 15, 62, -9, -23, 45, -17, -37, -5, 49, -120, -89, -10, 123, -38, 125, -103, 119, -104, 11, 8, 72, 39, -39, 110, -20, 19, -38, 91, -104, 103, -47, -24, 25, -14, -59, -29, -23, 82, -8, 7, -106, -11, 5, -15, -30, 87, 27, 102, -95, 52, 66, -48, -124, -58, -126, -30, 127, 63, -121, -16, -42, -125, 77, -4, -107, -19, -29, 22, 5, -56, 29, -88, 10, 26, -127, 36, -17, 67, -26, 93, -16, -31, 7, -30, -17, -24, -56, 33, 10, -125, 120, 119, -128, -77, -68, -9, -33, -60, 7, 1, -88, 40, -6, -67, 43, 14, -128, -26, 39, -26, -80, -120, 7, 125, 69, -86, 47, 5, 119, 76, 38, 52, 6, 62, -31, 15, 71, -25, -61, -75, 88, 109, -4, -93, -126, 56, -99, 103, 16, 93, 93, -11, -127, 106, 5, -126, 19, 56, 68, 59, -41, 9, 17, 29, 0, 112, -74, -51, -127, -119, -110, -122, -9, -64, -86, -50, 61, 40, 33, -105, 127, -6, -28, -9, 26, -20, -81, 50, -111, -118, -25, -49, -109, -35, -96, 127, -51, -120, 127, 22, -125, 43, 29, 127, 1, 66, 19, 4, 15, 86, 42, -71, -26, 125, 80, 48, -100, 125, -13, 126, 33, -14, 33, -16, -68, -33, -4, 75, -127, 20, -12, -10, -3, 25, -43, -30, 14, 12, -33, 44, 51, 46, 63, -116, 76, 93, -128, -35, 13, 9, -39, -97, 33, 55, -39, 24, -33, 52, 84, -65, 120, 11, 103, -32, 101, 127, 23, 3, 20, 31, 53, 39, -38, 41, -19, 94, -41, 67, -33, 15, 9, 24, -77, -26, 93, -71, -8, 46, -26, 51, -21, -127, 42, -12, 126, 48, -121, 48, 39, -123, -5, -4, 45, 60, -122, -55, 13, -43, -9, 100, -7, -122, 32, -63, -71, -85, 58, -59, -60, -70, 93, 68, 85, -77, 126, 43, -5, 63, -103, -69, -49, 59, -51, -120, -53, -75, -98, -21, -20, 127, -43, -35, 127, 27, 57, 83, -8, 127, -50, 119, 126, -65, -14, -95, -22, 33, -17, -39, -39, 12, 122, -118, 17, -26, -94, 47, -30, 111, 26, 14, -79, 105, 127, 31, -51, -96, -75, 21, 67, 25, 22, 79, -98, 41, 110, 59, 127, 127, -18, 3, 97, 124, 36, -8, 9, -99, 23, 1, 66, 39, -44, 116, 123, -5, 124, 84, -6, -55, -50, 121, 47, -117, -80, 85, -113, 22, -126, 101, -81, 119, 6, 39, 1, 81, -30, -50, -120, -9, 42, -126, 1, 23, 111, -33, 14, -128, -4, -57, 26, -45, 126, -115, 8, 14, 84, -11, 19, -3, -123, -127, 80, -37, -100, 13, -57, -121, 122, 45, -59, 36, 50, 3, 39, -15, 7, -12, -15, 96, -128, -7, 47, -47, -19, 71, 31, 26, 63, -67, -112, -36, 45, 14, 65, -103, 4, 59, -127, 37, 127, -47, -35, 44, 9, 115, 120, -127, 96, -125, -33, 114, 66, -120, -1, 15, -128, -126, 28, -125, 16, 8, 56, 83, 109, 116, -59, 111, 40, -4, -60, -15, -10, 101, 41, -100, -3, -39, 91, 34, 26, -78, -4, 126, -18, -11, 112, -108, 40, 11, 44, -50, 62, -67, 37, 80, 22, 11, 101, 21, -115, -69, -32, 59, -125, -126, 107, 120, -24, 119, -127, -48, -3, 6, -70, 65, -114, -3, -5, 120, -23, -80, 72, 68, 63, 48, -7, -112, -109, 5, -34, 116, -73, 126, -15, -87, 22, -7, -39, -12, 74, 14, 4, -113, 44, 33, 82, 32, -113, -107, -20, 102, -111, 1, -122, 63, -115, -45, -61, -53, -85, -16, -9, -23, -24, -5, -38, -76, 37, 59, 4, 79, 23, 70, -113, 36, -42, -41, -68, -59, 9, -100, -105, 117, 127, -127, 45, -128, 9, 26, -115, -80, 99, 72, -74, 17, 8, 8, 60, 31, -128, 126, -122, 107, 7, -28, 28, -109, -32, -44, -81, 16, -128, 13, -126, -39, 18, -69, -84, -22, -113, -31, 48, 49, 0, -65, -109, 82, 57, -95, 12, 13, -43, 19, 36, 95, -113, 40, 95, 116, -11, 61, 55, -61, 127, 67, 127, -46, 126, 31, 116, -30, -67, 113, 90, -23, 54, -55, 13, -45, 127, 63, -22, 120, -13, -22, 58, 91, 52, 45, 13, 83, 40, 87, -25, 125, 91, 74, 50, -124, 86, 66, 5, 127, -19, 116, 6, -12, 4, 42, 92, -40, -100, -21, 123, 27, -45, 4, -97, -22, -113, -4, -27, 18, 49, 78, 107, 6, 126, 127, 8, -47, -124, -110, -8, 17, 67, 51, 5, 13, -11, -76, 15, -124, 37, 58, -71, 25, -112, 45, 35, -128, 44, 127, 34, 39, 15, -17, 49, -3, -24, -27, -49, 12, 127, 111, -78, -63, 30, 29, 29, -25, 73, -66, 94, 17, 6, 75, -82, 118, -96, 55, -47, -53, 16, 21, 115, 15, -10, 64, 7, 42, 73, -33, -38, 6, -88, 94, 31, 51, -99, -27, 0, 123, -124, 81, 51, -54, -112, 115, 42, -124, -60, 99, 23, 101, 62, -52, 20, 6, -43, 4, 9, 0, 44, 51, 8, -59, -11, 110, -6, 100, 29, 127, 0, 92, 127, 13, -38, 65, 23, 76, -1, -127, -69, -14, 59, -33, -57, 11, 0, 83, -38, 52, 110, -36, -35, -112, 99, -16, -113, 125, -50, -114, 63, -62, -6, 39, -9, 110, 0, -100, -29, 123, 121, 7, 82, -51, -32, 51, -34, 84, -76, -82, 90, -105, 111, 24, 17, -16, -41, -116, -123, 1, 48, -127, 55, 66, -16, -84, 74, -37, -91, 27, 83, 47, 49, 92, -80, 32, 72, 65, 29, 16, -7, 8, -106, -3, 15, -69, -48, -27, 45, 8, -51, 58, 35, -10, -15, 0, 15, 4, 50, -64, 6, -16, -35, 59, -2, 14, 1, 7, 4, -74, 7, 124, 38, -46, 70, 0, -73, -35, -5, -4, 0, 54, 7, -4, 10, 93, -8, 42, -93, -38, -46, 1, 29, 50, 78, 75, 63, -73, 14, -26, 6, 58, -81, 7, -3, 86, 69, 5, -6, 14, 48, -41, 124, 0, 43, 65, 24, 54, -79, 32, 46, 17, -13, -57, -35, -10, -19, 40, -78, -47, -4, 30, -86, -61, 0, 15, -15, 13, 127, 5, -22, 61, 68, -33, 8, -16, -34, 10, 33, 5, -48, 14, 49, 126, -27, 20, 96, 26, 8, 24, -4, 57, 54, 45, -11, -126, 126, -13, -51, -32, 4, -65, 74, -77, -35, -3, -7, -69, 10, 13, 0, -49, -123, -56, -9, -61, 6, 18, -1, 12, -67, 23, 5, -30, 7, 37, -34, 12, -40, 3, -25, 32, -60, -66, 97, -27, 32, 20, -95, -3, 8, -76, -15, 61, 8, 19, 9, 18, -20, -13, 105, -13, 47, -11, 19, 10, -47, 1, 125, 77, 90, 34, -76, 49, 64, -28, -67, 2, -32, -24, -1, -25, -120, 1, -68, 55, 81, -85, -11, -12, -29, -110, 2, -44, 41, -12, -16, 7, -1, -118, 76, -76, -17, -43, -8, 101, 86, -123, 70, 45, -13, -39, 114, -72, 101, -5, -8, -5, -54, -49, -92, -26, -117, 19, 14, -116, 37, 8, 15, -15, 30, -22, -16, 23, -83, 5, 57, 14, -19, -9, 51, -1, -20, -26, -3, -8, 3, -14, -51, 11, -56, 30, -5, -108, -10, -115, -89, -38, -70, -4, -15, -30, 35, 48, -119, -63 }; static const rnn_weight noise_gru_recurrent_weights[6912] = { 20, -47, 122, 31, 41, -36, 18, -22, 0, 87, -28, -26, -68, 8, -54, 104, 112, 19, 31, -118, -31, -31, 9, 17, 11, 5, -53, -24, -17, 24, -35, 16, 53, -26, 6, 24, 48, 11, 17, -34, 17, -15, -51, -32, -44, -11, 10, 63, 25, -92, -52, -30, 26, -57, 44, -18, 20, 49, -40, 74, 96, -43, 99, 90, -15, 40, 11, -119, -125, 42, 58, -127, -27, 9, -64, -64, -87, -31, -53, -39, -1, -11, 53, -6, -124, -6, -81, -67, 46, 23, 11, -124, -48, 100, -62, -6, -17, -124, 10, 81, 39, 35, -125, -52, 4, 41, -43, 12, -48, 13, 27, 41, 25, -20, 4, -71, -59, -30, 43, 46, 22, 34, 50, -78, -117, -26, 67, 22, -27, -86, 48, -51, -52, 32, 48, 1, -11, 63, -38, 62, -13, 17, 32, -6, 11, -15, -65, -45, 69, -9, -33, -13, -114, -30, 55, -29, -33, 3, -59, 44, 72, -52, 22, 65, 14, 5, -20, 19, 12, 81, -2, 100, -6, 125, -41, 124, -2, 24, 107, 21, -38, 66, 46, -20, -11, 8, 51, -59, 8, 50, -78, -26, 98, -21, 120, -30, 34, -49, 72, -22, -74, 69, -86, -11, 23, -126, 10, 12, -35, -36, 20, 21, -24, 39, 44, -110, -54, 33, 1, 10, -83, 36, -37, 7, -57, 0, -73, -23, 15, -10, -14, 12, 52, -80, -21, -40, 0, -47, 24, 8, 58, -41, -48, 14, 27, -83, -11, 62, 5, 101, 35, -75, 89, -101, 44, 50, -77, -115, 1, 50, 25, -113, -64, -6, -14, 30, -80, -91, -48, -126, -51, -93, -103, -1, -49, 73, 25, -39, 51, 70, -39, -53, 41, -60, -70, -72, -6, -19, 63, 75, 120, 79, 1, -57, 8, -3, 18, 5, -56, 31, -13, 73, 83, 77, 4, -122, 122, -127, -17, 63, -119, -30, -74, -109, -106, 44, -12, 106, -15, -31, -19, 17, 87, 15, -79, 81, 32, 35, 60, 127, 0, -53, -60, 30, -93, -31, -19, 36, -19, -21, -46, 44, 16, 88, -98, 61, 65, 25, 119, -70, 127, 52, 12, -1, -6, -72, 15, 99, -117, 22, 3, 99, -63, -54, -56, -1, -32, -2, -120, 53, 66, -8, 112, 43, 2, -57, -27, -92, 39, 100, 5, -20, -66, -7, 33, -81, -127, -80, 27, -112, -76, -53, 122, 12, 33, -88, -25, 47, -112, 10, -38, 117, 29, -125, -65, 30, 60, -124, -61, 14, 108, 7, -30, -50, -38, 44, 16, -35, 39, -2, 125, 83, -1, -24, -27, 106, -76, 58, 122, 24, 15, -86, -101, -82, 121, 6, -4, 33, 0, -40, -80, 22, -24, -124, -39, 120, -53, -1, 63, 12, 48, -54, 83, -109, 40, 7, 26, -51, -74, 38, -12, 0, 33, -66, 50, -118, -25, -109, 18, 59, 124, 50, 10, -42, 12, 68, -85, -59, 46, 34, 5, -1, -2, -41, 53, 3, -8, -62, -8, 33, -95, -24, 52, 30, -16, 98, -13, -54, -54, 39, -30, 9, -78, -13, -21, -39, -20, -21, 36, 24, 1, 63, 28, -72, 63, -15, -127, -19, 16, 56, 4, 22, -71, 9, -13, 18, -42, 5, -10, -14, -71, -37, -47, -48, -68, 64, 56, 23, -90, 15, -67, -38, -1, 10, -34, -119, 55, -61, -25, 24, 29, -47, -53, -28, 32, 23, 51, 45, -17, 111, 12, -16, -63, -25, -50, 31, -18, -45, 2, -15, -79, -11, 78, -102, -46, 31, -47, 69, 8, 63, -123, 107, -74, -78, 45, 55, 20, -64, 30, 95, 44, 6, 13, 28, -37, -70, -21, -84, 16, 6, 5, -53, 8, -9, -11, 24, 41, -39, -84, -40, 24, -126, -41, -3, 13, -84, 59, -62, -43, 11, -15, 14, -46, -125, -72, -38, -48, 22, -38, 84, 39, -29, -97, 31, 8, -46, 22, -68, -60, 8, -47, -123, -18, -102, -43, 34, -79, 30, -74, -94, 64, -57, -1, 98, -9, 97, -119, 45, 19, -24, -26, -99, -55, 24, 46, 7, -6, -126, -80, 15, 1, -20, -72, -68, -23, -79, -74, 65, 8, 26, 118, 13, -82, -38, 20, -9, 104, 41, 42, 126, -15, -54, -65, -97, 59, 50, 12, 76, -47, 92, -126, -39, 2, 46, 27, 101, -87, -7, -26, -25, -2, 22, 12, 57, -99, -16, 54, 126, 80, -17, 54, 21, -21, 83, -54, 62, -11, 35, -37, 80, -2, 20, 6, 39, -20, -74, 33, -53, 56, -21, -48, 37, 37, 0, -40, 13, 44, 107, -47, -21, 19, -23, -116, 104, 72, -43, 59, 37, 53, 70, -59, 26, -14, 41, 13, 17, 32, 123, -73, 62, 101, -47, -60, 15, -44, 7, -114, -40, -39, -79, 84, 18, 114, 70, 103, 55, -24, -8, -80, 71, -50, 55, 54, 46, 25, -59, 15, 19, 122, -104, 121, -5, 45, -22, 118, 88, -2, 123, -13, 21, -33, -70, -54, -86, -29, -85, -40, -38, -20, -71, 8, -97, -23, -48, -4, -9, 25, -122, -52, -119, -5, 3, 39, -28, -113, -65, -44, 5, 13, -14, 83, 9, 50, 27, -24, -13, -14, -37, 106, -31, 58, -26, 37, 1, -78, -128, -12, -39, -127, 20, -53, 54, -61, 71, 16, 41, 54, -92, 57, 88, 48, -51, -7, 18, 24, -12, 83, 29, 63, -20, -88, 11, -17, -79, -84, -51, 53, -2, -21, -64, -28, 98, -14, 7, 127, -122, -22, -25, 6, 4, 121, 124, 111, 38, -33, -17, -106, -2, -10, 12, -35, 67, -2, 8, -15, -17, 48, 66, -5, -10, -33, -2, -37, 73, -110, 124, -27, -14, -7, 46, 6, -14, -37, -32, -32, -33, 39, 33, -21, -111, 1, 21, -126, -99, -81, 31, -32, 58, 32, -104, 23, 61, -48, 20, -5, -51, 57, -126, -10, 110, -6, -32, -35, 65, 42, -95, -74, -72, 6, 45, -81, 34, -61, -128, 46, 22, 5, -30, -59, 116, -95, -31, -14, 16, 18, -39, 52, -36, -35, -1, -107, 59, 34, -24, 35, 28, 52, -65, -49, -66, -1, 59, -87, 45, 42, 124, -47, -59, -68, -85, 52, -18, -119, 19, 25, -126, -118, -26, -9, 82, -111, 20, -72, -86, 6, -36, 18, -45, 100, 3, -86, -17, 125, -121, -50, 25, 37, 123, 20, 52, -118, 53, 19, -31, -86, 123, 63, -110, -12, -28, 64, -39, 75, 96, -95, 58, 45, 43, 97, -71, -25, -38, -8, -33, -85, -56, -44, 41, 82, -77, 71, -35, 29, -36, -16, 21, -84, -7, -37, -82, 60, 21, 26, -39, -23, 87, -2, 46, -27, 45, -38, -25, -67, 45, -48, -3, 11, -82, -15, -34, -35, 87, -94, -17, 47, -33, 41, -17, -36, 30, 41, -18, 81, 33, 25, -80, 65, -6, 65, -35, -18, -105, 33, 57, 5, -12, 25, 120, 6, -69, 90, -41, 45, -59, -82, 80, 41, -11, 6, 38, 105, 51, 58, -73, 20, 19, -4, 40, -28, -124, 116, -33, -15, 23, 124, 68, 28, 6, -25, -29, 18, 80, -35, -4, -25, 10, -118, -20, 9, 94, -111, -76, 43, -19, 15, 97, -19, -21, 63, 92, 72, -67, -23, -66, -49, -14, 6, -47, 17, -101, 21, -29, 89, -72, -86, 112, -92, 38, -71, 114, -53, 47, -102, 6, -59, 64, -16, -116, -22, 6, -43, 19, 9, 9, -37, -68, 86, -6, -84, -40, 10, -14, 80, -10, -49, 76, 31, 47, 123, 90, -49, 35, 9, 64, 71, -29, -40, -107, 60, -33, -23, 25, 63, -116, -16, -118, 82, -125, -7, 26, -70, 77, 37, 124, 29, 80, 69, 88, -5, -56, -77, 68, -77, 61, 20, -72, -27, -120, -58, -70, -10, -126, -49, -66, -44, 127, -28, 83, 63, 65, -90, -29, -121, -1, -30, 85, -41, -91, 40, -43, 68, 85, 85, -75, -43, 122, -24, -103, -82, 20, -113, -22, -36, -72, 29, -39, 28, -24, -16, 11, 27, 28, -1, -61, 15, -126, 1, -31, -43, -26, 24, -27, -42, 28, -80, -34, 15, -44, -42, 31, 23, -40, 30, -2, -54, -6, -48, -114, 36, -71, 13, 57, -127, 94, 1, -28, 116, -62, -3, -29, -23, -75, -110, 49, 42, 127, 19, -121, -92, 56, -58, -28, -41, -19, -5, 38, 106, 120, 40, 2, 86, -58, -49, -20, 102, -56, -86, -7, 1, -85, 10, 34, -11, -63, -1, 85, -106, 31, -48, -64, 12, -14, -111, -82, -28, -11, -26, -52, -43, -33, -20, -57, -91, 27, -64, 54, -55, -32, 27, 97, 11, 13, -8, -120, -35, 35, 6, -117, 25, 104, 7, -1, -8, 0, 31, -29, -10, -20, -33, -23, -1, -6, -107, 60, -62, 70, -28, -96, 48, 17, -103, -64, 30, 42, 18, 66, 0, -69, -16, 77, -21, -4, 35, 45, -70, 70, 36, 27, 97, -27, 57, 23, -23, 91, 118, -12, 24, 21, -54, 1, 40, -17, -109, 39, 33, -22, -44, 46, 20, -15, -42, 29, -10, -64, -16, 35, -95, -83, 40, -34, -63, 54, -12, 2, 104, -5, -103, -79, -94, 126, -7, 18, -17, 116, -15, 76, -48, 19, -5, 76, 58, 53, 1, 20, 22, -13, -63, 11, -15, -117, -39, 43, -21, -5, 18, 16, -7, -72, 34, -103, 86, -76, -114, 26, 39, -4, 3, 45, -37, -55, -34, 56, -113, 14, -56, 21, 83, -115, 52, -41, 71, -51, -125, -95, 11, 93, -48, 5, -41, -128, 11, 22, -20, -103, 1, 17, -69, -28, -32, 25, 119, 52, -92, -92, -19, 57, 77, -51, 59, -57, -8, -90, -17, -44, -94, -43, -90, 5, 18, -27, -72, 42, -18, -29, 32, -30, 19, -7, -27, -102, -82, -20, -7, -127, -26, 60, 1, -37, -124, -92, -47, -8, 8, -55, -25, -88, -18, 98, -5, -35, -44, 15, 121, -38, -13, 9, -88, -126, 68, -126, 62, -49, -44, -56, -71, 3, 65, -27, -46, -103, -78, 29, -65, -23, 100, 75, 47, 8, 57, -43, -47, 69, 112, -85, 51, -56, 36, -101, 13, -36, 73, 26, 31, -8, 53, 52, -38, 29, 81, -26, 116, -18, 35, -49, 2, -6, -4, 52, 94, 59, -120, 68, -59, 6, -3, -54, -22, 18, 1, -126, -127, -34, 19, 105, -26, -16, 113, -43, -31, -7, -60, -4, 72, 39, 17, 38, 118, 31, 5, 19, -70, -14, -93, -8, -107, -56, -59, 56, -127, 41, -63, -30, -71, -27, -4, 13, -15, -66, -50, 33, 38, 34, -47, 2, -50, 71, -49, 18, -39, -18, 46, -3, 50, -18, -32, -67, -25, 58, -14, -7, 23, -3, -24, 7, 8, 118, -20, -55, -24, -30, -16, -9, 73, 63, -74, 42, 112, -35, -27, 38, 59, 13, 72, 2, 109, -11, -75, 30, 28, -20, -74, 16, 103, -83, -6, -115, -44, -11, -33, -120, 66, -58, 22, -12, 15, -32, -26, 1, 30, 35, 76, 62, -121, 9, -32, 12, 75, -77, 80, 25, -18, -78, -123, -61, 23, 36, -127, -65, 15, 29, 100, -23, 2, 15, 21, 52, -120, -14, 12, -38, -39, 100, 13, -3, 22, -125, -115, -44, -65, 85, -44, 35, -27, -44, 9, 77, 2, 4, 5, 35, -31, -126, -112, -91, 32, -24, 6, -73, -41, 41, -23, 42, -127, 41, -51, -8, -55, -52, -32, -6, -52, 55, -16, 26, 110, -63, 70, 127, 38, 80, 17, 87, 44, -51, 34, 127, -16, 117, 126, 22, -24, -123, -6, -76, 12, -4, -3, 47, -31, 28, 30, 12, -24, 84, 110, -105, 64, 44, 84, 27, -13, 54, 104, -20, 60, -60, -10, 45, 120, -55, -6, -91, 35, 10, 2, 38, -30, -125, -100, -23, -126, 47, -16, -17, 20, -73, 6, 31, -28, -121, -53, 79, -100, -4, 69, 0, -20, 125, 35, 16, -44, -20, -5, 44, -113, -11, -6, 57, 33, -3, -21, 50, 101, -9, 42, 72, -10, 21, 95, 39, 8, 72, 42, -43, -24, 30, 33, -27, -17, 79, 52, -127, 3, 39, 1, -66, -43, 85, 11, -56, -20, 14, -7, -30, -8, -10, -34, 48, -109, -12, -99, -58, 123, -82, 35, -102, 7, -83, -104, 29, 99, -91, 13, 15, -64, -111, -17, -24, -98, -97, 86, 0, 12, 123, -113, 61, -13, 3, 31, 4, -92, -115, 126, 7, 6, 74, -68, 46, 19, -85, -94, -20, -20, -117, 59, -51, -59, 20, 18, 3, 6, 21, 1, 94, -78, 112, -12, -46, -30, 67, -16, -83, 6, 42, -118, 49, -82, -21, -4, 15, -12, -67, 20, -71, -69, 57, -10, -51, -46, 99, -5, -9, -40, 59, -61, -11, -59, -69, 2, -55, -32, -48, -4, -6, -33, -110, 94, 43, -19, -18, 31, -126, -5, -19, -80, -20, -20, -28, -56, -70, 45, -46, 43, 77, 6, 77, -90, 26, -37, 35, -39, -48, 28, 9, -56, -42, -31, -46, -31, 13, -65, 77, 34, -41, 9, 17, 20, 24, 51, -44, 11, -21, -44, -78, -96, -23, -22, 6, 18, -126, -110, -33, 8, -32, 17, -123, -43, -7, -53, 17, 46, -53, 26, -15, 70, 19, -51, 67, 25, 117, 56, 7, -6, 74, 57, 101, 122, 41, -32, -44, -21, 54, 32, 22, 119, 120, 72, 68, -24, 29, 48, -6, 2, -14, 5, -35, -77, 4, -72, 53, 46, -31, 57, 25, 9, 69, -21, -7, 70, -41, 43, 63, 10, -53, -68, -31, 20, -19, -90, 48, -22, -54, 33, 64, 20, -79, -13, -17, 45, -41, 103, -16, 25, 6, -35, -24, 28, 9, -29, 76, 4, 40, 47, 23, 24, -51, 92, -17, 49, -23, 107, -13, 65, 72, 34, -19, -20, -60, -45, -55, -2, 19, -58, -49, 7, 20, 78, 120, -69, 28, 45, -119, -15, 13, 20, -45, 25, -108, -20, 12, -54, -17, 32, -17, -13, -3, -3, 17, -25, -48, 95, 8, 36, -66, -4, -26, -17, 12, 39, 57, 53, -17, -33, -46, -18, -61, 19, 64, -72, -12, -69, -31, -31, 66, 65, -62, -10, 120, 4, 46, 122, -36, 75, -47, -5, -82, 49, -3, -123, -125, -37, 127, 33, 111, 58, -68, -36, 87, 51, 22, -49, -1, 115, -10, -40, 37, -56, -90, 11, 34, 77, -5, -37, 61, 123, -11, 17, 46, 64, -86, -96, -5, -18, -84, 116, -126, 127, 55, 58, 27, -68, 42, 47, -63, -108, -103, -33, -1, 77, 0, -9, 33, 126, -106, -14, 127, 8, 2, -42, 37, 41, -23, 17, 11, 4, -65, -42, 0, -47, -36, -11, 34, -83, -25, 52, -125, -25, 0, 7, 24, -83, -56, -21, 112, -60, 25, -124, -114, -67, -14, -55, -28, -34, -9, 119, 8, -47, 52, -6, 20, 23, 9, -104, -27, -46, -42, -32, 55, 118, 49, -35, -41, -19, -103, 1, 63, -47, 9, 1, 0, 124, 72, 1, 8, 47, 118, 29, -39, -20, 26, -38, -17, 13, 68, -52, -37, -30, 105, 7, -5, 27, 24, 71, 15, -48, 80, -9, -9, 66, 19, 19, -31, -74, 115, -4, 21, 78, -19, 2, 17, -51, 28, -109, 58, 78, -10, -3, 119, -44, -12, -41, -57, 67, 38, 49, -113, -43, -101, 59, 104, -26, 116, -23, -47, -33, 57, 17, -99, -123, -3, -55, 9, 94, -50, 30, -48, -128, -63, 3, -61, 61, -31, -40, -31, 4, -54, -123, 37, 70, 14, -13, -32, -115, 61, 21, -93, -34, -7, -32, 26, -20, -110, 73, -15, -123, -69, 41, 13, 106, 10, -39, 69, -102, -80, 18, 51, -81, 86, 30, 39, 48, -78, 106, 14, 30, -27, 65, 62, -20, -113, -30, 47, 22, -101, -24, 119, -15, -40, -95, 76, -112, -5, 38, -123, 77, -22, -84, 63, 17, 3, -113, 50, -6, -60, 5, 16, 29, 21, -1, -25, -16, -2, 58, -50, -58, -43, -28, -85, -71, -45, 66, 46, 127, 37, -63, -9, -60, 56, 22, 48, -47, 23, 28, 21, 27, -32, 7, -71, -82, -7, -11, -27, -24, -2, -45, 67, 32, 21, 86, 62, -51, 39, -41, 2, -41, -31, -15, 50, -50, 54, -8, -21, 39, 51, -32, -24, -22, -27, 5, -8, 16, -2, -17, 17, -43, -35, -32, 29, -21, -58, 27, 49, -2, -63, -109, 40, 26, -55, 63, 87, -37, 76, -88, -23, 42, 59, 24, -32, -47, 18, -16, -30, 71, 39, -13, -10, -83, -2, 24, -12, -36, -44, -79, 66, 17, -21, -27, 48, -4, -7, 101, 16, -13, 17, 20, 29, 70, -46, 19, -30, 25, 20, 8, 32, 86, -76, -17, -59, 102, -29, 10, 38, -104, 6, -86, 8, -39, 4, -2, -28, 8, -27, 8, -1, 36, -82, 17, -53, 44, 72, 43, -83, 16, 70, 42, -61, 12, -74, -70, -10, -23, -43, 33, 29, 12, -3, -18, -81, -26, -48, 10, 27, -37, 96, -27, 24, 67, -36, -28, -6, -10, -26, 15, -41, 7, 110, 25, -101, -75, 62, -54, -64, -11, -38, -126, -24, -93, 101, 0, 13, 20, 35, 41, -122, 91, 62, -45, -12, 13, -36, 40, -43, -104, -29, 61, -117, -70, -121, 17, -21, -3, -127, 107, -22, 62, 47, -3, -36, -18, 69, -67, -33, -19, -89, -13, -7, -4, -49, -20, -112, -13, 35, -126, 38, -27, -114, 12, -54, 19, -108, -61, -79, 5, -65, 71, -121, -115, -64, -2, -52, 35, 22, -46, -8, -82, 41, -113, -126, -6, -19, 43, -51, 35, -11, 84, -44, -100, 23, 67, -11, -20, 81, 52, 22, 21, 124, 12, -23, 4, -27, -128, 111, 25, 35, 48, 28, 9, 28, -24, 84, 56, 10, 71, -22, -22, 78, 16, 92, 117, -22, 33, 29, -10, -98, -35, 45, 1, 5, 24, -46, -69, 13, 21, 28, 4, -27, -117, 44, -29, 116, 26, -21, -38, 111, 43, 14, 6, -7, -79, 82, -57, 4, -127, 0, 86, 113, 2, 7, 42, -72, -31, 11, -6, -97, 22, 113, 10, -31, -30, -57, -35, 21, -21, 47, -3, -42, -36, 74, -102, -24, -59, -58, -50, -67, -113, 25, -128, 4, -108, 16, 113, 82, 32, -128, -17, 65, -121, -92, 81, 0, 28, 27, -8, -93, -31, -41, -22, -20, -78, -111, 44, -105, -67, -117, -123, -72, -76, -90, 9, 29, -48, -66, 4, -82, -51, 16, -28, 11, -54, 4, 22, 10, -91, -64, 6, 119, -63, -6, 24, 124, 75, -54, 70, 67, 38, -31, -48, 68, 71, -38, -7, 7, 34, 91, 53, 53, -33, 10, 90, 3, -37, 55, 58, 38, -17, 54, 19, -45, 63, 69, -9, 82, 9, -5, -33, -13, -35, -17, 4, -64, -126, 102, -116, -3, 17, -42, 19, -50, 62, 41, -21, -103, 38, 36, 14, -9, -10, -46, -35, -2, 43, 56, -112, -109, 70, -17, -35, -42, 34, -20, 94, -8, -1, -29, -30, -47, 71, -29, 56, -12, 6, -76, 53, 1, 8, 55, -24, 63, 15, 61, -113, -27, -57, 71, -42, 47, 74, -72, -12, 13, -39, -75, -112, -46, 40, 24, 82, 32, 48, -20, 40, 14, 61, -11, -117, -37, -7, -67, -123, -21, 20, -36, -31, -7, 28, -95, 39, -5, -98, -39, 10, 40, -67, -5, -47, 12, -23, 31, -2, -4, -9, -70, 29, 45, -37, 49, 15, -122, -47, 34, 9, 62, -7, -42, -127, -72, -22, -55, -64, -24, 2, -12, 86, -77, -36, -6, 56, 55, 46, 117, 105, -72, 27, 1, 97, 81, -24, -83, -94, 6, -16, 68, 9, -57, 12, 108, 11, 13, -89, 25, 59, -38, 49, -18, 16, -53, -2, -1, -5, 50, 17, 89, -9, -50, 27, -34, 62, -7, 4, -49, -6, -3, 12, -12, -118, -9, 26, -32, 29, 76, 37, -112, -26, -76, -38, -22, -34, 125, 59, 1, -53, 40, 21, -4, -27, -83, -19, 47, -123, -123, 30, 111, 3, 27, -1, 127, -47, -97, 38, 87, -101, 1, 15, 79, -2, 44, -18, -40, -17, 18, -49, -26, -125, -120, 16, -55, -37, -25, -86, -87, -23, 8, 29, 3, -14, 9, -9, 34, 10, 69, 4, -32, -20, 68, 10, 21, 15, -58, 16, -45, 81, 81, 104, -20, 45, 6, 45, 41, 55, 12, 18, 1, 11, -84, -48, 88, 2, 50, 30, 11, 17, 5, -23, 70, 121, 24, -31, 97, 36, 102, -95, 88, 5, -43, 123, 92, -20, -43, -28, 22, 127, -42, -47, -37, 86, 56, -60, 94, -13, -108, 21, -82, 25, -76, 36, 21, 54, 123, -70, 39, 3, 9, 73, -9, 31, -35, -55, -128, 14, 36, 15, 32, -63, -80, 64, -76, -72, -58, -115, -124, 127, 33, 17, 23, -65, 111, 18, 60, -34, -120, 80, 19, -125, 49, -20, 53, -66, 31, 22, 35, -125, -86, -42, -73, 37, -87, 22, 113, 70, -39, 1, -57, -44, -85, -12, 103, -49, -72, 79, -26, 89, -46, -67, 51, -11, 125, -121, -87, 32, -90, 21, -42, -3, 77, -6, 33, 38, -7, -27, 31, -28, 51, 18, 49, 55, 6, 22, 6, -29, 71, -123, -10, -46, 64, 30, -52, 124, 33, -1, -48, 27, 105, -74, -104, 38, -45, 102, -8, -28, 20, 19, 28, 8, -50, -44, 43, 123, -23, 121, -28, 88, 3, 57, -31, 13, 17, 52, 27, 8, 53, -25, -28, -34, 18, -68, 63, -21, -32, 11, 53, 66, -38, -79, 59, 5, -65, 50, -23, 61, -52, 64, -120, -20, 12, -77, -9, -67, -95, 16, -127, -111, -74, 124, 126, 78, 45, -29, -3, -70, -68, 43, -27, 32, -127, -69, -16, -33, -127, -125, -43, 13, 81, 67, -10, -41, -7, -38, -26, -1, 64, -66, 106, 127, -15, -28, 14, 117, 28, 41, -81, 46, -58, -121, 48, -86, -39, 8, -36, -128, -3, -78, 35, 45, 24, -7, -25, -3, 115, -21, 15, 14, -30, -40, -30, -55, 39, 79, -29, 126, 69, -97, 18, -31, -11, 58, -60, 14, 99, 11, 54, 43, 30, -50, -53, 4, 125, 26, 108, 32, 36, -17, 9, -68, -104, 27, 7, 84, -73, 8, -58, 4, 35, 85, 76, 125, 31, 32, 42, 15, -65, 63, 89, 31, 44, 7, 24, -22, -117, -4, -84, -32, -2, 78, -53, -74, 108, -96, -26, 26, 27, 8, -62, 9, 61, -20, 32, -37, -39, 20, -5, -88, 38, -22, -47, -79, 30, -35, -12, 13, -35, -79, 34, 10, -117, 34, -14, 106, 12, 11, -24, 59, 28, 25, -21, 10, -73, 9, 9, -18, -31, -52, -70, -45, -5, -20, -22, 89, -21, 41, 39, 58, -16, -2, -128, 23, 9, 61, 22, 25, -43, -126, -27, -20, 14, -57, -32, 126, -5, 25, -44, 32, 51, 108, 62, -3, 12, -16, -39, -35, 37, 41, -64, 37, 58, -63, 100, -29, 66, 31, 14, -3, -12, 98, -58, 9, -5, -22, 35, -1, 2, 78, 46, 45, -33, 35, -62, 78, -54, -40, 17, 60, 99, -43, 42, 47, 24, -42, -80, -72, -81, 14, -48, -41, -40, 83, 36, 24, 55, 48, 124, -39, -75, -57, 96, 28, -107, -64, 88, 18, 4, -18, -47, 53, 35, -61, 60, 21, -23, -15, -112, -55, -39, -75, -17, -122, 78, 51, 15, 51, -126, 79, -100, 94, 35, -33, 42, 45, -26, 41, -20, -76, -2, 11, -82, -12, 60, -44, -9, -40, 3, -93, -116, -125, 1, -60, 34, -28, 43, -3, 18, 33, 29, -117, 87, 19, -88, -92, -92, -64, 37, -125, 68, -123, -113, 29, 39, 5, -8, 6, 100, 127, -7, 8, 62, -9, -10, -48, 96, 104, 121, 122, 21, 46, 116, 124, -77, 0, -124, 120, -10, -72, 0, -5, 100, -44, 124, 12, 52, 26, -46, -18, 126, 8, -30, -124, 4, 94, 12, 10, -39, 126, -73, 109, 22, -72, -82, 32, -33, -56, 37, -58, -50, -24, -6, 114, -62, 33, -124, 44, 27, 111, -2, 50, -12, 35, 12, 126, 12, 21, 94, 25, 22, -8, 51, 74, 46, -102, 24, -57, 0, -54, -51, -27, 116, 113, -25, 0, 9, -29, 16, 47, -69, 41, -63, -66, -36, 21, -74, -40, 41, 65, 62, 8, -86, 59, 35, 90, 24, -9, -31, -23, 25, 14, 50, -113, -48, 59, -9, -48, 7, -37, -124, -25, 15, 18, 77, -66, 35, -1, -15, -84, -29, 6, -9, 25, -26, -108, 53, 5, -13, 26, -124, -47, -39, 21, -5, 21, -64, -43, 74, 51, -34, 42, 60, -30, 23, -32, -6, -53, 58, 41, -92, 30, -67, -22, -16, -30, -10, -43, 96, 22, 64, 121, 18, -105, -61, 8, 69, -90, 80, 65, -118, 9, -16, 20, 54, 6, -68, 66, 31, 29, -101, 81, -79, 37, 68, 5, -123, 115, -9, -33, -94, 7, -42, 113, 39, -3, 110, -74, -13, 37, -75, -62, -13, 119, 2, 0, -120, -114, 62, -53, 28, -99, -58, -7, -63, -120, 85, -79, 4, -28, 61, -126, -65, 62, -94, -60, 20, 125, -112, -124, -56, 31, 127, -59, -66, -125, 62, -92, 25, 39, -128, -24, 24, -34, 50, 2, -30, 127, -91, -43, 65, 127, -8, -21, 12, 99, 7, 120, -126, -35, -5, 109, -117, -32, 10, 114, -11, -18, -83, 66, -76, 87, 35, -12, -90, 17, -25, 123, 14, 20, -5, -62, 23, -35, 125, 36, -5, 28, 64, -113, 5, -11, -27, -123, 14, -48, -13, 26, 19, -20, -4, -19, 33, 0, -81, 41, -47, -30, 16, -67, -52, 39, 68, -7, 85, 6, -10, -6, 17, 59, 18, -48, 113, 73, 85, 60, -3, 94, -43, 21, 9, 15, -74, -40, -52, 45, -104, -34, 3, 26, 20, -36, 17, -121, 21, 44, 66, -67, 5, 4, 63, 8, -23, -45, 12, 52, 4, 53, 8, -116, -64, -42, 68, -124, 39, -25, -22, -2, -17, -31, -77, 43, 32, -55, -127, -40, -6, 44, 66, 27, -21, 60, -110, 16, -71, 65, 103, -25, 50, 47, -49, 18, -35, 18, 21, -29, -19, 38, 4, -47, -4, -66, -21, -41, 43, -22, 50, -78, -62, 106, 71, -66, 31, -38, -17, 45, -65, 92, 0, -23, 13, 90, 48, -42, 103, -42, 18, 11, 50, -20, 19, -76, 74, 70, 43, 106, -119, 18, -40, 34, 24, 20, -17, -83, -64, -10, 27, -6, 62, 127, -88, -43, 49, 124, -23, -95, -17, 3, 75, 65, -45, -14, 88, 48, 30, -53, -35, 29, -87, 11, 66, -2, 109, -28, -29, -71, 96, 28, 24, 38, 23, 63, -55, 57, -42, -18, -55, -42, 23, -40, 16, 18, 33, 10, 29, -24, 36, -79, -81, -13, 38, 24, 10, 126, 46, -9, 7, 34, 59, -1, -52, -8, -28, -23, -95, 55, -128, -32, 17, 120, -89, 40, -62, -63, 17, -97, -77, -46, 41, -121, -5, 45, -70, -50, -92, 94, 71, -121, -15, 127, -77, 6, 125, -34, -48, -21, -128, 127, -39, -47, -109, 36, 127, 76, -55, -83, -30, -124, -128, 52, 23, -123, 127, -21, -91, -9, 28, 36, -67, -51, 27, 33, -38, 4, -74, -123, 10, -120, -25, -30, 54, -9, 123, -118, -14, -77, 30, 70, 8, -18, 106, -7, -55, -39, -75, -59, -47, 25, 48, -6, 7, 83, -47, 25, -127, -33, -114, 33, 30, -3, 49, 105, -41, 72, 75, -91, 0, -36, -64, -18, 16, -36, -99, 116, -85, 61, -70, -14, -126, -39, 122, -81, 91, -42, -108, -116, -41, 46, 119, -1, 15, -19, -47, -19, 17, -73, -20, 3, -66, 40, -122, 81, -5, -61, 23, 45, -79, -25, -79, 66, -2, 6, -36, -47, 95, -9, -34, -24, 3, 94, -11, 127, 75, 38, -6, -45, 12, 25, -28, -124, 111, 108, -78, -7, -87, -45, -3, 26, -66, 91, -87, 72, 64, -88, -78, -41, 29, -86, -59, -1, -55, -35, 13, 124, 15, 40, -43, 29, 59, -112, -38, -10, -77, -9, 18, 20, -47, 39, 43, -34, -47, -17, 34, 1, 70, 90, 47, -63, -15, -4, 28, 102, 48, -78, 24, 58, -12, -33, 8, 16, 17, -52, 18, -4, 81, -28, -28, 28, 56, -40, -43, 9, -52, 5, -54, -26, 15, 40, 6, 18, 29, -25, -35, -87, -21, 17, -25, -5, 6, 65, 34, 59, 33, -38, -17, 6, -18, 42, -42, -61, 45, -46, 63, -80, 16, -56, -118, 27, 44, -8, -74, -24, 7, -49, -47, -87, 16, -64, -22, -16, 127, 24, -39, -44, 42, -125, -75, -16, 52, -40, -39, 40, -48, -5, 16, 10, -59, 25, -13, 19, -23, -96, 43, 71, 51, -21, -24, -22, -10, 66, -91, 23, 74, -119, 93, -42, 5, 33, -95, 53, -121, -68, 35, -63, 33, -50, -48, -65, -8, 21, -3, -1, -87, 88, 82, -51, 33, -32, -26, -72, 15, 61, 2, 55, 122, -32, 48, 15, -71, -3, -41, -11, -22, 19, 6, -27, -85, -11, 1, 25, -52, 94, -104, 52, 42, -49, 49, 118, 79, 78, -46, 22, -7, 11, 63, 24, 5, 3, -2, -37, 118, -4, 7, -50, 1, -27, 50, 39, -33, -20, -116, -67, 4, -13, 99, 58, 16, 38, 47, 65, 86, 68, -62, 62, 8, 9, -81, 10, -26, -87, -18, 89, 42, 51, -19, -71, 126, -87, -64, -69, -80, -3, -13, -20, 33, -4, 89, -6, -16, -45, 93, 29, -7, 58, 78, 45, 23, 32, -67, 5, -25, 59, -47, 33, 60, -23, 41, 12, -13, 26, -18, 15, -64, -30, -122, -31, 66, 120, -86, 98, -120, 66, -22, 6, -37, 39, 90, -124, -75, -124, 16, -59, -42, 96, -4, -51, -34, -10, 36, 8, 127, -60, -80, 44, 46, -31, -3, -20, 116, 45, 50, 5, -6, 78, -25, -27, 40, 49, -24, 68, 1, 25, -42, 0, -93, 94, -37, 8, 31, 27, -24, 22, 8, 15, -33, 33, 18, 75, -113, 75, -14, -63, 28, -4, -63, 3, 45, -5, -6, -38, -66, -4, 58, -4, 125, 89, 56, -21, -119, 54, -26, -35, 43, -51, -51, 74, -9, -57, -30, -30, -126, -122, -42, 90, 5, -74, 37, 49, -3, -69, 33, 20, -2, 70, -84, 0, -51, -74, -26, 100, 10, -89, 3, -92, -119, 31, 50, 20, 24, 51, 23, 114, -120, -46, 70, -7, -11, -11, -16, 36, 3, -122, 20, 46, -52, -23, -35, 3, -53, -37, -35, -36, 28, 38, -69, -90, -4, -43, -58, 30, 13, -70, 5, -44, -17, -59, -26, -48, -74, 29, -127, -23, -34, -31, 29, 14, -50, -93, -20, -53, -35, -59, -42, 1, -44, 16, -126, 16, -125, 22, -22, -98, -8, 71, -57, -76, 13, 61, 125, 48, 52, -110, -90, 37, -75, -41, 0, -36, 32, 33, -2, 28, -70, 59, 93, -116, 13, 79, -18, 83, -43, -12, 0, 4, -74, -121, 0, -63, 42, 52, -65, 96, 7, 18, 11, -24, 100, 29, 23, 45, 24, 6, -33, 17, -75, -66, 59, -8, 42, -8, 8, -36, -35, 3, 22, -26, -19, -23, 17, -62, 44, -32, 120, -5, 26, -14, 11, -54, -40, 43, -47, -62, 8, 11, 18, -5, -44, 9, 15, 41, -13, -42, -58, 45, 32, 8, -28, 52, 29, 18, -14, 31, -18, 63, -19, -103, 60, 4, 75, -36, -86, -90, 68, 7, 17, -24, -44, -16, 11, -62, -31, 71, -78, 15, -51, 1, -46, 71, 124, -2, 9, -20, -9, 39, 5, 71, -12, 0, 54, 68, 41, 33, -19, 103, 1, -66, 20, 41, -56, -80, 7, -35, -85, 23, -37, 9, 62, 56, 63, -23, 25, 127, 26, 1, -76, 124, -23, 44, -55, 87, -58, -47, -18, -15, -8, -24, -50, 54, -68, -63, -12, 25, -14, -25, -49, -16, 109, -55, 9, -49, -2, -73, -33, -101, 28, -53, -10, 21, -42, 11, -53, -31, -125, 57, 24, 85, -11, -76, -39, -40, 34, -30, -34, -127, -4, 55, 96, -3, -44, -32, -24, 115, -9, -92, -63, 6, 71, -23, -74, -16, -86, 84, -127, -116, -109, 108, 18, 91, -96, -76, 65, -55, -5, 29, -26, 23, 40, 9, -127, 40, -103, 69, -127, -10, -16, 99, -34, 53, -5, -108, -40, -81, -42, 63, 61, 23, 123, -72, 7, 55, 114, 24, 73, -15, 17, 37, -43, 48, -105, 77, -12, 33, 29, -36, -1, 41, -35, -81, 81, -41, -80, -29, -43, 115, 19, 50, 40, 32, 32, -82, 87, 28, -5, -22, -77, 56, -12, 28, 26, 5, 49, 37, 25, -29, -35, -13, -82, -57, -74, 36, 104, 62, -78, -82, 46, -3, -57, -18, -57, -9, 61, 14, -12, -41, -84, 125, 124, 24, -80, -44, -21, 21, 82, -48, 123, -72, -23, -93, 38, 10, -103, 55, -126, 31, 29, -48, 127, 26, -51, -74, -54, 4, 35, -125, -40, -30, 37, 58, 31, 11, 10, 2, -24, -75, -18, 29, 35, 10, 37, -3, -106, -56, -70, -11, 14, -59, -125, 27, -49, -18, 12, -59, -63, -74, -1, -66, -13, -121, -73, -4, 5, -121, -70, 6, -128, -23, -20, -25, -65, 14, -23, 112, 67, 109, 41, -15, 71, 3, -9, -21, 121, -119, 63, 93, 34, 35, 65, 126, -39, -46, -118, 105, -103, -25, -29, 76, 51, -77, 122, 95, 65, 77, 67, 11, -4, -119, -52, -39, 48, 6, -28, 68, -42, 113, 9, 23, -18, -7, -14, 23, -12, -9, 5, 6, -93, 43, -32, 7, 20, -65, 55, 18, -128, 53, -7, -5, 21, -2, 13, 43, -5, 13, -126, 92, -60, 32, -84, -116, 62, 70, 115, -21, -38, -116, 0, 39, -10, -10, -29, -101, -40, -9, -29, 43, -16, -1, -4, 29, -42, -52, 13, 44, -126, -91, 39, 64, -52, -60, -52, 66, 15, -7, -35, -105, -55, 63, -24, -76, 89, -18, 38, -73, 57, 6, 67, -80, 64, -48, -42, 19, -74, -128, 36, 4, 20, -125, 15, 51, 13, -19, -29, -78, -60, 56, -9, 63, -23, -37, -57, -12, 7, 33, -115, -30, 62, -32, 93, -19, 73, 20, 15, -2, -48, -19, -128, -54, 126, -103, -39, -27, -65, -24, 63, 7, -40, 27, -26, 71, -110, 116, 36, 20, 7, 2, 40, 45, -41, -62, -78, 28, -54, -59, -1, -19, -75, 50, 32, 107, 20, -5, -104, 105, -39, -38, 72, 70, -121, -4, 99, -23, 16, -47, 14, 89, 34, -65, -16, -46, 18, 52, -65, -51, 11, -108, -37, -57, -25, 27, 19, -36, -100, 97, -112, -24, -118, -31, -39, 122, -61, -52, 95, 42, -53, -27, -71, -79, 3, -62, -126, -115, -30, 65, -48, -98, -110, 77, 13, 55, 26, -4, 2, -73, -36, 50, 20, -86, -70, 22, -35, 118, -119, 7, 62, -124, -7, -107, -95, -119, -60, -47, -94, 14, 105, -70, 104, 16, 75, 114, -128, -95, -113, 17, 7, -127, 24, 28, -53, -76, -57, -118, -19, -59, -14, -64, -22, -27, 0, -10, -103, 13, -116, -59, -1, 66, -123, -107, -5, -48, 4, -61, -86, -50, 5, 51, -81, -108, -59, 19, 54, -103, -17, -35, -127, -81, 59, -122, 0, 36, -24, 117, -29, 31, -9, 13, 15, 80, 81, 36, 123, 90, 77, 21, -49, 8, -12, -34, 65, -71, 35, -3, 15, -54, -58, -41, -45, 10, 54, 102, 77, 23, 28, -39, -43, -47, -49, -87, -35, 24, -2, 21, 33, -22, 26, 19, 80, -26, -32, -101, 34, 31, -6, -57, 20, 73, 78, -107, 36, -49, 2, 23, -17, 109, 5, 15, -34, 41, -23, 61, -5, -56, -102, 88, -16, 49, -52, -57, 59, 90, -8, -125, 30, 72, 75, -46, -75, -126, 97, -28, 118, -62, -47, 113, -29, -48, -29, 101, 23, -7, -42, 18, 36, 0, 11, -29, 31, -53, -5, -18, -80, 46, -18, 29, 5, 17, 0, -19, 65, -6, -1, 21, 11, -35, -40, 26, -68, -29, -43, -4, -24, 29, 85, -25, -77, -10, -27, 3, -34, 56, 74, -118, 13, 14, 101, -48, 22, -41, 59, 22, 21, -20, -127, -73, -7, 70, -48, 13, -95, 31, -14, -63, 22, -71, -93, -74, -38, -120, -28, -33, -45, -14, -48, -18, 81, 24, -60, -29, 0, -16, -7, 47, -84, -72, 58, 14, -37, 71, 20, 41, -42, -6, -105, -8, -2, -25, -16, 23, -50, 16, 33, 52, 22, 42, -4, -5, 54, 15, -22, -105, -18, -8, -25, -112, 26, -32, -46, -70, 86, -41, 105, 46, -30, -38, 1, -24, -20, -24, 3, -13, -44, 19, -79, 23, -60, 21, -54, -120, -21, -3, 60, 4, -29, -2, 17, -2, -10, -20, 12, -71, -108, 47, 4, 26, 20, -11, -28, 0, -27, 2, -50, 7, 9, -42, -59, -52, 65, 9, 77, -67, -21, 5, 44, -30, -33, -87, 8, 109, 120, -80, -27, -74, 4, 40, 22, -17, 91, 13, -31, 80, 0, 34, 24, -29, -74, -120, 71, -96, 85, 125, 117, 59, -53, -75, -42, -21, -19, 9, 29, 47, -124, 97, -7, 54, 29, 9, 67, 56, 13, -16, 33, -10, -11, 100, 26, -65, -10, 2, 80, -43, -1, -98, -37, -1, 63, 29, 41, -92, -5, 48, 36, -2, 48, 2, -23, 7, -2, 19, -121, 95, -85, -2, -126, 47, 44, 4, -49, 53, 27, -80, 48, -51, 127, 13, 84, -39, 2, 40, 29, 45, 53, 14, -21, 27, -38, -79, -63, -28, -20, 7, -117, 62, 1, 58, -68, -6, 22, -5, 9, -16, -23, 55, -43, 25, -31, -85, 39, -5, 65, 1, 16, 11, 2, -27, 31, 65, 88, -15, 16, -127, 58, 45, -45, -20, 45, -22, -61, 62, -62, -74, -107, -62, 96, 37, 57, 23, -83, 3, 11, -69, 31, -13, -67, 14, -93, 35, 61, -62, -31, -61, 9, 25, -53, 127, 117, -4, 67, 59, -65, -38, -11, 46, -75, -20, -48, -9, 55, 18, -39, 30, -55, 114, -45, 47, 15, -32, -27, -84, 12, -42, 85, 0, 4, -56, -48, -43, -24, 24, 26, -85, -10, -90, 28, -9, 77, -111, -51, -79, -41, 26, 16, 46, -65, -69, -106, 121, 68, 19, 16, -62, -25, -62, 115, 116, 20, -94, 61, 45, 78, 53, 55, 28, -42, 20, 7, -109, -34, 55, -124, -39, 125, 40, 25, -28, 82, -60, -101, -13, 25, -71, -34, 27, 71, 16, -7, -33, -37, -1, 12, -1, 9, -52, -12, 25, 25, -34, -41, -37, 32, -18, -31, -124, -85, -101, 0, -37, -122, 49, -21, 85, -68, 5, 36, -20, -13, -12, 43, -26, -57, 30, -12, -46, -90, -83, -120, -3, -26, -59, 16, 47, -83, 32, -44, -14, 35, -94, 69, -61, 108, -20, -17, 54, 36, -49, 53, -50, 48, -4, 9, 38, -70, 56, -23, 80, -48, 56, 37, -55, 20, 41, -9, -97, -55, 81, 18, -42, -6, -110, 97, -86, -91, 21, 9, -14, -10, -14, 92, -39, 45, -37, 62, -43, 34, 114, -14, 24, -25, 126, -92, -8, 6, 0, -59, 34, 26, 18, -3, -53, 24, -36, -125, -75, -21, -36, -37, 75, -124, -50, -48, -117, -29, 38, -10, 117, -84, 82, -126, -4, -123, 9, 27, -91, -81, -21, -126, 50, -29, 47, 51, 44, 51, -17, 125, -39, -56, 49, 44, 127, -14, 101, -46, -3, -21, -52, -2, 4, -35, 65, 25, 33, -47, 89, -36, 34, 72, 70, 43, -72, -38, 90, 54, 121, 13, 63, -18, 45, -41, 95, 23, -4, 82, 14, 37, -10, 86, 47, 46, -13, 15, -35, -123, -58, -7, 102, -79, 40, 13, -6, -42, 75, -127, -109, 20, 61, 20, -74, -113, -28, 96, -97, -67, -41, -28, 118, 15, -10, 41, 26, 17, -84, 34, 125, 7, 61, -126, -104, -124, 125, -109, -1, 50, -44, 40, 62, -118, 86, -50, -45, -58, 9, -126, -94, 26, -45, -28, -77, 11, -54, -38, 70, -74, -49, 39, -127, -21, -98, 39, 113, -109, -123, -69, 47, -73, -111, -59, 1, 3, -43, 25, 115, 102, 5, -83, -72, 122, 84, -126, -42, -51, -13, 17, 19, -106, -56, 38, -40, -75, -20, 56, -7, 32, 58, 57, 39, -118, -23, -123, -82, 66, -40, -115, -84, 29, 120, 28, 6, 12, -66, 15, 58, -77, -26, -71, 80, 120, 38, -13, 92, -113, 23, 61, -122, -39, -5, -114, -30, -11, 0, 43, 19, -122, 111, 73, 0, -51, 49, -36, -25, 101, -41, -45, -33, -91, -52, 52, 65, 37, -78, 93, 78, -73, 9, -9, 9, -79, -35, 25, 16, -29, -36, 9, -16, -40, 33, 118, 7, 36, -19, 43, -46, -123, -49, 18, -95, 101, 29, -35, -17, -7, 60, 20, -75, -25, -35, -17, -117, -106, -30, -98, -40, 68, 35, -15, 14, -101, -36, -83, 2, 20, 53, 126, 8, 74, 63, -57, -20, -13, 33, -9, -90, -75, -2, -105, 86, 37, -48, 14, -40, -20, 5, -127, -12, -30, -53, -14, 39, 93, -24, 0, -20, 66, 42, 7, -39, 68, 80, 25, 81, 4, 28, -22, -41, 56, 51, -39, 2, 28, 45, -3, 62, 92, 19, 73, 43, 45, 61, -53, 102, -35, -34, 47, -85, -29, -12, 46, -31, -89, 47, -25, 120, -8, 30, 63, -27, 56, -67, -10, 71, 30, -21, 88, 86, -72, 23, 16, -46, 126, 116, 45, -53, 15, 90, 20, 10, -47, -35, 61, 28, -68, 121, 108, -24, -8, -97, -13, -124, -27, -21, -104, -22, -61, -118, -124, -41, -3, -86, -31, -15, 71, -1, -42, -2, 45, 40, -33, -115, -38, -33, -36, -4, 34, 74, 98, -8, 107, -49, 11, 121, -29, -49, -15, -37, 43, -80, -31, 19, 15, 18, -71, 78, -108, -87, 34, -4, -30, -98, 124, -115, -18, -116, 35, 10, -125 }; static const rnn_weight noise_gru_bias[144] = { 51, 32, 88, 60, -64, 92, 5, -36, -49, 95, 102, -20, -1, 14, 8, 21, -36, -68, 62, 46, 10, -60, -103, -16, -30, -42, -43, 35, -4, 23, 97, 46, -29, -16, 71, 52, -20, -23, 91, 16, 69, -13, -23, 73, -17, 13, 30, 23, 1, -27, 53, -24, -71, 45, 42, -49, 28, -16, -20, 61, 40, -104, 54, -5, 31, 10, -51, -37, -6, -85, 9, 51, 16, 2, -26, 56, -39, -5, -27, -13, -49, 30, 4, -64, -41, 45, -23, 14, -19, -10, -55, -61, -35, 46, -31, -12, -93, -28, 11, -6, -46, -12, 1, 15, -37, -107, -50, 3, 54, -26, -86, 14, 66, -54, -38, -70, -1, 69, 46, -12, -128, -55, 0, 17, 48, -64, -24, 9, -67, -107, -101, -43, -4, 80, -52, -90, -23, -64, 31, 86, -50, 2, -38, 7 }; static const GRULayer noise_gru = { noise_gru_bias, noise_gru_weights, noise_gru_recurrent_weights, 90, 48, ACTIVATION_RELU }; static const rnn_weight denoise_gru_weights[32832] = { -53, 26, -20, 28, -57, -30, -79, 58, -68, 103, 70, 4, 92, 14, -71, -3, 26, 54, -9, -86, -8, 49, -60, 121, -98, -4, 103, -38, -89, 28, 85, 30, 33, -45, 42, 53, -37, -116, 72, -44, 24, 1, 17, -26, -7, 9, 5, -71, -97, -86, -118, -59, -27, -51, 26, 14, -89, -63, 76, -16, -5, 11, 86, 121, 67, 5, -20, -44, -43, -7, 18, 25, -41, 14, 11, 24, -5, -58, 15, 10, 89, 41, -100, 42, 41, 89, -89, 30, -16, -35, -29, -119, -45, -1, -104, 24, 9, 46, 21, 122, -5, -29, -64, 19, 72, -60, 79, -52, -15, -37, 15, 38, -13, -9, 28, 56, -12, 121, 23, -104, -81, -7, -94, 17, 124, 49, 108, -41, 118, -33, -106, 42, -27, 50, 57, -24, 26, -107, 15, -103, -23, -13, -7, 23, -40, -113, 14, -36, -59, 25, 44, 54, 37, 40, -10, 59, 29, -16, -49, 18, 4, -27, 15, 15, 37, 29, 50, -61, 28, -16, -96, 48, -102, -97, 12, -31, 43, 54, 9, -58, -42, 18, 10, 115, -16, -29, -14, -66, -38, 69, -65, 50, 7, 6, 11, 8, -53, -1, 25, 32, 77, -5, -42, 58, -43, -63, -86, -36, 18, 21, -49, 38, 72, 22, -25, 22, -16, -95, 77, 16, 55, -8, 31, -39, -117, 3, -38, -24, 27, 24, 25, -29, 21, -44, -13, -61, 6, 5, 19, -20, -11, 89, 40, -113, -86, 65, -84, -21, 20, 10, 15, 28, -56, -14, -17, 50, 90, -15, 29, -27, -54, -40, -32, -58, -59, 4, -17, 58, 3, -85, -9, 64, -38, -5, 104, -21, -30, -4, 79, -44, -55, 8, 44, 10, -58, 31, 7, 25, -49, -2, -30, -29, -118, 49, 68, 17, -34, 0, 46, -109, 28, -14, -47, 88, 13, -55, 24, 62, 44, -16, -54, -67, 40, 69, 3, -46, 1, -43, 127, -30, -78, 25, 106, 16, -30, 104, -12, 20, -58, 35, -71, -79, 18, 7, -12, -28, -49, 17, 98, -64, 25, 84, 32, 33, -36, 13, -31, 29, -9, -97, -78, 4, 16, 26, 86, 28, -29, 5, 23, -5, -112, 83, -27, 9, -47, 43, 12, -7, -11, 27, 92, -9, -14, -9, 69, 68, 32, -25, 20, -70, 40, -20, -32, 36, -94, 19, 5, 101, 11, -47, 44, 65, -40, -56, -21, -43, 72, 7, 36, 14, 1, -27, -18, -10, 18, 14, 58, -4, 12, 3, -60, -6, 68, -9, -42, 10, 40, -17, -17, 13, -16, 86, -62, -20, -22, 24, 75, 61, -5, -32, -75, 0, -41, -65, -19, -37, 21, -51, -54, -79, 3, 34, 10, 75, 91, -59, 25, 21, -5, 26, -71, 9, 27, 28, 49, -17, -12, -44, -28, -51, -8, -18, -4, -12, -45, -50, 32, 26, 65, -54, 29, 16, -80, 16, 38, -94, -27, 33, 3, 51, 17, 26, -10, -35, 18, 57, -6, 7, -9, -35, 22, 10, -9, 5, -18, 7, -3, 15, -82, -12, -18, 51, 6, 21, -29, 58, 14, -16, 6, 29, -35, 59, 10, 32, 54, -11, 25, -27, -13, 33, -19, 11, -83, 61, 37, 42, 20, 21, 13, 57, 40, -1, 8, 6, -8, 22, 57, -18, -1, -7, 29, -40, -17, 50, 8, -4, -4, 32, 26, 35, -60, -35, -36, -17, -66, -63, 2, -124, 8, 26, 17, 31, -84, -12, 15, 49, 6, 39, 33, 28, 20, -48, 42, 8, -5, -6, 26, -33, 12, 42, 91, 25, 5, -91, -27, 23, 6, -63, -119, -99, -38, -32, -97, -31, 15, -28, -18, -59, -24, -7, -2, -7, -119, -34, -121, -121, 26, 74, -85, -7, -22, -26, -43, 2, -32, 34, 51, -82, -92, 14, 80, 19, -2, -39, -81, -22, 48, -39, -21, -46, -49, -19, -68, -111, 80, -45, -49, -86, 23, -2, -55, -9, 2, 1, -55, -32, -32, 18, -104, 88, 1, 25, -48, -100, 9, -89, 9, -8, 70, 43, -122, 90, 45, -60, -48, -22, -47, -100, 48, 22, 6, 26, -16, 18, -37, 5, -102, -6, 3, -55, -87, -117, -33, -106, -63, -21, 10, 74, 16, -19, -14, -60, 15, -38, 90, -58, -14, -2, -58, -45, 50, 30, -72, -26, 94, -108, -79, -4, 53, 63, -80, 45, 20, 35, 73, -9, -5, -83, 46, -6, -68, 0, 0, -127, -17, -69, 25, -91, -75, 3, -62, -31, -47, 16, 35, -39, 20, -22, -63, -17, -3, -72, 48, 15, 74, -33, -86, -63, -67, -44, -15, -32, -42, -34, 37, 9, 18, -41, 19, -8, 27, 41, -81, -120, -113, 7, 83, -16, 17, -17, 22, -28, -73, -54, 1, 11, 3, 33, 33, 16, 6, -20, -64, 11, 2, -14, -69, -36, -42, -13, -115, -16, -27, 9, 26, 7, -58, 6, -55, 52, 23, -20, 74, -61, -13, -31, -63, 68, -7, -20, 64, 0, 17, -10, 24, 15, 47, 16, -23, -1, 9, -4, -69, 14, -6, -7, 3, 9, -20, -29, -41, 64, 23, -21, -1, 41, 48, -46, 11, -22, -2, -7, -54, -86, -44, -44, 8, 31, -47, -25, 33, 95, -35, -125, -8, -3, 52, 19, 9, -27, 62, 32, -11, -7, -60, -13, 110, -28, 118, -11, 45, 5, -2, 22, 22, -61, 6, -72, -42, -12, 0, -17, 13, -91, -29, -50, -54, -126, -60, 119, 25, 24, 51, -32, -15, 77, 14, 34, -33, -53, -53, 56, -72, -27, 57, -11, -61, 32, 3, -18, -54, 19, 70, 34, 17, -68, -65, -2, 48, 18, 10, -72, 88, -15, -63, -38, 2, -20, -4, 42, -88, 96, 60, 79, 6, 77, 127, 9, 22, 21, -26, -55, -33, -69, 39, -62, 33, 5, -29, -40, 29, -51, 7, 18, 37, -14, 88, -25, 52, -6, 17, -104, -10, -68, -42, -116, 83, 81, -74, -9, -127, -55, -79, 26, -59, 37, -27, 20, 36, -46, -67, 51, 10, -19, 101, -28, 53, -62, 10, -6, -15, -13, 5, 9, -61, -123, -33, 30, -39, -48, 11, -126, 59, 21, -3, -121, 27, 46, 13, -59, -3, -122, 37, -120, 9, -43, -33, 24, -33, -42, 9, -34, 68, 16, 6, -1, -49, -105, -9, -13, 41, -46, 78, 7, -55, -38, 82, -26, 9, 24, 43, -18, -91, -56, -34, 30, 28, 16, 4, -2, -120, -42, -125, -16, 45, -29, 42, -25, -1, -43, -12, 4, 39, 16, -17, -12, 10, -37, -5, 8, 16, -12, -14, -18, 19, 0, -30, -24, -101, 2, -30, -6, -6, 3, -40, 0, 13, 52, -31, 27, -56, 63, 35, 32, -64, 29, 34, -41, 47, -24, 13, 52, -26, 29, -2, -30, 25, -44, 36, 93, -54, 3, -3, -17, 15, 5, 72, -61, 48, -5, 63, -34, -26, -48, 2, -28, 69, -10, 42, 50, -89, -123, 12, -8, -10, 50, -8, -30, -50, -40, 13, -26, -41, -8, -23, -9, 61, -117, 29, 50, -20, 20, 31, 45, -82, 59, 12, -96, 8, 8, -49, 28, -33, 14, -31, 9, -44, -60, 49, 98, -4, -19, 16, 3, 75, 31, -55, -75, 114, -12, -113, 3, -116, 80, -12, 19, 9, 74, -28, -109, 9, 21, 27, -15, 12, -37, 23, 81, 103, -19, -40, -113, -42, -121, -104, 36, -29, -70, -38, -75, 73, 16, 0, 30, -10, -82, -35, 82, 112, -19, 43, 41, -65, 29, -65, 7, -82, -14, -36, -32, -19, 76, 9, 71, -61, 79, 71, 8, -82, -31, 35, -33, 41, -46, 17, 23, 28, 33, 86, -21, 66, 65, 68, -55, 37, -50, -92, -17, -8, -39, -90, -47, 81, -7, 57, -71, -2, 0, -18, -17, -18, -117, -47, 60, -3, 19, -115, -17, -37, -64, -7, -37, -36, -100, 2, 122, -68, 7, -29, -46, -4, -67, 63, 44, -9, 40, -94, -123, -6, -126, 2, -84, 31, -46, -23, 51, -37, 31, -27, -64, -60, -16, -125, -38, 29, -80, 5, 54, 10, 96, 46, -1, -34, 6, -37, -69, 17, -32, 31, 49, -31, -42, -120, -54, -6, -7, 43, -50, -15, 66, -124, 4, 21, 10, -8, 31, 11, -35, -8, 81, 26, 9, -14, -44, -87, -66, 9, -82, -45, -39, -3, -17, -21, 61, 17, -4, -4, 15, 40, -23, 1, -44, -30, -24, -51, -56, -21, 19, -45, -24, -22, 37, -50, -3, -6, -17, -19, -54, -65, -51, -17, 15, 40, 19, -26, -61, -26, 0, 8, -17, -26, 8, -5, 3, 22, -16, 7, -54, -25, -15, 18, 47, -31, 6, -34, -22, -25, -16, 31, -8, 49, -38, -33, 30, -39, 21, 4, -26, -36, -48, -28, 24, 0, 32, 38, -21, 97, -10, 45, 10, -31, -32, -39, -57, -52, 6, 11, 5, 7, -13, 25, 0, 54, 14, -32, -4, 59, 17, -30, -10, 23, 21, 29, 8, -48, 39, 56, 18, -18, 10, 26, -16, 90, 8, 19, -55, -36, 49, -28, 39, -28, -127, 123, 11, 8, 83, 4, 26, -67, 21, 31, -43, -33, 25, -32, 92, 44, 9, 19, 108, 39, 53, -15, 94, 13, 28, 36, 38, 28, -6, -13, 14, -99, -17, -17, 2, -15, -3, 10, 19, 56, -15, 124, 21, 39, -23, 3, 61, 59, -29, 48, -2, -1, 51, -11, 41, -42, 76, -108, -50, -15, -43, 37, -38, 61, -47, -42, -62, 3, -6, -66, 18, -48, -25, 19, 66, 1, 78, -26, -127, 26, 0, 10, 21, -25, -12, 3, 11, 126, -126, 1, 3, 17, 123, -9, -29, 96, 125, -2, 32, 21, 24, 52, 8, 42, -53, 42, -12, -18, 23, -11, -125, 43, 47, 40, -68, 3, -5, -14, -43, -49, 23, -34, 35, 35, -33, 58, -126, 26, 42, 34, 8, -39, 20, 72, -2, -61, -26, 32, 1, 31, 36, -107, 19, -6, -128, -41, -65, 15, 21, 36, 6, 74, 27, 29, 6, -71, 46, -30, 37, 33, 43, 105, 31, -26, -59, -19, 20, 37, 30, -71, -9, 92, 1, -21, -11, 50, 81, 22, 62, 61, 23, -64, 77, -22, -31, -2, 1, 17, 9, -7, 31, 20, 17, -12, 36, 42, 0, 71, 7, -52, -101, 1, 2, 7, 45, 38, -103, -24, 32, 4, 61, 60, 36, -33, 40, 60, 79, 15, -85, 74, -71, 26, -11, 46, 8, 40, 53, 26, 62, 19, -5, 39, 68, -57, -59, 67, 18, -20, -1, -45, 9, 41, -33, -5, 46, 12, 14, 3, -10, -12, 42, -18, 118, 65, -32, -2, -12, 112, -36, 18, -43, 38, 6, -41, -22, 20, -31, -5, -25, -31, -54, -35, -10, -5, -8, -44, -124, -122, 37, -113, -24, -29, -18, -7, -69, 63, 3, 33, 50, -47, 114, 6, -15, 37, -38, 21, 23, -37, -44, -24, 48, 104, 47, -8, -80, 37, -28, 76, 4, 3, 36, 19, 16, -45, -59, -17, 16, 5, -18, -36, -26, -125, -24, 12, 29, -34, -6, -76, 31, 50, -33, -38, 12, -14, -63, 24, 29, 116, 5, 26, 23, 31, -8, 91, 17, 0, 2, 125, -90, 33, 8, -67, -99, -41, -64, -73, -15, -23, 7, 7, 10, -97, -127, -14, -77, -127, -40, -45, -23, -12, 14, -3, -7, 12, 0, -2, -80, -38, 22, -100, -60, -121, -11, -1, 119, -2, 40, -20, -125, 63, 10, -32, -110, -15, -103, -7, -7, 87, -32, -7, -35, -33, -33, -54, -1, -12, -43, 15, 6, 12, 48, -1, -14, -100, -20, 95, 31, 41, -50, 18, -36, -9, 16, -10, -6, -28, -17, -55, -79, -9, -3, 46, 29, -31, 44, -84, -23, -37, -40, 18, -8, 21, -33, 30, -44, -14, -13, -7, -4, -116, -19, 45, -60, 2, 26, 13, -4, -4, -6, -15, 20, -122, 26, -38, -46, 4, -101, -124, -12, 0, 46, 5, -20, -10, 35, -49, -46, -42, 19, 6, -21, -127, 108, -4, -7, -20, -25, 15, 67, -38, 12, 27, -28, 21, -19, -11, 18, 5, -3, -23, 17, 32, -10, -25, 19, -90, 27, -6, 9, -24, 19, -123, -17, 50, -85, -16, -98, -8, -9, 27, 1, -24, -37, -27, -28, 5, -26, 26, -12, 1, 14, -16, -2, -12, 31, 0, -36, -9, 19, 13, -1, 9, 9, -16, -51, -15, -34, -61, -3, -15, -30, -17, 2, -8, 30, -39, -27, 23, 46, 17, -9, -29, 56, -91, -91, -58, 23, -15, 19, -6, -30, -10, -31, -34, -14, -41, -30, -78, 12, 16, 51, -7, -38, 0, -19, -16, -54, 4, 3, -1, -16, 17, 3, 7, -20, -14, -38, 30, -23, 27, 12, 84, 60, 19, -16, -55, -15, 5, 32, 33, 1, -15, -3, -35, -121, 52, 75, 31, 30, 0, -20, -26, 32, 38, -14, 33, 81, -17, -4, -16, -84, -37, -29, 7, -14, 5, -30, -52, 27, 29, -119, -48, 0, -101, -28, -11, -69, -56, -34, 48, 85, 22, 35, -18, -90, 53, 10, 8, 13, -60, 52, -54, 10, 99, -95, 32, -60, 0, 124, -19, -1, 4, 65, -48, -2, -18, -28, 0, -58, 43, -63, 40, -73, 0, 32, -26, -36, -25, 16, -37, 7, -70, -50, 41, 0, -18, 10, 21, -10, 24, 35, -35, -38, 48, 16, 26, -33, 94, 3, 27, -22, -17, 69, 19, 21, -57, 78, -5, 8, 17, 5, 3, -39, -4, 19, -26, 14, 7, -1, 2, -31, -22, -8, -2, -9, -48, -51, 71, 10, 20, 21, -1, 11, 26, 13, 1, -20, 60, 18, -38, -9, -30, 30, -20, -30, 45, -39, 21, -6, 18, -16, 5, 42, -41, 58, 41, 9, 7, 38, 11, 41, 21, 35, -53, -49, -43, -3, -30, 38, 1, -5, -34, -52, -10, 22, -11, -20, 22, 13, -54, 20, -19, 19, -24, -38, 24, -6, 67, 92, -6, 46, 60, -25, 5, -68, 0, -36, 6, 14, -33, -40, -33, 38, -26, 1, 20, -23, -54, -13, 4, 25, -30, -7, -51, 14, -37, -53, -11, -7, 5, 10, 7, 0, -29, 8, -27, 1, -14, -37, 60, -7, -41, -29, -31, -13, 22, -13, 52, 8, 65, 48, -10, -74, 5, -4, 31, 30, -25, -9, -13, 24, -12, -22, 64, 13, 18, 28, -22, 46, -8, 39, -48, -14, -17, -6, -40, 16, -5, -29, -2, -46, -47, -25, -19, 52, -1, -22, 21, -66, -5, 29, -3, -28, 17, 21, 18, 11, 67, -26, 31, -8, -1, 36, 46, -9, 14, 39, 18, 9, 23, 38, 56, -25, 46, 70, -22, -11, -19, 7, -11, 49, -4, -25, -55, -43, -28, 66, 79, 16, 2, 17, -19, 20, -20, -2, -26, 41, 27, 19, -11, 67, 33, -49, 69, 16, 0, -5, 3, 47, -2, -48, 56, -77, -22, -3, 21, 84, 67, -17, 10, 21, 19, 23, -4, 7, -45, 40, -21, -64, 19, -23, -15, 68, -9, 7, -3, 38, 14, 12, -73, -6, -28, 36, 15, 20, 15, 28, 40, 42, 100, 47, 37, -43, -31, -80, 39, 12, 20, -14, 19, 17, -117, 24, -36, 16, 34, 31, -22, -48, 4, 4, 27, 33, 39, 38, -12, 34, 13, 37, -9, 40, -23, -11, 75, -6, -14, -30, -61, 20, 20, -38, -16, -6, 34, -14, -2, 4, 11, 9, -1, -17, -24, -112, 59, 20, 25, -17, -10, 9, -18, 11, -7, 16, -3, 17, 2, 66, 38, 12, 9, 3, -17, -10, 35, 22, -38, -23, 40, 19, -51, -32, 18, 17, 2, 21, 10, 16, -16, 0, 13, 6, -8, 28, 47, -6, -25, 43, 17, -4, -13, -94, -1, 18, 24, -1, 14, 15, 3, 1, 41, 36, 1, -16, -10, -50, 27, -50, 18, 16, -6, 6, -14, 38, -49, 73, 9, 57, 31, -41, 58, -45, -11, 20, 15, -61, 27, 4, -3, 8, 56, -101, 29, 21, 27, 8, 73, 31, -16, -87, -17, -87, 4, -22, -45, 59, 3, 7, 12, 13, 0, 17, 23, 94, -50, 3, -29, 55, -124, -10, -32, 41, -38, 25, 2, 18, 34, 31, 34, 15, -82, 61, -13, 32, -17, 20, -5, -19, 24, 14, 53, 38, 72, 41, -47, 24, 43, 7, 82, -7, -7, 38, -1, -28, 13, -7, 8, -7, 16, -26, 9, 12, 17, -48, -23, 33, 64, -8, 0, 71, -37, 67, -85, 20, 19, 25, 18, 15, -6, -34, 97, 17, 8, 30, 11, -23, -12, 41, 6, 62, 21, 4, 18, -31, 71, -70, 9, 2, -32, 21, -11, 44, 47, -11, -34, -5, 3, -5, 11, 33, 59, 6, 6, 12, 49, 6, 43, 33, 3, -26, 34, 53, -11, -29, -1, -10, 39, 82, 116, -25, -38, 28, -18, 26, -59, -47, 21, 6, -31, 44, -81, -72, 38, -104, 39, 98, 4, -68, -4, -36, -49, -19, -18, -52, 37, 5, -56, -44, 21, -5, 69, 42, 10, -26, -45, 28, -6, -22, -37, 39, 44, 5, -29, 54, -1, 90, -81, 118, -54, 20, 28, 7, 77, 0, 34, -2, -25, 60, -64, 8, -49, -31, -46, -26, -18, 12, 4, 22, 5, 42, -6, 6, 59, 34, 11, 10, -62, 14, 4, -11, -15, -47, -1, -15, -34, 38, 26, -33, -18, -12, 2, 6, 9, -15, 43, 13, 35, 25, -53, 9, 10, 47, -27, 85, -25, 12, -12, 5, 12, -125, 12, -89, -4, 55, 20, 17, 48, 22, -45, -7, 5, 65, 22, 13, 2, 22, 38, 12, 35, -17, 32, -40, -49, -10, -100, -97, 13, 17, -29, -24, 32, -77, -4, -81, -83, 49, -99, 41, -34, -58, -10, -69, -2, 33, -120, -81, -36, -31, -78, -27, 83, 15, -49, -51, -19, 83, 29, -63, 25, -15, -84, 21, 30, -88, 45, -11, -44, -73, -86, 22, 11, -126, 66, -41, 16, -5, -59, 37, 62, -29, -5, -128, 116, 102, -44, -30, -43, -73, -121, 86, -39, -14, -127, -7, 63, -24, 12, -47, 4, 24, -58, 31, -33, -34, -98, 90, 119, -56, 4, -16, -42, -35, 48, -24, -85, 12, 73, -48, 52, -22, -109, -26, -29, 31, 105, -5, -39, -60, -81, 24, -114, 46, -51, 56, -5, -96, 58, 97, -26, 0, 84, 51, -85, -39, -20, -10, -11, -6, -55, -47, -65, -50, -63, 77, -54, 3, 41, -127, 44, -63, 61, 17, -44, 29, -22, 1, 2, -83, 36, -43, -7, -30, -19, -37, 28, 7, -63, -73, 81, 51, -37, -13, 18, -123, -7, 33, 75, 43, 85, 40, -56, 10, 91, -45, 7, -60, 14, -26, -13, -118, -33, 38, -27, 63, 7, 36, -30, -52, -115, 113, -42, 39, 3, 3, 26, 53, -109, -103, -23, 1, 121, 36, 60, -62, -124, 39, -60, -16, -22, -12, -86, -13, 27, -9, -3, -22, 60, 9, -16, 100, 51, -33, -34, -57, -9, -29, -1, -29, -42, 2, -19, -11, -1, -8, 93, -46, -43, -42, 9, 9, 15, -23, -11, 14, -20, -73, -59, 17, 7, -26, -57, -6, 54, -43, -70, 82, -12, -1, -99, 25, 4, -24, 5, 34, 39, 17, -89, 10, 32, -93, 18, -9, -20, 8, 41, -37, -25, -19, 8, 28, -72, 60, 66, -80, -52, -4, -19, 14, -25, -16, -49, 15, -91, 84, 34, 47, -123, 44, 18, 20, -77, 0, 9, -66, 20, -28, 13, -99, 24, 48, -1, 32, -42, 33, 47, 20, 85, 71, 57, -27, -53, -73, 60, 119, -81, -51, 4, 38, 38, -1, 5, 25, 38, 36, 92, 125, 122, 29, -89, -109, 65, 53, -17, 39, 121, -19, 71, -3, -97, 29, 55, 102, 8, -53, 101, 40, 78, -56, -77, 29, 81, 60, 117, -4, -45, -3, 100, 87, -122, -12, -80, 100, -116, -18, 33, 121, 112, 21, 35, 5, 47, -51, 10, 46, -95, -42, -28, 78, -39, -32, -114, -3, -53, -104, -94, -1, -50, 27, -38, 20, -30, -59, 111, -63, 21, -18, -31, 11, 17, 46, 21, 30, -22, 59, 13, 62, -17, 42, -75, -42, 23, 30, 33, -39, -49, -110, -46, 56, 21, 23, 24, -80, -16, -69, 11, 80, -42, -27, -44, -46, 16, -24, -7, 35, 61, 43, 16, 24, 9, 43, 28, -88, 53, 26, -80, -128, 73, -34, -44, 10, 38, -114, 80, 2, 72, -1, 56, -52, 79, 9, -40, -103, -35, 2, -40, 0, 49, -54, 110, 8, 3, -8, 17, -38, 38, -52, 45, -4, -22, -82, 28, 79, 18, -56, -45, -13, -57, -7, 14, -16, 8, -10, 44, -58, 22, 120, -30, 10, 22, -14, -104, 58, 7, 28, -30, 15, 7, -19, 39, 90, 51, 39, -128, 46, -34, -55, -37, -65, -2, 29, 79, 63, 39, -38, -63, -30, 14, 4, 30, 74, 62, 17, -21, 40, 107, -62, 18, -85, 60, 2, -12, -67, 36, -65, -67, 23, 25, 14, -22, 12, 68, 10, 59, 28, 53, -16, 34, -116, -15, 12, 66, 76, 111, -33, -58, -7, 21, -11, -50, 94, -55, -49, -102, 9, -3, 17, -5, 83, 22, 29, 73, -17, 22, 1, -37, -90, 17, 14, -22, -39, 46, 13, 2, 77, 36, -25, 66, 17, 17, 25, 11, 9, 25, 15, 51, -24, 2, -53, -9, 24, 26, 14, -18, -2, 15, -34, 35, -15, 59, -36, -10, -7, -26, -123, -10, -10, 69, -33, 5, 22, 3, 40, 0, 89, 29, 28, -37, -32, 23, -14, -25, -11, -22, 18, 36, 62, 21, -61, 26, 15, -68, 73, 59, -34, 1, 21, 17, 124, -16, 40, 7, -31, -43, 80, -5, -14, -3, 27, -42, -70, -31, -54, -25, 46, 112, -35, 35, -32, -73, -33, 69, -13, 40, -2, 7, -17, 60, -3, -32, 41, 25, 108, 7, -41, 55, -76, -27, -4, -7, -19, 33, -2, 30, 17, -3, 43, 21, 9, 33, -36, 15, -29, 46, -36, -15, 81, 27, -14, 9, 10, 42, -6, -22, -49, 43, 5, 12, 10, 115, -13, 63, 43, 37, 50, 5, 7, -60, -7, 15, 0, 7, -48, -8, 51, -61, -11, -12, 110, 83, -17, 6, -5, 19, 35, 41, -16, -5, -74, -8, -22, -30, 17, -28, -19, 39, -15, 6, -32, -44, -26, -38, -54, -22, -7, -55, 4, -33, -11, -3, 8, 14, -4, -8, 21, 6, -77, 27, 13, -5, -5, 43, 55, 19, 3, -18, 10, -17, -6, 39, 20, -5, -28, 25, -33, 16, 7, 10, -43, -3, -7, 38, -26, 14, 18, 26, 27, -17, -28, -16, -24, -13, 6, 4, 12, -4, 20, -13, -2, -23, 79, -6, -3, -8, -14, -47, 41, -18, 27, 27, -3, -49, -21, -1, -32, 25, 15, -32, -25, -1, -121, -24, -11, 23, -7, -12, 15, -48, 20, -14, 2, -27, -26, 24, -16, 65, -17, 26, 72, -33, 9, -63, -63, -8, -63, -68, -22, 40, 6, 68, 24, 20, -44, 45, -15, -27, 4, 8, -37, 2, -1, 16, 16, -17, -2, 16, 93, -19, 89, -2, 65, 27, -6, 21, 44, 122, 45, 3, -2, 24, 44, 42, -30, 6, -18, 27, -21, -8, 24, -14, 54, 6, 21, 56, 13, 55, 25, 32, 41, 62, -100, -37, 14, 15, 50, -23, -22, 119, 10, 18, 61, 39, 45, 48, 110, 23, 73, -31, -19, -16, 5, 72, 41, -23, -47, 38, -14, 8, 53, -7, 8, 41, -5, 65, 39, -12, 31, 34, -10, -15, 4, 21, -42, -39, -23, 112, -35, 93, -28, -11, -37, 40, 49, 54, -29, -39, 93, -11, 32, 48, -1, -5, 93, 80, 0, 1, -37, 5, -17, 20, 16, 11, 13, 19, -10, -41, -29, -19, 10, 44, -48, 62, 4, -37, -13, -6, -28, 28, -42, 22, -14, -37, -18, 2, 19, 3, -50, -12, -16, -6, -7, 45, -43, -34, -88, -29, -95, 11, 33, -31, -10, -53, -13, -7, -19, 30, -24, 10, 17, -5, 6, -22, 36, 45, -1, -46, 10, 19, 8, 5, -65, 4, 27, 3, 11, -37, -45, 15, -3, -39, 24, 7, 35, 14, -35, -8, -14, -18, 49, 7, -37, -4, -14, 10, -2, -9, 4, 35, -6, -19, 17, 12, 23, 39, 22, 24, -63, -25, 1, 21, 38, 24, 7, 13, 6, 10, -9, 29, -19, 8, 45, 14, -21, 12, -22, -26, 2, 20, 60, 29, 67, -115, 8, -2, -32, 8, 42, -13, -10, 5, 19, 0, -34, 2, 6, 42, 5, 33, -63, 13, 27, -19, 23, 23, 16, -38, -11, 21, 116, 3, -53, -96, -88, 119, 56, -82, 4, -14, 4, 21, -3, -17, 103, 5, 38, 37, -33, 73, -1, -12, 7, -53, -19, -12, -41, 32, 18, -26, 65, -24, -113, 91, -35, 23, 47, -41, 51, -40, -48, 93, 22, -51, 13, 51, -49, -37, -14, 19, 37, 22, -48, -55, 15, 72, -12, 30, -20, 51, -15, 56, 69, 30, -39, -37, 79, 101, 10, 3, 18, 40, 21, 3, -14, -26, 4, 30, -18, -2, -20, -24, -19, 53, 43, 34, -26, 44, 13, -24, -56, 122, 13, -1, 96, -58, -40, -24, 10, -85, -127, 26, -57, 35, -5, -4, 0, -75, -33, 19, 66, 26, -38, -89, -40, -7, 8, -25, 85, -48, 17, 44, -21, 54, -59, 37, -39, 57, 101, 64, 12, 39, 35, -7, -91, -22, -21, 125, -20, 55, -105, -26, -22, -17, 48, 124, -38, -17, 15, -14, 41, -42, -25, -35, -9, -34, -50, -19, 62, 15, -8, -16, 58, 58, 103, -38, 2, -51, -53, 45, -37, 32, 30, -33, 51, 82, -51, 1, 4, 65, -19, -12, 45, -71, -8, 40, -19, -6, -14, 15, 29, -5, 25, 3, 3, -39, -18, -42, 21, 32, 17, -10, 21, 32, 32, -7, -27, 13, -35, 68, 18, -3, -37, 36, -67, -13, 5, -18, -15, 34, 6, -54, -25, 65, 55, -9, -1, 8, 22, -69, 26, 16, 42, 9, -23, -3, -102, -46, -33, -19, -13, 49, -29, 23, -9, 12, 13, 15, 30, -12, 30, -4, -5, -1, 12, 27, -40, -19, -42, 29, 18, -2, 29, 29, -73, -6, -31, -1, 23, -10, -31, 40, 14, -4, 0, -80, 5, -66, -9, -7, -13, 81, -8, 59, 48, -56, 7, 22, 71, -13, 24, 27, -28, 31, -69, 40, 52, 37, 73, 33, -38, -76, -31, 26, 23, 29, 13, 91, -88, 95, -14, 3, 31, 85, -22, 25, 59, -82, 31, -93, -2, 67, -9, -19, -6, -119, 23, -15, 70, -7, 31, -23, 98, 33, -6, -20, 33, -31, -27, 47, -107, -76, -51, -8, -108, 4, 1, -50, -35, 62, 9, -8, 122, 28, 12, 45, 56, 49, -3, 14, -80, 34, 64, -11, 40, 24, 49, -34, -32, 22, -17, 20, -28, 7, 43, -24, 1, -71, -21, 12, 45, -8, -34, 5, 6, -57, 93, 21, 40, 42, 19, -6, 51, 23, 12, -106, 13, 25, -9, 21, 26, 75, -58, 95, 21, 15, -48, -11, 63, 61, 19, 37, -80, -1, 82, 46, 78, 47, -65, -7, 9, 34, 50, 2, 25, 25, 17, 63, -58, -14, -8, 32, 17, -47, 19, 0, 22, -50, 10, -55, 8, -19, 27, -22, -9, -9, 3, -66, 47, 111, 91, -54, -21, -41, 24, -9, -4, 87, 11, -22, 75, -59, 8, -14, 39, 71, -31, -9, -5, -113, -58, 36, -6, 15, 10, -38, 2, -39, 23, 12, 58, 24, -15, -50, 3, 9, 24, -3, 8, 22, 7, -16, 22, 33, -7, -26, -29, 23, 44, 3, 47, -60, -97, 33, -17, 36, 57, 50, 21, -2, -15, 66, 82, 61, 22, 16, 5, 110, 20, 35, 13, 2, -27, 18, -82, -40, 46, 23, -6, 4, 40, 45, 3, -34, 19, 46, -10, 47, 22, -5, 3, 15, 29, 9, 30, -43, 9, -73, 20, -16, -11, 7, 43, 44, -1, 49, -12, -27, -16, 79, 24, 24, 37, -10, 41, 31, -93, 46, 20, 18, 33, 19, -103, 36, 41, 54, -10, 50, -5, 74, -17, -43, -14, -48, -60, 54, 3, -25, 28, 41, -53, -30, 19, 36, 15, -1, 8, -36, -37, 28, 35, 13, -33, 9, 26, 1, 4, -22, -35, -19, 48, -8, 15, -23, -44, 35, -70, -34, -37, -35, -15, -19, 15, 17, -31, -58, 69, 11, -29, -55, 21, -39, 1, 17, 0, 46, 69, 25, 60, 26, -46, 49, -99, -71, 49, -2, -24, -25, -37, -1, -95, 44, -15, -49, 49, -3, 31, 36, 4, 67, -16, -17, -45, -21, 5, 7, -5, -10, 37, -28, 71, 1, -53, -10, -1, 20, -18, -39, 8, -29, 9, -31, -10, -4, -15, 17, 19, 46, -83, 57, -71, 97, 119, 1, -45, 6, 79, 40, 7, 44, -126, -19, -40, 23, 74, 54, -3, 14, 62, 74, -32, -19, 34, -5, -106, 12, -13, 46, -32, 40, 96, -8, -40, -35, 20, -7, 55, -18, -41, -28, 1, -36, -42, -71, -20, 1, 19, -72, -52, -18, 0, 3, -73, 8, 18, 7, -18, 54, 21, -12, 13, -14, -62, 4, -38, 52, -30, -40, -6, 48, 29, 30, 25, 44, -48, -6, -24, 23, -42, -3, -20, -50, -5, -31, -13, -14, 32, -11, 16, 46, 10, -81, -30, 3, -22, 24, 0, 28, 54, 25, -78, 60, 22, -12, 4, -4, -47, -1, 4, -19, 33, 60, 27, 17, 16, -14, -88, 27, -87, 20, -31, -3, -30, -12, 6, 6, 77, 13, -10, 7, -7, -5, -62, 22, 6, 39, 26, 25, 30, -3, -7, 11, 6, -65, -26, -44, 30, 94, -68, 21, 48, 19, -14, 32, 32, -6, 36, -7, 17, -42, -2, -2, 13, 18, 71, 1, 8, -9, 23, -20, 16, 54, -47, 73, 38, 17, -11, -83, 91, -11, 14, 79, 93, -65, 114, -10, 21, 13, 8, -20, -23, -14, 45, 48, 23, 1, 2, -15, -18, 39, 56, 4, 63, 13, 21, 86, -33, 30, 12, -31, 92, -88, 50, -4, 14, 7, 48, 23, 70, 123, -5, 42, 2, 16, -19, 127, -16, 95, -26, -72, 53, 37, 5, 46, -52, 42, 17, 30, -12, 65, 28, 22, -13, 125, -9, -7, -26, 17, -9, -64, -84, 16, 8, 105, -30, 9, -58, 53, 126, 29, 39, 19, 47, 40, 14, -22, -3, 19, -53, -105, -22, 11, -15, 34, -64, -46, -18, -2, -26, -45, -22, -43, 1, -8, 15, -28, 64, 48, 59, 18, -4, -8, 31, -45, 53, -109, -10, -3, -19, -3, 18, -20, -48, 34, 77, -19, 117, -9, -43, 93, -30, -113, 11, -15, -19, -6, 17, 24, -48, 74, -29, 67, -15, 45, -38, -9, 30, -18, 22, 60, 8, 72, 10, -1, -2, -32, -52, 47, -17, -35, -3, -2, -18, 36, 50, 18, -1, -19, -115, 8, 7, 28, 45, -41, -25, -70, -6, -59, -68, -13, -76, 31, 22, 31, 7, 31, 12, 47, -19, -28, -58, 21, -37, -23, -35, 59, -35, -32, -25, -12, 2, -12, 23, 9, 39, -30, -30, -1, -37, 2, -19, 35, 18, 18, 27, -50, 24, -38, -20, 3, -11, 13, -3, -30, 67, 8, 63, 7, -10, 2, 3, 75, -7, 31, -2, -10, -10, 15, -11, 48, -37, -4, 13, 25, -12, 72, -45, -37, -7, -49, 15, -36, 17, -6, 1, -52, -3, -23, 29, 49, 18, 62, 0, 25, 27, -13, -4, 9, 6, 10, 40, 10, 46, 83, 68, 15, 9, 67, 71, -122, -15, 73, 44, -125, -44, 11, 12, -28, -56, 15, 3, 6, -7, 50, 35, -2, 125, -60, 60, 76, 55, 103, -42, 50, 19, -10, -104, -11, -1, -1, -35, 3, -34, 27, 23, 24, -45, -2, 19, -17, 56, -53, 52, 18, -53, -121, 0, -10, -65, -47, 22, 81, -58, 33, 5, -84, -9, -10, -35, -40, 47, -24, -73, 15, 49, -48, -127, -26, 11, 118, -75, -16, -69, -32, -74, -46, 127, 111, -6, 26, 25, 53, -10, -32, 33, -3, 30, 54, 84, -14, -32, -73, -76, 77, 88, -9, -15, -6, -102, -59, 39, 13, 54, -64, 10, 67, 62, 7, -18, -21, 73, 13, 53, -27, 34, 11, -81, 122, -21, 65, -27, 1, 104, 22, -96, 68, -111, 25, 4, -2, 66, 106, -21, 8, 49, 19, 10, 10, 5, -6, 45, 32, -116, -15, -68, 38, -1, -3, 13, -22, 18, -20, -10, -119, -20, -4, 64, -23, 56, 17, -28, -12, 16, 4, 45, 67, -76, -6, -60, 8, -59, -10, -65, -29, 47, -68, -38, -76, -59, -16, 90, -10, 1, -2, 72, -21, -20, -36, 50, -23, 4, -9, -14, -14, 30, 5, 6, -99, -49, -19, 16, 21, -2, 65, -15, -39, -5, 25, 4, 17, -28, -8, -4, -46, 31, 42, -17, -8, -29, -14, 45, 38, -32, -28, 24, 40, 28, -5, -22, -32, 56, -6, 11, 5, 48, 5, -57, -4, 11, -12, 32, 12, 23, 0, -10, 2, 10, -1, -17, 56, -25, 34, 12, -37, 12, -4, -38, 9, -93, 36, 28, 32, 83, 48, -48, -21, 3, -18, -69, 45, 0, 36, 9, -37, 29, -6, -16, 36, -10, -29, 16, -39, -12, 23, -14, 2, -27, 77, -39, -77, -57, 23, 40, 32, 19, -13, 0, -18, 39, 33, 26, -4, 6, 59, -121, -7, 24, 2, -53, 61, 4, 6, -4, -6, -38, 5, -12, 55, -9, -8, 2, -13, -14, -31, -18, 25, -46, 81, 26, 21, -25, -47, 37, 25, 8, -36, 19, -7, -42, 8, -19, -13, 17, 45, -3, -12, -7, 5, 11, -31, 49, 10, 34, 2, 64, -17, 75, -61, 24, -1, 5, 22, 21, 24, -46, -35, -15, 16, 14, 46, -12, -15, -60, 6, -14, -15, 48, -7, 22, -13, 33, 8, -25, -15, 0, 10, 33, 9, -36, 71, -115, 3, -29, -35, -73, -46, -68, -17, -38, -24, -11, 31, -12, -3, -52, 52, -36, -6, -54, -18, -14, 13, -54, 13, -6, -4, 25, -22, 49, 9, 1, 18, 15, -4, -16, 10, -15, -32, 15, -2, -67, 55, -63, -4, 48, -44, -14, -43, -6, -4, -5, -32, 1, 11, 23, -20, 36, 40, -28, 22, 22, -40, 2, -4, 11, -14, -7, -25, -17, 9, 41, -16, 10, 5, 10, -9, 9, 57, 25, 0, 1, -20, 8, 13, 127, -24, 17, 9, -24, -2, -6, -40, -2, -5, 4, -49, -34, -25, -5, -2, 25, -99, 11, -10, -13, -16, 8, -6, 0, -23, 21, -42, 12, -22, -55, 18, -9, -13, -17, -20, -10, 13, 23, 19, 10, 14, 5, 3, 17, -7, -4, 9, 126, 6, -29, 12, -19, -29, -38, 8, 4, 5, 22, 19, -20, 0, 98, -1, 12, -17, 12, 0, -15, 38, -25, -11, -17, -46, 48, 3, -19, 22, -89, 13, -37, 20, -26, -2, 8, 23, -13, -3, -7, 28, 21, -16, -3, -10, 12, -6, -22, 27, -14, 49, -16, 0, 54, 48, 67, -34, -37, -56, 78, -24, 55, -23, -10, 30, -33, 92, 16, -61, -1, -30, -24, 38, -66, 79, 69, 16, 27, 19, 12, 48, 31, 40, -47, -106, -118, -51, 96, 30, -12, -48, -15, 74, 117, 106, 24, 18, -39, 1, 38, 86, -28, 2, 17, 126, 22, 17, -121, -65, -9, -17, 47, 61, -7, 74, -107, 71, 68, 71, 95, 83, 127, 122, 53, -8, -2, -88, -49, -95, -23, -36, 92, 58, -33, 41, -26, -61, 43, -104, 63, 41, 41, -36, -55, -40, 36, -26, 35, -19, -27, 5, 64, 27, -40, 46, 19, -57, 48, -19, 33, 127, -86, 28, 4, 83, 82, -15, 111, -30, 47, -49, 34, 121, 30, -82, 24, 111, 73, 44, -13, 39, 79, 90, 77, 17, 13, -92, 126, -32, 50, 123, 32, -66, 55, 21, 13, 24, 106, 71, -79, -19, 83, 25, 79, 27, 68, 33, 49, -42, -50, 126, 20, 8, 15, -25, -72, 10, 126, 40, -56, 23, -6, 121, 38, 33, 104, -50, 38, -3, 123, 26, 31, 127, -67, 30, -123, -62, 27, -7, 28, -20, -39, -28, 36, -43, 44, 41, 61, 38, -17, -17, 4, 73, 49, -19, 87, 109, 92, 49, 60, 66, 38, -9, -32, 16, -13, 57, 21, -6, -53, -39, -84, 126, 79, 21, -46, -37, 56, 52, 102, 62, 36, 26, 83, 74, 77, 7, -124, -57, -22, -6, -115, 18, 46, 122, 14, 7, 0, 45, 29, 1, 57, 8, -14, 58, -17, 49, 24, -66, 28, -15, -8, 82, -71, 13, 10, 91, -46, -24, -36, 18, -9, 59, -19, 10, -60, -27, -24, 28, 3, 127, 48, -2, -57, 77, -3, -7, -11, -31, 31, -31, 78, 12, -127, -17, 15, 22, 51, -61, -59, -38, 87, 10, -23, 21, 10, 58, -58, -37, -14, -52, -4, -48, -1, 10, 0, -44, -56, -46, -15, -71, 16, 23, -2, 53, 11, -46, 2, -52, 59, -104, 24, -26, 112, 45, -55, -103, 17, -46, 0, 43, -51, 18, 16, -30, 14, 4, 50, 14, -23, 44, -40, -19, 64, -34, -8, -12, -27, -29, 88, -73, -34, 7, -32, -27, 68, -44, -2, -13, -15, 53, -13, -120, 18, -1, 56, 37, 96, 126, 17, 60, 15, -35, 74, -13, -17, -32, 37, -28, -63, 68, 6, 10, -29, 89, 57, 20, 14, -118, 67, -10, 71, 14, 73, 7, -37, -75, -27, -69, -50, 48, 5, 34, -51, -4, -66, 23, -18, 7, -17, -19, 115, -82, -22, 42, 92, -52, 17, 9, 104, 118, -16, 58, 5, -24, 33, -41, -90, -97, 4, 80, -16, -37, 14, -9, -13, 38, -1, -23, -25, 5, 13, -12, 18, -4, 35, -68, 0, 2, -30, -21, 40, 36, 28, -4, -6, -87, 90, 44, -6, -122, -36, 16, -104, 47, 60, -32, -61, 14, -107, -4, 48, -3, -60, -11, 65, 37, 16, -36, -5, 57, 1, -34, 1, -108, 14, 17, 54, -4, 33, 24, -25, -47, 3, 12, -46, 16, 5, 3, 27, 21, 54, -35, 34, -1, -30, 4, -36, -13, -8, 4, -14, -91, 88, 0, -28, 19, 28, 7, 47, -45, 53, -2, -22, 15, 32, 24, 2, 7, 3, -34, -42, 39, -7, 1, 18, 5, 63, -34, -30, 2, 64, -26, 16, -54, -96, -18, -91, -32, 20, -58, 21, 49, 14, 96, -14, -8, 46, 26, 20, -61, -13, -8, 23, -9, -16, 44, 1, 23, -71, -3, 56, 43, -5, -17, -29, 55, 74, -8, -82, 14, -1, 96, 12, -3, 16, -34, -4, 34, 3, 10, 79, 109, -32, -85, -120, -114, -69, 30, -10, -60, -67, 4, -22, -81, 45, 35, -54, 27, 29, 33, 127, -86, 42, -7, -1, 29, -80, -38, 13, -3, -21, 12, -8, 48, -11, 4, 56, 4, 22, -26, 41, -122, 28, 59, -49, 44, 125, 2, 8, -116, -3, -57, 14, 11, 42, -45, -59, 1, -47, 16, -72, -101, -27, 22, -24, -24, 11, -14, 8, -36, 22, 45, 3, 33, 60, 66, -58, 5, 2, 10, -63, -122, -67, 26, -10, -24, 9, -7, 23, -74, 10, -25, 43, -111, 40, -69, 18, 9, -27, 0, -86, -6, 37, -48, -42, 19, 16, -42, 23, -96, 46, 14, 115, 29, -11, -4, -119, 87, 25, -13, 19, -1, 22, 22, -90, 19, 27, 23, -52, -10, 26, 31, 11, 20, -51, 68, -25, -15, 11, 3, -33, -65, -109, 94, -18, -64, 17, 61, -41, -22, 26, -18, 23, -66, 9, -125, 7, 29, 2, -48, -58, -36, -72, -127, -82, 30, -40, 28, 46, 14, 72, -9, -43, 9, 56, 51, 38, -53, 11, 45, -53, -1, 22, -6, -29, 17, -37, 39, 11, -93, -68, -10, -54, 13, -36, -38, 3, -46, -5, -57, -16, -12, 19, -19, -59, -76, 15, 38, -81, -123, 13, 12, 89, 64, 41, -12, -3, 27, -21, -11, 113, -27, -40, 26, 4, -3, 13, -35, 14, -33, 8, 29, -7, -17, 0, 38, 16, 69, -24, 41, 30, 24, -63, 15, -84, 1, 23, 52, 12, 37, -21, -35, 13, -31, -24, 35, 38, 75, 1, -42, 13, 23, 1, 10, -15, 66, -14, 47, -60, 11, 14, 47, -11, 77, 68, -47, 123, 47, 26, -12, 18, 35, -65, 10, 21, 24, 12, 43, 2, -9, -42, 37, -55, -65, -11, -23, 32, 2, 37, 26, -28, -22, -10, 62, -46, 43, -18, 56, 18, 19, -6, -33, 69, -29, -37, 64, 23, -71, -3, -50, -18, 79, 10, 29, 7, 67, 38, -2, 91, -98, -22, -23, 31, 126, -4, -2, 70, 76, -14, 36, -23, 22, 6, -51, -46, -12, -56, -22, 70, -13, -19, 30, -36, 17, 13, -20, -17, -5, 11, 72, 18, 18, 76, -14, -60, 3, -29, -23, -6, -37, -48, -31, -48, -17, -5, -67, -71, -2, 88, -42, 52, 43, -11, 2, -60, 21, 42, -24, -24, 48, -20, 31, 12, 27, 25, 30, -123, -90, -19, 89, 112, -50, -51, 18, 64, 109, 8, 124, -74, 41, 53, 77, -96, -102, -25, 92, -70, 49, -48, 26, 16, 29, 27, -35, -35, -8, 12, 37, -56, -38, -85, 87, 74, -46, 8, -22, 108, 7, 70, -38, -4, -3, 93, -27, -13, -68, -27, 89, -48, 12, 38, -116, -30, 62, -48, 46, 30, 15, -47, 50, -21, -3, 88, 48, 81, 7, 35, 49, -90, -86, -33, -17, -27, -4, -84, 53, 58, 51, -54, 14, 15, 32, -4, 98, 45, -99, 27, -15, 79, -32, -28, -6, -39, 1, 6, 3, -34, -128, -66, -13, -16, 125, 41, -50, -35, -31, -19, 12, 81, -52, -56, 7, 28, 6, 79, -50, 48, -57, 16, 65, -30, 27, -18, 56, -29, 27, 21, -5, 46, -40, 43, 38, 95, -28, 0, 8, 53, -23, 71, 96, 11, -33, 6, -16, 35, -4, -45, -53, 11, -49, 7, -44, -21, 97, -23, 103, 37, -2, -11, -9, -11, -57, 36, -8, -44, 125, 3, 78, 76, 42, 10, 79, 25, 75, 27, 34, -87, 20, -43, 17, -20, -57, 80, 40, 7, 111, -66, 4, 33, -19, 92, 25, -64, 51, 64, 28, -13, 66, 25, 31, 21, 21, -35, 81, 51, 127, -6, 3, 60, 52, -25, -17, 17, 42, -3, -30, 55, -22, -41, 127, 28, -54, -119, 92, 77, -9, -47, -7, 35, 0, -40, 15, -25, 71, 104, 34, 36, 60, 38, -16, -3, 6, 106, 42, 89, -16, 16, -31, -8, 94, -3, 20, -26, 12, -68, 42, 45, -58, -59, 30, -64, 45, 122, 75, 22, 69, -42, -60, -114, -33, -99, -99, 9, 14, 13, 99, -1, 65, 5, -29, -121, 73, -3, 15, 40, 19, 37, -31, 85, -43, -35, -34, 24, 80, -29, -25, -23, 41, -24, 62, -6, -124, -24, 12, 7, -9, 103, 88, 18, -126, 123, -70, -28, 12, -114, 6, -71, -13, -80, 31, -69, 56, 13, 109, -75, 3, 24, -85, -58, 18, -91, -27, -48, 2, -67, 39, 70, -19, 82, -30, 37, -34, -2, 43, 77, 48, 22, 23, 39, -47, 65, -36, -24, 4, -50, 9, 16, -89, 15, 11, 11, -107, -71, -54, 10, -52, 17, -29, -19, -50, 10, -27, 80, 35, 35, -67, 5, -5, -35, 40, -48, -24, -7, -44, 1, -16, -52, -118, -20, -1, 24, 34, -105, -60, -50, -54, -17, 18, 79, 26, -11, -23, -63, -28, 10, 69, -124, -45, 8, 7, 13, -96, -24, 35, 37, 24, 24, -73, -3, 44, 85, -3, 7, -81, 12, -3, -30, -1, -18, -35, -36, -67, 28, -39, -61, 1, -36, -27, 24, 29, 28, 3, -32, 40, -32, -46, 45, 58, -62, -104, 31, 45, -12, 87, 12, 7, -63, -17, 29, 102, 8, 57, 22, 9, 8, -11, 45, 125, 106, -65, -28, 93, 0, 53, -31, 49, -20, 6, 61, 39, -19, 43, -52, 6, 3, 91, 29, -69, 11, -23, 32, -9, 31, 29, -47, 26, -66, 8, -44, 59, -6, -18, 34, 5, -33, -46, 59, -34, -23, -48, -19, 105, -30, -14, 31, 121, 88, 1, -1, 27, 70, 93, 31, -56, 20, 27, -75, -35, -18, 18, 71, 24, 40, -3, -15, -13, -10, -65, -13, -22, 41, 33, 3, 74, 25, 32, 49, 110, -5, 90, -23, 22, -64, -35, -15, 22, 77, 17, 1, -51, 50, 107, 70, 26, 66, -78, -106, 40, -110, -60, 26, 41, -32, 54, -10, 32, -41, 30, -1, -25, 6, 69, 117, 6, 1, -8, -16, 8, -12, 49, -72, 22, -16, -34, 24, 0, -50, 57, 80, -1, 55, 58, -122, 63, -63, 97, 60, 26, -43, -22, -29, 99, -30, 30, 53, 49, -49, 8, -21, -44, 127, -9, 38, -58, 26, 38, 46, 48, 56, 58, 56, -36, -25, -12, -45, -82, 7, -13, -48, -116, -52, 7, 11, 37, 40, 95, 1, -7, 14, 44, -33, -46, -19, -8, 52, 61, -37, -22, 9, 44, -11, -21, -35, 20, -53, 106, -45, -8, 11, 70, 49, 34, 91, -60, -25, -21, 14, 40, -65, -12, -7, 6, 9, -9, -75, -40, 41, 53, 9, -31, -31, 48, -18, 11, -3, 30, 6, 40, -45, -35, 38, 72, 64, -117, -32, 38, -53, 10, 1, -7, -10, 29, -36, 22, 6, -8, 33, 20, 44, -89, 74, -66, 5, 60, 21, 26, 29, 31, -61, 11, 24, 29, -36, 33, -16, -27, -40, 39, -75, 12, -25, 12, 46, -2, 0, 3, 86, 14, 13, -26, 73, 10, 5, -16, 31, 35, -9, 96, -56, 22, 15, 51, 18, -60, -25, -34, -5, 19, -13, 20, 74, 70, 16, -120, 10, 103, -27, -92, -46, 25, 39, -49, 17, 40, -56, -25, -68, -81, -40, 126, 51, -9, 4, 30, 5, -68, -33, 53, 60, 8, 34, -36, -14, 52, 30, 114, -25, -65, 38, -53, 45, 38, 59, 12, 113, 9, -29, -9, -10, -81, 13, -56, 75, 19, 46, 21, -14, -49, 31, -100, -24, -34, 38, 100, -60, -30, -9, -46, -104, -21, -3, 12, 31, 65, 97, -14, 7, 27, 30, -83, 40, -74, -9, -62, -7, 112, -59, -49, -24, 23, 113, 96, 40, -35, -42, 38, 69, 73, 42, 41, 18, -3, 95, 96, 77, -32, -20, -90, 105, 40, 82, -1, 108, 58, 73, 118, -15, -4, 26, -4, -16, 68, -50, -59, 10, 32, -58, 31, 44, 4, -50, 31, -19, 91, 43, 11, 40, -32, 119, 75, 86, 113, 0, -108, -14, 121, -104, 17, 126, -38, 2, 52, 56, -20, 51, -16, -35, -18, 26, -26, 13, -65, 25, -105, 67, 50, 18, 20, 13, -22, 24, -9, 27, -9, 8, 3, 81, 40, 73, -26, -33, -7, 22, 6, -7, -11, 19, 14, -47, 96, -16, 52, 60, 17, -71, 56, -50, 12, 7, 6, 31, -59, 1, 23, 17, -49, -17, 21, -9, 30, 31, 35, -1, -18, 7, 29, 15, 65, -68, -9, 89, -8, -30, 44, 74, -4, 46, 28, -69, 62, 27, -22, -57, 28, -20, 11, -3, 5, -65, 28, 7, -26, -13, 20, 20, 32, 71, 115, -47, -11, 36, -65, 5, -50, 52, 16, 22, 77, -9, -8, -16, 56, 30, 17, 50, -35, -69, 19, 71, 60, -55, 2, 55, -47, 3, -13, -109, 28, -3, -5, -38, 0, 34, 110, 38, 15, 46, 18, -1, 34, 32, 32, -1, 53, -3, 75, 65, -14, 63, 61, 0, 4, -78, 18, 21, 5, 47, 19, 26, -65, -59, 84, 45, 2, -126, -38, 24, 56, 15, 47, -13, 45, -69, 7, 122, -42, 34, 84, -8, 6, 21, 6, -11, 26, -47, 117, 3, 23, 10, 34, 29, -48, 123, -11, 53, -47, 46, -8, 45, 4, -16, 14, -28, -30, -16, -67, 59, 10, 34, 15, 63, 1, -28, -11, -24, 8, 27, 54, -4, -110, 80, 57, 31, 7, 104, -35, 60, -10, -12, 41, 66, -122, -18, 9, 52, 41, 42, -47, -28, -32, 68, 8, -56, 13, 28, 115, 42, 31, 0, -55, 24, 39, -47, 9, -41, -14, 41, 34, 53, 71, 0, -5, 53, -55, 14, 17, 23, -59, -22, 52, 96, -40, 72, -7, -7, -24, 5, 48, 33, 29, 18, -106, 36, 30, -53, -29, 88, -21, 77, -5, -22, 29, 7, 21, 0, 27, 19, 63, 8, 37, 32, -45, 16, -25, 45, -16, -2, 61, -13, -31, -8, -19, 65, -14, -69, 29, -25, -83, -53, 35, -60, -23, 4, 52, -10, 29, 9, -5, -80, -30, 3, -22, 8, -40, -28, 15, 66, 23, 64, 7, 41, 11, -24, -97, -21, -16, 79, 7, -4, -29, -20, -42, -33, -35, -66, -18, -76, -18, 22, -59, -20, -59, 0, -72, -77, 6, -60, 28, 18, 19, -51, 96, -34, 8, 22, 2, -98, 38, 29, 21, 3, -15, -26, 31, 0, -7, -9, 26, -8, -128, 118, -75, 33, -69, -8, 121, 26, 46, 37, 101, -19, 7, -82, -39, 34, -65, -14, 40, 20, 127, -126, 29, -44, -44, 29, 23, 2, 80, -14, 126, -31, -22, -21, -12, 15, -16, 80, -18, 49, 41, -8, -43, -121, -67, 59, 123, -24, -27, -28, 36, -103, 18, 36, 0, -64, 10, 69, -11, -74, -99, 102, -64, 35, 6, 16, 122, -19, -6, 3, -21, 73, 5, 10, 121, 18, 87, -16, -28, 79, 4, 96, 39, -1, -21, -40, 110, 24, -42, -56, 109, -10, -57, -41, -76, -53, -126, 27, 63, -47, 51, -40, 17, 83, 79, 3, 31, 13, 13, 26, -86, 37, -96, 77, 31, 47, 127, 22, -5, -18, -48, 30, 19, 25, 106, 117, -66, -49, 124, -90, -4, -90, 7, -1, -64, 30, -91, 32, 1, 103, 40, 96, -26, -47, 21, 8, -23, -12, -29, 25, 36, -28, -115, -27, 80, 13, 65, 3, -2, 124, 86, 25, 108, -77, -57, 16, 19, 5, 26, -39, 126, 27, 14, 30, 5, -6, 47, 16, 4, 1, 3, 24, 44, -58, -27, -128, -13, -25, 0, -13, -9, 18, -14, -19, 22, 92, -31, 14, -14, -20, 37, -27, -37, -11, 36, 3, -27, 11, 4, 16, -50, -2, -74, -2, 61, -5, 75, -5, 6, 31, -40, -6, 127, -63, 31, -7, -4, -41, -50, -125, -33, -42, -3, -99, 14, 0, -12, 22, -22, 15, -14, 29, 9, 0, -4, 30, 31, -5, -17, -24, 13, -56, -6, -36, 37, -6, 53, 29, -2, -3, 5, -34, -121, -68, -38, -33, 53, -23, 9, -12, 12, -10, 11, -69, -4, -51, 16, 84, -71, 15, -38, 4, -26, 31, -40, 11, -64, 13, -26, -7, -14, -20, 27, 2, 31, 67, 30, 108, 28, 66, -14, -5, -9, -11, 9, -38, 35, 83, -49, -13, 81, 32, 40, -22, -20, 91, 1, -24, -26, 53, 69, -66, -48, 50, 12, -39, 11, 55, 13, -22, -17, 67, -28, 21, 103, -45, 65, 11, -18, -20, 28, 0, -5, -12, -15, 31, -54, 14, 82, -99, -38, -46, -22, -81, -20, -62, 65, -47, -21, -32, 14, -50, 73, 11, 14, 5, 38, -14, 53, 27, -14, 39, -18, 63, -47, 61, -12, 12, 58, 0, 15, -47, -51, -50, 3, -10, 52, 20, 28, 23, -19, 4, -58, -3, 13, 97, -44, 10, -98, 31, -38, 4, 50, 72, 21, 24, 127, 33, 48, 64, 48, -100, 7, 46, 1, 105, 11, 59, -16, -46, 86, -11, 23, 12, -42, -50, -81, 21, 108, 91, -125, 19, 55, -21, 117, -75, -24, 9, -58, 39, 10, -12, 26, 126, -77, 31, -3, 127, -13, 76, 64, 40, -10, 10, -29, -56, 40, 7, 68, 4, 12, 119, 99, 36, 31, -20, -117, 127, -122, -33, 97, 22, 43, 0, -7, 4, 35, -16, -16, 16, -4, -15, -50, -24, 85, -4, -59, 23, 11, -76, 21, 57, -19, 6, -32, -7, -58, 39, -46, 14, -27, 6, -76, -5, 65, 24, -30, -57, -22, 45, 23, -3, -11, -122, -29, -38, -16, -10, 23, 25, -45, 12, 7, -69, 25, 19, 24, 2, 7, 9, -40, 37, 26, 45, -92, 16, 22, 53, 22, -24, 15, 53, 35, -107, 56, 19, 20, 17, 1, -50, -31, 0, 18, 13, -1, 11, 23, 71, -5, 21, 34, -63, 50, 77, 24, 29, 9, 77, -20, 66, -3, 15, 24, 81, 83, 25, -5, 42, -121, 126, 34, -84, 44, 16, 112, 38, 22, 24, -78, 102, 40, 14, -18, 95, 70, -15, 32, 28, 31, 82, 58, -1, 26, 30, 59, 16, 5, -41, -15, -45, -29, -15, 71, -9, 17, -11, -6, 31, 30, 89, 48, -34, 95, -5, -72, -14, 108, -34, 41, -24, -45, -79, 117, 0, 25, 14, 68, -24, 23, -15, -23, -61, -3, -21, 24, 55, 7, 46, 19, 17, 66, -75, 10, 95, 14, 18, 6, -54, 23, 90, 113, 34, 44, 57, 12, 66, -9, 116, 9, 32, -88, -105, -123, -31, -17, -7, -50, 16, 83, -57, 70, -110, -127, -38, 55, 5, -108, -35, 49, 52, -4, -19, 20, -41, -101, 89, -127, -121, -6, 14, 61, -91, -47, 27, 62, 39, -71, -64, -112, -21, 27, 8, -70, 17, 14, 5, -37, 10, -2, 61, -77, -23, -40, -39, -67, 18, -124, -33, -40, 68, 11, 4, 118, -14, 24, -56, 67, 33, 52, -11, -13, -16, 122, -115, -34, 46, -50, 43, 59, 78, 19, 120, 6, 41, -50, 37, -28, 28, 103, -128, 24, -44, -3, -14, 3, -10, 62, -51, 36, 2, 73, -93, -59, -26, 30, 17, 90, -21, -31, -17, 23, 22, 39, 20, 17, -9, -96, 57, -6, -60, -50, -18, -56, 19, 8, -76, 8, -21, -32, 14, -38, 1, 20, -90, 55, -54, 7, 35, 19, -28, -33, -86, 54, 72, 29, -19, -32, -33, 97, 16, 11, -15, 23, 18, -56, 29, -17, -9, 46, 30, 46, -122, 106, -21, 48, -63, 32, 16, -61, -55, 22, -21, 121, 29, -15, 30, -25, 39, -21, 62, -25, -11, -34, 62, 42, 6, 26, -29, 80, -57, 7, 29, 17, 71, 2, 37, -45, -111, 27, 47, 112, 7, 77, -22, -29, -73, 39, 106, 37, 45, 65, 43, 26, -119, 33, -28, 16, 123, -52, -61, 64, 2, 34, -39, -3, 6, 18, 35, 4, 24, 2, -3, 53, -17, 19, 14, -4, -30, -14, 72, -6, -50, -94, -23, 30, -115, 77, 17, 69, -20, 5, 13, -13, -83, 25, 3, -23, 15, -128, 46, 112, 13, 41, -4, 125, 47, 23, -39, -13, 123, 43, -18, 5, 6, 3, -32, 114, -11, -69, -23, 43, 13, 5, 106, -8, -8, 22, 8, -22, 61, -27, 51, 28, -2, -75, 13, 61, -8, 71, 56, -28, -15, -29, -53, 83, -33, -13, -26, -76, 98, 75, 97, -11, 101, -126, 124, 29, -105, -36, 83, 6, 57, 45, 98, -55, 9, 14, -45, 124, 42, 88, 62, 87, 43, 18, 8, -6, 28, 99, 26, 127, 27, 2, -20, -47, -41, -39, -52, 35, -18, -37, 41, -1, -4, 9, 29, 48, 46, -14, 42, 34, -38, 1, 87, 13, -22, 61, 123, 4, 26, -16, 32, 125, 19, 43, 28, -32, 114, 4, -87, -61, -99, 22, -10, -8, -27, -7, 5, -24, 6, 4, 23, 10, 23, -33, -31, 82, -48, -25, -74, 68, -9, 35, -16, 30, 10, 24, 71, 50, -127, -50, 21, 114, -31, -56, 2, 48, 39, 39, -14, 33, -9, 34, -13, -35, 49, 59, -27, 15, 61, 28, 17, 15, -14, -5, 38, 7, -8, 2, -62, -7, 1, -32, 22, -30, 17, 6, -12, 42, 8, 24, 61, -101, 1, 13, 48, -16, 27, -10, -9, -5, -7, 75, 21, -39, -33, 25, -49, -30, 17, 11, 75, 7, -11, 20, 3, -49, 52, -25, 72, 52, -11, 57, -6, 21, 99, 32, -81, 37, -59, -65, 18, -24, 119, -37, -69, 57, -20, -1, 78, -32, -15, 6, 33, 108, 81, -120, 38, -47, -82, -4, 62, 29, -11, -53, 9, -23, -10, -78, 63, -12, 38, -37, 21, 64, 3, -17, -117, 24, 3, -24, -75, -34, 34, -5, 26, 9, 15, 41, 51, -8, 52, 25, -42, -101, 100, 57, 9, -98, 127, -86, 36, -63, -92, 50, 43, -7, -16, 30, 66, 56, 54, 33, 29, -49, 8, -1, -8, -16, 73, -14, -72, 26, -34, 44, 43, -117, 12, -43, -121, -70, -28, -5, -23, -68, 23, 123, -11, 70, -14, -64, -82, 99, 79, -113, -45, 118, -12, -35, -79, 94, -43, -125, -45, 121, -126, -45, 4, -18, -47, 11, 25, -73, -51, 104, -19, 46, -116, 117, -32, -11, 106, -14, -112, 52, -73, -127, 82, 14, -22, -2, 35, -65, -108, -88, -4, 8, -33, 28, -128, -23, 0, -20, 0, 97, -45, -31, -27, 126, -65, -31, 23, -25, -53, -92, 65, -123, 62, 127, 4, 83, 40, 35, -14, -11, -32, -71, 6, 6, 51, 22, 30, -23, -46, -38, -11, -24, 41, -31, -22, -123, 36, -57, -46, -22, -10, -4, -21, 30, -12, -124, -27, 21, 38, -25, 8, -38, 73, 24, 27, -2, 21, -7, -10, 19, 28, -78, 17, -10, -8, 34, -60, 103, 27, -18, -36, 48, 24, -51, -34, -52, -11, -61, 102, 5, -1, -37, -70, -66, -19, 48, -90, -18, -23, 70, 17, -100, 87, 55, -19, -23, 73, -11, -65, -39, -83, -16, -10, -68, 46, -92, -126, -66, -121, -94, -92, 47, 2, -39, -95, -43, 42, 2, -50, 8, 38, 81, -84, -1, 36, 0, 16, -54, -61, 83, 51, -31, -50, -19, 0, 1, -64, 22, -3, -12, 5, 10, 58, 38, 71, 47, -23, -3, -4, -112, 35, -44, -39, -44, -7, -121, 13, 33, -28, 41, 26, 60, 86, -87, 37, 11, 25, 42, -15, -25, -49, 27, 27, 58, -62, 91, 48, 59, 15, -11, 118, -55, 22, -5, -1, -1, 68, -16, 86, -95, -95, 46, -9, -40, -18, 20, 5, 48, 44, 17, 10, 13, 1, 19, -17, 12, -66, -44, -48, 33, 23, -50, -16, 59, -11, -48, 2, -6, -5, -43, 33, 44, -12, 23, -63, 46, -23, -51, 3, 126, -54, -50, 85, 15, -6, -3, 42, -58, 61, -55, 75, 94, 26, -97, 71, -107, -80, 13, 61, -37, 30, 5, -36, 63, 9, -68, -18, -32, 39, -58, 21, -21, -30, -46, -127, 42, 34, 6, -84, 31, 39, -10, 36, -58, 38, 10, 10, -4, 29, -128, -28, 65, 29, 10, -78, 116, 19, 67, -122, 31, -43, -27, 68, 9, 35, -90, -8, 7, -49, 56, -29, 25, -21, 31, 0, 28, -44, -51, 61, 30, -5, 57, 83, 2, 1, 54, 74, 27, -3, 20, -35, 6, 17, -17, 27, 65, 35, -7, 67, -46, 19, -34, 23, 26, 34, -26, 18, -22, -4, -113, -48, -10, -12, -32, 1, 0, 15, 33, -11, 24, 35, -18, 35, -85, 41, 52, -18, 29, 26, -37, -25, 4, 34, 5, 1, -16, 4, 13, -12, -2, -66, 29, -29, 70, -15, -48, 14, -6, -32, 36, -9, 25, -12, 25, -127, 27, -26, -54, -55, 13, 78, 26, -26, -15, -21, -4, -50, -17, 10, -18, -11, -42, -19, -8, 12, 0, 24, 27, 64, 42, 83, 34, -23, 16, 7, -123, 21, -16, -53, -5, 14, -24, 50, -22, -20, 36, -9, 35, 9, 64, -16, -6, -41, 99, 67, 26, 21, -59, 4, -13, 48, 67, 38, 67, 127, 38, 14, -5, 43, 3, 1, -3, 13, 62, 24, -5, -49, 39, 74, 61, -44, -39, 70, 112, 6, 62, 52, 49, 17, 0, 80, -21, 11, -19, -34, -2, 4, 38, 31, -9, -3, 109, 51, -14, 121, 66, 15, -12, 34, -33, -2, 0, 10, 27, 63, -6, 37, -55, -36, 22, 15, 30, 68, 37, -65, -17, 79, -8, 32, -50, 4, 83, 36, -57, 18, -21, -48, 39, 98, 35, 27, -10, 24, 36, -13, 41, 22, -15, 44, -98, 62, 32, -1, 116, 62, -35, -78, -13, 34, -37, 123, -31, -26, -2, 10, 52, -77, -35, 78, -67, 63, -5, -60, -13, 71, -10, 22, 118, 42, 126, 59, -21, 30, 2, 9, 8, 14, -31, 38, -70, 57, -36, 109, 9, -13, -33, 88, -9, 70, 8, -44, -20, 73, -2, -13, -19, 118, -27, 2, -16, 58, -82, 39, -59, 36, -7, 4, 60, 23, 38, -6, 37, -3, 29, -32, 1, -34, 44, 45, -10, -29, -10, 9, -39, -58, -25, -26, 37, 44, 71, 60, -1, -18, 45, -76, -12, -24, -5, 2, 15, 5, 10, -72, -38, 31, -58, -27, 4, -10, 6, -4, -110, 11, -34, 31, 36, 2, 32, -14, 19, -4, 13, 17, -8, 5, -1, -18, 15, 16, 47, 56, 48, -6, -53, -8, 66, 27, -57, 45, 51, -24, 35, -33, -29, 74, 16, 14, 22, 15, -72, -26, 101, -27, -14, -22, 14, -79, -9, 34, 81, -114, 33, 9, -24, -31, 31, 13, -79, -61, -40, 82, -115, 45, -107, 57, -37, -66, 12, -25, 4, 7, -24, 4, 27, 6, -64, 6, 89, -84, -121, 75, 40, -36, 13, -57, 48, -59, -128, -62, 7, -15, 26, 75, 16, -59, 27, -20, 16, 6, 13, 2, -84, 15, -40, -70, -8, 56, 107, -1, 12, 15, -1, 25, 58, -12, 53, -110, -67, -38, -67, -46, -42, 16, -54, -103, -109, -5, -70, -67, -56, -67, 80, -13, -53, 55, 15, 83, -124, -44, 0, -17, -44, -60, -32, 8, -23, -17, -54, 36, -49, -9, -65, 16, -39, 88, 43, 50, -8, 3, -25, -57, 30, 37, 34, -60, 74, 57, -27, -30, -104, -67, 46, -46, -12, -120, 52, 36, -117, -45, 35, 45, 62, -66, 58, -52, 54, 14, 28, -24, -86, -35, 49, 17, 91, 75, 39, 125, -24, -7, -109, 70, -24, -88, 25, -59, 127, 55, -81, -16, 17, 14, -41, 7, 69, -9, 15, 25, 46, 87, 13, -42, 20, 12, -38, -14, 109, 16, -66, 107, 91, 30, 83, 4, 15, -41, 36, -38, -106, 75, -120, 18, 92, 58, -123, 9, -42, 95, 4, -2, 26, 24, 1, -4, 22, -14, -11, 3, -122, -53, -76, -53, -8, 1, -100, -6, 26, 3, 1, -35, 105, 25, 11, -43, -105, -27, -35, -54, 56, -16, 8, 8, 14, 33, -13, 33, 39, 24, 8, 26, 27, 30, 19, -13, 13, 7, 67, 67, -20, -40, -50, -17, 22, -18, 18, -1, -2, 22, 35, -33, 5, 3, -56, 9, -51, 6, 15, -74, 86, -11, 5, -11, -3, 95, 8, -44, 29, 1, -26, -54, 101, -84, 33, 45, -34, 78, 61, 36, -20, 44, 10, 74, -84, 5, 13, -26, 35, 80, -43, 126, -75, 4, 23, -64, 54, -42, -20, 68, 87, 44, -63, -39, 4, -99, -27, 14, 58, -17, 91, -10, -39, 82, -13, -47, -44, -22, 34, -17, 23, -128, -53, -2, 12, -8, -5, -29, -19, 64, -42, 13, 28, -42, 28, 67, -65, 63, -47, -9, 37, -66, -2, 56, 51, -3, 40, -22, 47, -2, -24, -12, 25, -68, 89, -27, 18, 121, 59, -27, -46, -11, 6, -61, -15, -46, 2, 15, 16, -34, -17, -18, -3, 27, 55, 40, 31, 22, -19, 2, -72, -14, 89, 94, -24, 24, -96, -119, -65, -13, 40, -69, -62, 10, -49, -60, -52, 27, -75, 8, 42, 57, 48, -15, -70, -117, 82, 71, 83, 34, 87, 22, 2, 22, 2, -114, 33, -46, -32, 99, 10, 4, -44, 92, 67, 23, 42, -127, 33, -35, -11, -25, 54, -15, -31, 26, -115, 18, -6, -112, 3, 39, -63, -66, 0, -51, -39, 26, 1, 37, 7, -25, 20, 5, 38, -21, -2, -9, 108, -77, 16, 12, 24, -5, 14, 88, 59, 1, 8, -5, -20, 36, -124, -50, -23, 38, -67, 0, -10, 4, 1, -42, 0, -64, 1, -10, 7, -32, -80, -17, -13, -113, 107, -54, 71, -24, -38, 11, 21, 24, -122, -6, -31, -67, 56, -68, -12, -23, 0, 2, 37, -114, -1, -19, -1, -72, -91, -16, 32, -4, -22, 118, -17, 41, 45, 32, -14, -27, -45, 6, 18, -62, 21, 33, 30, 14, 5, 39, 17, -10, 25, 12, -15, -2, -4, 17, -9, -2, 38, -66, -50, -18, 18, 41, -21, -24, 7, -18, -15, -20, 61, 18, -1, 10, -24, -67, -16, -17, 2, -21, -25, 21, 7, 24, -8, 25, 47, -46, 122, -11, -48, 20, -39, -60, -30, 53, -64, 14, 59, -82, -10, -10, 37, -11, -1, 26, 1, 2, 41, -58, 87, -18, 20, 5, -36, 59, -52, -18, 56, 80, 49, -115, -16, -2, 26, 20, 22, 28, -6, 24, -69, -6, 6, 8, 7, -8, 105, 49, -13, 46, -86, 46, 31, 70, 10, -25, 51, 27, -14, 12, -14, 5, 28, 8, 95, 56, -4, 43, -18, 7, 3, 70, -5, -9, -105, 21, -97, 2, -28, 67, 27, 18, 109, -52, 88, 32, 49, -1, 18, 25, -35, 61, -47, 13, -124, -52, 71, 8, -31, -6, -31, -32, 60, 62, -38, -9, -83, -107, 126, -22, -16, -47, -78, -55, 30, 16, -24, -27, -45, 74, -58, 50, 6, 15, -7, 91, -127, -2, -8, -55, 81, 103, 14, 27, -16, 26, 125, -13, 98, -80, 68, -4, 35, 126, -59, -103, 58, -31, 92, -2, 16, 42, -5, -58, 45, -48, 64, -106, -14, -62, -30, 36, 10, 9, 50, -5, -6, 33, -39, -10, -16, -71, 83, 38, -10, -70, -77, 42, 35, -128, 64, 37, 49, 60, -9, 33, -33, -37, -23, 7, 8, -30, 19, 35, -17, 16, 17, 6, -36, -22, -82, 54, 3, 6, 35, 12, 57, 0, 12, -32, 58, 108, 7, 49, -8, -38, -79, 30, -1, 7, 15, 32, -20, 16, 68, 16, 22, -41, 33, -25, 13, -42, 49, 14, 2, 60, 41, 8, -25, -21, 46, -43, -26, -9, -15, -10, 36, -19, 0, 36, -12, 17, -7, 13, 16, -49, 79, 59, -8, 10, 59, -12, 15, -125, -18, -8, 7, 6, 10, 39, -37, -64, 29, 0, -50, -6, -24, 15, -32, -28, 27, -12, -44, 84, -30, -10, -51, 5, -59, 77, -26, 3, 3, 9, -39, 39, 100, -33, -80, -7, -36, -83, -30, 19, -21, 59, 44, 86, -29, -4, -112, 28, 8, 97, -24, -37, 13, 110, -2, 16, 72, -7, 9, 22, 10, 37, 32, -20, 66, 7, -72, -127, -5, -11, 50, 22, 1, 5, 74, -74, -118, -36, 123, -8, 14, 29, 21, -71, 54, -94, 11, -27, 45, 95, -126, 70, -39, -60, 52, -36, 73, 23, 48, 12, 36, 63, 33, 68, 88, -24, -65, -4, -2, -20, -9, 48, -63, -121, -66, 40, -128, -22, -13, 11, -105, 20, -30, -127, 26, -21, -92, -108, 60, -14, 56, -117, -113, -123, -46, 57, 111, 124, 82, 58, 25, 5, -57, -42, 116, 9, -24, 16, -17, 86, -116, 68, 10, -35, 124, 66, 53, -51, -65, -10, -14, -12, 26, 5, -51, -15, 12, 25, -3, -33, -54, -20, -116, -10, -25, 117, -1, -24, 80, 55, 4, 112, -8, -67, 0, 41, 12, -31, 102, 36, -3, -69, 96, 18, 126, 116, 27, 16, 114, -28, -82, 113, -57, -119, 123, 63, 126, 33, -1, 29, -17, -28, -13, -4, 85, 39, -5, -53, -53, -63, 5, 29, -76, 27, -23, 3, -70, -31, -46, -48, -15, -93, -13, 50, -1, -6, 0, 26, -34, -22, 3, -112, 39, 48, -12, 73, 18, 38, 17, -18, -15, 35, -10, -72, -19, 13, -72, -21, 19, -58, -17, 70, 4, -32, -4, 35, 86, 11, -6, 14, 38, 4, 99, 29, 117, -7, -57, 11, 44, 2, 12, -37, 30, 117, 36, 5, 93, -56, 27, -4, -104, -83, -76, -26, 70, -63, 108, 37, 57, 62, -23, 26, -9, 11, -12, 6, 22, -28, 24, 11, 63, 12, 28, 15, 78, -3, 85, -2, -29, 37, -41, -30, -37, 39, -19, -39, 50, -5, 15, 39, 12, 3, -34, 17, 35, 5, -13, 10, -45, 12, 109, 5, 71, -28, -11, 22, 3, 63, 11, -11, 40, -13, 53, 32, -7, 41, 1, -14, 27, -1, -25, 54, 16, -64, 14, 92, 67, 94, -10, 52, 56, 84, 0, 28, 59, 39, -68, 6, -31, 73, -87, -40, 1, 23, 31, -35, -21, 34, -50, 82, -13, 62, 24, 84, 44, -11, 29, 56, -11, -14, 10, 18, 12, -85, -127, -3, -65, 4, 52, -27, 11, -89, 1, -64, -78, -24, -44, -12, -20, -51, 13, 97, -77, 50, 63, -74, -47, 31, 1, -8, 4, 23, -74, -126, 13, 62, 57, -25, -30, -125, -105, 13, 127, 90, 24, 3, 24, 22, -3, 3, 122, -59, -50, 18, -48, -20, -26, -37, 122, 109, 124, -29, -23, -114, -4, -120, -2, 7, -70, 55, -73, 12, -80, -124, -11, 33, 83, -14, 31, 2, 126, 78, -101, 48, -104, 18, 53, -1, -28, 54, 87, -126, 40, 30, -85, -7, 86, -95, 86, 23, -70, 17, 10, -49, 2, 94, -20, 123, -35, -22, 28, -31, -35, -13, 41, 38, -45, -58, 50, 8, 6, -96, 49, 9, -2, -70, 55, 66, -55, 38, -86, 81, -72, -17, -11, -72, 18, 27, 17, 49, -84, -44, -7, 16, 82, 27, -89, -18, 23, -28, 24, 36, -8, -92, -24, 34, -20, 127, -23, 19, -6, 3, 28, 111, 14, -19, 7, 35, 10, 27, 27, 2, 95, 29, 66, -56, -55, 24, -38, 127, -59, 4, 56, -20, -69, 14, -12, 17, -37, -23, -43, 31, -35, -35, -56, 29, -9, -11, 123, 24, 19, -23, -52, -3, 7, -39, 25, 23, 34, 95, -16, 35, -9, 39, -55, -25, -43, 47, 108, -3, -3, 61, 56, -9, 54, 54, -8, 51, -20, 62, -92, -39, 40, -8, 34, 29, -41, 52, 18, 14, 21, -30, 39, 64, 81, -32, 71, 41, 28, -8, -42, -75, 20, -14, 12, -32, 66, 34, -30, -68, 31, -104, -37, 31, 86, 42, 14, 12, 3, -20, 15, -7, 29, -26, -45, -32, -12, 9, 48, -25, 41, -70, 21, -3, 26, 3, 28, 41, 31, -6, 60, 76, 126, 5, -14, -32, -42, -36, -3, -3, 4, 18, 3, -6, 51, 45, -60, 104, -41, -8, 64, 7, 10, 125, 61, 6, -3, 43, 5, 9, -126, 83, 13, -126, 24, 51, 33, 118, -28, -25, -127, -13, -20, 96, -27, 15, -124, 21, -75, 86, -11, -9, -9, 40, -17, 111, -52, -94, -126, 26, -3, 72, 7, 116, 55, 30, -2, -119, 127, 126, 32, 9, -77, -1, -50, 24, 21, -55, -125, 6, 99, 13, -12, -3, -53, 26, 106, 113, 125, 125, -51, -12, -3, 2, -46, 69, -35, -1, 57, 46, 65, 19, 43, -39, -44, -24, 26, -4, 0, 26, 28, 64, -22, 5, 32, 36, 1, 16, 3, 69, 18, -52, -20, -36, -56, -22, -19, 21, 75, -70, 56, 15, 23, -4, -50, 85, 48, -46, 43, 64, 53, -4, -46, 19, 35, -23, 18, 27, 13, -35, -4, 127, -50, 7, 52, -41, 3, 31, 29, -9, -19, -94, -22, -30, 58, 74, -53, -22, -21, 0, -43, -6, -58, -3, 115, 10, 93, -71, 46, 10, -38, -19, 49, -60, 6, -30, 60, -22, 62, 24, 23, 63, -22, 5, 57, -8, 64, 106, 28, -80, 112, -50, 57, -122, -128, 47, -12, -51, -10, 4, 1, -124, -11, -87, 30, -36, -10, -36, -21, -19, -125, -76, 53, 104, -125, 32, 33, -64, 64, 6, -14, 15, 94, 12, -69, 2, 8, 0, -51, 28, 34, -124, -21, -49, -70, -71, 54, -56, -2, 45, 70, -3, 127, 87, 101, -10, -28, 100, 116, 19, -14, 43, 19, 100, -113, -44, 52, -8, -90, -7, 15, 36, 39, 5, -79, -27, 8, -40, 24, 93, -39, -3, 40, 56, 57, -33, 3, 48, 81, -41, 7, 111, 44, -62, 51, -126, -51, -111, 40, -35, -122, -49, 70, 75, 84, 29, -72, -40, -119, -3, 14, 61, 127, 14, -38, -23, -26, -127, -116, -122, -121, -96, -5, 40, 40, -12, -112, -1, 118, -102, 16, 26, -18, -34, -25, -95, -40, 19, 47, -128, -18, -115, -23, -48, -44, -99, -41, 30, -111, 4, -7, -16, -52, -45, -16, -88, -115, 50, 59, -41, -105, -121, 108, -42, 77, -109, -116, -51, -60, -25, 2, 59, 55, 78, 104, -70, 23, 85, -123, 52, -2, 2, 26, -75, -14, 50, 14, 21, 3, 85, -9, -38, 28, -72, 60, -116, 25, 37, -28, 41, 69, 19, -80, -53, 12, 32, -87, -5, -48, 9, 80, 81, -79, -74, 37, 116, -45, 41, -28, 19, -40, -103, -117, 51, -44, 41, -80, 79, -61, 69, 10, -41, 15, 83, -35, -58, 65, -21, 32, 127, 62, 1, -1, -56, -15, 13, 37, -50, 11, 8, 25, 11, -90, 16, -12, -37, -116, 77, -22, -62, 3, 45, -12, 34, -43, 27, -50, 41, 31, -66, 36, -13, -9, 3, 104, -11, 42, -25, -34, 17, 37, 30, 22, 1, 19, 26, -9, 27, -106, -41, 97, 37, -16, 53, -10, -48, -10, -17, 52, 18, 62, 38, -24, 48, -8, 34, 96, -57, 27, 23, -18, 56, 105, -38, 63, -36, 51, 53, 82, 79, -22, 64, -12, 28, 37, 50, 91, 59, 5, 12, 39, -19, 73, 38, 63, 26, 57, 35, -33, 124, 63, 49, 68, -6, 34, 63, 49, -43, 42, -39, 5, -34, 68, 65, 61, 52, 24, 36, 46, 63, 45, 92, 22, 22, -46, 24, 11, 73, -30, 127, 15, 47, 38, 28, 43, -9, -11, -42, 0, -9, -14, 56, -103, 9, 27, 15, -22, 65, -28, -18, 6, -43, 23, -25, 31, 54, -23, -41, -29, 27, -9, -10, 29, 25, 116, 46, -84, 58, 19, -37, -6, 29, -20, -30, -8, 10, -59, -20, -26, -27, 97, 64, 117, -7, -61, 15, -14, 47, -61, -37, 36, 82, 18, 61, 17, 23, 30, -40, -65, -76, 0, -72, 59, 43, 49, -7, 20, 22, 101, 46, 31, 14, 72, -41, 24, -26, 7, -71, 14, 66, -6, -35, -23, 15, 32, 27, -34, 2, -12, -26, 44, -64, 33, 47, 23, 41, -7, -8, 17, 7, -59, 44, -16, -18, -37, 4, -91, -4, -38, 9, -31, 22, 57, -17, 68, 1, 24, -23, 43, -11, -18, 2, -72, 3, 11, 29, 48, 39, -34, -22, -36, -4, 13, -35, 43, 41, -57, -125, 97, -41, -10, -57, -32, 10, 15, -10, -41, -62, -17, 20, 33, -95, 17, 30, 6, -46, -22, -24, 51, 89, -50, -78, -17, -24, 34, -124, 51, -35, 58, -6, 14, -27, -51, -11, 6, -9, -32, -22, -16, -69, -41, 7, -50, -61, 45, -47, 39, 17, -12, -7, -12, -25, -11, -7, -30, -9, 57, -125, 20, 14, -66, 73, -17, 18, -57, -20, 28, 58, 124, -31, -18, 14, 11, 38, -104, 65, -95, 125, -81, 24, 26, -31, 25, 40, 127, 17, -27, 62, -13, -38, 120, 22, -29, 54, 56, -99, 16, -33, 32, -39, -5, -1, 31, 17, 10, -26, -52, -64, 9, 24, 38, -9, 28, 99, 30, 56, -18, 39, -85, -70, 55, 16, 118, 20, 4, -97, -18, -3, 6, -34, 69, 14, 107, -4, -30, -38, 24, 26, -114, 54, -36, -21, 33, -40, -43, 29, -19, 20, -9, 114, 30, 6, -65, -1, 75, 10, 12, -21, 41, -5, 113, -39, -12, -105, -43, 78, 74, 18, -53, -28, 9, -25, -2, 23, -9, 84, -26, -5, -21, -44, -49, 46, 63, -1, 2, 90, 72, -63, -44, 59, 18, 64, 13, 49, -21, -21, 64, 106, 30, -26, 73, -18, -83, -24, -77, -6, -47, 27, -34, 8, 47, 4, -76, -117, -28, -22, -32, 70, 94, -20, 35, -22, -12, 10, -28, 72, -66, 103, 100, 46, 20, -42, 50, 21, -16, -35, 49, 104, 56, 111, -48, -31, -1, -17, 20, -23, -12, 12, -36, 32, -2, 9, 14, 77, 14, 17, -11, -38, -88, -54, 30, -15, -37, -15, 27, 21, 29, -68, 14, -91, -6, 10, 13, -82, 11, 19, 124, 38, 80, -5, 6, -15, 7, 22, -4, 32, 20, -55, 24, 90, 5, -15, 18, -70, 25, -16, 52, 2, -15, -39, -17, 14, 47, -4, 41, 3, 45, 20, -26, -32, -66, -37, -98, 65, -17, 24, 45, 22, -34, -36, -68, -13, -24, 18, -29, -125, -1, 25, 13, -68, -82, 20, -85, -101, 13, 19, 4, 37, 28, -23, 47, 14, -50, 43, -46, 52, -12, 82, 31, 77, 101, -28, 42, 27, 81, -117, -19, 14, 2, -69, 27, 23, -27, 127, 59, 101, 90, -4, 40, 26, 3, 64, -23, -53, 31, 42, 51, 8, -109, 35, -41, 25, 30, 42, 43, -54, -22, 38, -72, 11, 3, 38, 31, -69, -17, -1, -85, 15, -24, 17, 29, -1, -13, 11, 44, 33, 115, -36, -11, -39, 112, 27, 20, -11, 9, -5, -40, -21, 14, -31, -9, 28, -24, 22, 21, 19, -27, 19, 49, 9, 7, -79, 79, -81, -6, 48, -75, 72, -72, -62, 19, 4, 38, 18, -17, 54, 107, 60, 18, 14, -37, -9, 28, 52, 12, -33, 6, 50, 127, 42, -67, 46, 37, 43, -18, 20, 74, 17, -10, 56, -30, 66, 27, 36, 27, -24, -34, 55, 12, -32, -26, -46, 63, 21, -66, -14, 98, 16, -3, 12, 29, 28, 17, 58, -5, -2, 23, 8, -10, 0, -23, 29, 28, -79, -10, -21, 32, -15, -29, 47, 5, 31, -49, -44, 21, 58, 81, -92, 48, -13, 119, 52, -6, 19, 11, -26, 13, -57, 23, -16, 30, 34, 35, -10, -28, 4, -9, -6, -10, -47, -35, 7, -33, 28, -28, -3, -3, -3, 19, 11, 30, -7, -27, -14, 0, -90, 8, -62, -44, -13, -5, -2, -27, 1, 34, 67, 13, -37, -15, 32, 33, 15, 22, -113, 28, 18, -6, -27, 31, 46, 10, -24, 60, -2, -114, -7, 8, 8, 39, 14, 124, 55, -6, -30, 10, -35, -5, -18, -1, -11, -7, -11, -16, -51, 49, -30, 64, 3, -10, -38, 2, -3, -2, 27, 22, 15, 46, 41, 0, 6, 4, 54, 8, -5, 2, 7, -10, 108, -43, 11, -30, 15, -47, 51, 26, -21, 71, 22, -33, -54, -29, 120, 11, 106, 1, 10, 55, 53, 38, 11, 19, 42, 45, 5, 20, -39, 44, 120, -68, 51, 127, 24, 66, -28, 60, 8, 10, 32, 17, -8, 35, -6, -3, 57, -32, -8, -51, 8, 24, -63, 47, 28, 15, 18, -8, -70, 81, 10, -125, 13, -86, 62, 37, -27, 28, 127, -8, 18, 56, 6, -108, 22, -36, 10, 14, -10, -45, 19, 72, -27, -53, -12, 42, 6, 7, -2, 127, 1, -41, 13, 3, -81, -25, 1, -11, 45, -107, 62, 18, 54, 22, 4, 35, 34, -32, -120, -106, 18, 38, 100, 11, 29, -56, 116, -37, -23, 122, -1, -78, 31, 23, -4, -2, 42, -28, -57, 97, -63, 12, 56, -4, -127, -14, -45, 44, -65, 103, -52, -67, 7, -11, 23, -38, -32, -3, -4, -24, -38, 31, -20, 20, 42, -17, 79, 34, 29, 60, -71, 71, 49, 101, 35, 22, 19, -60, 40, 11, 25, -34, -102, 8, 62, -3, 17, -9, -57, 47, -26, -44, -29, -43, 89, 121, 19, 49, 71, 6, -61, 15, 100, -124, -20, 0, 37, -21, -56, 21, 59, 26, 15, -40, -34, 53, 11, 60, 15, 63, -3, -13, 16, -34, 57, -13, 61, -15, 38, -3, 33, 7, 36, -1, 72, -59, 18, -90, -6, 78, 67, 14, 20, 34, 37, -12, -47, -34, -123, 19, 53, -61, -4, -38, -37, 6, 4, 32, -46, -13, -18, 0, 27, -73, 27, -11, -47, 63, 24, 66, -124, -64, -5, 34, 6, 25, 44, 0, -42, -26, 39, 95, -25, -45, 87, 10, -33, -30, -18, -71, -3, 6, 31, -6, 10, -21, -60, 39, 64, 24, -11, 102, -20, 127, -70, -119, -69, 103, -17, 42, 6, -81, 43, 26, -12, -33, -72, 51, 55, 17, -57, -3, -12, -24, -22, -60, -18, -57, -22, 22, 32, 101, 40, -47, 47, -1, -38, -15, -56, 58, 57, -36, -7, 51, -6, -12, -66, 33, 73, 19, 26, -6, 77, 74, -46, -50, -16, 125, 47, -30, 41, 115, -91, -11, -4, -47, 127, -121, 112, -83, 25, 22, -32, 31, 6, -78, -84, -44, -15, -25, -1, 3, -50, -46, -5, -28, 64, -74, 94, 8, 16, 28, 30, 41, -11, -17, -4, 57, -69, -2, -32, -15, 12, 96, -96, -15, 61, -38, -5, -20, -37, 61, -63, -50, -60, 34, 44, 53, 37, 47, 18, 22, -24, -19, -54, -8, -7, -60, 56, 2, -41, -22, 70, 33, 83, -46, -71, 35, 124, 22, -38, -43, -70, 7, -62, -22, -51, 15, -46, -6, -25, -34, -54, 51, -22, -29, -13, 117, -53, 20, -9, 23, 27, -13, 127, 68, 11, 41, -31, 18, -50, -53, 29, -109, -2, -18, 13, -43, -125, 23, 15, -6, -25, -19, -95, 4, -106, 25, -24, -14, 21, -20, 28, 2, 38, -92, -86, 47, 22, 108, 29, 118, -17, 22, 3, 61, 4, -3, 28, -125, 10, 81, -6, -19, 22, 22, 75, 16, 20, -26, -14, 46, 89, 99, 29, 43, 20, 29, 87, -57, 108, 16, 39, 42, -39, 16, 69, -65, -11, 6, 12, -19, -6, -60, 11, -32, -21, -41, -23, -128, 50, -11, 24, -44, 17, 7, -1, -20, -91, 33, 47, 10, -6, 17, 57, 42, -30, -41, 12, -50, -4, 22, -16, -31, -21, 10, -69, 20, -29, -51, -32, -6, -15, -50, -1, 13, 9, 38, 33, 68, -12, 58, 115, 18, -68, 12, -127, -37, -8, 39, -4, -70, 15, 31, -3, -17, 58, -56, -19, 25, 3, -22, -92, 63, -4, 122, -56, -9, 55, 39, -80, -90, 40, 7, -6, 59, 26, 38, 0, -46, -60, 43, 34, -127, -71, 32, -17, 29, -80, -33, -11, -16, -7, 19, -5, 52, 25, -16, 13, 108, -13, 53, -28, 11, 106, 99, 35, -113, -103, 9, 4, -6, -67, 37, -22, 1, -13, -9, -34, -9, -7, -20, -12, 5, 84, 64, -35, -8, 48, 31, -20, 22, 61, 95, -55, 17, 32, -4, -57, -120, 5, 30, -31, 85, -27, 22, -8, 101, -121, 32, 33, -117, -48, -15, 18, 38, -13, -57, 30, 79, -127, -50, -108, -56, -126, -121, 6, 36, -12, -9, 2, 66, 85, 21, -48, -6, 14, 44, 18, 97, -127, -20, -128, -85, 31, 45, -54, 25, 22, -105, -127, 43, -10, -37, -28, 32, -126, -13, -14, 73, 90, 127, -28, -13, -73, 97, -49, -52, -17, -44, -9, -9, 11, -124, 0, -59, -69, -18, -27, 19, -25, -120, 56, -32, 23, 18, 41, -6, -2, -57, -76, -9, -13, 70, -86, -92, 6, 39, -109, 28, -14, 70, 37, 37, 53, 42, 90, 24, -15, -120, -14, -11, -10, 8, 22, -17, -61, -9, -19, 96, -128, -68, 93, 77, 6, 36, 30, -128, 39, 1, -6, 8, 0, 4, -83, -124, -86, 6, -103, -58, 43, 19, -2, -39, -109, -111, -41, -107, 37, 1, 30, -46, -28, -23, 61, 49, -38, 31, -35, -96, -126, -38, 54, -24, 28, 19, 66, -126, -79, -119, 37, 7, -14, 24, -27, -59, -113, 55, -56, -15, 24, -7, 5, 14, -92, -52, -43, 91, -23, 2, 93, -16, -93, -66, -34, -11, 46, -48, 3, -75, 47, 8, -17, -40, -87, 113, 121, -117, 19, 16, 74, 106, 29, -8, -1, 54, 8, 24, 33, 59, 64, 38, 68, -89, 72, -26, 9, -14, 20, -34, -85, 33, 33, 48, 17, 120, -11, 16, 19, 80, 37, -18, 11, 8, 8, 5, -41, -76, 7, 31, -42, -14, -6, -50, 114, 34, 45, -48, 66, 47, -8, 53, 53, -66, 15, -59, 2, 24, -49, -17, 14, -22, -62, 73, 20, 5, -55, 57, 83, 91, 59, -49, 22, 64, -44, -4, -60, -114, -88, -62, -23, 34, -29, 110, 123, 117, -49, 1, 124, -67, 123, -52, -45, 0, -27, 13, -76, -44, 11, -14, 16, -9, -92, 33, -72, -125, -1, -41, -122, 13, -56, -29, -44, -121, 27, -127, 9, 63, 47, -47, 23, -11, -2, -119, -39, -32, -61, -36, -11, -32, -27, 98, 61, -122, -84, -23, 106, 114, 42, 11, -29, -9, -74, 124, 15, -11, 29, 67, -9, 12, 31, 68, 23, 13, -60, -46, 40, -37, -41, -113, 70, 37, 7, 8, 92, 34, 46, -21, 0, 13, 63, -50, -57, 8, -22, 13, 35, -52, -35, -11, 24, -30, -47, -1, 56, -35, -11, -123, -26, 93, 4, -28, -28, -56, 56, -55, 26, 14, -41, -7, -14, -19, 35, 16, 21, -5, -19, -10, -26, -70, -5, 26, -5, 62, -15, -15, -97, 49, 56, 63, -30, 2, -103, 15, 22, -6, -30, 18, -55, 46, 16, -16, 41, 78, -18, -53, 21, -11, -73, 27, -4, -19, 27, -21, 37, 12, 50, 5, 0, 13, -26, -60, -39, -61, -24, 75, 36, -26, -28, 26, 18, 10, 25, -47, -4, 35, 7, 21, -3, -51, 28, 16, -23, -44, 15, -35, 89, -36, -81, 73, -7, 22, -34, 6, 24, -17, 72, 90, 92, -35, 43, -14, 20, -26, 104, 78, -22, 39, 29, 38, -29, 15, -24, 55, -23, -18, 10, 51, -12, 84, 22, -10, 10, 127, -27, 127, 17, 6, -6, 54, 0, 117, 49, 8, -13, 114, -15, -28, 4, 8, -28, -60, 125, -46, -60, -15, 10, 43, -23, -121, -27, 20, 50, 25, 72, 61, -98, 35, -21, 39, -7, 81, 27, 10, -23, 41, -123, 97, -76, 65, 10, 125, -120, -86, -73, -4, 73, 109, -126, 50, 94, -47, -74, -8, -83, -50, 1, 16, 46, -34, -62, 24, -25, -13, -58, -117, -108, -28, -8, 63, -10, 56, 25, -65, 41, 53, -46, -47, -109, 98, 7, 72, -7, -38, 47, -76, -126, 42, 124, -10, 65, -52, -62, -25, -108, -101, 14, 3, 75, -9, 4, 86, -124, -126, 72, 35, -2, 21, 26, -66, 43, 30, -123, -28, 46, 3, 29, -49, -96, -79, 40, -43, -98, 60, 27, -125, 72, 1, 63, -49, -3, 22, -49, 23, 27, -32, -20, -21, 52, -20, -49, -11, 0, 24, -4, 20, -67, 12, -23, 6, 17, 1, -10, -27, 5, -15, 3, -35, -5, 12, -14, -33, -20, 35, -68, -27, -66, -58, -14, 52, 40, -5, 38, 96, 32, 11, -47, 27, 0, 44, -30, -70, -23, -33, -46, -58, 66, -19, -14, 1, -24, 25, 12, -99, 30, 28, -14, 36, 19, 27, 10, 51, -47, -118, 11, -44, 16, 30, 14, -16, -12, -52, 1, 4, 4, 9, 27, -26, 47, 15, 7, -26, 11, 37, -30, 7, -22, -13, -87, -56, 118, -31, 12, -61, -65, 22, 127, -69, -111, 115, -57, 86, 121, 66, 108, 61, -64, 52, -25, 33, 45, -101, 123, -19, 20, -5, -34, 61, 62, -14, 63, 55, 18, -31, -89, -60, 68, 63, -31, -46, 44, -44, 23, -125, -23, -122, 103, 44, -102, -5, 124, -90, -71, 12, -5, 77, 40, -47, 54, 52, 47, 9, -53, -77, 33, -30, 23, 49, 39, -126, -34, 2, -33, -123, 30, 48, -69, 11, -87, -109, -60, 27, 30, -26, -26, -8, 56, 8, 0, 25, -1, 106, 1, -35, -98, 79, 20, -37, 0, -79, 64, -2, -99, -123, -65, 28, -31, -63, 48, 40, 68, 55, -32, -117, -2, -75, -67, 3, 111, -36, 7, -53, -63, 125, -73, 121, -74, -11, -63, -74, 54, -20, 21, -91, 118, 30, 16, -33, -128, 69, -3, -64, 19, -15, -100, -14, -127, -84, -86, 26, -37, -14, 13, -20, -46, 31, 34, 43, -4, 70, -128, -60, 19, -19, -75, 48, -79, 84, -34, 127, 14, -119, 82, 82, -63, 88, -28, -127, 59, -35, -127, 48, 11, -116, -126, -3, -110, 24, -78, -4, 46, -25, -76, -29, 53, 10, 47, 16, 46, 5, 34, -18, -45, -30, -2, 88, 68, -4, -40, -21, 24, -112, -115, -13, 5, -47, 21, -32, 109, -120, -51, -8, -47, 127, 66, 28, 4, -76, -22, -10, -4, -44, 5, -77, -12, 12, 35, 115, -92, -39, -123, 8, -106, 17, 124, 21, 9, 57, 42, -11, 49, 36, -115, 104, 18, -17, -20, -63, 47, 29, 19, 22, 82, -73, -128, -66, -102, 18, 20, -74, 58, -22, -115, -121, -121, -66, -74, 4, -25, -34, 67, 42, -3, 0, -68, 50, 16, 47, 74, 30, 125, -49, -14, 105, -32, 97, -30, -67, -20, 10, 15, 4, 2, -18, -62, -43, 15, 8, -61, -4, -33, 7, -46, 71, 46, -5, 66, -24, -1, 86, -99, 27, 78, 41, 15, 14, 5, 100, 58, -50, -32, -35, -32, 89, 32, -93, -7, 69, 18, -43, 36, 97, -29, 68, 41, 77, -25, 65, 67, 89, 20, 25, 28, -35, -16, -10, 125, 101, 126, -53, 39, -112, 120, -23, 8, -10, 9, -38, 43, 4, 127, 43, 51, 86, 5, -79, 38, -14, 36, 9, 29, 46, -9, 7, 34, -31, -89, 28, 18, 50, 84, -67, -12, -12, 23, -91, -95, -28, -82, 44, -40, 10, 1, -10, 0, 12, 46, -5, -40, -76, 11, -27, -42, -22, -5, -71, -39, -89, 96, -56, -89, 21, 73, 72, 1, 15, -122, 73, 13, -31, -16, -57, -27, -10, -27, -51, -71, -18, -48, 0, -5, -37, -6, 81, -7, 19, -25, 13, -28, 24, -82, 90, -73, -66, 38, -11, 17, 19, 65, -30, 80, -23, -68, 65, 16, 18, 66, -17, -58, -52, -71, 14, -1, -2, 39, -2, 55, 10, 21, 10, 3, -110, -53, -10, 39, 36, 84, -45, 41, 28, -10, 22, 35, 8, 23, 32, -40, 37, 34, 39, 15, 7, 22, 70, 35, 18, -40, 5, -8, 33, 31, -36, 8, -6, -24, 25, -23, 6, 12, -79, -16, -21, 126, 54, 7, 4, 66, 18, -22, -4, 35, 40, -40, 68, 41, 13, 43, -8, -7, -34, 39, 21, 24, 6, 32, 16, 5, -38, -126, -36, 26, 61, 61, -1, 78, -35, -19, -44, 30, 12, -40, 12, -3, -13, -12, 48, 32, 32, 42, -4, -18, -26, 22, 11, -108, 88, 82, -39, 65, 39, 35, -16, -95, 29, 63, 104, -17, -18, 12, 33, -81, 1, 103, 16, -39, 31, 6, 44, -102, 97, 10, 48, -38, 124, 34, 10, 23, -66, -35, -102, 19, 81, 87, 34, -27, 44, -14, -44, 1, -25, 27, 125, 10, -110, -27, 5, 2, 10, -60, -28, 15, -75, -13, 52, 29, -17, -47, 10, -15, 98, 43, 1, -25, 37, -110, 76, -20, 24, 20, 24, 45, -50, -35, -10, 80, -17, -62, 47, 17, -31, 16, 2, 77, 94, -108, -43, -12, 44, -124, -31, -15, -78, -84, -114, 97, -47, 91, 33, 23, -104, -24, 127, 28, 61, -109, -53, 68, -26, -108, -12, -88, 75, -10, 87, 99, 28, 32, -125, -48, 121, -70, 56, -61, 37, -90, 123, 87, -43, 3, -14, 96, -6, -4, 91, 35, 11, 66, -38, -108, -21, -7, -5, 96, -34, -52, 69, 28, 33, 82, 22, 36, 19, 6, 10, 47, 86, -122, -11, -13, -66, 41, -24, 22, 89, 66, 24, -24, -11, -25, -28, -67, 113, -110, -128, -109, -69, 102, 114, -8, 19, -51, -12, 120, -78, 41, 9, 125, -118, -11, -7, 60, 0, -68, 28, 124, -14, 50, 24, -37, 56, -21, 6, 26, 53, 0, 19, 19, -30, -60, -53, 52, -26, -6, -19, -48, 37, 20, -17, -9, -22, 69, 31, -27, -10, 7, 25, -65, -52, 39, -40, -80, 29, -32, -78, -4, 13, -26, 22, -45, 94, -24, 1, -12, 17, 73, 116, -34, 69, -39, -7, 7, -57, -45, 38, -70, 62, 7, -12, 55, -35, 66, 48, -21, 48, -5, 98, -114, 81, 14, -127, 25, -17, 78, -53, 124, 12, 65, -23, 15, -42, 79, 7, 0, 45, -20, 62, -20, 25, 35, -34, -34, -104, 70, 74, 79, -26, -16, -114, 31, 79, -23, -18, 15, 119, -110, -54, -83, -7, -8, 57, -50, 3, 12, 48, -6, 23, -111, 9, -54, 19, -4, 14, 19, -26, 37, 84, 36, -12, -16, 39, -95, -65, -20, -23, -15, -7, -24, -3, 0, 75, -23, 13, 6, 119, 5, 65, 9, -90, -112, -22, 30, 54, 26, -58, 39, 116, -37, -22, -54, 44, -1, 40, -31, 6, 41, -35, 48, 79, -86, 26, -8, -12, -10, -4, 77, 59, 2, 58, -84, 14, -85, -7, -11, -22, 5, 3, -110, -53, -127, -23, -3, 93, 11, 19, 19, 13, -126, 29, 14, -28, 42, -33, -50, 35, 94, 3, -56, -88, -115, -9, -127, -74, -83, 34, 26, -21, -6, -5, -73, -10, -25, 68, -77, 35, -5, -114, 58, -64, 21, 2, -7, -111, 26, 1, -80, -35, -116, -124, -40, 87, 58, -30, 18, 121, -125, -25, -20, 64, -3, 3, -44, -24, 59, 125, 10, 29, 26, 33, -7, -43, -42, 88, 44, 26, -84, 1, 5, -65, -50, -31, 100, -27, 37, 28, -14, 6, -61, -14, -106, -6, 16, 86, -124, -9, -91, -33, -27, -122, -28, -8, -32, -99, -75, -1, 22, -69, -33, -1, -45, -24, 38, -44, 45, -51, -127, -5, -4, 111, -119, 3, -106, -84, -1, 30, -6, 16, -11, 18, -28, 18, -11, -20, 48, -65, -29, -63, -104, 16, 60, -18, 6, 6, -63, 6, 28, 16, -28, 14, -5, -25, 2, 3, 68, 80, -18, 101, -51, -126, 56, 61, -22, 37, 1, 106, 4, -14, 18, -12, 13, 77, 13, -47, 36, -31, 10, 12, -15, 5, -7, -7, -17, 7, -46, 5, -21, 81, -19, -31, -103, 63, -27, -32, 3, 120, 65, -21, 35, -12, -34, -26, -1, -33, 26, -5, 35, -41, -13, -27, -78, 19, -5, 15, -43, 9, 22, -12, -64, -39, -16, -49, 106, -13, 13, -6, -18, 0, -38, 12, 5, -44, -26, 116, -63, 76, 41, 19, -47, 1, -5, 39, 1, 110, -11, 59, -31, -33, 13, -31, -31, -43, -51, 48, -3, -76, -49, 10, 94, 11, -18, -1, -31, -94, 14, -17, 35, 3, 55, 8, 46, -23, 31, -4, 31, -15, -41, -50, 19, 47, -35, 80, -89, 27, -36, -12, -32, 49, -64, -68, 62, -75, 11, 15, 9, -29, 3, 30, -36, 8, -57, -40, 50, 19, 59, 39, -23, -60, 4, 2, -4, 3, -28, -2, 125, 10, 5, -21, -77, 42, 71, 20, -18, 17, -8, -24, 20, -17, 73, -30, -34, -71, -68, 40, 1, -1, 30, 47, -16, 84, -16, 16, 99, -13, -1, 4, 127, -37, 15, 15, 27, 35, 1, -23, 8, -10, -5, 48, 22, 9, 120, 110, -56, 6, -52, 67, 110, -32, 47, 21, -42, 39, -34, -2, 0, 8, 32, -11, 1, -8, 29, -34, 44, 50, 1, -8, -44, -32, 61, 40, 24, -17, -4, -21, 10, 22, 28, 51, 31, -34, -56, 22, 0, -9, -17, -5, -48, 2, 34, -3, 37, -23, -8, -6, 6, -105, -21, 14, 3, -53, 10, -12, -47, 51, -15, 17, -45, 20, 25, -19, 17, 10, 6, -59, 5, 35, 25, 39, 10, 59, 63, 5, -22, 59, 96, 22, 43, 33, -13, 10, -37, -20, 14, -41, 9, 25, 40, 39, 32, -27, -45, -43, 8, 28, -25, 19, 12, 22, 31, -76, -46, -30, 32, -5, -103, -11, 0, -19, 109, -115, -38, 31, -54, 76, -48, 9, 81, 38, -80, 8, -56, -44, 117, -123, -69, -85, 3, -47, -42, 87, 40, 64, 124, -84, -128, -105, -41, -122, -38, 18, -21, -90, -64, 19, -34, -78, -125, -51, -20, -7, -51, -126, 9, 13, -29, -114, 61, 126, 13, -54, 83, 21, 5, 30, -27, -113, -83, -54, -65, -66, 17, -15, -86, -127, -36, 20, 19, 17, -58, 37, -13, -24, -22, -125, 81, 12, -11, 84, -80, -127, -38, -73, 43, -37, -30, 53, -114, 56, -2, -52, -40, 8, -12, 17, -77, -89, 46, -13, 17, -95, -73, -27, -32, 31, -115, -66, 24, 27, -3, 0, 27, 71, -72, -36, 37, -10, -73, 15, -35, 14, 7, 60, -17, -63, -11, 0, -103, 23, -94, 82, 20, 71, 7, -38, -51, 18, 5, 99, -47, -114, 7, -38, -58, 18, 31, -33, 13, 8, 62, -21, 109, 47, -126, -10, 71, -12, -7, 11, -2, -5, -2, 121, 94, -53, -9, -25, -20, 30, -7, -127, 67, -84, -118, 22, 34, -32, -106, -90, -91, -29, -75, -21, 85, 0, -61, 2, -58, 16, 14, 68, 99, 5, 50, -12, -11, -5, -15, -37, 10, 20, -29, 25, 20, 43, 24, 93, -18, 5, -12, -20, -13, -21, -78, -68, -5, 82, -43, 13, -49, -26, -11, -12, -40, 40, -12, -53, -21, -23, 41, 94, -41, -42, -96, -32, -62, 11, 116, -9, 18, 24, -64, -97, 8, 71, -117, 37, 40, 34, 5, -48, 49, -7, -59, -16, 36, -58, 54, -38, -37, -68, -2, -33, 23, 9, -53, -126, -91, -87, -49, -126, 42, 29, 52, 69, 35, 54, -11, 55, -5, 40, 6, 62, 2, 28, 20, 28, 0, 16, -53, -48, -7, 57, 11, -17, 2, -89, 1, 42, -77, 31, 10, 47, 97, -52, -45, 37, 70, -37, -85, -37, -11, 6, 68, 127, 2, -17, 28, 6, 35, -9, 27, 34, -25, 17, -45, 46, -32, 98, 55, -18, 25, -8, 1, 7, -24, 2, 64, -6, -48, -49, 57, -37, -64, -4, 1, -81, 58, -44, 44, -40, -27, -52, 69, 8, -8, 7, 7, -62, -25, -1, -69, 117, 16, 15, 39, -22, -5, 12, 6, 126, -6, 0, 16, 24, -60, -28, -3, -8, 66, 53, 15, 72, 23, 71, -45, -105, 2, 26, -111, -82, -69, -9, -83, -5, -22, -120, 118, 94, -15, 125, -40, -81, -35, -6, 16, -51, 119, 28, 40, -127, 18, 8, 42, 22, -125, 36, -30, -58, -62, 48, -1, -96, 57, 86, -28, 4, -26, 87, 14, -41, -39, -45, 11, 41, 55, 86, 33, 30, 74, -18, -24, 23, 5, 30, -25, 38, 34, -60, -75, 3, 84, 18, -29, -96, 9, -12, -6, 1, -21, -4, 62, 33, 21, -18, 71, 65, 9, -46, -19, 31, -24, 5, 57, 47, -1, 32, -27, 22, 16, 51, 38, -54, -61, 26, -17, -10, -1, 20, -44, -27, 15, 16, -22, -36, 26, 18, 6, -3, -34, -57, 32, -11, 40, -51, 11, 89, 51, -10, 25, 18, -117, 61, 54, 35, -61, 21, -39, -3, 23, 65, 55, -8, -21, 44, -61, -41, 6, 3, -5, 4, -7, 0, 89, 9, -10, -65, 64, -12, 23, -34, 11, -29, -92, 7, -90, 50, -92, 53, -37, -31, -6, 59, -15, 4, 18, -29, 70, -55, 53, 13, -8, -121, -7, -33, 10, 28, 8, -17, -26, 14, -23, -71, -7, -51, 86, -4, -12, -21, -3, 33, 19, 19, -39, 12, -69, 51, 24, -96, 8, 107, -17, -41, 105, 11, 16, -17, -71, 4, 65, 0, 29, 87, -24, 89, 90, 73, -20, 18, -9, 48, -55, -22, -1, -43, -26, 47, 1, 79, 13, 68, 18, -11, 90, -3, -11, -19, 20, 107, -1, -8, -45, 4, 31, -5, 9, 41, 9, 71, 42, 79, -1, 6, -20, 13, 2, 5, -8, -10, -11, -25, -35, -19, 15, 26, -10, 47, -14, -37, 5, 10, -21, -21, 98, -4, 62, -14, -30, -12, 25, 35, 39, -79, 25, -61, -21, -4, -79, -20, 36, -98, 82, 3, -2, 36, -2, -23, -1, -39, -20, -84, 49, 104, 10, -32, -35, -20, 19, 51, -16, 10, 24, -87, 90, -25, 0, 9, 25, 32, 37, 40, -51, -16, 24, -4, 4, -39, 49, 54, 48, -3, 44, -38, 12, 98, 28, -40, -79, 41, 41, 17, 123, 34, 25, 27, -49, -48, -29, 51, 16, 19, -39, 57, 87, -18, 30, -22, -98, -45, 56, 18, 30, -6, -39, -64, 57, -109, 36, 15, 37, 0, 42, -15, -75, -13, 5, 42, -54, -18, -118, -28, -101, -5, -78, -9, 43, 66, -24, 8, -22, -20, -47, 12, 42, 30, 23, 6, -19, -9, 15, 44, 58, 31, -44, -21, -25, -69, 26, 3, 57, 0, -4, 12, 29, 39, 18, 14, -2, -81, 8, -26, -66, -2, -3, 14, 3, -19, -27, 65, 17, -29, -20, -24, 40, 35, -89, -8, 24, 57, 37, 31, -54, 16, -40, 13, 106, -18, -14, -36, -18, 17, 88, 44, -7, -21, 18, 28, 35, 16, -3, -18, -9, 16, -1, 36, 16, -31, 37, 49, -48, -33, 32, -12, 12, 25, -121, 92, 6, -1, 19, 22, 18, -7, -15, 28, -7, -79, 69, 35, -62, 113, -28, 52, -39, -24, 27, -11, 14, 33, 21, 40, 20, -4, 4, 4, -29, 74, 49, -5, 8, -3, -48, 25, 23, -34, 64, 11, -15, -29, 38, 12, 86, -27, -18, -36, -46, 15, 42, 40, 12, -38, 51, -4, 30, -17, -37, -63, -16, 35, 9, 26, 40, 60, -19, 19, 6, -9, 31, -13, 9, 5, -22, -32, 93, -54, -43, 65, 31, 37, -60, -6, 10, 11, 127, 32, 42, -58, -88, 32, -19, 109, 29, -27, -50, -51, 63, 40, -52, 6, -20, -10, 23, -17, 78, -3, -27, 59, 31, 26, 26, 21, 31, -72, -38, 80, -29, 9, 51, -76, -114, -38, -19, 59, -54, 27, 43, 0, -8, -60, 11, -1, 19, 18, -70, -78, 117, -47, -65, 15, 56, 31, 4, 52, 38, -14, -36, 67, 16, -20, 12, -88, 35, 18, -127, 15, 44, 125, -24, 56, 19, 20, -1, 47, -124, -1, -31, 83, 1, -15, -125, 23, 70, 53, -61, 67, 36, -16, 24, 31, 42, -25, 35, -25, -53, 22, 49, -19, -12, -67, 23, -72, 20, -24, -118, 1, -9, -16, 8, 68, 10, -5, -10, 35, -48, -66, -11, 87, 55, 3, -28, -53, -11, -3, -13, 3, 117, 12, 15, -51, 5, -69, -48, 31, 10, 14, 12, 1, 25, 113, -74, -28, -36, 37, 14, 14, 2, 1, -15, -31, 19, 21, 22, 20, -19, -10, 81, -44, 30, 9, -122, 30, 24, -24, 28, 4, 31, -4, -29, 87, -18, 25, -21, 3, -56, 58, 39, 89, 34, 33, 10, -29, 29, 123, -88, -6, 19, 10, -42, -25, 47, -47, -120, 89, 17, 73, -33, 31, -118, -12, -10, -47, 6, 74, 116, 23, 94, 22, 69, 113, -4, 111, 68, 15, 56, 65, 51, 98, 31, -14, 119, -3, 26, 62, -9, -88, -21, 77, 62, 0, 86, 92, -17, 101, -30, 38, 53, -72, -38, 52, -42, -15, 35, -6, -7, 70, -25, 67, -42, 52, -83, 44, 2, -56, 60, 105, 116, -48, -29, 126, 76, -85, 42, 122, 118, 67, -4, -5, 5, 5, -37, -29, 20, -34, 31, 117, 27, 75, 88, 38, -32, -80, 26, -29, 113, -60, 6, 64, 45, -49, -24, 16, -18, 119, -102, 5, -26, -25, 7, 26, 106, -75, 21, -56, 74, 105, 89, 77, 109, -41, 114, 62, -6, -2, 125, 10, 87, 46, 71, -48, 22, -27, -15, 75, 127, -55, 36, 25, 6, 67, -28, -9, 20, -4, 80, 14, 79, -10, 37, 49, 11, -31, -22, 54, -109, 8, 20, 36, -29, 15, 73, 102, -56, 19, -10, 49, 33, 72, 15, -12, -57, 25, 120, -54, -86, 36, 60, 46, -71, 51, 15, -16, 14, -87, 10, -41, -50, -19, 29, 2, 22, -8, 41, -47, -5, -5, 30, -71, 51, 14, -39, 48, -1, 69, 36, -45, -57, -20, 53, 23, -15, 44, -19, -38, -75, 90, -2, 49, -9, -22, -2, -8, 22, 37, -50, 95, 57, 34, 77, -35, -81, 46, -34, 25, -4, -12, 29, 71, -32, -66, 0, 48, -39, 22, -30, 10, -53, -11, 16, -32, 26, -13, -42, 18, -8, 76, -44, -51, -66, 6, -30, 25, 0, -2, -77, -26, -8, 42, 41, 28, -23, -46, -16, -63, 37, -57, 7, 50, 7, 30, -22, -34, 4, -35, 70, 19, -22, 43, 33, 20, 58, 4, -62, -8, 38, -25, 74, -43, 10, -57, 121, 88, 6, -18, -16, 13, 1, 49, 73, -34, -17, -52, 32, -59, -1, 19, -14, -38, -72, -23, -39, -25, -54, -97, -13, 64, -31, -33, -33, -7, -58, -15, 24, 34, -32, -34, -35, -50, -89, 10, 1, -12, -7, 120, 28, -41, -8, 81, -35, 65, 4, 45, -10, -56, -11, -26, 13, 23, 45, -63, -65, 6, 40, -18, -10, 7, 2, -67, 5, 31, -34, -32, -9, 55, -4, 28, 75, 20, -56, -15, -21, -123, 88, -24, -16, 6, -21, 7, 14, 15, -112, -38, 35, -42, -33, 30, 122, -58, -7, -23, -10, 10, 27, -32, 8, -112, 3, -67, 11, 27, 21, 0, -41, -5, 51, -51, -2, -29, -55, 23, 8, 87, 9, 71, 25, -53, -65, 84, 19, 52, -21, 22, 124, -49, -3, -117, -34, -82, 45, -2, -3, -50, 51, -20, 11, -6, 88, -3, -16, 25, -4, 14, -88, -83, -3, 43, 69, 4, -43, 2, -73, -26, -74, -57, -33, -104, 14, -25, -90, -126, 9, 97, -48, 15, 29, 11, 18, 43, 2, 14, -39, -75, -28, 12, 10, -9, -6, -43, -64, -9, -26, 47, 36, 58, 10, 45, 23, -21, -22, -30, 38, 5, -2, -56, 52, 16, 19, 55, 33, 2, -26, 7, -46, 24, 27, 46, 16, -2, -85, -61, -12, 17, 33, -33, 26, 12, -44, 30, -38, 20, -13, 13, 42, -61, -30, 25, 30, 41, -16, 1, 12, 5, -7, 68, 22, 1, -53, 40, -42, -16, 36, -63, 20, 57, 4, 12, -49, -56, -17, -65, 58, -56, 92, -28, 2, 30, 11, -53, 8, 8, 28, -53, -60, 51, 62, -110, 32, -85, -9, -92, -47, 73, 70, 47, -28, 102, -31, 14, -14, -10, 57, 2, 26, 109, -17, 46, 71, 13, -60, 12, -21, 3, 13, 25, -24, 1, 19, 52, -27, 2, 67, -56, 102, -5, 38, -23, 19, -29, -114, -63, 27, 26, -14, 9, -14, 15, 2, -18, 53, -8, 10, 66, 15, -60, -118, -55, 28, -54, -95, -2, 39, 88, -1, 57, 60, -11, 63, 25, -11, 110, 32, 47, 3, -42, 15, 74, -36, 0, 8, -49, 6, 71, 39, 13, -104, 25, 110, -39, -66, 37, -30, -89, 51, -86, -21, 67, 8, 2, 88, -18, -69, -76, 10, 75, 32, -112, -61, 50, 49, 19, 27, 119, 41, -81, 31, -124, 51, 39, -49, 87, -10, 3, 31, 123, -47, -41, -34, 18, 31, 33, -24, -62, -59, -37, 107, -3, 37, 39, -32, -77, 4, -47, 6, -55, -4, 45, 38, -50, 8, -9, -23, 77, -59, -13, -7, 80, 10, 127, -45, -121, -8, 88, 22, 12, 33, 75, 17, -69, 13, -31, 37, 47, -2, 27, -7, -39, 35, 22, -83, 0, 61, 12, 9, 0, 28, 13, -3, 11, -13, -16, 83, -11, -23, -80, -9, 59, -24, -2, 32, 20, 37, -51, -12, -41, 30, -57, 34, -102, -91, 118, 3, 29, 25, 33, -34, -50, -1, -120, 10, 2, 19, 12, -44, -23, -57, 27, -61, -11, 60, -4, 116, -25, 39, -9, -29, -103, 33, -23, 13, 10, -17, -6, 21, 52, -15, -22, 19, -31, 48, 64, -69, 23, 2, 19, 87, -43, -78, -84, -33, 19, 33, 71, 28, 43, -37, -51, 70, 9, -4, 10, 27, 56, -16, 28, 19, 10, 10, 8, 46, 12, 81, -16, 120, 1, -12, -15, -7, 34, -55, -57, 93, 101, 67, -68, -3, 64, 54, 14, 29, -40, 15, -35, 24, -83, -68, 119, -66, 50, -67, 0, -48, 62, 15, 117, 26, 41, -12, 29, 49, 65, -59, 44, -79, 63, -65, 19, -78, 30, 36, 33, 63, 14, 127, 5, 22, 13, -6, -45, -66, -2, 4, -3, 2, -34, -41, 50, -31, -22, 50, -45, 67, -19, -47, -14, 123, -12, 36, 23, 11, -110, 46, 12, 92, -4, 86, 88, -23, 51, 34, 21, 50, -87, 35, 87, -3, 15, -37, 24, -23, -15, 1, 109, -43, 70, -109, -43, -23, 110, -113, -114, 29, -61, 68, 31, -16, -13, 10, -59, 1, 77, -56, 13, -8, 50, 30, 27, -58, -100, 6, -30, 1, 11, -7, 78, 8, 37, 44, 21, -61, 59, -33, -11, -75, -44, 17, 17, 13, -9, 4, -31, 70, 71, -88, 57, 26, 40, -39, 46, 41, -40, 45, 5, 11, -59, 31, 27, 35, 53, 70, -31, 14, -30, 16, 117, -24, 51, 16, 45, 127, -38, -48, 9, -32, 51, -18, 17, -70, -23, 5, -11, -65, -8, -22, 32, -67, 22, -3, 0, 112, 23, 5, 61, 9, -10, 22, 32, -10, 34, -27, 17, 0, 37, 37, 110, 20, 41, 85, 4, 61, -9, 24, -39, 46, 41, 35, -9, -59, 44, -2, 9, 19, 82, -66, 23, 80, 6, 40, 15, -31, 55, 59, -51, 107, 16, -24, 2, 37, -4, 71, 38, 16, 53, 23, 32, 8, -24, 20, -13, 40, -122, -26, 2, -5, 50, 105, 48, 47, -29, 22, 40, 38, 19, -33, 54, -65, 3, 16, 31, 85, 63, -58, 35, 33, 11, -3, -51, -50, 31, -4, 38, 55, 63, 15, 38, -82, -4, -3, 53, -5, 98, 15, -20, -61, -2, 69, 81, -30, 15, 1, 17, -78, -88, 58, 65, -87, 44, -80, 31, -10, -19, 5, -104, 27, 8, -71, -7, -63, 38, 58, -29, 2, -25, 16, -14, -5, 5, -26, -48, 7, 22, 15, -50, -73, 24, -6, -88, -6, 53, -49, 3, 0, -7, 18, 13, -1, -112, 15, -85, 28, 31, 53, -20, -57, -10, -28, 1, -12, -34, -14, 45, -13, -13, 74, -36, 5, -73, 28, 10, -18, 2, 3, -37, -57, 63, -75, -59, 33, -7, 53, 48, -7, 114, -29, -38, -4, 12, -121, -53, -36, 42, 38, -6, 105, 58, 57, -32, -14, -50, 87, -84, 31, -56, -35, 68, 21, 6, 79, 49, 2, -8, 9, -42, -14, -125, 16, -45, 48, 125, 15, -9, -19, 49, 64, -30, 11, -67, -38, -125, -57, -19, 66, -8, 13, -52, -72, 0, -4, -52, 109, 92, 15, -61, 51, 36, -41, 26, 60, -59, 4, 17, 72, -2, 48, 29, -11, -15, -7, -2, -23, -9, 16, 2, 14, -18, -1, 92, -111, -2, -9, 14, -17, -21, 23, 30, -4, 51, 53, -38, -20, 3, 47, -76, -10, 14, -105, -94, -8, -5, 16, -1, 41, 24, 38, -10, 31, -109, -16, -4, 39, -46, -33, -20, -14, -39, -49, -13, -7, 0, 31, 19, 7, -9, -12, 17, 26, 16, -120, 6, 25, 39, 45, 24, -29, -34, -20, 16, -64, -14, 2, -48, 53, 15, -17, 5, 30, 14, 127, 8, -49, 62, -89, 42, 66, 16, -14, 0, 30, -12, 10, -49, 36, 36, -47, -35, -8, 39, 54, -24, 15, 57, -63, 12, -5, -46, 1, 96, -119, 14, 4, -48, 17, -123, 81, 1, 113, 89, 20, -39, -13, 34, -39, 52, 11, 35, -23, 34, -25, -4, -9, 10, 23, 30, 27, 20, -30, -1, -29, 24, -27, -37, -10, -15, -57, -31, 22, -32, 75, 45, -35, 42, 3, -32, 76, 21, -38, 14, -52, -9, 5, -62, 35, -23, -33, -64, 42, 57, 45, 18, 10, 58, 50, -1, 11, -79, -14, 59, -61, 14, 58, 26, -21, 62, -44, 20, 15, 2, 77, 42, -14, 20, 108, 27, 7, 3, 48, 62, 0, 15, -33, -13, -49, 29, 66, -66, 56, -127, -1, 10, -14, -64, 32, 1, 0, -34, 73, 82, 67, 85, -93, 29, -26, 9, -74, -50, 20, -29, 40, -24, 70, -105, 51, -18, -23, -40, 2, 39, 105, -33, -82, -18, 127, 72, 6, 42, 59, -80, 1, -22, -4, 36, 52, 117, -96, 123, -14, -84, 33, -58, -18, -24, 41, 17, -15, -70, -30, 42, -5, 21, -69, -83, 107, 96, 122, 70, 60, -109, -68, 21, 51, 90, 93, -34, -5, -13, -13, 77, 76, 70, 85, -56, 50, 5, -124, 0, 13, -40, 57, 7, -23, -21, 20, -25, -87, 23, -53, -19, -41, -27, -3, 37, 65, -33, -30, 42, -75, 15, 15, 76, 25, 37, 28, -60, -54, -99, 35, -53, -19, 4, -69, -46, 5, 25, -33, -31, 49, 16, -58, -23, -6, 53, -14, 68, 47, -35, -4, -13, 3, 81, -16, -64, -37, 5, -4, 4, 33, -55, 29, 31, 44, 5, 13, 77, -24, -31, -56, 15, 41, 80, -35, -3, 24, -101, 30, 17, 63, 64, 16, -17, -20, -6, 11, 4, 1, -35, -79, -3, 42, 46, -26, -29, -11, -85, -62, 58, 8, 6, -61, 6, -123, 11, 0, -89, -121, -55, -123, -24, 5, -81, 6, 123, 32, -62, -82, 2, -89, -74, -48, -109, -6, 42, 20, -121, 34, -117, -3, 42, -71, 82, 70, -88, 20, -3, 9, -69, 11, 56, -23, -66, -49, 9, -121, -127, -124, 2, 10, 17, -60, 49, 30, 74, -40, 45, -87, 68, -7, 74, -26, -25, 0, -119, 14, -5, -16, -103, 77, -31, 16, 43, 5, 53, -58, 35, 50, 72, -38, -121, 48, 70, -29, 33, -30, 36, 36, -61, 28, -18, 37, 104, -126, 44, -122, -120, -12, -13, -122, -33, -86, -122, -86, -69, -30, -20, 70, -60, 47, -52, -87, -51, 20, 125, -34, 106, 28, -71, -34, 64, -66, -36, -97, -81, -127, 34, -93, 42, 115, -23, 2, 32, 66, 100, -32, 70, -44, 16, 52, 4, 24, -60, -126, 9, -122, -126, -118, -96, 2, -4, -50, -30, -117, -67, 34, -57, -1, 12, -70, -82, 17, 53, -39, 11, -88, -3, 35, 127, -77, -33, -21, 75, -30, -47, 80, 35, -35, 95, -118, 22, -12, 11, -7, -124, 127, -67, 64, -37, -47, 14, -21, -20, -10, 11, 20, 18, 11, 24, -62, 18, -56, -24, 14, -9, 9, -126, -56, -39, -3, -47, -35, 12, -23, -8, 10, 120, -21, 63, -36, -44, 72, 69, -101, -2, -16, -102, 9, 9, 5, -100, -51, 116, -90, 42, 17, 43, 50, -64, -78, -82, -12, -107, 124, 50, -24, -14, -47, 11, -57, 43, 125, -49, 3, 38, -4, -46, 46, 32, 20, -65, -27, -83, -6, -5, -36, -2, 2, -16, 23, -31, 3, -73, 57, -75, -94, -24, 5, -13, 15, 9, -12, -5, 8, 5, 18, -37, 104, -50, 24, -81, 91, 33, -76, 10, 29, 45, 19, -25, -86, -15, -81, -19, 62, 20, 41, 34, -11, -37, 45, 88, -126, 77, 77, -63, -4, -12, 28, 39, 63, 53, 12, 51, -51, -13, -56, -117, 17, -27, 23, -66, 41, -29, 77, 65, 62, 105, -51, -67, 24, 92, -118, 60, -6, -14, -23, -57, -35, -11, -45, 19, 120, -42, -85, -51, 20, 120, 26, -24, -71, 92, -49, -11, 17, 34, 24, 64, -23, 27, 29, -29, 6, 39, -61, 7, 47, 9, -10, -10, -100, 67, 70, -64, 99, 57, 67, 17, -20, 58, 28, 15, -43, 57, 14, -97, 7, 89, 18, 24, -99, 9, 10, -27, 46, -48, -124, -81, -41, 19, -32, -75, 4, 80, 58, 83, 59, 65, -26, -11, 42, 17, -64, -69, 1, -106, 28, -38, 54, 22, 7, -10, -10, -1, -46, 109, 27, 13, 6, -43, 5, 10, 17, 7, 65, 39, -80, 33, 93, -53, -107, -36, -3, 0, -61, 87, 69, -121, -83, 26, 33, -62, 73, -77, 26, 125, -29, 31, 108, -120, 40, -22, 104, 10, 117, -88, -10, -29, 12, -4, 20, -39, -81, 51, -68, 41, 70, 9, 3, 63, 35, -14, 15, -51, -44, 1, -41, 42, -18, 90, 0, 6, 28, -41, 19, -36, -49, -34, 75, 19, -8, 18, -2, -9, 46, 22, -22, 47, -8, 35, 22, 0, -19, -6, 1, 1, 39, 8, 64, -26, -42, 16, -15, -16, -6, 8, 3, 39, -6, -1, 31, -20, -51, 46, 32, 17, -50, -38, 64, -18, -69, -3, 8, -24, -15, 30, 59, 31, -12, 9, 27, 56, 7, -32, 10, 7, -20, 11, -62, 13, -4, -37, 6, -36, -63, 29, -10, 9, -4, -35, -16, -36, 18, -18, -23, -57, -16, -38, 19, 21, 72, -45, -73, 16, -19, -7, -17, 70, -45, 13, 46, -29, -12, -3, -2, -54, 122, -5, 91, -119, 4, -23, 39, -1, -53, 19, -5, -76, 19, 22, -5, -44, 32, 51, 45, -14, 30, -51, 18, 106, -18, -33, 43, -15, 9, 38, -22, 23, -104, 80, 19, 64, -11, 6, 10, -70, 71, 97, 40, -49, 14, 31, 35, -126, -5, -8, 15, 47, -20, -13, -4, 21, 14, 46, 18, -77, 34, 17, 0, 27, 32, -33, -5, -5, 4, 118, -15, 9, -10, 60, -16, -15, -48, -6, -86, 92, -25, -8, -24, 6, -4, -28, -17, 40, 116, -42, 21, -26, -15, 22, -14, 42, -12, 20, -37, 49, 53, -30, 11, 76, 65, -104, 50, -45, -26, 10, -127, -9, -40, 10, -14, -53, 8, 56, -48, 26, 14, -7, 19, 55, 5, 28, -30, -3, -44, 30, 68, 43, -16, -14, -4, 26, -74, 71, -35, 49, -56, -1, 7, -30, 62, -95, 33, -9, -37, 74, 36, 49, -18, -16, 10, 54, -11, -13, -45, 2, 25, 8, -12, 20, 91, 8, 16, 8, -39, 20, -3, -17, 43, -8, 19, 3, -25, -3, 16, -1, 26, 39, -15, 6, 25, -43, -17, -65, 46, -39, 61, 21, -21, 29, 65, -56, 0, 93, 15, 17, 1, -40, 43, 11, 36, 35, 31, -20, -66, -28, -6, -6, 89, -35, -41, 121, 17, -4, 71, 76, 19, -54, 18, 21, 10, 6, -44, -34, -14, 25, 4, 50, -92, -53, -61, -4, -38, -15, -5, -37, -8, -28, -77, -11, -105, -64, -8, 53, -44, 5, 8, 30, 25, 8, 30, -26, 68, -62, 52, -7, 66, -101, -3, -1, -24, -49, -56, -105, -121, 47, 31, 58, 2, 19, 40, -14, -22, -1, -24, -14, -51, 59, -19, -21, -47, -84, 15, 9, -30, -84, -120, -114, -52, 120, -47, 2, 81, 0, 19, -32, 16, -3, 4, 25, 56, -127, 3, 49, 21, 9, -28, -50, -32, -5, 18, 45, 26, -47, -21, 12, -25, 21, -46, 6, -72, 6, -23, -58, -5, -75, -52, -45, 19, 2, 52, -7, -43, 26, 58, 24, 1, -34, -21, -29, 89, 91, -5, -57, -38, 15, -21, -41, -10, -16, 91, 52, 106, -58, 36, -19, -20, 124, -37, 17, 5, 83, -102, 18, 25, 66, -48, 28, 27, -77, -32, 24, -31, 31, 0, 79, 25, -56, 28, 51, -80, 29, -33, -92, 33, -3, -58, -59, 26, -126, 93, -63, 118, -50, 10, -28, 59, 21, 27, 3, -109, 53, 78, 1, 46, 8, 19, -123, -56, 124, 39, 15, 59, 57, -18, 0, -72, 73, -36, -6, -24, 6, -1, -54, -26, 5, 35, 72, -52, -31, -31, 22, -11, 30, 58, -62, -62, 77, -49, 63, 10, 60, -59, 8, -15, -21, -91, 2, 37, 24, -57, 53, 36, -40, 2, -43, -127, -17, 23, -29, 24, -7, -19, 24, 27, 3, -50, -22, -13, -39, 76, -44, 100, -36, 6, 1, 2, 30, -38, -73, 60, -76, -7, -18, 32, -107, 87, -94, -45, -18, -2, -8, -21, -41, 45, 104, -4, 52, -8, 10, -18, -7, 9, -61, 10, -22, -102, 25, -34, -7, 46, -40, -14, -18, 19, -35, -15, -28, 76, 15, -109, 45, -3, 35, 27, -27, -67, -40, -88, -123, 69, -57, 2, -39, 26, -5, -47, 7, -23, 13, -29, 24, 70, 37, 14, 26, -67, 14, -6, 38, 39, 62, 13, 37, -27, -14, 63, 120, -34, 113, -3, -41, -54, 41, -40, 17, -43, 85, -66, 30, -52, 55, 12, -15, -10, 12, 73, -32, 64, 80, -18, 18, 48, 26, 3, 88, 13, 9, -64, 15, -19, 30, 52, 117, -1, 50, 12, -7, 40, 23, 31, 110, -5, -46, 51, 46, -116, 25, 88, 14, -24, 21, 79, 18, -58, -78, -29, 11, -37, -86, -31, -40, -28, -17, 40, 23, 64, 17, 5, 15, 50, 26, -28, 13, 66, 57, 11, 51, -81, -26, -72, 39, -16, -120, -51, -100, -85, 24, -76, -14, 72, -42, -30, -103, 1, -75, 49, -38, -82, 32, 53, 113, -33, -40, -6, 24, 47, 0, -51, 118, -4, 16, 77, -35, -36, -6, 4, -16, 124, -91, -65, -31, 35, -12, 0, -36, -96, 0, 17, -108, -9, -47, 10, 8, 58, -2, 11, 7, -1, -17, -8, 8, -77, -10, 16, 111, 13, 10, -32, 47, -8, 62, 69, -35, -4, 39, 34, -92, -8, 45, 37, -7, -75, -1, 45, -38, 71, -90, 37, 31, -43, 17, -33, 1, -17, -71, 35, 16, 86, -113, -23, 0, -80, 5, -28, 14, 10, 33, 47, -6, -36, 19, -16, -52, 33, -35, -12, 25, -21, -7, 63, 2, 32, -17, 13, -6, 12, 14, -49, -43, 66, 5, 19, -103, 34, 27, -8, -20, 1, 10, -47, 35, -26, -11, -18, -61, 21, -25, 9, 11, -16, -20, 8, 13, -19, -14, 27, 5, 15, -16, 9, 59, 0, 52, 28, -66, -115, 68, 17, -17, 21, -21, 11, -28, -20, 4, 26, 15, -9, -25, -6, 17, 5, -19, -13, -11, -3, 34, -1, 29, -74, 115, 33, 20, -12, 49, 54, 127, -55, 9, -9, -87, -113, 120, 8, -25, 19, 63, 21, -44, -31, 17, 111, 93, 16, 10, -99, -125, 98, -12, -58, -40, 14, -47, 92, -40, -6, -38, -24, 30, 78, -22, 109, 76, -10, 66, 29, -15, -33, -18, 3, 63, 11, 47, 96, 49, 0, 74, 72, -43, 6, 24, -26, 80, -56, 66, -23, -109, 55, -27, 52, 27, -59, -99, 58, -17, -34, -7, -35, -89, 66, 15, 18, 36, 32, 0, -101, -40, 35, 121, 14, 37, 106, -90, -62, -37, -73, -45, -18, -12, -48, -21, -81, 113, -49, 33, -75, 74, -55, -73, -85, -51, -116, 53, 16, -67, -5, -49, 85, 23, 111, 19, 119, -107, -8, 29, -2, 50, -117, 83, 34, -42, -38, 7, -3, -46, 94, 95, 127, -45, 71, 37, 65, -2, 4, -1, -34, 118, 35, 0, 81, -56, -73, -6, 22, 89, -28, 7, -94, 40, 73, 37, 60, 33, 125, 57, 127, -37, 46, 67, 19, 89, 86, -31, -11, -70, 126, 0, 2, 4, -45, 35, 39, 46, 78, 46, 93, 85, 89, 74, -72, -21, -11, -31, 93, 16, -38, -2, -55, 49, -25, -21, -11, 21, 16, -63, 19, 27, 25, 3, 70, -23, 52, 18, 15, -101, -47, -66, 99, -126, 101, -37, 0, 46, 74, -10, 33, 29, 6, 60, 16, -41, 115, 17, -11, 14, 43, -22, -11, 78, -69, 14, 69, 4, -98, -73, 22, 5, 52, 17, -64, 65, 49, -1, 21, -121, -39, 61, 20, 23, 36, 108, 57, 19, -36, 62, 38, -29, -8, 28, 87, -38, -86, -46, -86, -86, 9, 4, 39, 13, -20, 40, -15, -43, 4, 9, 24, -16, 4, 68, 41, -6, 74, -78, -43, 27, -68, -7, -9, -54, -2, -7, -49, -94, 100, 2, 0, 1, 15, -53, 25, 117, 1, 125, -22, -2, -21, -19, 73, 19, 75, -112, 30, 68, -13, -55, -26, -12, 54, 26, 50, 67, 12, 44, 123, 8, 42, -14, -22, -70, 2, 58, -68, -24, -9, -20, 2, 30, -13, -21, -21, 11, 98, 0, -63, 37, -22, 29, -1, 23, 50, 28, 74, -15, 23, -48, 18, -5, -28, 54, -14, -15, -3, -23, 13, 10, 63, -3, 11, 32, -21, 39, 80, -106, 41, 1, -55, -25, 53, -17, -57, 54, -39, 21, -40, 8, 44, 112, 9, 88, 52, -24, -2, 7, 3, -11, -13, -32, -6, 75, -14, 75, 21, -66, 16, 14, 18, 12, 34, 94, -45, 30, 6, -36, 94, -125, -26, -23, -117, -93, -3, 0, -1, -33, -33, 34, -91, -76, 31, -16, 62, 47, -9, -27, 19, 23, 41, 9, 66, -3, -118, 83, 20, 118, 5, -22, 37, -91, 31, 3, 23, 5, 15, 11, 120, 89, 84, 7, 75, -123, 15, 7, 28, 17, -101, -23, -9, -5, 15, -2, 72, 21, 10, 19, -29, 60, 13, 20, 46, -27, 54, 7, 24, -61, -25, 25, -17, -19, -14, -30, 21, -37, 61, -63, 41, -48, -15, -20, 15, 44, 28, -13, -60, -55, 15, 18, -2, 57, 16, 102, -17, 1, 3, 23, 28, -20, -104, 66, 99, -31, 44, -25, -59, 54, 15, 4, 66, 44, 13, -88, -3, -4, -18, 21, -43, 12, -123, -14, 37, -28, -11, -9, 73, -5, -62, -12, 25, 17, -25, 65, 22, -4, 2, -8, 9, 9, -7, 41, -62, 10, 34, -4, -6, 6, -6, 0, -10, 4, -9, -5, 9, 8, 2, 16, 4, -9, -9, -2, -28, -6, 2, 32, 1, 2, 1, 10, -3, -25, -4, 12, -18, 4, 5, -6, -4, -10, 0, 20, -2, 18, -3, -16, 9, 1, -4, 15, -7, 13, 5, 1, 6, -10, -1, -8, -5, -10, -3, -12, 18, -3, 2, 3, 12, 7, 16, -5, 11, 7, 25, -7, 25, 14, 7, -14, 1, -20, 11, -30, -18, 6, 4, 1, 2, 0, 8, 0, 4, -16, 9, -2, 20, 14, -7, -2, -8, 4, -3, -7, 5, -12, -24, -41, -4, -4, 0, 22, -4, 6, 34, 7, 44, -6, -23, -14, -9, 8, -32, -47, 19, -26, 3, 20, -37, -14, -16, -9, -46, -9, -6, 7, -27, 13, -28, -10, -10, -71, 21, -41, -6, 49, 41, -9, -16, 6, 12, 32, -1, 36, -9, -14, -22, 4, -19, -4, -13, 24, 24, 41, -8, -8, -19, -2, -38, -6, -20, -12, 21, -21, -26, -90, -22, 8, 18, 67, 45, -12, -47, 33, 14, -31, 7, 14, -4, 11, -5, -25, 8, 19, -49, -12, -19, -20, -1, 21, -26, 19, 3, -13, -3, -12, -6, -7, 22, 8, 17, -1, 0, 6, -3, -7, 1, 10, 5, 48, -13, 17, 2, -5, -26, 1, 11, 6, 11, 15, 11, -18, 6, -21, 9, -13, -9, -2, -9, 9, 0, -5, 23, 33, -14, -2, 1, 26, 7, -17, -4, -8, -3, -2, 20, -5, -36, 4, 7, -9, 29, 2, -1, -6, 6, 13, 27, 6, -7, 1, -11, 20, 5, 10, 2, 5, 10, 17, 10, -28, 3, -14, 27, -7, -12, 12, -6, -22, 3, -5, 11, -21, 1, -17, 1, -14, -9, 3, -19, 18, -39, -16, -12, 29, 14, 12, 18, 8, 40, 34, -15, -33, 19, 3, -5, 9, -7, -26, -2, -38, 27, -21, 28, -39, -40, -13, -53, -2, 5, -42, 27, 10, -13, 11, 3, -2, -17, -36, -5, -21, -13, -3, -6, -46, 25, 13, 2, 7, -17, 66, -16, 18, 15, 7, -15, 22, 16, -2, 45, 3, 0, 32, -5, 22, 37, 8, -1, -39, 14, -21, 25, -67, 16, 0, 9, 7, -3, 4, -1, 9, 6, -29, -2, 14, -2, 1, -9, -9, -28, 3, 7, 14, 16, -25, -18, 32, 42, -39, -32, -42, -60, -9, 20, 4, -20, -61, 4, -37, -5, 17, -16, -25, 67, -35, 17, 33, 27, 90, 9, 17, -55, 112, -7, -33, -4, 17, 50, 13, -7, -81, -12, 9, 85, 22, -20, -2, 32, 10, -9, -4, -6, 3, -3, 10, -12, -24, -62, -10, 40, 6, 1, 13, -7, 2, -110, 24, 31, -15, 42, -54, 69, 45, 88, 13, -5, 7, -25, 28, -49, -3, -59, 53, 34, 59, 80, -23, 58, 75, -4, 6, -14, -27, 91, -16, -22, -5, -29, 12, -50, 26, 27, 5, -8, -1, -4, -22, -30, -39, 18, 32, -45, -18, -12, 45, -33, -14, -38, 36, -14, -21, 18, -20, -11, -44, 6, -29, -32, -2, -5, 0, 47, -40, -18, -49, 5, -2, -19, 0, -2, -17, 37, -16, -10, 39, 17, -34, 14, -18, -16, 12, 12, 20, -1, -27, -27, 36, 15, -6, 22, -28, 10, -17, 13, 46, 13, 28, 6, 32, -62, 33, 23, 16, 3, 16, -35, -5, -22, -13, 22, 10, 43, -18, 2, 46, -14, -35, -39, 31, -31, -19, 25, 15, 45, -23, 11, 24, -8, 32, -6, 6, 4, -4, -5, -27, 40, -29, 19, 36, 4, 91, -20, 4, -19, 16, 47, -45, 20, -21, 2, 46, 26, 8, -56, -28, -74, -10, 9, -52, -6, -42, -17, 0, 21, 11, -26, -25, -36, -3, -5, -25, -1, -52, 23, 22, -29, -7, -3, -55, -31, 43, -13, -13, -53, -23, 3, 28, 34, 14, 2, 18, -31, -5, 41, -15, 34, -14, 30, -62, 15, -45, -81, -22, 5, 10, 9, -1, 13, 30, -12, -45, -1, 1, -39, -1, 4, -9, -39, 2, 17, 28, -15, -11, -54, 83, 4, -5, -23, -45, -54, -1, -48, 30, -29, -2, 45, 48, 60, 13, 10, -26, 5, -13, -8, 41, 23, 66, 15, -43, -8, -103, -5, 61, 16, 5, -31, 58, -38, -51, -10, 35, -112, -25, 56, 28, 9, 8, 12, 1, -43, 26, 1, 36, 12, 84, -88, -63, 100, -42, -4, -109, 10, -49, -88, -11, 27, -28, -77, -53, 51, 45, -106, 13, 23, 59, -31, 79, 44, 12, -80, 6, 66, -10, -35, 37, -8, 60, 39, -6, -45, -12, -53, 59, -15, 27, -28, -1, -69, 23, 29, 19, -53, 36, -37, 0, -28, -32, -31, 43, -31, -33, -20, 0, 44, -61, -77, 19, -37, -32, 10, 3, -14, 49, -16, 10, -24, 11, -53, 2, 55, -7, 26, -38, 18, -3, 2, 36, 61, -18, 43, -28, -23, 66, 3, 11, 25, 4, 6, -16, 11, 33, -44, -24, 4, -17, 11, 1, -5, -18, 33, -17, 8, 52, 5, 23, 19, 18, -19, -6, -2, -21, 18, -5, 25, -3, -33, 45, 30, -4, -17, 10, -1, 69, -77, -21, -60, 64, -2, -44, 9, 17, -29, -14, -18, 35, 7, -8, 42, -5, 23, -20, -12, -19, -19, -20, 10, -22, 45, 33, -40, -17, 25, -16, 44, 12, -4, 9, -75, 8, -35, -66, -2, -36, -22, -49, -9, 13, 16, -30, -19, -10, -8, 21, -12, -24, -33, 47, 5, -14, 17, 25, 18, -42, 6, -15, -3, 21, -21, 25, -25, -22, 14, -5, 12, 46, 47, 13, 25, 18, 7, -8, 12, -30, -24, 0, 60, -81, -4, 30, 103, -63, -18, -11, 5, 11, 7, 66, -13, -39, 8, -2, 12, -2, -11, 1, 36, -37, -9, 18, -46, 12, -22, 3, 14, -43, -74, 15, 51, 52, -7, -46, -9, 10, -76, -40, 12, -111, -20, 11, -85, -5, -69, 6, -102, -15, -34, 50, 25, 121, -17, 118, -16, -72, -33, -3, -10, 0, 14, -52, 35, 10, 62, -60, -49, -29, 4, 1, -17, 29, 3, 12, -48, -99, 7, 38, -36, 0, -13, -51, -43, -77, 10, -7, -4, -6, 103, -58, 72, -19, 58, -43, -30, 44, 54, 42, 68, 3, -65, -64, 74, -21, -72, -57, 67, 70, 63, -97, -24, 64, -11, 32, -3, -14, 5, 2, -74, 31, 3, 2, -36, -50, -19, 14, 94, 28, -11, 5, 32, 12, 15, -17, 18, -23, 62, -3, -41, 34, -29, -7, -54, 26, -25, 33, 23, -9, 32, -8, 18, 3, -12, 40, -31, 10, 17, -22, -86, -18, 34, 65, 8, -11, 13, 0, 11, 14, -22, 6, 17, -22, -14, 35, 3, 29, 15, 16, -24, -22, 51, 7, -42, 63, 11, 18, -7, 7, -38, -20, -30, 13, 81, 64, -94, 30, 45, 95, 9, -5, -35, 6, 56, 25, -93, 22, -28, 8, 17, -48, -90, 12, -41, 5, -38, -4, 13, -48, 11, -6, 9, -52, -10, 59, -33, -2, -60, -8, -24, 33, 45, -31, 4, 34, -9, -8, -36, -22, -37, -62, -31, -13, -108, -16, 76, 17, -23, 25, 25, -28, -3, -23, -15, 14, 20, 16, -3, -35, 9, 29, 2, 7, 17, -52, 12, -32, 8, 17, -10, -41, -28, -28, 56, 18, -39, 12, 64, 11, 2, 12, -22, 37, 5, 6, -10, 6, 42, 6, 3, -40, -122, -19, -5, -12, -14, 37, -9, 13, -16, -54, -12, -26, 5, 31, 0, -2, 100, -15, -12, 21, -22, -13, -3, -45, -118, 39, 14, -90, 73, -52, 10, 6, -116, -6, -60, 32, -39, -35, 42, -12, -76, -16, -105, -9, -54, 71, 92, -121, -24, -123, 16, -26, -62, -65, 0, 32, -24, 12, 24, -5, 59, 15, 21, 4, 5, 3, -4, -5, 36, 0, -20, 64, 3, 27, 16, 8, 14, -2, 47, 33, -73, -24, 65, 46, 63, 5, -46, 49, 14, 3, -45, 44, 39, -50, -45, 11, 0, 31, -87, -52, 12, 61, 92, -78, -41, -44, 42, -67, -9, 36, 94, -5, 71, 23, -7, -11, -52, -5, -45, -11, 28, 57, 17, -7, -36, -52, 3, -27, -12, -6, -62, 29, -71, 8, 27, -31, 21, -38, -58, 3, -12, -69, 8, -54, 91, 22, 90, -11, -126, 23, -9, 67, -44, -3, -30, 22, 47, 21, 1, 38, 21, -85, 1, 26, 2, 46, 8, 3, 22, -1, -39, -28, 26, -3, 16, 26, -35, -22, 34, -17, -26, 88, 30, 3, -19, -8, 9, -48, 0, 16, 4, -72, 67, -24, 57, 56, 23, 31, -7, 28, -23, -40, -14, 32, 7, -1, -40, -9, -60, -2, 62, -16, -14, -36, 28, -52, 0, 10, -1, 11, -2, -31, -89, -3, -55, 1, -29, -83, -16, -5, -39, -15, -41, -48, -20, -35, 49, -31, -10, -2, 9, 15, 21, 62, -19, -1, -42, -21, 34, -31, -1, -3, -18, 45, 17, -55, -10, -20, 6, -31, 21, 6, -14, -20, 7, -101, -5, -45, -1, 16, -21, -6, -12, 21, 73, -9, -17, 4, -2, 15, 9, 23, 7, 10, 20, 6, -11, 36, 30, 14, 22, 6, -5, 15, -31, -55, 13, -15, 7, -14, 38, 15, 22, -8, 36, 12, 6, -5, 56, 13, -31, -24, -16, 46, 25, 30, 6, 40, 0, -8, 100, 9, 43, 26, -86, -47, 54, -119, -18, 36, 49, -38, 53, 27, -6, 122, -25, 125, -18, -108, -111, 91, -10, 87, 10, -120, -28, 21, -126, -12, 42, -3, -76, -2, 58, -32, 75, -13, -59, 22, -50, 89, -16, 23, 16, 1, 7, 89, -10, -19, 12, 54, -25, -6, 124, 71, -13, 10, -7, -49, 9, -10, -69, 76, -118, 33, -44, 41, -3, -6, -46, -59, -126, 8, -76, -79, -34, 7, -93, -2, -25, -25, -50, 16, -66, -41, -77, -14, 16, -83, 22, -12, -68, 7, 44, -2, -45, 22, 20, 45, 15, 21, -47, -71, 69, 25, -9, -5, 45, 127, 14, 21, -32, -18, -30, -3, -75, 22, -22, 19, -49, -3, -43, 4, 6, 2, 17, 36, 23, -77, 14, -36, -25, 34, -12, 37, 7, 83, -56, -14, 6, -3, 2, 12, -40, -61, 48, 10, 96, 95, -19, 0, -15, 17, -66, -30, -28, 63, -81, 15, -126, -18, 36, -47, 7, 45, 17, -43, 13, -36, 35, 22, -9, -44, 77, 0, 22, 4, -2, -17, 25, -45, 82, -101, -5, -40, -5, 15, 32, -23, -45, -51, 1, -57, -11, 120, -7, 91, 9, -24, -42, 37, 100, 80, 20, -5, -125, 88, 11, -124, 42, -35, -127, 120, -123, 41, 125, -124, 21, -76, 81, 29, -11, 61, 15, -120, -115, -17, 79, 111, 74, 20, 63, 127, -42, 28, -26, -30, -116, -71, -73, 98, 110, -114, 3, -48, 2, 4, -64, -40, 36, -14, 18, 61, -16, -36, 12, 27, -11, -32, 124, -34, 65, -51, -43, 53, 45, -44, -6, 13, 33, -25, -15, -119, -51, -26, 124, 118, 16, 18, -121, -33, -58, -79, 26, 18, -77, -12, -95, -79, -38, 23, 32, 83, 125, 17, 77, -32, 127, 104, -56, -18, -9, -80, 17, -125, -127, 123, -61, 38, -1, -78, 22, 10, -21, 3, 126, -125, 123, 49, -47, -126, 89, -113, 127, 89, -29, 15, -62, -128, 44, -5, 120, 123, 120, -15, 105, -126, 111, 25, -127, -122, -127, 115, -65, 122, 24, -2, 38, -88, 20, 20, 70, -7, -77, 50, 25, 73, 117, 20, 114, 93, -52, -125, 118, -43, 127, 5, -8, 36, 22, 122, 42, -128, -120, -123, -52, 127, -124, -125, 96, 1, -35, -76, 62, 60, 46, -102, -5, 70, 66, 13, 127, 2, 126, 77, 88, -63, -91, 103, -7, -110, -128, -45, -127, 100, 109, 18, -51, 61, -18, 47, -127, 57, 13, 46, 23, 127, 127, 127, -52, -66, -24, -68, -1, -126, -15, 10, -2, 33, -61, -127, 119, -75, 127, -34, 126, 127, -61, -1, 60, -9, -42, 22, -123, 19, -41, 50, 27, -46, -3, -75, -12, -75, -55, -90, -99, 14, -2, 90, 47, -35, -108, -78, 34, -27, -77, -21, 38, 32, 34, -115, 84, -62, -14, 33, 18, 30, -122, -3, -3, 10, 99, -7, 4, 51, 92, 9, 69, 23, 125, -60, -19, 25, -26, 3, -62, 92, 116, 20, -11, 86, -34, 105, 25, -98, 17, 45, -54, -70, 58, -114, 38, 5, -51, -36, 56, 121, -55, 21, 68, -127, 76, -35, 28, 28, 49, -113, -30, 112, 125, 82, -12, -68, 55, 17, 64, 14, 53, -25, 124, -44, 84, -70, -60, 80, 35, -66, 88, -25, 77, 107, -63, 125, 48, -101, 127, -7, -50, 13, -12, -124, -109, -53, -87, 66, 81, -51, -79, 76, 8, -8, 106, -26, -85, -113, 88, 99, -40, 84, 62, 106, -125, -124, 3, 75, 127, -22, 2, 76, -47, -128, 46, 127, -71, -40, -127, -117, 9, -22, -92, -60, 72, 35, -128, -74, 77, -117, -95, 123, 49, 127, -9, 8, -125, -58, -67, 127, 126, -128, -20, 126, 115, 122, 110, -127, 116, 0, -118, -102, -126, -34, 56, -125, -87, 81, 19, -95, 42, -4, -101, 80, -10, -62, -21, -55, 127, 77, -128, -126, 127, -127, 109, -95, -128, -80, -126, 81, 70, 122, 69, -70, 101, -24, -22, -4, -43, -126, 77, -51, -54, -122, 123, 41, -5, -50, -63, 4, -12, -103, -126, 115, 127, -88, -32, -79, -125, -83, 95, 61, 56, 48, 127, 121, 60, 75, -3, 35, 22, 64, 126, 127, 83, 121, 46, -72, 117, -127, -83, -128, 34, 31, 49, 121, 46, -53, -51, 6, 27, -124, -4, -119, 72, -119, -126, 57, -83, -61, 31, 83, -76, -119, -96, -55, 101, -62, -128, 3, -36, -42, -61, 57, -124, 59, 25, 2, -116, 127, 95, 36, 127, -84, 80, -34, 35, 21, 49, 9, -12, -17, -39, -91, -24, 30, 40, -26, 79, 30, -57, 23, 78, 114, 55, -66, -34, 42, 64, -40, 105, 36, 127, -43, -122, 35, -60, -73, 83, -44, -15, 102, -126, 35, 37, -122, -50, -44, -5, -76, 10, 6, -89, 16, -70, 24, 79, -41, -98, 100, 72, 108, 7, -71, 27, 25, -12, -128, -9, 127, 103, 50, -60, -82, -39, 77, -46, 32, -1, 85, 124, -9, 2, 43, 28, 122, 0, 1, 59, 13, 38, 120, 7, 113, 15, -10, 101, 79, 88, 121, -126, -126, -76, -41, -122, -13, 79, -126, 102, 73, 126, -56, 99, -58, 32, 127, 17, 12, -99, -120, -127, 101, 96, 79, -104, 126, -50, 115, 43, -105, -50, 127, 71, -126, 73, 16, -29, -94, 103, -126, -96, -113, -63, 87, 127, -124, 94, -67, -123, 124, 19, 22, 76, 19, -111, 15, 87, -128, 123, -19, 88, 53, 120, 127, -116, -117, 108, 100, -99, -127, 127, 119, 12, 103, 51, -121, 21, -90, -126, 85, 98, 13, 27, -42, -102, 123, 26, 127, -91, 118, 121, 126, 123, -117, 121, -41, -124, 82, 127, 118, 126, -124, 100, 64, -62, 127, 88, -22, -89, 8, -63, -114, -125, 35, -42, 55, 68, 19, 37, 23, -127, -123, -126, -6, 121, 56, 73, -64, 121, 9, 88, -25, -115, 125, -42, 126, -91, 84, 18, 115, -79, 126, -17, -24, -83, -128, 42, 54, -75, -104, 123, -108, 60, 50, 18, -121, 34, -84, 97, -128, 27, -125, 70, -43, 20, 73, 19, -80, 115, 79, 16, -87, -107, -17, 2, 103, 71, -17, 126, -55, -108, -33, -115, 121, -5, -33, -4, 30, 125, 72, -64, -12, 124, -8, -38, 127, -63, -48, -40, 101, -67, 123, -19, -55, 6, -23, -29, 79, 62, -46, 69, -119, -44, 13, -33, 114, -126, 3, -106, 103, 126, -17, -6, 27, -46, 125, -29, -76, -6, 54, -89, 10, 119, -125, 52, 123, -19, -44, -9, 47, -35, -101, -59, 59, 81, -64, -43, 22, 13, 38, 22, -42, 24, 45, 52, -89, -117, -17, 87, -94, -37, -119, 13, -30, -59, -127, 68, -2, 48, -125, -27, 97, 17, 67, 63, -19, 32, 10, -54, -39, -1, 32, -26, 27, 16, 25, 84, -34, -37, -117, -64, -103, -77, -126, 90, -102, 55, 84, 20, 91, -32, 15, -7, 126, 41, 82, 40, 100, 30, 125, -39, 13, -67, 57, -126, 121, 105, 113, 45, -128, 31, 127, 124, -79, -49, 39, 21, -123, 65, -29, 46, 53, -105, -36, -16, -61, -124, -92, -114, 123, 7, -32, -126, -28, -53, -102, 18, -124, -62, -102, 13, 127, -128, 127, 80, 49, -16, -105, -128, 49, -34, 74, -127, -53, -61, -111, -96, 67, 25, 16, -22, -23, -123, -125, -59, 53, 111, 104, -127, 123, 38, 15, 68, -3, -125, -74, -119, 43, 124, -128, 127, 89, 27, -20, 30, 127, -63, 3, 17, -13, 125, -39, 106, 32, -32, 75, -42, 17, 127, 102, -128, -70, 126, 46, -10, 82, 99, -86, -44, 96, 51, 81, 34, 88, -105, 58, -40, 46, 126, -20, 78, 80, 16, -40, 116, -70, -69, -8, -25, 45, 87, 3, 30, -40, -8, 11, 127, -127, -13, 75, 125, 38, -110, 63, 21, 15, -42, 55, -115, -72, -117, 121, -120, 0, -119, -17, -125, 34, -128, 35, -1, 31, -92, 69, 62, 16, 17, -120, -37, -50, -17, -2, -1, 84, -33, -58, -67, 125, 38, 127, 11, -128, -99, 86, 40, -104, 34, -14, -39, -29, 39, 126, 21, -85, -105, 122, -127, -72, 114, -62, -25, -91, 122, 16, -80, -14, 20, 127, -108, -22, -13, -125, -1, -80, -48, 37, -16, 11, 114, 30, -9, -3, 12, -70, 31, 31, 22, -94, 120, -57, 3, -75, 120, -115, 33, -101, 67, -81, 67, -114, -11, -116, -57, -81, -109, -109, -123, -125, -27, 36, 1, -2, -127, -9, -14, -37, -125, -104, 14, -49, 14, 49, 8, 94, -43, -17, 95, -126, 2, -110, 113, -127, 118, 30, 3, -13, 15, 13, 30, -52, 105, 75, 31, 123, -91, 122, -7, 116, -52, 70, 126, -127, -128, 78, 116, -64, 108, 82, -51, -127, 64, -120, 127, -111, -64, 90, 112, -29, -76, 5, 126, 3, -11, 64, 94, -117, -32, -4, 54, -20, -121, -85, 115, 115, 126, 15, 80, 44, -27, 8, 126, 125, 119, -92, 39, -122, 111, -52, -20, -111, -64, 1, 90, -63, 85, -71, 1, 123, 85, 57, -124, -14, 112, -73, -104, -90, 127, 127, -76, -55, 21, 85, 125, 103, 55, 120, 126, -127, 109, 116, -125, 25, 53, 127, 96, -47, 50, -102, 43, -3, 127, 126, -4, 117, -4, 7, 124, -121, -48, 59, -6, 125, -98, -83, -123, -113, 17, -123, 82, 113, -122, 125, 60, 92, 14, 22, -127, 33, 18, 1, -21, -82, 105, 38, -75, 98, 107, -89, 2, 123, -83, -55, 91, -64, 127, -69, 91, 126, 74, 33, -85, 112, 5, -35, 29, -69, -36, 35, 126, 34, 126, 121, 124, -61, 103, -123, -128, 15, 78, -124, -56, 109, 52, 52, -56, -83, -28, 107, -128, 23, -79, 126, 126, -4, -46, 38, -115, -109, 119, 16, 87, 11, -76, 54, 118, 13, 45, -55, 18, 94, -69, 14, 127, -120, -126, -98, 87, 100, -42, -44, 42, 18, 121, -128, -47, -51, 3, -87, -28, -115, -46, 104, 89, -88, 83, -112, 49, -17, -13, 43, 30, 9, -76, -111, 55, -41, 21, -4, -53, -119, -16, -128, -9, -10, 46, -7, -50, -124, -100, -27, -44, -26, -56, 23, 7, -128, -2, -65, 45, 80, -107, -102, -14, -8, -57, -120, -19, -58, -15, -43, 50, -32, -13, 8, 108, -127, -66, -54, 123, -127, 127, -85, 110, -108, 118, 6, -42, -116, 108, 95, -23, 94, -2, -45, -126, -34, -124, 43, -124, -73, -122, 127, 90, 64, 49, 126, 43, 127, -126, 122, 127, 33, -67, -128, 100, -125, -9, 92, -128, -123, -21, -65, 125, -93, -125, 124, -119, 64, 6, -116, 4, -127, -86, 125, -128, 80, -89, -127, 127, -29, 125, -13, -71, -86, -128, -124, 126, -53, -37, -117, -4, -47, 126, 21, -98, 125, -45, 52, -124, 42, -22, -128, 120, 124, 126, 11, 127, 56, 99, 31, 121, 127, -122, 125, 116, -117, 43, -65, -27, 124, 57, 126, -96, 3, -42, -67, 28, 30, -102, -45, -56, 4, -42, 69, -127, 43, 61, -79, -127, -6, -13, -96, -5, 49, 37, -57, -100, 126, 36, 61, 22, 55, -114, -58, 116, 91, 30, 78, -48, 103, 16, -42, -58, 108, -17, -21, 126, -120, -127, 77, -19, 71, 126, -10, 49, 36, -44, -23, -110, -34, -112, -26, -118, 48, -65, 23, 125, 24, 124, 84, -127, -69, 54, -124, -126, 82, -2, -118, 14, -2, 31, 122, 33, 124, -57, 44, -128, 22, -51, 111, 126, 20, -121, -30, 108, 115, -58, -62, -106, -116, 61, -25, 127, -120, -82, 29, -117, -103, 90, -62, 125, 63, 52, -41, 12, 75, 12, -100, 73, 41, 69, 4, 95, -87, 74, -72, -65, -85, -36, -29, -60, 24, 65, 123, -34, 31, 88, -53, 15, 11, 34, 46, 4, -101, -97, -37, -85, -14, 19, -16, -101, 76, 38, 8, -11, -127, -103, -103, 118, 48, -27, -69, -78, -77, -125, 29, 24, 10, 30, 32, -111, -35, 23, -41, -96, 41, -22, 14, -44, 123, 12, -116, 100, -121, -22, -116, -36, -123, 118, 73, -45, -81, 37, 113, -28, 77, 30, -21, 108, 124, 41, 57, 108, 67, 31, 13, -125, -51, 75, 2, 97, -9, 59, 58, 67, -128, 100, -124, 126, 126, 56, -22, 53, -18, -73, -125, 123, -124, -23, -1, 6, 68, -29, 117, -125, 45, -120, -37, 117, 126, -6, 121, 121, -24, -124, 6, 52, -121, 108, -76, 0, -89, 124, -125, 107, -128, 92, -42, 127, -127, -81, 64, -33, 127, 82, 91, -127, -121, -43, -35, -127, -124, 127, 90, -49, -122, -100, -18, 125, 41, 60, 118, 127, 59, -77, -105, -119, 18, 102, -70, 71, -65, -37, 54, -127, 39, 107, 124, 55, 79, -30, 72, -128, -104, 110, -52, -127, 64, 26, 64, 90, -124, -42, -123, -66, -34, 19, -13, 126, 34, 55, 39, -100, 62, -24, -69, 95, 42, -32, 37, -114, 120, 117, 6, 126, 124, -16, 120, -34, -122, 126, 49, 125, -14, -72, 116, -125, 33, -128, -111, 122, -102, 121, 18, 123, -83, 124, -78, 31, 95, 55, -96, -127, -123, -3, -125, -1, -47, 121, 8, -47, -127, -23, 124, -124, 39, -128, 127, 127, 2, -69, 1, 24, -40, -45, 30, -51, -66, -13, 8, 43, -2, -35, -85, 127, -1, -41, 117, 125, 79, 91, -56, -106, -66, -89, -49, -22, -28, 95, -128, 9, -128, -106, 40, -43, -128, 77, 20, 85, -38, 78, 31, 18, -94, 57, 8, 127, 119, -33, -38, 5, -18, -77, 115, -60, -43, 46, 122, -43, -22, 19, 11, -34, -127, -56, 27, 88, 110, 49, 71, 127, 76, 57, 127, 40, -62, 22, 43, -123, -109, 46, -105, -97, 124, -20, -8, -88, -109, -47, 30, 55, -127, 47, -42, 11, -43, 121, 21, 48, -126, -78, -29, 53, 21, -18, -128, 39, 51, -76, 113, 20, 127, -23, 40, 115, -27, 123, 94, -71, -69, 39, -26, 8, 127, -42, 107, 126, 11, 42, -87, -39, -77, 73, -35, -121, -77, -64, -72, 121, -109, -47, -64, 58, -87, 70, -36, 122, -51, -42, 48, -53, -36, -121, -22, 124, 115, 47, -78, 74, -108, -128, -90, 52, -70, -120, 29, -61, 49, 112, -20, -51, 69, 27, 34, -127, 125, -124, -81, 53, -127, 114, 127, 6, -89, 124, -16, 34, 116, -58, 17, 124, 80, -77, -128, 122, 76, 19, -127, -55, 59, -2, 7, 109, 22, -8, 76, 26, -51, -97, -77, -30, 36, 127, -123, -125, 114, 39, -15, 127, -40, 127, 91, -88, 3, 13, 109, -29, 123, 32, -123, 51, 127, -120, 1, 57, 96, -128, 25, -107, 76, 127, 114, 122, 3, -17, -2, 13, -45, 126, 52, -37, 127, -37, -17, 7, 33, -121, -120, -51, -51, -55, -122, 43, -127, 87, -124, -124, 79, -121, 16, -125, -75, 9, -106, -47, -127, 127, -107, -8, 127, -66, 123, -122, -13, 76, 127, -94, 116, -126, -23, 117, 49, -93, 14, -71, 43, -121, 47, 94, -123, 127, 18, 63, -94, 112, 122, 38, 34, 4, 119, -121, 9, 4, -125, 92, -122, -100, 123, -6, -65, 80, 77, -116, -124, 41, -119, 37, 61, -15, 119, 116, -15, 46, -40, 103, 47, 62, 122, -37, -17, -17, 43, -4, -29, -30, -87, -9, 116, -60, 10, 25, -125, 74, -124, 55, -8, -105, 37, -122, 68, -128, -126, -21, -104, -117, 36, -120, -21, -126, 9, -31, 9, -20, 52, -18, 67, -69, -124, -31, -126, 121, -46, 18, -86, 89, 87, -75, -72, -68, 127, 23, -50, 70, 89, 76, 104, 46, 111, 19, 47, -26, 28, 125, -66, -78, 48, 96, -7, 64, 108, 65, -125, -9, -122, 126, 118, -78, 69, 127, 22, -36, 93, 127, 87, -26, -70, 48, 31, -42, 3, 115, 87, -120, -43, 121, 53, 8, -127, 124, -117, -125, 20, 78, 48, 127, -126, -73, -80, 124, 97, 127, -126, -29, 123, 123, -61, -20, 86, 18, 120, 112, -3, -128, 17, -125, 57, -128, -122, 79, -10, -125, 121, -16, 50, -39, 125, 33, 17, 124, 108, -121, -81, -49, -122, 105, -123, 71, -72, 97, 87, -125, 127, -121, -15, -31, 72, 75, 82, 126, -122, 108, -71, -60, 87, 2, 127, 12, -92, 53, -127, 119, -76, -12, -128, 0, 118, 3, 127, 56, 93, -120, 14, 24, -1, -122, -5, -80, 67, 126, -62, 27, 124, 123, 7, -34, -79, 127, 102, 122, 113, -40, 67, -3, 126, -109, -38, 87, -68, 1, 22, 124, -126, 121, 125, -35, 31, 120, -74, -128, -59, 79, 116, -54, -124, 127, -55, -120, -123, 35, 116, 98, -35, -127, 105, -127, 62, 73, -10, 53, -19, 116, -116, 83, 10, -119, 123, 83, 127, 62, 118, -122, -45, 40, 11, -31, -57, -52, -14, -119, -29, 105, 62, -127, 120, -112, -29, -51, -94, -33, 33, 86, -49, 80, -6, 72, -110, 93, 2, -34, 107, 113, 127, 121, 50, -70, -127, -64, 31, 13, 96, -31, -25, 45, 126, -17, -9, 57, 80, -3, -104, 35, 106, 33, -46, -124, 83, -89, -76, -73, 58, -37, -46, 59, 79, -125, -67, -36, -62, 50, -19, -95, -52, -112, 56, 26, 110, -89, -92, -75, -100, 46, 16, 31, 3, -127, -118, -47, -126, -8, -28, 54, 125, 30, -126, 13, -33, 99, -38, -119, -107, 9, 117, -127, 93, 61, 65, -72, -118, 15, 119, 80, 66, 127, -100, 126, 127, 28, 98, -77, -35, -19, -54, 6, 35, 124, -127, 127, 56, -80, -68, -49, -1, 126, 62, -50, 51, 53, -22, -75, -72, -22, 70, -62, -67, 48, 86, -125, 14, 126, 14, -76, -11, -76, -97, 127, 44, -87, -120, -21, -63, -125, -2, -106, 51, 39, 70, 94, 55, -124, 27, 15, -123, -47, 88, -128, -113, 81, 61, -127, -105, -124, 15, -84, -8, -90, -48, -25, -8, 77, -62, -127, 86, 19, 26, -118, -46, -26, 109, 10, -19, 127, -68, 127, -88, 69, -121, 27, -102, -15, 3, 26, 19, -55, -14, -5, 58, 11, 15, -114, -121, 114, 126, -117, 56, -37, 31, 123, 19, 127, 116, -65, -118, -122, -24, 127, 26, -67, 127, -128, -24, 12, 127, -33, 13, -51, -13, 127, -114, -34, -126, 127, -87, -119, -123, -59, 11, -123, -24, 49, 123, 122, -80, 127, -69, -44, 127, -70, 51, 124, 117, -124, -48, -128, 118, -60, -67, 124, 116, -31, 39, -94, -21, -78, -18, 4, -128, 6, 77, 69, 108, 126, 82, -127, -23, -118, 56, -125, -127, 24, -121, 29, 53, -117, 123, 38, -25, -12, 55, 62, -67, 87, 44, -51, 70, 17, 109, 44, -69, 125, 104, 125, 62, 59, 114, 25, -124, -30, 124, 32, 41, 6, 126, -55, 1, -41, 58, 1, -108, 26, -31, 32, 58, 85, 123, 41, 68, -15, 85, -80, -127, -103, 44, -113, 125, 5, 10, -36, 117, -77, 112, -111, 78, 51, 74, -112, 47, 95, -113, 121, 16, -48, 127, 17, 7, -125, 126, 25, -113, 103, -126, 126, 119, 61, 31, 4, -43, -119, 27, 125, 88, 48, -125, 84, -57, 32, 21, 15, -127, -127, -126, 127, 110, -28, 90, 88, -49, 71, -51, 120, 82, -43, -75, 96, 125, 19, -4, 125, -61, -33, -35, -85, 122, -24, -111, 124, -110, -126, -44, 111, 59, 27, -126, -49, 52, 102, -95, -120, -127, 121, 50, 50, 93, -4, -20, -56, 127, -35, 28, -128, 112, -59, 127, -127, -123, 104, 100, -128, 111, -71, -6, -114, -71, 72, 120, 127, 127, -117, -17, -19, -122, 39, -66, 124, -99, -18, 33, -89, 124, -107, 29, -103, 126, -7, 53, 124, -117, 122, 15, 124, 125, 42, 125, -53, 64, 7, -33, 127, -126, 106, 69, -18, 78, -48, 57, -124, -86, -127, -116, -85, -74, -66, -119, -24, 15, 22, 9, -82, -5, 52, -2, 8, -105, 127, 21, -47, 53, -128, 107, -12, 97, -30, -37, 121, -68, 127, 74, -2, -58, 126, -124, 68, 105, -53, -126, -60, -48, 51, 127, -116, -124, 127, 17, -124, -123, 41, 127, 127, 3, -127, -101, -121, 83, -111, 111, 125, -126, 62, -5, 49, 94, -87, -51, 62, 117, 126, 124, -95, 5, 93, 122, -124, -117, 74, -53, -118, -27, -46, 127, 12, 112, -68, -93, -109, 108, -119, 52, -7, -71, 97, -123, 121, 38, 68, 85, 2, -87, 123, -124, 126, 69, -26, -57, 14, 127, -46, 89, 25, -115, -27, 56, 124, -34, -14, 2, 73, -128, 4, 118, -94, 117, -77, 124, 76, -34, 3, 16, -42, -77, 45, 11, -116, -32, 101, 24, 127, 92, -92, 126, -98, -124, 111, 36, -113, -127, 98, -10, -10, 124, -93, -12, -116, 103, -126, -115, -47, -126, 113, 34, 66, -55, -13, 95, 119, -49, -43, 74, 127, 121, 124, -117, 25, 75, 117, -123, -9, 123, -118, 127, 126, -86, -46, 99, 102, -126, 54, 126, 125, 91, 21, -86, 103, -127, -121, -35, 127, -127, 65, -37, 123, -117, -56, 44, 58, -123, 91, 13, 124, -8, -44, -123, -101, 127, -125, -85, -1, -63, -9, -111, -100, -19, 118, -20, -94, -127, 7, -123, -128, -18, -124, 108, 125, 109, -49, -76, -77, 11, -28, -126, -85, 126, 108, 116, 118, 79, -72, -39, 23, -60, -87, -29, -102, 79, 81, -14, 124, -64, -120, 109, 61, -122, -77, 102, 127, -16, 119, -113, 103, 119, 118, -72, -82, -31, 127, 121, -49, -13, 123, 124, -42, 124, 2, -74, 94, 12, -125, 44, -74, 17, -127, 103, -14, 11, 58, 17, -13, 62, 86, -127, 79, -122, 121, -23, -87, 91, -128, -123, 100, 127, -85, -62, -127, -23, 121, -13, -69, 55, 94, 123, -119, 116, 111, -17, -35, -77, -5, 126, 28, -31, 126, -42, -54, 127, 49, 86, 127, 60, 25, -128, -116, 62, -110, 113, 118, -26, 0, 69, -75, 116, -31, -115, -2, -112, -127, -61, -5, -122, 44, -119, 117, 87, 26, -50, -115, -122, 70, -110, -94, 65, -23, 125, 33, -125, 103, 91, 123, 109, 123, -17, -13, 126, 46, 17, -102, -33, 125, 117, 120, 97, -82, 109, 14, 24, -24, 63, 16, 62, -3, 61, 42, 71, -38, -73, 72, -127, 70, -68, -67, -36, -7, 90, -125, 124, -122, -117, -24, -78, 0, 113, -19, -60, 52, 68, -7, -126, 10, 79, -22, 57, 22, 100, 126, -15, 66, -113, -85, 122, -128, -12, -58, 127, -125, 64, 105, 45, 107, 117, 88, 29, 62, 122, 106, -83, -121, 7, 44, -97, -125, -127, 72, 2, 28, 118, 9, -124, 79, -57, 99, 38, 127, 43, 90, 26, -34, -59, -125, 118, 43, 24, 55, 127, 96, 49, 1, -116, 106, -5, -90, 115, -48, -53, 127, -39, 18, 125, -54, -124, 116, 18, -58, -91, 68, 102, -8, -22, 110, -86, 88, 90, 121, -46, 19, -45, 113, -34, -119, -68, 5, 3, 18, 106, 20, -127, -119, 127, -91, -45, 24, 119, -61, -69, 81, 56, -77, 104, -58, -107, -100, -46, 15, 45, 62, 108, 71, 6, 114, 11, 8, -31, 9, 126, 127, 125, -86, -42, 15, 125, 81, 127, 89, -90, -53, -112, 12, -34, 81, 79, 0, 127, -1, -124, 16, 1, -32, 127, -32, -92, -125, -77, 3, 85, 110, -18, -15, 51, 54, -83, -19, -93, 65, -22, -3, -98, -128, -29, -84, 121, -125, -29, 27, 46, 119, 37, 125, -96, 49, 119, 85, -40, 1, 92, -96, 34, 18, 15, 44, 58, 127, -27, 20, 10, 124, 44, -13, -108, 17, -128, 61, 37, 11, 73, 61, -28, 27, -96, 67, 29, 99, 53, -51, 125, 119, -59, -12, -60, 30, 67, 121, -43, 64, 103, -11, -20, 31, -81, 55, 66, -127, -39, -19, -13, -122, 98, 69, 32, 46, -127, 111, -36, 113, -72, 70, -65, 56, -125, 94, 47, -82, -117, -111, -58, -128, 32, -10, 51, 13, 99, 31, -27, -36, -52, 24, 33, -97, -98, -31, -86, -125, 122, -52, -86, -107, 50, 57, -82, -124, 16, -93, -108, 84, -52, -10, -92, -85, 83, 3, -110, 127, 116, 76, -43, -42, -103, -111, 121, -120, 8, 37, 50, -122, -115, 34, -22, -84, 127, 9, -19, 36, -126, -34, -39, -118, -15, -112, -3, -80, -69, 77, 23, -73, -112, 44, 100, 51, 99, 38, -112, -5, -69, -56, -120, 123, 113, 72, 84, -64, -51, -123, -90, -59, 3, -105, -110, -3, 47, 117, -20, 123, 112, -7, -120, -52, 85, 24, -36, -128, -51, -27, -5, -90, -6, 103, -54, -89, -40, -116, -42, 125, 111, -22, -126, 7, -93, -127, -119, -67, -94, 127, 123, -118, -108, 27, 15, 1, -17, 23, 127, 45, -125, 124, 50, -68, 58, 47, 127, -125, 14, 56, -51, -30, 36, 126, -113, 105, 119, -25, -32, -43, 115, 44, -104, -57, -23, -33, 19, 22, -20, 26, 22, -95, -29, 9, -32, 7, 107, 35, -47, -29, 2, -21, 55, -126, -90, -128, 3, -125, 127, -33, 74, 54, 121, 60, -77, 126, 65, -21, 18, 4, -70, -126, 48, -127, -20, -9, 30, -125, -125, 88, 58, 121, -69, -63, -31, 125, -14, -125, -46, 26, 28, 20, -115, -72, -120, 27, 127, 125, -71, 25, 123, -28, 122, -126, 61, -29, -124, 62, 101, -93, 47, -2, -120, -59, -97, 46, -69, 127, 6, 74, -125, 83, -87, -123, -30, 20, -74, 55, 71, -83, -123, 125, 36, 3, 4, 112, 64, -120, -18, 126, 37, -91, 63, 52, 32, 81, -71, -76, 50, -12, 17, 120, -105, 23, -106, 78, -96, 60, 75, 57, -50, -11, -40, -65, -111, 11, 25, 87, -97, -31, 35, -34, -56, -8, 3, -122, -9, -39, 123, -127, -127, -29, -124, 63, 84, 102, 44, 11, 80, -56, 41, -102, -13, 125, -95, -55, 50, 51, 5, 112, 100, -48, -17, -53, 0, -112, 14, -30, 61, -7, 32, 38, 89, -125, 122, 40, 35, 100, -1, -37, -13, -73, -25, -37, -89, 126, -121, 18, 79, 76, 115, 21, -7, -54, -50, 124, 118, 100, -118, 92, -4, -117, 90, -107, 104, 40, 81, 16, 119, 93, 61, 126, -127, -40, 25, -36, 16, 66, -5, -27, -101, 57, 95, 114, 79, 13, -41, 5, -12, -38, 13, 71, -55, -57, -76, 127, 16, 73, -31, 33, 75, -76, 25, -125, 3, -5, -61, -35, 119, -22, -114, 50, -50, -59, 87, 69, 118, 70, 8, 126, 11, -30, 126, 18, -125, -39, 16, 37, 60, -120, 119, -20, 7, 26, 99, 12, -38, -1, 103, 119, -22, -6, 24, -110, 111, 24, 110, -125, 24, -1, -85, -9, 42, -51, 113, 123, 6, -111, -37, 19, 1, -124, 127, -127, -32, -128, -104, 13, 89, -4, 92, -92, -114, 0, 120, -62, 2, -13, -36, -33, 127, -128, 51, -19, 52, -126, -54, 119, 51, 77, 123, 127, 40, 86, 77, 38, -15, -69, 28, 8, 13, -2, -127, -96, 121, 29, -1, 55, 67, 75, 127, -127, -41, -27, -108, 68, 18, -11, 40, 8, 127, 25, -52, 2, -110, 18, 115, -70, 8, 117, -87, 22, 36, -16, -110, -14, 66, -54, -49, -57, -7, -99, 42, -27, 28, 39, -64, 35, 18, 12, 109, -111, 77, 22, -120, 56, -4, 75, -39, -102, -47, 18, -115, 121, -22, -81, 54, -81, 13, -11, -125, -28, 112, 17, -74, 118, -5, -31, -6, 11, -116, 28, -69, 10, 84, -121, -62, 46, -127, 4, -33, -28, -9, 54, -25, 29, -11, 105, -113, -124, 45, 17, -91, 74, -107, -40, -89, 49, -43, -51, -70, -43, 69, -31, -34, -49, 48, 47, -119, -48, -125, -50, 121, -15, 10, 5, 127, 117, -19, -128, 30, -103, 81, -22, -28, 61, 4, -62, -11, 4, 24, -97, 47, 38, -42, -59, -125, -49, 83, -15, -119, 102, 29, 89, 53, 116, -109, -95, 73, 16, -17, -54, 3, 127, 63, 10, -61, -111, 104, -15, 41, 62, -43, -32, 74, 72, -93, 125, 127, 122, 116, -115, -14, -91, -63, 51, 14, 11, 121, 104, -33, -8, -103, 31, -44, 81, -31, -79, -49, -29, -39, -3, -87, 20, 37, -94, 26, 62, 20, 16, 49, -6, -43, 103, 37, 7, -17, -122, -15, 10, -111, 13, 99, 14, -95, 8, 69, 69, -64, -25, -8, -96, 113, 112, -15, -99, -127, -12, -31, -113, 16, 111, -12, 24, 116, -6, 10, 96, -34, -63, 49, -14, 2, -126, 9, -20, -10, 108, 2, 123, 127, -69, 40, 90, -54, 12, -50, 125, 87, -106, 31, -127, -36, -88, -26, -116, 70, -125, 15, -72, 104, 120, 74, -88, 105, 13, -20, -12, -124, -40, -87, 6, 108, -125, -87, -1, 23, -39, -76, -87, -60, 62, -108, 28, -31, 31, 9, 24, 79, 15, 17, 78, 4, -47, -12, -39, -14, 71, -17, 70, 69, 58, 30, 42, 60, 32, -16, -26, 71, 13, 101, 3, -99, 44, 98, 28, -24, 14, -24, 125, -59, -29, 122, 16, -35, 53, -36, -38, -4, 84, 2, 61, -3, 115, 59, -85, 49, 73, 16, 85, 97, -92, -1, 41, 18, 6, 30, 9, 37, -26, 115, 9, 110, -22, -50, 45, -127, -50, 4, -9, 54, 63, -55, -18, -125, -12, 20, -4, -99, -8, -23, -42, 19, -9, -42, 3, -61, -11, 26, -10, 2, 43, -33, 44, 3, 105, 124, 26, -21, 48, 21, 117, -63, -118, -126, -44, -42, -122, -75, 127, -42, 25, 122, -75, -122, 28, 18, -27, -127, 19, 15, -122, 27, 80, -13, -18, 25, 89, -16, -52, 127, 126, -89, 96, 45, 117, 82, 81, 103, -33, 84, -124, 69, -51, -113, 5, 80, 123, 125, 98, 61, -86, 59, -46, -44, -29, -62, 124, -125, -118, -13, -10, -13, 81, 103, 107, -24, -45, 82, 26, -27, -34, -81, -41, -41, 10, -18, 40, -128, -125, 44, 25, -80, -1, 3, -85, 63, 37, -6, 94, 47, -80, -12, -3, -21, -17, 125, -28, 48, 19, -35, 46, -12, 37, 3, -10, -51, 28, -70, -62, 22, 66, 34, 58, -70, 67, -106, 91, -94, -12, 83, 111, 8, 114, -17, 8, 9, -20, 1, 113, 99, 69, 19, 35, -26, -128, -54, -10, -41, 96, 71, -93, 12, 44, 3, 22, -21, -5, -18, 126, 42, 48, 85, 12, -54, 2, 25, -52, 93, -128, -26, 78, 123, -25, 27, 8, -118, 50, -3, 75, 40, 35, -11, 107, -13, -93, -13, -24, -24, 72, -85, 10, -61, 51, 116, -100, 21, 67, 118, 36, -71, 37, -20, 46, 16, 54, 126, -93, -15, -5, 33, -114, -11, -5, -88, -11, -24, 54, 82, -66, -44, -128, 82, 87, -122, -51, -60, 123, -29, 33, -125, -13, -59, -8, -22, -4, 37, 24, 28, 123, 93, 86, -66, -12, 44, 124, -106, 51, 104, 19, 49, 82, 77, 11, -109, 58, -5, 19, -73, -56, 127, -74, -12, 120, -118, 1, 121, 116, 20, 70, -15, 53, 84, -47, -27, -18, -123, -17, -3, -23, 5, 28, 68, 120, -65, -33, 111, 122, -113, -45, -19, 18, -119, -90, -126, -33, 45, 36, 18, -35, -121, -10, -102, 37, 127, 112, -95, 44, -126, 59, 102, -81, 114, 85, 3, -50, 81, -52, -54, -32, -13, 39, 66, 41, -88, 120, -123, 125, 87, 23, 67, -53, -43, -25, -125, 63, 41, -105, 35, -39, -108, -123, -34, -41, 10, 88, -7, -31, -127, -113, 31, -59, -92, 62, -127, 96, 109, 127, -11, -27, 115, -71, -40, 45, 123, -40, 38, 60, 124, 17, -60, 95, 117, -23, -9, 64, 100, 126, -40, -56, -7, 126, 24, -125, 51, 37, 26, -115, 76, -51, -91, -29, -75, -116, 72, -87, -71, 80, 63, -95, -1, -24, -57, -32, 25, 105, 14, 20, 60, 74, -128, 126, -29, 92, 43, 127, -75, 126, 116, 127, -10, 116, -126, -25, -37, 26, 58, -92, 27, 67, -43, 56, -78, -32, 76, 71, 73, 48, 76, -92, -126, 55, 24, 55, -104, -18, -58, 24, 109, 30, -128, 115, 66, 7, 31, -85, 116, 85, 106, -53, 39, -33, 61, 10, 100, 79, -13, -5, 126, 25, -21, -98, -74, -41, 7, 12, -8, -85, -121, 65, -4, 11, -9, -89, -30, 5, -39, 49, -44, 90, 100, -83, 42, 120, -24, 53, 122, -114, 2, -83, 38, 17, -31, -43, -38, -56, -67, 26, -49, -48, -121, -41, -125, -1, -3, 59, -77, 9, 76, -55, -53, -11, 1, -38, 51, -112, -76, 101, -24, -9, 3, 24, -48, 67, 26, -52, 47, 7, -24, 44, 82, 13, -47, 50, 3, -97, 39, 56, -18, 49, -69, 126, -14, -3, 82, 6, -75, -18, 4, 14, 127, 57, 76, 23, -53, -7, 34, -45, -100, -94, -97, 12, -32, 20, 51, -53, -17, -77, 69, 103, -124, -112, -95, -122, -18, -116, 35, -110, 79, 109, 38, 56, -124, -13, -87, -86, -43, 54, 108, -108, -6, -11, -68, -11, -124, 8, 122, -7, 86, -111, 117, -127, 65, 107, 63, -126, -127, 126, 30, 42, 6, 53, 123, 32, 126, -71, 20, 32, 125, -125, 96, 126, -106, -48, -125, 80, -127, -106, -105, 69, -98, -126, -119, -20, 80, -128, -73, 55, 119, -127, 92, -12, -77, -12, -38, 35, -117, 44, 3, 37, 126, 119, 28, 61, -72, -127, 24, -24, 120, 123, 3, -127, 78, 61, 40, -128, -28, 71, 14, -47, 81, -111, -57, -127, -40, -40, -121, 36, -116, -127, 4, -79, -20, 81, 62, -107, 24, 16, 105, -8, -38, -85, 127, 90, 13, -106, -15, 74, -68, -56, 4, 47, -89, 28, 89, -68, 9, 40, -25, 32, -33, -119, -21, 25, -74, 68, 112, 19, -77, 30, -5, 108, -118, 27, 120, -127, 100, 0, 41, 67, 14, 43, 100, -107, 77, 127, 70, 48, -106, 52, 17, 40, 90, -11, -68, 34, 111, 77, -35, -56, 43, -126, -49, -31, 6, 5, -117, -74, 12, 49, -63, -68, -36, -97, -117, -123, 85, 112, -38, 124, -126, -110, 104, -106, 80, 125, 86, 60, 52, 32, -20, -15, -102, -5, 23, -9, -31, -126, 121, 41, -88, -97, 33, -20, -65, -10, 112, 45, -85, 58, 114, -32, 25, -2, 35, 59, -99, -22, -40, -71, 0, -58, 85, -58, 18, -55, 60, 0, 88, 9, -14, -56, 18, -34, -91, -18, -34, -14, 7, 122, -121, -126, -35, 95, -40, 105, 6, -2, -46, 115, -125, 52, -117, 17, 2, 9, 25, 52, 18, -112, -84, -71, 62, -97, 22, -80, 9, -22, -75, -104, 127, 76, 6, -127, -120, -104, 17, -86, -54, 98, -127, -111, 57, -126, 68, -122, 13, -98, -49, -125, -1, -118, 121, -37, 35, -111, -122, -113, -125, -51, -90, 78, -124, 127, 1, 58, 17, -123, -51, -81, -122, 34, -32, -66, 14, -113, -126, -124, 127, -126, -15, 92, -95, -121, -100, 20, -3, 89, -9, 127, -48, 15, 2, 126, -55, -10, -20, 125, -109, -32, 68, -119, -15, 17, -46, -10, -100, 13, 127, 120, 48, -121, 126, 46, 71, -76, -75, -89, -34, -122, 65, -21, 43, 11, 102, -128, 44, 127, 126, -120, -19, 81, 127, -1, -125, 31, -36, 127, 43, -60, 66, -99, -127, -50, -56, -80, 119, -22, -2, -84, -125, -17, -65, 126, -63, 105, 51, 86, 46, -123, -13, 106, -54, 117, -9, 119, -13, 30, 83, -121, 126, 17, 63, 7, -22, 60, 7, 26, 18, -23, -39, 8, -63, 43, 124, -39, 40, -27, 18, -42, -31, -90, -51, -113, -51, -16, -62, -33, 96, 39, -76, -78, 110, -49, 51, 11, -10, -72, 31, -110, -73, 2, 24, 66, -125, -49, -45, 39, -128, -12, -117, -28, -23, 75, 1, -122, -13, -63, 104, -44, 14, 3, -78, -25, -6, 104, -81, 123, -66, -96, -47, 70, 127, -107, -124, -66, -102, -94, 127, -121, 32, 89, 53, -21, -128, 8, 24, 56, 36, -59, -70, -73, -43, 45, -127, 73, -117, -35, -53, 34, -128, 2, 83, 127, 1, -45, -14, 6, -44, 6, -34, 117, 127, -34, 64, 6, -43, -61, -80, 0, 15, -29, 11, 22, -23, 38, -124, -30, 108, -78, 25, -54, -57, 48, -40, -108, -97, -94, -117, -47, 18, -96, 1, -120, -69, -84, 10, 126, -128, 112, -14, -18, 14, -34, -119, 28, -105, -100, 113, 49, 30, -47, -70, -123, -4, -125, 15, -115, -128, -3, -110, 126, -42, -126, -11, 21, -63, -123, 127, 121, 108, -80, -45, 86, 60, 64, 115, 115, -91, 25, 18, -121, -117, 62, 47, 9, -125, 67, 4, 88, 106, -127, -125, 123, 69, 125, -81, -126, 119, -88, 3, -128, 8, 66, -42, -127, -17, -15, 4, 17, -97, 22, 127, 98, -114, -19, -67, -17, -90, 78, -35, 114, -21, 110, 119, 122, 64, -90, -8, -70, -94, -59, -49, 127, 0, -54, 55, -21, -113, -33, -127, 70, -100, -24, 10, 41, -76, -64, -52, -126, -46, -20, 19, 49, -126, -33, -127, 127, 125, -110, -4, -56, -70, 45, 3, 18, -122, 91, 11, 102, -39, -53, -126, 111, 71, 33, 116, -105, -106, 12, -7, 30, 37, 47, -92, 42, 9, -121, -45, 23, 87, -20, 125, 117, -13, -126, 56, -16, 28, -90, -35, 77, 58, -10, 63, -67, -24, 45, -29, 8, -31, 119, 0, -13, 100, 122, -33, -50, -34, -18, -19, -58, -124, -22, 35, 29, -128, -89, 8, -86, -4, 0, 44, -114, -47, -32, -62, -35, -123, 19, -72, -84, -60, 7, 110, -19, 45, 70, -9, 120, -125, 9, -74, -97, 71, 17, 3, -40, 1, -103, -94, -33, 127, -31, -12, 10, 0, -4, -20, -75, 28, 84, -57, -15, 43, 17, 29, 40, 60, -9, 118, 58, 27, -89, 42, 75, -106, 122, 31, -114, -114, 43, -35, -90, 95, 116, -106, 6, -22, 100, 37, -72, 11, -6, 87, -88, -126, -119, -31, 44, 29, 59, 50, -60, 32, 75, -115, -18, 28, 126, -62, -126, 14, -21, -34, 126, 122, -74, -36, -38, 106, -119, 116, 92, 58, -81, -121, -78, -127, 6, 127, -70, -97, 112, 63, -105, -11, -40, 127, -23, -127, -127, 26, -34, 75, -124, -28, -115, 78, 28, -30, -124, -41, 15, 120, 127, 81, 72, -35, -114, -38, -93, 72, 71, 82, 57, 12, -8, 73, -126, -127, -39, 101, -95, -92, 126, 54, -30, 11, 26, 34, 74, 39, -127, -22, -123, 113, 23, 23, -14, -123, -73, -35, -128, 100, -122, -80, 32, 23, -118, -40, -53, 48, 18, 21, -42, -104, -22, -127, -19, 55, -57, 64, -89, 24, 11, -1, -12, 99, 10, -52, 41, 37, -123, 62, 123, -4, -57, -51, 127, -45, 121, 124, -39, -113, 10, 7, -111, 53, 55, 112, -124, 51, -85, 30, 7, 6, -4, -50, 21, -124, 110, -126, -6, 2, -71, 115, 13, 0, -64, -43, 8, 8, 7, 4, -49, 82, 10, -2, 125, 124, -58, 68, 29, 9, 37, 78, -86, 60, -34, 85, -106, -52, 19, 4, 86, 118, 46, 113, 20, -103, 113, -75, -57, -54, -65, 86, -16, 12, 68, -90, 84, -37, -31, 23, -37, 25, 26, -54, 32, -27, -121, -26, -67, 124, -24, 20, 124, -75, 74, -28, 14, -29, -19, 33, -36, 87, -2, 5, 6, -121, -17, -1, 106, -20, -19, -17, 97, 15, -25, -53, -9, -60, -34, 61, 35, 11, 84, 11, 0, 30, 127, 17, -43, 41, 93, -12, 75, -71, -54, 47, 11, -47, -57, 40, 8, -36, -36, 127, -120, 17, 57, -15, 38, -101, 55, -72, -43, 32, -73, -12, -22, -126, -20, -95, -17, -53, 23, 3, -53, -9, 27, 122, -5, -25, -40, 18, -32, -5, -20, 11, -64, 61, 68, 127, 20, -41, 35, -22, 26, 127, -102, -55, -57, 51, -21, -45, 34, 47, 0, 85, -3, -10, 42, 43, 11, -34, -10, -4, -67, -89, 92, 25, -62, 7, 20, -117, -41, 103, 70, 34, 45, 38, 53, 26, 64, 39, 51, 27, -70, 42, -36, -14, 35, -6, 121, -25, -23, -105, -44, 127, -64, 23, -10, -53, 70, -63, -23, 5, -15, 28, 85, -51, 101, -71, -41, 53, -52, -26, 19, -46, -64, 25, -21, 16, -13, -63, -68, 26, 52, -61, 116, 24, -88, 15, -20, 7, -3, 1, 97, -16, -16, -100, -103, 4, -8, 88, -89, 24, 51, -12, -6, 30, -32, -69, 20, 82, 18, -8, -41, -56, -67, -111, 92, -77, 70, -30, 5, -3, 11, 26, 10, -115, -30, -17, 26, -30, 41, 84, -27, -1, -11, -8, -125, -21, 12, -35, 124, -13, -48, -13, 16, 9, 4, -75, 24, 11, 37, -42, -11, 26, 22, 29, 54, -9, -94, 107, 112, 57, 18, 84, 97, 26, 0, -121, 6, 28, -1, -55, 54, 9, 46, 68, -21, 55, -1, 6, -47, -28, 9, -24, -28, 61, -45, -102, 114, 43, 45, -37, 11, 6, -15, -102, -70, 49, -125, -8, -16, -53, -24, 68, -6, 21, -13, 10, -28, 120, -54, 2, -77, 27, -62, -112, -104, -14, -59, 45, 35, -117, 7, 34, -28, -63, 26, 59, -14, -43, 22, 36, -86, 18, -16, -12, -58, 15, 51, 56, -73, 24, -13, 67, -15, 125, -13, 12, 8, -56, 44, 62, -77, -10, 76, -122, 87, -27, 21, 19, -39, 10, -2, 44, 12, 113, 31, -11, 37, 16, -19, 56, -53, 9, -43, -25, -13, 45, 34, -45, -35, -10, 35, -118, -33, -126, 1, 122, -37, -21, -15, -128, -125, -29, 24, -123, 21, -47, -36, -66, 35, -20, -9, 39, -50, -122, -2, -18, -12, -59, -24, 14, -87, 109, -46, -67, 51, -125, 66, 72, -13, 57, -112, -116, -42, -110, 68, 2, 43, -76, 34, -61, -114, -60, -81, -33, 1, 33, 37, -36, -10, 35, 24, -19, -17, -40, -32, 52, -28, -48, -13, -89, -91, -66, -35, 126, -27, 1, -50, 74, -60, -17, 16, 75, 44, 28, 105, 103, -4, -9, -43, -76, 6, -10, -124, 39, -27, 19, -47, 25, 126, -44, -4, -116, 22, -32, -49, -106, -95, 111, 15, -10, 4, -121, -20, 84, 76, 70, 18, -57, -23, -92, 69, 1, 70, 78, 13, -21, 114, 58, -20, 23, 50, -28, -16, -6, 118, -67, 127, -22, -79, -37, -31, -40, 108, 42, 11, 79, -41, 59, -23, -115, 11, 14, 38, 86, 3, -25, -3, -102, 3, -113, -43, 38, -54, 30, -90, 120, -72, 9, -87, 49, 90, 49, -20, 14, 11, 15, 33, 115, 125, -12, -68, -59, 21, 6, 27, 21, -127, -77, 20, -45, -1, -46, -77, 57, 105, -77, 2, 29, 78, -35, -104, -75, 96, -50, 52, 22, -21, 38, -73, -14, -3, -49, 23, -65, -13, -112, 95, 125, -120, -123, 96, -74, 108, -5, -20, 17, -19, 67, -17, -54, -47, 81, -7, -32, -10, 25, 7, -5, 111, -128, -36, 51, -55, -1, -18, 3, -20, 20, -32, 31, -37, -24, -31, -70, -95, -17, -1, 40, 73, 33, 10, 88, 45, 71, -24, 27, -47, -13, -78, 121, 63, -127, 26, -21, 104, -3, 31, 4, -21, 26, -38, -37, 42, -10, -3, 119, -15, 11, -119, -128, -128, 0, -11, 54, -109, 37, -96, -107, 55, 37, -17, -97, 11, -88, 70, -29, -31, 6, -52, -73, 17, 120, 69, -17, 12, 107, -10, -23, 16, 117, 122, -47, 4, 61, -86, -47, 27, -100, 50, 114, -92, 95, 43, 47, -31, -34, 107, 99, -127, 53, -11, -26, 57, -16, 57, -97, 0, -113, 59, 6, -10, -99, -2, 60, -63, 5, 8, -43, -15, 9, 39, 126, 28, -4, -74, 27, 34, 19, -71, 83, 78, 57, 37, -98, -72, 33, -26, -103, 82, 29, -71, 20, -4, 1, -49, -127, -85, 24, -37, 28, 30, -39, -24, -15, 40, -6, -61, -46, -39, -108, -26, -21, 17, 63, -61, 77, -29, 41, -20, 52, -49, 117, 2, -35, 9, 127, -66, 7, 22, -10, -42, -69, 14, 59, -106, 12, -87, 6, 2, -13, -123, -94, 32, -116, -76, 35, 17, -76, 21, -7, 53, -18, -13, 13, -110, -30, -21, 109, 73, -24, 75, 4, -34, 46, 127, 78, 40, -84, -15, -66, -7, 96, -14, -58, -47, -12, 71, -4, -6, -87, 28, 76, 0, 7, 84, -58, -34, -45, 30, -84, 9, -125, -43, -25, -34, -40, 127, 80, 72, 114, 107, 16, 60, 87, 12, 127, -29, -12, 84, 126, -86, 92, 127, 91, 86, -123, -91, 126, -45, 43, -103, -21, 60, 14, -15, 25, 50, 14, 19, 92, 25, 5, 6, -26, 50, -18, -37, 120, -81, 46, 3, 31, -6, -66, -107, -13, 73, -31, -94, -54, 7, -58, -20, -16, 77, -30, -40, 127, -61, 69, -21, -66, -24, 48, -55, 9, -25, -31, 44, 127, -17, -54, 71, -20, -28, -42, 5, 6, 23, 33, 19, 4, -21, 74, -106, 32, -98, -119, -89, 102, 46, -29, -50, -95, -115, 127, -34, 32, 10, 17, -23, -12, -69, 35, -7, -1, -76, 64, 37, -114, 59, 83, 34, -22, -61, 3, -31, -100, -120, -88, 22, -128, 127, -11, 10, -100, -107, -122, -6, -49, 8, -38, -28, -45, -83, -31, -20, -39, -1, -63, 124, -22, -31, -33, -6, 23, 5, -3, 38, -123, 73, -23, 104, 25, -27, 79, 115, -48, -44, -125, 25, -1, -67, 20, 117, -35, 112, 86, 15, 23, -111, 122, 21, 9, -7, -128, -2, 0, -125, 31, 42, 11, 37, 122, -119, 29, 51, -31, 51, 46, 30, 127, -110, 29, 49, -3, 30, -75, -21, -42, -29, -127, -49, -43, 123, 102, -16, -106, -28, -127, -83, -74, 24, -9, 126, 3, 36, 107, 67, 11, -18, 54, 77, 18, -28, -15, 15, 45, 69, 80, -47, 112, 82, -104, 2, -24, 20, -10, -79, -39, 1, -27, 30, 13, -1, -77, -10, -3, -106, -6, 13, -32, 123, -16, 27, 1, 90, -64, 12, -96, -33, -61, 65, 53, 102, -41, -44, 51, -47, 65, -23, -9, 61, -81, -9, -21, 61, -58, -48, 122, 58, -54, 6, 20, -112, -35, -104, 10, 122, 100, -69, -51, 57, 52, -29, 90, 74, -115, 18, 35, -127, 124, 62, -9, -5, -82, 13, 8, -63, -42, 3, 15, -23, 23, 41, -51, 87, 123, -36, 11, -34, -74, 38, -5, 36, -52, -74, -4, -2, -122, 19, -66, -11, 10, 50, 75, 4, -25, -1, -12, 57, 108, 84, -38, 29, 123, 62, -18, 39, -120, 14, 13, 78, -1, 2, -82, 7, -93, -78, 5, 75, 48, 44, -60, -33, -5, -48, -20, 39, 28, -86, -25, -69, -28, -102, -103, 121, -120, 18, 108, 65, -62, -40, -128, 0, -49, 31, 37, 29, 88, 33, -96, -59, 23, -45, 59, -105, 84, -63, 11, -41, -13, -27, -54, 83, 64, 117, 14, 5, 76, -112, 16, 94, -61, 28, 101, -56, -9, 2, 89, 23, -78, 58, -49, -22, 60, 18, 34, 19, 62, -93, -27, -47, 76, 4, -33, -35, -12, -23, 87, -43, -2, 21, 26, -49, -68, 22, 18, -60, -43, -31, 32, -28, -93, -11, 11, 26, -45, 7, -40, 6, -76, 86, -30, -79, -77, -34, 1, 47, -34, -83, -124, 57, -35, -17, 18, -1, -36, -18, -123, -119, 29, -2, -4, 37, 34, -67, 84, -80, 49, 7, 89, -123, -127, 43, -55, 46, 66, 100, -6, -31, -122, 81, -34, -71, -58, -15, -15, -24, -18, 80, -24, -68, 28, -12, 71, -76, -32, 2, 12, -120, -24, -20, -96, 15, 3, -88, 51, 0, 37, 37, 106, 73, -17, -23, 97, 39, 36, -1, -88, -45, 87, -78, 75, -119, 4, 5, -1, 11, 23, -18, -33, 114, -36, 90, 27, 91, 10, -15, 16, -90, -52, 16, 59, 41, -38, 19, -127, -91, -45, 26, 55, -61, 37, 45, -19, -10, -65, 127, 9, -44, -84, -79, -16, 69, 43, 1, -63, 118, -123, -1, 121, 12, 53, -90, 15, -42, -19, -33, -62, 32, -24, -57, 36, 66, 77, 13, -37, 17, 97, 59, -61, -126, -19, 35, 83, 91, 21, -18, 39, 78, 58, 55, -29, -44, -38, 20, 29, -26, -127, -84, 0, -7, 127, 70, 22, 24, -56, 58, 36, 44, 73, -33, 121, -85, 115, -106, -93, 82, 64, 26, -16, -59, -24, 4, 24, 33, 36, 20, -8, -45, -22, -75, 35, -15, 40, -21, 56, 80, -77, 36, 108, 90, 84, 6, 13, -67, -29, 56, 89, -24, 71, 17, 64, 6, -75, -10, 72, 28, -54, -70, 31, -39, -30, -110, 72, -21, 48, 86, 15, -127, 26, 65, 8, 30, 15, -17, -89, -85, 112, 20, 21, 8, 30, 74, -68, 40, -30, -64, 22, -14, 5, -10, 38, -1, 109, 73, -46, 107, -58, 5, -67, -123, 0, 111, 124, 3, -68, 11, -126, 50, 49, -53, 104, 20, 36, 116, 0, 15, -16, 18, 84, 47, -72, -84, -26, 1, -74, -20, 122, -40, 47, -29, 96, 63, 20, -36, 101, 31, -46, 21, 31, -50, 5, 84, -42, 11, -117, 37, -63, 86, 91, 112, -10, -12, -16, -41, 62, 16, -95, 25, -48, 30, 117, 0, -1, -5, -57, 101, -6, -59, -52, -8, -34, 83, -6, 51, 9, -95, 98, 18, -74, 8, 1, 34, -13, 22, -58, -128, 36, -40, 5, -26, -49, -89, -14, -40, -93, -92, 82, 25, -26, -60, 68, 6, 49, 18, 33, 18, -10, 15, 22, -7, -63, -58, -52, 16, 35, 55, -32, 27, 12, -24, -19, 74, -21, -34, -124, -19, -3, 112, -41, -117, -94, -91, -46, -116, -108, -42, 59, -46, -61, -109, -66, 37, -67, -47, -91, -74, 3, -23, -4, 30, 95, 75, -76, -122, -123, -9, -82, -68, 32, -48, 124, -81, -125, -90, -99, -127, -102, 69, -12, 85, -60, -43, -126, -79, -112, 59, 24, 54, -126, 127, -82, -18, 39, -126, 9, -53, -124, -19, 17, -49, -86, 24, 1, 12, -80, 75, -35, 48, 2, 11, -26, 68, -119, 50, -9, -46, 17, 39, -95, -25, -60, -8, -60, 9, 121, 125, 2, -83, -99, 50, -47, -38, -123, -42, -124, 50, -125, -40, -14, 102, 125, -88, -42, -127, -6, -27, -98, 58, 41, -21, -9, -39, -31, -78, -66, 115, 112, 8, -25, -105, 2, -84, 10, -13, -67, 3, 105, 108, -28, 84, 37, -92, -2, 116, 24, 68, -97, -127, 16, -125, -73, 23, 105, 44, 127, -21, -67, -40, -42, -88, 48, -32, -26, -105, 6, 36, -56, 27, 18, -3, -97, 54, -30, -113, 0, -127, -23, -88, -123, 19, 36, -56, -61, 4, 41, -61, 57, -128, -38, -68, -3, 125, -10, 11, 4, -7, -10, 85, 38, 126, 5, 57, -124, -99, -94, -18, -72, 79, -30, -97, -124, 123, -43, 46, -33, -6, -88, 12, -6, 30, -76, -6, 27, -26, 47, -67, 126, -58, -23, -16, -47, 15, -71, -97, 2, -127, -62, -124, 82, -60, 5, 13, -56, -50, -13, 75, 43, 12, -1, -127, -4, 30, 67, -38, -77, 75, 10, 32, -127, -59, -24, 33, 4, 0, -108, 11, -89, 0, -86, 60, 1, -18, -127, 0, -122, -54, -48, 20, -90, 102, 121, -86, 127, -25, 79, -13, 2, -54, -29, 66, 0, 15, -94, 24, -33, 114, -12, 127, 66, -7, -11, 69, -37, 38, 20, -58, 2, -71, -25, 69, -119, -63, 60, -63, 41, -43, 24, -10, 82, 5, -29, -26, -125, -52, -45, -21, 54, 3, -4, 8, 39, -75, -83, -127, -67, 16, -77, 72, -12, -10, 104, 14, -127, 46, 22, 5, -4, 127, -34, 15, 72, 126, -8, -83, -10, 6, -57, -44, -109, 35, 11, 2, 35, 9, -24, -29, -12, -7, -114, -40, -127, 120, -48, 10, 48, -33, -39, -124, -119, 113, -63, 22, 123, 126, 33, 61, -11, -13, 95, 6, 87, -56, -122, 7, 127, -63, 37, -95, 125, 68, -30, -92, 28, -13, -105, 91, -20, 21, 87, -58, 17, -20, 34, 113, 126, -26, -61, -127, 54, -11, -61, 11, -29, -53, 71, 24, 60, 26, 76, 43, 15, 117, 12, -57, 25, -126, 12, -47, -55, -2, 19, -43, 105, 115, -14, 12, -58, -56, 47, -16, 56, 68, -7, 6, -75, 57, -51, -4, 17, 21, 56, -30, -2, -120, 20, -39, -127, -1, -1, 53, -50, 29, 50, -27, -69, -128, -78, 37, -85, 125, 5, 11, 66, -36, 22, -1, 124, 10, -50, -88, 116, -67, -3, -12, 24, -20, -22, -59, 89, 112, -19, 24, -31, -46, 125, -7, -126, -6, 23, 24, 8, -26, 62, -88, 126, -77, -34, 7, -39, 61, -4, -30, 3, -128, 12, -124, -13, -83, -1, -24, 102, -6, -25, 91, 125, -3, 16, -125, -69, 34, 42, -43, -29, -32, 59, -34, 13, -4, 10, 92, 74, -39, -79, -27, -7, 39, -51, 123, -6, 20, -28, 75, -126, -46, -42, 30, 0, -29, 10, -4, 112, -19, 46, -10, -48, -19, -20, 43, 65, 13, 16, 16, 84, 75, -39, 127, 125, 93, 105, 0, 75, 124, -31, -114, -48, -13, -12, 98, 126, -104, 66, 25, -9, -110, -95, -94, -20, -118, 70, 121, -128, -118, 78, -29, -34, 2, -9, 40, 107, 20, -81, -126, -38, -42, -112, -55, 65, 123, 118, 56, -46, 19, 17, 18, 127, 93, -47, 66, 121, 114, 8, -128, 123, 92, -37, -45, 25, -79, 19, 46, 32, -70, 11, -41, 94, -35, -79, 12, -49, 63, 46, 115, -44, 26, -7, -122, -61, 74, 105, -22, 76, -70, 86, 120, 70, -84, -31, 53, 83, 65, -115, -72, 125, -90, 108, -105, -128, 101, 74, 122, -66, -108, -126, -17, -38, 17, 4, -15, 121, 115, -38, -43, -120, 13, -117, -100, 100, 113, -122, -12, 45, -127, 60, -124, 68, -27, 48, 110, 85, 15, 111, 10, 58, -82, 102, 59, 42, 95, -111, -125, -126, 69, 120, 126, -40, 50, -80, -103, 60, 112, 69, -19, 26, 41, -24, -6, 58, -115, -35, 94, 86, -62, 110, -22, -127, -14, -76, 121, 0, 4, -16, -3, -87, 1, 65, -34, -26, 124, 37, 59, 40, -106, -13, -16, 104, -126, -5, -76, 126, -3, 77, 40, 120, -28, -39, 116, 120, 48, 90, -22, -127, 96, 5, -88, -128, -95, 20, -19, -50, 29, 25, -60, 127, -3, -80, -76, 6, -60, -43, -127, -59, 51, 9, -50, -9, -110, -56, 61, 0, -17, 49, -34, 50, 8, 24, -126, -125, 35, 56, 109, 83, -18, 55, -122, 122, 119, 79, -115, 116, -8, 65, 59, 51, 127, -27, 119, 36, 27, 106, 122, -127, -21, 39, 96, -88, 91, -31, 116, 56, -97, 27, 14, -63, 99, 51, 117, -126, -98, -50, -16, 120, 3, 45, -125, -98, -31, 65, -116, -66, -76, -82, -54, -110, 5, -127, 23, 16, -73, -127, -41, 22, 69, 39, 106, 97, -35, 124, 52, -128, -31, 14, 37, -12, -85, -2, -79, 16, -61, -127, 8, 39, 57, 38, 111, -67, 77, -127, -21, -46, -46, -102, -57, 74, 87, 53, 26, 48, -123, -71, -78, 31, 78, -82, 100, 61, 38, 79, 94, -39, 127, 1, -20, -33, -22, 59, 37, 73, 42, -53, -77, 14, -23, -96, 53, -46, -61, -117, -22, 68, -111, 17, -62, -8, 53, -34, -78, -126, 49, -9, 69, -127, -32, 24, 111, -125, -124, 19, 125, 34, -6, -122, -13, 39, -5, -123, -21, -52, -8, -83, -15, -126, 65, -41, -66, 114, -37, 85, 18, -71, 69, 45, -19, 64, -2, 31, 125, -45, 4, 114, 101, -82, 67, 19, -5, 25, 122, -117, 67, -122, 29, -20, -13, -124, 12, -87, -125, -16, -33, 32, 30, -22, 0, 24, 34, -52, -122, -35, 127, -92, -21, -95, 12, -85, 50, 29, -36, 27, 19, -103, 117, 38, 64, 124, -63, 7, 50, -1, 24, -79, -44, -40, 113, -125, -107, -85, 124, -124, 121, -90, 14, 22, 124, 71, 48, -121, -38, 22, -11, -53, 4, -128, 52, 48, 18, -21, -123, -123, -15, 32, 14, 127, -13, 33, 67, -28, -32, -77, -127, 46, -14, -101, -63, -47, 41, 3, -58, -118, -102, 62, 32, -38, 4, 5, -25, -27, 58, -40, 60, -44, 109, -120, -32, -56, 10, 105, -112, -25, 43, -50, 9, -64, -52, -126, 73, -37, -15, -71, -32, -85, 81, -48, 10, 16, 45, 17, -74, 95, -48, 78, -27, 67, 28, -4, -6, -13, -99, 8, 36, 69, 13, -54, 60, 54, 78, -28, 127, -18, 47, -10, -88, -4, 13, -26, -23, -98, -124, 92, 29, 43, 127, -19, 78, 9, 22, -21, 17, -126, -16, -30, 6, 31, -128, 22, 100, -21, -46, -126, -98, 92, -2, 38, -82, -51, -25, 92, 75, -48, -51, -20, 88, -113, 80, -68, 45, 68, 127, 32, -74, -89, 120, -93, 49, 115, 51, 9, 8, 8, 19, 3, -34, -73, -45, -72, -83, 51, -44, 62, -126, -36, 2, -16, 82, -127, 118, -21, -19, -49, 33, 8, 18, 33, -8, 39, -57, -82, 14, 30, -39, 121, 5, 36, -23, -103, -124, -124, -20, 38, 69, -104, 54, 30, -34, 92, -23, 51, 27, 59, -54, -16, 20, 67, -60, 85, -46, 8, 27, 25, -62, -110, 31, -111, -49, -95, 116, -40, -29, 25, -36, 56, -10, -12, 88, -34, -43, -76, 3, 10, 90, -111, -103, -31, -38, 19, -100, -115, 124, -75, 18, -37, 44, -38, -21, -7, -13, 56, 75, -120, 25, -128, -127, -38, 10, 41, 26, -25, -43, 103, 117, -50, -44, 118, 7, 47, -69, -2, 46, -53, 122, 28, -92, 23, -14, -19, -16, 26, 54, -102, -94, -95, -83, -104, -31, 43, -127, -85, 18, 72, 126, 121, -100, -118, 100, 7, 55, 8, 28, -53, 22, 127, -104, 124, 99, 11, -52, -32, -2, -57, 45, -80, -96, -26, 32, -10, 72, 121, 127, -49, 40, 12, 1, 9, -75, -55, -30, 126, -84, 2, -70, 59, 93, -117, 64, 86, -33, -8, -74, 64, -4, -49, 42, -59, 89, 7, -48, -19, -15, 43, -66, -81, 3, -35, -123, 45, -64, 84, 4, -23, 39, -79, -1, 17, 58, 11, -4, -57, -50, -5, -100, 76, 127, 100, -48, 43, -96, 35, 12, -101, -96, -26, 7, -71, -72, -7, -61, -105, 127, -4, -103, -15, 88, 46, 27, -16, 41, -125, -75, -22, -58, -27, 11, -58, -5, -74, -125, -42, -13, -77, -20, -80, 3, 19, -65, 61, -89, -47, -56, -35, -80, 124, 86, -5, -49, 72, -117, -34, -54, 68, 67, -87, 54, 9, 1, 9, -21, -30, 32, -38, -2, 51, 21, -118, -25, 107, 30, -32, 60, 5, -48, 127, 28, -113, -65, -23, -1, -69, -75, -65, -25, 17, -115, -19, 40, 49, 120, 42, 11, -48, 32, 66, -26, 75, -50, -75, 13, -29, 67, -126, -27, 25, 24, -126, -2, -59, -61, -89, -124, 78, -26, 76, -126, 36, 28, -3, -16, -29, -81, 13, -123, 67, 52, 23, 37, -73, -96, 40, -95, -112, 63, -55, 117, 63, 118, 34, -74, -119, -77, -23, -14, -113, 111, 28, -80, 37, 103, 5, -25, -79, 73, -76, -84, 45, 57, -67, 6, 8, -51, -67, -127, -58, -127, -33, 0, -105, -24, -77, 48, -29, 125, 118, 77, -112, -128, 41, 68, 126, -30, -34, 13, 115, 109, -9, -34, -44, 121, -11, 100, -12, 43, -88, 51, -41, 37, -110, 43, 127, 36, -42, -58, -108, -119, 36, -107, 20, 23, 111, -4, 126, -9, 125, -69, -42, 32, -33, 106, -7, 127, 6, -126, 29, 57, -29, -100, -91, 126, -4, 74, 33, -5, 5, 94, -20, 66, 34, 68, 37, 39, 82, -59, 69, 124, 75, -123, 86, -70, 91, -70, 17, 107, 93, 60, -21, 51, 74, 21, -39, -90, -96, 13, 17, 121, -111, -30, 72, 28, 73, -13, 0, 12, -18, -7, 9, 32, 16, -21, -87, 46, 37, 8, -7, 47, 8, 24, 0, -3, 36, -35, -20, 12, 36, -4, -61, -5, 6, -77, -52, -4, 74, -23, -4, -18, -25, -6, 127, 39, 44, -28, 13, 37, -22, 9, 24, -9, -36, 121, 7, 15, -10, -3, 2, 20, 15, 32, -4, -71, -12, 57, 107, 21, 11, -9, 50, 2, 44, -6, 17, -5, -44, 13, 81, -6, 37, 7, 3, 56, 10, 2, -20, 44, -36, 7, -6, -31, 17, -5, -11, 20, 2, 61, 115, 0, 11, 3, -8, -23, 3, -70, 4, -65, 11, 9, 52, -19, -51, -16, -3, -34, -32, -49, -61, -12, 0, 49, 23, -52, 119, -12, 32, 68, 8, -5, 12, 32, -14, -18, 37, -11, 45, 6, -68, 9, 35, 15, 10, 89, 114, 38, 53, 26, -1, -51, -24, -85, 25, -50, -10, 20, -16, -22, -6, 127, 21, -7, -127, 12, 9, -18, -42, 6, -58, 27, 1, 24, 18, 16, -14, -2, -52, 63, -95, 10, -13, 127, -35, -22, 6, 112, 64, 10, -16, -20, -39, 1, 0, -19, -101, 5, -1, 110, 2, 44, 7, 4, -49, -17, 17, -8, 37, -61, -7, -6, -16, -99, 73, 2, -16, 22, -2, 18, 15, 4, -27, 24, 11, -47, -3, 15, 127, 21, -7, 15, 15, -20, 3, 26, 127, 38, -38, 0, 6, 37, -10, 7, 23, 1, 36, -128, -10, 13, 29, 16, 17, 39, -27, 8, 98, 5, 14, -75, -126, 12, -10, 30, -31, 19, -36, -55, 0, 28, 83, 86, 11, 6, 15, 41, 13, 38, 9, 12, 15, 14, -21, 13, 116, 14, 0, 9, 10, 99, -53, -14, -128, 8, 19, -5, 5, -30, 2, 60, 36, 75, -69, 6, 53, 28, 44, 27, -33, -30, 36, 7, -59, 11, 80, -71, 44, -39, -42, -25, -38, 13, -123, -28, -24, 23, -58, 33, 4, -29, 16, 67, 19, 126, -7, 9, -32, -7, -34, 51, 5, -5, -16, -3, -41, 5, 23, -7, 26, -11, 126, -12, 37, 60, -2, 14, 11, 0, 42, 43, 11, -51, -50, -28, -15, -3, 21, 16, -119, 55, 21, 71, -9, -17, 13, -60, 112, 36, 55, 2, 5, 0, -7, 1, 47, 4, 18, 44, -36, 51, 0, -41, -47, -66, -9, 39, -19, 54, 11, 4, -71, -35, -33, -17, -40, -92, 125, 31, -28, -7, 25, -19, -89, 14, -94, 61, 124, -29, 8, -123, -8, -65, -30, 38, 2, -23, 23, -80, 5, -43, 21, -19, -13, -17, 20, -23, 24, -126, 26, 8, -27, 12, -111, -6, 42, 20, -126, -33, -22, -81, -1, 42, 8, -59, 42, 96, -11, -10, -44, -41, 6, 39, -3, 6, -43, -30, -38, -8, 121, -41, 17, -13, 101, 7, -98, 1, 26, 35, 27, 15, -56, -10, 4, -23, 12, 80, -25, 8, 8, -14, 1, 33, -17, -4, -18, -7, -44, -80, -63, -50, 16, -125, 75, -17, 8, 16, -53, 5, -30, -6, -83, -16, -22, -78, 13, -7, -89, 5, -6, -10, 11, 39, 8, -72, -28, -126, -32, -7, -19, -1, -8, 38, 6, -34, 5, -1, -12, 48, -71, -5, -11, -126, -33, -17, -3, -17, 1, -83, 7, 8, 60, 27, -1, 14, -69, -11, 27, -5, 73, 3, -27, 64, -28, 2, 3, 22, 0, -12, -41, 3, -25, 16, 9, 25, -27, 21, 22, 11, 0, 1, -1, 16, 6, -9 }; static const rnn_weight denoise_gru_recurrent_weights[27648] = { -76, -99, -23, -18, 12, -119, -3, -53, 6, 9, -8, -124, 91, -33, 50, 0, -52, 95, 19, 54, 43, 29, -17, -122, -83, -29, -107, -57, -8, -4, -27, 118, -96, 4, 81, -5, 44, -90, -103, 39, -29, -25, -56, -13, 71, -13, -103, -1, -15, -5, -100, -89, -14, 4, -16, 36, -10, -44, 59, -44, -103, -109, 50, 37, 24, -48, -121, -9, -101, 30, 29, -5, -69, 89, 56, -41, 39, -52, -4, -111, -39, 16, -54, 31, -49, 34, -1, 12, -20, -45, -121, -40, -28, -3, -13, -38, 23, -83, -13, -6, 97, 44, 13, 30, -38, 2, -25, -82, 46, 38, -25, 31, -106, 9, 20, -113, 27, 17, 12, -91, 34, -7, 10, -44, 3, -2, -66, -3, -93, -70, -32, -58, -24, 20, -49, -31, 6, 87, -30, -89, 10, 23, -60, -16, -113, 22, -1, -4, 60, -45, -41, 1, 17, -9, 39, -38, -36, -22, 47, 38, -39, 10, -89, -27, 10, 45, 35, 2, 62, 5, 42, 14, 28, -27, 13, 10, -22, -23, -67, 41, -10, 12, -55, -57, -76, -35, -108, 12, -26, 0, -42, 104, -48, -64, 4, -3, 34, -126, -19, -11, 36, 55, -54, -55, -123, -44, -45, 36, -61, 18, 2, -127, 52, -30, -119, 33, -8, -45, -26, -102, -91, 36, 49, 45, 51, -4, 5, -105, 56, -128, -83, 11, -16, 16, -126, -108, -71, 9, -9, 36, -6, -63, -100, -56, -10, -51, -34, -13, 15, -17, -28, 61, -65, -72, 32, -80, 38, -13, 75, 56, -15, 81, 50, 21, -127, 12, -86, 45, -41, 57, 23, 11, -28, -71, -119, -22, -62, 79, -96, 32, -61, 20, 9, -117, -52, 33, -82, 82, -16, -100, -47, -128, 39, -105, -15, 10, -5, 90, -124, 19, -28, -66, -76, -13, -40, 31, -20, -5, -24, 41, 14, 121, -56, 56, 43, -123, -44, -24, 28, 73, -37, -17, -19, -65, 45, 52, 63, -1, 30, 16, 51, -7, 45, -13, -70, 16, -1, -4, -22, -116, -37, 37, -124, -10, 28, 12, -109, 2, 16, -30, 13, 28, -24, 32, -26, -53, 72, 10, 40, 42, -73, 36, 25, -51, 19, 27, 34, -6, 66, 36, -4, 38, -87, -33, 36, -41, 15, 3, -32, -72, 73, 35, -32, -124, 117, -36, 0, -22, -114, 76, 5, -125, 7, 1, -50, -104, 1, -74, 11, 8, -28, -8, 13, -115, -50, 3, 89, 75, 22, 44, -99, -61, 97, 41, -123, -53, 91, 85, 108, -12, 11, -23, 13, 0, -12, 102, -18, -74, -44, 54, -17, 16, 0, 53, 21, -19, 34, -11, 80, 25, -58, 62, -55, 78, -29, 20, 35, 29, -51, 42, 65, -86, -60, -25, 94, 14, 52, -18, 58, -54, 84, -115, -17, 18, -64, -9, 27, -94, -5, -3, -46, 5, 11, 6, -125, -64, -54, 21, 59, -50, 49, 38, 47, -39, 60, 3, -11, 16, 71, -56, -7, 55, 51, -27, -51, -29, 7, -6, -63, 89, -16, 36, -76, -35, -102, -93, 11, -84, -5, -25, -59, -6, -19, -8, -23, -121, -60, -126, -71, 8, -17, -128, -95, 15, 13, 64, 37, 16, 23, -78, 36, -111, -8, 69, -53, 62, -37, 7, 9, -25, -63, -66, -25, -53, -36, -7, -47, -40, -50, -42, -81, 127, 70, -22, -107, -115, 11, 95, -54, 12, 1, 15, 62, -14, -127, 47, 72, -43, -2, -4, 127, 11, 22, 20, 11, -10, 4, 26, 71, -3, 85, -42, -9, -10, -35, 27, 34, 35, 35, 0, -23, 27, 43, 0, 68, -13, 34, -21, 1, 70, -34, 22, 16, 17, -11, -27, 0, -65, 41, -40, -28, -27, 18, 3, 1, 37, -36, 16, 44, -17, 61, -32, 50, 3, 11, 1, -18, 24, -38, 19, 21, -8, 3, 50, 28, -14, -55, 6, 0, -23, 12, -17, 32, -18, 20, 22, -15, -2, -17, -23, 48, -14, -9, -41, -4, -10, 20, -11, 23, -10, 40, -3, -4, -38, 4, -18, 8, 61, -7, 23, -31, -24, -7, 45, -81, 12, -49, -19, -7, 38, 52, -26, 25, -54, -5, 23, 17, -14, -32, 46, 1, 18, -24, 2, -94, 21, 34, -24, 36, -7, -11, 35, -62, 19, 15, -47, 45, 5, 30, 26, -23, -38, -48, 6, 77, 50, 9, 25, 11, -29, -7, 13, 12, 14, 40, 33, 21, 62, -6, -27, 38, -45, -1, 87, 11, -27, -20, 43, -68, -28, 27, 25, 3, -13, 53, -38, 4, 44, -41, -72, -7, -39, 41, -25, -35, 86, -59, 41, 127, -56, 34, -38, -25, 22, 0, -22, -24, -1, -65, 19, -23, 25, -20, 79, -68, -87, -123, -123, -28, -76, -114, -10, 1, -95, -126, -128, 10, -68, -103, -11, -122, 127, -119, -43, -28, -55, 69, -76, 60, 106, 122, -118, -40, -50, -11, -25, -30, -18, 39, -22, -80, -77, 121, -23, -88, -23, -20, 80, 35, 71, -75, -114, -128, 127, 23, 11, 38, -52, -41, 7, -127, 29, 37, -74, -59, -47, 126, -16, -92, 10, -92, 4, -59, 2, -127, -87, 126, 24, 122, -79, 97, 98, 1, 41, -61, -124, 71, -25, 37, -48, 32, 85, 34, 56, -21, -31, 0, 85, -11, -10, 41, 14, -41, 7, -17, 97, -79, 84, -98, -34, 17, -1, -60, 15, 39, -37, -35, 16, 26, -15, -37, 49, -20, -25, -56, -13, 5, 16, 6, 77, 67, 123, 96, 5, 29, -17, 46, -10, -23, 57, -79, 29, -28, -17, 52, 86, -30, 6, 14, 51, 125, 17, -23, 90, 47, -8, -19, -42, -19, 118, 27, 20, 38, 36, 12, 122, 42, 4, -14, -5, 1, 36, -6, 29, -53, 15, 8, 21, 32, 31, -35, -2, -56, -18, 12, 74, 48, 5, -4, 33, 60, -92, -21, 44, 92, -62, -2, 35, 4, 48, 69, -45, 73, -35, 3, 28, 81, -48, 18, -34, 29, 123, -32, 29, 6, 9, -118, 4, 30, -1, -24, 65, 3, 34, 40, 20, -13, -53, -50, 31, 9, -86, -87, -36, -57, -27, -35, -30, -123, 18, 8, -107, -6, 5, 48, 21, -54, -1, 60, 61, 26, -1, 12, -11, 41, -26, 110, 29, 27, 8, 48, 43, -12, 123, -33, -8, -91, 122, 9, 120, -18, 71, -23, 63, -34, -20, 30, 46, -45, -24, 24, 57, -20, -15, -123, 3, 5, 59, 13, -87, 45, -15, -28, 38, -3, 29, -23, -6, 31, 69, 33, -4, -64, -31, -48, -1, -4, 23, 53, -4, 1, 96, 29, -44, -123, -19, 3, 32, 80, -28, 6, -57, 2, -67, -18, -50, 16, -125, -87, -25, -51, -127, -23, 5, 0, 62, 90, 67, -41, -11, 41, -64, -67, 15, -3, 78, -86, -11, 30, -10, -57, 23, -41, 23, 4, -103, -57, -119, -94, -94, 69, -19, 48, 23, -32, -20, -58, -17, 60, 113, 69, 57, -27, 24, -25, -2, 23, 3, 8, -37, -35, -9, 5, -23, -38, -19, 26, 6, -49, 3, 95, 45, 0, 15, -102, 3, -46, -1, -19, -2, 2, -86, 14, -3, 45, -20, 22, 23, -75, 93, 38, 54, -44, 107, -87, 80, 19, 20, -54, 73, 4, 50, 14, -5, 32, 7, 32, 7, -46, 10, -21, 8, -40, -45, 55, 33, 17, 31, 44, -10, 88, -11, -14, 29, 32, 54, 116, 33, -53, 107, -88, -34, 47, 124, 18, 14, -1, 5, 1, -39, 21, -15, 58, -27, -70, 100, -37, -25, 4, -56, 69, -22, 23, 3, -53, 20, -10, -48, 22, -95, -14, 39, -43, -70, 35, -6, 8, -95, -86, 9, 22, -59, 121, -127, -1, 62, -18, 14, -13, 56, 76, -80, -62, 10, 74, -56, 16, -11, 34, -52, 50, -7, 40, -61, 38, -38, 31, -51, 16, 23, -17, 25, 42, -51, 101, -19, 8, -19, -4, -46, -115, 3, 126, 41, 2, -1, -66, -26, -110, -49, -72, -39, 20, 92, -23, 60, -34, 80, -23, 32, -4, 56, 59, -82, 81, 127, 61, -17, 44, -49, 33, -38, -119, 68, 74, -38, 87, -15, -21, -21, -70, -7, -8, -46, -7, -107, 42, 20, -108, -37, -5, 7, -123, 30, -125, -17, -48, 79, 26, -103, -42, -18, 4, 48, -21, 14, 34, 12, 27, 37, 74, 57, -124, -5, -4, 5, 55, -36, 44, 64, 3, -48, -37, 51, -45, 95, -59, -32, 5, 28, -80, 24, 18, -86, -6, -83, 5, -8, -16, 4, -113, -23, 9, -24, -86, 8, -30, 16, 72, 12, 41, -55, -18, 101, -5, -17, -108, -15, 62, -36, 29, 5, -16, 64, -8, -10, -42, 22, -128, -37, 43, 82, -42, -93, -20, -29, 46, 29, -41, 4, 18, -12, -51, 53, -43, 1, -61, 7, 21, 7, -94, -11, 99, 89, 84, -14, 14, -59, 56, 46, 22, -11, -35, 4, 40, -68, -32, 100, -8, 48, 1, 17, 1, 20, -4, 98, 3, 0, -21, 15, 39, 27, 66, -8, -37, 3, -8, -17, -39, -53, -10, 9, 28, 82, -10, 33, -36, -14, -47, 25, -8, -24, 8, 14, 10, -31, -44, -31, -53, 77, -18, -76, 35, -3, 124, -4, 92, 92, 34, 90, 125, 10, 63, 38, -16, 41, -4, 3, 27, 93, 62, 23, -48, 6, -36, -42, -3, -3, -50, 2, 64, -36, -79, 122, 79, 22, 32, 19, 22, 34, -24, 5, -11, 23, 38, -65, -15, -3, 61, -7, -6, -41, -37, 15, -5, 1, 52, 11, -42, -54, -7, 18, -34, 65, 113, -3, -29, 61, 5, -36, -12, 106, 10, -95, 57, 124, 95, 32, -25, -26, 4, 13, 43, -22, -38, -26, 17, -46, -4, -122, -39, 40, 79, 45, -48, -35, -74, 60, -34, 50, 69, -68, -10, 94, -67, -80, 80, 55, 46, -61, 2, 14, 77, 8, 21, 4, 68, 53, 108, -3, -30, -18, -102, -127, -12, 8, 77, -86, 27, -127, -26, 100, -8, -77, -128, -47, -51, 2, -111, -11, 13, -23, 44, -123, -2, 28, 21, -71, -124, 9, 28, -18, 66, 53, 64, 83, -31, 28, -8, 36, -21, 9, 8, -46, -23, -101, 12, -73, -49, -38, 52, 106, -82, 57, 41, -17, 59, 20, -74, -7, 10, 28, 3, -15, 0, -92, -9, -29, -64, 106, 36, -106, 4, -46, -114, -59, -104, -71, -128, -68, -41, -4, 56, -115, 51, -34, 29, -21, -24, 14, -59, -113, -57, 4, -6, 78, 24, -4, 23, 23, -12, -4, -24, -17, -79, 23, -16, 17, -31, 6, 29, 26, 14, -50, 37, 27, -13, 22, 15, 1, 0, 72, -62, 58, -6, -38, 18, 90, -2, 14, 65, 41, 48, 59, 53, 12, 55, 9, 14, 38, 34, -35, 19, 25, 55, 31, -22, 22, 81, 48, 14, -15, -49, 19, 67, -54, 20, 13, 8, 3, 7, 32, 6, -6, -11, 19, 66, 40, 35, 19, 12, 29, -45, -61, 54, 105, 56, -20, 7, 46, 5, 4, 60, 10, 37, -19, -37, 66, 44, 15, 19, 35, -21, 29, 55, 16, 61, 85, -26, -3, -93, -30, 9, -36, 2, -42, -67, -32, -23, -2, 15, 79, 27, -17, -4, -126, -29, 18, -3, -40, -118, -28, 10, 42, 64, -30, -9, 101, 4, 6, -20, -53, -10, 18, -14, -62, -29, 8, -38, -3, 9, -21, -26, 63, 31, -5, 20, -28, 33, -25, -46, 6, 65, -6, 94, -13, 9, -8, 15, -21, 114, 12, -8, -42, -116, 5, -22, -2, 1, -27, -18, 8, 4, -70, 14, 65, -22, -9, -23, -1, 56, 15, -55, 20, 20, 44, -14, -70, -27, 33, 24, -12, 45, 78, 69, 50, -48, 91, 100, -29, 43, 19, 126, 57, -46, 16, 77, 70, -65, -18, 101, -27, -22, -53, 73, 39, 126, 96, -125, -20, -124, 19, 15, -99, 72, 36, -11, 108, 91, -123, -6, -49, -68, 61, -54, 107, 9, -35, 63, 126, 33, -4, 23, 61, 127, -10, -126, -1, -20, 29, 43, 20, -68, 56, -40, 43, -90, 72, -37, 38, -48, 57, -58, 48, -8, -57, 76, 36, 28, -34, -110, -15, -116, 103, -30, 29, 14, 126, -121, 127, -23, 49, -33, -125, 30, -13, 0, -3, -25, -93, 42, 36, -24, -19, 87, 8, -101, 54, -30, 27, -8, 69, 25, 33, 65, -17, 49, -1, 37, -92, 9, 46, -15, -40, -4, 3, -52, -13, -11, -19, 3, -42, 1, -31, 55, 45, 8, 31, 16, -29, -15, -25, -7, 6, 7, -62, -35, 103, 33, 13, 67, 26, -6, -53, -18, -36, 3, 32, 112, 0, 40, 12, -67, -27, -57, 37, 24, 8, 88, 70, -17, 48, 82, 37, 1, -1, 77, 5, -27, -17, 15, 8, 27, -85, 33, 0, 43, 37, 3, 19, 3, -47, 60, -55, 50, -23, 12, -12, 61, -86, 79, -37, -69, 38, 19, 10, -53, -26, -6, 103, -5, 18, -29, 74, 11, 97, -48, -36, 46, -45, -72, -65, -122, -39, -101, 85, 31, -4, 6, 25, -45, -4, -3, -107, 7, -120, 71, 19, 64, 43, -87, 30, -31, 14, 7, 21, 83, 74, -7, 30, -94, 66, 63, -85, 92, 8, 22, -24, -4, 31, -91, 39, 13, 37, 65, 60, -62, 92, -44, -8, 74, -7, -63, 54, -24, -90, -34, 17, 84, -41, -97, 13, 28, 14, -33, 1, -26, -25, -9, -48, -2, -54, -104, 4, -5, 38, -120, -48, -35, 124, 38, -57, -63, -8, 37, 91, -40, 7, 17, -58, 67, -56, 5, -86, 22, -17, -53, 6, 114, 37, -24, -96, -17, -69, -44, -58, -123, -18, -47, -123, -108, 2, -89, -38, -15, -34, 14, -31, -2, -99, 34, 28, 124, 92, -16, -28, -22, -60, -22, -2, 126, -122, 31, -20, 32, 42, -128, -41, 61, 30, -23, 79, -84, -36, -26, 87, 15, -2, -125, -24, -22, 39, -108, 16, -26, -31, -62, -22, 83, -123, 69, -108, 0, -12, -19, -6, -13, -70, -83, -30, 36, -32, 3, 95, -111, -18, 6, -91, 34, 56, -61, -92, -54, 23, -60, 17, -64, -54, 4, 39, -123, 24, -53, -46, 14, 65, -100, 0, -54, 21, -4, -119, 72, -35, 95, -56, 14, 24, -68, -40, -49, 21, -16, -91, -123, -75, -39, 25, 0, 38, 80, -32, 29, 25, -99, 0, -10, -28, 38, 34, 0, -3, -29, -74, -93, -1, 0, -26, 33, -65, -56, 28, -76, -22, -68, 1, -22, 71, -21, -12, -59, -11, 66, 12, 0, -82, 17, 27, -66, -56, -34, -11, -37, 75, 100, 78, 2, 12, -29, 40, -92, -11, 52, -4, 5, 38, 25, 44, -63, 40, -4, -19, -38, -38, 44, 44, 11, -12, 84, 47, -127, -32, 2, -57, -102, -23, -51, -12, 26, -59, 17, -5, -97, 98, -117, -36, -65, -35, -1, -1, 1, -93, -40, -39, 96, -120, -2, -26, -25, 66, -33, -76, -67, -12, -44, -8, 22, -58, -2, 4, -110, -21, -6, 30, -30, -113, -57, 83, 38, 5, -28, 14, -93, -35, -107, 6, 59, 17, 107, 74, -20, -19, 22, -93, -43, 49, -6, 17, 21, -108, 12, -39, 33, -127, -43, 14, -22, -18, 15, -74, 41, -6, -20, 35, 4, 99, 10, -16, -58, -14, -50, -20, -13, -30, -26, -82, 60, -28, 26, -110, -34, -51, 28, -128, -57, -20, -47, 97, -54, 104, -127, 50, 63, 20, -44, -126, -35, 13, -5, 5, 83, 34, -45, -12, 27, 0, -33, -55, 29, -94, 70, -44, -97, -9, 25, 55, 48, 57, -4, -27, -84, -93, -44, -36, -9, 49, 66, 39, 20, -11, -82, -66, 113, -18, -15, -3, 98, -8, -26, 9, -83, -9, 41, 61, 84, -22, 65, -57, 34, 7, 61, -53, 97, 6, 20, 28, -21, -105, -60, -63, 23, 41, -77, -54, -1, -18, 3, 51, -78, -96, 53, 83, -21, -39, 21, -104, -69, -12, -36, 76, 20, -77, 59, -37, 40, -31, -107, 29, 3, 5, -18, -37, -16, -41, 10, 56, 51, -40, -73, 25, 27, -80, -12, 73, 6, -34, 16, -64, -62, 28, 86, 39, 4, 78, 21, 8, 28, 55, -124, -107, -105, -24, 55, 6, 68, -23, -43, 60, -116, 1, -37, -38, 88, 46, -45, -53, -44, 49, -58, -40, -117, -63, 55, 62, 24, 53, 9, -20, 127, 83, 62, -12, -2, 3, 126, -26, -29, -110, 32, 33, 51, 43, 35, -8, 90, -3, -37, -120, -11, 100, 17, 0, 76, -21, 116, -24, 6, -116, -87, 125, -3, -57, -13, 125, 13, -116, 13, 43, -86, 32, -45, -14, 70, 41, -121, -18, -7, -51, 9, 57, 0, -6, -41, -4, -14, -40, -51, 124, 47, 13, -126, 124, -41, 5, 34, 7, 2, -34, -16, 9, -39, -107, -49, 41, -52, -23, -38, 39, -9, 92, -115, 45, -128, 35, -95, -24, -20, -40, 5, 0, 7, -107, 37, 0, -63, 49, 38, 35, 40, -33, -115, 55, -19, -77, -36, -88, 116, 74, 10, 73, 38, 12, -76, -127, -48, 79, 84, -57, 46, 78, 37, 102, 18, -95, -61, 17, 26, -113, -12, 43, -1, 68, -25, 67, -21, 69, -17, -14, -27, -21, -52, -7, -70, 5, -29, -110, -105, 35, -65, -25, -56, -1, 85, 18, -54, -81, -91, -71, 24, 25, -26, -68, -64, 9, 91, -107, 26, 34, 17, 21, 116, 81, 67, 25, -122, -43, 70, 46, -22, 101, -12, -42, 13, 10, 13, -38, 3, -3, 7, -81, -36, -23, 48, 76, 22, 22, -123, 4, 31, 37, 2, -2, 25, 40, 47, -41, -66, -23, -53, -33, -127, 20, -4, 18, 57, 38, -33, -19, 42, 40, 16, 94, 38, 0, 32, -36, -40, 29, -5, -57, -7, 8, -1, 40, 40, 48, 12, -26, 7, -24, 5, -61, -21, -50, 46, 13, -63, -91, 1, 12, -76, -42, -88, 26, 62, -35, -28, -51, -12, 8, -9, -102, 38, 23, 11, 32, -9, -43, -15, 30, 20, -9, 21, 63, -6, -61, -81, -25, -63, 37, 85, -30, 36, -4, -63, 64, -43, -15, -65, 75, 19, 51, 36, 4, -50, -9, -31, 35, 35, 36, 27, 27, 3, -41, -68, -118, 11, 88, -38, -48, -49, 10, -42, 16, 63, 12, -30, 3, -15, -6, -111, 15, 19, 13, 70, 34, -9, 37, 14, -26, 91, 51, 43, 5, 2, 5, 86, -31, -55, -86, -51, 20, -1, 56, -34, -41, -7, -88, -3, -24, 54, -27, 40, -40, -23, -72, -51, -104, -27, 38, -29, -57, -2, 4, -79, -1, 48, -36, 2, -62, 24, 20, -34, -119, -29, 2, 64, 73, 22, -100, -72, 7, 3, -3, -25, 68, -71, 26, -18, 8, -46, -6, -2, -66, 50, 25, 44, 29, 3, -2, 18, -67, 21, 12, 15, -4, -65, 126, -34, 68, 66, 36, 9, -32, -22, -5, 19, 27, 35, 47, -2, -70, -50, 60, 2, 12, -26, -18, -107, 9, -11, -16, 24, -9, -16, -49, -43, 9, 23, 6, -4, -26, -114, -125, -72, -41, 42, 64, 32, -1, -3, -73, -88, -37, 0, 63, 80, -46, -9, 86, -6, -86, -17, 20, -1, -17, 2, -8, -75, 22, -47, 26, -50, 65, -41, -13, 105, -75, 2, -47, 13, -2, 26, -10, -11, -82, 50, -24, -7, 16, -66, -32, 52, 25, 24, 59, -11, -12, -90, 67, -4, 1, 3, 33, -22, 77, -12, -90, 11, 28, 57, 17, 49, -31, -44, 68, 4, -54, 5, -2, 66, 73, -96, -50, -7, -7, -5, 99, 32, 58, 66, -60, 0, -116, 53, 6, 116, -41, -62, -51, -6, -24, -7, -113, -66, 21, 3, -39, 10, -62, 74, -5, 57, -56, -9, -26, 13, 114, 0, 80, 83, -29, -3, 80, 35, 55, 41, 94, -72, 8, -44, 77, 48, 21, -27, -11, 9, -5, -80, 32, -20, 59, 26, -71, 90, 37, -51, 127, -4, -51, -120, 38, -25, -43, -124, 46, -75, 40, 9, -7, 36, -58, 22, 42, -39, -123, -15, -20, -49, -76, -45, -127, -82, 32, 56, 77, 41, -86, 108, -9, 12, -75, 119, -57, -6, -77, -17, -63, 11, -116, -20, 14, -55, -9, -8, 109, -22, -30, 22, -71, -18, 19, 68, 119, 36, 34, -6, 2, -6, 29, 122, 50, -128, 87, 22, 68, -3, 75, 6, -53, -39, -54, 24, -43, 0, -9, -26, -42, -28, -73, 50, -70, 40, 93, -102, 65, -27, 53, 45, -17, 44, -15, 60, 69, 0, 38, -6, -49, 27, 25, -88, 15, 22, 13, -40, 55, -19, 26, 48, -52, 14, -6, -5, 14, -53, -61, 69, -44, -71, 59, 66, 87, 117, -33, 15, 99, -50, 7, -37, 98, 51, 62, 55, -39, -36, -61, -103, 8, -52, 50, -27, -110, 12, 15, 87, -44, -22, -23, -56, -4, -17, 18, 58, -73, -128, 17, 39, 87, 5, -69, -20, -47, 64, 13, -8, -27, -26, -10, 2, 9, 64, 25, 26, -32, -53, -22, -18, 35, -63, 7, 119, 43, 28, 100, 2, -54, 110, 5, 4, -5, 98, -32, 29, -17, 83, -95, -116, 73, -47, -76, 13, -89, -12, -35, -62, 77, 36, 52, 116, 117, 61, -19, -33, -7, 31, -41, 16, -8, -51, 9, 13, 36, 63, 43, -22, 19, -36, 6, -40, 29, -4, 26, 42, -69, -66, 77, -73, 110, -104, 46, 47, -40, -11, -41, 73, -39, 59, -29, 18, -12, -6, 9, 47, 13, 7, -24, -45, -109, 40, 26, 26, -2, 42, -93, 46, 92, -1, -85, 69, -4, 115, -72, -11, -47, 1, -25, 9, 7, -49, 34, 24, 30, -48, 116, 3, -12, -126, -21, 36, 17, -38, -13, -73, 2, -84, -64, 127, -45, -50, -79, -81, -35, 14, 49, 91, -122, -52, -73, -42, 17, -34, -12, -102, -33, -28, 45, 27, 47, -9, -28, -4, -53, -49, 15, -3, -68, 9, 25, 60, -69, 0, 126, -55, -9, -52, -94, -90, -13, -27, 109, 16, -6, 20, -69, 46, 43, -119, 29, 78, -54, 55, 67, -40, -49, -84, 25, 27, -16, -84, -94, 15, 127, -125, 56, -24, 29, -93, -33, -80, -82, 45, -5, -49, -29, 46, 21, 18, 27, 52, 9, -111, 8, -81, -125, 109, -9, -91, 72, -18, -9, 3, -97, 12, -119, -99, -69, 57, -25, -25, -106, -43, 34, -36, 114, -14, -23, 2, 46, 69, -9, -103, 87, 127, 74, 14, -5, 0, 14, -16, 73, 93, -30, -2, 10, -123, 26, 74, 116, 22, 51, -94, 108, -38, -38, -81, -38, 1, -46, -86, -12, 60, -53, 64, 1, 63, -125, -125, -20, 106, 88, 20, -127, 60, -10, 85, 19, -11, 45, 33, 2, 6, 66, -76, 86, 47, 63, 91, 119, 56, 114, 86, -6, -13, 21, -40, 20, 21, 8, -27, 44, 59, 36, -13, 99, 118, -47, 26, -94, 52, -76, -62, -76, 9, -25, 94, -27, 123, 34, 119, -35, 8, -16, 8, -44, -54, 24, -8, 31, 36, 31, 101, -42, -4, 18, -18, -4, 31, 49, -8, -17, -28, 10, -20, -104, -55, -39, 75, -63, -10, -1, 33, 102, 69, 43, 49, 53, -42, 42, 24, 75, 3, -55, -24, -20, -65, 78, 63, -1, -33, -31, -40, -36, -42, -49, -1, 48, -70, 63, 51, -3, 70, 45, -33, 32, 62, -11, -94, -94, -11, 33, -27, 101, -70, -4, 32, -48, 15, 44, -33, 16, -3, 124, 4, 64, 14, 73, -119, -72, 71, -39, 15, -33, -32, 54, -53, -32, 9, 45, -56, 111, 11, 42, 35, 75, 8, 34, -29, 24, -12, 45, 59, 45, -52, 35, 126, 90, 8, 9, 16, -31, 99, -72, 80, -100, 2, 20, 21, -36, 42, -22, -38, 44, -20, -13, -8, 19, 25, 31, -22, -89, 105, -52, 64, -19, -2, -98, 38, -23, -13, 22, -18, 4, 29, 24, 34, 56, 66, -5, -82, -80, 5, 57, 57, 0, -25, 44, -7, -73, -45, 33, 93, 41, 36, -18, 3, -76, -41, -59, -14, 65, 28, 9, -55, 22, 75, 27, 56, 104, 16, 35, 39, -50, -13, -90, -59, -35, 85, 42, 13, 46, 38, -35, -84, -13, -30, 54, -16, -11, 12, 19, -21, -11, -25, -17, 40, -115, 64, -120, -68, 19, 79, 35, 2, 17, 4, -6, 29, 26, -68, -65, 73, -48, -64, -64, -58, 3, 1, -15, 4, -7, -11, 7, -8, 11, -52, 4, 51, 28, 8, 18, 8, 16, 6, 14, -60, 88, 65, 51, 30, 6, -33, 47, -26, 9, 59, 7, -6, 13, 91, 97, -104, -19, -105, -44, 90, 21, -55, 45, 5, 40, 10, 73, 9, 33, -109, 57, -14, -1, 51, -51, 19, -4, 64, 19, -45, -80, -18, -77, 38, -32, -66, -40, 18, -7, -7, -38, -47, 11, -59, -31, -59, 6, 86, 5, 5, -82, -30, 15, 30, 44, 35, 45, 52, -21, 61, -75, 61, -58, -7, 92, -57, -17, 88, 0, 20, -9, -49, 15, 32, 57, 54, -116, -59, -57, -47, -6, -33, -2, 71, -121, 113, 48, -15, 41, -6, 67, -19, 37, 25, 22, 28, -11, 112, 20, -25, -19, 79, -45, -14, 48, -51, -105, 123, 23, -39, 127, -2, 23, -46, 68, 45, -46, -53, 54, 102, 28, 63, 14, 40, -26, 25, 43, 33, -55, 48, 5, -67, 55, -17, 60, -87, -4, -92, 23, 122, -9, -58, -85, 49, -34, 43, -37, -25, -14, -54, -86, 53, -68, 5, 84, -19, -117, -84, 38, 70, 95, -76, -86, 36, 54, 42, 50, 40, 83, -9, 16, -25, -85, 48, 122, -30, 5, 47, -124, 57, -63, 44, -28, -122, -113, 27, -12, -119, 38, -69, 44, -39, -29, -17, -126, 12, -4, -29, -23, 90, 0, 41, -103, 21, -48, 8, 90, -15, -60, -43, 90, -51, 63, -15, 70, -17, 0, 4, 19, -81, -100, 42, -54, -18, 76, -39, -43, -29, 29, 25, 9, -16, -34, -23, 27, 51, -78, -91, 40, 91, 0, 102, -36, -126, -52, 22, 73, 44, -41, -35, -34, 110, 14, -55, -3, 29, 16, -33, 106, -39, 39, -61, -42, -1, -49, -7, -1, 28, 18, 7, -19, 40, -13, 6, -52, 3, 2, 19, -19, 119, -100, -51, 73, -50, -89, 8, -30, 6, 33, 28, -24, -1, 47, 23, -35, 46, -4, -6, -33, 78, 40, -28, -10, -1, 39, 14, 25, 52, -1, 11, -39, 59, -22, -2, 61, 24, 40, 111, 30, -4, 61, -92, -95, 4, 66, 37, 19, 3, -3, 107, 1, 5, -10, 11, 21, 12, 63, -13, 71, -93, -41, -3, 82, 31, -1, 2, -31, 1, 55, -36, 35, 17, 7, 111, -8, -31, -2, -70, -15, 19, 41, -58, 10, 6, 15, -55, -55, -58, 26, 12, 54, 35, 3, 19, 35, 124, -54, 19, -68, -114, -2, 27, 37, -37, 34, -58, -3, -95, 51, -31, -1, -49, 26, -62, -7, 12, 7, 101, 16, -17, 126, -9, -27, -24, 95, -22, -40, 29, -15, 24, 15, 25, 30, -43, -4, 25, 12, 33, 29, 21, 6, -72, -9, 21, 65, -54, 65, -48, -22, 45, -36, 6, 5, 0, -20, 14, 25, -6, -6, 14, -31, 21, -22, -7, 58, 5, 53, 50, -16, 53, 73, 8, 22, -4, 15, 29, 67, -119, -9, -28, -14, 74, 54, 58, -17, 69, 29, 66, 96, -70, -108, -128, 16, -35, 54, 2, -69, 94, -7, 19, 2, -66, -3, -126, 44, 59, 43, -5, -34, 16, -2, -13, -126, 14, 109, 37, 9, 32, -26, -86, -39, -71, -34, 4, 9, -4, -16, -31, 80, 106, 21, 23, 29, -37, -37, 8, 75, 59, 10, -41, -32, 30, -17, -44, -11, -28, 34, -35, 24, -18, -9, -111, -53, -78, -127, -19, 24, -21, 16, -110, 32, -94, -4, -17, -46, -1, -122, -53, -21, 11, -96, -3, -21, 7, 2, -32, 46, 90, 35, -33, -19, 74, 43, 34, 30, 37, 63, 28, 23, -83, 8, 27, -18, 20, -13, -44, -8, 21, 29, 47, 7, 24, -13, -119, 27, -54, 9, 14, 26, 32, 102, 89, 25, 20, -5, 2, 33, -12, 22, 46, -45, 52, -25, 97, -65, 79, 79, 32, 18, 28, -78, -6, 88, 32, -29, 81, 31, -13, -38, 27, -44, -35, 19, 14, 30, 51, -27, -11, -16, -12, 45, 51, -37, -3, 11, 39, -3, -36, 23, 47, -9, -21, 22, 84, 55, 56, 47, -12, -8, -97, 83, 61, -119, 44, 27, 7, -43, -21, 88, 7, -30, -52, -9, 125, 31, -81, 56, -5, -71, -30, -52, -2, -24, -7, 39, 52, 101, -124, -3, 20, -41, -83, 65, 23, -42, 8, -38, -60, -14, -21, 33, -30, -18, 123, -25, 68, -120, -66, -3, -89, 3, -22, 22, -42, 75, -34, -33, 78, -28, -40, -5, 24, 28, -49, 29, 2, -59, 2, 8, 5, -71, 33, -83, -110, 24, 99, 33, -70, -41, 56, -7, -29, -46, -106, 20, -19, -42, 24, 18, -35, 18, -67, 119, -15, -34, 56, -40, -26, -50, 61, 98, 30, -53, 44, 123, 55, 42, -99, -15, -21, 41, -94, 25, 56, -125, 51, -126, -45, 27, -83, 20, -19, 67, 10, -103, -34, 11, 4, 42, -117, -15, -38, -59, 66, -54, -63, -1, -49, 36, -31, -57, -28, 14, 46, 69, -24, 38, -54, 79, -31, -32, -73, 3, -19, 122, 61, -20, -65, 107, -7, -57, -125, 65, 8, -55, -32, -10, -30, -90, -104, -119, -12, 18, -34, 2, -28, -99, 67, -117, -113, -9, 6, 58, -62, 126, 35, -40, -16, 98, 21, -2, -5, 14, 24, 43, 48, 44, -9, 47, 58, 61, 17, 20, -30, 19, 103, -121, 21, -15, 45, 73, 25, 25, 28, 35, 30, 27, 2, 68, 24, 23, 114, 55, -85, -10, -44, 38, 80, -27, -12, -24, -28, -22, 88, -10, -35, 23, 18, 16, 86, 14, 53, 33, -86, 0, 35, -21, 22, 40, 33, 50, 13, 22, 15, -44, 16, -5, 50, 50, 23, 57, 18, 9, 29, -53, 64, -10, 7, -26, 13, 1, -33, -29, -54, -32, 70, 40, -38, 27, 25, -24, -7, 28, 9, 46, 30, 43, 19, 26, 25, 37, -18, -1, -36, 45, -50, -43, 35, 17, -9, -10, 4, -88, -43, 40, 39, 30, 31, 77, -8, 95, -70, 40, 96, 45, -41, 16, -126, 15, -29, -12, -19, -21, 17, 53, 22, -24, -62, 6, 33, 17, -28, -16, 114, -51, 9, -45, 37, 30, 111, -28, 10, 0, -30, -27, -5, 84, -75, -47, -2, 78, -58, 0, 33, -14, 91, -124, -1, 32, 0, -61, 1, -56, -4, -15, 42, -38, 12, -7, 10, -26, -6, 40, 3, -57, -77, 38, 79, 47, -14, 48, 15, -10, -23, 25, 23, -41, 29, -5, 10, -127, -61, -58, 25, -51, -37, 29, -5, 36, -82, -95, -40, -9, 35, 42, 65, 24, -9, -46, 3, -58, -11, -70, -48, -26, 28, -21, -53, 18, 10, -13, 75, 22, 54, 41, -29, -55, 50, -5, 28, 15, 15, -59, -22, -46, -35, -51, -33, -11, -66, -23, 9, 2, 11, 20, 7, 55, -52, -15, -28, -54, 5, -120, -63, -39, 14, -49, -18, -61, -87, 19, 20, 36, 113, -9, -28, -29, -64, 7, -13, -50, -8, 18, 34, -29, -33, -25, -9, -2, -39, 49, 14, -16, 37, 44, 67, -3, -93, 57, -26, 14, 24, 77, 5, 38, 10, -10, -8, 38, -21, 20, -9, 71, 2, -3, -32, -34, 2, -125, -51, 3, 17, 26, -104, -98, -51, 30, 17, -5, -19, -21, -21, -41, -93, 8, -52, -25, 54, -1, -12, 19, -2, 35, 56, -39, 49, 56, -52, -14, -58, 37, 50, -66, -27, 18, 35, -80, 22, 12, -6, -77, 30, -22, -18, 37, -29, 19, 18, 15, -34, -45, -1, -5, 58, 52, 9, -9, -105, -115, 91, 45, -3, 20, 27, 2, 54, 116, 109, 84, -52, 9, 33, 7, 13, 13, -47, 14, 30, -3, 111, 11, 51, 98, -44, -112, 93, -41, -45, 122, 73, -9, -28, -48, -9, -61, -91, 18, 67, 91, -54, -52, -86, -124, 65, -50, -56, 20, -42, 4, -75, 56, 90, -81, -104, 42, 16, 102, 35, 107, 73, 51, 9, -50, -100, 24, 64, 38, -17, 120, -16, 27, 114, -107, 85, 74, -50, -13, -80, 3, -14, 6, 67, -23, -123, 49, 49, 22, -85, -69, -110, 126, 58, -15, 80, -16, 91, 51, 45, 55, -23, 96, -90, -5, 20, -9, 69, 49, 6, -15, 124, 36, 38, 36, 29, -91, 56, 51, 26, 4, -120, 3, -42, -23, -12, 13, 5, 5, -69, -33, 12, -81, -2, -4, 59, 78, 100, -8, -109, 28, 5, -121, -1, 35, 2, -13, -9, -67, -120, 6, 29, -111, -58, 45, -33, -30, 12, 123, 16, -43, 2, -24, 45, 19, -90, -12, -36, -88, 0, 15, 18, -4, 35, 39, -60, 34, -8, -35, 15, -120, 10, -22, 81, -100, -21, -37, 0, -19, 34, -87, 6, 54, -18, 41, 43, -4, 11, 25, 49, -19, 24, -20, 31, -97, 4, 13, 74, 90, -59, 27, -11, -19, -5, 53, 43, 20, -5, -84, 34, 13, 34, -47, -56, -30, -64, 32, 37, 52, 28, 60, 19, 38, 72, -40, 16, 10, -36, -5, -30, 50, 24, -13, 36, 25, 43, -39, -23, -22, -24, 47, 95, 40, 40, 2, 11, -66, -7, 48, -24, -26, 27, -7, 25, -8, -31, 89, 25, -12, 40, -7, 22, 45, 56, -21, 4, -16, 70, 48, 13, 28, 3, 0, -27, -1, 30, -3, 31, 8, -1, 18, 8, 50, 15, -10, 76, 112, 27, -55, 41, 38, -23, 18, -65, -74, -27, 9, 17, 21, 78, 60, 17, 29, -63, -49, -53, -102, 8, 52, 112, -7, -52, 37, 27, -39, -15, -5, 5, -14, 33, 109, 65, 64, 68, -1, -18, -79, 74, -10, 50, 37, 20, -113, -40, 84, -50, 2, -24, 122, 42, 60, -16, -41, 44, 54, 15, -52, 29, 17, 4, -59, 85, -10, -11, 28, 29, 33, -49, -72, -101, -45, 65, -21, -8, -25, 3, -36, 24, -59, 12, -1, -52, -31, -59, 33, -17, -30, 53, 113, -116, 70, 20, 0, -20, 27, -119, -53, 19, -20, -85, -92, -20, -32, 14, -120, 22, 22, 126, -47, -18, 50, -38, 81, -126, -62, -86, -105, 26, 29, -44, 125, -54, -127, -120, -21, -126, -54, 16, -112, 36, -3, 75, 123, 8, -54, 38, 59, -16, -23, 11, -127, -26, -64, -121, 56, -94, -5, 7, 13, -10, -18, 58, 25, -6, 29, 21, 42, 70, -33, -35, 36, 43, 48, 109, -9, -120, -123, -38, 36, -121, -34, -112, 66, 16, -125, -78, 127, -128, -51, -27, -102, -119, 118, -18, 127, -12, -24, 7, -16, 10, -66, -36, 9, -36, 9, 41, 67, 18, 82, 14, -15, -67, 67, 2, 5, -84, -16, -37, -10, -51, -27, 74, 41, -114, 0, 67, 0, 100, -22, 20, 8, -42, -15, -36, 11, -12, -85, 34, -24, 13, 18, -43, -18, 27, 38, -28, 5, 49, -2, 36, -17, 101, -76, 27, -20, 58, -25, -27, 0, -17, -18, 23, -64, 24, 35, -21, -106, 24, 2, -21, -63, -14, -19, -7, 19, -63, 10, 29, -35, 6, 10, 13, -10, -15, 1, -8, 14, 16, -7, -7, 19, 25, -14, -56, -32, 53, -10, -48, -28, -127, 7, -49, -75, 3, 25, -7, 7, -49, -114, 2, 31, 19, 56, -56, 24, 103, 64, 51, -77, -66, -20, -28, 82, -85, 11, -54, 49, -8, -10, 23, -101, -4, 103, -70, -40, -4, 91, -45, -42, -73, 1, -58, 1, -10, 7, 9, -52, 17, -30, 1, 6, -125, 12, -16, -70, 49, 126, -8, -56, -26, 63, 127, -127, -70, 32, -50, -88, -15, -19, 38, -32, -11, 25, 91, 124, -55, 77, 52, -22, -21, -66, -66, 125, -41, 2, 33, -79, -42, 6, -47, 44, 18, 32, 30, 15, 26, -8, -97, 8, 49, -29, 51, 95, 90, -69, -54, 2, -70, 17, -66, -41, -16, 116, -14, 74, 8, 4, 51, -28, -125, 17, 74, -30, -44, 39, 30, -68, -6, 27, 68, -1, -46, 44, 39, -102, -69, -79, 81, -25, 62, 89, 5, 20, -43, -1, 46, 11, 29, -10, -57, 13, -21, -12, 37, -35, -3, 21, 78, -122, -90, -48, -2, -16, 24, 45, -120, 4, 30, 15, 115, -80, 38, 95, -60, 80, 61, -29, 13, 58, 82, 29, 81, 3, 28, 31, -14, -47, 40, -45, -6, -56, 17, 30, -52, -21, -122, -102, 22, -17, -62, 12, -7, -12, 94, -38, 11, -88, -44, -16, 37, -43, 31, -36, 31, -10, -89, 126, -123, -2, 19, -81, 23, -78, -13, 25, -5, -34, 2, -30, 24, -5, -33, 6, 44, 10, -9, 8, 6, 47, -8, 32, 9, 8, -4, 24, -17, 53, 89, 17, 40, -20, -57, -112, 31, 6, 55, -21, -112, 111, -124, -26, -47, -16, 76, -8, -21, -59, -38, -17, -10, 20, 73, -48, 50, 2, -33, -79, -40, 82, -2, 3, 101, -40, 14, 42, -94, 34, -55, -126, -9, 12, 35, -112, 58, -30, -30, 4, 55, 37, -36, -126, -14, -68, 77, -37, 99, 2, -23, 11, -31, -120, 22, -101, -51, 52, -17, -37, 1, -12, 15, 20, 45, 58, -37, -86, -13, 42, 53, 76, -48, -1, -45, -60, 17, 42, -81, 1, 18, 48, -61, 127, 23, -23, -8, 27, 41, 6, 36, -125, -61, -64, 33, 1, 63, -44, 22, -63, 40, -118, -83, -3, 31, -83, -94, -105, -43, 84, -6, -69, 41, 25, -66, -13, 3, 91, 31, 72, -25, 52, 73, -126, -8, -116, 72, 14, -34, 12, -111, -26, 4, -102, 67, -28, 47, 5, -52, 114, -11, 55, -120, -93, -105, -46, -24, -47, -16, 0, 15, -13, -101, 64, 127, -96, -67, -128, -125, -29, -30, -17, -56, 3, -33, 14, 4, 22, 56, -46, -60, -121, -21, 35, -16, 115, 6, 0, 11, -12, 19, -4, -4, -122, 46, 33, 40, -40, 42, 67, -39, -32, -51, 67, -127, 54, 13, 23, 58, -3, -88, -2, 61, 72, -69, 7, 123, -52, 10, 10, 17, 22, -17, 6, 21, -55, -3, -23, -12, -47, 2, 66, 12, -7, 25, 78, -55, -29, -23, -36, -12, -58, -115, -13, 13, -52, -17, 5, 30, -20, 69, 26, -45, -33, 19, 12, -16, 21, -21, -37, 5, -18, -54, -43, -1, 49, 1, 34, 23, -24, 57, -86, -9, 48, 12, -95, -59, -47, -36, 6, 81, 28, -2, 11, -4, -4, 27, 13, -21, 34, 60, -31, 11, -25, -5, 18, -32, 125, 51, 65, -68, 11, 22, 115, 56, -66, 24, 41, -90, -17, 20, -35, 81, 7, 58, 71, -24, 61, 17, 16, 22, -37, 61, 124, 88, 18, 11, -64, -73, -22, 58, -92, -96, 106, 18, -41, 88, 83, 122, 105, -77, -21, -97, -128, 13, 41, -11, -70, 55, -12, 5, 35, -41, -80, -33, 52, 10, -75, 0, -41, -35, -51, -51, 18, 31, 25, 92, -107, 35, 28, 117, -2, 26, -127, -14, -48, -53, 9, -123, -25, -62, 90, 14, -5, 43, 1, 25, 64, 90, -23, -35, -75, 25, -42, 18, -73, 2, 34, -65, 29, 28, 33, -32, -37, 6, -7, -90, -83, 2, 29, 15, -47, -51, 47, 21, -8, -9, -43, 53, -23, 45, 19, 23, -57, -39, 14, 56, -114, -64, -2, 13, -64, -34, 61, -8, 24, 26, -1, 6, 14, -126, 0, -6, 21, -43, -18, -29, 21, 46, -26, -3, -25, -23, 18, 60, -48, 47, -11, -69, 74, -34, -41, 4, 18, 16, 41, 32, -128, -42, -59, 48, -17, -81, -40, -56, 19, -3, -19, -53, -4, -36, 52, 93, 40, 123, -25, 26, -93, -122, -127, 38, 10, 37, 25, 18, -29, -24, 22, 3, 41, -15, 90, -64, -53, -23, -64, -77, 91, -54, 80, -21, -41, 17, 19, 16, 7, -3, -19, -61, 31, -43, -57, -29, -45, 44, 40, 30, 57, 43, -23, -28, -53, 4, -38, -26, -87, -8, -11, 28, 42, -54, 75, 1, -42, 58, 3, 24, -26, -27, 37, 15, 96, 52, -20, -5, 46, 52, -11, -30, -14, 22, 2, -11, 3, 28, 38, 61, 23, 99, -27, -20, -1, 21, 16, 31, 24, 16, -29, -22, -21, -2, -76, 19, -81, -124, -47, -4, 30, 18, -22, -74, 46, -43, 31, 33, -18, -54, -8, 43, 41, -19, 36, -22, 41, 72, 87, 36, -24, -11, 2, 8, 98, -30, -37, 47, -21, 12, -30, -128, -71, 91, -72, -39, -15, 100, -20, 98, 20, -29, -46, -36, -46, 40, -12, -7, 45, -48, -10, -39, -8, -45, 9, 57, -49, -10, -21, -21, -49, -17, -18, -28, -31, 90, -10, -63, 17, -33, -40, -71, 34, 22, -9, -31, 121, 4, -1, -83, -18, 25, 5, 18, -19, 20, 49, 9, 16, 27, 14, 23, 18, 53, 28, -99, -42, 17, -43, -114, 3, -12, -13, -10, -7, -37, -27, -7, 26, -14, 19, -6, 25, 13, 17, 19, 63, -67, 47, -39, -126, 12, 32, 17, 12, 9, -50, -126, -90, -28, -70, 9, 102, -59, -19, 20, -58, -126, -13, -76, 1, -4, 69, -42, -49, -18, -124, -59, -68, 32, -31, 18, 127, 24, 123, -18, 30, -25, -7, 13, -127, -71, -19, -43, -110, -11, -111, 53, 33, 77, 119, 74, -70, -127, 83, 68, -15, -2, -29, -48, -10, -38, 16, -5, -32, -98, 25, -64, -51, -124, -126, -126, -54, 62, -116, -28, -76, 2, -123, -27, -52, 127, 102, -76, 99, 70, -64, -3, -114, 124, -56, -29, -26, 1, 11, 55, 101, -38, 50, 111, 10, -43, 48, -72, 20, -78, 23, 46, -25, -23, 44, -30, -27, 31, -17, 55, 27, -75, 59, 81, -38, 25, -44, 111, 57, 19, 12, 84, 7, -15, -56, 42, 49, 15, 38, -9, -56, 38, 92, 81, 17, 92, 32, 25, -39, 8, 40, 2, 34, -41, 26, 35, 64, 57, 47, -32, -120, 46, -5, -51, -114, 82, 61, 55, 31, -59, 120, 106, 115, -3, 6, 16, 54, -12, 43, 12, 21, 3, -12, -35, 15, 41, 67, 67, -15, 48, 65, 57, -23, 3, -37, -46, -72, 18, -69, 97, 12, -91, 13, 16, -61, 8, 12, -107, 26, 15, -61, 3, 42, -51, 39, 40, 69, 29, 6, -4, 42, 16, 16, 94, 40, -9, 72, 40, -2, -2, 34, -18, 26, -20, 80, 8, 120, 30, 65, 98, -42, 83, 23, -47, -30, -14, -25, -18, 22, -118, 90, 49, 2, 15, 41, 22, 11, -30, -27, 58, 30, 50, -66, 13, 100, -57, 5, 58, 26, -8, 94, 17, -61, 56, -72, 28, -113, -52, -24, -18, 28, 55, 0, 9, -109, -102, -1, 19, 67, -15, 61, -20, -108, -1, -32, -89, -9, 35, -80, -19, 66, 90, 76, -97, 34, -20, 51, -69, 18, 42, -19, 76, -21, -1, 71, -51, 72, -29, 40, -60, -8, 72, 16, 21, 36, 22, 55, 31, -17, 75, 70, 24, -10, 28, 1, -15, 22, 51, -17, -31, 54, 75, 84, 51, 99, 55, 4, 26, 5, 6, 51, -1, -36, 53, 27, -72, -63, -38, 17, 102, 114, -35, -61, 50, 66, 125, -14, -36, 25, -32, -17, 17, -9, -70, -83, 41, -36, -40, 8, 87, -60, 15, -75, -58, -54, -24, -4, 4, -109, 36, 46, 73, -66, -6, -34, 12, -30, 74, -55, -23, 70, 25, -1, -52, 72, 35, 109, 27, -28, -37, 44, 39, -66, -125, 18, -49, -9, -5, 53, -15, 42, 49, 80, -90, -60, 108, -46, -13, 16, 37, 4, 55, 7, -47, -28, -79, 38, 25, 57, -20, -9, 53, -74, 68, -22, 29, 20, 51, -114, -1, -23, 88, 16, 71, 30, 54, 82, -12, -21, -34, 16, 35, -25, 54, -94, 36, -87, 0, -62, 29, -50, -22, -41, -108, -54, 28, 24, 122, 6, 74, 91, -35, 18, -35, -3, -38, -62, 32, 112, 50, -53, -73, 25, 58, -27, -69, -45, 44, -3, -50, 63, -19, 47, -50, 44, -11, 10, 77, -1, -17, -24, -97, -98, 22, 33, -34, 14, 10, -72, 123, -62, -47, 75, -34, 9, -43, 61, -71, 42, -103, -38, 47, -114, 0, 16, -52, -24, 62, 27, -29, -63, -13, 51, 126, -31, 19, 8, -67, 11, -111, 126, -17, -15, 51, 127, -18, 8, 20, 5, -24, -38, 19, -39, -5, 94, 15, -21, 4, -64, -58, 71, -92, 30, 43, -23, 3, 17, 58, 27, 38, -37, -22, -12, 40, 62, 33, 9, 5, 33, -34, 15, -35, 36, 118, 10, 17, 42, 45, 57, 19, 32, 55, 58, 79, -126, 16, -99, -28, 10, -22, 16, 45, 55, -1, 125, -38, -7, 40, 56, 4, -76, 41, -50, -20, -40, 59, -45, -24, -60, 62, 97, 47, 65, 2, -57, -4, -41, -7, 67, -4, -16, 41, -54, 15, -42, -4, 94, 20, -101, -63, -126, 56, -36, -5, 47, -11, -33, -24, 35, 64, 28, -24, 104, 44, 22, -19, 40, -8, -49, -54, 80, 62, 43, -29, -8, -7, -20, 3, 32, -59, 53, -4, 10, -82, -122, -126, -98, -60, -33, 124, 126, 12, 68, 10, 1, 127, -12, -12, -46, 54, -127, -86, -41, 26, -35, -125, -14, 3, 56, -50, -123, -14, 59, -47, 109, -12, -18, 115, 55, 32, 22, 108, 22, -47, 18, -128, -50, 94, -4, 2, -17, -25, -49, 37, 11, -30, -10, 70, 29, -8, -81, 16, 56, -63, 0, 45, 40, -2, 124, 15, -5, 22, -89, -9, 39, -52, -1, -5, 70, -67, 15, 14, -27, 26, -18, -34, -22, 11, 1, -1, 6, -65, -104, 30, -32, -18, -125, 72, -63, 70, 26, -82, -103, 7, -44, -26, 26, 115, 11, -1, -22, 10, 75, 42, 7, -35, -105, 52, -9, -41, -1, -125, 22, 49, 8, 44, -128, -68, 47, -112, -121, 27, 108, 64, -118, 4, -68, -7, 42, 24, 64, -121, 47, -29, 120, -44, 124, -29, 38, 21, -5, -7, -21, -8, 85, 4, 38, 16, 27, -32, 100, -3, -11, -25, -18, -111, 40, 32, 46, -4, 28, -70, 102, -23, 50, 13, -25, 41, -29, -22, 25, 12, -50, -108, 36, -38, -3, -12, -35, 21, 108, -103, -127, -11, 0, -125, -39, -126, -122, 22, -123, 55, -123, 26, -89, 50, 14, -127, -21, 117, 26, -69, -127, 95, 1, -81, -41, 51, -27, 10, -59, -18, -128, -50, -91, -123, -69, 21, -14, -63, -119, 75, 24, -73, 7, 52, -39, -100, -33, -127, -25, 19, 23, 56, 7, 2, -12, -26, -2, 27, -45, 24, 13, -32, 64, 40, -34, 47, -35, -89, 76, -71, 70, -34, 30, 22, 9, -124, 13, -105, -33, -31, 42, 9, -68, 110, -38, 54, -72, 21, -126, -27, 16, 19, -22, 1, -31, -63, 28, 3, -58, 37, -9, 10, -75, -6, 97, -54, 113, -40, -37, 90, 63, 27, 52, -58, 61, 23, 118, -3, 23, 35, -14, -66, -60, 5, -38, 37, -94, -17, 47, 115, 36, -87, -46, -29, 0, 4, 72, -9, -73, -50, -10, 14, 31, -10, 20, -44, -89, -12, 63, 63, 36, -50, -71, 59, 109, -62, 48, 30, -19, -53, -95, -3, 60, -48, 76, -12, 24, 98, -20, -99, 23, 58, 7, -7, -7, -9, -50, -13, 18, 80, -118, 22, -16, -48, -17, -36, 33, -24, 47, 56, -114, -25, -120, -110, -73, 91, -41, -16, -46, -21, -73, 14, 113, -24, -40, 63, 33, 17, 120, -53, -22, 127, 58, 25, 11, -16, -7, 17, 127, -73, -95, 28, -18, 51, 121, 0, 42, 6, 17, -16, -18, -18, 114, 27, 61, -29, -51, -15, 1, -71, 37, 25, 99, 85, -36, 8, 11, -88, -15, -114, 72, 23, -59, 50, 85, -55, -32, -16, 70, 84, -29, 50, 56, -5, -19, 62, 56, 11, 51, 43, -31, 5, 92, 1, 9, -76, 18, -89, 3, 6, 44, 45, 40, -1, -33, 35, 21, -25, 35, -11, 50, -50, -61, 28, -108, -6, -62, 111, -13, 44, -66, -31, -9, -22, 18, -46, 8, -14, -43, -5, -95, 77, 80, 31, 23, 32, -48, -3, -29, -9, -41, -25, -80, -34, 55, 1, -11, -10, 22, -69, 6, -19, 83, -49, -28, 20, -4, 52, -8, -31, -18, -6, 48, -22, 53, -16, -24, -56, -59, -32, -34, -11, -50, 49, 31, 55, -29, -53, 35, 6, -16, 1, -19, -6, -12, -25, 21, 41, -1, -2, -38, -43, -83, 18, -2, -18, -27, 54, 47, 24, -33, -50, 4, -6, -3, -23, -16, 34, 4, 34, 29, -72, 89, 58, 91, 25, -5, 35, -98, 33, 0, -14, -52, 96, -38, -81, -24, 36, 68, 0, -42, 8, -20, -14, 10, 115, 17, 6, 37, 0, -52, 64, -10, -28, 26, 89, 10, 16, 68, -7, 12, 26, 21, 73, -51, -53, -65, 1, -30, -6, -17, 3, 1, 11, 7, 82, 39, -37, -59, 59, 3, 111, 13, 14, -19, -68, 44, 11, 11, 22, 120, 13, 18, -32, -17, 1, 18, 51, 53, 31, -15, -49, -16, -74, -39, -52, 55, -68, -28, 116, 12, 25, 37, 60, 64, 54, 56, -60, 79, 51, -46, 62, -17, 2, 38, -46, 99, 123, 28, 114, 46, 87, 1, -61, 64, 67, 21, 0, -38, -19, 29, -61, 1, 50, 16, -8, 51, 48, 89, 49, 47, 96, -13, -29, 73, 27, 126, -12, 0, -23, -22, 18, -42, -39, -28, 23, 118, -26, -62, 63, -44, -27, 92, 32, -16, 42, 90, -22, -63, -41, 19, -46, 98, -61, -70, 46, 0, -65, 37, -16, 54, 1, -3, 72, -56, -108, 7, 27, -38, -125, -41, 10, -6, -60, 127, -32, -71, 68, 10, -35, 64, 44, 48, -21, -41, -37, 23, -59, 40, 38, -22, 26, 18, -20, 73, -114, -24, -53, -39, -27, -11, -98, -21, 5, 71, -115, 11, -37, -107, -60, -5, 72, -84, -62, -28, -5, -121, -86, -2, -51, 53, 127, 124, -39, 44, -44, -125, 79, 29, 42, -6, -39, -29, 19, -26, 10, -72, 49, 13, 41, -51, -97, 0, -93, 52, -84, -32, -66, 12, -35, 20, 3, 22, 69, 20, 97, -43, 41, 8, -36, -26, 118, 26, 10, 35, -52, -2, 22, 8, -13, -43, 2, -44, -1, -18, 5, 61, -118, -103, -55, 5, 13, 10, 5, 4, 106, 2, -22, 30, -13, -117, -121, -38, 29, 24, 14, -14, -62, 33, -13, -18, -8, -69, -6, -113, -91, 1, -36, -32, -17, -36, 40, -10, -34, 10, -74, -27, -33, -33, 12, 18, 4, -1, -1, -33, 34, 8, 26, -41, 120, 60, -41, -5, 11, -41, 37, 10, -7, 31, 31, 26, -55, 25, -1, -12, 53, 43, 29, -8, -48, 29, -94, 39, 41, -45, 91, 15, 3, 29, 12, 69, 13, -68, 65, -12, 54, 55, -18, -11, -40, -18, -36, 76, -11, -79, -11, -16, 38, -42, 86, -14, 37, -6, -8, 57, 2, -28, 11, -47, -89, -34, -47, -73, -121, -19, -73, 69, -6, 35, -5, 114, 82, -39, 14, 5, -67, 12, -21, -17, -96, 14, -20, -12, 2, 81, 12, -1, -126, 65, -16, -36, -2, 4, -35, 2, -6, 49, 1, -42, 69, -11, -47, -25, 25, 9, 103, -50, -54, -8, 6, -56, -8, 21, 6, 7, -104, -18, -106, 51, 127, -85, 50, -6, -27, 20, 91, 22, 4, 39, 25, 43, -5, -20, -32, -95, -3, 40, -104, -11, -55, -128, -46, -71, 37, -101, 77, -6, -44, 49, 26, -63, -105, -54, 60, -58, -13, -37, 39, 43, 72, 42, 22, 65, -60, -75, -59, -116, -106, -3, 25, 45, -109, -84, -123, -28, 35, -24, 0, -114, -82, -109, -114, 3, 14, 117, 55, -17, 19, 32, 68, 45, 8, -128, 75, -46, 82, 80, -85, -15, 106, -44, 92, -31, -106, 93, -33, 80, 37, 3, -92, 15, -18, 40, -107, 28, -48, -87, -127, 37, 47, -64, 14, 36, 20, 10, 25, 66, 18, -69, 92, 59, 17, -128, -48, -39, 120, -14, -63, -31, -48, 8, -9, 60, -21, -19, -2, -2, 37, -84, 98, 80, -120, 82, 21, -126, -14, 8, -54, 3, -6, 52, 8, -16, 23, -3, 9, 61, -124, -9, 31, 14, -31, -2, -30, -3, 2, 2, 0, 111, -42, 5, -21, -43, 52, 36, 17, 39, 79, -30, 53, 15, 5, -97, -29, 10, -7, 1, -91, 78, 35, 34, 14, 38, -9, -16, -96, 15, -125, 7, -22, 32, 17, -101, 16, 15, 23, -30, -62, -15, 6, 27, 4, 55, 38, -37, 29, -70, 33, -101, -59, -103, -50, -34, -50, -62, 53, -26, 127, 1, -1, -10, -6, -13, 7, -13, 95, -111, 55, 12, 6, -3, -108, -59, 27, -64, 36, -122, 125, 27, -75, 12, 1, -59, 84, -105, 109, -94, -76, 20, 23, 11, -36, -36, 43, -43, -123, 15, -100, 65, 20, 16, -42, 25, 69, 28, 37, 22, 112, -78, 23, 17, -10, 34, -63, -11, -127, -46, 39, 39, 12, -47, -69, -67, -53, -60, 8, 15, 45, -83, 6, -30, -114, 9, -78, -43, -47, 69, 15, -72, 68, 44, -53, 20, -120, 58, -4, 42, -11, -16, -125, 9, -65, -9, -4, -84, 105, -12, -92, -105, -21, -33, -121, -68, -8, 1, -39, -119, 38, -1, -2, -127, 3, -104, -43, 127, -4, -35, -125, 117, 106, -67, 49, 69, 15, -102, 80, 8, -84, -84, -96, -94, -27, -32, 4, -3, -16, 98, -25, 17, -24, 51, 11, 37, 23, -85, -61, -41, 62, 28, -127, -124, -101, -27, 98, -71, 56, 1, -92, 28, 7, 13, -11, 34, 23, -125, 56, 111, -124, -44, -15, -47, 5, -7, 2, 45, 1, 26, -54, 26, 11, 0, 5, -11, 22, 35, -41, 5, 41, -78, 24, 18, -5, -30, 49, 22, -1, -19, 39, -26, 1, -16, 8, -8, 3, 17, 75, -1, -50, 30, -49, 3, 24, 35, 38, 1, 3, -9, 10, -45, 42, -6, -26, -35, 71, 75, 0, 17, 5, 11, 57, -90, -100, 0, 50, -1, 26, 32, 11, -20, 121, -41, -9, 22, 5, -2, -40, 22, 4, -71, -14, 3, 10, 6, -5, 0, 29, -22, 86, -3, 4, 8, 13, 8, -3, -58, -30, -19, -15, 18, 6, 16, -19, -87, 26, -11, -46, 64, 40, 6, 108, -16, 49, 67, -45, 15, 51, -6, 75, 87, -39, -92, 27, -14, 7, -32, -128, -15, 39, -4, 50, 0, -26, 25, 62, -24, 67, -57, 27, 64, -25, 29, -35, 69, 6, -56, -70, -1, 7, -69, -32, 45, 52, 31, 20, 27, -29, 26, -72, -95, 38, 125, -8, 67, -33, -126, 7, -13, 86, -111, -9, 23, -52, 8, 16, 59, -26, -9, -19, 40, -10, 87, 21, 17, -60, 126, 120, -22, 35, 22, -14, -24, -33, 2, -96, 97, -126, -118, 17, 9, 41, 70, 14, -50, 11, -20, -37, -7, 76, 16, -52, 21, -34, 34, 13, -13, -81, -126, 82, 65, -14, 22, -23, -82, 61, -124, 34, -78, 76, 56, -128, 41, 36, -48, 45, -40, 33, 1, -102, -45, 0, -126, -58, -62, -2, 60, 6, 108, -17, -37, -76, 13, 8, 24, -6, -9, 69, 62, 26, -11, -9, 15, -30, -6, -48, -121, -98, -60, -125, 26, 52, 18, -64, 108, -20, -126, 58, -123, 48, 70, -117, 75, 46, -62, 9, -34, -21, 39, -15, -91, 37, 1, -32, 18, -10, 44, -11, 15, 39, -32, -55, -55, 92, -52, 37, -6, -9, -45, -89, -30, 14, -29, 11, -69, -35, -62, 21, 55, -1, 85, 21, 50, -20, 5, 9, -81, 22, 80, 33, 38, 35, 29, -22, 39, 83, -54, -5, 5, 14, -25, 3, -20, 29, 20, -14, 7, 20, 7, 11, -32, -52, -15, -8, 8, 36, -8, 21, -9, -34, -116, -14, 32, -23, 38, 30, 5, 27, -5, -78, 67, -4, -53, -75, 9, 53, -12, 8, -3, 15, -4, -10, -4, 21, 52, -16, -13, -36, -20, -67, 113, -57, -27, 46, -5, -9, -27, -123, -71, 71, 38, -30, 113, 31, 24, 58, 8, 43, -77, -13, -81, -40, 55, 29, 9, 13, 30, 4, -29, 24, 10, -124, -10, 1, -25, -77, -30, 25, -12, -29, 5, 47, -36, -39, -41, -39, -19, -44, 0, 72, 34, -10, 9, 58, 45, 24, -45, -75, -17, -9, 74, -20, -35, 28, -68, 5, -82, -22, 12, -63, 35, -6, 23, 37, -9, -46, -19, -22, 32, 13, 7, 1, 14, -29, 65, 35, 4, 66, -23, 33, 42, -28, 111, -18, 19, -26, -79, -3, -68, -89, 126, -56, 0, -83, 19, 95, 24, 52, -66, 10, 98, -18, 51, -31, -13, 8, -126, -5, -48, 91, -37, 127, -11, 105, -119, 18, 72, 60, -128, -117, -102, 36, 91, 17, 24, 4, 116, 11, 103, -15, -43, 22, -12, -82, 74, -128, -49, -18, 54, -86, -2, 10, -2, 18, 50, -1, 66, 99, 118, 19, 46, -126, -90, 38, -126, -93, -24, 8, -2, 23, 2, -39, 5, 3, -13, 16, -80, -127, -37, -87, 29, 12, -54, 21, 0, 0, -122, -14, -38, 71, 45, 21, 16, -24, -72, -35, 18, -37, -20, 17, -30, -97, 50, 36, 127, -44, -19, 4, -40, 2, -25, -3, 25, -27, 55, 5, 28, -68, 39, 58, -61, -50, 22, 56, -68, -45, 75, -1, -8, 62, -59, 36, -5, -113, 71, -42, 29, 32, 4, -73, -23, 55, 66, 37, -40, -25, -53, 18, -7, -78, -70, -22, 39, 48, -43, 77, -6, 35, 17, 23, -45, -22, 61, 15, 42, 35, -42, 0, -125, -65, -20, 31, 20, 74, -12, -37, -46, -33, 28, 31, -64, -13, 25, 69, 15, -23, -55, 93, 1, -20, 55, 81, 52, 18, 3, -79, -22, 88, -29, 114, -6, -40, 12, 34, 19, 104, 45, 4, -43, 22, -10, 61, -82, 25, 35, 29, -30, 7, 107, -72, 2, -52, 21, -28, -5, 127, 8, -27, -96, -95, -14, -127, 12, 47, 32, -116, 14, -48, 35, -34, 114, 100, -14, -73, -36, 11, 50, -23, 11, -38, 12, 20, -20, -125, 67, -45, -28, 4, 88, -5, 58, 10, -52, 21, 17, 41, -37, 66, -82, 21, 39, 0, -43, -9, -55, 42, -16, -81, -31, 11, -20, -17, 119, -29, -68, 16, -125, 32, 107, -92, -126, 25, -35, -26, -51, -53, -79, 58, -19, -127, -36, 3, -20, -55, -74, 47, 36, -103, -52, -110, 62, 12, -123, 78, -43, -127, 30, 36, 34, -110, 34, -39, -89, -126, -29, -29, -60, -34, 39, -19, 4, 22, -70, -98, -52, -67, -77, 5, 33, 9, -23, -14, 28, 25, 9, -80, -99, 17, -26, -101, 47, -24, 24, -36, 53, -126, -23, -84, -28, -105, 10, -60, -60, -56, -87, -74, 26, -41, 60, -67, -10, 96, -89, -89, 42, -29, -3, 47, 4, 30, -4, -26, -70, -20, 70, -27, 44, -74, -8, 54, 35, 115, 12, -21, -13, 10, -41, -70, 39, 86, 54, -40, 22, 42, 13, 6, 24, 13, -1, -58, -37, -53, -3, -25, -23, 5, -30, 31, -28, -103, -1, 13, -54, -70, 4, 2, 4, 10, 20, 32, 2, -38, -84, -3, 37, 23, 54, 5, 16, 12, -14, -10, -3, -26, 2, -36, 83, 8, 33, -10, -5, 48, -32, -32, -36, 16, 9, -42, 38, 60, 36, -81, -52, 56, -88, -55, 21, -26, 24, -26, 127, -59, -60, -12, 23, -26, -2, -100, -58, -33, 17, -2, -71, -40, -124, 102, -10, 72, -119, 121, 104, -47, -35, -24, 113, -122, -23, 82, -101, -60, 69, 27, -4, 110, 32, 16, -104, 44, 10, -89, 25, 30, 44, -1, 78, 82, -1, 29, 25, -58, 44, 70, 70, 9, -31, -30, -8, -17, 60, -102, -35, 4, 43, 85, 84, -6, -80, 5, -71, -45, 22, -63, 52, -116, -37, 90, 93, -58, 2, -2, 1, 20, -31, 35, -55, 31, -20, -70, -26, 59, -32, -24, 76, -108, 27, -19, -6, 30, 68, -1, 4, 79, 45, -43, 45, -13, -47, -14, -66, -41, 85, -39, -24, -17, -50, 22, 2, 51, 27, -28, 62, 12, 50, -107, -62, 2, -17, -9, -63, 34, -30, 35, -10, -123, -24, -49, -12, 57, -45, -46, -63, -29, 37, -103, 49, -80, -31, 31, 46, -53, 6, 65, 10, -38, -44, -71, -4, -23, 10, -61, -48, -46, -33, 17, -23, 77, 39, 25, 0, 58, 50, -1, 25, 44, 66, 42, -4, -6, -12, -36, 50, 1, 113, -5, -23, -54, -4, -5, -10, 3, 25, -4, -98, -37, 49, -33, -21, -40, -18, -68, 93, -29, -3, -9, -1, 48, 22, -65, -12, 40, 2, 29, 2, 36, -119, -9, 4, -27, -40, -1, -17, 15, -44, -7, 2, 59, -23, -33, 10, 54, -17, -26, 111, -5, 46, 73, 50, -5, -91, 45, 27, -105, -13, 37, -55, -68, 25, -23, -7, 5, 80, -28, 4, 127, -59, -102, 18, -9, -29, 8, 32, 56, -123, 5, 19, -98, 52, -126, 36, 35, 26, -17, -78, -97, 71, 5, -38, 92, -31, -42, 39, 9, 81, 4, 33, 3, -49, -25, -1, 0, 106, -75, -85, 14, -127, -67, -41, 46, 32, 10, -3, -40, 86, 73, 73, 20, 99, 42, 41, 30, 77, -1, -3, 57, 19, -13, -19, 43, 81, 41, -13, -16, -95, 17, 35, -4, -30, -98, -59, -2, 103, 74, -103, 2, -13, -1, -2, 84, -3, 126, 15, -103, 18, -30, -35, 20, -21, 72, -40, 46, -15, -10, -6, 11, -19, 17, -25, 110, 85, 48, -22, 2, -64, 42, -69, 6, -10, -37, 12, -50, 5, 31, 1, 61, 74, 60, -50, -29, 65, -67, -35, -41, -128, 106, -4, 92, -21, -57, -44, -127, -84, -57, 49, -32, -12, 56, -86, 17, 50, 47, 57, -20, 42, 11, 32, 26, 43, -12, 59, 27, -84, 62, 6, 7, 16, -5, -44, 36, -75, 9, 25, 17, 89, -7, -54, 1, -54, 12, 34, -7, -4, -71, 18, 38, -26, -19, 13, 3, -10, 56, 48, 9, 100, 47, 34, 123, 98, 44, 84, -9, -16, -10, -17, -20, 5, 50, 111, -28, -64, -20, -127, -69, -3, 64, -27, -37, -79, -15, -84, -81, -16, 55, -78, 98, -97, -20, 86, -15, -79, 57, 24, 31, 29, 26, 33, -21, -52, 31, -46, 73, -47, -17, -44, 102, 84, -63, -59, -69, 123, 39, 80, -83, -37, 37, -116, -37, -2, -54, -101, 93, -21, 36, -19, -8, 93, -115, 69, -18, -37, 13, 49, 99, 10, 2, -31, -109, -127, 50, 49, -43, -20, -56, -43, 18, -10, -127, -52, 45, 82, 3, 11, -82, -22, -90, 70, -55, 99, 82, -41, 39, 6, -104, -14, -104, -9, 34, 127, -15, 7, 99, 0, -58, 1, -21, -9, -17, -34, -28, -15, -41, -10, 16, 12, 46, -13, 10, -11, -15, 45, -73, 16, -37, 114, -50, -79, 110, 81, 14, -17, -1, -128, -124, -35, 77, 72, 61, 124, 41, 29, -40, 57, -3, -24, 115, -62, -53, 35, -9, 15, 109, 71, 18, 22, 39, -128, -49, -127, 19, 116, 74, -10, -36, 123, 102, 19, 108, 23, 4, 95, 126, 101, -16, -10, 13, -90, -95, -18, 61, 0, 79, -115, 18, 57, -5, 114, -123, 35, 124, -126, 46, -18, 21, 98, -117, 3, -123, -56, 119, 45, -61, 31, 34, -26, -51, 15, 34, -24, 61, -18, -57, 3, -75, -116, 22, -117, -18, -3, -22, -30, -33, 27, 33, 125, 24, -33, 35, -77, -92, -33, 25, -127, 32, 36, -69, 34, -6, 54, -16, 34, -13, 64, -126, -128, -8, -86, -8, -63, 70, 22, 11, -37, 37, -99, 40, 127, 68, -23, -28, 126, -67, -43, 52, 39, 94, 13, -62, 24, -110, -95, -11, -39, -67, 48, -111, -12, 34, -66, 126, 35, -26, -59, -127, 31, 73, 30, -128, 30, -126, -128, -113, 28, -126, -127, -1, -2, -57, 23, -53, -5, -56, -41, -76, 122, 8, 45, 76, -120, -86, 37, -123, 20, 0, 35, -77, 63, -102, -63, -17, -51, 7, -116, -7, -10, -79, -119, -29, 23, -18, 70, -89, -33, -40, 14, -16, -102, -17, -77, 33, -11, 49, 58, -15, -61, 40, -49, -36, -47, 18, -23, -81, 123, -15, -14, -83, -32, 113, -1, 1, -85, -20, -85, 4, -66, -118, -31, -90, 79, -74, 7, -45, -45, -54, 113, 59, -25, -23, 55, 23, -115, 18, -80, -111, -61, 15, -93, -68, -59, 125, -50, -10, -40, 39, -113, 21, -92, -126, 79, -23, 34, 37, -16, -6, 28, 31, 12, -96, 9, 34, -45, -32, 114, -36, -5, 118, -49, -22, 119, -5, 51, -37, 3, 17, 14, -52, -92, 41, 88, 2, -80, 98, -52, 46, 31, 52, -6, -40, 33, -25, 55, -16, 50, -119, -41, 77, -91, 43, -70, 26, -4, -2, 35, -68, 57, 10, -97, -21, -54, 18, 117, 121, 13, -40, 104, -10, 50, 48, 13, -5, 37, -23, -31, 13, -37, 11, 74, 43, -13, 35, -36, 23, 106, -54, 40, -68, -58, -9, 52, 10, -58, 27, 90, 7, 43, -58, -4, 93, 1, -89, -64, -42, -17, 20, -48, -126, 122, 71, -116, 8, 123, 52, 37, -17, -46, 0, 57, -11, 113, -93, 50, -61, 41, -1, 33, 22, 73, 35, -43, 48, 98, -55, 33, -10, -43, 37, -47, -3, 14, -32, -126, -23, 25, 0, -41, 30, 40, 81, 102, 84, 15, 43, 28, -6, -68, -10, 62, 83, 0, 13, -25, 35, 30, 39, 19, -8, 29, -12, -126, -21, 64, 3, 107, 29, -124, 19, 6, -114, -126, -42, 23, -90, -67, 65, -127, 27, -70, 42, 5, 125, -3, 28, -72, 27, 14, -72, -41, -80, 42, 0, -11, 28, -3, -37, 39, 43, -47, 57, 41, -54, 23, 53, 100, 9, -31, -17, 42, 126, 32, 109, -3, 16, -57, -13, 36, -58, 63, -30, 37, 38, 20, 55, 6, 14, -16, 24, 38, 23, -8, -13, 73, 127, -3, 21, 93, 36, 33, 12, 44, 36, -33, -8, 29, -51, -26, -24, -7, 44, 66, 20, -9, 86, 33, 20, -56, 2, 48, 12, -83, 23, 72, 14, 39, 57, -78, 28, -23, -10, -8, 20, 31, 8, -70, 47, -16, -64, 1, 4, 42, -13, -1, -45, 81, 64, 58, 48, -12, 45, -20, -7, 32, -3, -75, 102, -18, -32, 66, -16, -48, 21, 10, 52, 11, -70, 31, -88, -46, -45, -37, 55, 111, 23, 44, 6, 40, 36, 40, -10, 127, -20, 6, -42, -45, 6, 68, -4, 40, 37, 19, -36, -61, 30, 26, 18, -57, -7, 5, -121, 20, -15, -90, 23, 30, 11, -1, 26, -23, -8, 24, 15, -80, -96, 15, 29, 90, -51, 4, -42, 33, 13, 25, 48, -33, 96, -19, -45, 25, 17, -68, 16, -80, -1, -6, 30, -11, -23, 8, -110, -39, 22, -32, 87, 76, -34, 62, -62, -82, -20, 127, -28, -49, 54, -2, -96, 30, 13, 53, -71, 5, -45, 52, -6, 5, -19, -17, 12, 0, 74, 51, 71, 83, -11, 11, 88, -35, 10, -7, 8, 42, 13, -49, -29, 0, -75, 8, 10, 88, -12, 21, 23, -82, -17, 19, -5, -62, 127, 93, 19, 26, 89, -15, 18, 12, 41, 24, 12, -22, 92, -21, -7, -58, -9, -45, 38, -72, -15, -125, -96, 9, 67, -7, -15, -17, -28, 30, 6, -7, 99, -47, 29, -31, 24, -14, -107, 15, 12, 57, 26, 3, -57, 19, 1, 3, -16, 27, 12, 5, 52, 31, 16, -124, -2, 24, -26, -18, -76, -115, 3, 97, 30, -20, 127, 32, -6, 29, -37, -59, -40, -20, 29, 49, 11, 20, 37, 33, 29, 7, 11, -12, -16, -84, -49, 4, 38, -5, -9, -9, 50, 6, 2, -25, 103, 21, 73, 55, 15, -13, 58, -9, -4, 50, 7, 1, -8, -6, 19, 18, 12, 10, 10, -26, -3, -5, 62, 56, 21, -7, 41, -32, 0, 11, -32, -14, 48, -1, 26, -19, 24, 46, -8, 0, 26, 58, -5, -26, -27, 4, 36, 59, -25, 3, 4, -28, 26, 63, 51, 48, -61, -121, -19, -45, 49, 1, -1, 58, 5, 38, 47, 28, 14, -2, 20, -11, -33, -13, 42, -29, -53, 38, -44, 107, -9, 60, -10, -78, -15, 78, 21, -71, -36, 58, -27, 15, -4, -41, -50, -85, -61, -62, -105, 59, 39, 29, -27, -16, 68, -26, 26, -4, -48, 58, -15, -13, -2, 48, -33, -47, 34, 1, 4, -36, -13, 32, -3, 63, 14, 15, 107, -31, -37, -25, 49, 112, -29, 22, 20, 89, -12, 5, -1, 91, -54, 44, 32, -42, -14, 43, 113, -61, -46, 126, -99, 63, -16, -75, 119, 57, 42, -124, 99, 91, 57, 31, -81, 16, -57, -32, -79, -6, 123, -36, -47, 109, -125, 1, -72, 21, -50, 82, -4, -2, -36, -127, -28, 8, -105, 51, 67, 34, 50, 9, -25, -125, 54, 12, 28, 104, -15, -22, 29, 3, -14, 35, 9, 26, -25, -72, -26, 98, 16, 23, 16, -8, 20, -112, 74, 98, -18, -56, 85, 127, -51, 1, -84, 38, -31, -86, -45, 46, 5, -54, -54, -114, 47, -43, 20, 121, 21, -18, -11, 95, 23, -27, -25, 39, 8, -10, 17, 28, 61, 6, -56, 58, 4, -37, 35, 23, 51, -19, 5, 19, -1, -1, 14, 33, 15, 37, -11, 19, 35, 45, 13, -14, 46, 19, -42, 55, 28, 51, 30, 54, 120, 17, 66, 42, 66, -12, -9, -13, 44, 38, 5, -7, 27, 75, 78, 35, 31, 78, 49, -4, -14, 40, 33, 41, 1, -68, 23, 53, -12, 11, 13, 28, 29, -43, -41, 42, -25, -12, 38, 18, -4, 7, 38, 29, 44, 31, -26, 61, 37, 49, -19, -6, -17, -12, 49, 56, 33, 80, 43, 42, 29, 62, 4, -53, 34, -57, 30, 13, -55, -28, 19, -6, 43, -43, 19, 48, -16, 29, -25, 64, 30, 51, -62, -18, -16, 15, -30, 8, -14, 60, 20, -12, 49, -32, -28, -42, 3, 17, -55, 11, 26, -51, -25, -38, 47, 48, -29, 33, 9, -20, -6, -12, -54, 111, 4, 31, 77, -5, -2, -50, 46, -5, -18, -30, 28, 33, 11, 48, 22, -3, 3, -34, -41, -4, -27, -16, -41, -10, -21, 34, 9, 46, 23, 46, 25, -28, 28, 32, -16, 47, 127, 36, -8, -21, 57, 20, 35, 80, 7, 18, 83, 16, 59, -56, 3, -23, 111, 40, -24, 23, 62, 101, 29, -122, 26, 74, 36, -27, 8, 79, -94, 47, -121, 12, -63, -4, -2, -76, 8, -18, -45, -3, -112, 66, -71, -7, 19, 21, -108, -120, -10, -27, -43, 76, 67, -127, -35, 12, -2, 61, 103, -34, -3, -6, 24, 80, 44, 5, -13, -52, -4, -14, 70, 38, -46, 65, 79, -62, -93, -5, -101, 95, -20, -52, 55, 11, -126, 11, -38, 23, 16, -47, 7, 66, -65, 2, -16, -26, 21, 43, 27, 42, -41, -50, 9, -126, -21, -67, 34, 51, 47, 77, -3, 0, 30, 19, 17, 3, 50, 1, 120, 20, -12, 90, 56, 1, -21, 24, -15, 97, -2, -19, -35, -1, 45, 12, -41, 34, 8, 12, -23, 43, 121, -33, 62, 39, -119, -26, 36, 44, 14, 26, 5, 8, -64, 16, -10, -43, -45, -22, 5, -16, -21, 40, 13, -16, 31, 109, -31, -38, 121, 4, -59, 85, 14, -57, 20, 3, -51, 45, -40, 33, 13, -11, -9, 27, 55, 43, 10, 6, 14, -37, -31, 127, 22, -7, 34, 11, -102, -60, 29, -58, 21, 14, 99, -16, -101, 17, -64, 36, -6, -62, 22, -37, -49, 30, 74, 88, 95, -33, 45, 20, 52, 55, -98, -49, 19, 56, 9, 124, 93, 0, -14, -66, 34, 20, -63, -40, -12, 59, -7, -51, -9, 68, 4, 124, -37, -78, 32, -9, -4, 69, 21, -19, -27, -33, -58, 60, -39, -32, -112, -5, -35, 124, -18, 47, -99, -57, 15, -85, 49, -98, 104, -86, -104, -57, -17, 9, 21, -9, -85, 65, -127, 75, 113, 71, -5, 127, -53, -60, 14, -120, 35, -2, 20, -38, -82, -50, -67, -8, -54, -52, -7, -8, -10, 14, 11, 112, -5, -40, 37, 21, -90, -39, -67, -127, -25, -27, 80, -14, -39, 16, 61, -18, 38, 41, 93, -4, -5, -80, -35, -47, -6, -12, 23, -37, 108, -8, -126, -125, 12, -54, -26, 40, -52, -72, -26, 47, -35, -98, -15, -68, -51, -21, 21, 40, -89, 121, -116, -5, -23, -1, -123, -125, 21, -34, 2, -47, -18, -49, -123, -19, -94, -21, 37, 13, 43, -79, 81, -2, -21, -11, 104, -16, -37, -29, -46, -3, 64, -38, -120, -10, 25, 15, -17, 1, 110, -5, -24, -42, -23, 43, -17, -93, -122, -3, -35, 0, 11, -84, 24, -49, 78, 0, -22, -49, -54, 83, -8, 8, -13, 64, 46, 27, -99, 89, -27, 69, 1, -53, -83, 5, 19, -91, 42, -97, 92, 62, 51, -79, 7, 13, 34, -37, 57, 16, -53, -55, 4, -26, -11, -29, -39, -60, 69, -25, -8, 19, 4, -6, -123, 73, 26, -61, 21, -90, 8, 7, -123, -20, 12, 29, 53, -121, 83, -39, -24, -46, 15, 24, 31, 2, -89, -64, -3, 85, -8, 127, 7, 14, -25, -3, -64, 104, 84, 74, -38, 39, 25, 119, 67, 15, -71, 28, 113, 65, -27, -25, -19, -11, 19, 76, -3, -88, -75, -34, -110, -64, 19, 69, -76, 102, -8, -68, -12, -43, -31, -9, 120, -36, 46, 96, -73, 89, 83, 98, 50, -81, 68, 34, 39, 68, -17, -19, 47, 111, 15, -58, 96, 1, 18, 2, -73, 82, -59, 5, 47, -112, 9, -43, 4, 18, -47, 82, -93, 88, -48, 58, -62, -57, 67, -41, 87, -29, 65, 69, 63, 54, 5, -75, -4, 38, 57, 24, -48, -8, 13, -18, 38, 126, -128, -66, 43, -4, -103, -21, 47, 59, 19, 70, 26, 1, -9, 10, -60, 18, -120, 21, -8, -36, 15, 120, -111, -5, 58, 2, -33, -119, -77, -105, -7, 118, -116, -3, 18, 73, -35, 2, 17, 1, 56, 16, -26, -26, 17, 27, 52, 0, -12, -5, 41, -19, 36, 68, -7, -7, 70, -127, -49, -19, 44, -88, 22, -118, -52, 48, 63, 66, -97, 54, 46, 43, -47, 59, -62, -91, -58, -39, 95, 35, 19, -15, 42, -31, -41, 31, -17, 36, -114, 34, -105, 71, -4, -40, -40, 11, 47, 5, -9, 101, 80, 36, -9, 8, 47, 23, -19, 31, 22, 69, 39, -14, 124, -37, 23, 60, 69, 11, -3, 57, 28, 59, 1, -3, 125, 17, 65, 23, -24, 0, 33, 64, 34, 30, 33, 42, 29, 31, 71, 64, -16, 58, 40, -61, -46, 29, 2, -38, 11, 14, 68, -2, 21, -26, 25, 5, -19, -22, 92, 38, 51, 22, 127, -32, 99, 77, 42, 34, 75, -58, 46, -3, 2, 13, 66, 27, -22, 37, 13, 20, -29, 47, -56, 68, -78, 14, 43, -36, -9, 44, 39, -20, 18, -53, 18, -11, 9, 16, 33, 19, -23, -9, 40, 55, 52, 23, 21, -4, -31, -18, 22, 4, -12, 95, 2, -10, 63, -17, -12, -15, 82, -23, 1, 16, -22, 88, -34, -17, 4, 49, 9, 41, 62, -9, -6, 32, -64, 35, -14, -11, -31, 19, 50, 41, 91, -2, -62, -16, -5, -23, -10, 11, 66, -56, -2, -59, -1, 74, 11, 110, -15, -25, 90, 69, -18, 68, -38, -7, 10, -14, 114, 1, -15, -57, 52, 118, 45, -61, -65, 116, -100, 11, -73, -116, 81, 11, 24, -33, 1, -39, -88, -48, 11, 70, 7, 59, -50, 13, 12, 30, -96, -65, 44, 60, 12, 23, -50, 118, -28, 41, 59, -10, 47, -5, -54, 97, -27, -102, 33, 31, -56, -4, -8, -83, 45, -29, -19, 122, -15, -39, 89, 11, 3, -67, -21, -18, 71, -2, -49, 49, 97, -69, -68, -8, -79, 63, -27, 115, 1, -116, -40, -119, 19, 37, -30, 86, -17, -85, 53, -40, -23, -78, -58, -88, 99, 119, 47, 22, -30, 42, 25, 40, -62, 11, 34, -29, -32, -27, 26, 16, -15, -72, -5, 1, -81, 20, -17, 13, 120, -30, 124, -29, 41, -72, 19, 34, -92, 63, 44, 76, 12, -33, 50, -2, 77, -1, 41, -1, 17, 41, 73, 40, -8, -22, 95, 46, 71, -1, -80, 41, -44, 10, 4, 37, -43, 70, 43, -123, -36, 42, 39, -8, 13, -17, 3, 76, 29, 22, 9, 29, 28, 22, -44, 14, -44, 4, 26, 55, 38, 23, -38, -44, -8, 59, 14, 37, 43, 48, 49, -20, -3, 38, 12, 46, 5, -12, -25, -21, -25, -71, 64, 55, 124, 18, 57, 28, 48, -118, -15, 41, 43, 45, 18, -76, -24, 11, -8, -72, -20, 41, -45, 97, -35, -68, -1, 104, -95, -39, 9, -77, -23, -8, -9, 24, -13, -22, 86, -3, 55, -125, -10, -65, 44, 49, 49, 19, -122, -6, 41, 54, 80, -16, -76, 48, 111, -125, -21, 98, -6, -21, 31, -16, 0, -33, -119, 42, 64, 12, 6, 56, -8, 55, 44, 66, 27, -20, -73, -37, 31, -16, -24, 11, 126, 24, 26, -61, 13, -24, 69, -4, -33, 0, 14, 11, 60, -15, -125, -68, -56, 60, -10, -126, -26, -124, 73, -54, 40, -70, 17, 57, -28, -37, -28, 20, -72, 27, -13, -119, 6, -123, 23, 106, -18, 65, 28, 61, -126, -59, -16, -57, -35, -125, 3, 3, -122, -127, -36, 51, -3, -15, 42, -87, -71, -117, -117, 99, -120, -11, -6, 0, -12, 48, -58, 15, -128, -59, -19, 43, 2, 49, 49, -18, -75, 22, 105, 19, -73, 117, -20, 10, -4, 13, -99, 25, -125, -79, -89, 51, -27, -28, 0, 40, 3, -55, 6, 31, -27, 39, -3, -12, -14, -11, 28, -55, -57, 33, 54, -126, -74, 27, -8, 96, 17, -70, -21, -35, -44, -7, -14, 19, 57, 33, 9, -46, 16, 18, -14, 43, -43, 0, 11, 16, -3, 0, -28, 80, 54, -3, -12, 12, -13, -15, -26, 102, 4, -2, 16, -21, 31, 16, 3, 4, -4, -5, 37, 37, -61, 41, 27, -4, 1, -30, 13, -41, -14, 16, -2, -7, 31, 127, -10, 31, 105, 19, 35, 100, -14, -30, -3, 27, 82, 89, -71, 61, 9, -18, 26, 49, 78, 33, -22, 1, -47, -24, -117, -54, -55, 6, -59, 116, -48, 41, 38, 3, 114, -65, 0, 21, 16, -16, -13, -33, 7, 15, 12, 44, 69, 35, 11, -32, -59, -87, 71, 59, -20, 26, -35, -3, 1, -25, 56, 56, 127, -15, -15, 96, -4, 66, -47, -76, 57, -48, 84, 8, 42, 78, -10, 126, -40, -34, -14, 33, 22, -23, 48, 8, -10, 3, -32, 13, 61, 21, -2, 0, -62, -26, -96, 61, -59, -93, -72, 119, 34, -58, -18, 35, -18, -68, -13, -38, -49, -28, -79, -30, 33, 78, 80, 69, 46, 50, -8, 21, -69, -77, -41, 105, 7, -122, 42, 24, 69, 39, -69, 118, -125, 25, -124, 12, -18, -59, -7, -31, 62, 8, 0, -2, -15, 0, -46, -99, 9, 86, 9, 33, 35, -42, 3, 121, 125, -50, -76, 113, -85, 21, 8, -68, 73, -18, -17, -30, -128, 8, -119, -33, 31, 28, -11, -5, -9, 9, -31, -24, 42, -79, 25, 5, 30, 121, -1, -22, -95, 88, -89, -29, -100, -104, -100, 94, -75, 31, 75, -65, -125, -91, 48, -125, -27, 20, 105, -126, -95, -49, -29, 14, -6, -35, -36, -22, -25, 16, 53, 5, 52, 32, -24, 80, 16, 83, 31, 42, -120, 17, 34, -56, -2, 32, -99, -40, -17, -27, 122, 87, -70, 38, -28, -116, 0, 17, -41, 40, -82, 31, -27, -2, 39, -68, 17, 24, 81, 40, -47, -9, -22, 8, 30, 37, 30, -26, -20, 17, 41, -27, 64, -20, 31, 27, -38, 37, -13, -36, -57, -32, -32, -31, -31, -63, -12, -23, -26, -19, 13, -55, -23, 79, -17, 5, 30, -5, 22, -27, 34, 14, 4, -14, -109, -1, -10, 21, -8, 19, 33, 44, 1, -2, 39, 16, 77, -22, 0, -8, 37, -30, -28, -125, 0, -48, -14, -117, -71, -60, -55, 40, 27, 14, 98, 47, 120, -75, 93, 7, 5, -2, -18, 60, -52, 66, -73, 11, 8, -75, -26, 38, -15, -106, 91, 76, -94, -39, -87, -15, -38, -13, 55, -26, -123, -68, 39, -60, 8, -18, -5, -7, -5, -37, 65, 55, 47, 115, -20, 48, 40, -34, 27, -23, -65, 4, -79, -126, 36, 93, 43, 5, 84, 14, -49, 52, 65, -80, -50, -29, -31, 56, -37, -56, -66, -51, 30, -43, -24, 41, 3, 110, 56, 29, 40, -9, 23, 40, 6, -16, 5, -77, 73, 2, -30, 6, 0, -42, 32, -1, -3, 82, -106, 6, -47, -41, -58, -38, 85, 3, 12, -79, -18, -1, 48, -19, 9, 88, 4, 35, -66, 61, 72, -7, -42, -30, -29, 21, 113, 28, 93, -4, 71, -116, 6, 4, 23, -51, 26, -3, 3, 26, 16, -28, 27, 1, 69, -50, -35, -19, -47, -41, 12, -99, -72, 78, 19, 20, 110, 46, -65, -36, -9, -10, -18, 39, -27, 43, 15, 15, 97, 57, -23, 11, 38, -24, -88, 18, -41, 71, 42, -34, 21, 94, 53, -19, -25, -23, -82, 61, -61, -17, -1, -127, -19, -2, 53, -75, 44, -118, -45, -12, 80, -120, 36, -95, -55, 46, -16, -29, -32, 46, -98, 30, -52, 10, -44, 38, -29, -14, -63, -7, 21, 39, -66, 72, -17, -39, -17, 9, -23, -40, 36, -51, 42, -87, 29, -42, -122, -9, 44, -47, -39, -34, -76, 58, -99, -7, 8, -18, -8, -44, -42, -11, -71, -29, 59, 4, -82, -13, 25, 52, 31, 5, -22, -3, 67, -43, -68, -44, 29, -20, -63, 61, -55, 98, -31, 42, -102, -8, 30, -88, -5, -24, -127, -110, -38, -29, 81, -71, 33, 9, -27, -20, 67, -108, 55, -27, -94, 11, -60, -16, 33, -6, 24, 127, -94, -86, -85, 16, 4, -40, -70, 20, -43, -20, 48, -25, 49, -126, 78, -62, -22, 87, 36, 31, 33, -125, 39, 81, -117, -60, 2, -19, -48, 18, 24, -27, 12, -22, -14, -14, -70, -2, -42, -109, -1, 56, 9, -110, 103, 35, -17, -31, -60, 72, -49, 45, 70, 43, 37, 107, 124, 70, -13, 78, -48, -47, -38, 82, 23, 127, -29, -22, 9, 30, -112, -9, 86, -69, 52, -77, 36, 67, 3, 113, -32, -53, -23, 18, -122, -53, 7, 27, 22, 1, -71, -51, 87, 62, -56, 43, -116, -126, -27, 16, 53, 46, -62, -13, 36, 94, -27, 29, 6, 58, -14, 103, -21, -24, -48, -54, 2, 94, -3, 57, -124, -104, -9, 106, 38, -69, -13, -43, 35, -65, -83, -89, -126, 35, -4, -45, -28, -47, -65, -82, 75, -36, 61, -81, 85, -112, 119, 59, -7, -11, -63, 50, 23, -1, 59, 0, 4, -56, -68, -40, 8, 15, -20, 21, 58, 3, -85, -64, -2, -26, 28, 32, -53, -27, 70, 9, 87, -1, -15, -121, -34, -69, 10, 56, -10, 61, -58, 105, 25, -59, 28, -50, -32, 33, -14, 42, -24, 9, -14, 10, -3, -28, 13, 56, -59, 10, -68, 14, 37, 57, -20, -9, -17, -80, 24, 20, -18, -1, 122, -8, 5, -72, -57, -118, 2, 14, 30, -27, -127, 38, 39, -79, 18, -37, 93, 46, 27, 22, -9, 1, -9, 33, 45, -46, 43, -45, -43, 15, -7, 21, 2, -59, 34, 9, 41, -42, -28, 24, -12, -12, 5, -16, 6, -58, -51, 37, 49, 25, -51, -5, 31, -124, -32, -39, -48, 6, 34, -86, -63, -9, 34, -4, -32, -27, 22, 6, -3, 94, -44, 1, 42, 3, -34, -39, 127, -32, 53, 72, 20, -42, -75, 27, -21, -9, -25, 17, -61, 62, -77, 2, -8, -94, -26, -42, 40, -69, 0, 17, 56, -115, 1, -6, 12, 14, 23, 10, 12, -56, 107, -29, -28, -33, -45, -64, -105, -22, -19, 59, -10, -69, 45, 4, -58, 32, -12, 22, -59, 35, -22, 70, 19, 49, -17, -78, 4, 21, 50, -49, 28, 18, 32, 72, 60, 5, 47, 46, 30, 11, 73, 1, -57, -6, 87, -97, 32, -23, 55, 26, -35, 9, 37, 105, 10, 18, -118, 99, 125, 54, 45, 109, -26, 26, -39, -56, 7, -19, -38, 35, -128, 47, 17, 0, 97, -69, -63, 27, 23, -19, -79, 73, -46, 3, -22, 19, -41, 123, -44, 109, 33, 34, -2, 45, -126, -43, -14, -13, -5, 40, 26, -4, -127, -124, -19, -82, -111, 109, 76, -43, -30, -94, 77, -82, 0, -1, -7, 9, -36, -60, -19, 42, 28, -10, -90, 20, 83, -4, -60, -120, -8, -37, -18, -37, -84, -85, -46, -37, 22, -36, 15, 71, -23, 14, -125, -2, -41, -9, -40, 39, -43, -126, -6, -10, -94, -2, 10, -113, 15, -79, -7, -51, 25, -30, -40, -28, -121, -25, -45, -70, -11, -51, -128, 46, 81, -92, -89, -9, -54, -18, -16, -96, -84, 37, -77, -66, 21, -38, -54, -3, -33, -33, -111, -100, -11, 3, -6, 20, -128, -3, -54, -41, -21, 54, -53, -128, -127, 28, -55, -107, -10, 41, 112, 35, -25, 11, -43, 93, -61, 38, -54, -52, -104, -1, 5, -60, -122, -101, -22, -19, 104, -57, 7, -54, -84, -33, 78, 34, -2, 15, -122, -14, -60, 114, -75, -31, -42, -86, -67, -66, 38, -26, -5, -124, -15, -3, -52, -127, -13, -50, -108, 64, 37, -19, -51, -67, -16, 32, -128, 31, -46, -48, -66, 7, -31, -61, -5, -53, -113, 47, -45, 0, 102, -18, -46, -101, 16, -37, -11, 29, 14, 15, -20, 23, -24, -30, 43, 3, -28, 16, -21, 18, -42, 2, -16, -69, -75, -75, 27, 19, -20, 52, 37, -121, -22, 17, 12, 45, -84, -50, 12, -126, -15, 19, -24, -60, -23, -61, -67, 6, 122, -116, 82, -35, 24, -30, -87, 26, -26, -17, -42, 5, -25, -118, -17, -67, -60, 39, 15, -100, 30, -121, -39, -67, -13, 33, 20, -36, -10, -9, -94, -107, -22, 21, -126, -34, -11, -83, -82, -46, -119, -35, -86, 4, -123, 44, 23, -42, -84, -56, 4, -53, -6, 39, -12, -50, -18, 37, 42, 45, -123, -32, -6, -33, -39, -4, -97, -68, 9, 74, -53, -125, -83, -2, -22, 57, -21, -90, -69, -9, -76, 43, -15, -1, -18, -20, 2, 18, 5, -93, -31, 76, 5, -1, 5, 44, 14, -5, 6, -48, 48, -2, 38, -59, -36, 77, -50, -32, -11, 46, 33, 69, 62, -63, 20, 110, 15, -42, 10, -4, 78, 8, -24, -59, 33, 65, 34, 48, -22, 26, 122, 51, -7, 10, -58, -2, 18, -27, 7, -126, -84, -4, -40, 48, -124, -127, -6, 46, 55, -13, -83, 84, 31, 2, 34, -1, -19, -65, 38, 41, 29, 11, -121, -55, 74, 20, 19, -2, 14, 35, -15, -80, -33, -46, 36, 13, -49, 40, -71, -41, 65, -107, 32, 17, 3, 8, 45, -50, 24, 4, 2, 55, -43, 13, -12, -20, 15, 9, 16, -26, -25, 126, -9, 126, 31, 27, -20, -125, -41, -46, -7, -39, -60, -31, -108, 8, -47, -12, -89, 67, -8, 57, 7, -10, 95, -7, -109, 29, 47, 93, 79, 44, 15, -45, 50, -41, -13, 7, -56, 43, 48, -54, 60, -10, -29, -47, 0, 82, 22, -84, 2, -8, -39, 31, 4, -27, 12, 24, -91, -8, 39, 3, -23, 5, -122, -74, 64, -9, -42, -53, 27, -94, 18, 18, -3, 73, 68, 18, 6, 98, -18, -2, -78, 8, -45, 14, 54, 15, 58, 40, 33, -31, 6, -10, 7, -6, 0, 41, 37, 121, -29, 36, 14, -56, 63, 9, 15, -122, -7, -67, -4, -115, 0, -41, 19, 37, -13, 17, 11, -13, 10, -29, -77, 18, -9, -10, -79, -3, -8, -40, -25, -22, -9, 0, 27, -105, -23, -65, 7, -35, 29, -13, -29, -34, -71, 55, 37, -3, 24, 69, 7, 32, -24, 18, -60, -20, 39, 101, 9, 28, -78, -68, -88, 22, -19, 28, -87, -6, -33, 44, 1, 37, -69, 8, 18, 48, -15, -41, -110, 23, 43, -32, 5, -75, 10, -16, 28, -31, -17, 68, 17, -38, 4, 47, 1, -4, 33, 35, 83, 50, 38, 11, 40, 51, 1, -20, -9, -35, 76, 34, -4, -24, -27, -10, 6, 60, -44, 14, 104, 43, 19, -23, -16, -127, 21, 13, -11, -27, 30, -42, -6, 70, 27, -52, 41, -13, 52, -22, 30, 29, -28, -85, -55, -72, 125, -49, 6, -12, 23, -4, -44, 32, 49, 68, 4, 13, -35, -61, -6, 51, -124, 27, 82, 31, 28, 121, -120, 26, -33, -42, -44, 107, 88, -16, -98, 30, 25, -19, 6, -42, -77, -8, 35, -13, 35, -23, -70, -71, -35, -45, -54, 127, -103, -46, -74, -110, 32, 33, 10, -38, -13, -29, -23, 56, 18, 59, -110, 18, 11, -7, 41, 2, 126, 10, 6, -20, -7, -46, -55, -4, 22, -6, 35, -6, -79, -72, -11, 4, -8, 126, -3, -18, 71, 21, -7, 2, -107, -123, -22, -45, -68, 37, -45, 87, 48, -32, -12, -54, 82, 76, -44, 26, -36, 48, -127, -126, 65, -10, -28, -18, -49, -127, -57, -75, -82, -57, -91, -17, 12, 18, 6, -1, 0, 38, 25, -121, 77, 38, -109, 24, -119, -17, -22, 10, -10, -1, -72, -44, -26, 49, -58, 48, 14, 9, -30, -44, -26, -48, -30, -36, 84, -87, 54, 11, -42, -120, 56, -102, 17, 33, 65, -1, 27, -41, 11, 2, 30, -44, 12, -2, 86, -39, -59, -115, -46, -60, -9, 75, -10, 4, -117, 62, -34, -126, -33, -47, 54, 15, -127, 45, 3, -17, -21, -55, -51, -104, -41, -20, 59, 21, 11, 25, 38, 74, 40, -23, 8, 23, 31, -75, -3, 56, 26, -38, 104, -11, -8, 100, -5, -35, 39, -1, 67, -62, 47, 48, -8, 101, 39, 45, -20, -1, -22, 39, -3, -17, -7, -17, 19, 10, 26, 4, -8, -5, 69, 4, 2, -3, 13, 45, 19, -8, 90, 12, 39, 10, 18, 1, -30, 15, 53, 19, -40, -20, -4, 29, -7, 9, 14, 5, 16, 49, -61, -31, -64, -36, -8, -8, 25, 21, -26, 7, 0, 4, 2, 21, 2, -60, 42, 5, -48, 79, 8, 29, 34, -26, -79, 22, -43, 69, 78, -72, 30, -41, -103, -15, -35, -52, 8, 29, 110, -51, -32, 1, 40, 33, -46, 22, 48, 24, 24, 58, -107, 6, -72, 39, 35, 8, -28, 67, 28, 79, 118, 3, -45, 121, 0, 18, -40, 93, -61, -28, -33, 43, 19, 83, 45, -9, -123, 82, 39, -3, -39, 16, -17, 25, -27, 25, -49, 71, 45, -59, 8, -44, 12, -84, 4, -3, 56, -97, -17, -84, 88, 61, 1, -22, 116, 35, -31, -13, 26, 120, 10, 51, -17, 38, 48, -24, -21, 124, -8, 43, -33, 29, -34, 32, 27, 31, 64, -127, 64, 4, 12, -50, -128, -33, -26, 45, -124, -127, 3, 0, 4, -17, 0, 56, -13, 86, -128, -46, -126, 52, 55, 54, 13, -10, -27, -52, 31, 6, 51, 121, 50, 9, -102, -32, -87, 8, 61, -4, -19, 2, 24, 11, 74, -27, -114, -3, 58, -1, 40, -112, 70, -24, -71, 29, -24, -75, 55, 1, 64, -1, -18, 39, 7, -78, -22, -111, -122, 108, 22, 37, -13, 13, 17, -17, -113, 32, -9, 23, 71, -93, 11, 110, 74, 72, -26, -6, 50, 48, -51, -73, 120, 30, -8, 28, 41, 82, 34, 63, 9, 51, 123, 57, 16, -105, 29, 38, 18, -39, 47, 31, 0, -56, 39, -36, -24, 62, 87, 39, -25, -38, -67, 84, 6, 48, 107, 26, -49, -94, 52, -16, -17, -4, 1, 68, -19, 90, -7, 53, -19, 10, -16, -38, -9, -55, 12, -31, 44, 19, 70, 28, 28, -32, -11, 31, -3, -58, -3, 50, 46, 28, 37, 6, 31, 5, -27, 54, 26, 33, -43, 46, 126, 44, 80, 12, 8, 73, 20, -62, 86, 42, -10, -15, 25, -83, -25, -119, -54, 16, -35, -21, -40, 35, 37, 5, 7, -8, -36, -20, 43, 38, 61, -124, 65, 33, -30, 107, 58, -26, -41, -14, -43, 29, 116, -40, -55, 76, -83, 59, 36, -116, -1, -106, -57, 121, 26, -67, -32, 77, -9, 35, -111, 47, 36, -41, 80, -64, 11, 121, -80, -4, -116, -71, -47, 56, -15, 27, 24, -74, 11, 86, -20, 66, -93, 18, -35, 21, -14, -4, -37, 8, 19, 64, -81, -57, -33, 126, 32, -32, -12, -22, 63, 43, -24, -36, -49, 29, -105, -115, -73, -124, -43, 77, -99, 120, 4, 42, -77, 46, 55, 61, 45, 108, -120, 34, -49, -18, -61, -46, 8, -121, -79, 18, 91, 45, 29, -61, -20, -118, 41, -20, 105, -5, 46, -12, -4, 14, 8, 43, 1, -38, 56, 88, -22, -94, 109, -71, 13, -27, 16, 70, 74, -123, 60, 44, -25, 18, -24, -85, 39, 72, 21, 22, -35, 4, -18, 28, -1, -42, -53, 18, 32, -5, 45, -21, 35, 123, 63, 7, 45, -128, 1, -16, -86, 26, 25, -14, 20, 33, 112, 38, -3, -49, 67, -1, -20, -74, 6, -46, -23, -23, -114, 31, -77, -15, -24, -67, 74, 42, -61, 22, 25, -99, 50, 71, 6, -42, 58, 54, -19, 17, -3, 60, 9, 56, 116, 32, 82, -28, -10, 15, -43, 25, 52, -105, 57, 4, -41, 2, -84, 43, 36, 15, 2, -60, -48, -34, -49, 2, -71, 66, 54, 33, 3, 60, -22, 18, 32, 30, -8, 52, -64, -21, -16, -23, -13, 17, -51, 0, 5, -58, 23, 5, -56, -5, 72, -27, 83, 18, 42, -24, 20, 10, -30, -17, 49, -23, 51, -54, -7, 11, 20, 89, 21, 9, -83, -22, -121, -36, 95, 29, 42, -71, -38, 6, 60, -79, -119, 35, 8, 35, 14, 110, 68, 35, -62, -26, 14, 52, -51, -41, -3, -35, 35, -34, 64, -81, 74, 10, -7, -45, 33, 19, -55, -26, -71, -8, 19, -67, -4, 49, -36, 25, -33, -40, -39, -10, -25, 4, -30, 100, 8, 33, 8, 9, 22, 5, -39, 61, 10, 79, 89, 42, -27, -9, -15, -64, 24, 80, 26, -9, 19, -11, -68, 43, -51, -14, 39, -16, 54, -11, -121, 48, 64, -95, -31, -46, 7, -43, -19, -61, -111, 79, -34, -126, 31, 5, 60, 51, -108, 42, -44, -43, -31, -81, 29, 24, -55, 11, -21, 0, 50, 1, -66, -31, -40, 6, -35, -31, -13, 41, -7, 74, -45, -123, 44, -25, -78, -24, 40, 49, -3, -38, -25, 3, -36, -93, 50, 53, 58, 81, -21, -24, -47, 7, -15, -47, -13, 29, 124, -10, 13, -41, -82, 8, -51, -20, 13, -48, 57, 38, 26, 15, -78, -23, -46, -3, -18, -16, -53, 6, 26, -43, 20, 12, 6, -1, -56, 40, 81, -62, 37, -30, 29, -10, 28, -44, -37, 11, -48, -7, -29, -90, 23, -25, -35, 6, 49, -10, -2, -30, 6, -79, -124, -13, 56, 44, -8, -80, 66, -28, -56, -11, -41, -74, 14, -4, -33, 43, 0, -30, -40, -37, 10, 7, 30, -24, -13, 22, -33, 36, -18, 64, -9, -25, -59, -72, -15, -31, 21, 56, -6, -102, 0, 46, -35, -3, -23, 39, -15, 117, 54, -10, 48, 19, -42, -31, -26, 11, -2, -35, -94, -30, 41, 26, 41, -23, -62, -47, -88, 51, -16, 13, 0, 56, -21, -57, -26, -17, 64, -5, -128, -24, -51, 53, 32, -76, 39, -81, 87, -116, -32, -24, 63, 76, -44, -128, 46, 69, -128, 12, 24, -128, 5, 88, -16, 76, 117, -6, 5, 26, -27, -36, -40, -73, 2, 4, -69, 39, 127, 53, 93, -124, 16, 46, 19, 27, 82, 102, -58, -96, -1, 123, 64, 13, 121, 116, 127, -77, 6, -70, 19, -127, -101, -23, -125, 126, -126, -17, 65, -65, 13, 124, 64, 35, -95, 0, 127, 42, -18, -37, -64, -47, 85, -126, -122, 40, 7, -67, -12, 6, 1, 105, 86, 20, 22, -16, -36, -22, -13, 1, -14, 39, 70, 16, -40, -29, 16, 42, 8, -47, 11, -50, 1, 1, -33, 5, -31, -91, -19, 21, -42, -65, 0, -10, 56, 12, -48, -19, -4, -12, 3, -9, 16, -15, -64, 5, -73, 9, 9, -4, 23, 14, -46, 21, -8, -43, -32, 43, -6, -2, 15, 4, -19, 26, 11, -15, 28, -13, 18, 56, 34, 42, -18, 25, -32, -11, 45, -37, 1, 43, 38, 4, -42, -15, -40, 8, -19, 19, -42, -31, -20, 34, -16, -50, 3, 18, -18, 17, -6, -15, -21, 5, 4, 91, 80, 8, -6, -33, -13, -82, -1, 42, 22, 6, 25, -16, 7, 16, 22, 14, 12, 18, 57, -6, 92, 13, 50, -54, 18, 58, 8, -18, 14, 62, 16, 126, 16, 18, 57, 7, 39, 104, -84, -4, -8, 29, -35, 13, 24, 13, 75, 16, -32, 23, 5, 21, -41, -94, -68, 31, 32, 0, -37, -5, -12, 6, -44, -20, 27, 19, 48, -4, -37, 23, 127, 24, 39, 97, 12, -1, 6, -13, 31, 7, 27, 8, 15, 44, 17, 97, 106, -68, -59, 20, -17, -13, 10, 9, 8, 89, 29, 47, 47, 39, 79, -18, 55, -5, 101, -2, 9, 105, 21, 87, -55, 26, 35, 49, 123, -13, 87, 10, -79, -40, -70, -50, 34, 6, 29, -17, 71, -18, 9, 111, 2, -21, -4, 127, -24, -52, -2, 104, -15, -27, 126, -78, 41, 59, 52, 72, -23, -12, -7, 52, -11, 17, -19, 79, -37, -23, -8, -23, -13, -75, -40, -57, -125, 60, -65, 24, -66, -72, -34, 79, 7, -29, -24, -100, -62, -62, -54, 40, -55, 42, 81, -51, 55, 21, 33, 93, 9, 85, -24, 37, 20, 21, -5, 72, 9, 60, -22, 15, 9, 80, 68, 10, -61, 57, 67, 127, -11, 22, 108, 103, -42, 43, -19, 97, 11, 33, 124, -61, 24, 23, -35, 122, -72, -45, -90, -48, 15, -48, -20, 48, 12, -4, 90, -3, 0, 13, -33, 64, 86, 19, 74, 119, 120, -128, -126, 37, 28, -7, 15, 72, -26, 62, 35, 8, -79, 4, -42, 9, -5, -37, -39, 72, -99, 10, 25, -1, -88, 66, 39, 28, -73, -123, 37, -12, 29, 44, 7, 75, -11, -98, 27, 61, -11, -10, -52, 74, 18, -62, -14, 66, -6, -2, -53, 13, 48, 13, 4, 4, -9, 16, -47, -16, 32, -49, 6, -51, -15, 55, 48, 64, 32, 41, -12, -72, 69, 7, 17, 26, 45, 53, -110, 16, 11, 20, -75, 48, 77, 1, -31, 1, 74, -66, -8, 73, 44, 19, -40, 41, 27, 62, 60, 93, 20, 12, 0, -39, -27, -1, 7, -13, -1, -15, 84, -47, 21, 62, -18, 25, 19, 6, 64, 97, -3, 9, 12, 101, -14, 46, 30, 22, -9, 22, 13, -6, -17, -26, -63, 21, 105, 49, -25, -26, -43, -22, 26, 17, 54, 101, -25, 44, -4, 40, -5, 50, 37, -21, 62, 53, 19, 38, -60, -84, 13, 40, 15, 59, 105, 33, -14, 19, -17, 69, -7, 13, -45, -20, -16, -16, 68, -17, 32, 12, 2, 40, -35, -23, 29, 9, -25, -38, 51, -62, 13, -84, -3, -48, -76, -76, -65, -24, 16, -21, 14, 2, 56, 18, -47, 49, -17, 31, 46, 18, 78, 44, 55, -72, 1, 34, -15, -46, -8, 6, -39, -24, 3, 121, 1, -11, -41, -61, 57, -33, 4, 3, -43, -47, -1, 97, -14, -14, -5, -13, -40, -15, 31, 1, 22, -7, -83, -19, 15, -35, -13, -2, 60, -31, 32, -20, -69, -50, 27, 69, -64, -48, 51, 40, -96, -63, -88, -24, 3, 12, 127, -111, 75, 54, -44, 14, -19, -59, 8, -16, 19, -128, -27, -76, -25, -2, -73, 125, 27, -127, 12, -15, -55, 40, -126, -1, -81, 50, 126, 100, 29, -6, 43, 32, 19, -2, 52, -27, 28, -108, 53, -24, 0, 42, -15, 20, -53, -51, 27, -108, -88, 49, -6, 34, 0, -54, -48, 49, -53, 13, 57, -64, 8, -19, 48, 8, -2, 13, 44, 13, -8, 26, 62, -23, 35, -6, -11, -16, 29, 94, 95, 22, 25, -42, 57, 41, 24, 43, 87, 49, 19, -18, 113, -11, 52, 102, 119, 31, 100, 47, 6, 16, 36, -11, 21, -23, 59, 8, 59, -14, 38, 82, 12, 58, -31, 39, 86, -52, -12, 51, -7, -65, 29, -44, -39, 12, 39, -49, 13, -41, 23, -9, 24, 13, 43, -48, 37, 75, 9, 88, -22, 22, -99, 24, 42, -20, 8, -31, -17, 8, 48, -29, 64, -9, -32, -2, -30, 11, 26, 124, -64, 25, 7, -5, -11, 58, 73, -93, 64, 24, -43, -60, -13, 8, 0, -16, -5, -83, -103, 108, 27, -20, -20, 32, -49, -2, -25, 126, -18, 19, 126, 3, 25, -27, 90, -24, -38, -38, 48, 55, 24, -28, 0, -22, -31, -8, 98, 36, -12, -7, 7, 16, -16, -88, -10, 102, 79, 117, -25, -40, -11, 26, -8, 19, 25, 35, 73, 47, 33, 14, 82, -20, -42, 22, -74, -25, 90, 16, -45, -66, 81, -65, -66, 34, -17, 22, -13, 102, 39, -3, -51, 32, -35, 4, -9, 53, -17, -92, 35, 41, 66, 125, 35, -68, 13, -34, -22, 22, 2, 13, -59, 26, 41, 12, -76, -78, 4, 78, -6, -30, 1, 46, -22, 29, -53, -44, -128, -83, 7, -128, -87, 45, 66, 21, -74, -13, -125, 2, -9, 0, -63, -67, 37, 32, -28, 1, 74, -109, 9, 25, -51, 31, 98, -32, 10, -22, -82, 30, 102, 41, -64, -43, 85, 40, -13, -125, -98, -5, 4, -66, -69, 6, -86, 125, 45, -81, -57, 76, -127, 91, -57, 2, -22, -65, -36, 127, -54, -12, -11, 6, -29, 20, 37, -13, -58, 32, -55, -5, -67, -51, 1, 0, -77, -43, 31, -43, 12, -61, 24, 53, 27, 6, 19, 25, -29, -4, -11, -97, -64, -43, 17, 19, -96, 13, 35, -48, -43, -34, 75, 6, -30, -6, -29, 26, -18, -47, -1, 42, -2, -29, -6, 40, -2, -95, -22, -95, 7, 67, 12, -35, 25, -15, -21, -72, -44, -89, -25, -97, 107, 4, 52, 11, 121, 0, 75, 9, -18, 23, -27, -50, -15, 5, 45, -31, -18, -55, -30, 40, 27, 2, 94, -14, -24, 26, 29, 86, 127, 16, -64, -38, 16, 110, 7, 22, -47, 64, 87, -11, 65, 92, -43, 89, 15, -68, 113, 68, -79, 80, 55, -57, 48, 12, -61, 2, -71, 22, 28, -25, 35, 8, 124, -66, 30, -112, -127, 74, -7, 52, -88, -15, -4, -45, -40, 124, 13, 61, 60, 29, -124, -73, -99, -85, -125, 79, 21, 124, -35, 123, 11, 28, 73, -62, 62, 44, 76, -1, -58, -25, -58, -40, 99, -57, -126, 6, -63, -124, -90, -105, -55, 84, -49, -17, 36, 66, 39, 19, 83, -34, -107, 27, -17, 20, 90, 11, 17, 50, 7, -47, 35, -17, 24, 57, 29, -27, -77, 11, -74, -49, -9, -39, 4, -25, 32, 117, -8, 37, 52, -104, -13, -87, 0, -32, 126, -10, 59, 15, -44, 26, 46, 8, -4, 25, -85, 24, 15, 20, -27, -6, 51, -8, 12, 50, -6, -23, 52, 109, -47, 13, 69, -112, -54, 36, -15, 32, -23, -106, -40, 19, 40, -49, -81, 23, -28, -3, -61, -47, -62, -52, 90, -25, 69, -122, 5, 119, -13, 9, 38, 17, -5, 34, -18, -34, 23, -27, 65, 59, -3, 16, 9, -16, 1, 72, -9, 36, -43, -8, 36, 27, 20, 35, 81, 4, 57, -25, 43, 0, 14, 31, -25, -32, -9, 35, 55, 18, -78, 25, 80, 31, 11, 15, 37, 0, -74, -10, 49, 44, 1, 8, 120, -14, -2, 29, 122, 33, 96, 23, -95, 39, 67, 8, -18, 73, 9, -50, -105, 80, -23, 88, -23, 6, 108, -15, -8, 36, 12, 27, 34, -22, 46, 28, -10, 61, -60, 0, 20, -31, -8, 32, -33, 87, 121, 35, 17, 45, -19, 21, 61, 90, -33, 57, 38, 36, -32, 119, -30, 25, 66, 14, -13, 28, 15, -34, 57, -56, -16, 27, 89, -63, 0, 3, -23, -37, -11, 43, 5, -65, -15, 58, -15, 25, 1, -70, 21, -43, -25, -52, -28, -52, 17, 2, 30, 5, -36, 76, 63, 37, 79, 88, -4, -25, 79, -77, 16, -20, -6, 48, 52, -47, 66, 68, 4, -11, 10, -54, -60, -68, -99, -16, 56, -67, 26, -70, 42, -13, 32, 57, 86, 40, 44, -8, -28, 30, 73, -29, -36, -22, 2, 4, 16, -52, 87, -29, 44, 26, 25, -21, 19, -64, -127, -11, 12, 47, 86, 97, -6, -34, 2, 69, 0, 8, 29, -7, -117, 17, -73, -19, 33, -86, 24, -124, 123, 94, 46, -103, -59, -5, 40, -114, 3, 68, 109, -2, -95, -33, -10, 8, 43, -10, -19, 78, -66, 10, 58, -114, -54, 65, 28, 67, -10, 63, 40, 18, 7, -26, 32, -8, 3, 3, -35, 43, 15, -78, -127, -2, -118, 47, 62, -124, -16, -57, -111, -123, 3, -45, -108, -122, 83, -103, 114, -124, -35, 35, -62, 55, -9, 87, 127, -74, 56, -28, -41, 40, 6, 5, -80, -6, 4, -4, -5, 57, -36, 17, 22, 47, -15, 22, 28, 37, 115, 36, 65, 21, -10, 0, 20, 18, 77, -51, -30, 7, 52, 13, -61, 13, -30, 15, 28, 8, -63, 15, -2, 13, -11, -2, -27, -68, 110, -43, -7, 81, 83, 24, 30, 33, -31, -28, -39, 15, 39, -46, -2, 13, -21, 6, -17, -51, -22, -33, -51, 54, 9, -54, 16, 35, 39, 44, -84, 12, 45, -21, -37, -46, -18, -53, 8, 21, 1, 11, 14, -71, -20, -5, -19, -9, -23, -16, 7, -3, -8, -16, -30, 43, 20, 43, 19, 17, -25, 11, -18, -24, 3, -31, -31, 82, -92, -69, 51, 3, -57, -82, 12, -86, -19, -10, 27, 23, -11, 3, -6, -34, -33, -29, -56, 13, 52, 36, -62, -34, -4, 17, -45, 2, 71, -48, -26, 17, -45, 25, -43, -18, 38, -23, 33, -11, 38, 28, 15, -83, -7, -11, -46, -53, 46, -13, 31, -36, -79, 57, -54, -70, -11, -42, -30, -35, 35, -11, -12, 18, -16, 111, -23, 22, 64, 28, 48, -31, 48, -18, -7, 11, -34, 1, -46, 31, -6, 71, -108, -121, -31, -57, -28, 61, 25, 32, -32, -126, 5, -13, 52, 117, -56, 17, 53, 9, -125, 48, 21, -42, -34, -16, 70, -48, 5, -2, -15, 78, -29, -121, 57, -28, 47, 19, -4, 45, 95, 13, 30, 31, -26, 54, -49, -65, 45, -97, 65, 98, -38, -30, -49, -36, 15, 34, -94, -6, -57, -105, 73, 5, -49, 1, -71, 22, -86, -124, -23, -53, -48, 4, 30, -1, 124, 29, 30, 68, 20, -128, 26, 12, -95, -8, -128, 75, 60, 6, -23, 5, 17, -12, -45, -72, 7, -18, -19, 48, -21, -46, 79, 31, -127, 36, -69, -75, -5, 102, 40, -29, 1, -21, 18, 1, 60, -99, -102, 21, 24, -42, 43, -1, 46, 16, 84, -53, -45, 33, -12, -3, 30, -1, -26, 0, 21, -48, -4, -6, 16, -41, 22, 9, -25, 6, -8, 15, 8, 6, 49, -18, 20, 10, 33, 62, 32, 15, 37, -16, 44, 5, 6, -47, 12, -16, 2, 50, 72, 94, -4, 38, -103, -17, 73, 50, 25, 7, -1, -15, -39, 0, 19, 24, 19, -49, 44, 3, 5, 85, -22, 33, 2, -16, 18, 53, -61, -2, 4, 6, -22, 66, -39, 5, -30, -73, 45, -62, 121, -60, 113, -65, 26, 34, -44, 57, -23, 42, -39, 31, 30, -79, 5, 31, 20, 22, -24, 42, -59, 120, 108, -28, -8, -11, 5, -3, 63, 64, -91, -2, -71, -21, 10, -70, 58, -43, -16, -12, 73, 11, -50, 15, -19, 41, -12, -9, -123, 35, 19, -19, -40, 34, -19, -43, -109, 24, 25, 1, 127, -7, -17, -91, 13, 3, 125, 2, -105, -53, 11, -28, 15, 66, 20, -10, 42, -45, 6, 20, -7, 38, -8, 43, -49, -46, 15, 60, 9, -124, 75, -31, -14, -70, -119, 38, 9, -44, -126, -92, -96, -17, -128, 1, -110, 40, 104, -23, -126, -61, 3, -78, 1, 75, 14, 41, -14, -43, 41, -80, -34, 52, -128, -13, -106, 53, 77, 82, -61, 34, 32, -117, -29, -20, -44, 55, -78, 56, 3, -16, -9, 119, 41, 27, -71, 0, 7, -26, -41, -117, 73, -84, -122, 34, 51, 89, 11, -48, -74, -14, 21, 22, -90, -96, -4, -86, 124, 19, 14, 101, 80, 10, -31, -32, 13, -32, 37, -21, 36, -52, 27, 15, 38, 16, 32, -33, -55, -28, -1, 123, -10, -54, 27, 46, -7, 127, 39, -1, 40, 3, 40, -12, -22, -30, -5, -30, -62, -64, -34, 123, -61, 39, 42, -31, 24, 49, -21, 77, -20, 45, 49, 85, 127, 79, -3, -23, -28, 77, 55, -31, 70, 4, 16, 59, 49, -36, 127, 85, -13, -27, -67, 67, 25, 8, 32, -3, -25, 104, 36, 44, 38, 48, -8, 22, -65, 71, 49, -10, 3, 6, 77, 49, 21, 6, 103, -17, -11, 40, -25, -2, 89, 54, 37, -68, -53, 68, -7, 58, -120, 56, 0, 66, -49, -70, -53, -59, -9, 14, -101, -38, 46, -103, 1, -12, 30, -57, -17, -7, 10, -39, -50, 0, -65, 68, -109, -82, -38, -36, 47, 99, -36, 2, 30, 34, 68, -39, 88, 6, 15, -20, 29, -40, -11, 2, 62, -50, -34, -36, 70, 127, -53, 55, 96, 38, 40, -46, -18, 65, 73, 56, 32, -48, -79, 17, -23, 105, -82, -84, 71, 31, 15, -61, 40, 65, 8, 106, -47, 25, 5, 13, 12, 80, 102, 40, -45, -37, -89, -49, -14, -67, 89, 103, 66, -56, -26, 92, 33, 58, -52, -78, 30, -47, 21, -116, -57, 17, -44, -32, -104, -57, -46, 4, -127, 37, -34, -42, -102, -72, 6, 126, -21, -94, 42, -18, -62, -77, -21, -14, -79, -34, 10, 2, -3, 27, 22, 9, -38, 5, 68, -73, 86, 20, 44, -34, -26, 88, 10, -12, 63, 32, -89, 39, -7, -56, -6, -7, 6, -81, 43, -127, 37, 65, -89, 22, -74, -57, -3, -13, 86, -4, 83, -38, -85, 18, 26, 12, 4, -128, 43, -1, 25, -41, 26, 75, 53, 18, 0, 13, -8, 35, 43, 0, -17, 3, -77, 75, 47, 119, -31, 9, 34, 26, 39, 64, 65, 47, 60, 4, 65, 14, -101, 10, -25, 102, 116, 76, 104, 33, 98, 28, 16, 23, 21, 60, -15, 53, 112, -3, -42, -19, 27, 12, 106, 16, -33, -4, 101, 48, -9, 42, -19, 22, 48, 48, 65, 43, -42, -127, -79, 28, -30, -9, -28, -26, -34, 54, 5, -47, 24, -41, 105, -27, 8, 85, 10, 52, -9, 22, 18, 25, 99, 59, 22, -86, -53, 20, 24, -77, 63, -6, 6, 41, 122, 60, -37, -2, 17, -21, 107, 15, -62, 7, 87, -12, -1, -68, 65, -71, -47, -100, 33, 120, 17, 6, -25, 116, 0, 39, 27, 19, 0, 47, 83, 37, -12, 2, 83, 89, -70, -81, -21, 28, 16, 25, -36, 48, -21, -15, -6, -84, -22, -44, 53, 44, 58, -27, 34, 118, -3, -106, 85, 71, -1, 111, -44, -29, 127, 9, 81, -103, 11, 31, -125, -10, 53, 19, 111, 30, -34, -84, -43, 2, 36, -2, 122, 61, -96, 126, -34, 125, 18, -41, -35, 6, 51, 38, -16, 39, 33, 49, 42, 38, 11, 30, 46, 9, -54, -17, 30, 8, 4, 16, 95, 23, 28, 100, -29, -22, -29, 41, -2, 93, 55, -58, 40, 6, -84, 1, 20, -46, -3, -26, -33, 51, -101, 51, -15, -20, 54, -78, -90, 31, 47, -89, -49, 1, -29, 1, 24, -11, -30, 16, -6, -15, 17, -57, 43, -33, 80, -93, -3, 31, -124, 21, -66, -94, -6, 104, 72, 27, -40, -85, -99, -57, 9, 7, -31, 1, 17, 24, 13, 29, -76, 88, 27, 50, 12, 56, 75, 102, -55, 20, 77, 25, -7, -3, -21, 84, 1, -102, 56, -5, 14, 24, 29, -82, -17, -80, -44, 80, -19, 53, 23, 23, 72, -9, -14, 35, -72, -10, -74, -27, -13, -53, -51, 37, -34, 62, 63, -42, 18, -95, -118, 25, -23, -14, -33, -22, 63, 20, -22, 15, 18, -33, -124, -110, -36, 7, -20, 115, -23, -8, -33, 53, -2, 49, -15, 18, 95, 12, -18, 103, 42, 7, 15, 17, -1, 26, -34, -6, -13, 26, 27, 19, -67, -9, 122, 32, -34, 18, 8, 37, 98, -7, -20, -54, -33, 59, -27, -44, 25, -15, 6, -108, 2, -9, 46, -20, 47, -17, -76, -10, -88, 11, -21, 40, 26, 13, 57, 72, -56, -31, 121, -127, -24, 60, 24, -23, -13, 61, -43, -25, 14, -65, -36, -13, -2, 120, -12, -46, 88, 127, 20, -21, 3, -24, 43, 38, 102, -28, 101, -116, 16, -20, -22, -66, 19, 89, 93, 123, 23, -111, -6, -45, -69, -46, -42, 21, 54, -73, 73, -13, -21, 88, 51, -19, -18, 78, -12, 8, -4, 50, -82, 1, -35, -86, -31, -25, -55, -3, -63, -17, 11, 32, -69, -29, 22, 6, 37, -46, -6, -62, -50, 74, -87, 43, -41, -84, 55, -43, 7, 12, 52, 29, 25, 58, -19, -1, 34, 5, -106, -62, 50, -77, 28, -11, 2, -16, -52, 3, -50, -2, -20, -90, 13, -92, 36, 11, -21, -78, -19, 24, -20, -12, 28, 9, -19, -6, -123, 35, 61, -47, -34, -3, 12, 31, 17, 17, 101, -35, 47, 16, 45, 48, 0, 15, 16, -11, 2, 40, -34, -92, 42, -78, -25, 0, -42, 35, -126, -126, -6, -83, -128, -48, -105, -29, -10, -74, 11, 27, 26, 42, 1, 12, -24, -14, 0, 110, 29, -16, -29, 59, -92, -35, -91, -26, 0, 11, -1, 42, 54, 2, 15, 23, 42, -23, -54, -29, 1, -120, 31, -16, -51, 71, -32, -72, 51, 31, 40, -6, -13, 14, 37, -8, -71, -20, 76, -17, 41, 28, -23, -119, 1, 107, 5, 43, -13, 117, -41, 8, -26, -14, 33, -18, 57, 60, 7, 5, -11, -39, -32, -2, 15, 41, 98, 111, -44, 46, 44, 20, 88, 18, 62, 17, 107, 16, 5, -4, 40, 15, -19, 9, 58, -77, -40, 119, -54, -35, 45, 75, 12, -45, -32, -3, 72, -41, -21, 6, -5, 2, 106, -40, 41, 62, 57, 8, 24, -60, -44, -61, 104, -48, -34, -58, 62, -20, 6, -60, 40, -29, 117, 76, -56, 22, 15, -1, 112, -1, 23, 42, 57, -53, 75, 26, -11, 35, 78, 85, 0, 19, 17, 3, -29, 20, 28, -54, 6, 5, -11, 45, 34, 37, -13, 2, 15, 13, 9, -28, 32, 8, 27, -1, -63, 42, -33, -2, -19, 4, -127, -15, -52, 38, -5, 35, -26, 44, 13, 1, -39, 73, 17, 24, 33, 103, -56, -41, -1, -28, -40, -81, 21, 10, -2, -79, -88, -42, -3, -44, -63, 81, 16, -42, -71, 37, -14, -27, -127, -6, -108, -94, 19, -71, -80, -12, 65, -9, -7, 92, 8, -125, -36, 2, 47, 0, 19, 8, -65, -58, -60, -1, 17, 33, 46, 78, -103, -127, 63, -3, -65, 16, 13, -10, 16, 0, 27, -8, -104, 2, -17, -44, -24, 41, 37, -4, -124, -4, 18, -109, -125, 41, -7, 11, 29, 17, -42, 24, -120, -70, -123, -26, -25, 14, 66, -12, -38, -106, -29, 45, 5, -6, -11, 31, 6, 13, -85, 44, -15, -2, -3, -39, -4, 4, 8, 78, 51, -47, 19, 3, -63, 22, -34, 28, -13, 22, 15, 23, 5, 1, -87, -122, -66, -14, -10, -1, 19, 40, -40, 2, 24, 13, -23, -27, -125, -3, -12, 9, 18, -4, -12, 8, -8, 66, -2, -13, -27, 20, -38, 33, -24, -20, -11, -6, 11, -9, -3, -30, -1, -16, 23, -60, -19, 16, -33, 21, -34, 9, -2, -33, -43, 21, -39, 1, 54, -24, -24, -22, -30, -1, -9, -27, -8, 14, 40, -5, 10, 4, -30, -6, -21, 34, -34, 52, -12, -6, -47, -95, -34, 43, 6, 31, 32, -38, -23, -27, 42, -22, -118, 19, 34, 23, 5, -50, 22, 25, -19, -40, -17, -2, 26, -15, -69, -126, 10, 33, 23, -7, 13, -9, 26, -42, -62, -74, -9, 8, -47, 38, -82, 38, -4, 11, 57, -10, -12, -66, -25, -10, 24, 4, 16, 1, 41, -18, -96, 18, -11, -13, 103, 11, 17, -3, -76, 19, -81, 110, 18, -46, -51, -53, 19, 3, -36, -31, -13, -32, -44, -37, -70, 43, -128, -11, 35, 2, -58, -33, 20, -62, -105, 11, -70, -77, 44, 125, -15, -25, 18, -60, 69, -96, -125, -4, 95, -69, 13, -30, -43, -53, -61, -6, -8, 60, 5, -75, -125, 5, -12, 45, -101, 111, 11, -98, -17, 39, -85, -7, -46, -56, -37, -97, -45, -37, -16, 80, 64, 110, -74, -30, -34, -24, -95, 2, 4, 56, -71, 39, -39, -14, -46, -22, -124, -115, 8, 19, 69, -11, -70, -68, 120, 95, -100, 112, -103, -70, -35, -128, -97, -71, 29, -72, -123, -48, 10, -36, -51, -8, -8, -26, -15, -26, -5, 34, 6, 38, 13, 67, -14, -35, 28, 21, 127, 6, -28, 41, 20, 8, -48, -33, 1, 28, 9, 15, 48, -48, 88, 91, -19, 54, -22, -80, 35, -37, -2, 7, -44, 18, -67, 36, 50, 21, -60, 26, 26, 34, -29, 8, 28, 2, -10, 19, 26, 43, 36, 0, 116, -24, 12, 13, 1, -33, -7, 0, -4, -13, 3, 8, 4, 32, 23, -72, -70, 42, 54, -16, -21, -48, -38, 22, -46, 22, -40, -1, -64, 0, 40, -27, -26, 9, 12, 35, 59, -48, 46, -18, -25, 13, -66, -14, -55, 57, 24, -67, -15, -15, -38, -84, -11, 1, -45, 19, -60, -49, 24, 38, 22, 53, -52, 20, -1, 53, 82, 19, 43, 13, -32, -56, -51, 56, 16, -36, -33, -53, 7, -22, -20, -14, -34, 11, 24, 22, -21, -127, -51, 15, 47, -20, -49, 22, -56, 40, -44, -20, -2, -65, 9, -2, -27, 22, -1, -12, -9, -17, -55, 89, -76, -16, -10, 37, -35, 0, 4, 16, 52, -10, 23, 39, -25, 9, 51, 79, -6, 21, -18, 10, 64, -37, -33, -48, 24, 78, 15, 17, -34, 81, -35, -82, 32, 110, 59, -126, -25, -124, 11, -55, 20, 63, 100, -10, -123, -69, -6, 5, -74, 26, -14, 16, -12, -13, -115, -76, -70, -124, -19, -81, 40, -96, -66, 62, -32, -79, 28, 59, 12, 31, -53, 119, 74, 26, -17, 44, 81, 100, -19, -25, 41, -11, -103, 48, 41, -8, -26, 4, -112, 53, 31, 28, 50, -73, -9, -127, 1, -84, -109, -35, -80, 9, -38, 42, -105, 89, 32, 94, 68, -73, -8, 53, -32, -2, -8, -127, 101, -2, 43, 110, -13, 43, 27, -4, -55, -12, 81, 52, 114, 30, 66, -67, 107, 88, 44, -63, -14, -92, -27, -58, -16, 82, 98, -26, -9, 0, -108, -82, -11, 23, 26, -22, -2, -82, 93, 89, -67, -31, 5, 34, 36, 32, -49, -53, -81, 86, 43, 34, 11, 59, -46, 4, -60, 14, 12, 30, 34, 14, 29, 10, -34, -105, 32, 122, 7, 63, 24, 43, 55, 34, 61, -26, 70, 9, 8, -3, -40, 28, -42, -35, -3, 53, 35, -9, -49, -26, 39, 61, -48, 64, 81, 18, 78, 27, -3, 0, -66, 108, 40, 28, -45, 57, -17, 44, -56, -12, 18, -93, -43, -7, 32, -38, 55, -17, 121, 71, -27, 39, 36, -13, 26, -27, -13, 52, 30, 3, -26, 11, 21, 52, -7, 127, -5, -84, 62, 47, -93, 89, -90, -8, -18, 40, 21, -86, -10, -47, 28, -48, 69, -76, -66, 55, 28, -87, -11, -53, 38, -29, 13, 103, -79, -126, -39, 82, -87, -6, 18, -54, 65, -24, 61, 0, -60, 34, 43, -5, -15, 36, 25, 26, 60, 18, -28, -16, -9, 60, 36, 13, 34, 57, -43, 7, 82, 53, -7, -24, 33, 63, 49, -79, 110, 34, -11, 94, -80, -43, 102, 22, 3, 30, 78, -60, 127, -126, -48, -15, -20, 63, -98, 27, -60, 5, -7, 9, -39, 55, 20, 43, 32, -57, 34, 41, 20, -2, 53, -6, 2, 26, -105, -41, 21, -14, -84, -9, 57, 14, -63, 36, -62, 8, -45, 92, -56, -1, 23, -17, -45, 42, -30, -14, 60, 17, -5, 87, -42, -18, 73, 5, 12, 6, 11, -2, -7, 13, -19, 40, 16, 87, 12, -76, 48, -18, -37, -105, 86, 4, -43, 20, 35, -53, -25, 49, -31, -5, 71, 57, -127, 51, -49, -10, -30, -41, -9, 15, 16, 40, 17, 13, 0, -3, 1, 43, -76, 5, 98, 20, -4, 26, 53, 19, -65, 40, 47, -58, 79, 15, -19, 80, -28, 117, 50, -28, 11, -32, 28, -27, -72, -13, 9, 22, -53, 13, 8, -29, -37, -34, 46, -68, -18, -126, -89, -87, -36, -19, -2, -45, 16, -3, 1, 17, 4, 3, -72, -62, 51, -48, 3, -87, -23, 13, -117, 17, 24, -76, -42, -18, -128, 25, -95, -45, -17, -48, -112, 106, 12, -97, -23, -18, 45, -42, 25, 65, -67, 84, -67, -110, -7, 64, -8, -75, 83, 10, 49, 121, -82, 125, 52, 82, -49, 20, 79, -3, 86, 60, 14, 35, 33, -46, -39, 85, 53, -17, 4, 59, 12, 111, -14, -29, -23, 57, -24, -37, -125, 86, -58, 82, 77, 30, 67, 1, 113, 77, 49, 72, -35, -90, 3, 106, 5, -85, -21, -87, -76, -40, 32, 4, -76, 1, 13, -70, -23, 4, -29, -12, -28, -18, -75, 22, -100, -77, 17, 87, -56, -25, -13, 13, -20, -37, -39, -75, -56, -1, 44, -25, 24, -12, -27, -35, -59, -122, -15, -42, 53, 0, -38, -28, -8, 75, 13, -78, 36, -110, 30, 19, -50, -14, -127, -22, -69, 34, -25, -12, -6, -7, 49, -15, -36, -19, 54, -55, -22, -117, -103, -36, -26, 37, -41, -112, -17, -28, 15, -11, 6, -58, 3, -39, -74, -58, -60, -22, 25, 0, -24, -99, -22, 28, -58, -71, 35, 29, -9, 16, -20, -34, -45, 31, 77, -94, -70, 19, -11, 112, -26, -11, -39, -19, -58, 57, -41, 41, -93, -35, 39, 22, -38, 80, -33, -91, 13, -7, 5, 11, 23, 0, -43, 127, 27, -38, 18, 12, 127, 11, 13, -88, 18, 47, -19, -17, 15, -125, -34, -14, 32, 15, 59, 126, -36, 39, 16, -124, -85, 14, 5, -5, 32, 50, 114, 54, -82, -26, -30, 31, 32, 54, 3, 4, -1, 24, 27, 0, 100, 89, -4, -16, 18, 0, 22, -35, 35, 10, -6, -79, 6, 17, 26, 0, 13, 42, 1, -21, 49, -67, -110, -7, -25, -8, -30, 57, 17, 5, 50, -7, 62, 14, 49, 9, 3, -1, 8, 41, -11, 16, -23, -23, 31, -12, 44, -127, 27, -35, 6, -126, -55, 0, -4, -14, -126, -123, 26, -86, 11, 40, -4, 82, -105, -44, 23, 38, -119, 23, 8, -95, -48, 6, 81, 14, 113, -32, -5, -48, 105, -59, -30, 55, -126, -24, -30, 11, 0, -24, 50, -87, 14, -21, -55, -90, -27, -126, 10, 2, -7, -10, -24, 14, -19, 10, -14, 12, 3, 14, 20, 29, -50, -10, -28, 6, -67, -107, 35, 63, 84, 56, 37, -109, 36, -2, 77, -34, -48, 87, 7, 21, 66, -18, 112, 49, -59, -5, -99, 27, 33, -16, 18, -35, 36, -39, -124, -36, -56, -64, -50, 8, 88, -102, 38, 57, -68, 35, 127, -45, -6, -36, -17, -2, -111, -22, -124, -38, 44, -28, -75, -43, 58, -21, -29, -110, 46, -107, -83, 121, 46, -14, -50, -83, -73, 120, 7, -41, 0, 13, 31, 2, 43, -63, 39, -68, -110, 41, -88, 10, -17, -23, 57, 79, -43, -15, 45, 33, -73, -56, -63, -32, 83, -32, -16, -45, 55, 59, 19, 80, 3, -11, -110, -29, 115, 85, -29, 125, 3, -25, -9, -68, 126, -43, -19, 16, -28, 60, 18, -3, 28, -21, 77, 8, 45, 72, -29, 32, -1, -27, 112, 4, 69, 30, -26, 55, 44, 13, 35, 40, -41, 5, -74, 38, -71, 30, 74, 11, 54, -25, -34, 54, 87, 34, 8, 20, -2, 13, 2, 10, 46, 40, 95, 33, 2, 6, -55, -36, 9, 49, 40, -52, -21, 108, 10, 32, 14, -13, 40, 6, 114, 63, 16, 62, -31, 57, -18, 6, 6, 72, 9, 4, 38, 25, 49, -21, 66, -7, 11, -12, -23, 81, -48, 51, 125, -14, 80, 9, -19, 39, 49, 92, 9, -13, 64, 43, 56, 98, 0, 7, -67, 15, 118, 63, -48, -46, -73, -19, -4, 88, -7, 3, 1, -8, 82, 29, 35, -31, 30, 30, -23, -9, 57, -51, 71, 33, -37, 76, 11, -69, 42, 117, -27, -34, -15, -13, -56, -90, -50, 82, 104, 98, -33, 10, 37, -69, 2, 7, 23, 10, 99, -66, -12, -54, -54, 8, -36, 4, -33, -30, 9, -72, 26, -53, 35, -42, 27, 18, -36, 41, -35, -22, -14, -6, 22, -69, -111, -10, -12, 55, 47, -54, -72, -21, 28, 13, 29, -43, 33, -62, -6, -20, 29, -17, 31, -92, -9, 36, -28, -49, -25, -121, -91, 27, -31, -17, 45, -80, -37, -16, -34, 17, 28, -48, 68, -51, 30, -23, 8, 17, -16, 23, -25, -9, 114, -21, -18, -122, -81, -17, -28, -42, -86, -107, -79, -60, 7, -35, 15, 44, 4, 38, -124, -37, -84, 31, -8, -23, 10, -76, 8, 44, -123, -50, 45, -47, 59, 34, -1, -9, 24, -65, 41, -73, 9, 94, 5, 53, 20, -9, 28, 7, -16, 68, -24, 6, -5, -35, -38, 43, -100, 29, 13, 35, 41, -59, -7, 28, -24, 38, 94, -85, -85, 97, -125, 78, 46, 90, 70, -77, 47, -12, 2, -97, 24, 88, -18, 14, 32, 97, 65, -22, 27, 63, 25, 11, -13, 52, 43, 65, 32, -9, 63, -13, -93, -61, -33, 30, 66, -5, 100, 12, 21, -7, -62, -41, 8, -26, 31, 36, 54, 6, 52, 106, -82, 38, 27, 26, 26, 26, 54, 19, 43, 6, 29, 125, 93, -49, -6, 127, 33, -10, 26, 90, 75, 0, 106, -40, 3, 43, 52, 52, 48, -58, 34, 0, 58, 38, 44, 57, 31, 91, -1, 80, -72, -45, -39, 25, -75, -52, 12, 30, 47, 2, -15, -36, 67, 89, 36, 21, -22, 25, 18, 16, -25, 7, 90, 10, 17, 18, -60, -9, 37, 84, 59, 2, 16, -27, -77, -1, 43, -31, 23, -46, -34, 127, 117, 127, 82, 27, 18, -7, 46, -71, 87, 35, 46, -85, -60, -2, 11, -72, 32, -56, -105, -77, 51, 53, -46, 21, -42, 17, -12, -69, 19, 7, 58, -43, -104, -68, 5, -3, -29, 27, -126, 88, 0, 127, -118, 52, 57, -10, -33, 41, 12, -28, 5, -5, -57, 23, 21, -18, 34, -48, 28, -125, 120, -59, 25, 108, 71, -33, 80, 38, -46, -12, 46, 6, -68, -44, 116, 106, 20, 93, -127, -56, 124, -105, -96, 122, 34, -57, -27, -67, 29, -124, -90, 120, -88, 29, -118, 8, 33, -90, -64, 6, 43, -45, 14, 127, -47, 40, -26, -79, -81, -3, 2, -51, -4, 12, 23, 66, 37, -118, -7, 7, 100, 13, 8, 85, -85, -92, -123, -111, -124, -2, 15, 45, -57, -58, 10, 82, -24, 46, 30, 127, 80, 41, -9, -64, 33, -7, -4, 10, -21, 44, 15, -22, 26, 59, 31, 28, -20, 18, 81, -50, 0, -69, 43, -18, -23, -85, -28, 86, -62, 35, 20, 106, -10, -74, 97, -17, -68, -40, -24, -78, 4, -116, -56, -86, 78, 34, -94, 49, 5, -97, -94, 62, 23, -13, -83, 53, 10, -12, 54, -27, -8, -16, 49, -38, 20, -43, 107, 9, -64, 22, 18, -53, 10, -7, -57, 33, 3, -127, 59, 7, 7, -57, 49, 14, 7, 29, -22, -82, 86, -63, -1, -10, 0, 29, -25, -72, -69, -51, -124, 20, 49, -32, 35, 11, 4, 29, -109, -44, -67, 51, -45, 120, 7, -51, 96, 11, -1, 12, 45, -40, -50, -46, 8, 49, -9, 10, -37, 69, 50, -45, 22, -12, -38, -19, 38, -13, 7, 82, -112, -16, -31, -69, 72, 0, -58, 31, -8, 110, 20, -118, 77, -27, -61, 40, -18, -32, -55, 33, -39, 25, -49, 16, 0, -9, 9, 7, 48, 63, 99, 41, -2, -30, -32, 35, -34, 5, -71, -45, -50, 10, -13, -58, -24, -31, 48, 13, 17, 44, 3, -7, 44, 63, 120, -55, 99, 2, 68, 9, -5, -122, 61, 29, 27, 3, 37, -56, -3, -43, -11, 53, 10, 54, -66, 54, 34, 39, 2, 29, -80, 55, 13, 29, -55, -6, 124, 2, -39, 29, -126, -44, 25, -46, 39, 88, -55, 126, 10, 97, 83, 48, 25, -111, -41, 70, 4, -88, 33, -34, -29, 28, 103, 101, -50, 13, 79, 13, -64, -10, 6, -37, 4, 37, -11, -10, -6, -11, -32, 56, 45, -18, -10, -87, -100, -22, -38, -79, 23, -118, 14, 27, -22, 14, 32, -34, 16, -78, -66, 4, 16, -62, -20, -18, -23, 57, -4, 10, 62, -39, 37, 71, -1, -77, 4, -128, -69, -70, -117, 104, 52, 21, -21, -16, 6, 17, 5, 2, 64, 72, 16, -92, -73, -109, 23, 2, -38, 9, -111, -10, 4, -82, 18, 100, 29, 47, -19, 100, -94, 21, 106, 68, -3, -112, 58, 13, 47, 55, -119, 7, -11, 102, -61, -30, 85, -34, -73, 48, -116, -31, 49, 17, -1, -37, -30, 68, -120, -66, -96, 126, 65, 69, 104, -19, -88, -73, 30, 89, -75, 0, 29, 103, -81, -56, -68, -58, 26, 8, 8, 40, -8, -3, -33, 38, -15, -13, 125, 13, 24, -25, -17, 25, -6, -43, 6, -14, -47, -73, -67, -83, 25, 19, 32, -97, -15, 15, -4, 126, -46, -6, 42, 32, 48, 13, -55, -6, -33, 12, -81, -56, 85, 100, -48, 39, -25, -98, -2, 47, 108, 87, 121, 32, -114, -34, -13, 12, 97, -47, 1, -10, 13, -115, -23, -30, -15, -85, 15, 23, -15, 82, -16, -8, 4, -31, 9, 102, 105, 2, -33, -10, -63, -89, 51, 75, -12, 0, 28, 100, -78, 95, 47, -90, 74, 113, -19, 54, -58, -21, 20, 116, 29, -17, 55, -62, 46, 27, 13, 37, -4, -123, -118, -68, 33, -52, -1, -108, 62, -46, 0, 21, 13, -35, 77, 23, -12, -51, 50, -33, 113, -65, -104, 18, -26, -49, -58, -3, -29, -19, -59, -45, -45, -3, -61, -12, 120, -39, 54, -10, 74, -61, -57, -13, -43, 18, -6, 6, -34, -18, 28, -54, 16, 36, 65, -57, -3, -22, 71, -40, -13, -110, -9, -52, 35, -85, -19, 10, -5, 1, 3, -34, -122, -36, -28, 26, 2, 45, 36, -76, -105, 123, -77, 3, 26, 83, -16, 17, 7, 16, 37, -46, -67, -40, 33, -52, -14, -11, -11, -53, -63, 28, -6, 35, 53, 62, 71, 47, 70, 19, 4, 23, -70, -65, -33, -37, -19, -38, -125, 108, 35, -36, 8, -28, 17, 4, -73, 19, 4, 5, -52, 5, 44, -25, 14, 13, 27, -127, -69, -94, -62, -22, -26, 86, -37, -25, 51, 29, 7, 15, 47, 105, 49, -12, -44, 3, -108, 23, 60, -11, -95, 20, 37, -15, -68, -44, 127, 17, -19, -55, 44, 26, -14, 22, 36, -84, 23, 10, -46, 68, -9, 121, -7, -12, 29, -11, 61, 2, -14, 28, -30, -102, 23, -105, 0, -35, 18, 8, 15, -4, 11, 33, -26, -89, 11, -14, -5, -112, -8, -28, -43, 34, -10, -35, -30, -37, -57, 14, 25, 45, -77, 28, 4, -50, -4, 87, -24, -97, 14, -36, 53, 31, 18, -37, 16, -51, 11, 41, -87, -53, -98, 1, 37, -30, -53, -29, 33, -4, -40, -67, -13, -52, -56, 8, 60, 35, -25, 44, 2, -6, -1, -31, -27, -41, -26, 8, -43, -2, -3, 1, 24, -31, -6, 9, -126, 2, -48, -33, 48, 6, 3, 32, 29, -50, 28, -31, -17, 27, 41, -122, -90, -41, 9, 86, -22, -89, 20, -61, -33, -21, 62, 41, -86, 3, -42, 14, 25, 48, -125, 9, 25, -2, 9, -66, -11, -98, 2, -65, -4, -14, 6, -2, -66, -83, 38, -22, -13, -21, -8, 41, -125, -24, -43, -100, 72, -52, -43, -4, -1, -54, -59, 11, 96, -20, 48, 20, 60, 13, -15, 57, -30, 11, -50, 121, -116, -31, 19, -32, -4, 9, -111, 12, -84, -106, -54, -59, -67, -24, 10, 22, -25, -12, 16, -123, 15, 7, -8, 14, -21, -45, 63, 47, 3, -14, 6, 100, 86, 40, 39, -23, -9, -127, 24, 20, 15, 41, 69, 13, 2, -36, 25, -18, 11, 23, 27, 51, -74, 8, -69, 12, 61, 74, -14, 34, -7, 14, 1, -5, 2, -28, 46, 63, 56, 6, -42, 34, 81, 18, -70, 6, 20, -26, 108, 11, -31, -1, -46, -29, -38, 22, -9, -33, 43, -67, 71, -20, 30, -114, 62, -1, 97, -40, 23, -99, 5, 11, -38, -55, 70, 9, -48, 9, 54, 23, -24, -48, -120, 67, 27, -49, -55, -11, 88, -36, -4, -10, 80, 14, -65, -2, -72, -46, -91, 99, -23, -78, -39, -84, -11, -104, 27, -73, -12, 26, -1, -103, -10, 2, 69, 43, 105, 19, -82, -45, 33, -26, 41, -38, 119, 16, -62, -34, 10, -10, 20, 38, 87, -67, -26, 91, 30, 113, -11, -28, -48, -93, -120, 43, -88, 71, -80, 7, -21, -1, 17, 50, -26, 55, 125, -35, -40, 0, -44, -15, 33, 5, -83, 7, 64, -49, 19, 56, 32, -25, -27, -15, -5, -16, -19, 66, 9, 114, -126, 12, -47, 15, 43, 18, 28, 52, 34, -50, 11, -11, -29, -43, -14, -84, -39, -25, -75, -101, 111, 21, 33, -44, 90, 14, -36, 31, 29, -31, -17, 22, 17, 48, -93, 30, 42, 30, -86, -79, -12, -98, 49, 68, -53, -69, 53, 124, -29, 65, -89, -35, -1, 37, -5, -111, -38, -76, -28, 6, 24, 47, -61, 19, 12, 23, -49, -18, -77, 18, 33, 11, -17, -35, -16, 78, -32, 48, 62, -69, -78, -18, 72, -122, -29, 3, 11, 6, -17, 3, -74, 51, -10, 29, 21, 46, -31, 49, -1, 22, -69, 8, -2, -74, -29, 29, 25, -29, 13, 20, 37, 9, 1, 16, 10, -20, -13, -13, -24, 37, -11, 42, 35, 36, -12, 24, -33, 43, 65, 64, 25, 23, 9, 27, -124, 1, 92, 16, -4, 23, -5, 17, 5, 42, 32, 12, 53, -3, 41, 1, 37, 32, -11, 23, 37, 80, 21, 127, 29, -12, -102, 127, -21, 9, -9, 33, 41, 16, -4, 33, 57, 29, -55, -60, 11, -33, -25, -26, 35, -2, 116, -6, -52, -31, -3, 14, -63, 13, 73, 76, 25, 5, 29, 8, 17, 50, -27, 88, -96, -68, -67, 5, -56, 28, 25, -88, -11, -19, 35, -78, 27, 11, -37, -21, 2, -11, -43, 78, -93, 34, 27, 5, -21, 34, -48, -11, 86, 4, 20, -18, -6, 39, 15, 14, 40, 36, -40, 46, 127, 12, 3, 1, -14, 33, 40, -3, 16, -58, 71, -38, -1, -103, -22, -16, 35, 10, 127, 59, -38, -67, -29, -126, 58, -11, -4, 14, -85, 22, 75, 10, 4, 19, 78, 32, -31, -33, 127, 7, 4, 48, -20, 13, 94, 45, -10, -9, 7, -55, -6, -43, 23, -58, 76, -1, 4, 21, 7, 65, -20, 70, -7, 4, 38, 104, 22, -44, 7, -8, 12, 9, 65, 31, -6, -1, 29, 36, -126, -45, -25, 32, 45, 3, 7, -28, 4, 29, -80, -34, -64, -3, 0, -63, -65, -11, -6, 38, -119, 53, 17, -24, 19, 4, -53, 85, 27, 26, 45, -51, 5, -126, 17, 32, 22, -52, 2, 7, 22, 60, 74, 74, 38, 53, 13, 4, 44, 32, 49, -46, 95, 70, 68, -50, -128, -10, -79, 125, 26, 37, 24, -51, -12, 52, 27, 13, -16, -4, -2, 16, 2, 33, 10, -12, -5, 25, -40, 5, -31, 31, 2, 60, -93, -23, -118, 34, 3, 18, 12, 11, -38, -7, -35, 6, 18, -37, -99, -68, 5, -103, -117, -108, -114, 43, -115, -72, 46, 2, 50, 4, 37, 8, -51, 10, -68, -29, 18, -63, -80, 34, 36, -49, -110, -28, 3, -40, -125, -9, 74, 10, 20, -25, 37, 74, -29, -25, 66, -34, -48, -27, -35, 0, 30, -26, -121, 6, -123, 14, 11, -49, -13, -102, 18, -23, -98, -1, -8, 67, 52, 8, -27, 33, -57, 7, -126, -13, -47, 12, 22, -109, -68, -34, -94, -122, 20, -63, -18, 8, -124, -61, -32, -40, 117, -12, -7, -36, 16, 89, -24, 71, -46, -122, 12, -101, -38, -70, -57, -39, -116, -60, -125, -35, 37, -114, -14, -127, -77, 2, -50, 115, 9, -79, -22, -74, -13, 103, -79, 18, 11, -123, -26, -4, -1, 8, -63, 124, 36, -32, 41, -99, -17, -18, -124, 7, 122, -127, -23, 20, 41, -19, 106, -41, 7, -125, -21, -126, -24, -26, -8, 26, -126, 125, -34, 33, 111, 46, 50, -20, -79, 6, -127, 97, -13, 52, -32, -43, 2, 18, 17, -126, 35, 8, 67, -123, -127, -103, 3, -71, -32, 29, 6, 22, -110, -68, -6, -9, -44, 58, -121, -127, -13, -50, -54, 22, -25, -78, -7, 39, 104, -108, -94, -127, -36, 7, 5, 3, -124, -17, 18, 42, 1, -22, 19, 55, -99, -125, 38, -19, -38, 17, 5, -23, 7, 87, -125, -127, 7, 7, -121, 16, -60, -9, 7, 33, 18, 30, -62, 19, -125, -112, -2, -14, -25, 60, 1, -30, -124, -22, -65, -125, 64, 79, -19, 9, -26, -127, -56, -84, 122, 63, -2, -16, 26, 6, 35, -33, -21, -84, -44, 72, -55, 52, -34, 66, 32, 17, -37, -7, -41, 113, 1, -20, -58, -59, 68, 29, -125, -56, 42, -92, 3, -6, 19, -24, -11, 61, 39, 48, 30, -3, -51, 15, 2, 11, -17, 3, 52, -7, 51, -11, 62, 30, 21, 71, 68, -27, 19, -32, -11, 40, -1, 11, 13, -10, 65, -39, 119, -114, 43, 19, -74, 62, -45, -54, 37, -28, -120, 26, 63, 26, 58, 9, 20, -5, -12, 14, -5, 126, 16, 72, 40, -44, 52, -24, -7, 46, -114, 101, 0, 15, 37, -112, 37, -46, -76, 6, 70, -25, -24, 75, -43, -29, 76, -63, 93, 33, -24, 2, 2, 72, -5, 57, 73, -31, -36, -103, 34, 10, -25, 36, 20, -10, -36, 6, -83, -3, 13, -18, -73, 66, 46, -31, -51, -41, -32, -17, 45, 41, -14, 30, -121, 10, -39, -66, 15, 10, -77, -2, 43, 11, 28, 3, -77, 52, -26, 47, -75, 73, -4, -110, -111, -20, -66, 27, -8, 17, -3, 66, 22, 54, 21, 0, 68, -126, 85, -27, 82, 11, -25, 2, -109, -60, -11, 35, 12, 3, 77, -43, -3, -68, -30, -53, 21, -21, -75, -8, -54, -11, -53, -16, -88, -7, -19, 14, 52, 12, 27, 18, -103, -128, 7, 1, -33, -7, 15, 32, -1, 90, 8, 41, 106, 18, 2, -11, -41, -93, 10, -18, -48, -12, 54, 10, -4, 21, 72, -18, -125, 10, 54, 0, -5, -66, -17, 57, -126, -4, 29, 19, -5, 80, -34, 13, -125, 78, -81, -125, 76, 26, 3, 25, 22, 3, -5, -18, 46, 39, 84, -18, 38, -110, 58, -128, 72, 39, 12, 5, 16, -47, 23, -58, -40, 13, 59, -32, 24, 3, 7, 83, -9, -67, -1, -2, 9, 16, -55, 69, 50, 26, 20, -47, 3, 83, -77, -21, -17, -7, 30, -27, 14, 71, -8, 47, 99, -66, -12, -93, -59, 20, -43, -24, -93, -19, 64, 4, -58, 5, -42, 21, -122, -41, 19, 2, -33, 126, -15, 3, 88, 3, 77, 48, 61, -8, 78, 7, -47, 37, -63, 57, 36, -31, -9, 26, -46, 17, 55, 10, 47, -46, 6, -106, -123, 5, -97, 63, 40, 36, 23, 2, -15, 17, -65, 51, 12, -18, 29, -22, -6, 46, 10, -50, 29, -67, 58, 82, -20, -95, 15, -41, 57, 29, 0, 7, 29, 27, -90, -49, 49, 29, 1, 38, -13, 3, -32, -32, -46, 32, -38, 9, 41, -7, -55, 87, 93, -18, 55, 11, -21, -104, -5, 45, 7, 62, 7, 35, 11, -30, -33, -10, -30, -13, 14, -9, 72, 127, -37, -16, 32, -57, -37, -12, 5, 58, -66, 0, 59, 18, 116, 31, -53, -28, -8, -5, -74, 67, 39, -62, -77, 48, 25, -12, -5, -8, -6, -36, 8, -53, -63, -22, -18, -5, -36, 25, 26, -89, -106, -84, -40, -45, -77, 47, -97, -64, -30, -51, -23, -75, 9, -31, 6, 33, -32, 31, -126, 13, 25, 4, -102, 40, 45, 47, 24, 71, -55, 126, -125, -27, 9, -127, -93, 29, -23, 20, 24, -123, -58, -20, -10, 5, 2, -67, -14, -23, -88, 113, 16, -81, 20, -14, 38, 124, -11, -9, 127, -127, 32, -36, 38, 93, 9, 14, 16, 28, 28, 97, -28, -58, -14, 88, -128, 0, -121, 23, -2, -125, 0, 28, -127, -42, -87, -12, -33, -21, -30, 125, 7, -30, -53, 46, -56, -121, 34, -27, -64, -73, 5, 70, 8, -18, 7, -17, -89, -47, -75, -30, -9, 7, -10, -55, 50, -63, 78, -71, 45, -1, 15, -11, -35, -10, -55, -35, -41, 28, -75, 127, 119, -9, -84, -74, 47, -23, -10, -40, 29, -59, -20, 124, -124, -118, 9, 1, -22, -21, 127, -35, -55, 110, -113, 79, -4, 41, 4, 25, 22, 56, -69, 14, -31, -108, -21, 5, 14, -82, 6, -1, 21, -92, -52, -48, 19, 37, -75, -3, 63, 55, -28, -51, 8, -54, 55, 15, 46, 50, 35, -3, -9, -27, 2, -1, 66, 56, 18, -16, 12, -19, 61, -5, -26, -37, 63, 58, 59, -62, -11, -127, 6, 7, 40, 114, 18, 7, 1, -123, 17, -20, -76, 113, 122, 6, -56, -88, 34, 5, -21, -101, -71, 77, -41, -106, 67, 31, -128, 7, 11, -126, 31, -58, 69, 16, -123, 44, -17, 61, 0, -8, -11, 28, 28, -37, -94, 28, -10, 48, -34, -93, -11, 14, 7, -92, -78, -45, 22, 67, 14, 113, 5, 23, 40, 27, 31, 57, -82, -1, -44, -29, 24, -31, -70, -87, -100, 79, -122, -73, -46, 37, -68, -128, 65, -128, -126, 14, 85, -46, -61, 20, -16, 48, 35, 30, 52, -15, -12, -83, -89, -97, -60, -8, -36, -65, -56, -112, -128, 113, -56, 22, -57, -84, 14, -5, -26, 6, 2, 47, -1, 72, 19, 47, 31, 3, 0, -116, 24, 20, 64, 46, 28, 33, 126, -58, -9, -16, 61, -127, 17, -125, -80, -34, 57, -74, 21, 73, -37, -2, -32, 13, -34, 31, -28, -121, 25, -84, 48, -120, -107, 39, 87, 32, -104, -105, -119, 81, 23, -112, -90, 102, -11, -50, -15, 14, 55, 20, -31, -16, 6, -11, 39, -8, -4, -29, -31, 56, 47, 26, -7, 7, -25, -4, 13, -43, -42, -27, -13, -26, 47, -11, -18, 3, -2, 10, 10, -39, 12, 70, 108, 88, -10, -45, -69, 23, 79, -30, 12, 24, 29, 80, -32, -85, -21, 10, -20, 39, 74, -39, -54, -43, -18, -37, 14, 59, 55, 44, 44, 30, 30, 86, -96, 33, -7, 2, -73, 35, -12, -36, 13, -29, 28, 31, 19, 75, 42, 79, -12, -30, 124, 11, -41, 31, 0, 9, -47, 74, 25, 16, 19, -16, 63, 21, -77, -25, -43, 60, 36, 13, 38, 53, 22, -45, 53, 39, 15, 9, -43, -88, 42, -67, -2, 34, -62, 16, 26, -4, 9, -57, 54, 17, 10, 3, 60, 23, 15, 72, 37, 0, 2, 12, 74, -91, -40, 8, 5, 69, -37, 0, 18, 21, 33, 33, 77, 20, 31, 52, -9, -33, -13, -46, 17, -26, 33, 22, 10, -49, -27, 8, 19, 17, -54, 27, 7, -29, 5, 25, -19, 98, 11, 37, -112, 125, 63, 17, -37, -10, -75, 31, 6, -24, -22, 2, 49, 11, 39, -87, 53, -65, 0, -25, -93, -29, -32, -33, 2, 32, -34, 13, 51, -9, -46, 27, -53, 7, 16, -40, 8, -121, -58, -58, -12, 91, 8, -15, -18, 51, 4, 23, 36, -125, -24, -10, -55, 13, -36, -18, 40, 56, 26, 24, -8, -64, -106, -73, 20, 23, 17, -23, 110, -12, -30, -62, -1, 21, 34, -62, 5, 66, -26, -78, -7, -3, -7, -39, 6, -43, 59, 68, 60, -10, -78, -53, -57, 60, -83, -112, 25, 16, 12, -6, 7, 13, -29, 107, -19, 44, -5, 46, -124, 67, -80, -30, 49, -1, 5, 20, 19, 34, -3, 2, -18, -19, 123, 14, -67, -19, 44, -10, 24, -106, 2, 26, 6, 67, -16, -56, -89, -128, 96, 14, 38, -19, -81, 52, 32, 0, 60, -12, 60, -5, 89, -23, -30, 2, -39, -7, -63, 73, 17, -40, 63, 22, -24, -18, 37, 8, 33, 7, -30, -123, -19, -1, -2, 38, 55, -86, -44, -7, 28, -19, 1, -19, 36, 6, 48, -11, 4, 81, -36, 80, -37, -12, -79, -19, 15, 8, -8, -14, 59, 30, -42, 5, 14, -92, -118, -25, -43, 20, 9, 34, -21, 93, -32, -45, 58, -121, -49, 126, -1, 52, -53, 15, -19, 27, -68, -23, 45, -9, 39, 57, 5, -117, -34, 10, 7, -61, -18, 10, -44, 21, -77, -76, 103, -25, -43, -36, 86, 44, 47, 27, 23, 0, -77, -46, -12, 63, -111, -17, -16, 34, -46, -17, 14, 98, 15, 126, -95, -45, 0, -67, -78, -5, -24, -9, 2, -11, -6, -96, 73, -55, -19, -32, -7, -69, 0, 23, -24, 58, -19, -6, 101, -22, 24, -21, 57, -51, 100, -7, -4, -11, -128, -13, 28, 28, 18, -56, 36, -7, -89, -63, -8, 34, 52, -14, 23, 5, -85, -10, 47, 50, 8, -126, 78, 43, -9, 36, 1, 27, 8, -114, -3, -72, -31, 34, 12, 54, -30, 20, 101, 1, 78, -121, 34, -64, 14, -106, -42, -33, 36, -5, 15, 40, -25, 56, -21, -42, -53, 29, 25, -51, -108, 33, -8, -41, 51, -60, -60, 8, -45, -92, 0, -127, -39, -53, -7, 17, -90, -15, -34, -126, 81, -127, 49, 1, 96, 8, 59, 7, -58, -125, 121, 63, 49, 7, 42, 9, 23, -11, -45, -125, 17, -32, 1, -22, -5, 78, 18, -40, -45, 19, -3, 85, 62, 24, -39, 4, 24, 22, -7, 2, 117, -81, -15, -31, -38, 50, 5, -41, 40, 21, 29, -56, -62, 8, 6, 32, -6, -19, 71, -10, -12, 28, 25, 10, -92, 23, -8, -76, 26, 33, 86, -23, -22, -56, -108, 15, 68, 123, -12, 59, 124, 46, 40, 124, 24, 35, 17, -29, 29, 77, 2, 35, -48, -23, 3, -43, 102, 69, 47, 0, -93, 44, 13, -15, -8, 10, -29, 28, -60, -12, 48, -26, 47, 22, 55, -80, -64, -29, -11, -25, -41, 68, -52, -10, -42, 46, -53, 46, 27, -38, 90, -100, -34, -80, -30, -124, 8, -8, 2, -6, 41, -64, 19, -37, 5, -52, -55, -18, -5, -39, -96, -29, 5, 125, 2, 28, 16, 117, -14, 80, -69, -61, -55, -117, 99, -32, -39, 41, 35, 9, -83, 87, -86, -125, -36, 28, -126, 8, -77, 127, 12, -21, 65, -78, -11, 24, -45, -24, -94, 71, -50, 33, -25, -3, -40, -39, 12, -92, -122, 37, 120, -6, 52, -48, 12, -12, 65, -127, 78, -14, 15, -88, 38, -15, -34, 8, 31, -125, -18, -93, 30, -43, 3, 78, 18, 25, -29, -47, 25, 39, 7, -121, -13, -118, 24, -59, -17, 3, -6, 36, -37, -7, 20, -51, 54, -74, -19, -6, -51, 17, -125, 30, 15, -4, 88, 69, 5, 15, -58, -114, 54, 30, -73, 8, 9, -32, -44, 14, -3, -27, -20, 11, 10, 122, 85, 32, -48, 12, 40, 34, 13, -21, 99, 11, 70, -77, 5, 82, -37, 54, -89, -45, -126, -61, 12, -63, 8, 35, -7, 10, -51, 24, -25, -12, 10, -7, -35, 44, 84, -47, -80, 14, 93, 6, 11, 51, 60, 48, 30, 7, -71, 6, 10, 0, -10, -5, -52, -3, -48, 30, 30, 18, 70, -17, 43, 44, -126, 33, 120, 53, 47, -18, 22, 52, -35, 93, 47, -27, 85, 0, -17, 0, -13, 53, -2, 28, 65, 17, 23, 121, -5, 45, 50, 44, -4, 34, 7, 32, 76, 12, 35, 46, 30, 50, -35, 46, -42, 28, 8, -36, -32, 2, 41, -40, 1, 0, -4, 14, -41, 74, 88, 33, 17, 71, 40, -20, -17, 32, -27, -41, -48, 6, -56, 80, 42, -31, 33, 44, -1, -98, -23, -61, -15, -4, 67, -36, 67, -37, -66, 50, -126, -18, 24, -128, -55, -30, -12, -10, -9, -48, 45, -118, -11, -29, -19, 57, -9, 32, -23, 18, 126, 65, -11, 4, 2, 17, 14, 18, 22, 23, 31, 9, -15, -74, 34, -27, -20, 44, 125, -28, -19, -107, 11, -88, -14, -39, -8, 11, -74, -37, 22, 15, -50, 34, 14, 12, -24, -3, 107, 43, -8, -17, -42, 69, 31, 31, -30, 14, 17, -65, 100, -34, -4, -28, 28, -69, 90, 14, -18, -23, 27, -4, -27, 26, -76, -64, 9, -78, -36, -4, -101, -3, 47, 13, -122, 32, 7, -64, 30, -69, -50, -98, -12, -59, -26, 14, 26, -40, -126, 42, -51, 33, -26, -46, -32, -34, 17, -12, -89, -9, 32, -25, 15, 24, -3, -4, -18, -39, -24, 16, -43, -41, -52, 40, 2, -40, -14, -64, -3, 0, 18, 125, 42, 14, -35, 19, -101, -24, 15, 12, -12, 1, 7, -41, 9, 26, -14, 118, 19, -36, 32, -18, -43, -11, 22, 11, 26, -1, 2, -12, -39, -54, -5, 15, 32, -29, 55, -22, -78, -27, -44, -120, 1, -5, -67, 12, -13, -46, -81, -14, 64, -16, -70, -24, -23, 55, -3, 31, -31, 12, 26, 33, 12, 16, 46, 71, -27, 64, 6, 24, 45, -69, -33, 27, 41, 16, -34, 23, 7, -11, 1, -12, 126, 51, -18, 15, -75, 10, -66, 1, -7, -13, -42, -25, -37, -3, 16, -22, 63, 54, 37, -67, -42, 37, -81, -37, -9, -73, -39, -127, -15, 27, 127, -37, 40, -12, 2, -10, 5, -69, -16, 38, 24, 97, 116, -33, -17, 10, -58, 4, -67, 90, -45, 13, -126, 43, 22, -22, 49, -65, -46, -54, 2, -39, -62, -32, -15, -42, -105, -28, 68, 43, 9, -23, -26, -113, -104, -46, -67, -18, 3, 51, 8, -50, -2, -33, -15, -22, 54, 7, -63, -19, -128, 47, -93, 13, -13, 36, -98, 49, 20, -13, -9, 11, -44, -35, -106, -37, -38, -32, -47, 42, 24, -45, -115, 79, 25, -5, 16, 36, -87, -45, 73, -4, -53, -66, -11, 15, 0, 52, -55, -44, 37, -3, 23, -35, 13, -50, 22, 9, -5, -75, -46, 23, -20, 34, 17, 35, 30, -5, 9, -106, 2, -39, 46, 1, 0, 30, -51, -16, -125, -83, -4, -3, -127, -10, 90, 46, -19, 33, -48, -14, 62, -54, -104, 0, 7, -13, -5, 7, 14, -70, 27, 27, -4, 1, -84, -45, 30, -6, -71, 14, 31, -110, 44, 37, 35, 31, -56, -122, -60, 6, -1, -28, -89, 24, 30, 13, -2, -28, -108, -40, -12, -126, -126, 24, -94, 49, 46, -20, -89, -123, 62, 23, -125, -67, -20, 19, 38, 37, 54, 59, 92, -127, 107, -62, 90, -9, 24, 8, -8, -40, -32, -33, -23, -78, 0, -76, 28, -27, 12, 24, -110, -34, 105, 38, 3, 36, -51, -28, -8, 38, 15, -3, 117, 45, -44, 45, 104, 94, 11, -53, 64, 41, 7, -7, -8, -39, -44, 89, 69, 29, -54, -55, -16, 15, -54, -5, -14, 12, -67, 12, 20, -47, -12, 42, -35, 38, 25, 11, 21, -11, -21, -20, -1, 6, -51, 9, -48, -53, 40, -41, -113, -42, 57, 22, 39, 61, -43, -2, 47, -29, -101, -58, 16, 21, 1, -29, -8, 21, -24, 4, -20, 23, -30, 0, 18, 125, 20, 63, 25, 21, 127, -21, -20, -55, -14, -98, 81, 3, 37, 58, -33, -36, -5, -13, -124, -43, 127, -11, -15, -48, 122, -111, -11, -15, 28, -42, 33, -127, 100, -72, -13, 127, -54, -3, 79, 2, -42, 38, 16, 8, -62, -19, 36, 19, 39, 78, -7, 121, -66, 11, -36, 47, 83, -69, -23, 34, -79, -62, 39, -56, 73, -40, -87, 89, -96, 68, 101, -65, 25, -32, 26, -8, -25, -61, -82, -9, -89, -28, -66, 126, 73, -15, -31, 36, 40, -38, -9, 9, 35, 16, 16, -44, 38, -73, -14, -5, -26, 92, -114, 63, 32, 22, 79, -30, -11, 77, 109, 66, 95, 27, -22, 14, -97, -22, -51, 15, 41, -81, -10, 0, -44, 12, 58, -44, 23, -32, 5, 106, 10, -3, -43, -13, -118, 57, -51, -88, 21, -12, 17, -81, 4, -20, 31, 18, -24, -2, -121, 20, -5, 66, 20, 62, 4, -45, 14, 61, -36, -27, -26, -14, 20, 123, 35, -9, -31, -96, 11, -55, -60, -52, -117, 32, -127, -45, -36, -10, 12, 87, -101, -38, -30, -106, -50, -33, -5, 1, -9, -7, 0, -32, 15, -12, -10, -25, 110, 5, -19, 1, -57, 83, 93, 8, 19, -3, 29, 5, 49, 26, 7, -7, 40, -12, -24, 63, 30, 11, -49, 2, 24, -7, 21, -34, 31, 12, 25, 39, 9, 46, 39, 21, 11, -28, 20, -5, 8, 10, 6, -28, 56, 8, -2, -7, -3, 11, 3, -5, -5, -9, -41, 15, 18, -24, 9, 10, 0, -16, 30, -32, 23, 17, 117, 43, -52, 1, 12, 11, 9, -10, 0, 11, -5, -20, 3, -33, 0, 19, 101, 69, 34, 0, 29, 11, -4, 126, 31, -95, -12, -27, -80, -38, -85, -96, -7, 68, -126, 16, 84, -8, -47, 33, -35, 54, -23, -12, 57, -40, -23, 43, 71, 40, 49, -40, 37, 15, -6, -46, -60, 25, -34, 49, -3, 29, 10, 38, -7, 21, 94, -6, 11, -16, 71, 3, -13, 32, -6, 93, -103, 56, 49, -7, -2, -22, 18, -36, 8, 49, 0, 21, -48, -3, 55, 94, -85, -24, -26, -22, -81, -44, 51, 6, 3, -24, 86, 83, -14, 68, -40, -19, 41, 2, 51, 37, -100, 59, 98, 61, 6, 37, -59, -13, 10, 126, 49, 29, -18, -123, -128, -46, 46, -125, -126, -1, 88, -101, -50, 70, 11, 41, -127, -16, -79, 81, -38, 5, -125, -8, 47, 51, 66, -82, 47, 91, 28, 57, -15, 86, -94, -43, -47, 32, -8, -63, 82, 19, -73, -25, 47, 55, 46, 45, -93, -82, -123, 36, -12, 16, 14, -106, 25, 26, -36, -57, -15, -10, -67, 123, 93, -33, 58, -5, -80, 53, -94, -53, -22, 58, -11, -1, 67, -36, 125, 40, 11, 62, 79, -123, 33, -121, 2, -114, 6, 50, -17, 26, -35, 19, -6, -85, 28, -1, -21, 17, 45, 125, 71, -29, -59, 16, 41, -63, 13, 7, 65, -36, -52, -51, 68, -44, 30, 24, -3, -4, -46, 63, 19, 58, -78, 34, 8, 94, 69, -29, -51, -1, 28, -99, 39, 19, -14, -4, -92, 38, -5, -21, 104, 13, 13, -81, -29, 29, -54, -83, 91, -16, -2, 15, 0, -5, 33, 9, 35, 4, 13, 21, -113, 0, -21, 25, -26, -89, 96, 34, -7, 27, -12, -27, 16, -33, 7, -6, -1, 24, 43, 33, 9, 45, 87, 25, 54, 40, -53, -122, -42, 55, 98, 23, 83, -5, 5, 73, -65, -110, 29, 12, -127, -3, 63, -64, 0, 14, 16, 36, 38, -44, 37, -84, -74, -7, -5, -41, -95, -119, 14, 66, -18, 120, -17, -40, -58, 2, 44, -26, 86, -11, 40, 59, 52, -20, 24, 11, -18, -68, -9, -126, -7, 62, 120, 79, 31, 69, -20, -53, 42, 86, 32, -52, 12, 32, 64, 74, -39, -66, 67, -4, 35, -51, -50, 50, 8, 69, -112, 104, 51, 53, 15, 1, 55, 88, 34, -100, -21, -25, -117, -91, -4, -125, -1, 1, 48, -29, -13, -20, 7, 29, -61, -24, 26, 9, 73, -23, -128, -61, -79, -17, -21, 17, -7, -23, -70, -18, 97, -30, 15, -28, 56, -41, -126, 21, 27, 122, -13, 41, -86, -109, 12, 35, 46, -57, 2, -47, 1, 7, 63, -53, 98, 51, -50, -7, -10, -37, 8, 6, -110, 15, 42, 24, -34, 117, -4, 50, 14, 17, -37, 58, -46, 6, 115, -31, -113, -40, 104, -47, -5, 118, 19, 30, -78, -22, -126, 27, -3, 54, -63, -65, 21, -7, -45, -39, -10, -35, 2, -3, 53, 5, -119, -26, -66, -6, -46, 43, -66, -2, -20, -27, -10, 27, -34, 29, -21, -7, -103, 4, -26, -5, 17, 52, -128, -28, -13, -1, 52, -38, 67, -24, -41, -121, 65, 32, 84, -24, -112, 13, 106, -105, -9, -66, -18, -28, -52, 78, -58, -33, 2, -18, 17, -33, -21, -30, 93, -28, -116, 80, -84, -51, -21, -1, -15, -4, 24, -34, 50, -44, -54, 61, -79, -41, 15, -48, -125, -29, -84, 93, 17, 1, -123, 106, -123, -17, 84, 0, 126, -34, -30, -81, 61, -96, 13, 71, -40, -122, -19, 22, -89, -25, -119, 57, -5, -98, 112, -71, 95, -94, -59, 74, 103, -12, 39, -61, -8, -125, 15, 7, -69, -17, -119, -11, 69, -81, -17, 124, 43, 33, -127, -103, -88, 81, 56, -10, 1, -98, -97, -73, -71, -42, 17, 73, -33, -123, -46, -80, 9, 91, 126, -127, -21, -115, -110, 93, -126, -24, -53, -119, -103, -117, -9, -28, 39, -11, -59, -103, 0, 53, 1, 59, 27, -86, -88, 95, 24, 51, 114, -6, 81, 107, 70, -80, -95, -34, -24, 20, 18, 7, 31, -121, 72, -64, 101, 5, -28, -94, -121, 14, 19, 45, 23, -86, -34, -19, 5, -61, 73, -82, -11, 28, 10, 23, -46, 26, 108, 16, 5, -16, 32, -32, -81, 76, -18, -19, -44, 13, -53, -97, 37, 36, 21, -62, 9, 9, 82, -65, -92, -61, -128, 73, 33, -12, -126, -41, -3, 6, 63, -97, -127, -91, 31, -18, -3, 91, -65, 27, 21, 57, -43, -40, 99, -62, 22, -6, -51, 127, 82, -14, -114, -31, 39, 39, -88, -17, -24, -10, -22, -113, -36, 3, -67, -76, 47, 50, 85, -22, 22, 10, 60, -2, 34, 0, -25, 22, -52, 48, 79, 48, -3, 17, -27, -6, 6, -17, 125, -12, 65, 1, -12, 35, 30, 91, 14, 88, -13, 26, 36, -17, 20, 9, -23, 37, 112, 25, 31, 56, -7, 118, -78, 11, -13, 84, 41, 1, 46, 114, 123, 35, 40, 39, 18, 12, 116, -13, -13, -7, 64, -128, -22, 15, -27, 11, 53, -13, -31, 13, 51, 74, -21, -26, 81, -56, -4, 5, 24, -41, 20, 22, 18, -8, 70, 4, -14, -2, 17, 17, 71, -30, -128, 20, 20, 3, 40, -5, -35, 123, -23, 28, 21, -6, -34, -5, 41, -33, -18, 3, -5, -44, -46, 37, 37, 0, 14, 39, -69, 50, 18, -31, 39, 43, -51, 5, 6, 19, -21, 40, -9, -5, 41, 3, 76, 4, 10, -41, -49, -43, -47, -66, -74, 53, -77, 109, 51, 62, -19, 1, 33, 31, -18, -107, -39, -72, 20, 21, -32, -35, 42, -8, -2, 10, -2, 1, 31, 9, 69, 24, 55, -60, 11, -14, -11, -69, -63, 0, 107, 10, -61, 77, 57, 34, 38, 21, -55, -29, -126, 18, -54, -94, -61, -41, 0, 20, 45, -21, -2, -52, -47, 71, 12, 11, -11, 33, 117, 14, -64, -4, -112, -21, 27, -46, 16, 25, 41, 36, -35, 45, -2, -24, -35, 10, -4, 24, 18, 57, -126, 17, 21, -13, 31, -125, -1, -3, -8, -70, 22, -124, 1, -50, 75, 87, 60, 83, 27, -42, 21, 9, -3, -45, -40, -24, 8, -6, -11, -3, -126, -15, -8, -75, -80, -124, -70, 40, 48, 19, 29, -2, 25, -121, -23, 4, -12, 90, 49, -40, 20, -13, 3, -123, 10, -59, -21, -25, -60, -10, 56, -5, 8, 24, 18, 4, 15, 33, 77, 4, 1, 8, -126, 23, 27, 34, 3, 51, 66, -14, 50, 51, 108, -40, -2, -39, 10, 46, 60, 28, 5, 72, 11, -64, -82, 31, -52, -3, -29, 32, 63, -24, 44, 35, 8, -8, 25, -25, 6, 58, 41, 55, -24, -33, -7, -8, -16, -36, -59, 6, 56, -68, 32, 16, -14, 26, -19, 26, -41, -77, 41, 0, -20, -21, 15, -49, -27, 7, 34, 41, 17, 14, 20, 62, 95, 40, -4, 65, 28, -11, -28, 27, -43, 85, -12, 2, -11, -13, -5, 38, 4, -87, 126, 44, -12, 3, 30, -89, 124, 24, -16, 35, -30, -39, 0, -116, 122, 33, -8, -31, 80, -29, -12, -55, -17, 18, 58, 15, 34, -123, 19, 4, -51, 48, 7, -127, -89, 127, 39, -86, -19, 46, 127, -52, 68, 3, -7, 9, -126, -13, -49, -45, 8, -20, -126, 42, -72, 127, -15, -2, 42, -33, 53, -34, 10, -128, 13, -78, -60, -65, 52, -35, 36, 39, -30, 55, -64, -81, 32, 41, 38, -17, -53, -65, 95, -115, 22, -52, 10, 64, -60, -9, -45, -21, 24, -22, -25, -31, 64, 127, -47, -33, 10, 98, 62, 30, 17, 19, -46, 36, -67, -74, 75, -19, 56, 2, 11, 28, 127, -57, -52, -110, -44, -20, 106, -30, 49, 52, -1, 43, 38, -32, 41, -13, -2, -38, -12, -3, -17, -36, 42, -6, -22, -17, -74, -30, 95, 18, 23, 14, 17, -21, 34, 72, 24, 2, -37, -49, -36, -34, 3, -126, -65, -37, -24, -56, 14, 75, 28, 0, 41, -80, -13, -90, -33, 39, 31, -14, -1, 15, 19, 63, -9, 45, 3, -122, 48, -35, -38, 25, 22, 18, -27, 4, 1, -11, -43, -101, -24, -2, 13, 64, 42, -45, -20, -1, -6, 29, 0, 10, -5, 14, 98, -1, -18, 9, 44, -19, -24, -36, -12, -42, -31, -28, 125, -21, -17, -12, -12, 25, -21, 8, -6, 30, 39, -13, -24, 25, 36, 48, -12, 31, 53, -23, -57, -27, -53, -5, -18, 12, 1, -13, -28, 8, -48, -64, 25, -12, -27, 66, -28, 2, 12, -12, -8, -88, -16, -48, -61, 12, 77, 41, -50, 7, -18, 12, 1, 2, 25, 80, 6, -63, -50, 29, 127, 37, -30, -102, 35, 39, -7, -26, -27, -81, -4, -1, -7, -48, -28, 29, 37, 19, 49, -23, 19, -2, 15, -20, -7, -1, 45, 33, -54, -2, 26, 23, 26, -101, -45, -32, 39, -24, -18, -9, -7, 34, 75, 5, 15, 39, 19, 7, 34, 53, -13, -10, 11, 38, -29, -27, -1, -104, -55, -10, 27, -9, -2, 6, -14, 13, 29, -28, -21, 13, -1, 38, -25, 32, -31, -50, 52, -34, -19, -39, 12, -29, -110, 10, -74, 47, 60, -6, -2, 22, 4, -42, -55, 41, -66, 88, -15, 123, 26, -7, 20, 20, 28, 35, 69, 5, -64, -21, 36, 26, 78, 122, -6, 54, -44, 51, -7, 118, 60, 109, 12, -29, 36, 27, -50, 50, -37, 10, 56, -126, 107, 56, -8, 81, -101, 29, 21, -25, 15, 68, 81, -98, -28, -46, -61, 12, 87, 96, 2, 4, 57, -123, 25, 12, 41, -5, -32, 78, 123, 28, 59, 58, -85, 16, -13, 60, -115, -23, 50, 127, -83, 39, 94, -50, -96, -97, -17, 91, -28, 11, -127, -63, -25, -92, -106, 89, 78, -11, -27, -22, 8, 13, 26, 53, 25, 19, 93, 49, -21, -10, 0, 37, 59, -6, -34, -22, 13, 80, 35, 0, 30, 89, 64, -17, -25, 16, 73, -32, -47, 92, 31, -32, 82, 3, 44, -22, 3, 44, 1, 1, 10, 22, 13, 9, -18, 20, -2, -15, 41, -1, 33, 18, 22, 51, 6, -16, -41, 17, -5, -43, 78, 25, 45, 66, -15, 0, 14, 3, 51, -36, 24, -13, -7, -15, -4, -11, 28, 29, 11, -20, -3, 54, 14, -9, -127, 8, 12, 61, 9, 28, 55, 0, 9, 13, -61, 28, 40, 39, -49, -32, -20, 9, -16, 59, -15, -21, 5, -39, 28, -33, -26, 51, 4, -10, -19, 27, -31, -4, -34, 74, 3, 16, 104, 2, 121, 23, -27, -1, 6, -32, -15, -28, -32, -14, 65, 100, -2, 5, -4, -8, 55, 67, 10, 6, 10, -9, -39, -78, 42, 35, 9, 24, -24, 50, -7, 44, -37, 4, 0, 14, 45, -29, 33, 21, 54, -3, 20, 46, 20, -34, 33, -71, -32, 8, -24, 8, -29, -19, -7, 116, -27, 52, -9, 26, 121, 54, -86, -5, -66, 44, -40, 56, -21, -38, -24, -42, 2, -20, -11, 23, -8, -7, -101, -44, 15, 38, 60, -15, -3, -4, 50, -12, -91, 10, -49, 7, 31, 30, -61, -55, 20, -100, 17, 13, -57, 32, 88, -62, 56, -23, -9, -8, 3, 26, 4, 2, 9, 70, 11, 36, -30, -126, -55, 71, 28, 47, 94, 44, -8, 20, -3, 6, 18, 56, 124, 78, 1, 19, -57, -19, -121, 42, 54, -51, -12, -39, -44, -16, -80, -77, 31, 16, -13, -76, 29, -2, 1, -47, -4, 59, 79, -10, 22, -35, 69, -50, 7, -17, 64, -58 }; static const rnn_weight denoise_gru_bias[288] = { -41, -76, -24, -96, 25, 117, -55, 54, -73, -28, 53, -79, 20, -8, -87, 28, 44, 38, -66, -19, -45, 25, 119, 78, 54, -92, 31, 13, -3, -13, -28, -67, 3, 31, 54, -48, -16, -97, -12, 2, -117, -48, -24, 56, 18, 115, -59, 126, -30, 6, 16, -126, -11, -6, 15, -67, 33, -113, 59, -12, 126, -3, 61, 58, -71, -4, 42, 41, -48, 11, -33, 50, 43, 4, 0, 15, -46, -16, 23, -18, 8, -30, 13, 66, 77, -6, 34, 103, 40, 50, 39, 72, -10, 22, -16, 24, 1, 127, -9, -48, -55, -27, 36, -16, 90, 4, 12, -17, 59, 23, -34, 20, -84, 19, 41, 121, 116, 111, -10, -127, 41, 44, 4, 34, -1, 20, -11, 2, 127, -127, 44, 16, 21, 126, 66, 125, 126, 78, 25, 45, 72, 3, 123, 40, 105, -62, 25, -105, 44, 33, 13, -51, 119, 126, 126, 53, 0, -88, -32, -27, -33, -18, 11, 1, 27, -62, -6, -57, 71, 46, 21, -7, -6, -55, 127, 30, -41, -6, -21, -21, -38, 87, -16, 34, 44, -126, -112, -30, 61, -17, 115, 1, -39, 19, -43, 76, -64, 48, -13, 11, 73, 71, 93, 104, 23, 10, 63, 34, -7, 126, 57, 3, 127, 15, -71, -126, -25, 125, 7, 7, 39, -18, -27, 126, 95, -127, -95, 36, -4, 125, 37, 72, 127, -29, 69, 84, 99, 39, 127, 40, -127, -92, 0, 127, -14, 70, 39, -98, 25, 127, -54, 48, 47, 19, -21, 93, 61, 127, 3, -62, 127, -75, 24, -3, -18, 102, 40, -6, -14, -36, -41, 46, 89, -17, 29, -55, 7, -10, -59, 22, -21, 25, 18, -58, 25, 126, -84, 127 }; static const GRULayer denoise_gru = { denoise_gru_bias, denoise_gru_weights, denoise_gru_recurrent_weights, 114, 96, ACTIVATION_RELU }; static const rnn_weight denoise_output_weights[2112] = { 24, 90, 127, 108, 73, 38, 24, 13, 4, 16, 41, 51, 46, 35, 24, 14, 19, 23, 27, 23, 11, 10, 14, -1, 20, 67, 122, 95, 44, 11, 4, 5, 8, 15, 19, 17, 11, 5, 1, -2, -1, 5, 5, 1, 28, 2, -25, -16, -83, -45, 4, 36, 29, 24, 20, 12, -1, -2, 4, 13, 17, 18, 21, 22, 20, 11, -11, -26, -15, -21, -18, -15, -22, -22, -18, -22, -25, -20, -24, -25, -19, -21, -22, -16, -18, -24, -22, -7, 6, 26, 25, 7, 12, 17, 11, 4, 11, 11, 1, 1, 6, 14, 19, 11, 13, 29, 37, 14, -16, -45, -3, -8, -17, -22, -19, -11, -19, -21, -22, -24, -25, -20, -19, -14, -7, -5, -3, -1, 0, 1, 14, 13, 10, -12, 27, 5, -33, 11, 51, 26, -23, -22, -11, -8, -4, -8, -21, -32, -41, -45, -43, -39, -34, -16, -3, 2, -7, -10, -16, -12, -12, -8, -4, 1, 24, 53, 81, 98, 99, 80, 60, 54, 49, 38, 16, 5, 0, 15, 5, 14, 11, 12, 3, 7, 16, 19, 17, 10, 6, 1, -11, -11, -18, -26, -31, -26, -17, -14, -2, -15, -23, -27, -28, -31, -25, -29, -36, -37, -26, -22, -17, -15, -18, -17, -14, -14, -9, -9, 1, 4, 1, -6, -29, -23, -21, -14, -24, -24, -20, -21, -16, -13, -14, -15, -12, -16, -13, -10, -10, -7, 4, 18, -8, -11, -24, -12, -6, -10, -14, -21, -21, -20, -15, -22, -53, -65, -58, -43, -27, -31, -38, -45, -48, 0, -5, -8, -4, 2, 10, 12, 12, 6, 12, 21, 25, 22, 23, 23, 26, 38, 44, 41, 38, 36, 24, 18, -21, -31, -28, -37, -20, -5, -4, -15, -14, -16, -21, -21, -9, -10, -8, 0, -5, 4, 20, 14, 15, 47, 26, 26, 25, 5, 3, 8, 17, 17, 10, 14, 14, 4, 0, 5, 6, 12, 12, 11, 14, 28, 47, 62, 8, 8, -7, 2, 2, 2, -5, -4, 2, 2, -4, -5, -11, -22, -34, -46, -53, -55, -45, -39, -35, -43, -15, -7, 24, 40, 50, 55, 62, 63, 60, 58, 50, 48, 46, 47, 45, 40, 30, 20, 12, 7, 3, 4, -9, 2, -13, -9, -13, -15, -20, -17, -19, -32, -45, -54, -65, -67, -63, -62, -48, -24, -11, 5, 11, -38, -5, -7, -8, -12, -17, -15, -11, -7, -8, -12, -10, -11, -14, -13, -14, -17, -7, 12, 24, 15, -11, -79, -1, 14, -8, 26, 14, 13, 13, 6, -16, -16, 10, 28, 16, 5, -1, -1, 5, 9, 7, 6, 8, 14, -10, -7, -2, -1, -9, -18, -20, -18, -13, -11, -14, -20, -29, -37, -46, -46, -48, -54, -56, -72, -83, 11, 0, 11, 37, 45, 52, 80, 118, 96, 33, -10, -13, -10, 4, 7, -6, -3, 5, 3, -2, -9, -9, -7, -4, -3, 12, 13, 17, 24, 20, 16, 10, 11, 15, 17, 11, 3, 1, -1, -6, -9, -5, -14, -21, -16, 8, 1, -10, 5, -3, -51, -14, -10, -28, -27, -21, -14, -4, -3, -6, 1, 5, 4, 5, 13, 11, -1, -3, 5, 11, 30, 37, 34, 31, 27, 24, 24, 29, 34, 28, 25, 29, 27, 29, 30, 36, 38, 38, 8, -17, -18, -41, -58, -45, -39, -51, -52, -40, -47, -60, -52, -38, -25, -27, -36, -43, -33, -19, -3, 1, -3, 3, 1, 6, 14, 12, 9, 6, 3, 8, 13, 10, 8, 15, 31, 46, 69, 82, 81, 76, 67, 42, 15, 14, 28, 21, 36, 42, 27, 28, 26, 20, 11, 7, 4, 7, 6, 7, 20, 26, 17, 12, 1, -13, -22, -16, -23, -16, -9, -11, -10, -12, -10, -5, -6, -8, -6, -3, -2, 9, 10, 7, 7, 9, 22, 34, 25, -5, -8, -3, 2, -14, -7, -2, 1, 7, 33, 56, 59, 58, 42, 2, -11, -10, -11, -10, -12, -10, -4, 9, 14, 21, 11, 9, 6, 7, 8, 13, 16, 18, 22, 26, 30, 30, 30, 26, 18, 9, 5, 2, 3, -18, -29, -57, -45, -39, -45, -35, -19, -7, -6, -2, -4, -11, -13, -1, 0, -6, -22, -47, -50, -18, 12, -13, -19, -45, -41, -43, -38, -34, -31, -31, -21, -13, -10, -13, -13, -9, -8, -9, -9, -6, -4, -4, 2, -9, -18, -6, 2, 0, 5, 8, 5, 5, 7, 8, 7, 6, 2, -5, -6, -2, 3, 3, -8, -14, -1, 45, 35, 41, 21, 32, 31, 20, 17, 22, 20, 19, 16, 10, 4, 11, 15, 6, 4, 13, 4, -7, -18, 7, -26, -11, 9, -12, -28, -34, -16, -2, -8, -20, -20, -27, -10, 2, 4, 9, 1, -4, 4, 9, -1, 84, 95, 23, 17, 19, 21, 17, 25, 32, 23, 8, 2, 5, 9, 13, 17, 16, 16, 16, 18, 23, 24, -27, -32, -10, -21, -8, -1, -10, -10, -5, -1, 2, 1, 3, 0, -9, -11, -10, 0, 10, 9, 18, 28, 12, 18, 15, 11, 2, 1, -4, 4, 8, 7, 8, 7, 3, 4, 3, 11, 14, 4, -5, -2, 3, -29, -4, -2, -7, 0, -4, -7, -16, -7, 5, 2, 0, 0, -3, 2, 5, 1, -3, -18, -63, -113, -128, -117, -23, -13, -2, -21, -21, -29, -54, -37, -2, -2, -17, -29, -35, -29, -19, -16, -14, -16, -19, -16, -15, -21, 28, 19, 29, 20, 30, 19, 13, 12, 11, 14, 17, 20, 28, 29, 25, 24, 24, 32, 31, 34, 60, 97, -37, -41, -57, -61, -54, -50, -54, -57, -49, -49, -47, -45, -45, -50, -56, -59, -54, -49, -52, -60, -51, -40, -16, -16, 0, -9, -16, -11, -5, -6, -10, -17, -27, -35, -29, -31, -40, -42, -44, -38, -31, -25, -23, -6, -5, -2, -17, -38, -24, -16, -19, -12, 12, 38, 47, 37, 24, 6, -15, -9, 13, 37, 61, 56, 11, -7, 27, 18, -10, -14, -14, -14, -19, -18, -13, -12, -12, -13, -15, -11, -5, -6, -8, -8, -7, -4, -1, -8, -4, 0, -9, 2, 2, 6, -4, -7, -4, -6, -7, -12, -15, -17, -10, -8, -15, -21, -25, -31, -72, -127, -128, 20, 42, 17, 8, -4, 1, 6, 3, -18, -28, -2, 1, 5, 28, 8, -3, 8, 16, 24, 15, 0, -9, 19, 12, 16, 43, 69, 55, 41, 35, 22, 14, 8, 3, 8, 16, 20, 26, 33, 34, 30, 19, 15, -10, -12, -10, -10, -7, -11, -3, -4, -8, -7, -2, 1, 0, -3, -7, -8, -8, -6, -1, -2, -4, -4, -76, -91, -66, -74, -76, -41, -48, -47, -44, -41, -39, -36, -42, -48, -37, -37, -39, -41, -47, -58, -68, -70, -78, -79, -69, -70, -70, -67, -72, -72, -72, -68, -63, -60, -58, -58, -55, -53, -49, -43, -43, -37, -34, -16, -6, -3, -1, -11, -7, -4, -3, -3, -2, 2, 1, -6, -7, -11, -11, -3, -17, -41, -58, -44, -36, -43, 6, -15, -19, -19, -21, -17, 0, 16, 16, 13, 12, -5, 0, -4, -27, -27, -12, -3, 0, -2, -7, -15, 7, 0, -8, -6, -2, 8, 4, 0, -5, -7, -11, -13, -13, -11, -7, -9, -9, -6, -10, -5, 6, 0, 37, 34, 32, 43, 40, 35, 34, 36, 40, 38, 35, 38, 37, 40, 44, 37, 31, 30, 25, 38, 44, 23, 18, 10, 8, 8, 3, 5, 4, 2, 3, 6, 6, 5, 7, 6, -3, -8, -8, -13, -14, -24, -17, 9, -110, 22, -17, -65, -43, -35, 5, 5, -19, -29, -27, -18, -11, -6, -4, -6, -10, -9, -4, 1, 3, 2, 36, -40, -99, -102, 20, 27, 7, -16, -27, -30, -23, -15, -6, 1, 3, -2, -8, -10, -9, 4, 8, -10, -44, -30, -9, -2, -5, -15, -9, -3, 1, -2, -18, -17, -21, -26, -25, -34, -38, -44, -46, -46, -38, -87, 43, 32, 14, 5, 8, 12, 10, 4, -12, -14, -4, 2, -1, -7, -6, 2, 3, -3, -2, -1, 4, 14, -89, -105, -6, -8, 0, 1, -3, -7, -8, -4, 8, 15, 9, 3, -1, -5, -6, -4, -2, 1, 5, 9, -4, -6, -1, -1, -6, -1, -5, -3, 0, -3, -4, -2, -4, -5, -5, -10, -9, -5, -8, -14, -20, -44, -20, -5, 1, 20, 22, -17, -35, -38, -33, -23, -2, 8, 10, 7, -2, -40, -59, -50, -30, -8, -17, -32, -125, -75, -53, -13, -1, -9, -12, -12, -9, -7, -3, -1, -4, -9, -11, -13, -8, -10, -14, -6, -6, -24, 46, -1, 8, -6, 4, 0, 34, 19, -20, -27, -23, -19, -6, 3, 15, 33, 37, 29, 22, 11, 3, -6, 1, 0, 12, 7, 3, -4, 3, 3, 7, 12, 6, -1, -2, -5, -4, -6, -7, -4, -3, -1, 3, 8, -7, 1, 9, 5, -1, -3, -7, -3, 3, 6, 10, 7, 1, 0, 2, 0, 1, -3, -5, 2, 2, -9, 5, -2, -25, -17, -17, -14, -14, -13, -24, -38, -48, -48, -43, -31, -24, -17, -13, -12, -12, -12, -5, 7, 21, 21, -5, 4, 10, -3, 2, 7, 8, 8, 6, 6, 3, -3, -11, -15, -13, -12, -20, -26, -28, -41, 30, 17, 18, 26, 24, 22, 22, 32, 40, 39, 34, 32, 27, 34, 36, 26, 20, 18, 23, 35, 41, 27, -10, -7, 1, 7, 8, 0, 6, 14, 15, 11, 6, 7, 7, 6, 10, 11, 11, 14, 14, 17, 33, 71, 17, 10, -6, -1, 12, 14, 7, 7, 18, 15, 2, -7, -6, 0, 5, 7, 2, -3, -5, -6, -1, 4, -11, 6, 5, 3, 10, 13, 9, 5, 14, 19, 9, -4, -17, -18, -9, 1, 3, 5, 17, 38, 53, 31, -34, -26, -28, -22, -17, -24, -23, -21, -26, -21, -21, -25, -20, -17, -13, -19, -16, -23, -31, -23, -9, -20, 21, 26, 16, 13, 20, 11, 15, 19, 19, 18, 24, 26, 29, 27, 29, 25, 25, 15, 28, 38, 44, 59, 14, 18, 31, 37, 42, 40, 43, 45, 49, 54, 54, 56, 53, 50, 43, 37, 30, 26, 23, 20, 14, 10, 9, 11, 16, 5, 15, 12, 14, 15, 13, 12, 14, 17, 17, 16, 16, 16, 15, 6, 4, 2, -14, 2, 0, -2, -7, 18, 26, 20, 22, 29, 29, 14, 9, 17, 21, 12, 2, 5, 9, 14, 10, 5, 2, 5, 86, 127, 127, 68, 29, -3, -3, 15, 23, 28, 31, 21, 5, -3, -7, -5, -2, -1, -6, -17, -18, -14, 3, -2, -24, -29, -32, -33, -40, -46, -45, -45, -45, -44, -42, -39, -35, -29, -28, -29, -28, -23, -7, 9, 24, 37, 62, 62, 67, 64, 59, 76, 105, 95, 61, 41, 28, 23, 23, 18, 14, 19, 22, 22, 14, 11, -51, -39, -20, -13, -13, -6, -5, -7, -9, -14, -15, -18, -25, -26, -30, -35, -35, -44, -44, -51, -71, -105, -16, -4, -18, 2, 28, 7, -3, 7, 13, 3, -3, 2, 9, 14, 14, 5, -8, -14, -4, 17, 47, 98, -23, -41, -55, -45, -41, -38, -34, -32, -31, -29, -25, -22, -19, -17, -14, -13, -13, -13, -14, -13, -4, 0, 14, 26, 11, 2, 4, -7, -8, -15, -22, -28, -26, -9, 6, 14, 11, -3, -4, -1, 3, 31, 65, 45, 4, -1, 37, 31, 2, -7, -21, -29, -20, 5, 10, -10, -13, -13, -8, 1, 4, -4, -12, -31, -15, 39, -3, -6, -12, -16, -24, -27, -31, -28, -30, -38, -45, -45, -48, -50, -50, -46, -43, -41, -38, -39, -34, -34, 15, 16, 3, 2, 10, 12, -4, -2, 15, 26, 25, 21, 27, 35, 44, 43, 28, 21, 43, 42, 17, 40, 9, 7, 10, 12, 10, 5, 1, 5, 11, 11, 9, 10, 16, 19, 22, 34, 44, 51, 48, 48, 48, 60, -43, -29, -12, -2, -9, -24, -19, -13, -12, -14, -15, -13, -17, -18, -19, -19, -17, -20, -23, -34, -39, -44, -6, -31, -32, -25, 52, 106, 110, 19, -4, -14, -13, -5, -2, -8, 2, 6, 5, 11, 15, 20, 38, 61, -40, -19, -2, -5, -2, -4, -1, -6, -8, -6, -8, -4, -5, -4, 3, 0, -2, -4, -5, -3, -14, -24, -16, -24, -22, 2, -2, -29, -33, -27, -23, -25, -24, -16, -18, -17, 5, 38, 47, 41, 37, 27, 13, 0, 67, 78, 39, -26, -7, -10, -15, -6, 3, -3, -5, -3, -2, 0, 3, 1, -3, -4, -3, -1, 1, 0, -2, -15, 24, -12, -48, 24, -26, -82, -69, -40, -15, -16, -9, -1, 7, 12, 18, 20, 26, 33, 27, 30 }; static const rnn_weight denoise_output_bias[22] = { -82, -66, -125, -95, -127, -127, -127, -127, -127, -94, -113, -127, -80, -65, -109, -127, -126, -105, -53, -49, -18, -9 }; static const DenseLayer denoise_output = { denoise_output_bias, denoise_output_weights, 96, 22, ACTIVATION_SIGMOID }; static const rnn_weight vad_output_weights[24] = { 127, 127, 127, 127, 127, 20, 127, -126, -126, -54, 14, 125, -126, -126, 127, -125, -126, 127, -127, -127, -57, -30, 127, 80 }; static const rnn_weight vad_output_bias[1] = { -50 }; static const DenseLayer vad_output = { vad_output_bias, vad_output_weights, 24, 1, ACTIVATION_SIGMOID }; const struct RNNModel rnnoise_model_orig = { 24, &input_dense, 24, &vad_gru, 48, &noise_gru, 96, &denoise_gru, 22, &denoise_output, 1, &vad_output }; 07070100000021000081A4000000000000000000000001600B393100000221000000000000000000000000000000000000002D00000000rnnoise-0.git20210122.1cbdbcf/src/rnn_data.h#ifndef RNN_DATA_H #define RNN_DATA_H #include "rnn.h" struct RNNModel { int input_dense_size; const DenseLayer *input_dense; int vad_gru_size; const GRULayer *vad_gru; int noise_gru_size; const GRULayer *noise_gru; int denoise_gru_size; const GRULayer *denoise_gru; int denoise_output_size; const DenseLayer *denoise_output; int vad_output_size; const DenseLayer *vad_output; }; struct RNNState { const RNNModel *model; float *vad_gru_state; float *noise_gru_state; float *denoise_gru_state; }; #endif 07070100000022000081A4000000000000000000000001600B393100001448000000000000000000000000000000000000002F00000000rnnoise-0.git20210122.1cbdbcf/src/rnn_reader.c/* Copyright (c) 2018 Gregor Richards */ /* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include "rnn.h" #include "rnn_data.h" #include "rnnoise.h" /* Although these values are the same as in rnn.h, we make them separate to * avoid accidentally burning internal values into a file format */ #define F_ACTIVATION_TANH 0 #define F_ACTIVATION_SIGMOID 1 #define F_ACTIVATION_RELU 2 RNNModel *rnnoise_model_from_file(FILE *f) { int i, in; if (fscanf(f, "rnnoise-nu model file version %d\n", &in) != 1 || in != 1) return NULL; RNNModel *ret = calloc(1, sizeof(RNNModel)); if (!ret) return NULL; #define ALLOC_LAYER(type, name) \ type *name; \ name = calloc(1, sizeof(type)); \ if (!name) { \ rnnoise_model_free(ret); \ return NULL; \ } \ ret->name = name ALLOC_LAYER(DenseLayer, input_dense); ALLOC_LAYER(GRULayer, vad_gru); ALLOC_LAYER(GRULayer, noise_gru); ALLOC_LAYER(GRULayer, denoise_gru); ALLOC_LAYER(DenseLayer, denoise_output); ALLOC_LAYER(DenseLayer, vad_output); #define INPUT_VAL(name) do { \ if (fscanf(f, "%d", &in) != 1 || in < 0 || in > 128) { \ rnnoise_model_free(ret); \ return NULL; \ } \ name = in; \ } while (0) #define INPUT_ACTIVATION(name) do { \ int activation; \ INPUT_VAL(activation); \ switch (activation) { \ case F_ACTIVATION_SIGMOID: \ name = ACTIVATION_SIGMOID; \ break; \ case F_ACTIVATION_RELU: \ name = ACTIVATION_RELU; \ break; \ default: \ name = ACTIVATION_TANH; \ } \ } while (0) #define INPUT_ARRAY(name, len) do { \ rnn_weight *values = malloc((len) * sizeof(rnn_weight)); \ if (!values) { \ rnnoise_model_free(ret); \ return NULL; \ } \ name = values; \ for (i = 0; i < (len); i++) { \ if (fscanf(f, "%d", &in) != 1) { \ rnnoise_model_free(ret); \ return NULL; \ } \ values[i] = in; \ } \ } while (0) #define INPUT_DENSE(name) do { \ INPUT_VAL(name->nb_inputs); \ INPUT_VAL(name->nb_neurons); \ ret->name ## _size = name->nb_neurons; \ INPUT_ACTIVATION(name->activation); \ INPUT_ARRAY(name->input_weights, name->nb_inputs * name->nb_neurons); \ INPUT_ARRAY(name->bias, name->nb_neurons); \ } while (0) #define INPUT_GRU(name) do { \ INPUT_VAL(name->nb_inputs); \ INPUT_VAL(name->nb_neurons); \ ret->name ## _size = name->nb_neurons; \ INPUT_ACTIVATION(name->activation); \ INPUT_ARRAY(name->input_weights, name->nb_inputs * name->nb_neurons * 3); \ INPUT_ARRAY(name->recurrent_weights, name->nb_neurons * name->nb_neurons * 3); \ INPUT_ARRAY(name->bias, name->nb_neurons * 3); \ } while (0) INPUT_DENSE(input_dense); INPUT_GRU(vad_gru); INPUT_GRU(noise_gru); INPUT_GRU(denoise_gru); INPUT_DENSE(denoise_output); INPUT_DENSE(vad_output); return ret; } void rnnoise_model_free(RNNModel *model) { #define FREE_MAYBE(ptr) do { if (ptr) free(ptr); } while (0) #define FREE_DENSE(name) do { \ if (model->name) { \ free((void *) model->name->input_weights); \ free((void *) model->name->bias); \ free((void *) model->name); \ } \ } while (0) #define FREE_GRU(name) do { \ if (model->name) { \ free((void *) model->name->input_weights); \ free((void *) model->name->recurrent_weights); \ free((void *) model->name->bias); \ free((void *) model->name); \ } \ } while (0) if (!model) return; FREE_DENSE(input_dense); FREE_GRU(vad_gru); FREE_GRU(noise_gru); FREE_GRU(denoise_gru); FREE_DENSE(denoise_output); FREE_DENSE(vad_output); free(model); } 07070100000023000081ED000000000000000000000001600B3931000007FF000000000000000000000000000000000000002F00000000rnnoise-0.git20210122.1cbdbcf/src/rnn_train.py#!/usr/bin/python from __future__ import print_function from keras.models import Sequential from keras.models import Model from keras.layers import Input from keras.layers import Dense from keras.layers import LSTM from keras.layers import GRU from keras.layers import SimpleRNN from keras.layers import Dropout from keras import losses import h5py from keras import backend as K import numpy as np print('Build model...') main_input = Input(shape=(None, 22), name='main_input') #x = Dense(44, activation='relu')(main_input) #x = GRU(44, dropout=0.0, recurrent_dropout=0.0, activation='tanh', recurrent_activation='sigmoid', return_sequences=True)(x) x=main_input x = GRU(128, activation='tanh', recurrent_activation='sigmoid', return_sequences=True)(x) #x = GRU(128, return_sequences=True)(x) #x = GRU(22, activation='relu', return_sequences=True)(x) x = Dense(22, activation='sigmoid')(x) #x = Dense(22, activation='softplus')(x) model = Model(inputs=main_input, outputs=x) batch_size = 32 print('Loading data...') with h5py.File('denoise_data.h5', 'r') as hf: all_data = hf['denoise_data'][:] print('done.') window_size = 500 nb_sequences = len(all_data)//window_size print(nb_sequences, ' sequences') x_train = all_data[:nb_sequences*window_size, :-22] x_train = np.reshape(x_train, (nb_sequences, window_size, 22)) y_train = np.copy(all_data[:nb_sequences*window_size, -22:]) y_train = np.reshape(y_train, (nb_sequences, window_size, 22)) #y_train = -20*np.log10(np.add(y_train, .03)); all_data = 0; x_train = x_train.astype('float32') y_train = y_train.astype('float32') print(len(x_train), 'train sequences. x shape =', x_train.shape, 'y shape = ', y_train.shape) # try using different optimizers and different optimizer configs model.compile(loss='mean_squared_error', optimizer='adam', metrics=['binary_accuracy']) print('Train...') model.fit(x_train, y_train, batch_size=batch_size, epochs=200, validation_data=(x_train, y_train)) model.save("newweights.hdf5") 07070100000024000081A4000000000000000000000001600B393100000900000000000000000000000000000000000000003100000000rnnoise-0.git20210122.1cbdbcf/src/tansig_table.h/* This file is auto-generated by gen_tables */ static const float tansig_table[201] = { 0.000000f, 0.039979f, 0.079830f, 0.119427f, 0.158649f, 0.197375f, 0.235496f, 0.272905f, 0.309507f, 0.345214f, 0.379949f, 0.413644f, 0.446244f, 0.477700f, 0.507977f, 0.537050f, 0.564900f, 0.591519f, 0.616909f, 0.641077f, 0.664037f, 0.685809f, 0.706419f, 0.725897f, 0.744277f, 0.761594f, 0.777888f, 0.793199f, 0.807569f, 0.821040f, 0.833655f, 0.845456f, 0.856485f, 0.866784f, 0.876393f, 0.885352f, 0.893698f, 0.901468f, 0.908698f, 0.915420f, 0.921669f, 0.927473f, 0.932862f, 0.937863f, 0.942503f, 0.946806f, 0.950795f, 0.954492f, 0.957917f, 0.961090f, 0.964028f, 0.966747f, 0.969265f, 0.971594f, 0.973749f, 0.975743f, 0.977587f, 0.979293f, 0.980869f, 0.982327f, 0.983675f, 0.984921f, 0.986072f, 0.987136f, 0.988119f, 0.989027f, 0.989867f, 0.990642f, 0.991359f, 0.992020f, 0.992631f, 0.993196f, 0.993718f, 0.994199f, 0.994644f, 0.995055f, 0.995434f, 0.995784f, 0.996108f, 0.996407f, 0.996682f, 0.996937f, 0.997172f, 0.997389f, 0.997590f, 0.997775f, 0.997946f, 0.998104f, 0.998249f, 0.998384f, 0.998508f, 0.998623f, 0.998728f, 0.998826f, 0.998916f, 0.999000f, 0.999076f, 0.999147f, 0.999213f, 0.999273f, 0.999329f, 0.999381f, 0.999428f, 0.999472f, 0.999513f, 0.999550f, 0.999585f, 0.999617f, 0.999646f, 0.999673f, 0.999699f, 0.999722f, 0.999743f, 0.999763f, 0.999781f, 0.999798f, 0.999813f, 0.999828f, 0.999841f, 0.999853f, 0.999865f, 0.999875f, 0.999885f, 0.999893f, 0.999902f, 0.999909f, 0.999916f, 0.999923f, 0.999929f, 0.999934f, 0.999939f, 0.999944f, 0.999948f, 0.999952f, 0.999956f, 0.999959f, 0.999962f, 0.999965f, 0.999968f, 0.999970f, 0.999973f, 0.999975f, 0.999977f, 0.999978f, 0.999980f, 0.999982f, 0.999983f, 0.999984f, 0.999986f, 0.999987f, 0.999988f, 0.999989f, 0.999990f, 0.999990f, 0.999991f, 0.999992f, 0.999992f, 0.999993f, 0.999994f, 0.999994f, 0.999994f, 0.999995f, 0.999995f, 0.999996f, 0.999996f, 0.999996f, 0.999997f, 0.999997f, 0.999997f, 0.999997f, 0.999997f, 0.999998f, 0.999998f, 0.999998f, 0.999998f, 0.999998f, 0.999998f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, }; 07070100000025000041ED000000000000000000000001600B393100000000000000000000000000000000000000000000002700000000rnnoise-0.git20210122.1cbdbcf/training07070100000026000081ED000000000000000000000001600B39310000012B000000000000000000000000000000000000003300000000rnnoise-0.git20210122.1cbdbcf/training/bin2hdf5.py#!/usr/bin/python from __future__ import print_function import numpy as np import h5py import sys data = np.fromfile(sys.argv[1], dtype='float32'); data = np.reshape(data, (int(sys.argv[2]), int(sys.argv[3]))); h5f = h5py.File(sys.argv[4], 'w'); h5f.create_dataset('data', data=data) h5f.close() 07070100000027000081ED000000000000000000000001600B393100000E7E000000000000000000000000000000000000003300000000rnnoise-0.git20210122.1cbdbcf/training/dump_rnn.py#!/usr/bin/python from __future__ import print_function from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from keras.layers import GRU from keras.models import load_model from keras import backend as K import sys import re import numpy as np def printVector(f, ft, vector, name): v = np.reshape(vector, (-1)); #print('static const float ', name, '[', len(v), '] = \n', file=f) f.write('static const rnn_weight {}[{}] = {{\n '.format(name, len(v))) for i in range(0, len(v)): f.write('{}'.format(min(127, int(round(256*v[i]))))) ft.write('{}'.format(min(127, int(round(256*v[i]))))) if (i!=len(v)-1): f.write(',') else: break; ft.write(" ") if (i%8==7): f.write("\n ") else: f.write(" ") #print(v, file=f) f.write('\n};\n\n') ft.write("\n") return; def printLayer(f, ft, layer): weights = layer.get_weights() activation = re.search('function (.*) at', str(layer.activation)).group(1).upper() if len(weights) > 2: ft.write('{} {} '.format(weights[0].shape[0], weights[0].shape[1]/3)) else: ft.write('{} {} '.format(weights[0].shape[0], weights[0].shape[1])) if activation == 'SIGMOID': ft.write('1\n') elif activation == 'RELU': ft.write('2\n') else: ft.write('0\n') printVector(f, ft, weights[0], layer.name + '_weights') if len(weights) > 2: printVector(f, ft, weights[1], layer.name + '_recurrent_weights') printVector(f, ft, weights[-1], layer.name + '_bias') name = layer.name if len(weights) > 2: f.write('static const GRULayer {} = {{\n {}_bias,\n {}_weights,\n {}_recurrent_weights,\n {}, {}, ACTIVATION_{}\n}};\n\n' .format(name, name, name, name, weights[0].shape[0], weights[0].shape[1]/3, activation)) else: f.write('static const DenseLayer {} = {{\n {}_bias,\n {}_weights,\n {}, {}, ACTIVATION_{}\n}};\n\n' .format(name, name, name, weights[0].shape[0], weights[0].shape[1], activation)) def structLayer(f, layer): weights = layer.get_weights() name = layer.name if len(weights) > 2: f.write(' {},\n'.format(weights[0].shape[1]/3)) else: f.write(' {},\n'.format(weights[0].shape[1])) f.write(' &{},\n'.format(name)) def foo(c, name): return None def mean_squared_sqrt_error(y_true, y_pred): return K.mean(K.square(K.sqrt(y_pred) - K.sqrt(y_true)), axis=-1) model = load_model(sys.argv[1], custom_objects={'msse': mean_squared_sqrt_error, 'mean_squared_sqrt_error': mean_squared_sqrt_error, 'my_crossentropy': mean_squared_sqrt_error, 'mycost': mean_squared_sqrt_error, 'WeightClip': foo}) weights = model.get_weights() f = open(sys.argv[2], 'w') ft = open(sys.argv[3], 'w') f.write('/*This file is automatically generated from a Keras model*/\n\n') f.write('#ifdef HAVE_CONFIG_H\n#include "config.h"\n#endif\n\n#include "rnn.h"\n#include "rnn_data.h"\n\n') ft.write('rnnoise-nu model file version 1\n') layer_list = [] for i, layer in enumerate(model.layers): if len(layer.get_weights()) > 0: printLayer(f, ft, layer) if len(layer.get_weights()) > 2: layer_list.append(layer.name) f.write('const struct RNNModel rnnoise_model_{} = {{\n'.format(sys.argv[4])) for i, layer in enumerate(model.layers): if len(layer.get_weights()) > 0: structLayer(f, layer) f.write('};\n') #hf.write('struct RNNState {\n') #for i, name in enumerate(layer_list): # hf.write(' float {}_state[{}_SIZE];\n'.format(name, name.upper())) #hf.write('};\n') f.close() 07070100000028000081ED000000000000000000000001600B393100001203000000000000000000000000000000000000003400000000rnnoise-0.git20210122.1cbdbcf/training/rnn_train.py#!/usr/bin/python from __future__ import print_function import keras from keras.models import Sequential from keras.models import Model from keras.layers import Input from keras.layers import Dense from keras.layers import LSTM from keras.layers import GRU from keras.layers import SimpleRNN from keras.layers import Dropout from keras.layers import concatenate from keras import losses from keras import regularizers from keras.constraints import min_max_norm import h5py from keras.constraints import Constraint from keras import backend as K import numpy as np #import tensorflow as tf #from keras.backend.tensorflow_backend import set_session #config = tf.ConfigProto() #config.gpu_options.per_process_gpu_memory_fraction = 0.42 #set_session(tf.Session(config=config)) def my_crossentropy(y_true, y_pred): return K.mean(2*K.abs(y_true-0.5) * K.binary_crossentropy(y_pred, y_true), axis=-1) def mymask(y_true): return K.minimum(y_true+1., 1.) def msse(y_true, y_pred): return K.mean(mymask(y_true) * K.square(K.sqrt(y_pred) - K.sqrt(y_true)), axis=-1) def mycost(y_true, y_pred): return K.mean(mymask(y_true) * (10*K.square(K.square(K.sqrt(y_pred) - K.sqrt(y_true))) + K.square(K.sqrt(y_pred) - K.sqrt(y_true)) + 0.01*K.binary_crossentropy(y_pred, y_true)), axis=-1) def my_accuracy(y_true, y_pred): return K.mean(2*K.abs(y_true-0.5) * K.equal(y_true, K.round(y_pred)), axis=-1) class WeightClip(Constraint): '''Clips the weights incident to each hidden unit to be inside a range ''' def __init__(self, c=2): self.c = c def __call__(self, p): return K.clip(p, -self.c, self.c) def get_config(self): return {'name': self.__class__.__name__, 'c': self.c} reg = 0.000001 constraint = WeightClip(0.499) print('Build model...') main_input = Input(shape=(None, 42), name='main_input') tmp = Dense(24, activation='tanh', name='input_dense', kernel_constraint=constraint, bias_constraint=constraint)(main_input) vad_gru = GRU(24, activation='tanh', recurrent_activation='sigmoid', return_sequences=True, name='vad_gru', kernel_regularizer=regularizers.l2(reg), recurrent_regularizer=regularizers.l2(reg), kernel_constraint=constraint, recurrent_constraint=constraint, bias_constraint=constraint)(tmp) vad_output = Dense(1, activation='sigmoid', name='vad_output', kernel_constraint=constraint, bias_constraint=constraint)(vad_gru) noise_input = keras.layers.concatenate([tmp, vad_gru, main_input]) noise_gru = GRU(48, activation='relu', recurrent_activation='sigmoid', return_sequences=True, name='noise_gru', kernel_regularizer=regularizers.l2(reg), recurrent_regularizer=regularizers.l2(reg), kernel_constraint=constraint, recurrent_constraint=constraint, bias_constraint=constraint)(noise_input) denoise_input = keras.layers.concatenate([vad_gru, noise_gru, main_input]) denoise_gru = GRU(96, activation='tanh', recurrent_activation='sigmoid', return_sequences=True, name='denoise_gru', kernel_regularizer=regularizers.l2(reg), recurrent_regularizer=regularizers.l2(reg), kernel_constraint=constraint, recurrent_constraint=constraint, bias_constraint=constraint)(denoise_input) denoise_output = Dense(22, activation='sigmoid', name='denoise_output', kernel_constraint=constraint, bias_constraint=constraint)(denoise_gru) model = Model(inputs=main_input, outputs=[denoise_output, vad_output]) model.compile(loss=[mycost, my_crossentropy], metrics=[msse], optimizer='adam', loss_weights=[10, 0.5]) batch_size = 32 print('Loading data...') with h5py.File('training.h5', 'r') as hf: all_data = hf['data'][:] print('done.') window_size = 2000 nb_sequences = len(all_data)//window_size print(nb_sequences, ' sequences') x_train = all_data[:nb_sequences*window_size, :42] x_train = np.reshape(x_train, (nb_sequences, window_size, 42)) y_train = np.copy(all_data[:nb_sequences*window_size, 42:64]) y_train = np.reshape(y_train, (nb_sequences, window_size, 22)) noise_train = np.copy(all_data[:nb_sequences*window_size, 64:86]) noise_train = np.reshape(noise_train, (nb_sequences, window_size, 22)) vad_train = np.copy(all_data[:nb_sequences*window_size, 86:87]) vad_train = np.reshape(vad_train, (nb_sequences, window_size, 1)) all_data = 0; #x_train = x_train.astype('float32') #y_train = y_train.astype('float32') print(len(x_train), 'train sequences. x shape =', x_train.shape, 'y shape = ', y_train.shape) print('Train...') model.fit(x_train, [y_train, vad_train], batch_size=batch_size, epochs=120, validation_split=0.1) model.save("weights.hdf5") 07070100000029000081ED000000000000000000000001600B39310000091E000000000000000000000000000000000000002D00000000rnnoise-0.git20210122.1cbdbcf/update_version#!/bin/bash # Creates and updates the package_version information used by configure.ac # (or other makefiles). When run inside a git repository it will use the # version information that can be queried from it unless AUTO_UPDATE is set # to 'no'. If no version is currently known it will be set to 'unknown'. # # If called with the argument 'release', the PACKAGE_VERSION will be updated # even if AUTO_UPDATE=no, but the value of AUTO_UPDATE shall be preserved. # This is used to force a version update whenever `make dist` is run. # # The exit status is 1 if package_version is not modified, else 0 is returned. # # This script should NOT be included in distributed tarballs, because if a # parent directory contains a git repository we do not want to accidentally # retrieve the version information from it instead. Tarballs should ship # with only the package_version file. # # Ron <ron@debian.org>, 2012. SRCDIR=$(dirname $0) if [ -e "$SRCDIR/package_version" ]; then . "$SRCDIR/package_version" fi if [ "$AUTO_UPDATE" = no ]; then [ "$1" = release ] || exit 1 else AUTO_UPDATE=yes fi # We run `git status` before describe here to ensure that we don't get a false # -dirty from files that have been touched but are not actually altered in the # working dir. GIT_VERSION=$(cd "$SRCDIR" && git status > /dev/null 2>&1 \ && git describe --tags --match 'v*' --dirty 2> /dev/null) GIT_VERSION=${GIT_VERSION#v} if [ -n "$GIT_VERSION" ]; then [ "$GIT_VERSION" != "$PACKAGE_VERSION" ] || exit 1 PACKAGE_VERSION="$GIT_VERSION" elif [ -z "$PACKAGE_VERSION" ]; then # No current package_version and no git ... # We really shouldn't ever get here, because this script should only be # included in the git repository, and should usually be export-ignored. PACKAGE_VERSION="unknown" else exit 1 fi cat > "$SRCDIR/package_version" <<-EOF # Automatically generated by update_version. # This file may be sourced into a shell script or makefile. # Set this to 'no' if you do not wish the version information # to be checked and updated for every build. Most people will # never want to change this, it is an option for developers # making frequent changes that they know will not be released. AUTO_UPDATE=$AUTO_UPDATE PACKAGE_VERSION="$PACKAGE_VERSION" EOF 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!1130 blocks
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor