diff --git a/helpers/audio_tools.py b/helpers/audio_tools.py index e22216e..14a43c0 100644 --- a/helpers/audio_tools.py +++ b/helpers/audio_tools.py @@ -1,5 +1,6 @@ from pydub import AudioSegment import os +import math from helpers.normalisation import get_original_filename_from_normalised def generate_silence_file(filename: str): @@ -31,6 +32,97 @@ def generate_silence_file(filename: str): silent_file.export(silent_filename, bitrate="64k", format="mp3") return silent_filename +def generate_peaks_from_filename(filename: str): + if not (isinstance(filename, str) and filename.endswith(".mp3")): + raise ValueError("Invalid filename given.") + + audio: AudioSegment = AudioSegment.from_file(filename, "mp3") + + # Returns the raw audio data as an array of (numeric) samples. + # Note: if the audio has multiple channels, the samples for each channel will be serialized + # for example, stereo audio would look like [sample_1_L, sample_1_R, sample_2_L, sample_2_R, …]. + samples: list[int] = list(audio.get_array_of_samples()) + + channels: int = audio.channels if audio.channels else 1 + samples_per_channel = [[]]*channels + + + + if not samples: + return [] + + if channels > 0: + for channel in range(channels): + samples_per_channel[channel] = samples[channel::channels] + + + + + + + number_of_segments = math.floor(len(samples)/2205) + first = 0 + last = math.floor(number_of_segments - 1) + + + sampleSize = math.floor(len(samples) / number_of_segments) + sampleStep = max(math.floor(sampleSize / 10),1) + + peak_entries_per_channel = int(sampleSize*2/channels) + + peaks_per_channel = [[0]*peak_entries_per_channel]*channels + c = 0 + merged_peaks = [0]*(peak_entries_per_channel*channels) + + + for c in range(channels): + peaks = [0]*peak_entries_per_channel + chan = samples_per_channel[c] + + for i in range(first,last): + start = math.floor(i * sampleSize) + end = min(len(chan)-1, math.floor(start + sampleSize)) + if start > len(chan): + break + minimum = chan[start] + maximum = minimum + + for j in range(start, end, sampleStep): + value = chan[j] + + if (value > maximum): + maximum = value + + if (value < maximum): + minimum = value + + if 2*i+1 >= len(peaks): + break + if peaks[2 * i] != 0: + raise Exception("Overwriting peaks at ", 2 * i) + peaks[2 * i] = maximum + peaks[2 * i + 1] = minimum + + if (c == 0 or maximum > merged_peaks[2 * i]): + merged_peaks[2 * i] = maximum + + if (c == 0 or minimum< merged_peaks[2 * i + 1]): + merged_peaks[2 * i + 1] = minimum + peaks_per_channel[c] = peaks + + merged = True + return { + "sample_rate": audio.frame_rate, + "number_of_segments": number_of_segments, + "version":2, + "channels":channels, + "samples": len(samples), + "samples_per_segment":sampleSize, + "bits": 8, + "length": len(merged_peaks) if merged else len(peaks_per_channel[0]), + "data": merged_peaks if merged else peaks_per_channel + } + # Returns either a silence file path for the UI (based on filename), or the original if not available. def get_silence_filename_if_available(filename: str): if not (isinstance(filename, str) and filename.endswith(".mp3")): diff --git a/long_clip.json b/long_clip.json new file mode 100644 index 0000000..0b6cb93 --- /dev/null +++ b/long_clip.json @@ -0,0 +1,13726 @@ +{ + "version": 2, + "channels": 2, + "sample_rate": 44100, + "samples_per_pixel": 2205, + "bits": 8, + "length": 3429, + "data": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -31, + 54, + -19, + 43, + -108, + 79, + -84, + 101, + -65, + 95, + -62, + 76, + -72, + 92, + -56, + 76, + -120, + 120, + -119, + 103, + -113, + 112, + -119, + 118, + -96, + 77, + -93, + 85, + -99, + 76, + -73, + 62, + -95, + 82, + -87, + 80, + -84, + 92, + -70, + 94, + -76, + 57, + -75, + 93, + -74, + 55, + -74, + 97, + -72, + 53, + -74, + 88, + -65, + 45, + -74, + 74, + -43, + 39, + -54, + 38, + -82, + 105, + -107, + 84, + -78, + 79, + -77, + 85, + -81, + 76, + -74, + 83, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -116, + 90, + -94, + 95, + -68, + 44, + -69, + 63, + -49, + 45, + -51, + 70, + -32, + 39, + -47, + 48, + -36, + 43, + -43, + 44, + -83, + 81, + -83, + 71, + -72, + 96, + -62, + 86, + -64, + 64, + -65, + 84, + -53, + 56, + -53, + 77, + -51, + 53, + -49, + 69, + -49, + 39, + -54, + 53, + -39, + 31, + -58, + 61, + -118, + 119, + -118, + 118, + -119, + 116, + -119, + 106, + -98, + 66, + -104, + 77, + -37, + 68, + -50, + 52, + -38, + 44, + -34, + 32, + -24, + 26, + -24, + 25, + -24, + 21, + -19, + 24, + -20, + 23, + -19, + 21, + -18, + 21, + -18, + 21, + -18, + 18, + -15, + 16, + -13, + 15, + -14, + 17, + -12, + 14, + -14, + 11, + -10, + 12, + -12, + 11, + -7, + 8, + -8, + 9, + -127, + 123, + -124, + 124, + -127, + 127, + -127, + 127, + -109, + 86, + -103, + 102, + -51, + 80, + -52, + 73, + -40, + 45, + -48, + 49, + -24, + 33, + -37, + 25, + -20, + 21, + -21, + 31, + -26, + 24, + -19, + 23, + -20, + 16, + -21, + 22, + -19, + 22, + -19, + 16, + -20, + 20, + -10, + 13, + -81, + 64, + -90, + 91, + -108, + 97, + -85, + 88, + -75, + 94, + -75, + 89, + -83, + 85, + -88, + 85, + -119, + 118, + -120, + 121, + -102, + 98, + -99, + 93, + -99, + 83, + -76, + 64, + -76, + 82, + -78, + 75, + -83, + 77, + -78, + 97, + -56, + 64, + -65, + 89, + -50, + 54, + -46, + 50, + -56, + 51, + -41, + 43, + -59, + 39, + -40, + 43, + -57, + 49, + -35, + 37, + -96, + 104, + -107, + 68, + -76, + 76, + -77, + 81, + -77, + 76, + -79, + 84, + -81, + 78, + -65, + 81, + -127, + 127, + -127, + 127, + -112, + 120, + -126, + 99, + -60, + 67, + -75, + 72, + -59, + 38, + -64, + 60, + -29, + 32, + -48, + 48, + -31, + 37, + -52, + 43, + -34, + 39, + -46, + 39, + -100, + 101, + -95, + 94, + -65, + 60, + -62, + 72, + -66, + 57, + -60, + 73, + -55, + 52, + -49, + 69, + -36, + 31, + -61, + 43, + -32, + 47, + -60, + 62, + -40, + 49, + -49, + 66, + -119, + 119, + -119, + 118, + -101, + 107, + -109, + 106, + -82, + 72, + -58, + 78, + -35, + 45, + -34, + 38, + -33, + 26, + -34, + 29, + -29, + 27, + -22, + 27, + -23, + 21, + -20, + 21, + -21, + 21, + -17, + 22, + -21, + 21, + -17, + 18, + -14, + 17, + -14, + 17, + -12, + 14, + -11, + 12, + -10, + 13, + -11, + 11, + -8, + 12, + -11, + 10, + -8, + 7, + -9, + 9, + -127, + 125, + -127, + 127, + -127, + 125, + -127, + 127, + -105, + 90, + -84, + 101, + -49, + 47, + -47, + 48, + -28, + 46, + -40, + 50, + -28, + 30, + -46, + 29, + -23, + 17, + -20, + 20, + -18, + 17, + -20, + 21, + -24, + 21, + -19, + 21, + -16, + 21, + -16, + 12, + -76, + 70, + -47, + 26, + -88, + 89, + -87, + 88, + -70, + 68, + -70, + 75, + -72, + 62, + -59, + 85, + -118, + 108, + -118, + 98, + -119, + 108, + -120, + 96, + -94, + 93, + -96, + 104, + -76, + 78, + -70, + 81, + -82, + 88, + -55, + 95, + -65, + 63, + -52, + 74, + -28, + 25, + -49, + 51, + -33, + 28, + -44, + 44, + -34, + 29, + -48, + 43, + -37, + 40, + -36, + 49, + -32, + 37, + -30, + 38, + -93, + 103, + -96, + 82, + -70, + 75, + -72, + 72, + -58, + 48, + -75, + 54, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 123, + -82, + 72, + -58, + 77, + -64, + 72, + -74, + 59, + -63, + 67, + -51, + 45, + -41, + 46, + -50, + 32, + -35, + 36, + -36, + 39, + -98, + 88, + -68, + 81, + -92, + 81, + -96, + 91, + -78, + 62, + -71, + 50, + -80, + 67, + -72, + 51, + -78, + 75, + -78, + 46, + -70, + 76, + -90, + 50, + -68, + 79, + -85, + 59, + -98, + 120, + -108, + 119, + -119, + 107, + -118, + 105, + -70, + 61, + -57, + 83, + -37, + 43, + -38, + 40, + -45, + 40, + -34, + 35, + -18, + 22, + -20, + 26, + -23, + 23, + -21, + 24, + -22, + 22, + -19, + 20, + -20, + 23, + -17, + 19, + -16, + 18, + -15, + 17, + -13, + 17, + -12, + 14, + -12, + 11, + -10, + 11, + -9, + 9, + -7, + 10, + -6, + 7, + -6, + 9, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -110, + 85, + -104, + 105, + -51, + 77, + -53, + 71, + -37, + 47, + -44, + 52, + -26, + 32, + -36, + 28, + -29, + 19, + -21, + 31, + -24, + 21, + -21, + 26, + -17, + 19, + -19, + 18, + -18, + 20, + -13, + 16, + -18, + 22, + -14, + 15, + -91, + 104, + -91, + 93, + -78, + 69, + -69, + 85, + -75, + 71, + -70, + 91, + -120, + 79, + -106, + 98, + -123, + 108, + -120, + 113, + -104, + 119, + -86, + 104, + -86, + 104, + -78, + 85, + -85, + 89, + -59, + 89, + -77, + 83, + -42, + 104, + -76, + 63, + -51, + 95, + -74, + 69, + -48, + 97, + -85, + 71, + -54, + 83, + -82, + 54, + -52, + 71, + -58, + 38, + -32, + 52, + -83, + 83, + -79, + 80, + -75, + 91, + -104, + 83, + -60, + 46, + -81, + 59, + -67, + 93, + -80, + 51, + -127, + 127, + -127, + 127, + -109, + 118, + -122, + 91, + -77, + 73, + -74, + 70, + -70, + 76, + -68, + 61, + -42, + 59, + -58, + 45, + -44, + 48, + -47, + 36, + -42, + 40, + -36, + 37, + -104, + 96, + -97, + 98, + -77, + 76, + -74, + 67, + -91, + 66, + -74, + 53, + -94, + 74, + -79, + 56, + -81, + 79, + -93, + 55, + -68, + 86, + -92, + 61, + -69, + 89, + -78, + 78, + -120, + 118, + -116, + 119, + -103, + 103, + -103, + 100, + -50, + 45, + -36, + 56, + -45, + 46, + -35, + 40, + -31, + 23, + -30, + 22, + -25, + 19, + -22, + 26, + -20, + 24, + -21, + 20, + -18, + 24, + -17, + 21, + -16, + 19, + -18, + 18, + -14, + 18, + -14, + 19, + -14, + 16, + -12, + 15, + -12, + 12, + -13, + 13, + -9, + 11, + -10, + 12, + -7, + 9, + -9, + 10, + -127, + 126, + -127, + 127, + -120, + 124, + -120, + 123, + -80, + 84, + -76, + 103, + -50, + 46, + -45, + 48, + -25, + 47, + -45, + 48, + -27, + 23, + -52, + 30, + -24, + 17, + -17, + 17, + -17, + 21, + -19, + 22, + -18, + 24, + -16, + 16, + -17, + 19, + -13, + 14, + -54, + 36, + -69, + 64, + -77, + 100, + -97, + 82, + -78, + 103, + -82, + 104, + -80, + 91, + -73, + 103, + -124, + 126, + -127, + 124, + -126, + 120, + -122, + 120, + -107, + 98, + -104, + 97, + -108, + 110, + -113, + 106, + -103, + 120, + -107, + 104, + -107, + 109, + -107, + 116, + -93, + 101, + -84, + 111, + -99, + 104, + -73, + 80, + -97, + 105, + -88, + 73, + -83, + 98, + -49, + 55, + -97, + 95, + -77, + 74, + -109, + 119, + -108, + 106, + -94, + 91, + -85, + 110, + -104, + 75, + -77, + 104, + -127, + 127, + -127, + 127, + -127, + 120, + -127, + 123, + -120, + 114, + -109, + 119, + -66, + 89, + -100, + 106, + -62, + 79, + -64, + 86, + -67, + 89, + -71, + 85, + -84, + 85, + -80, + 86, + -88, + 89, + -62, + 79, + -110, + 121, + -104, + 106, + -73, + 74, + -77, + 93, + -64, + 61, + -80, + 74, + -87, + 84, + -101, + 101, + -91, + 84, + -95, + 108, + -82, + 77, + -76, + 100, + -105, + 120, + -122, + 119, + -121, + 124, + -121, + 125, + -106, + 93, + -88, + 105, + -75, + 71, + -87, + 79, + -65, + 68, + -56, + 56, + -79, + 74, + -70, + 64, + -77, + 75, + -64, + 69, + -70, + 55, + -69, + 69, + -63, + 50, + -63, + 63, + -61, + 49, + -63, + 54, + -36, + 36, + -39, + 35, + -24, + 23, + -22, + 21, + -17, + 12, + -15, + 16, + -18, + 12, + -12, + 14, + -122, + 127, + -127, + 125, + -127, + 127, + -127, + 127, + -113, + 92, + -103, + 104, + -52, + 79, + -54, + 75, + -34, + 52, + -47, + 51, + -25, + 29, + -43, + 32, + -21, + 22, + -19, + 35, + -62, + 74, + -72, + 68, + -74, + 82, + -74, + 81, + -48, + 34, + -22, + 48, + -59, + 70, + -59, + 58, + -91, + 103, + -120, + 108, + -100, + 97, + -106, + 113, + -101, + 102, + -83, + 112, + -125, + 111, + -127, + 120, + -122, + 123, + -124, + 124, + -100, + 69, + -87, + 110, + -85, + 110, + -85, + 123, + -101, + 97, + -107, + 100, + -99, + 103, + -103, + 108, + -126, + 106, + -118, + 122, + -113, + 103, + -106, + 122, + -99, + 92, + -99, + 117, + -93, + 82, + -104, + 109, + -69, + 82, + -58, + 86, + -124, + 118, + -110, + 92, + -103, + 106, + -99, + 98, + -103, + 75, + -85, + 97, + -121, + 120, + -119, + 104, + -127, + 127, + -127, + 127, + -120, + 119, + -110, + 122, + -94, + 101, + -82, + 102, + -78, + 86, + -68, + 104, + -67, + 67, + -73, + 91, + -82, + 84, + -94, + 98, + -80, + 99, + -84, + 101, + -103, + 95, + -111, + 101, + -91, + 82, + -102, + 88, + -72, + 56, + -76, + 69, + -106, + 95, + -100, + 106, + -105, + 96, + -102, + 102, + -102, + 107, + -82, + 118, + -62, + 70, + -45, + 89, + -125, + 127, + -124, + 124, + -122, + 121, + -123, + 120, + -118, + 73, + -84, + 56, + -77, + 85, + -78, + 87, + -99, + 82, + -95, + 73, + -67, + 67, + -74, + 74, + -76, + 63, + -72, + 68, + -65, + 53, + -63, + 53, + -52, + 66, + -56, + 61, + -37, + 38, + -34, + 33, + -17, + 24, + -20, + 19, + -71, + 88, + -78, + 90, + -54, + 56, + -49, + 58, + -47, + 71, + -49, + 69, + -127, + 127, + -127, + 127, + -120, + 127, + -118, + 126, + -80, + 94, + -91, + 118, + -87, + 100, + -98, + 80, + -79, + 70, + -79, + 76, + -69, + 56, + -92, + 64, + -28, + 31, + -35, + 27, + -77, + 63, + -84, + 64, + -80, + 102, + -81, + 82, + -71, + 66, + -76, + 56, + -82, + 75, + -72, + 68, + -89, + 97, + -104, + 76, + -85, + 99, + -87, + 79, + -89, + 107, + -109, + 116, + -125, + 122, + -123, + 125, + -124, + 127, + -125, + 124, + -122, + 127, + -109, + 111, + -119, + 112, + -107, + 117, + -117, + 105, + -106, + 107, + -109, + 113, + -112, + 122, + -120, + 100, + -100, + 118, + -115, + 96, + -98, + 114, + -97, + 90, + -91, + 105, + -68, + 91, + -66, + 77, + -68, + 55, + -76, + 59, + -104, + 88, + -102, + 102, + -83, + 68, + -92, + 53, + -78, + 68, + -77, + 60, + -127, + 127, + -127, + 127, + -126, + 124, + -126, + 121, + -99, + 72, + -89, + 73, + -81, + 80, + -70, + 66, + -68, + 84, + -54, + 56, + -48, + 72, + -54, + 56, + -39, + 47, + -41, + 44, + -104, + 89, + -94, + 102, + -97, + 87, + -85, + 76, + -88, + 81, + -87, + 55, + -84, + 86, + -93, + 61, + -80, + 86, + -95, + 66, + -68, + 82, + -96, + 67, + -77, + 86, + -91, + 64, + -107, + 119, + -111, + 119, + -119, + 106, + -116, + 103, + -71, + 60, + -59, + 79, + -36, + 44, + -38, + 43, + -42, + 36, + -35, + 36, + -20, + 19, + -22, + 28, + -20, + 18, + -25, + 25, + -17, + 19, + -18, + 21, + -19, + 22, + -20, + 21, + -16, + 16, + -16, + 17, + -15, + 20, + -19, + 19, + -65, + 47, + -61, + 49, + -52, + 56, + -54, + 52, + -61, + 47, + -61, + 53, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -120, + 101, + -104, + 105, + -76, + 79, + -88, + 90, + -60, + 78, + -86, + 89, + -60, + 68, + -69, + 57, + -34, + 35, + -29, + 48, + -62, + 70, + -66, + 72, + -106, + 79, + -87, + 104, + -84, + 88, + -81, + 69, + -60, + 79, + -83, + 78, + -103, + 127, + -93, + 122, + -99, + 101, + -82, + 93, + -83, + 91, + -92, + 91, + -119, + 118, + -120, + 119, + -127, + 127, + -127, + 122, + -122, + 100, + -127, + 117, + -96, + 118, + -94, + 117, + -100, + 106, + -114, + 110, + -109, + 113, + -104, + 119, + -98, + 92, + -94, + 91, + -104, + 80, + -91, + 90, + -106, + 65, + -90, + 101, + -106, + 67, + -94, + 88, + -84, + 59, + -72, + 80, + -120, + 95, + -95, + 104, + -111, + 99, + -98, + 93, + -91, + 72, + -73, + 58, + -125, + 123, + -123, + 118, + -126, + 127, + -127, + 127, + -105, + 108, + -100, + 93, + -78, + 76, + -82, + 68, + -72, + 87, + -61, + 58, + -46, + 80, + -62, + 59, + -40, + 56, + -38, + 49, + -76, + 39, + -86, + 39, + -105, + 88, + -99, + 94, + -89, + 82, + -81, + 62, + -90, + 80, + -90, + 57, + -90, + 77, + -93, + 57, + -76, + 79, + -95, + 59, + -69, + 88, + -90, + 63, + -66, + 89, + -85, + 67, + -119, + 121, + -116, + 119, + -104, + 103, + -102, + 86, + -57, + 47, + -35, + 42, + -44, + 43, + -38, + 35, + -27, + 27, + -24, + 27, + -22, + 21, + -23, + 26, + -19, + 22, + -25, + 22, + -17, + 24, + -21, + 23, + -18, + 21, + -16, + 19, + -15, + 19, + -13, + 16, + -14, + 15, + -15, + 15, + -10, + 12, + -12, + 13, + -9, + 11, + -9, + 11, + -7, + 8, + -7, + 6, + -127, + 127, + -127, + 127, + -125, + 126, + -110, + 115, + -82, + 81, + -76, + 93, + -54, + 49, + -52, + 45, + -72, + 69, + -87, + 66, + -98, + 64, + -101, + 73, + -94, + 65, + -101, + 79, + -95, + 83, + -84, + 80, + -108, + 79, + -104, + 83, + -105, + 73, + -89, + 84, + -105, + 78, + -96, + 78, + -95, + 90, + -99, + 95, + -110, + 79, + -108, + 109, + -117, + 90, + -100, + 96, + -122, + 123, + -123, + 121, + -120, + 121, + -121, + 121, + -113, + 99, + -115, + 121, + -102, + 127, + -117, + 108, + -124, + 127, + -100, + 124, + -105, + 103, + -72, + 103, + -44, + 78, + -49, + 69, + -83, + 92, + -102, + 75, + -96, + 116, + -121, + 88, + -86, + 80, + -71, + 75, + -86, + 113, + -69, + 96, + -100, + 122, + -122, + 100, + -88, + 87, + -114, + 108, + -86, + 86, + -95, + 94, + -127, + 127, + -127, + 127, + -124, + 125, + -124, + 123, + -117, + 117, + -83, + 108, + -83, + 99, + -70, + 113, + -84, + 77, + -63, + 89, + -72, + 78, + -60, + 89, + -42, + 39, + -37, + 39, + -111, + 86, + -125, + 92, + -94, + 103, + -107, + 89, + -65, + 62, + -73, + 91, + -100, + 71, + -94, + 85, + -83, + 89, + -106, + 99, + -90, + 76, + -101, + 102, + -72, + 64, + -50, + 94, + -119, + 120, + -120, + 120, + -124, + 119, + -121, + 119, + -102, + 81, + -86, + 102, + -46, + 48, + -53, + 50, + -114, + 109, + -104, + 117, + -81, + 77, + -74, + 76, + -63, + 58, + -67, + 71, + -65, + 64, + -67, + 70, + -58, + 57, + -64, + 73, + -52, + 53, + -46, + 54, + -43, + 44, + -41, + 45, + -18, + 15, + -16, + 15, + -13, + 10, + -12, + 12, + -9, + 10, + -11, + 11, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -109, + 101, + -109, + 104, + -61, + 70, + -61, + 69, + -51, + 62, + -59, + 65, + -41, + 40, + -44, + 35, + -24, + 20, + -23, + 31, + -68, + 75, + -74, + 78, + -62, + 77, + -66, + 80, + -25, + 29, + -20, + 25, + -63, + 76, + -62, + 64, + -104, + 104, + -106, + 88, + -102, + 113, + -108, + 109, + -102, + 113, + -111, + 127, + -125, + 117, + -126, + 118, + -125, + 124, + -123, + 124, + -107, + 109, + -120, + 116, + -113, + 99, + -119, + 103, + -114, + 119, + -118, + 120, + -107, + 88, + -116, + 118, + -81, + 81, + -81, + 72, + -106, + 54, + -54, + 86, + -124, + 118, + -91, + 100, + -113, + 112, + -75, + 89, + -82, + 88, + -85, + 76, + -106, + 105, + -105, + 101, + -81, + 87, + -82, + 83, + -41, + 46, + -47, + 59, + -126, + 126, + -127, + 124, + -127, + 127, + -127, + 127, + -122, + 110, + -117, + 116, + -78, + 114, + -87, + 93, + -84, + 97, + -71, + 104, + -80, + 82, + -68, + 77, + -50, + 37, + -41, + 49, + -56, + 87, + -54, + 81, + -105, + 114, + -119, + 101, + -70, + 65, + -89, + 75, + -72, + 87, + -86, + 90, + -71, + 74, + -99, + 90, + -63, + 62, + -100, + 93, + -36, + 35, + -50, + 64, + -105, + 87, + -86, + 105, + -122, + 125, + -124, + 125, + -117, + 120, + -120, + 112, + -99, + 95, + -93, + 78, + -69, + 43, + -61, + 34, + -75, + 64, + -82, + 72, + -79, + 67, + -80, + 65, + -69, + 65, + -71, + 63, + -68, + 58, + -74, + 60, + -52, + 58, + -48, + 54, + -18, + 21, + -20, + 20, + -16, + 16, + -15, + 24, + -56, + 46, + -53, + 57, + -46, + 42, + -44, + 44, + -95, + 106, + -92, + 111, + -127, + 127, + -127, + 127, + -121, + 124, + -124, + 118, + -89, + 83, + -75, + 84, + -79, + 77, + -94, + 86, + -81, + 75, + -88, + 85, + -58, + 75, + -67, + 73, + -22, + 25, + -19, + 25, + -90, + 91, + -92, + 79, + -80, + 79, + -74, + 82, + -73, + 77, + -75, + 66, + -104, + 106, + -94, + 78, + -93, + 97, + -67, + 84, + -83, + 81, + -86, + 101, + -95, + 86, + -90, + 109, + -124, + 123, + -124, + 121, + -118, + 124, + -123, + 122, + -113, + 116, + -109, + 118, + -78, + 88, + -100, + 98, + -92, + 77, + -89, + 89, + -101, + 84, + -108, + 102, + -83, + 79, + -106, + 95, + -88, + 90, + -105, + 98, + -76, + 74, + -95, + 102, + -78, + 59, + -67, + 82, + -65, + 59, + -67, + 67, + -104, + 87, + -98, + 103, + -88, + 79, + -71, + 57, + -94, + 80, + -78, + 62, + -127, + 127, + -127, + 125, + -126, + 122, + -121, + 120, + -97, + 70, + -95, + 74, + -72, + 80, + -70, + 68, + -60, + 83, + -56, + 56, + -40, + 68, + -43, + 50, + -36, + 41, + -42, + 45, + -104, + 73, + -89, + 104, + -94, + 82, + -88, + 85, + -87, + 73, + -79, + 51, + -87, + 68, + -78, + 48, + -82, + 73, + -74, + 50, + -74, + 79, + -79, + 53, + -63, + 79, + -78, + 53, + -117, + 119, + -116, + 119, + -119, + 106, + -117, + 97, + -76, + 67, + -63, + 83, + -48, + 40, + -37, + 41, + -33, + 39, + -30, + 34, + -22, + 25, + -24, + 27, + -18, + 20, + -25, + 26, + -18, + 20, + -24, + 25, + -20, + 20, + -20, + 19, + -15, + 19, + -17, + 21, + -13, + 16, + -17, + 14, + -13, + 12, + -12, + 14, + -10, + 13, + -11, + 11, + -9, + 9, + -8, + 9, + -125, + 127, + -127, + 127, + -127, + 122, + -127, + 127, + -119, + 105, + -115, + 116, + -88, + 93, + -75, + 111, + -73, + 74, + -80, + 101, + -68, + 65, + -50, + 43, + -33, + 27, + -23, + 33, + -78, + 93, + -59, + 78, + -86, + 50, + -105, + 56, + -67, + 53, + -60, + 49, + -62, + 48, + -60, + 52, + -93, + 103, + -99, + 97, + -63, + 49, + -50, + 72, + -70, + 110, + -91, + 115, + -107, + 127, + -125, + 122, + -124, + 123, + -126, + 123, + -117, + 114, + -104, + 119, + -93, + 110, + -93, + 105, + -106, + 92, + -106, + 107, + -104, + 104, + -98, + 122, + -90, + 68, + -87, + 77, + -77, + 59, + -83, + 77, + -71, + 54, + -73, + 78, + -72, + 73, + -67, + 80, + -54, + 92, + -74, + 79, + -115, + 88, + -106, + 106, + -102, + 101, + -103, + 79, + -90, + 76, + -91, + 55, + -126, + 123, + -127, + 122, + -127, + 127, + -127, + 127, + -104, + 65, + -106, + 71, + -68, + 73, + -82, + 71, + -63, + 77, + -56, + 54, + -42, + 65, + -53, + 47, + -42, + 51, + -39, + 46, + -68, + 37, + -53, + 38, + -105, + 104, + -105, + 103, + -78, + 58, + -82, + 67, + -77, + 63, + -81, + 67, + -75, + 64, + -79, + 63, + -70, + 66, + -70, + 51, + -59, + 69, + -61, + 51, + -63, + 118, + -87, + 119, + -119, + 118, + -118, + 120, + -84, + 104, + -96, + 89, + -48, + 50, + -35, + 40, + -43, + 49, + -35, + 34, + -19, + 30, + -24, + 30, + -25, + 23, + -28, + 31, + -20, + 24, + -22, + 27, + -20, + 21, + -20, + 24, + -16, + 21, + -15, + 20, + -15, + 16, + -15, + 14, + -13, + 14, + -14, + 16, + -11, + 13, + -10, + 12, + -9, + 10, + -10, + 11, + -55, + 38, + -63, + 31, + -127, + 127, + -127, + 127, + -115, + 125, + -116, + 113, + -77, + 79, + -75, + 76, + -53, + 49, + -46, + 53, + -75, + 72, + -85, + 70, + -105, + 58, + -88, + 76, + -99, + 58, + -90, + 80, + -92, + 87, + -95, + 81, + -85, + 72, + -76, + 72, + -94, + 73, + -117, + 79, + -99, + 100, + -105, + 117, + -98, + 106, + -75, + 70, + -82, + 71, + -88, + 73, + -85, + 62, + -99, + 74, + -122, + 124, + -120, + 123, + -120, + 119, + -120, + 121, + -116, + 90, + -104, + 97, + -98, + 101, + -122, + 101, + -102, + 77, + -81, + 75, + -71, + 107, + -72, + 90, + -97, + 102, + -115, + 93, + -108, + 127, + -120, + 111, + -105, + 118, + -111, + 115, + -91, + 95, + -99, + 78, + -101, + 84, + -116, + 107, + -108, + 115, + -121, + 113, + -65, + 71, + -71, + 71, + -85, + 52, + -69, + 64, + -127, + 127, + -127, + 127, + -116, + 127, + -117, + 123, + -88, + 95, + -83, + 110, + -82, + 79, + -81, + 86, + -70, + 59, + -83, + 79, + -52, + 40, + -57, + 39, + -58, + 55, + -58, + 52, + -103, + 114, + -110, + 115, + -89, + 65, + -72, + 91, + -80, + 73, + -73, + 95, + -92, + 95, + -92, + 113, + -86, + 79, + -102, + 107, + -80, + 70, + -92, + 100, + -41, + 35, + -75, + 52, + -120, + 120, + -120, + 119, + -120, + 111, + -122, + 103, + -109, + 102, + -104, + 106, + -66, + 69, + -53, + 73, + -80, + 74, + -86, + 105, + -74, + 63, + -52, + 69, + -69, + 67, + -67, + 70, + -73, + 78, + -65, + 71, + -59, + 84, + -61, + 73, + -70, + 64, + -56, + 48, + -72, + 59, + -88, + 71, + -74, + 64, + -60, + 105, + -50, + 54, + -50, + 58, + -52, + 56, + -44, + 62, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -106, + 97, + -109, + 103, + -47, + 60, + -61, + 47, + -75, + 73, + -64, + 85, + -57, + 59, + -77, + 71, + -51, + 52, + -59, + 59, + -85, + 79, + -100, + 79, + -59, + 67, + -62, + 70, + -51, + 66, + -61, + 50, + -40, + 38, + -46, + 38, + -106, + 105, + -109, + 110, + -104, + 121, + -94, + 94, + -109, + 115, + -104, + 103, + -124, + 126, + -125, + 108, + -121, + 123, + -124, + 117, + -106, + 102, + -92, + 107, + -110, + 103, + -92, + 94, + -92, + 97, + -94, + 103, + -108, + 102, + -108, + 116, + -102, + 102, + -93, + 81, + -117, + 104, + -88, + 98, + -103, + 104, + -81, + 75, + -80, + 99, + -63, + 86, + -93, + 76, + -88, + 74, + -123, + 109, + -123, + 117, + -72, + 60, + -57, + 83, + -44, + 52, + -61, + 78, + -123, + 123, + -127, + 124, + -127, + 127, + -127, + 127, + -104, + 93, + -113, + 116, + -48, + 102, + -93, + 87, + -61, + 58, + -73, + 85, + -38, + 52, + -51, + 55, + -86, + 71, + -84, + 80, + -85, + 116, + -103, + 101, + -96, + 123, + -97, + 116, + -95, + 81, + -87, + 107, + -101, + 88, + -93, + 114, + -84, + 86, + -73, + 103, + -78, + 80, + -74, + 94, + -77, + 70, + -78, + 83, + -120, + 120, + -120, + 118, + -121, + 121, + -122, + 120, + -104, + 104, + -114, + 111, + -97, + 100, + -86, + 92, + -72, + 86, + -81, + 76, + -48, + 56, + -57, + 41, + -55, + 46, + -57, + 46, + -76, + 85, + -82, + 84, + -76, + 104, + -87, + 109, + -50, + 69, + -65, + 75, + -52, + 60, + -56, + 58, + -93, + 84, + -88, + 74, + -77, + 65, + -37, + 55, + -23, + 35, + -24, + 36, + -123, + 119, + -123, + 119, + -127, + 127, + -127, + 127, + -121, + 109, + -108, + 119, + -88, + 86, + -99, + 96, + -56, + 63, + -62, + 63, + -65, + 71, + -70, + 54, + -48, + 52, + -53, + 51, + -54, + 44, + -55, + 43, + -73, + 94, + -91, + 89, + -77, + 74, + -65, + 99, + -49, + 58, + -47, + 62, + -97, + 99, + -74, + 86, + -91, + 104, + -112, + 81, + -59, + 50, + -58, + 73, + -48, + 53, + -62, + 74, + -122, + 121, + -123, + 122, + -118, + 119, + -120, + 118, + -105, + 105, + -97, + 116, + -103, + 104, + -107, + 119, + -103, + 104, + -80, + 120, + -85, + 55, + -78, + 93, + -68, + 82, + -90, + 106, + -95, + 86, + -98, + 103, + -54, + 62, + -90, + 93, + -47, + 55, + -79, + 90, + -93, + 101, + -98, + 100, + -125, + 98, + -110, + 105, + -82, + 72, + -70, + 54, + -85, + 66, + -73, + 55, + -127, + 127, + -127, + 127, + -121, + 126, + -125, + 125, + -80, + 76, + -79, + 70, + -75, + 70, + -74, + 62, + -44, + 59, + -57, + 41, + -45, + 43, + -46, + 33, + -41, + 33, + -40, + 33, + -111, + 110, + -104, + 87, + -86, + 86, + -102, + 66, + -52, + 51, + -78, + 55, + -59, + 49, + -80, + 54, + -59, + 50, + -74, + 58, + -60, + 72, + -73, + 49, + -48, + 76, + -60, + 50, + -115, + 119, + -113, + 119, + -120, + 110, + -118, + 99, + -73, + 67, + -62, + 88, + -45, + 47, + -37, + 41, + -29, + 38, + -26, + 35, + -22, + 18, + -22, + 25, + -16, + 20, + -18, + 23, + -54, + 73, + -52, + 75, + -31, + 37, + -30, + 30, + -23, + 25, + -19, + 21, + -14, + 17, + -12, + 13, + -13, + 11, + -10, + 12, + -7, + 9, + -8, + 9, + -6, + 8, + -7, + 7, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -103, + 93, + -97, + 102, + -45, + 54, + -46, + 49, + -30, + 49, + -40, + 48, + -28, + 27, + -45, + 30, + -20, + 18, + -18, + 26, + -66, + 55, + -63, + 72, + -39, + 32, + -22, + 26, + -26, + 25, + -64, + 41, + -102, + 80, + -104, + 102, + -89, + 99, + -105, + 99, + -87, + 86, + -96, + 108, + -74, + 80, + -101, + 88, + -123, + 122, + -127, + 123, + -127, + 126, + -127, + 127, + -121, + 104, + -108, + 120, + -103, + 100, + -108, + 96, + -96, + 106, + -107, + 111, + -85, + 95, + -66, + 90, + -79, + 91, + -78, + 98, + -70, + 64, + -70, + 61, + -63, + 81, + -61, + 81, + -95, + 85, + -69, + 87, + -64, + 77, + -50, + 69, + -123, + 118, + -111, + 116, + -50, + 60, + -75, + 94, + -54, + 60, + -54, + 63, + -116, + 120, + -118, + 109, + -102, + 105, + -102, + 114, + -63, + 94, + -54, + 73, + -57, + 71, + -60, + 68, + -56, + 79, + -55, + 103, + -65, + 56, + -40, + 42, + -61, + 54, + -48, + 47, + -127, + 124, + -124, + 118, + -119, + 123, + -102, + 115, + -73, + 52, + -54, + 63, + -47, + 52, + -36, + 48, + -34, + 50, + -40, + 62, + -49, + 69, + -51, + 101, + -33, + 36, + -17, + 21, + -20, + 20, + -21, + 19, + -78, + 96, + -86, + 77, + -72, + 63, + -77, + 83, + -74, + 85, + -73, + 90, + -125, + 116, + -119, + 121, + -80, + 76, + -86, + 72, + -14, + 10, + -14, + 15, + -113, + 105, + -89, + 85, + -120, + 113, + -123, + 114, + -73, + 72, + -75, + 65, + -76, + 67, + -61, + 64, + -63, + 60, + -47, + 55, + -18, + 19, + -19, + 14, + -16, + 18, + -16, + 16, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 125, + -120, + 117, + -104, + 117, + -74, + 119, + -82, + 93, + -91, + 95, + -89, + 97, + -102, + 86, + -107, + 101, + -93, + 105, + -105, + 117, + -112, + 94, + -123, + 107, + -107, + 102, + -123, + 104, + -115, + 98, + -120, + 111, + -93, + 107, + -110, + 109, + -88, + 105, + -105, + 84, + -107, + 104, + -104, + 104, + -126, + 120, + -121, + 120, + -127, + 126, + -127, + 126, + -124, + 126, + -126, + 124, + -103, + 104, + -107, + 92, + -118, + 110, + -120, + 117, + -122, + 121, + -119, + 122, + -119, + 120, + -98, + 95, + -121, + 119, + -119, + 105, + -103, + 115, + -127, + 127, + -124, + 126, + -118, + 125, + -126, + 119, + -119, + 121, + -120, + 127, + -125, + 123, + -120, + 124, + -114, + 123, + -120, + 123, + -98, + 121, + -114, + 121, + -118, + 122, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -123, + 124, + -122, + 126, + -122, + 120, + -120, + 120, + -122, + 123, + -123, + 125, + -120, + 121, + -116, + 124, + -113, + 111, + -121, + 125, + -127, + 127, + -127, + 127, + -127, + 125, + -123, + 125, + -126, + 127, + -124, + 110, + -123, + 124, + -121, + 119, + -126, + 127, + -121, + 111, + -121, + 127, + -117, + 118, + -120, + 123, + -125, + 124, + -127, + 127, + -127, + 127, + -122, + 124, + -126, + 126, + -122, + 120, + -114, + 121, + -117, + 118, + -121, + 106, + -119, + 126, + -120, + 122, + -121, + 120, + -120, + 119, + -120, + 119, + -122, + 121, + -126, + 127, + -122, + 125, + -127, + 125, + -127, + 122, + -122, + 123, + -113, + 121, + -114, + 115, + -122, + 126, + -125, + 126, + -127, + 125, + -116, + 121, + -122, + 122, + -122, + 121, + -120, + 122, + -127, + 127, + -127, + 127, + -126, + 127, + -126, + 127, + -127, + 127, + -122, + 126, + -122, + 114, + -117, + 120, + -116, + 120, + -102, + 109, + -122, + 111, + -110, + 116, + -109, + 115, + -114, + 120, + -121, + 106, + -127, + 120, + -122, + 119, + -122, + 123, + -91, + 104, + -124, + 122, + -110, + 114, + -123, + 120, + -121, + 120, + -121, + 124, + -119, + 124, + -118, + 116, + -124, + 124, + -121, + 121, + -126, + 127, + -124, + 127, + -127, + 127, + -125, + 127, + -123, + 122, + -125, + 125, + -119, + 124, + -124, + 122, + -120, + 127, + -122, + 124, + -122, + 122, + -123, + 125, + -121, + 119, + -122, + 125, + -125, + 125, + -127, + 125, + -126, + 127, + -122, + 124, + -119, + 127, + -121, + 125, + -123, + 119, + -119, + 125, + -126, + 124, + -124, + 123, + -125, + 121, + -123, + 124, + -122, + 119, + -122, + 123, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -126, + 126, + -126, + 124, + -124, + 115, + -122, + 119, + -124, + 119, + -126, + 119, + -115, + 119, + -114, + 120, + -119, + 123, + -121, + 127, + -122, + 124, + -127, + 127, + -127, + 127, + -124, + 123, + -125, + 127, + -122, + 124, + -118, + 123, + -124, + 121, + -122, + 121, + -122, + 118, + -123, + 123, + -122, + 122, + -122, + 122, + -122, + 123, + -125, + 127, + -126, + 126, + -126, + 125, + -118, + 114, + -122, + 121, + -89, + 108, + -102, + 96, + -120, + 92, + -92, + 101, + -97, + 101, + -88, + 76, + -78, + 81, + -96, + 94, + -107, + 105, + -127, + 121, + -123, + 117, + -127, + 122, + -105, + 120, + -122, + 117, + -101, + 73, + -93, + 103, + -121, + 122, + -85, + 104, + -126, + 119, + -102, + 113, + -85, + 104, + -106, + 97, + -127, + 127, + -126, + 124, + -127, + 127, + -127, + 127, + -127, + 122, + -124, + 127, + -127, + 114, + -118, + 115, + -127, + 125, + -127, + 124, + -127, + 126, + -104, + 125, + -107, + 110, + -87, + 108, + -120, + 121, + -110, + 127, + -127, + 127, + -127, + 127, + -122, + 125, + -126, + 127, + -122, + 109, + -122, + 122, + -124, + 126, + -125, + 127, + -120, + 116, + -124, + 121, + -96, + 98, + -122, + 117, + -119, + 111, + -101, + 127, + -127, + 125, + -127, + 127, + -122, + 123, + -125, + 124, + -121, + 118, + -124, + 123, + -104, + 121, + -118, + 119, + -121, + 121, + -110, + 121, + -120, + 120, + -107, + 121, + -117, + 120, + -109, + 120, + -126, + 126, + -122, + 127, + -123, + 125, + -123, + 122, + -100, + 102, + -110, + 121, + -119, + 123, + -113, + 127, + -120, + 113, + -120, + 122, + -108, + 93, + -118, + 97, + -84, + 87, + -124, + 85, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -125, + 110, + -122, + 111, + -108, + 101, + -108, + 77, + -92, + 115, + -69, + 103, + -112, + 100, + -106, + 87, + -83, + 72, + -97, + 79, + -127, + 127, + -127, + 127, + -103, + 111, + -119, + 118, + -89, + 96, + -91, + 86, + -102, + 109, + -120, + 92, + -105, + 107, + -122, + 81, + -93, + 116, + -90, + 100, + -90, + 106, + -115, + 88, + -127, + 126, + -127, + 123, + -111, + 124, + -110, + 109, + -64, + 74, + -54, + 92, + -73, + 94, + -62, + 62, + -102, + 94, + -58, + 60, + -70, + 82, + -61, + 51, + -49, + 67, + -62, + 56, + -122, + 100, + -127, + 118, + -115, + 118, + -110, + 115, + -84, + 73, + -119, + 99, + -102, + 88, + -84, + 94, + -111, + 126, + -111, + 102, + -77, + 110, + -103, + 96, + -68, + 88, + -74, + 66, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -122, + 125, + -122, + 124, + -123, + 110, + -119, + 94, + -99, + 97, + -110, + 91, + -78, + 87, + -73, + 82, + -98, + 98, + -98, + 79, + -121, + 106, + -122, + 122, + -87, + 116, + -90, + 102, + -77, + 119, + -97, + 104, + -106, + 124, + -85, + 105, + -116, + 120, + -121, + 122, + -78, + 105, + -78, + 83, + -70, + 77, + -91, + 91, + -127, + 126, + -127, + 125, + -125, + 122, + -127, + 126, + -123, + 123, + -119, + 123, + -105, + 114, + -101, + 113, + -115, + 124, + -119, + 120, + -105, + 118, + -118, + 113, + -89, + 80, + -112, + 118, + -104, + 114, + -121, + 109, + -99, + 114, + -124, + 117, + -106, + 118, + -114, + 117, + -97, + 86, + -116, + 119, + -121, + 123, + -124, + 127, + -109, + 116, + -97, + 119, + -96, + 116, + -101, + 115, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 125, + -120, + 127, + -121, + 118, + -122, + 118, + -126, + 90, + -101, + 111, + -86, + 85, + -73, + 78, + -81, + 77, + -64, + 79, + -126, + 127, + -107, + 107, + -123, + 127, + -124, + 127, + -104, + 114, + -94, + 120, + -113, + 85, + -106, + 107, + -111, + 117, + -103, + 99, + -97, + 115, + -109, + 100, + -91, + 118, + -88, + 79, + -123, + 125, + -118, + 127, + -123, + 124, + -127, + 126, + -83, + 75, + -71, + 90, + -55, + 76, + -74, + 58, + -86, + 96, + -54, + 66, + -88, + 81, + -59, + 64, + -67, + 67, + -58, + 64, + -101, + 108, + -111, + 104, + -100, + 100, + -120, + 127, + -102, + 99, + -99, + 102, + -86, + 105, + -95, + 116, + -119, + 124, + -112, + 122, + -112, + 115, + -101, + 118, + -88, + 108, + -95, + 105, + -127, + 126, + -127, + 125, + -127, + 127, + -127, + 127, + -123, + 123, + -127, + 127, + -118, + 119, + -120, + 108, + -127, + 127, + -127, + 127, + -127, + 127, + -126, + 127, + -127, + 126, + -127, + 127, + -124, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -125, + 127, + -121, + 123, + -114, + 124, + -124, + 124, + -127, + 126, + -127, + 127, + -122, + 123, + -119, + 127, + -123, + 115, + -124, + 125, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -123, + 125, + -124, + 123, + -102, + 110, + -108, + 114, + -126, + 126, + -120, + 98, + -123, + 124, + -94, + 108, + -120, + 102, + -89, + 121, + -122, + 120, + -123, + 119, + -121, + 127, + -123, + 122, + -124, + 123, + -123, + 125, + -122, + 123, + -123, + 123, + -127, + 107, + -124, + 125, + -122, + 126, + -119, + 125, + -124, + 123, + -121, + 117, + -124, + 126, + -127, + 127, + -127, + 127, + -127, + 127, + -123, + 127, + -125, + 127, + -127, + 118, + -124, + 123, + -109, + 124, + -122, + 115, + -122, + 123, + -121, + 122, + -123, + 123, + -120, + 121, + -100, + 126, + -108, + 107, + -127, + 127, + -124, + 127, + -123, + 126, + -121, + 124, + -126, + 125, + -119, + 126, + -110, + 122, + -120, + 119, + -116, + 123, + -123, + 122, + -113, + 104, + -122, + 117, + -114, + 122, + -120, + 121, + -124, + 127, + -125, + 127, + -124, + 124, + -127, + 123, + -123, + 116, + -121, + 112, + -114, + 102, + -121, + 125, + -121, + 120, + -124, + 121, + -100, + 122, + -118, + 118, + -121, + 118, + -118, + 121, + -125, + 123, + -127, + 126, + -127, + 126, + -118, + 124, + -123, + 120, + -119, + 86, + -122, + 121, + -123, + 101, + -124, + 127, + -117, + 127, + -104, + 121, + -119, + 121, + -91, + 113, + -125, + 119, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -116, + 127, + -120, + 124, + -115, + 112, + -116, + 123, + -119, + 113, + -117, + 121, + -108, + 106, + -122, + 125, + -116, + 103, + -107, + 118, + -119, + 111, + -127, + 118, + -109, + 122, + -117, + 110, + -103, + 121, + -116, + 100, + -118, + 119, + -78, + 118, + -125, + 125, + -124, + 123, + -121, + 123, + -124, + 119, + -123, + 127, + -126, + 125, + -127, + 127, + -127, + 127, + -126, + 123, + -127, + 127, + -124, + 123, + -124, + 124, + -124, + 123, + -119, + 123, + -123, + 124, + -120, + 124, + -121, + 118, + -120, + 124, + -120, + 123, + -122, + 125, + -127, + 126, + -123, + 121, + -127, + 125, + -119, + 126, + -121, + 125, + -118, + 122, + -126, + 119, + -111, + 120, + -127, + 127, + -122, + 126, + -127, + 124, + -115, + 122, + -124, + 121, + -117, + 122, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 120, + -122, + 126, + -117, + 96, + -125, + 122, + -120, + 121, + -123, + 120, + -119, + 123, + -121, + 125, + -123, + 120, + -123, + 124, + -126, + 127, + -117, + 127, + -127, + 126, + -125, + 127, + -122, + 125, + -124, + 122, + -119, + 122, + -123, + 119, + -119, + 121, + -119, + 124, + -119, + 122, + -127, + 123, + -120, + 122, + -121, + 121, + -123, + 122, + -124, + 124, + -123, + 125, + -125, + 124, + -121, + 123, + -119, + 121, + -92, + 121, + -119, + 107, + -120, + 120, + -112, + 106, + -104, + 121, + -100, + 100, + -100, + 105, + -94, + 105, + -101, + 116, + -127, + 114, + -99, + 103, + -126, + 127, + -123, + 92, + -116, + 105, + -86, + 78, + -99, + 78, + -124, + 120, + -125, + 121, + -107, + 116, + -109, + 115, + -96, + 77, + -101, + 102, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 126, + -125, + 127, + -103, + 123, + -127, + 120, + -127, + 127, + -127, + 126, + -127, + 123, + -126, + 126, + -101, + 94, + -114, + 122, + -127, + 127, + -124, + 127, + -127, + 127, + -127, + 127, + -123, + 125, + -124, + 123, + -127, + 123, + -118, + 115, + -127, + 127, + -124, + 127, + -114, + 127, + -127, + 127, + -127, + 127, + -123, + 127, + -126, + 127, + -127, + 123, + -125, + 127, + -124, + 127, + -122, + 120, + -119, + 120, + -121, + 123, + -120, + 121, + -122, + 121, + -115, + 120, + -115, + 110, + -117, + 121, + -118, + 120, + -98, + 120, + -116, + 120, + -122, + 121, + -127, + 127, + -127, + 122, + -107, + 107, + -121, + 122, + -117, + 120, + -121, + 117, + -125, + 120, + -106, + 101, + -122, + 114, + -119, + 121, + -87, + 111, + -90, + 91, + -126, + 127, + -125, + 127, + -127, + 127, + -127, + 127, + -122, + 127, + -121, + 124, + -120, + 110, + -123, + 118, + -111, + 119, + -98, + 95, + -86, + 105, + -88, + 109, + -82, + 90, + -87, + 105, + -80, + 90, + -84, + 84, + -127, + 123, + -127, + 124, + -116, + 126, + -125, + 109, + -116, + 92, + -117, + 118, + -108, + 112, + -106, + 100, + -120, + 97, + -108, + 87, + -85, + 106, + -115, + 106, + -99, + 105, + -104, + 92, + -121, + 122, + -127, + 123, + -114, + 118, + -114, + 89, + -69, + 55, + -45, + 55, + -83, + 81, + -55, + 57, + -112, + 103, + -64, + 62, + -78, + 59, + -70, + 70, + -75, + 79, + -97, + 89, + -111, + 113, + -127, + 124, + -105, + 116, + -117, + 104, + -113, + 102, + -98, + 116, + -96, + 85, + -103, + 110, + -104, + 123, + -123, + 121, + -110, + 89, + -94, + 120, + -66, + 67, + -81, + 58, + -127, + 127, + -127, + 127, + -127, + 127, + -126, + 127, + -125, + 124, + -117, + 126, + -94, + 73, + -98, + 91, + -111, + 81, + -97, + 82, + -77, + 60, + -74, + 90, + -76, + 75, + -75, + 66, + -120, + 114, + -115, + 118, + -118, + 108, + -115, + 111, + -94, + 109, + -108, + 120, + -111, + 117, + -96, + 112, + -126, + 125, + -118, + 127, + -115, + 127, + -123, + 127, + -102, + 104, + -104, + 120, + -124, + 126, + -123, + 121, + -126, + 122, + -124, + 124, + -121, + 120, + -119, + 117, + -119, + 120, + -96, + 122, + -108, + 122, + -112, + 110, + -81, + 71, + -108, + 110, + -89, + 118, + -99, + 121, + -121, + 126, + -127, + 125, + -110, + 127, + -121, + 114, + -108, + 98, + -119, + 100, + -98, + 81, + -120, + 99, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -104, + 86, + -122, + 121, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -124, + 111, + -95, + 110, + -116, + 96, + -107, + 119, + -108, + 124, + -110, + 122, + -97, + 83, + -118, + 115, + -86, + 78, + -120, + 87, + -127, + 127, + -123, + 127, + -127, + 127, + -127, + 127, + -120, + 123, + -124, + 120, + -119, + 111, + -122, + 120, + -119, + 104, + -121, + 92, + -96, + 100, + -94, + 89, + -93, + 94, + -96, + 90, + -127, + 127, + -127, + 127, + -127, + 127, + -122, + 127, + -124, + 120, + -117, + 113, + -92, + 113, + -84, + 124, + -94, + 113, + -104, + 120, + -93, + 127, + -86, + 120, + -76, + 116, + -93, + 108, + -103, + 116, + -112, + 119, + -127, + 126, + -127, + 126, + -94, + 82, + -102, + 99, + -90, + 71, + -79, + 100, + -100, + 120, + -91, + 117, + -83, + 124, + -103, + 119, + -74, + 96, + -75, + 90, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -126, + 125, + -120, + 124, + -111, + 109, + -105, + 100, + -127, + 127, + -127, + 127, + -119, + 127, + -127, + 123, + -122, + 123, + -115, + 91, + -127, + 121, + -127, + 127, + -119, + 127, + -127, + 127, + -123, + 123, + -124, + 123, + -120, + 106, + -124, + 122, + -127, + 127, + -127, + 127, + -121, + 112, + -123, + 123, + -121, + 114, + -122, + 106, + -119, + 118, + -117, + 112, + -126, + 127, + -123, + 127, + -117, + 120, + -120, + 96, + -116, + 124, + -122, + 123, + -88, + 95, + -118, + 114, + -93, + 120, + -122, + 123, + -113, + 93, + -106, + 123, + -110, + 107, + -111, + 115, + -91, + 94, + -100, + 99, + -78, + 74, + -101, + 85, + -100, + 116, + -97, + 97, + -105, + 120, + -104, + 108, + -91, + 106, + -103, + 115, + -78, + 90, + -106, + 114, + -124, + 114, + -123, + 105, + -127, + 127, + -127, + 127, + -106, + 110, + -107, + 110, + -80, + 96, + -72, + 74, + -61, + 63, + -56, + 61, + -64, + 51, + -44, + 57, + -51, + 44, + -47, + 43, + -74, + 82, + -62, + 65, + -85, + 101, + -91, + 86, + -57, + 55, + -54, + 78, + -54, + 45, + -58, + 80, + -65, + 52, + -72, + 70, + -72, + 61, + -75, + 87, + -73, + 61, + -51, + 86, + -69, + 80, + -52, + 75, + -119, + 119, + -119, + 119, + -104, + 113, + -109, + 91, + -70, + 68, + -70, + 52, + -39, + 41, + -36, + 37, + -40, + 29, + -37, + 35, + -27, + 31, + -29, + 36, + -26, + 28, + -31, + 31, + -20, + 20, + -24, + 25, + -20, + 21, + -21, + 21, + -20, + 19, + -21, + 25, + -19, + 16, + -17, + 16, + -18, + 15, + -14, + 15, + -12, + 12, + -12, + 11, + -11, + 9, + -9, + 10, + -127, + 127, + -127, + 127, + -119, + 121, + -116, + 115, + -81, + 84, + -78, + 95, + -46, + 51, + -47, + 52, + -24, + 28, + -43, + 46, + -27, + 21, + -45, + 31, + -24, + 26, + -20, + 16, + -19, + 15, + -22, + 20, + -21, + 19, + -12, + 15, + -23, + 18, + -13, + 12, + -64, + 62, + -88, + 76, + -63, + 92, + -89, + 91, + -81, + 90, + -82, + 100, + -72, + 86, + -71, + 100, + -120, + 119, + -120, + 120, + -104, + 115, + -91, + 105, + -86, + 76, + -65, + 73, + -96, + 74, + -75, + 60, + -71, + 76, + -72, + 76, + -84, + 83, + -79, + 91, + -80, + 57, + -81, + 96, + -77, + 57, + -79, + 100, + -65, + 50, + -77, + 86, + -43, + 43, + -63, + 51, + -51, + 101, + -47, + 70, + -96, + 102, + -90, + 90, + -65, + 52, + -57, + 75, + -61, + 44, + -45, + 65, + -127, + 127, + -127, + 127, + -127, + 117, + -127, + 124, + -107, + 93, + -87, + 93, + -62, + 50, + -55, + 75, + -54, + 35, + -48, + 48, + -44, + 40, + -45, + 43, + -39, + 35, + -39, + 41, + -78, + 87, + -108, + 71, + -44, + 95, + -58, + 66, + -37, + 36, + -38, + 64, + -44, + 44, + -57, + 76, + -50, + 52, + -52, + 80, + -47, + 58, + -49, + 77, + -61, + 61, + -36, + 86, + -108, + 120, + -118, + 118, + -119, + 107, + -119, + 104, + -81, + 71, + -59, + 75, + -40, + 42, + -46, + 45, + -31, + 27, + -31, + 31, + -26, + 25, + -25, + 23, + -20, + 20, + -21, + 23, + -19, + 19, + -22, + 21, + -19, + 19, + -21, + 18, + -18, + 15, + -16, + 16, + -18, + 16, + -14, + 14, + -15, + 13, + -11, + 9, + -10, + 12, + -10, + 9, + -7, + 9, + -8, + 7, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -123, + 103, + -109, + 110, + -74, + 74, + -88, + 78, + -121, + 120, + -94, + 103, + -103, + 106, + -88, + 89, + -91, + 104, + -70, + 60, + -123, + 118, + -125, + 103, + -107, + 113, + -120, + 101, + -92, + 81, + -106, + 109, + -102, + 103, + -104, + 101, + -127, + 117, + -126, + 127, + -102, + 102, + -113, + 120, + -100, + 98, + -67, + 77, + -121, + 105, + -123, + 118, + -123, + 127, + -124, + 126, + -118, + 107, + -98, + 95, + -92, + 84, + -94, + 75, + -114, + 121, + -121, + 117, + -115, + 101, + -109, + 121, + -104, + 96, + -104, + 118, + -100, + 104, + -89, + 88, + -111, + 102, + -108, + 81, + -85, + 74, + -76, + 70, + -81, + 98, + -69, + 74, + -118, + 119, + -108, + 116, + -73, + 88, + -72, + 108, + -77, + 80, + -70, + 105, + -125, + 125, + -125, + 125, + -127, + 127, + -127, + 127, + -126, + 117, + -124, + 119, + -83, + 119, + -83, + 118, + -87, + 90, + -68, + 110, + -78, + 77, + -75, + 77, + -83, + 78, + -81, + 89, + -70, + 107, + -72, + 102, + -105, + 118, + -105, + 100, + -76, + 94, + -87, + 83, + -62, + 67, + -62, + 69, + -83, + 100, + -86, + 88, + -89, + 105, + -80, + 97, + -48, + 58, + -33, + 78, + -111, + 88, + -80, + 95, + -124, + 126, + -125, + 127, + -110, + 121, + -120, + 114, + -103, + 85, + -98, + 73, + -63, + 62, + -75, + 65, + -60, + 66, + -75, + 79, + -83, + 68, + -75, + 78, + -84, + 63, + -106, + 72, + -97, + 103, + -97, + 95, + -68, + 65, + -69, + 59, + -54, + 42, + -58, + 49, + -80, + 55, + -78, + 59, + -31, + 30, + -34, + 24, + -14, + 16, + -14, + 19, + -12, + 12, + -9, + 10, + -127, + 127, + -127, + 127, + -122, + 122, + -122, + 116, + -85, + 89, + -86, + 85, + -59, + 75, + -62, + 65, + -48, + 46, + -64, + 56, + -43, + 37, + -41, + 46, + -27, + 25, + -24, + 21, + -63, + 93, + -84, + 86, + -82, + 65, + -89, + 74, + -60, + 76, + -81, + 69, + -83, + 64, + -100, + 98, + -75, + 97, + -111, + 93, + -79, + 89, + -80, + 91, + -107, + 124, + -112, + 120, + -127, + 124, + -127, + 124, + -119, + 122, + -114, + 116, + -104, + 91, + -87, + 101, + -112, + 110, + -93, + 97, + -102, + 104, + -99, + 105, + -107, + 101, + -103, + 113, + -101, + 75, + -103, + 107, + -118, + 114, + -111, + 127, + -91, + 81, + -87, + 102, + -64, + 53, + -47, + 44, + -112, + 106, + -103, + 112, + -111, + 119, + -119, + 110, + -57, + 61, + -61, + 73, + -41, + 42, + -61, + 56, + -127, + 127, + -127, + 126, + -127, + 123, + -126, + 123, + -99, + 98, + -85, + 108, + -78, + 84, + -88, + 113, + -75, + 68, + -57, + 86, + -70, + 66, + -69, + 74, + -110, + 88, + -86, + 91, + -107, + 123, + -119, + 118, + -95, + 86, + -102, + 103, + -46, + 66, + -41, + 66, + -104, + 86, + -90, + 121, + -110, + 79, + -102, + 116, + -86, + 77, + -69, + 82, + -94, + 83, + -47, + 81, + -116, + 122, + -127, + 122, + -127, + 127, + -127, + 127, + -114, + 118, + -108, + 112, + -94, + 91, + -101, + 93, + -89, + 86, + -81, + 100, + -86, + 88, + -57, + 68, + -82, + 92, + -52, + 59, + -76, + 87, + -75, + 79, + -65, + 54, + -69, + 46, + -25, + 24, + -27, + 22, + -59, + 67, + -61, + 65, + -91, + 91, + -101, + 90, + -52, + 50, + -52, + 52, + -30, + 41, + -29, + 46, + -127, + 127, + -127, + 127, + -127, + 122, + -127, + 127, + -114, + 104, + -109, + 117, + -74, + 69, + -78, + 66, + -62, + 76, + -72, + 76, + -71, + 58, + -53, + 64, + -32, + 37, + -33, + 43, + -75, + 77, + -69, + 70, + -72, + 78, + -92, + 94, + -74, + 61, + -73, + 86, + -64, + 54, + -81, + 83, + -109, + 104, + -106, + 106, + -85, + 88, + -79, + 92, + -84, + 77, + -66, + 89, + -121, + 119, + -121, + 110, + -123, + 123, + -124, + 120, + -119, + 121, + -111, + 119, + -111, + 108, + -99, + 107, + -104, + 118, + -92, + 118, + -92, + 102, + -105, + 110, + -76, + 101, + -92, + 89, + -114, + 78, + -101, + 105, + -85, + 78, + -92, + 82, + -62, + 82, + -67, + 85, + -73, + 79, + -64, + 65, + -126, + 103, + -103, + 108, + -96, + 99, + -101, + 70, + -86, + 75, + -71, + 53, + -126, + 123, + -123, + 122, + -127, + 127, + -127, + 127, + -102, + 59, + -100, + 78, + -76, + 72, + -77, + 68, + -59, + 76, + -54, + 60, + -42, + 61, + -48, + 49, + -43, + 50, + -33, + 40, + -100, + 73, + -105, + 48, + -110, + 103, + -104, + 106, + -81, + 68, + -67, + 51, + -86, + 72, + -82, + 60, + -88, + 68, + -85, + 55, + -75, + 80, + -86, + 54, + -68, + 86, + -89, + 57, + -71, + 119, + -79, + 119, + -119, + 105, + -115, + 121, + -85, + 104, + -91, + 83, + -45, + 50, + -37, + 41, + -46, + 49, + -33, + 32, + -17, + 28, + -18, + 24, + -26, + 22, + -24, + 23, + -48, + 69, + -52, + 65, + -63, + 47, + -48, + 44, + -19, + 21, + -18, + 23, + -15, + 17, + -16, + 18, + -60, + 53, + -57, + 41, + -66, + 73, + -58, + 74, + -45, + 55, + -60, + 55, + -72, + 58, + -71, + 50, + -127, + 127, + -127, + 127, + -111, + 123, + -123, + 121, + -81, + 75, + -76, + 73, + -90, + 65, + -107, + 102, + -97, + 52, + -61, + 82, + -26, + 28, + -18, + 25, + -22, + 19, + -22, + 21, + -99, + 74, + -92, + 76, + -101, + 79, + -72, + 87, + -68, + 72, + -90, + 93, + -95, + 107, + -93, + 99, + -78, + 88, + -64, + 84, + -73, + 61, + -58, + 87, + -106, + 84, + -106, + 101, + -121, + 125, + -121, + 123, + -123, + 118, + -122, + 119, + -119, + 122, + -105, + 104, + -112, + 119, + -104, + 112, + -108, + 103, + -94, + 119, + -106, + 111, + -88, + 115, + -102, + 107, + -78, + 112, + -117, + 115, + -89, + 122, + -98, + 75, + -77, + 98, + -95, + 78, + -73, + 84, + -113, + 104, + -107, + 99, + -112, + 107, + -102, + 104, + -109, + 94, + -103, + 81, + -95, + 86, + -105, + 67, + -127, + 127, + -127, + 127, + -122, + 127, + -122, + 127, + -73, + 72, + -76, + 72, + -78, + 95, + -65, + 92, + -69, + 97, + -77, + 84, + -51, + 85, + -67, + 74, + -42, + 39, + -38, + 38, + -106, + 117, + -119, + 113, + -116, + 105, + -116, + 99, + -105, + 92, + -102, + 89, + -108, + 92, + -105, + 81, + -104, + 91, + -108, + 81, + -96, + 87, + -101, + 71, + -105, + 96, + -92, + 79, + -125, + 125, + -112, + 119, + -126, + 122, + -118, + 99, + -98, + 101, + -57, + 77, + -104, + 80, + -43, + 44, + -86, + 91, + -35, + 41, + -87, + 84, + -29, + 31, + -72, + 74, + -29, + 30, + -89, + 93, + -25, + 28, + -75, + 78, + -25, + 23, + -92, + 79, + -26, + 31, + -73, + 80, + -33, + 37, + -83, + 67, + -35, + 41, + -89, + 67, + -49, + 43, + -68, + 72, + -60, + 64, + -123, + 121, + -124, + 121, + -122, + 120, + -122, + 123, + -108, + 106, + -106, + 118, + -74, + 50, + -96, + 86, + -50, + 49, + -96, + 87, + -44, + 38, + -97, + 105, + -39, + 33, + -90, + 82, + -33, + 34, + -97, + 84, + -34, + 26, + -99, + 102, + -42, + 39, + -87, + 86, + -45, + 38, + -101, + 101, + -118, + 124, + -127, + 127, + -108, + 125, + -119, + 122, + -93, + 109, + -100, + 126, + -120, + 122, + -124, + 124, + -120, + 121, + -123, + 122, + -119, + 107, + -110, + 100, + -124, + 100, + -113, + 111, + -118, + 117, + -106, + 109, + -103, + 86, + -100, + 108, + -63, + 95, + -73, + 111, + -102, + 123, + -76, + 120, + -101, + 77, + -103, + 89, + -82, + 85, + -88, + 74, + -80, + 92, + -68, + 89, + -118, + 123, + -114, + 123, + -104, + 102, + -97, + 101, + -94, + 96, + -91, + 103, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -115, + 121, + -115, + 117, + -93, + 106, + -94, + 101, + -92, + 118, + -84, + 93, + -79, + 95, + -82, + 92, + -81, + 78, + -70, + 91, + -118, + 109, + -73, + 101, + -97, + 120, + -124, + 98, + -76, + 59, + -61, + 66, + -38, + 26, + -42, + 56, + -91, + 79, + -108, + 112, + -36, + 33, + -51, + 46, + -33, + 33, + -55, + 49, + -118, + 124, + -123, + 120, + -124, + 124, + -125, + 125, + -121, + 105, + -120, + 107, + -91, + 100, + -96, + 84, + -85, + 80, + -102, + 86, + -86, + 75, + -103, + 82, + -94, + 88, + -97, + 82, + -117, + 99, + -90, + 88, + -100, + 111, + -86, + 77, + -80, + 72, + -70, + 59, + -62, + 47, + -63, + 54, + -72, + 66, + -65, + 51, + -28, + 23, + -26, + 21, + -15, + 14, + -12, + 13, + -114, + 122, + -118, + 119, + -127, + 127, + -127, + 127, + -108, + 123, + -100, + 112, + -80, + 79, + -77, + 69, + -47, + 47, + -45, + 51, + -26, + 29, + -43, + 26, + -18, + 25, + -18, + 29, + -30, + 24, + -27, + 24, + -58, + 57, + -60, + 56, + -42, + 41, + -43, + 45, + -38, + 34, + -36, + 32, + -81, + 83, + -95, + 116, + -113, + 102, + -101, + 78, + -110, + 120, + -92, + 108, + -114, + 116, + -95, + 103, + -126, + 122, + -125, + 121, + -123, + 111, + -120, + 117, + -113, + 117, + -88, + 84, + -121, + 105, + -115, + 103, + -120, + 96, + -99, + 105, + -75, + 67, + -74, + 91, + -64, + 75, + -44, + 48, + -127, + 119, + -98, + 108, + -112, + 90, + -80, + 78, + -98, + 83, + -83, + 64, + -101, + 110, + -104, + 98, + -90, + 116, + -101, + 113, + -69, + 91, + -77, + 78, + -42, + 45, + -47, + 58, + -127, + 127, + -127, + 127, + -119, + 122, + -120, + 127, + -107, + 121, + -89, + 113, + -83, + 98, + -82, + 94, + -102, + 101, + -68, + 109, + -83, + 96, + -74, + 79, + -65, + 73, + -70, + 61, + -115, + 124, + -119, + 104, + -93, + 76, + -89, + 104, + -73, + 50, + -81, + 102, + -76, + 75, + -89, + 100, + -108, + 74, + -103, + 95, + -41, + 38, + -68, + 52, + -44, + 42, + -61, + 51, + -120, + 122, + -123, + 125, + -120, + 120, + -121, + 120, + -88, + 109, + -107, + 105, + -52, + 76, + -44, + 73, + -118, + 66, + -106, + 64, + -101, + 79, + -101, + 91, + -96, + 78, + -95, + 76, + -118, + 107, + -100, + 108, + -103, + 77, + -74, + 72, + -96, + 80, + -71, + 67, + -77, + 55, + -76, + 58, + -75, + 58, + -72, + 59, + -69, + 77, + -63, + 81, + -66, + 58, + -62, + 61, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -119, + 108, + -94, + 108, + -83, + 92, + -96, + 102, + -55, + 52, + -42, + 50, + -51, + 61, + -50, + 49, + -51, + 51, + -47, + 48, + -77, + 77, + -83, + 92, + -76, + 71, + -69, + 96, + -70, + 65, + -64, + 58, + -63, + 51, + -77, + 45, + -89, + 105, + -104, + 89, + -102, + 96, + -94, + 117, + -87, + 80, + -103, + 89, + -107, + 120, + -121, + 120, + -122, + 119, + -122, + 120, + -120, + 118, + -110, + 115, + -110, + 107, + -91, + 104, + -97, + 115, + -104, + 120, + -104, + 96, + -115, + 119, + -119, + 124, + -99, + 123, + -114, + 122, + -101, + 127, + -124, + 112, + -107, + 101, + -108, + 80, + -95, + 84, + -66, + 56, + -59, + 68, + -121, + 95, + -121, + 104, + -91, + 98, + -84, + 78, + -87, + 82, + -88, + 56, + -127, + 127, + -127, + 127, + -127, + 120, + -127, + 127, + -85, + 74, + -87, + 76, + -71, + 74, + -78, + 67, + -63, + 70, + -53, + 62, + -47, + 67, + -53, + 51, + -45, + 45, + -38, + 41, + -100, + 106, + -94, + 83, + -102, + 104, + -108, + 85, + -68, + 51, + -80, + 62, + -70, + 54, + -75, + 52, + -72, + 58, + -78, + 55, + -65, + 62, + -78, + 51, + -58, + 68, + -69, + 47, + -99, + 119, + -104, + 120, + -118, + 108, + -118, + 105, + -84, + 74, + -103, + 93, + -65, + 57, + -65, + 56, + -61, + 61, + -48, + 50, + -28, + 27, + -25, + 29, + -19, + 21, + -23, + 25, + -69, + 73, + -60, + 66, + -89, + 101, + -90, + 85, + -75, + 102, + -78, + 91, + -67, + 51, + -69, + 53, + -57, + 68, + -58, + 69, + -61, + 51, + -74, + 57, + -25, + 35, + -27, + 33, + -123, + 120, + -127, + 125, + -127, + 127, + -127, + 127, + -120, + 120, + -117, + 121, + -71, + 76, + -60, + 72, + -92, + 81, + -89, + 91, + -50, + 58, + -62, + 53, + -48, + 61, + -59, + 41, + -64, + 66, + -64, + 64, + -72, + 65, + -67, + 55, + -75, + 67, + -76, + 85, + -74, + 44, + -66, + 47, + -92, + 104, + -99, + 103, + -74, + 104, + -74, + 99, + -60, + 58, + -72, + 99, + -60, + 51, + -73, + 74, + -121, + 120, + -122, + 122, + -111, + 121, + -121, + 120, + -106, + 98, + -101, + 116, + -103, + 88, + -93, + 102, + -115, + 101, + -80, + 106, + -106, + 96, + -93, + 102, + -101, + 83, + -89, + 103, + -106, + 109, + -107, + 110, + -104, + 88, + -72, + 120, + -101, + 81, + -65, + 107, + -120, + 103, + -99, + 102, + -107, + 93, + -112, + 110, + -86, + 75, + -75, + 59, + -86, + 72, + -73, + 61, + -127, + 127, + -127, + 127, + -121, + 115, + -122, + 117, + -84, + 72, + -82, + 72, + -79, + 81, + -70, + 62, + -68, + 75, + -60, + 48, + -46, + 64, + -49, + 38, + -36, + 39, + -37, + 33, + -105, + 106, + -94, + 89, + -80, + 82, + -99, + 62, + -66, + 57, + -73, + 57, + -71, + 59, + -82, + 53, + -66, + 61, + -82, + 54, + -53, + 71, + -76, + 54, + -49, + 79, + -58, + 57, + -119, + 119, + -118, + 119, + -105, + 112, + -101, + 98, + -55, + 73, + -36, + 90, + -125, + 112, + -126, + 127, + -127, + 127, + -125, + 127, + -105, + 64, + -103, + 116, + -43, + 58, + -58, + 63, + -72, + 53, + -54, + 66, + -44, + 46, + -53, + 45, + -33, + 31, + -44, + 38, + -110, + 118, + -118, + 110, + -122, + 120, + -124, + 124, + -119, + 95, + -90, + 107, + -65, + 76, + -78, + 66, + -127, + 127, + -127, + 127, + -127, + 102, + -109, + 113, + -68, + 70, + -61, + 65, + -95, + 97, + -87, + 93, + -124, + 127, + -125, + 102, + -101, + 104, + -122, + 96, + -76, + 103, + -82, + 88, + -121, + 121, + -123, + 121, + -123, + 123, + -124, + 119, + -113, + 94, + -117, + 111, + -103, + 127, + -124, + 127, + -127, + 123, + -127, + 127, + -120, + 80, + -120, + 84, + -75, + 67, + -76, + 79, + -118, + 122, + -122, + 123, + -122, + 121, + -121, + 120, + -118, + 87, + -104, + 101, + -105, + 125, + -120, + 114, + -117, + 107, + -127, + 76, + -97, + 83, + -87, + 92, + -81, + 101, + -80, + 105, + -99, + 107, + -121, + 104, + -110, + 109, + -105, + 94, + -82, + 99, + -103, + 103, + -82, + 76, + -74, + 61, + -113, + 126, + -122, + 104, + -67, + 57, + -92, + 88, + -51, + 62, + -72, + 91, + -127, + 124, + -127, + 127, + -127, + 127, + -127, + 127, + -120, + 97, + -95, + 109, + -57, + 58, + -86, + 81, + -70, + 67, + -65, + 72, + -72, + 67, + -102, + 88, + -71, + 70, + -105, + 86, + -107, + 101, + -106, + 105, + -105, + 110, + -82, + 104, + -109, + 104, + -105, + 104, + -103, + 119, + -113, + 119, + -111, + 115, + -96, + 122, + -110, + 105, + -112, + 107, + -104, + 91, + -100, + 93, + -122, + 123, + -121, + 121, + -127, + 127, + -127, + 127, + -100, + 88, + -111, + 96, + -76, + 96, + -82, + 89, + -87, + 92, + -57, + 83, + -67, + 86, + -63, + 65, + -66, + 72, + -68, + 58, + -113, + 91, + -99, + 98, + -101, + 105, + -101, + 97, + -94, + 125, + -85, + 103, + -73, + 106, + -76, + 76, + -99, + 108, + -100, + 93, + -81, + 82, + -79, + 62, + -68, + 67, + -71, + 57, + -127, + 127, + -122, + 122, + -127, + 127, + -127, + 127, + -124, + 106, + -117, + 109, + -75, + 108, + -85, + 100, + -66, + 77, + -83, + 65, + -60, + 54, + -80, + 83, + -55, + 63, + -59, + 75, + -79, + 80, + -74, + 97, + -84, + 84, + -85, + 92, + -63, + 72, + -46, + 74, + -44, + 56, + -34, + 44, + -114, + 96, + -120, + 111, + -106, + 88, + -104, + 94, + -106, + 113, + -95, + 89, + -111, + 111, + -107, + 96, + -123, + 124, + -127, + 123, + -117, + 116, + -116, + 116, + -75, + 105, + -115, + 93, + -105, + 107, + -85, + 117, + -104, + 102, + -96, + 113, + -78, + 80, + -62, + 55, + -109, + 112, + -104, + 101, + -107, + 122, + -105, + 109, + -102, + 121, + -103, + 104, + -112, + 104, + -104, + 88, + -108, + 109, + -101, + 123, + -97, + 107, + -100, + 101, + -90, + 99, + -101, + 95, + -88, + 67, + -69, + 86, + -127, + 127, + -127, + 127, + -121, + 114, + -122, + 123, + -90, + 92, + -83, + 97, + -57, + 42, + -66, + 64, + -66, + 63, + -94, + 83, + -76, + 79, + -82, + 94, + -84, + 74, + -89, + 88, + -112, + 118, + -105, + 102, + -111, + 107, + -109, + 119, + -115, + 114, + -97, + 108, + -102, + 96, + -78, + 98, + -92, + 94, + -87, + 96, + -107, + 105, + -105, + 102, + -77, + 70, + -93, + 106, + -121, + 117, + -121, + 119, + -109, + 121, + -119, + 119, + -86, + 77, + -72, + 86, + -72, + 62, + -57, + 79, + -64, + 79, + -66, + 84, + -85, + 78, + -60, + 89, + -76, + 82, + -74, + 93, + -115, + 94, + -87, + 79, + -90, + 100, + -74, + 78, + -77, + 103, + -67, + 75, + -71, + 66, + -72, + 74, + -62, + 57, + -91, + 86, + -44, + 52, + -79, + 53, + -30, + 49, + -36, + 88, + -127, + 127, + -127, + 127, + -126, + 126, + -127, + 127, + -113, + 86, + -90, + 104, + -51, + 69, + -48, + 63, + -64, + 59, + -78, + 58, + -51, + 70, + -60, + 67, + -39, + 50, + -36, + 36, + -103, + 108, + -74, + 71, + -103, + 98, + -106, + 109, + -73, + 77, + -98, + 94, + -89, + 90, + -77, + 102, + -111, + 119, + -106, + 120, + -64, + 88, + -104, + 118, + -79, + 90, + -89, + 99, + -117, + 125, + -122, + 127, + -125, + 124, + -125, + 124, + -119, + 117, + -121, + 123, + -105, + 101, + -112, + 99, + -112, + 103, + -85, + 109, + -119, + 114, + -102, + 114, + -109, + 72, + -80, + 91, + -101, + 104, + -110, + 101, + -110, + 106, + -104, + 99, + -91, + 108, + -86, + 87, + -75, + 83, + -84, + 78, + -114, + 96, + -108, + 101, + -84, + 74, + -92, + 84, + -116, + 93, + -112, + 96, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -77, + 70, + -48, + 73, + -60, + 72, + -68, + 51, + -58, + 63, + -44, + 44, + -40, + 49, + -44, + 33, + -33, + 47, + -48, + 35, + -102, + 100, + -100, + 104, + -97, + 97, + -113, + 84, + -82, + 61, + -98, + 86, + -73, + 53, + -98, + 80, + -66, + 55, + -92, + 72, + -56, + 60, + -94, + 65, + -59, + 76, + -65, + 52, + -105, + 119, + -100, + 119, + -119, + 109, + -118, + 106, + -74, + 66, + -63, + 86, + -38, + 46, + -39, + 39, + -43, + 44, + -36, + 36, + -29, + 21, + -21, + 33, + -35, + 20, + -20, + 32, + -72, + 83, + -65, + 67, + -55, + 61, + -40, + 53, + -49, + 46, + -42, + 36, + -34, + 35, + -28, + 25, + -34, + 40, + -39, + 35, + -33, + 40, + -46, + 43, + -31, + 29, + -40, + 43, + -127, + 123, + -126, + 122, + -127, + 127, + -127, + 127, + -107, + 88, + -99, + 102, + -55, + 79, + -57, + 75, + -39, + 51, + -44, + 53, + -35, + 39, + -44, + 37, + -29, + 28, + -29, + 40, + -70, + 63, + -61, + 55, + -54, + 79, + -50, + 56, + -40, + 36, + -35, + 39, + -67, + 104, + -66, + 110, + -115, + 113, + -124, + 122, + -107, + 101, + -114, + 109, + -95, + 89, + -96, + 115, + -114, + 123, + -127, + 125, + -127, + 126, + -127, + 127, + -120, + 126, + -121, + 119, + -121, + 118, + -114, + 121, + -95, + 119, + -100, + 118, + -116, + 110, + -100, + 118, + -74, + 99, + -66, + 86, + -47, + 39, + -49, + 60, + -108, + 97, + -96, + 88, + -104, + 73, + -93, + 74, + -88, + 71, + -70, + 76, + -106, + 127, + -124, + 121, + -78, + 111, + -87, + 114, + -48, + 48, + -42, + 37, + -94, + 88, + -55, + 54, + -124, + 123, + -125, + 127, + -78, + 52, + -113, + 85, + -107, + 86, + -74, + 67, + -87, + 79, + -86, + 85, + -72, + 76, + -69, + 72, + -44, + 50, + -48, + 45, + -92, + 60, + -43, + 56, + -119, + 127, + -127, + 124, + -81, + 64, + -98, + 70, + -87, + 68, + -70, + 59, + -78, + 68, + -54, + 42, + -76, + 79, + -83, + 70, + -55, + 64, + -64, + 51, + -78, + 53, + -29, + 28, + -89, + 103, + -86, + 115, + -95, + 104, + -76, + 89, + -82, + 71, + -71, + 77, + -124, + 127, + -123, + 118, + -101, + 102, + -127, + 97, + -56, + 69, + -56, + 61, + -60, + 55, + -58, + 62, + -125, + 127, + -119, + 126, + -86, + 97, + -89, + 106, + -62, + 78, + -65, + 61, + -37, + 47, + -41, + 45, + -60, + 61, + -54, + 60, + -49, + 50, + -42, + 49, + -89, + 75, + -106, + 101, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -123, + 116, + -121, + 122, + -126, + 124, + -121, + 113, + -120, + 124, + -123, + 122, + -120, + 123, + -115, + 105, + -106, + 104, + -117, + 125, + -127, + 121, + -125, + 127, + -119, + 120, + -127, + 125, + -115, + 121, + -119, + 104, + -126, + 121, + -124, + 122, + -121, + 118, + -127, + 127, + -124, + 120, + -121, + 122, + -120, + 96, + -119, + 115, + -127, + 127, + -127, + 126, + -127, + 126, + -121, + 126, + -122, + 120, + -123, + 125, + -110, + 120, + -124, + 118, + -125, + 127, + -121, + 119, + -119, + 111, + -120, + 113, + -120, + 123, + -122, + 124, + -127, + 127, + -124, + 122, + -127, + 124, + -118, + 105, + -124, + 121, + -125, + 126, + -124, + 127, + -122, + 121, + -127, + 127, + -127, + 125, + -115, + 121, + -122, + 121, + -108, + 110, + -121, + 121, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -124, + 125, + -127, + 127, + -124, + 124, + -116, + 118, + -126, + 124, + -121, + 127, + -118, + 123, + -122, + 121, + -121, + 122, + -114, + 116, + -125, + 127, + -116, + 124, + -127, + 122, + -121, + 124, + -124, + 121, + -122, + 124, + -121, + 121, + -120, + 119, + -126, + 125, + -120, + 127, + -123, + 112, + -94, + 125, + -120, + 122, + -121, + 123, + -127, + 124, + -126, + 127, + -124, + 127, + -127, + 127, + -118, + 119, + -118, + 123, + -81, + 116, + -102, + 121, + -125, + 127, + -126, + 126, + -118, + 114, + -124, + 122, + -107, + 122, + -125, + 124, + -124, + 124, + -123, + 127, + -127, + 122, + -127, + 127, + -120, + 124, + -114, + 121, + -127, + 123, + -119, + 120, + -122, + 127, + -125, + 125, + -113, + 106, + -117, + 121, + -118, + 117, + -121, + 124, + -127, + 126, + -127, + 123, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 125, + -121, + 122, + -114, + 127, + -119, + 121, + -120, + 114, + -121, + 121, + -103, + 123, + -111, + 122, + -118, + 126, + -116, + 102, + -121, + 127, + -119, + 123, + -116, + 113, + -94, + 118, + -114, + 116, + -124, + 119, + -125, + 121, + -124, + 121, + -126, + 126, + -121, + 121, + -123, + 126, + -123, + 120, + -123, + 123, + -126, + 126, + -127, + 127, + -125, + 123, + -127, + 127, + -126, + 123, + -124, + 123, + -120, + 121, + -119, + 122, + -126, + 121, + -126, + 123, + -124, + 125, + -124, + 127, + -122, + 117, + -122, + 124, + -119, + 127, + -124, + 125, + -127, + 127, + -127, + 127, + -124, + 126, + -127, + 127, + -127, + 125, + -126, + 122, + -127, + 127, + -125, + 122, + -118, + 124, + -124, + 120, + -124, + 122, + -120, + 102, + -125, + 126, + -115, + 122, + -127, + 127, + -127, + 127, + -125, + 127, + -127, + 127, + -126, + 125, + -127, + 118, + -125, + 120, + -114, + 121, + -119, + 120, + -116, + 118, + -120, + 122, + -122, + 109, + -124, + 103, + -120, + 120, + -123, + 127, + -127, + 127, + -124, + 126, + -126, + 124, + -124, + 126, + -122, + 122, + -125, + 125, + -121, + 119, + -126, + 120, + -117, + 119, + -123, + 125, + -124, + 119, + -121, + 127, + -121, + 117, + -127, + 127, + -127, + 127, + -125, + 125, + -125, + 125, + -122, + 106, + -115, + 103, + -99, + 81, + -75, + 64, + -98, + 108, + -77, + 80, + -70, + 85, + -89, + 82, + -75, + 107, + -102, + 109, + -105, + 125, + -123, + 123, + -119, + 124, + -127, + 127, + -124, + 93, + -96, + 121, + -119, + 102, + -89, + 119, + -116, + 122, + -115, + 111, + -108, + 113, + -111, + 96, + -106, + 102, + -120, + 89, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -122, + 123, + -124, + 127, + -127, + 127, + -115, + 122, + -127, + 120, + -124, + 127, + -125, + 126, + -117, + 106, + -105, + 118, + -106, + 104, + -127, + 127, + -127, + 127, + -127, + 127, + -126, + 127, + -122, + 125, + -123, + 125, + -124, + 124, + -122, + 127, + -126, + 127, + -125, + 126, + -93, + 73, + -121, + 122, + -119, + 103, + -114, + 100, + -127, + 127, + -127, + 127, + -126, + 127, + -127, + 127, + -125, + 122, + -123, + 121, + -107, + 124, + -123, + 125, + -122, + 126, + -127, + 126, + -122, + 121, + -120, + 118, + -122, + 119, + -119, + 120, + -127, + 123, + -127, + 127, + -127, + 125, + -127, + 127, + -126, + 124, + -120, + 103, + -124, + 112, + -98, + 119, + -124, + 126, + -122, + 123, + -100, + 121, + -101, + 92, + -119, + 121, + -86, + 105, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -117, + 120, + -127, + 108, + -97, + 119, + -77, + 93, + -83, + 100, + -120, + 88, + -108, + 111, + -101, + 93, + -127, + 127, + -119, + 124, + -126, + 126, + -124, + 127, + -116, + 116, + -98, + 96, + -102, + 98, + -91, + 104, + -122, + 98, + -110, + 107, + -97, + 100, + -116, + 108, + -98, + 92, + -119, + 121, + -124, + 123, + -127, + 123, + -126, + 122, + -126, + 121, + -72, + 82, + -64, + 88, + -69, + 89, + -63, + 65, + -127, + 107, + -72, + 75, + -95, + 70, + -77, + 46, + -69, + 70, + -79, + 60, + -127, + 114, + -127, + 125, + -112, + 110, + -127, + 123, + -102, + 99, + -104, + 106, + -101, + 82, + -103, + 87, + -127, + 123, + -118, + 113, + -111, + 103, + -113, + 104, + -105, + 81, + -75, + 81, + -126, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -124, + 127, + -127, + 127, + -123, + 111, + -123, + 103, + -120, + 99, + -101, + 101, + -65, + 100, + -70, + 73, + -86, + 110, + -115, + 119, + -127, + 123, + -122, + 126, + -114, + 117, + -126, + 126, + -94, + 96, + -121, + 121, + -91, + 97, + -125, + 117, + -127, + 117, + -122, + 123, + -105, + 108, + -120, + 113, + -83, + 90, + -91, + 111, + -125, + 121, + -127, + 121, + -127, + 125, + -125, + 127, + -122, + 111, + -125, + 121, + -106, + 121, + -105, + 121, + -122, + 120, + -113, + 127, + -120, + 124, + -100, + 122, + -116, + 118, + -120, + 119, + -117, + 121, + -125, + 124, + -127, + 127, + -126, + 127, + -122, + 118, + -103, + 124, + -125, + 98, + -114, + 93, + -124, + 118, + -98, + 113, + -117, + 124, + -125, + 114, + -112, + 119, + -96, + 82, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -121, + 112, + -127, + 125, + -124, + 120, + -111, + 114, + -98, + 95, + -92, + 88, + -98, + 87, + -90, + 76, + -121, + 108, + -100, + 90, + -127, + 125, + -127, + 127, + -123, + 127, + -112, + 126, + -121, + 120, + -116, + 118, + -121, + 127, + -110, + 120, + -114, + 121, + -111, + 106, + -99, + 121, + -110, + 91, + -92, + 115, + -102, + 103, + -127, + 122, + -125, + 127, + -120, + 112, + -117, + 106, + -57, + 73, + -67, + 66, + -95, + 107, + -77, + 61, + -86, + 106, + -51, + 65, + -77, + 69, + -77, + 86, + -74, + 90, + -92, + 85, + -119, + 123, + -123, + 127, + -118, + 122, + -127, + 124, + -112, + 115, + -92, + 97, + -124, + 115, + -123, + 124, + -120, + 121, + -94, + 120, + -85, + 79, + -96, + 104, + -81, + 94, + -105, + 108, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -114, + 118, + -124, + 126, + -127, + 127, + -124, + 125, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 125, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -124, + 123, + -122, + 124, + -126, + 123, + -125, + 127, + -126, + 122, + -127, + 127, + -122, + 127, + -118, + 119, + -126, + 106, + -124, + 127, + -127, + 127, + -127, + 127, + -126, + 126, + -125, + 126, + -120, + 114, + -110, + 116, + -94, + 91, + -123, + 121, + -126, + 124, + -120, + 123, + -121, + 121, + -124, + 123, + -119, + 121, + -94, + 104, + -121, + 127, + -122, + 127, + -124, + 119, + -121, + 127, + -126, + 125, + -127, + 126, + -122, + 123, + -121, + 121, + -123, + 123, + -126, + 124, + -125, + 121, + -123, + 123, + -121, + 119, + -119, + 122, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -122, + 123, + -126, + 127, + -102, + 99, + -115, + 103, + -125, + 126, + -121, + 119, + -117, + 123, + -114, + 110, + -123, + 125, + -111, + 122, + -127, + 127, + -127, + 127, + -127, + 127, + -124, + 125, + -121, + 127, + -124, + 126, + -125, + 119, + -120, + 108, + -103, + 110, + -117, + 106, + -122, + 108, + -117, + 108, + -119, + 121, + -120, + 119, + -127, + 127, + -127, + 127, + -126, + 127, + -127, + 123, + -120, + 118, + -121, + 121, + -94, + 124, + -116, + 115, + -127, + 127, + -123, + 127, + -113, + 121, + -120, + 123, + -119, + 122, + -107, + 123, + -127, + 125, + -119, + 127, + -125, + 127, + -124, + 121, + -122, + 125, + -118, + 123, + -118, + 124, + -119, + 125, + -123, + 127, + -122, + 127, + -111, + 124, + -115, + 118, + -111, + 119, + -111, + 120, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -125, + 126, + -123, + 127, + -117, + 118, + -103, + 116, + -126, + 122, + -105, + 109, + -122, + 119, + -114, + 115, + -102, + 118, + -112, + 122, + -125, + 127, + -122, + 121, + -119, + 110, + -103, + 127, + -98, + 110, + -122, + 117, + -98, + 120, + -122, + 122, + -121, + 126, + -126, + 127, + -119, + 122, + -125, + 122, + -109, + 112, + -121, + 123, + -127, + 127, + -127, + 127, + -126, + 127, + -127, + 127, + -124, + 123, + -125, + 124, + -117, + 120, + -119, + 122, + -122, + 125, + -124, + 124, + -127, + 123, + -124, + 126, + -119, + 121, + -122, + 121, + -125, + 120, + -125, + 127, + -127, + 127, + -127, + 124, + -124, + 125, + -122, + 126, + -119, + 122, + -126, + 125, + -117, + 123, + -127, + 125, + -121, + 121, + -124, + 123, + -122, + 119, + -123, + 122, + -127, + 121, + -127, + 127, + -127, + 127, + -127, + 127, + -126, + 127, + -125, + 127, + -123, + 124, + -123, + 107, + -124, + 123, + -127, + 120, + -124, + 122, + -118, + 123, + -119, + 127, + -117, + 113, + -116, + 123, + -124, + 127, + -125, + 127, + -127, + 127, + -115, + 124, + -127, + 123, + -111, + 120, + -123, + 127, + -123, + 121, + -123, + 122, + -122, + 124, + -122, + 125, + -121, + 121, + -122, + 122, + -119, + 119, + -105, + 120, + -123, + 126, + -127, + 126, + -123, + 120, + -123, + 123, + -120, + 119, + -112, + 108, + -125, + 120, + -78, + 98, + -119, + 120, + -86, + 92, + -106, + 109, + -116, + 104, + -112, + 121, + -121, + 121, + -126, + 127, + -127, + 127, + -124, + 125, + -112, + 122, + -100, + 104, + -85, + 108, + -122, + 126, + -103, + 115, + -127, + 120, + -110, + 120, + -100, + 78, + -96, + 109, + -108, + 92, + -125, + 107, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -121, + 116, + -114, + 120, + -127, + 127, + -127, + 123, + -126, + 108, + -127, + 119, + -126, + 108, + -102, + 119, + -109, + 117, + -126, + 122, + -127, + 127, + -126, + 125, + -126, + 127, + -127, + 127, + -114, + 124, + -123, + 124, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -125, + 117, + -116, + 118, + -127, + 126, + -127, + 127, + -123, + 124, + -123, + 124, + -121, + 120, + -118, + 122, + -121, + 122, + -111, + 124, + -123, + 119, + -126, + 124, + -118, + 117, + -120, + 121, + -121, + 121, + -122, + 121, + -127, + 127, + -127, + 119, + -123, + 127, + -123, + 125, + -115, + 119, + -119, + 102, + -106, + 104, + -122, + 117, + -123, + 127, + -126, + 124, + -102, + 99, + -117, + 102, + -123, + 123, + -90, + 87, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 122, + -123, + 112, + -110, + 119, + -109, + 107, + -101, + 121, + -102, + 114, + -103, + 101, + -82, + 81, + -97, + 99, + -75, + 82, + -127, + 126, + -127, + 127, + -125, + 127, + -127, + 115, + -121, + 113, + -111, + 110, + -120, + 112, + -113, + 122, + -125, + 114, + -121, + 114, + -88, + 104, + -122, + 109, + -102, + 100, + -122, + 101, + -123, + 126, + -127, + 127, + -121, + 119, + -125, + 120, + -70, + 70, + -63, + 84, + -102, + 56, + -64, + 65, + -107, + 91, + -54, + 70, + -98, + 75, + -57, + 66, + -87, + 74, + -83, + 68, + -115, + 124, + -127, + 124, + -118, + 109, + -127, + 126, + -111, + 115, + -124, + 116, + -104, + 83, + -81, + 91, + -124, + 115, + -102, + 122, + -113, + 121, + -107, + 124, + -81, + 96, + -96, + 74, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -104, + 107, + -110, + 85, + -101, + 112, + -120, + 111, + -99, + 70, + -90, + 79, + -99, + 76, + -99, + 81, + -110, + 120, + -123, + 121, + -120, + 123, + -117, + 127, + -97, + 125, + -120, + 120, + -99, + 118, + -99, + 112, + -127, + 127, + -127, + 125, + -118, + 127, + -127, + 127, + -122, + 127, + -112, + 124, + -124, + 127, + -126, + 122, + -124, + 125, + -126, + 126, + -118, + 121, + -118, + 126, + -124, + 121, + -119, + 121, + -127, + 123, + -98, + 118, + -92, + 115, + -119, + 121, + -107, + 121, + -118, + 119, + -127, + 119, + -123, + 124, + -127, + 118, + -127, + 123, + -121, + 116, + -105, + 102, + -102, + 90, + -98, + 96, + -127, + 127, + -118, + 123, + -127, + 125, + -127, + 127, + -127, + 113, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 123, + -127, + 126, + -109, + 112, + -119, + 118, + -125, + 126, + -124, + 113, + -113, + 121, + -112, + 126, + -109, + 121, + -93, + 121, + -127, + 109, + -125, + 124, + -127, + 127, + -127, + 127, + -127, + 124, + -122, + 127, + -123, + 112, + -124, + 127, + -123, + 127, + -127, + 118, + -127, + 125, + -127, + 121, + -105, + 105, + -98, + 77, + -98, + 127, + -119, + 127, + -127, + 127, + -127, + 127, + -117, + 125, + -123, + 127, + -95, + 117, + -92, + 114, + -112, + 120, + -111, + 122, + -111, + 117, + -82, + 121, + -77, + 99, + -111, + 119, + -89, + 113, + -115, + 119, + -119, + 108, + -126, + 127, + -113, + 94, + -119, + 119, + -111, + 81, + -100, + 119, + -124, + 96, + -123, + 104, + -126, + 106, + -107, + 122, + -123, + 84, + -95, + 102, + -84, + 113, + -117, + 121, + -127, + 127, + -127, + 127, + -127, + 127, + -126, + 127, + -113, + 110, + -118, + 93, + -126, + 125, + -114, + 127, + -127, + 125, + -125, + 122, + -108, + 107, + -108, + 113, + -123, + 118, + -124, + 124, + -127, + 127, + -127, + 122, + -127, + 123, + -123, + 127, + -122, + 121, + -119, + 124, + -125, + 126, + -126, + 126, + -115, + 121, + -123, + 121, + -116, + 97, + -122, + 121, + -118, + 83, + -119, + 121, + -127, + 123, + -122, + 122, + -125, + 126, + -121, + 124, + -121, + 118, + -105, + 112, + -111, + 99, + -112, + 124, + -105, + 118, + -115, + 120, + -116, + 101, + -121, + 120, + -92, + 92, + -98, + 84, + -80, + 103, + -107, + 94, + -90, + 109, + -94, + 103, + -104, + 103, + -104, + 103, + -111, + 99, + -101, + 104, + -104, + 103, + -108, + 102, + -122, + 102, + -115, + 127, + -122, + 112, + -111, + 111, + -127, + 127, + -127, + 127, + -118, + 118, + -121, + 121, + -83, + 106, + -94, + 111, + -99, + 84, + -100, + 94, + -80, + 63, + -66, + 65, + -86, + 61, + -90, + 75, + -56, + 71, + -65, + 79, + -101, + 95, + -106, + 79, + -83, + 74, + -82, + 57, + -87, + 69, + -76, + 79, + -120, + 121, + -85, + 104, + -106, + 100, + -99, + 80, + -94, + 80, + -70, + 80, + -105, + 97, + -110, + 89, + -119, + 120, + -121, + 109, + -121, + 122, + -120, + 124, + -106, + 113, + -105, + 122, + -78, + 65, + -64, + 65, + -51, + 57, + -52, + 56, + -53, + 52, + -51, + 47, + -53, + 56, + -41, + 53, + -15, + 12, + -15, + 16, + -11, + 13, + -20, + 15, + -91, + 65, + -83, + 63, + -59, + 51, + -60, + 46, + -54, + 59, + -55, + 56, + -59, + 56, + -60, + 55, + -62, + 64, + -56, + 70, + -122, + 127, + -127, + 127, + -127, + 124, + -127, + 127, + -111, + 98, + -106, + 123, + -60, + 59, + -49, + 60, + -70, + 71, + -75, + 74, + -56, + 62, + -71, + 52, + -62, + 59, + -54, + 80, + -51, + 66, + -56, + 51, + -31, + 23, + -33, + 28, + -16, + 22, + -13, + 17, + -18, + 22, + -13, + 19, + -65, + 54, + -85, + 73, + -70, + 68, + -72, + 80, + -64, + 75, + -60, + 82, + -119, + 112, + -119, + 118, + -118, + 110, + -118, + 118, + -109, + 85, + -96, + 93, + -75, + 61, + -64, + 74, + -59, + 58, + -52, + 60, + -58, + 57, + -51, + 61, + -61, + 56, + -58, + 60, + -60, + 50, + -60, + 74, + -66, + 56, + -69, + 87, + -68, + 43, + -67, + 88, + -25, + 16, + -21, + 32, + -101, + 105, + -103, + 103, + -107, + 106, + -96, + 90, + -104, + 70, + -73, + 63, + -123, + 125, + -127, + 127, + -127, + 127, + -127, + 127, + -118, + 101, + -117, + 109, + -92, + 104, + -98, + 81, + -97, + 76, + -101, + 85, + -32, + 37, + -34, + 31, + -43, + 39, + -35, + 38, + -82, + 63, + -62, + 69, + -94, + 89, + -103, + 79, + -103, + 58, + -88, + 67, + -82, + 86, + -64, + 104, + -118, + 106, + -120, + 99, + -95, + 91, + -104, + 87, + -107, + 117, + -86, + 92, + -96, + 119, + -115, + 119, + -116, + 119, + -116, + 112, + -119, + 101, + -108, + 113, + -66, + 101, + -69, + 94, + -64, + 59, + -49, + 57, + -48, + 47, + -40, + 50, + -44, + 41, + -39, + 48, + -57, + 62, + -54, + 65, + -63, + 63, + -64, + 65, + -61, + 56, + -60, + 64, + -32, + 29, + -31, + 31, + -41, + 51, + -39, + 46, + -46, + 50, + -47, + 48, + -72, + 75, + -68, + 77, + -110, + 112, + -125, + 108, + -127, + 127, + -127, + 127, + -122, + 122, + -117, + 121, + -81, + 91, + -73, + 79, + -54, + 65, + -65, + 60, + -59, + 59, + -62, + 66, + -49, + 51, + -60, + 69, + -56, + 62, + -56, + 63, + -55, + 57, + -60, + 66, + -57, + 56, + -56, + 58, + -39, + 39, + -51, + 48, + -64, + 66, + -80, + 66, + -88, + 62, + -83, + 74, + -83, + 53, + -61, + 56, + -92, + 58, + -66, + 58, + -119, + 119, + -112, + 118, + -104, + 96, + -103, + 107, + -100, + 102, + -91, + 95, + -79, + 68, + -69, + 95, + -65, + 64, + -62, + 81, + -64, + 50, + -56, + 76, + -104, + 52, + -81, + 76, + -104, + 106, + -103, + 98, + -94, + 55, + -65, + 73, + -39, + 33, + -38, + 40, + -70, + 105, + -94, + 123, + -119, + 99, + -110, + 84, + -69, + 64, + -69, + 58, + -95, + 122, + -86, + 110, + -127, + 126, + -127, + 127, + -122, + 125, + -122, + 124, + -68, + 83, + -74, + 98, + -105, + 103, + -92, + 103, + -77, + 74, + -72, + 84, + -56, + 68, + -59, + 68, + -29, + 23, + -28, + 26, + -103, + 91, + -91, + 106, + -92, + 102, + -99, + 104, + -103, + 111, + -105, + 108, + -93, + 92, + -101, + 90, + -104, + 94, + -97, + 98, + -85, + 91, + -85, + 87, + -105, + 89, + -91, + 90, + -121, + 123, + -121, + 127, + -120, + 119, + -120, + 118, + -104, + 102, + -103, + 104, + -70, + 66, + -61, + 65, + -51, + 51, + -54, + 59, + -44, + 43, + -44, + 56, + -41, + 38, + -35, + 33, + -23, + 22, + -26, + 17, + -24, + 22, + -24, + 22, + -48, + 56, + -51, + 62, + -70, + 60, + -80, + 59, + -52, + 55, + -50, + 57, + -8, + 7, + -8, + 9, + -7, + 11, + -7, + 9, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -107, + 106, + -104, + 118, + -73, + 85, + -83, + 95, + -75, + 72, + -68, + 61, + -55, + 55, + -68, + 74, + -47, + 49, + -58, + 77, + -40, + 45, + -44, + 45, + -51, + 86, + -51, + 85, + -65, + 78, + -68, + 68, + -65, + 62, + -62, + 57, + -106, + 102, + -98, + 100, + -97, + 89, + -97, + 94, + -97, + 93, + -83, + 90, + -119, + 120, + -111, + 118, + -122, + 120, + -119, + 121, + -118, + 105, + -120, + 102, + -97, + 89, + -104, + 106, + -104, + 104, + -102, + 105, + -93, + 97, + -91, + 106, + -103, + 101, + -94, + 108, + -104, + 99, + -88, + 106, + -105, + 88, + -105, + 103, + -106, + 75, + -105, + 82, + -59, + 32, + -51, + 52, + -101, + 79, + -102, + 86, + -103, + 96, + -100, + 91, + -91, + 103, + -95, + 88, + -127, + 125, + -127, + 127, + -127, + 127, + -127, + 127, + -103, + 91, + -114, + 103, + -106, + 104, + -110, + 99, + -106, + 103, + -89, + 102, + -60, + 81, + -66, + 75, + -52, + 59, + -49, + 44, + -40, + 46, + -72, + 68, + -108, + 118, + -106, + 123, + -95, + 96, + -96, + 98, + -87, + 102, + -105, + 104, + -105, + 87, + -99, + 84, + -74, + 78, + -58, + 66, + -79, + 80, + -55, + 70, + -112, + 124, + -119, + 126, + -125, + 121, + -124, + 120, + -120, + 99, + -120, + 114, + -87, + 90, + -85, + 85, + -80, + 57, + -81, + 65, + -57, + 64, + -58, + 67, + -52, + 65, + -52, + 64, + -59, + 58, + -58, + 62, + -62, + 56, + -67, + 55, + -18, + 17, + -18, + 21, + -57, + 57, + -58, + 54, + -60, + 47, + -62, + 45, + -54, + 43, + -51, + 40, + -35, + 31, + -35, + 31, + -125, + 124, + -122, + 122, + -127, + 127, + -127, + 127, + -115, + 121, + -103, + 116, + -93, + 79, + -73, + 73, + -61, + 77, + -70, + 85, + -44, + 65, + -60, + 69, + -25, + 23, + -24, + 33, + -87, + 84, + -78, + 105, + -82, + 58, + -93, + 73, + -87, + 59, + -84, + 62, + -57, + 52, + -51, + 55, + -68, + 69, + -61, + 69, + -71, + 57, + -60, + 49, + -40, + 51, + -41, + 46, + -121, + 127, + -123, + 119, + -121, + 117, + -123, + 127, + -106, + 103, + -104, + 103, + -76, + 64, + -70, + 63, + -100, + 99, + -99, + 104, + -118, + 115, + -105, + 127, + -108, + 121, + -87, + 100, + -105, + 103, + -89, + 91, + -106, + 120, + -104, + 95, + -101, + 99, + -94, + 112, + -122, + 116, + -85, + 96, + -74, + 82, + -90, + 121, + -86, + 78, + -77, + 107, + -63, + 78, + -79, + 96, + -69, + 80, + -83, + 105, + -108, + 114, + -112, + 112, + -99, + 101, + -73, + 89, + -82, + 78, + -56, + 63, + -79, + 105, + -103, + 104, + -105, + 113, + -105, + 104, + -104, + 105, + -97, + 91, + -106, + 87, + -105, + 100, + -104, + 108, + -93, + 94, + -96, + 112, + -100, + 76, + -94, + 118, + -71, + 75, + -104, + 119, + -103, + 103, + -102, + 86, + -94, + 105, + -96, + 93, + -91, + 106, + -107, + 105, + -78, + 79, + -106, + 107, + -90, + 105, + -112, + 119, + -117, + 99, + -87, + 115, + -102, + 90, + -105, + 102, + -73, + 96, + -109, + 99, + -109, + 117, + -103, + 91, + -102, + 110, + -91, + 101, + -92, + 100, + -76, + 103, + -104, + 119, + -85, + 81, + -124, + 119, + -104, + 102, + -94, + 102, + -105, + 104, + -89, + 95, + -105, + 111, + -87, + 84, + -97, + 109, + -88, + 84, + -101, + 104, + -101, + 99, + -100, + 105, + -107, + 99, + -98, + 110, + -79, + 88, + -100, + 107, + -88, + 97, + -110, + 121, + -92, + 106, + -108, + 106, + -102, + 84, + -108, + 99, + -85, + 84, + -116, + 115, + -91, + 94, + -116, + 109, + -93, + 85, + -110, + 106, + -78, + 76, + -113, + 106, + -83, + 94, + -103, + 118, + -71, + 77, + -106, + 121, + -90, + 88, + -108, + 123, + -75, + 81, + -101, + 108, + -91, + 75, + -100, + 108, + -105, + 95, + -86, + 99, + -104, + 103, + -99, + 81, + -116, + 108, + -108, + 102, + -103, + 102, + -96, + 107, + -110, + 105, + -95, + 104, + -107, + 102, + -88, + 80, + -118, + 110, + -95, + 102, + -105, + 109, + -83, + 104, + -105, + 84, + -103, + 88, + -103, + 86, + -107, + 113, + -92, + 106, + -100, + 108, + -91, + 103, + -103, + 105, + -78, + 88, + -108, + 114, + -98, + 106, + -100, + 103, + -119, + 101, + -103, + 83, + -112, + 97, + -106, + 105, + -101, + 77, + -103, + 118, + -102, + 103, + -102, + 112, + -83, + 103, + -104, + 103, + -82, + 82, + -93, + 99, + -85, + 106, + -87, + 101, + -104, + 107, + -99, + 119, + -105, + 102, + -77, + 105, + -107, + 109, + -80, + 93, + -110, + 107, + -86, + 88, + -102, + 101, + -81, + 82, + -106, + 106, + -89, + 96, + -110, + 85, + -103, + 108, + -80, + 91, + -94, + 105, + -85, + 88, + -72, + 79, + -77, + 76, + -47, + 57, + -66, + 81, + -30, + 29, + -52, + 56, + -22, + 25, + -31, + 35, + -19, + 17, + -28, + 27, + -16, + 20, + -17, + 20, + -67, + 62, + -74, + 69, + -66, + 71, + -66, + 69, + -26, + 37, + -28, + 26, + -41, + 38, + -41, + 46, + -84, + 101, + -97, + 119, + -52, + 40, + -65, + 58, + -85, + 66, + -88, + 87, + -101, + 108, + -101, + 108, + -96, + 75, + -81, + 108, + -123, + 111, + -95, + 106, + -127, + 127, + -119, + 110, + -127, + 121, + -125, + 121, + -117, + 107, + -104, + 108, + -118, + 119, + -103, + 97, + -122, + 126, + -127, + 126, + -111, + 126, + -125, + 127, + -122, + 116, + -121, + 125, + -125, + 127, + -122, + 125, + -127, + 117, + -126, + 118, + -94, + 80, + -122, + 122, + -89, + 97, + -103, + 120, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -126, + 118, + -126, + 123, + -126, + 127, + -125, + 123, + -127, + 126, + -127, + 127, + -119, + 124, + -120, + 125, + -122, + 122, + -123, + 127, + -127, + 127, + -125, + 127, + -127, + 121, + -121, + 124, + -114, + 123, + -99, + 123, + -126, + 126, + -124, + 125, + -125, + 127, + -122, + 127, + -124, + 120, + -126, + 123, + -123, + 127, + -119, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -125, + 124, + -127, + 124, + -124, + 117, + -119, + 116, + -115, + 127, + -124, + 126, + -108, + 115, + -103, + 107, + -115, + 91, + -109, + 97, + -127, + 127, + -127, + 127, + -122, + 120, + -127, + 123, + -125, + 123, + -115, + 113, + -125, + 115, + -123, + 119, + -127, + 107, + -109, + 120, + -112, + 118, + -108, + 99, + -103, + 110, + -121, + 122, + -127, + 127, + -127, + 127, + -124, + 126, + -124, + 117, + -103, + 93, + -106, + 123, + -123, + 115, + -95, + 84, + -117, + 110, + -101, + 76, + -112, + 102, + -119, + 116, + -113, + 101, + -120, + 119, + -121, + 123, + -118, + 127, + -126, + 122, + -112, + 127, + -93, + 118, + -112, + 123, + -92, + 106, + -122, + 126, + -125, + 127, + -127, + 122, + -108, + 122, + -100, + 124, + -93, + 75, + -103, + 109, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -122, + 96, + -124, + 108, + -124, + 88, + -112, + 98, + -68, + 92, + -97, + 89, + -121, + 107, + -124, + 110, + -127, + 115, + -126, + 123, + -95, + 109, + -122, + 123, + -81, + 107, + -105, + 98, + -106, + 104, + -97, + 121, + -115, + 119, + -120, + 125, + -83, + 69, + -94, + 120, + -76, + 74, + -106, + 117, + -126, + 127, + -126, + 127, + -127, + 123, + -125, + 121, + -123, + 124, + -121, + 123, + -112, + 122, + -102, + 119, + -126, + 125, + -113, + 124, + -123, + 121, + -110, + 122, + -120, + 118, + -119, + 117, + -127, + 127, + -123, + 126, + -127, + 120, + -120, + 123, + -126, + 125, + -121, + 122, + -104, + 120, + -95, + 101, + -127, + 122, + -126, + 123, + -120, + 123, + -123, + 112, + -121, + 125, + -121, + 107, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -125, + 127, + -127, + 127, + -127, + 124, + -116, + 112, + -118, + 115, + -106, + 119, + -84, + 105, + -74, + 83, + -127, + 127, + -127, + 125, + -127, + 123, + -127, + 127, + -113, + 121, + -121, + 116, + -116, + 118, + -122, + 124, + -126, + 124, + -127, + 117, + -120, + 126, + -114, + 118, + -106, + 118, + -123, + 120, + -121, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -101, + 118, + -98, + 123, + -108, + 105, + -92, + 90, + -124, + 116, + -89, + 95, + -108, + 84, + -104, + 114, + -101, + 112, + -103, + 109, + -114, + 109, + -126, + 115, + -119, + 127, + -126, + 127, + -117, + 107, + -100, + 120, + -119, + 111, + -97, + 91, + -120, + 127, + -123, + 127, + -123, + 121, + -104, + 100, + -107, + 112, + -72, + 75, + -127, + 127, + -127, + 125, + -127, + 127, + -127, + 127, + -127, + 127, + -126, + 126, + -94, + 113, + -104, + 127, + -127, + 126, + -125, + 127, + -127, + 126, + -127, + 124, + -127, + 127, + -127, + 123, + -104, + 127, + -127, + 127, + -127, + 127, + -126, + 127, + -127, + 127, + -125, + 123, + -125, + 125, + -127, + 127, + -127, + 127, + -127, + 127, + -123, + 121, + -123, + 127, + -122, + 124, + -127, + 121, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -124, + 123, + -121, + 122, + -119, + 117, + -119, + 121, + -124, + 118, + -122, + 121, + -109, + 123, + -99, + 122, + -122, + 119, + -118, + 118, + -121, + 123, + -126, + 123, + -124, + 127, + -127, + 127, + -126, + 125, + -127, + 122, + -125, + 120, + -124, + 124, + -127, + 127, + -126, + 127, + -120, + 117, + -124, + 121, + -122, + 116, + -120, + 122, + -120, + 121, + -107, + 110, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -123, + 127, + -119, + 124, + -123, + 127, + -117, + 108, + -117, + 119, + -117, + 125, + -101, + 120, + -124, + 122, + -106, + 120, + -112, + 127, + -127, + 127, + -127, + 124, + -127, + 126, + -127, + 123, + -124, + 122, + -120, + 120, + -127, + 124, + -127, + 123, + -127, + 126, + -127, + 124, + -124, + 123, + -121, + 120, + -119, + 119, + -127, + 127, + -127, + 127, + -127, + 127, + -126, + 122, + -126, + 121, + -117, + 123, + -119, + 120, + -122, + 122, + -121, + 124, + -122, + 118, + -121, + 124, + -110, + 94, + -123, + 122, + -116, + 113, + -121, + 122, + -127, + 126, + -127, + 127, + -125, + 124, + -124, + 126, + -123, + 120, + -113, + 113, + -125, + 120, + -124, + 116, + -126, + 105, + -121, + 124, + -120, + 103, + -123, + 100, + -118, + 119, + -124, + 120, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -120, + 122, + -125, + 127, + -127, + 109, + -124, + 124, + -117, + 122, + -127, + 117, + -123, + 121, + -125, + 122, + -122, + 109, + -105, + 119, + -126, + 127, + -127, + 127, + -108, + 124, + -115, + 121, + -120, + 121, + -89, + 108, + -122, + 124, + -84, + 109, + -120, + 127, + -125, + 125, + -121, + 122, + -117, + 120, + -126, + 125, + -119, + 119, + -127, + 127, + -127, + 127, + -127, + 125, + -127, + 127, + -124, + 123, + -126, + 124, + -123, + 124, + -120, + 124, + -125, + 127, + -124, + 122, + -120, + 120, + -118, + 124, + -120, + 122, + -89, + 119, + -127, + 127, + -125, + 125, + -127, + 124, + -124, + 126, + -122, + 120, + -116, + 121, + -122, + 127, + -123, + 122, + -123, + 127, + -124, + 124, + -108, + 96, + -121, + 127, + -121, + 122, + -123, + 124, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 125, + -127, + 127, + -106, + 102, + -123, + 122, + -116, + 120, + -113, + 123, + -109, + 122, + -122, + 122, + -125, + 126, + -126, + 117, + -127, + 127, + -125, + 127, + -127, + 127, + -127, + 127, + -124, + 125, + -126, + 127, + -124, + 121, + -126, + 122, + -123, + 126, + -127, + 126, + -127, + 127, + -126, + 127, + -124, + 122, + -122, + 116, + -127, + 127, + -125, + 127, + -124, + 125, + -125, + 125, + -119, + 121, + -120, + 125, + -106, + 127, + -123, + 121, + -126, + 115, + -127, + 107, + -112, + 109, + -103, + 110, + -107, + 104, + -124, + 120, + -115, + 120, + -127, + 122, + -118, + 93, + -127, + 127, + -93, + 104, + -120, + 118, + -95, + 93, + -119, + 82, + -127, + 109, + -120, + 126, + -124, + 122, + -113, + 102, + -85, + 120, + -109, + 114, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 123, + -124, + 127, + -123, + 120, + -126, + 127, + -127, + 123, + -121, + 123, + -127, + 123, + -127, + 124, + -119, + 118, + -117, + 109, + -127, + 123, + -126, + 123, + -127, + 124, + -127, + 127, + -125, + 126, + -127, + 127, + -125, + 124, + -124, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -124, + 116, + -127, + 127, + -122, + 127, + -126, + 126, + -124, + 125, + -127, + 127, + -122, + 119, + -119, + 120, + -96, + 102, + -122, + 123, + -112, + 125, + -123, + 120, + -123, + 112, + -126, + 124, + -120, + 117, + -121, + 123, + -113, + 122, + -120, + 122, + -127, + 127, + -127, + 127, + -124, + 127, + -121, + 125, + -124, + 108, + -115, + 117, + -126, + 127, + -116, + 120, + -115, + 124, + -121, + 115, + -122, + 122, + -114, + 108, + -127, + 127, + -121, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -119, + 127, + -113, + 98, + -123, + 105, + -115, + 117, + -106, + 109, + -99, + 121, + -117, + 121, + -117, + 121, + -121, + 110, + -117, + 96, + -107, + 107, + -124, + 127, + -127, + 122, + -123, + 127, + -124, + 117, + -108, + 110, + -114, + 112, + -127, + 127, + -125, + 127, + -127, + 123, + -125, + 127, + -127, + 125, + -111, + 103, + -104, + 99, + -96, + 82, + -127, + 127, + -127, + 127, + -122, + 120, + -120, + 121, + -101, + 77, + -91, + 89, + -119, + 117, + -79, + 103, + -112, + 118, + -93, + 96, + -103, + 107, + -93, + 84, + -104, + 112, + -114, + 91, + -115, + 126, + -126, + 127, + -124, + 125, + -127, + 119, + -109, + 126, + -98, + 127, + -113, + 101, + -107, + 116, + -125, + 112, + -107, + 122, + -101, + 98, + -94, + 118, + -103, + 76, + -94, + 104, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -116, + 110, + -111, + 105, + -120, + 106, + -114, + 92, + -84, + 77, + -88, + 88, + -97, + 79, + -95, + 95, + -123, + 121, + -120, + 124, + -123, + 126, + -113, + 121, + -111, + 126, + -106, + 100, + -127, + 122, + -90, + 98, + -127, + 127, + -127, + 125, + -99, + 119, + -104, + 114, + -96, + 97, + -108, + 119, + -126, + 127, + -125, + 127, + -127, + 125, + -125, + 123, + -119, + 121, + -106, + 122, + -119, + 124, + -102, + 123, + -116, + 123, + -121, + 121, + -96, + 120, + -108, + 120, + -123, + 119, + -115, + 118, + -127, + 127, + -127, + 127, + -117, + 117, + -123, + 117, + -127, + 115, + -122, + 125, + -110, + 124, + -122, + 122, + -127, + 127, + -127, + 127, + -127, + 105, + -127, + 123, + -120, + 100, + -120, + 126, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 99, + -119, + 116, + -122, + 122, + -118, + 96, + -121, + 123, + -123, + 121, + -126, + 127, + -121, + 127, + -114, + 124, + -88, + 125, + -127, + 127, + -124, + 127, + -127, + 125, + -127, + 127, + -119, + 122, + -124, + 122, + -124, + 123, + -126, + 119, + -113, + 112, + -119, + 107, + -95, + 100, + -108, + 93, + -116, + 127, + -122, + 107, + -125, + 127, + -127, + 127, + -127, + 126, + -127, + 127, + -108, + 121, + -124, + 127, + -99, + 118, + -94, + 107, + -122, + 125, + -94, + 105, + -105, + 110, + -95, + 103, + -111, + 111, + -104, + 92, + -102, + 113, + -126, + 123, + -101, + 119, + -127, + 120, + -107, + 125, + -122, + 120, + -111, + 127, + -115, + 110, + -112, + 126, + -127, + 124, + -112, + 118, + -96, + 98, + -112, + 93, + -117, + 94, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 127, + -127, + 120, + -127, + 127, + -105, + 115, + -124, + 100, + -124, + 125, + -124, + 127, + -108, + 102, + -127, + 124, + -119, + 123, + -109, + 127, + -127, + 126, + -127, + 126, + -126, + 127, + -124, + 126, + -127, + 123, + -120, + 125, + -124, + 122, + -124, + 126, + -127, + 125, + -127, + 124, + -123, + 123, + -125, + 126, + -122, + 123, + -120, + 104, + -117, + 101, + -121, + 122, + -117, + 122, + -112, + 100, + -117, + 120, + -124, + 124, + -99, + 124, + -99, + 119, + -117, + 115, + -113, + 120, + -109, + 111, + -119, + 122, + -102, + 116, + -95, + 121, + -117, + 101, + -119, + 121, + -99, + 101, + -90, + 117, + -121, + 103, + -105, + 119, + -80, + 74, + -79, + 81, + -89, + 102, + -102, + 87, + -84, + 73, + -79, + 76, + -96, + 101, + -98, + 93, + -76, + 81, + -93, + 109, + -63, + 64, + -56, + 63, + -68, + 59, + -60, + 58, + -34, + 36, + -43, + 50, + -43, + 44, + -46, + 44, + -39, + 32, + -40, + 43, + -39, + 37, + -31, + 33, + -32, + 38, + -37, + 43, + -28, + 25, + -30, + 26, + -32, + 35, + -31, + 38, + -22, + 27, + -32, + 27, + -25, + 27, + -23, + 24, + -23, + 23, + -25, + 25, + -17, + 21, + -17, + 19, + -23, + 22, + -22, + 22, + -15, + 15, + -18, + 19, + -18, + 17, + -18, + 18, + -12, + 14, + -16, + 15, + -14, + 12, + -12, + 12, + -12, + 14, + -13, + 14, + -11, + 11, + -11, + 9, + -14, + 12, + -13, + 11, + -8, + 7, + -9, + 10, + -9, + 9, + -9, + 9, + -8, + 9, + -8, + 9, + -6, + 8, + -7, + 8, + -8, + 8, + -8, + 9, + -7, + 6, + -7, + 5, + -6, + 7, + -6, + 5, + -7, + 5, + -7, + 7, + -6, + 5, + -6, + 5, + -4, + 5, + -4, + 6, + -4, + 4, + -4, + 5, + -5, + 4, + -4, + 4, + -4, + 5, + -4, + 5, + -4, + 3, + -3, + 4, + -3, + 3, + -3, + 3, + -3, + 3, + -3, + 3, + -3, + 3, + -3, + 3, + -3, + 3, + -3, + 3, + -2, + 2, + -2, + 3, + -3, + 3, + -3, + 3, + -2, + 2, + -2, + 2, + -2, + 2, + -2, + 2, + -2, + 2, + -2, + 2, + -1, + 1, + -1, + 1, + -2, + 2, + -2, + 2, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 2, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + -1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] +} diff --git a/web_server.py b/web_server.py index d4a73c4..bac38dd 100644 --- a/web_server.py +++ b/web_server.py @@ -1,7 +1,6 @@ from sanic import Sanic from sanic.exceptions import NotFound, SanicException -from sanic.response import html, file, redirect -from sanic.response import json as resp_json +from sanic.response import html, file, redirect, text, json as resp_json from sanic_cors import CORS from jinja2 import Environment, FileSystemLoader from jinja2.utils import select_autoescape @@ -25,7 +24,8 @@ from helpers.device_manager import DeviceManager from helpers.state_manager import StateManager from helpers.the_terminator import Terminator -from helpers.audio_tools import get_silence_filename_if_available +from helpers.normalisation import get_normalised_filename_if_available +from helpers.audio_tools import get_silence_filename_if_available, generate_peaks_from_filename from helpers.myradio_api import MyRadioAPI from helpers.alert_manager import AlertManager import package @@ -429,7 +429,7 @@ async def audio_file(request, type: str, id: int): "music-tmp/{}-{}.mp3".format(type, id)) # Swap with a silence version if it's ready, else returns original. - filename = get_silence_filename_if_available(filename) + filename = get_normalised_filename_if_available(filename)#get_silence_filename_if_available(filename) # Send file or 404 try: @@ -438,6 +438,22 @@ async def audio_file(request, type: str, id: int): raise SanicException("Not Found: "+filename,404) return response +@app.route("/peaks//") +async def peaks(request, type: str, id: int): + if type not in ["managed", "track"]: + raise SanicException("Bad Request",400) + filename = resolve_external_file_path( + "music-tmp/{}-{}.mp3".format(type, id)) + + # Swap with a silence version if it's ready, else returns original. + filename = get_normalised_filename_if_available(filename) + + # Send file or 404 + # TODO 404! + peaks = generate_peaks_from_filename(filename) + return resp_json(peaks) + + # Static Files app.static(