blob: 9f192ac63ca13846d64812c7c76a07ce6c0031b9 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "Adaptor.hh"
#include "Compression.hh"
#include "OrcTest.hh"
#include "RLE.hh"
#include "wrap/gtest-wrapper.h"
#include <iostream>
#include <vector>
namespace orc {
std::vector<int64_t> decodeRLEv2(const unsigned char *bytes,
unsigned long l,
size_t n,
size_t count,
const char* notNull = nullptr) {
std::unique_ptr<RleDecoder> rle =
createRleDecoder(std::unique_ptr<SeekableInputStream>
(new SeekableArrayInputStream(bytes,l)), true,
RleVersion_2, *getDefaultPool());
std::vector<int64_t> results;
for (size_t i = 0; i < count; i+=n) {
size_t remaining = count - i;
size_t nread = std::min(n, remaining);
std::vector<int64_t> data(nread);
rle->next(data.data(), nread, notNull);
if (notNull) {
notNull += nread;
}
results.insert(results.end(), data.begin(), data.end());
}
return results;
}
void checkResults(const std::vector<int64_t> &e, const std::vector<int64_t> &a,
size_t n, const char* notNull = nullptr) {
EXPECT_EQ(e.size(), a.size()) << "vectors differ in size";
for (size_t i = 0; i < e.size(); ++i) {
if (!notNull || notNull[i]) {
EXPECT_EQ(e[i], a[i]) << "Output wrong at " << i << ", n=" << n;
}
}
}
TEST(RLEv2, basicDelta0) {
const size_t count = 20;
std::vector<int64_t> values;
for (size_t i = 0; i < count; ++i) {
values.push_back(static_cast<int64_t>(i));
}
const unsigned char bytes[] = {0xc0,0x13,0x00,0x02};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, count), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, count), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, count), 7);
checkResults(values, decodeRLEv2(bytes, l, count, count), count);
};
TEST(RLEv2, basicDelta1) {
std::vector<int64_t> values(5);
values[0] = -500;
values[1] = -400;
values[2] = -350;
values[3] = -325;
values[4] = -310;
const unsigned char bytes[] = {0xce,0x04,0xe7,0x07,0xc8,0x01,0x32,0x19,0x0f};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
values.size());
};
TEST(RLEv2, basicDelta2) {
std::vector<int64_t> values(5);
values[0] = -500;
values[1] = -600;
values[2] = -650;
values[3] = -675;
values[4] = -710;
const unsigned char bytes[] = {0xce,0x04,0xe7,0x07,0xc7,0x01,0x32,0x19,0x23};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
values.size());
};
TEST(RLEv2, basicDelta3) {
std::vector<int64_t> values(5);
values[0] = 500;
values[1] = 400;
values[2] = 350;
values[3] = 325;
values[4] = 310;
const unsigned char bytes[] = {0xce,0x04,0xe8,0x07,0xc7,0x01,0x32,0x19,0x0f};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
values.size());
};
TEST(RLEv2, basicDelta4) {
std::vector<int64_t> values(5);
values[0] = 500;
values[1] = 600;
values[2] = 650;
values[3] = 675;
values[4] = 710;
const unsigned char bytes[] = {0xce,0x04,0xe8,0x07,0xc8,0x01,0x32,0x19,0x23};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
values.size());
};
TEST(RLEv2, delta0Width) {
const unsigned char buffer[] = {0x4e, 0x2, 0x0, 0x1, 0x2, 0xc0, 0x2, 0x42,
0x0};
std::unique_ptr<RleDecoder> decoder =
createRleDecoder(std::unique_ptr<SeekableInputStream>
(new SeekableArrayInputStream
(buffer, ARRAY_SIZE(buffer))),
false, RleVersion_2, *getDefaultPool());
int64_t values[6];
decoder->next(values, 6, 0);
EXPECT_EQ(0, values[0]);
EXPECT_EQ(1, values[1]);
EXPECT_EQ(2, values[2]);
EXPECT_EQ(0x42, values[3]);
EXPECT_EQ(0x42, values[4]);
EXPECT_EQ(0x42, values[5]);
}
TEST(RLEv2, basicDelta0WithNulls) {
std::vector<int64_t> values;
std::vector<char> notNull;
for (size_t i = 0; i < 20; ++i) {
values.push_back(static_cast<int64_t>(i));
notNull.push_back(true);
// throw in a null every third value
bool addNull = (i % 3 == 0);
if (addNull) {
values.push_back(-1);
notNull.push_back(false);
}
}
const unsigned char bytes[] = {0xc0,0x13,0x00,0x02};
unsigned long l = sizeof(bytes) / sizeof(char);
const size_t count = values.size();
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, count, notNull.data()),
1, notNull.data());
checkResults(values, decodeRLEv2(bytes, l, 3, count, notNull.data()),
3, notNull.data());
checkResults(values, decodeRLEv2(bytes, l, 7, count, notNull.data()),
7, notNull.data());
checkResults(values, decodeRLEv2(bytes, l, count, count, notNull.data()),
count, notNull.data());
};
TEST(RLEv2, shortRepeats) {
const size_t runLength = 7;
const size_t nVals = 10;
const size_t count = nVals * runLength;
std::vector<int64_t> values;
for (size_t i = 0; i < nVals; ++i) {
for (size_t j = 0; j < runLength; ++j) {
values.push_back(static_cast<int64_t>(i));
}
}
const unsigned char bytes[] = {0x04,0x00,0x04,0x02,0x04,0x04,0x04,
0x06,0x04,0x08,0x04,0x0a,0x04,0x0c,
0x04,0x0e,0x04,0x10,0x04,0x12};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, count), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, count), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, count), 7);
checkResults(values, decodeRLEv2(bytes, l, count, count), count);
};
TEST(RLEv2, multiByteShortRepeats) {
const size_t runLength = 7;
const size_t nVals = 3;
const size_t count = nVals * runLength;
std::vector<int64_t> values;
for (size_t i = 0; i < nVals; ++i) {
for (size_t j = 0; j < runLength; ++j) {
values.push_back(static_cast<int64_t>(i) + (1LL << 62));
}
}
const unsigned char bytes[] = {0x3c,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3c,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x02,
0x3c,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x04};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, count), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, count), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, count), 7);
checkResults(values, decodeRLEv2(bytes, l, count, count), count);
};
TEST(RLEv2, 0to2Repeat1Direct) {
const unsigned char buffer[] = {0x46, 0x02, 0x02, 0x40};
std::unique_ptr<RleDecoder> rle =
createRleDecoder(std::unique_ptr<SeekableInputStream>
(new SeekableArrayInputStream(buffer,
ARRAY_SIZE(buffer))),
true, RleVersion_2, *getDefaultPool());
std::vector<int64_t> data(3);
rle->next(data.data(), 3, nullptr);
for (size_t i = 0; i < data.size(); ++i) {
EXPECT_EQ(i, data[i]) << "Output wrong at " << i;
}
};
TEST(RLEv2, bitSize2Direct) {
// 0,1 repeated 10 times (signed ints)
const size_t count = 20;
std::vector<int64_t> values;
for (size_t i = 0; i < count; ++i) {
values.push_back(i%2);
}
const unsigned char bytes[] = {0x42, 0x13, 0x22, 0x22, 0x22, 0x22, 0x22};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, count), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, count), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, count), 7);
checkResults(values, decodeRLEv2(bytes, l, count, count), count);
};
TEST(RLEv2, bitSize4Direct) {
// 0,2 repeated 10 times (signed ints)
const size_t count = 20;
std::vector<int64_t> values;
for (size_t i = 0; i < count; ++i) {
values.push_back((i%2)*2);
}
const unsigned char bytes[] = {0x46,0x13,0x04,0x04,0x04,0x04,
0x04,0x04,0x04,0x04,0x04,0x04};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, count), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, count), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, count), 7);
checkResults(values, decodeRLEv2(bytes, l, count, count), count);
};
TEST(RLEv2, multipleRunsDirect) {
std::vector<int64_t> values;
// 0,1 repeated 10 times (signed ints)
for (size_t i = 0; i < 20; ++i) {
values.push_back(i%2);
}
// 0,2 repeated 10 times (signed ints)
for (size_t i = 0; i < 20; ++i) {
values.push_back((i%2)*2);
}
const unsigned char bytes[] = {0x42,0x13,0x22,0x22,0x22,0x22,0x22,
0x46,0x13,0x04,0x04,0x04,0x04,0x04,
0x04,0x04,0x04,0x04,0x04};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
values.size());
};
TEST(RLEv2, largeNegativesDirect) {
const unsigned char buffer[] =
{0x7e,0x04,0xcf,0xca,0xcc,0x91,0xba,0x38,0x93,0xab,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x99,0xa5,
0xcc,0x28,0x03,0xf7,0xe0,0xff};
std::unique_ptr<RleDecoder> rle =
createRleDecoder(
std::unique_ptr<SeekableInputStream>(
new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer))),
true, RleVersion_2, *getDefaultPool());
std::vector<int64_t> data(5);
rle->next(data.data(), 5, nullptr);
EXPECT_EQ(-7486502418706614742, data[0]) << "Output wrong at " << 0;
EXPECT_EQ(0, data[1]) << "Output wrong at " << 1;
EXPECT_EQ(1, data[2]) << "Output wrong at " << 2;
EXPECT_EQ(1, data[3]) << "Output wrong at " << 3;
EXPECT_EQ(-5535739865598783616, data[4]) << "Output wrong at " << 4;
};
TEST(RLEv2, overflowDirect) {
std::vector<int64_t> values(4);
values[0] = 4513343538618202719l;
values[1] = 4513343538618202711l;
values[2] = 2911390882471569739l;
values[3] = -9181829309989854913l;
const unsigned char bytes[] = {0x7e,0x03,0x7d,0x45,0x3c,0x12,0x41,0x48,0xf4,
0xbe,0x7d,0x45,0x3c,0x12,0x41,0x48,0xf4,0xae,
0x50,0xce,0xad,0x2a,0x30,0x0e,0xd2,0x96,0xfe,
0xd8,0xd2,0x38,0x54,0x6e,0x3d,0x81};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
values.size());
};
TEST(RLEv2, basicPatched0) {
long v[] = {2030,2000,2020,1000000,2040,2050,2060,2070,2080,2090};
std::vector<int64_t> values;
for (size_t i = 0; i < sizeof(v) / sizeof(long); ++i) {
values.push_back(v[i]);
}
const unsigned char bytes[] = {0x8e,0x09,0x2b,0x21,0x07,0xd0,0x1e,0x00,0x14,
0x70,0x28,0x32,0x3c,0x46,0x50,0x5a,0xfc,0xe8};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
values.size());
};
TEST(RLEv2, basicPatched1) {
long v[] = {20, 2, 3, 2, 1, 3, 17, 71, 35, 2, 1, 139, 2, 2, 3, 1783, 475, 2,
1, 1, 3, 1, 3, 2, 32, 1, 2, 3, 1, 8, 30, 1, 3, 414, 1, 1, 135, 3,
3, 1, 414, 2, 1, 2, 2, 594, 2, 5, 6, 4, 11, 1, 2, 2, 1, 1, 52, 4,
1, 2, 7, 1, 17, 334, 1, 2, 1, 2, 2, 6, 1, 266, 1, 2, 217, 2, 6, 2,
13, 2, 2, 1, 2, 3, 5, 1, 2, 1, 7244, 11813, 1, 33, 2, -13, 1, 2, 3,
13, 1, 92, 3, 13, 5, 14, 9, 141, 12, 6, 15, 25};
std::vector<int64_t> values;
for (size_t i = 0; i < sizeof(v) / sizeof(long); ++i) {
values.push_back(v[i]);
}
const unsigned char bytes[] = {0x90,0x6d,0x04,0xa4,0x8d,0x10,0x83,0xc2,0x00,
0xf0,0x70,0x40,0x3c,0x54,0x18,0x03,0xc1,0xc9,
0x80,0x78,0x3c,0x21,0x04,0xf4,0x03,0xc1,0xc0,
0xe0,0x80,0x38,0x20,0x0f,0x16,0x83,0x81,0xe1,
0x00,0x70,0x54,0x56,0x0e,0x08,0x6a,0xc1,0xc0,
0xe4,0xa0,0x40,0x20,0x0e,0xd5,0x83,0xc1,0xc0,
0xf0,0x79,0x7c,0x1e,0x12,0x09,0x84,0x43,0x00,
0xe0,0x78,0x3c,0x1c,0x0e,0x20,0x84,0x41,0xc0,
0xf0,0xa0,0x38,0x3d,0x5b,0x07,0x03,0xc1,0xc0,
0xf0,0x78,0x4c,0x1d,0x17,0x07,0x03,0xdc,0xc0,
0xf0,0x98,0x3c,0x34,0x0f,0x07,0x83,0x81,0xe1,
0x00,0x90,0x38,0x1e,0x0e,0x2c,0x8c,0x81,0xc2,
0xe0,0x78,0x00,0x1c,0x0f,0x08,0x06,0x81,0xc6,
0x90,0x80,0x68,0x24,0x1b,0x0b,0x26,0x83,0x21,
0x30,0xe0,0x98,0x3c,0x6f,0x06,0xb7,0x03,0x70};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
values.size());
};
TEST(RLEv2, mixedPatchedAndShortRepeats) {
long v[] = {20, 2, 3, 2, 1, 3, 17, 71, 35, 2, 1, 139, 2, 2, 3, 1783, 475, 2, 1, 1, 3, 1, 3, 2, 32, 1, 2, 3, 1, 8, 30, 1, 3, 414, 1, 1, 135, 3, 3, 1, 414, 2, 1, 2, 2, 594, 2, 5, 6, 4, 11, 1, 2, 2, 1, 1, 52, 4, 1, 2, 7, 1, 17, 334, 1, 2, 1, 2, 2, 6, 1, 266, 1, 2, 217, 2, 6, 2, 13, 2, 2, 1, 2, 3, 5, 1, 2, 1, 7244, 11813, 1, 33, 2, -13, 1, 2, 3, 13, 1, 92, 3, 13, 5, 14, 9, 141, 12, 6, 15, 25, 1, 1, 1, 46, 2, 1, 1, 141, 3, 1, 1, 1, 1, 2, 1, 4, 34, 5, 78, 8, 1, 2, 2, 1, 9, 10, 2, 1, 4, 13, 1, 5, 4, 4, 19, 5, 1, 1, 1, 68, 33, 399, 1, 1885, 25, 5, 2, 4, 1, 1, 2, 16, 1, 2966, 3, 1, 1, 25501, 1, 1, 1, 66, 1, 3, 8, 131, 14, 5, 1, 2, 2, 1, 1, 8, 1, 1, 2, 1, 5, 9, 2, 3, 112, 13, 2, 2, 1, 5, 10, 3, 1, 1, 13, 2, 3, 4, 1, 3, 1, 1, 2, 1, 1, 2, 4, 2, 207, 1, 1, 2, 4, 3, 3, 2, 2, 16};
std::vector<int64_t> values;
for (size_t i = 0; i < sizeof(v) / sizeof(long); ++i) {
values.push_back(v[i]);
}
const unsigned char bytes[] = {0x90,0x6d,0x04,0xa4,0x8d,0x10,0x83,0xc2,0x00,0xf0,0x70,0x40,0x3c,0x54,0x18,0x03,0xc1,0xc9,0x80,0x78,0x3c,0x21,0x04,0xf4,0x03,0xc1,0xc0,0xe0,0x80,0x38,0x20,0x0f,0x16,0x83,0x81,0xe1,0x00,0x70,0x54,0x56,0x0e,0x08,0x6a,0xc1,0xc0,0xe4,0xa0,0x40,0x20,0x0e,0xd5,0x83,0xc1,0xc0,0xf0,0x79,0x7c,0x1e,0x12,0x09,0x84,0x43,0x00,0xe0,0x78,0x3c,0x1c,0x0e,0x20,0x84,0x41,0xc0,0xf0,0xa0,0x38,0x3d,0x5b,0x07,0x03,0xc1,0xc0,0xf0,0x78,0x4c,0x1d,0x17,0x07,0x03,0xdc,0xc0,0xf0,0x98,0x3c,0x34,0x0f,0x07,0x83,0x81,0xe1,0x00,0x90,0x38,0x1e,0x0e,0x2c,0x8c,0x81,0xc2,0xe0,0x78,0x00,0x1c,0x0f,0x08,0x06,0x81,0xc6,0x90,0x80,0x68,0x24,0x1b,0x0b,0x26,0x83,0x21,0x30,0xe0,0x98,0x3c,0x6f,0x06,0xb7,0x03,0x70,0x00,0x02,0x5e,0x05,0x00,0x5c,0x00,0x04,0x00,0x02,0x00,0x02,0x01,0x1a,0x00,0x06,0x01,0x02,0x8a,0x16,0x00,0x41,0x01,0x04,0x00,0xe1,0x10,0xd1,0xc0,0x04,0x10,0x08,0x24,0x10,0x03,0x30,0x01,0x03,0x0d,0x21,0x00,0xb0,0x00,0x02,0x5e,0x12,0x00,0x88,0x00,0x42,0x03,0x1e,0x00,0x02,0x0e,0xba,0x00,0x32,0x00,0x0a,0x00,0x04,0x00,0x08,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x20,0x00,0x02,0x17,0x2c,0x00,0x06,0x00,0x02,0x00,0x02,0xc7,0x3a,0x00,0x02,0x8c,0x36,0x00,0xa2,0x01,0x82,0x00,0x10,0x70,0x43,0x42,0x00,0x02,0x04,0x00,0x00,0xe0,0x00,0x01,0x00,0x10,0x40,0x10,0x5b,0xc6,0x01,0x02,0x00,0x20,0x90,0x40,0x00,0x0c,0x02,0x08,0x18,0x00,0x40,0x00,0x01,0x00,0x00,0x08,0x30,0x33,0x80,0x00,0x02,0x0c,0x10,0x20,0x20,0x47,0x80,0x13,0x4c};
unsigned long l = sizeof(bytes) / sizeof(char);
// Read 1 at a time, then 3 at a time, etc.
checkResults(values, decodeRLEv2(bytes, l, 1, values.size()), 1);
checkResults(values, decodeRLEv2(bytes, l, 3, values.size()), 3);
checkResults(values, decodeRLEv2(bytes, l, 7, values.size()), 7);
checkResults(values, decodeRLEv2(bytes, l, values.size(), values.size()),
values.size());
};
TEST(RLEv2, basicDirectSeek) {
// 0,1 repeated 10 times (signed ints) followed by
// 0,2 repeated 10 times (signed ints)
const unsigned char bytes[] = {0x42,0x13,0x22,0x22,0x22,0x22,0x22,
0x46,0x13,0x04,0x04,0x04,0x04,0x04,
0x04,0x04,0x04,0x04,0x04};
unsigned long l = sizeof(bytes) / sizeof(char);
std::unique_ptr<RleDecoder> rle =
createRleDecoder(std::unique_ptr<SeekableInputStream>
(new SeekableArrayInputStream(bytes,l)), true,
RleVersion_2, *getDefaultPool());
std::list<uint64_t> position;
position.push_back(7); // byte position; skip first 20 [0 to 19]
position.push_back(13); // value position; skip 13 more [20 to 32]
PositionProvider location(position);
rle->seek(location);
std::vector<int64_t> data(3);
rle->next(data.data(), 3, nullptr);
EXPECT_EQ(2, data[0]);
EXPECT_EQ(0, data[1]);
EXPECT_EQ(2, data[2]);
rle->next(data.data(), 3, nullptr);
EXPECT_EQ(0, data[0]);
EXPECT_EQ(2, data[1]);
EXPECT_EQ(0, data[2]);
rle->next(data.data(), 1, nullptr);
EXPECT_EQ(2, data[0]);
};
TEST(RLEv2, bitsLeftByPreviousStream) {
// test for #109
// 118 DIRECT values, followed by PATHCED values
const unsigned char bytes[] = {
0x5a, 0x75, 0x92, 0x42, 0x49, 0x09, 0x2b, 0xa4,
0xae, 0x92, 0xc2, 0x4b, 0x89, 0x2f, 0x24, 0xbc,
0x93, 0x2a, 0x4c, 0xa9, 0x34, 0x24, 0xe0, 0x93,
0x92, 0x4e, 0xe9, 0x40, 0xa5, 0x04, 0x94, 0x12,
0x62, 0xa9, 0xc9, 0xa7, 0x26, 0x9c, 0xaa, 0x73,
0x09, 0xcd, 0x27, 0x34, 0x9c, 0xf2, 0x74, 0x49,
0xd3, 0x27, 0x50, 0x9d, 0x42, 0x75, 0x29, 0xd4,
0xa7, 0x5a, 0x9d, 0xaa, 0x79, 0x89, 0xe9, 0x27,
0xa4, 0x9e, 0xea, 0x7c, 0x29, 0xf6, 0x27, 0xdc,
0x9f, 0xb2, 0x7f, 0x4a, 0x00, 0xa8, 0x14, 0xa0,
0x72, 0x82, 0x8a, 0x19, 0x28, 0x6e, 0xa2, 0x52,
0x89, 0x4a, 0x28, 0x28, 0xa6, 0xa2, 0x9a, 0x8b,
0x6a, 0x2d, 0xa8, 0xb8, 0xa2, 0xe2, 0x8b, 0xaa,
0x53, 0xa9, 0x54, 0xa5, 0x92, 0x98, 0x6a, 0x62,
0xa9, 0x9c, 0xa6, 0x8a, 0x9b, 0xea, 0x70, 0x29,
0xd2, 0xa7, 0x52, 0x9d, 0x4a, 0x77, 0x29, 0xe0,
0xa7, 0xa2, 0x9e, 0xaa, 0x7b, 0x29, 0xf0, 0xa7,
0xd2, 0xa0, 0x0a, 0x84, 0x2a, 0x18, 0xa8, 0x72,
0xa1, 0xca, 0x89, 0x2a, 0x30, 0xa9, 0x4a, 0xa5,
0x4a, 0x96, 0x2a, 0xae, 0xab, 0x02, 0xac, 0x2b,
0x8d, 0x2e, 0x60, 0xb9, 0x82, 0xe7, 0x2b, 0x9f,
0xae, 0x84, 0xba, 0x52, 0xe9, 0xeb, 0xad, 0x2e,
0xb6, 0xbc, 0x32, 0xf1, 0xcb, 0xcc, 0x2f, 0x42,
0xbd, 0x8a, 0xf7, 0xcb, 0xe1, 0xaf, 0xa4, 0xbe,
0x9a, 0xfa, 0x6b, 0xeb, 0xaf, 0xba, 0xbe, 0xea,
0xfd, 0x2b, 0xf4, 0xaf, 0xd8, 0xbf, 0xfb, 0x00,
0x80, // <= end of DIRECT, start of PATCHED =>
0x90,0x6d,0x04,0xa4,0x8d,0x10,0x83,0xc2,0x00,
0xf0,0x70,0x40,0x3c,0x54,0x18,0x03,0xc1,0xc9,
0x80,0x78,0x3c,0x21,0x04,0xf4,0x03,0xc1,0xc0,
0xe0,0x80,0x38,0x20,0x0f,0x16,0x83,0x81,0xe1,
0x00,0x70,0x54,0x56,0x0e,0x08,0x6a,0xc1,0xc0,
0xe4,0xa0,0x40,0x20,0x0e,0xd5,0x83,0xc1,0xc0,
0xf0,0x79,0x7c,0x1e,0x12,0x09,0x84,0x43,0x00,
0xe0,0x78,0x3c,0x1c,0x0e,0x20,0x84,0x41,0xc0,
0xf0,0xa0,0x38,0x3d,0x5b,0x07,0x03,0xc1,0xc0,
0xf0,0x78,0x4c,0x1d,0x17,0x07,0x03,0xdc,0xc0,
0xf0,0x98,0x3c,0x34,0x0f,0x07,0x83,0x81,0xe1,
0x00,0x90,0x38,0x1e,0x0e,0x2c,0x8c,0x81,0xc2,
0xe0,0x78,0x00,0x1c,0x0f,0x08,0x06,0x81,0xc6,
0x90,0x80,0x68,0x24,0x1b,0x0b,0x26,0x83,0x21,
0x30,0xe0,0x98,0x3c,0x6f,0x06,0xb7,0x03,0x70
};
unsigned long l = sizeof(bytes) / sizeof(unsigned char);
// PATCHED values.
long v[] = {20, 2, 3, 2, 1, 3, 17, 71, 35, 2, 1, 139, 2, 2, 3, 1783, 475, 2,
1, 1, 3, 1, 3, 2, 32, 1, 2, 3, 1, 8, 30, 1, 3, 414, 1, 1, 135, 3,
3, 1, 414, 2, 1, 2, 2, 594, 2, 5, 6, 4, 11, 1, 2, 2, 1, 1, 52, 4,
1, 2, 7, 1, 17, 334, 1, 2, 1, 2, 2, 6, 1, 266, 1, 2, 217, 2, 6, 2,
13, 2, 2, 1, 2, 3, 5, 1, 2, 1, 7244, 11813, 1, 33, 2, -13, 1, 2, 3,
13, 1, 92, 3, 13, 5, 14, 9, 141, 12, 6, 15, 25};
unsigned long D = 118, P = sizeof(v) / sizeof(long), N = D + P;
std::unique_ptr<RleDecoder> rle =
createRleDecoder(std::unique_ptr<SeekableInputStream>
(new SeekableArrayInputStream(bytes,l)), true,
RleVersion_2, *getDefaultPool());
std::vector<int64_t> data(N);
rle->next(data.data(), N, nullptr);
// check patched values
for (size_t i=0; i < P; ++i) {
EXPECT_EQ(v[i], data[i+D]);
}
};
TEST(RLEv1, simpleTest) {
const unsigned char buffer[] = {0x61, 0xff, 0x64, 0xfb, 0x02, 0x03, 0x5, 0x7,
0xb};
std::unique_ptr<RleDecoder> rle =
createRleDecoder(std::unique_ptr<SeekableInputStream>
(new SeekableArrayInputStream(buffer,
ARRAY_SIZE(buffer))),
false, RleVersion_1, *getDefaultPool());
std::vector<int64_t> data(105);
rle->next(data.data(), 105, nullptr);
for (size_t i = 0; i < 100; ++i) {
EXPECT_EQ(100 - i, data[i]) << "Output wrong at " << i;
}
EXPECT_EQ(2, data[100]);
EXPECT_EQ(3, data[101]);
EXPECT_EQ(5, data[102]);
EXPECT_EQ(7, data[103]);
EXPECT_EQ(11, data[104]);
};
TEST(RLEv1, signedNullLiteralTest) {
const unsigned char buffer[]= {0xf8, 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7};
std::unique_ptr<RleDecoder> rle =
createRleDecoder(std::unique_ptr<SeekableInputStream>
(new SeekableArrayInputStream(buffer,
ARRAY_SIZE(buffer))),
true, RleVersion_1, *getDefaultPool());
std::vector<int64_t> data(8);
std::vector<char> notNull(8, 1);
rle->next(data.data(), 8, notNull.data());
for (size_t i = 0; i < 8; ++i) {
EXPECT_EQ(i % 2 == 0 ? i/2 : -((i+1)/2),
data[i]);
}
}
TEST(RLEv1, splitHeader) {
const unsigned char buffer[] = {0x0, 0x00, 0xdc, 0xba, 0x98, 0x76};
std::unique_ptr<RleDecoder> rle =
createRleDecoder(
std::unique_ptr<SeekableInputStream>
(new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer), 4)),
false, RleVersion_1, *getDefaultPool());
std::vector<int64_t> data(200);
rle->next(data.data(), 3, nullptr);
for (size_t i = 0; i < 3; ++i) {
EXPECT_EQ(247864668, data[i]) << "Output wrong at " << i;
}
}
TEST(RLEv1, splitRuns) {
const unsigned char buffer[] = {0x7d, 0x01, 0xff, 0x01, 0xfb, 0x01,
0x02, 0x03, 0x04, 0x05};
SeekableInputStream* const stream =
new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer));
std::unique_ptr<RleDecoder> rle =
createRleDecoder(std::unique_ptr<SeekableInputStream>(stream),
false, RleVersion_1, *getDefaultPool());
std::vector<int64_t> data(200);
for (size_t i = 0; i < 42; ++i) {
rle->next(data.data(), 3, nullptr);
for (size_t j = 0; j < 3; ++j) {
EXPECT_EQ(255 + i * 3 + j, data[j])
<< "Wrong output at " << i << ", " << j;
}
}
rle->next(data.data(), 3, nullptr);
EXPECT_EQ(381, data[0]);
EXPECT_EQ(382, data[1]);
EXPECT_EQ(1, data[2]);
rle->next(data.data(), 3, nullptr);
EXPECT_EQ(2, data[0]);
EXPECT_EQ(3, data[1]);
EXPECT_EQ(4, data[2]);
rle->next(data.data(), 1, nullptr);
EXPECT_EQ(5, data[0]);
}
TEST(RLEv1, testSigned) {
const unsigned char buffer[] = {0x7f, 0xff, 0x20};
SeekableInputStream* const stream =
new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer));
std::unique_ptr<RleDecoder> rle =
createRleDecoder(std::unique_ptr<SeekableInputStream>(stream),
true, RleVersion_1, *getDefaultPool());
std::vector<int64_t> data(100);
rle->next(data.data(), data.size(), nullptr);
for (size_t i = 0; i < data.size(); ++i) {
EXPECT_EQ(16 - i, data[i]) << "Wrong output at " << i;
}
rle->next(data.data(), 30, nullptr);
for(size_t i = 0; i < 30; ++i) {
EXPECT_EQ(16 - 100 - static_cast<long>(i), data[i])
<< "Wrong output at " << (i + 100);
}
}
TEST(RLEv1, testNull) {
const unsigned char buffer[] = {0x75, 0x02, 0x00};
SeekableInputStream* const stream =
new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer));
std::unique_ptr<RleDecoder> rle =
createRleDecoder(std::unique_ptr<SeekableInputStream>(stream),
true, RleVersion_1, *getDefaultPool());
std::vector<int64_t> data(24);
std::vector<char> notNull(24);
for (size_t i = 0; i < notNull.size(); ++i) {
notNull[i] = (i + 1) % 2;
}
for (size_t i = 0; i < 10; ++i) {
for(size_t j = 0; j < data.size(); ++j) {
data[j] = -1;
}
rle->next(data.data(), 24, notNull.data());
for (size_t j = 0; j < 24; ++j) {
if (notNull[j]) {
EXPECT_EQ(i * 24 + j, data[j]);
} else {
EXPECT_EQ(-1, data[j]);
}
}
}
}
TEST(RLEv1, testAllNulls) {
const unsigned char buffer[] =
{0xf0, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x3d, 0x00, 0x12};
SeekableInputStream* const stream =
new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer));
std::unique_ptr<RleDecoder> rle =
createRleDecoder(std::unique_ptr<SeekableInputStream>(stream),
false, RleVersion_1, *getDefaultPool());
std::vector<int64_t> data(16, -1);
std::vector<char> allNull(16, 0);
std::vector<char> noNull(16, 1);
rle->next(data.data(), 16, allNull.data());
for (size_t i = 0; i < data.size(); ++i) {
EXPECT_EQ(-1, data[i]) << "Output wrong at " << i;
}
rle->next(data.data(), data.size(), noNull.data());
for (size_t i = 0; i < data.size(); ++i) {
EXPECT_EQ(i, data[i]) << "Output wrong at " << i;
data[i] = -1;
}
rle->next(data.data(), data.size(), allNull.data());
for (size_t i = 0; i < data.size(); ++i) {
EXPECT_EQ(-1, data[i]) << "Output wrong at " << i;
}
for (size_t i = 0; i < 4; ++i) {
rle->next(data.data(), data.size(), noNull.data());
for(size_t j = 0; j < data.size(); ++j) {
EXPECT_EQ(18, data[j]) << "Output wrong at " << i;
}
}
rle->next(data.data(), data.size(), allNull.data());
}
TEST(RLEv1, skipTest) {
// Create the RLE stream from Java's TestRunLengthIntegerEncoding.testSkips
// for (size_t i = 0; i < 1024; ++i)
// out.write(i);
// for (size_t i = 1024; i < 2048; ++i)
// out.write(i * 256);
// This causes the first half to be delta encoded and the second half to
// be literal encoded.
const unsigned char buffer[] =
{
127, 1, 0, 127, 1, 132, 2, 127, 1, 136, 4, 127, 1, 140, 6, 127,
1, 144, 8, 127, 1, 148, 10, 127, 1, 152, 12, 111, 1, 156, 14, 128,
128, 128, 32, 128, 132, 32, 128, 136, 32, 128, 140, 32, 128, 144, 32, 128,
148, 32, 128, 152, 32, 128, 156, 32, 128, 160, 32, 128, 164, 32, 128, 168,
32, 128, 172, 32, 128, 176, 32, 128, 180, 32, 128, 184, 32, 128, 188, 32,
128, 192, 32, 128, 196, 32, 128, 200, 32, 128, 204, 32, 128, 208, 32, 128,
212, 32, 128, 216, 32, 128, 220, 32, 128, 224, 32, 128, 228, 32, 128, 232,
32, 128, 236, 32, 128, 240, 32, 128, 244, 32, 128, 248, 32, 128, 252, 32,
128, 128, 33, 128, 132, 33, 128, 136, 33, 128, 140, 33, 128, 144, 33, 128,
148, 33, 128, 152, 33, 128, 156, 33, 128, 160, 33, 128, 164, 33, 128, 168,
33, 128, 172, 33, 128, 176, 33, 128, 180, 33, 128, 184, 33, 128, 188, 33,
128, 192, 33, 128, 196, 33, 128, 200, 33, 128, 204, 33, 128, 208, 33, 128,
212, 33, 128, 216, 33, 128, 220, 33, 128, 224, 33, 128, 228, 33, 128, 232,
33, 128, 236, 33, 128, 240, 33, 128, 244, 33, 128, 248, 33, 128, 252, 33,
128, 128, 34, 128, 132, 34, 128, 136, 34, 128, 140, 34, 128, 144, 34, 128,
148, 34, 128, 152, 34, 128, 156, 34, 128, 160, 34, 128, 164, 34, 128, 168,
34, 128, 172, 34, 128, 176, 34, 128, 180, 34, 128, 184, 34, 128, 188, 34,
128, 192, 34, 128, 196, 34, 128, 200, 34, 128, 204, 34, 128, 208, 34, 128,
212, 34, 128, 216, 34, 128, 220, 34, 128, 224, 34, 128, 228, 34, 128, 232,
34, 128, 236, 34, 128, 240, 34, 128, 244, 34, 128, 248, 34, 128, 252, 34,
128, 128, 35, 128, 132, 35, 128, 136, 35, 128, 140, 35, 128, 144, 35, 128,
148, 35, 128, 152, 35, 128, 156, 35, 128, 160, 35, 128, 164, 35, 128, 168,
35, 128, 172, 35, 128, 176, 35, 128, 180, 35, 128, 184, 35, 128, 188, 35,
128, 192, 35, 128, 196, 35, 128, 200, 35, 128, 204, 35, 128, 208, 35, 128,
212, 35, 128, 216, 35, 128, 220, 35, 128, 224, 35, 128, 228, 35, 128, 232,
35, 128, 236, 35, 128, 240, 35, 128, 244, 35, 128, 248, 35, 128, 252, 35,
128, 128, 128, 36, 128, 132, 36, 128, 136, 36, 128, 140, 36, 128, 144, 36,
128, 148, 36, 128, 152, 36, 128, 156, 36, 128, 160, 36, 128, 164, 36, 128,
168, 36, 128, 172, 36, 128, 176, 36, 128, 180, 36, 128, 184, 36, 128, 188,
36, 128, 192, 36, 128, 196, 36, 128, 200, 36, 128, 204, 36, 128, 208, 36,
128, 212, 36, 128, 216, 36, 128, 220, 36, 128, 224, 36, 128, 228, 36, 128,
232, 36, 128, 236, 36, 128, 240, 36, 128, 244, 36, 128, 248, 36, 128, 252,
36, 128, 128, 37, 128, 132, 37, 128, 136, 37, 128, 140, 37, 128, 144, 37,
128, 148, 37, 128, 152, 37, 128, 156, 37, 128, 160, 37, 128, 164, 37, 128,
168, 37, 128, 172, 37, 128, 176, 37, 128, 180, 37, 128, 184, 37, 128, 188,
37, 128, 192, 37, 128, 196, 37, 128, 200, 37, 128, 204, 37, 128, 208, 37,
128, 212, 37, 128, 216, 37, 128, 220, 37, 128, 224, 37, 128, 228, 37, 128,
232, 37, 128, 236, 37, 128, 240, 37, 128, 244, 37, 128, 248, 37, 128, 252,
37, 128, 128, 38, 128, 132, 38, 128, 136, 38, 128, 140, 38, 128, 144, 38,
128, 148, 38, 128, 152, 38, 128, 156, 38, 128, 160, 38, 128, 164, 38, 128,
168, 38, 128, 172, 38, 128, 176, 38, 128, 180, 38, 128, 184, 38, 128, 188,
38, 128, 192, 38, 128, 196, 38, 128, 200, 38, 128, 204, 38, 128, 208, 38,
128, 212, 38, 128, 216, 38, 128, 220, 38, 128, 224, 38, 128, 228, 38, 128,
232, 38, 128, 236, 38, 128, 240, 38, 128, 244, 38, 128, 248, 38, 128, 252,
38, 128, 128, 39, 128, 132, 39, 128, 136, 39, 128, 140, 39, 128, 144, 39,
128, 148, 39, 128, 152, 39, 128, 156, 39, 128, 160, 39, 128, 164, 39, 128,
168, 39, 128, 172, 39, 128, 176, 39, 128, 180, 39, 128, 184, 39, 128, 188,
39, 128, 192, 39, 128, 196, 39, 128, 200, 39, 128, 204, 39, 128, 208, 39,
128, 212, 39, 128, 216, 39, 128, 220, 39, 128, 224, 39, 128, 228, 39, 128,
232, 39, 128, 236, 39, 128, 240, 39, 128, 244, 39, 128, 248, 39, 128, 252,
39, 128, 128, 128, 40, 128, 132, 40, 128, 136, 40, 128, 140, 40, 128, 144,
40, 128, 148, 40, 128, 152, 40, 128, 156, 40, 128, 160, 40, 128, 164, 40,
128, 168, 40, 128, 172, 40, 128, 176, 40, 128, 180, 40, 128, 184, 40, 128,
188, 40, 128, 192, 40, 128, 196, 40, 128, 200, 40, 128, 204, 40, 128, 208,
40, 128, 212, 40, 128, 216, 40, 128, 220, 40, 128, 224, 40, 128, 228, 40,
128, 232, 40, 128, 236, 40, 128, 240, 40, 128, 244, 40, 128, 248, 40, 128,
252, 40, 128, 128, 41, 128, 132, 41, 128, 136, 41, 128, 140, 41, 128, 144,
41, 128, 148, 41, 128, 152, 41, 128, 156, 41, 128, 160, 41, 128, 164, 41,
128, 168, 41, 128, 172, 41, 128, 176, 41, 128, 180, 41, 128, 184, 41, 128,
188, 41, 128, 192, 41, 128, 196, 41, 128, 200, 41, 128, 204, 41, 128, 208,
41, 128, 212, 41, 128, 216, 41, 128, 220, 41, 128, 224, 41, 128, 228, 41,
128, 232, 41, 128, 236, 41, 128, 240, 41, 128, 244, 41, 128, 248, 41, 128,
252, 41, 128, 128, 42, 128, 132, 42, 128, 136, 42, 128, 140, 42, 128, 144,
42, 128, 148, 42, 128, 152, 42, 128, 156, 42, 128, 160, 42, 128, 164, 42,
128, 168, 42, 128, 172, 42, 128, 176, 42, 128, 180, 42, 128, 184, 42, 128,
188, 42, 128, 192, 42, 128, 196, 42, 128, 200, 42, 128, 204, 42, 128, 208,
42, 128, 212, 42, 128, 216, 42, 128, 220, 42, 128, 224, 42, 128, 228, 42,
128, 232, 42, 128, 236, 42, 128, 240, 42, 128, 244, 42, 128, 248, 42, 128,
252, 42, 128, 128, 43, 128, 132, 43, 128, 136, 43, 128, 140, 43, 128, 144,
43, 128, 148, 43, 128, 152, 43, 128, 156, 43, 128, 160, 43, 128, 164, 43,
128, 168, 43, 128, 172, 43, 128, 176, 43, 128, 180, 43, 128, 184, 43, 128,
188, 43, 128, 192, 43, 128, 196, 43, 128, 200, 43, 128, 204, 43, 128, 208,
43, 128, 212, 43, 128, 216, 43, 128, 220, 43, 128, 224, 43, 128, 228, 43,
128, 232, 43, 128, 236, 43, 128, 240, 43, 128, 244, 43, 128, 248, 43, 128,
252, 43, 128, 128, 128, 44, 128, 132, 44, 128, 136, 44, 128, 140, 44, 128,
144, 44, 128, 148, 44, 128, 152, 44, 128, 156, 44, 128, 160, 44, 128, 164,
44, 128, 168, 44, 128, 172, 44, 128, 176, 44, 128, 180, 44, 128, 184, 44,
128, 188, 44, 128, 192, 44, 128, 196, 44, 128, 200, 44, 128, 204, 44, 128,
208, 44, 128, 212, 44, 128, 216, 44, 128, 220, 44, 128, 224, 44, 128, 228,
44, 128, 232, 44, 128, 236, 44, 128, 240, 44, 128, 244, 44, 128, 248, 44,
128, 252, 44, 128, 128, 45, 128, 132, 45, 128, 136, 45, 128, 140, 45, 128,
144, 45, 128, 148, 45, 128, 152, 45, 128, 156, 45, 128, 160, 45, 128, 164,
45, 128, 168, 45, 128, 172, 45, 128, 176, 45, 128, 180, 45, 128, 184, 45,
128, 188, 45, 128, 192, 45, 128, 196, 45, 128, 200, 45, 128, 204, 45, 128,
208, 45, 128, 212, 45, 128, 216, 45, 128, 220, 45, 128, 224, 45, 128, 228,
45, 128, 232, 45, 128, 236, 45, 128, 240, 45, 128, 244, 45, 128, 248, 45,
128, 252, 45, 128, 128, 46, 128, 132, 46, 128, 136, 46, 128, 140, 46, 128,
144, 46, 128, 148, 46, 128, 152, 46, 128, 156, 46, 128, 160, 46, 128, 164,
46, 128, 168, 46, 128, 172, 46, 128, 176, 46, 128, 180, 46, 128, 184, 46,
128, 188, 46, 128, 192, 46, 128, 196, 46, 128, 200, 46, 128, 204, 46, 128,
208, 46, 128, 212, 46, 128, 216, 46, 128, 220, 46, 128, 224, 46, 128, 228,
46, 128, 232, 46, 128, 236, 46, 128, 240, 46, 128, 244, 46, 128, 248, 46,
128, 252, 46, 128, 128, 47, 128, 132, 47, 128, 136, 47, 128, 140, 47, 128,
144, 47, 128, 148, 47, 128, 152, 47, 128, 156, 47, 128, 160, 47, 128, 164,
47, 128, 168, 47, 128, 172, 47, 128, 176, 47, 128, 180, 47, 128, 184, 47,
128, 188, 47, 128, 192, 47, 128, 196, 47, 128, 200, 47, 128, 204, 47, 128,
208, 47, 128, 212, 47, 128, 216, 47, 128, 220, 47, 128, 224, 47, 128, 228,
47, 128, 232, 47, 128, 236, 47, 128, 240, 47, 128, 244, 47, 128, 248, 47,
128, 252, 47, 128, 128, 128, 48, 128, 132, 48, 128, 136, 48, 128, 140, 48,
128, 144, 48, 128, 148, 48, 128, 152, 48, 128, 156, 48, 128, 160, 48, 128,
164, 48, 128, 168, 48, 128, 172, 48, 128, 176, 48, 128, 180, 48, 128, 184,
48, 128, 188, 48, 128, 192, 48, 128, 196, 48, 128, 200, 48, 128, 204, 48,
128, 208, 48, 128, 212, 48, 128, 216, 48, 128, 220, 48, 128, 224, 48, 128,
228, 48, 128, 232, 48, 128, 236, 48, 128, 240, 48, 128, 244, 48, 128, 248,
48, 128, 252, 48, 128, 128, 49, 128, 132, 49, 128, 136, 49, 128, 140, 49,
128, 144, 49, 128, 148, 49, 128, 152, 49, 128, 156, 49, 128, 160, 49, 128,
164, 49, 128, 168, 49, 128, 172, 49, 128, 176, 49, 128, 180, 49, 128, 184,
49, 128, 188, 49, 128, 192, 49, 128, 196, 49, 128, 200, 49, 128, 204, 49,
128, 208, 49, 128, 212, 49, 128, 216, 49, 128, 220, 49, 128, 224, 49, 128,
228, 49, 128, 232, 49, 128, 236, 49, 128, 240, 49, 128, 244, 49, 128, 248,
49, 128, 252, 49, 128, 128, 50, 128, 132, 50, 128, 136, 50, 128, 140, 50,
128, 144, 50, 128, 148, 50, 128, 152, 50, 128, 156, 50, 128, 160, 50, 128,
164, 50, 128, 168, 50, 128, 172, 50, 128, 176, 50, 128, 180, 50, 128, 184,
50, 128, 188, 50, 128, 192, 50, 128, 196, 50, 128, 200, 50, 128, 204, 50,
128, 208, 50, 128, 212, 50, 128, 216, 50, 128, 220, 50, 128, 224, 50, 128,
228, 50, 128, 232, 50, 128, 236, 50, 128, 240, 50, 128, 244, 50, 128, 248,
50, 128, 252, 50, 128, 128, 51, 128, 132, 51, 128, 136, 51, 128, 140, 51,
128, 144, 51, 128, 148, 51, 128, 152, 51, 128, 156, 51, 128, 160, 51, 128,
164, 51, 128, 168, 51, 128, 172, 51, 128, 176, 51, 128, 180, 51, 128, 184,
51, 128, 188, 51, 128, 192, 51, 128, 196, 51, 128, 200, 51, 128, 204, 51,
128, 208, 51, 128, 212, 51, 128, 216, 51, 128, 220, 51, 128, 224, 51, 128,
228, 51, 128, 232, 51, 128, 236, 51, 128, 240, 51, 128, 244, 51, 128, 248,
51, 128, 252, 51, 128, 128, 128, 52, 128, 132, 52, 128, 136, 52, 128, 140,
52, 128, 144, 52, 128, 148, 52, 128, 152, 52, 128, 156, 52, 128, 160, 52,
128, 164, 52, 128, 168, 52, 128, 172, 52, 128, 176, 52, 128, 180, 52, 128,
184, 52, 128, 188, 52, 128, 192, 52, 128, 196, 52, 128, 200, 52, 128, 204,
52, 128, 208, 52, 128, 212, 52, 128, 216, 52, 128, 220, 52, 128, 224, 52,
128, 228, 52, 128, 232, 52, 128, 236, 52, 128, 240, 52, 128, 244, 52, 128,
248, 52, 128, 252, 52, 128, 128, 53, 128, 132, 53, 128, 136, 53, 128, 140,
53, 128, 144, 53, 128, 148, 53, 128, 152, 53, 128, 156, 53, 128, 160, 53,
128, 164, 53, 128, 168, 53, 128, 172, 53, 128, 176, 53, 128, 180, 53, 128,
184, 53, 128, 188, 53, 128, 192, 53, 128, 196, 53, 128, 200, 53, 128, 204,
53, 128, 208, 53, 128, 212, 53, 128, 216, 53, 128, 220, 53, 128, 224, 53,
128, 228, 53, 128, 232, 53, 128, 236, 53, 128, 240, 53, 128, 244, 53, 128,
248, 53, 128, 252, 53, 128, 128, 54, 128, 132, 54, 128, 136, 54, 128, 140,
54, 128, 144, 54, 128, 148, 54, 128, 152, 54, 128, 156, 54, 128, 160, 54,
128, 164, 54, 128, 168, 54, 128, 172, 54, 128, 176, 54, 128, 180, 54, 128,
184, 54, 128, 188, 54, 128, 192, 54, 128, 196, 54, 128, 200, 54, 128, 204,
54, 128, 208, 54, 128, 212, 54, 128, 216, 54, 128, 220, 54, 128, 224, 54,
128, 228, 54, 128, 232, 54, 128, 236, 54, 128, 240, 54, 128, 244, 54, 128,
248, 54, 128, 252, 54, 128, 128, 55, 128, 132, 55, 128, 136, 55, 128, 140,
55, 128, 144, 55, 128, 148, 55, 128, 152, 55, 128, 156, 55, 128, 160, 55,
128, 164, 55, 128, 168, 55, 128, 172, 55, 128, 176, 55, 128, 180, 55, 128,
184, 55, 128, 188, 55, 128, 192, 55, 128, 196, 55, 128, 200, 55, 128, 204,
55, 128, 208, 55, 128, 212, 55, 128, 216, 55, 128, 220, 55, 128, 224, 55,
128, 228, 55, 128, 232, 55, 128, 236, 55, 128, 240, 55, 128, 244, 55, 128,
248, 55, 128, 252, 55, 128, 128, 128, 56, 128, 132, 56, 128, 136, 56, 128,
140, 56, 128, 144, 56, 128, 148, 56, 128, 152, 56, 128, 156, 56, 128, 160,
56, 128, 164, 56, 128, 168, 56, 128, 172, 56, 128, 176, 56, 128, 180, 56,
128, 184, 56, 128, 188, 56, 128, 192, 56, 128, 196, 56, 128, 200, 56, 128,
204, 56, 128, 208, 56, 128, 212, 56, 128, 216, 56, 128, 220, 56, 128, 224,
56, 128, 228, 56, 128, 232, 56, 128, 236, 56, 128, 240, 56, 128, 244, 56,
128, 248, 56, 128, 252, 56, 128, 128, 57, 128, 132, 57, 128, 136, 57, 128,
140, 57, 128, 144, 57, 128, 148, 57, 128, 152, 57, 128, 156, 57, 128, 160,
57, 128, 164, 57, 128, 168, 57, 128, 172, 57, 128, 176, 57, 128, 180, 57,
128, 184, 57, 128, 188, 57, 128, 192, 57, 128, 196, 57, 128, 200, 57, 128,
204, 57, 128, 208, 57, 128, 212, 57, 128, 216, 57, 128, 220, 57, 128, 224,
57, 128, 228, 57, 128, 232, 57, 128, 236, 57, 128, 240, 57, 128, 244, 57,
128, 248, 57, 128, 252, 57, 128, 128, 58, 128, 132, 58, 128, 136, 58, 128,
140, 58, 128, 144, 58, 128, 148, 58, 128, 152, 58, 128, 156, 58, 128, 160,
58, 128, 164, 58, 128, 168, 58, 128, 172, 58, 128, 176, 58, 128, 180, 58,
128, 184, 58, 128, 188, 58, 128, 192, 58, 128, 196, 58, 128, 200, 58, 128,
204, 58, 128, 208, 58, 128, 212, 58, 128, 216, 58, 128, 220, 58, 128, 224,
58, 128, 228, 58, 128, 232, 58, 128, 236, 58, 128, 240, 58, 128, 244, 58,
128, 248, 58, 128, 252, 58, 128, 128, 59, 128, 132, 59, 128, 136, 59, 128,
140, 59, 128, 144, 59, 128, 148, 59, 128, 152, 59, 128, 156, 59, 128, 160,
59, 128, 164, 59, 128, 168, 59, 128, 172, 59, 128, 176, 59, 128, 180, 59,
128, 184, 59, 128, 188, 59, 128, 192, 59, 128, 196, 59, 128, 200, 59, 128,
204, 59, 128, 208, 59, 128, 212, 59, 128, 216, 59, 128, 220, 59, 128, 224,
59, 128, 228, 59, 128, 232, 59, 128, 236, 59, 128, 240, 59, 128, 244, 59,
128, 248, 59, 128, 252, 59, 128, 128, 128, 60, 128, 132, 60, 128, 136, 60,
128, 140, 60, 128, 144, 60, 128, 148, 60, 128, 152, 60, 128, 156, 60, 128,
160, 60, 128, 164, 60, 128, 168, 60, 128, 172, 60, 128, 176, 60, 128, 180,
60, 128, 184, 60, 128, 188, 60, 128, 192, 60, 128, 196, 60, 128, 200, 60,
128, 204, 60, 128, 208, 60, 128, 212, 60, 128, 216, 60, 128, 220, 60, 128,
224, 60, 128, 228, 60, 128, 232, 60, 128, 236, 60, 128, 240, 60, 128, 244,
60, 128, 248, 60, 128, 252, 60, 128, 128, 61, 128, 132, 61, 128, 136, 61,
128, 140, 61, 128, 144, 61, 128, 148, 61, 128, 152, 61, 128, 156, 61, 128,
160, 61, 128, 164, 61, 128, 168, 61, 128, 172, 61, 128, 176, 61, 128, 180,
61, 128, 184, 61, 128, 188, 61, 128, 192, 61, 128, 196, 61, 128, 200, 61,
128, 204, 61, 128, 208, 61, 128, 212, 61, 128, 216, 61, 128, 220, 61, 128,
224, 61, 128, 228, 61, 128, 232, 61, 128, 236, 61, 128, 240, 61, 128, 244,
61, 128, 248, 61, 128, 252, 61, 128, 128, 62, 128, 132, 62, 128, 136, 62,
128, 140, 62, 128, 144, 62, 128, 148, 62, 128, 152, 62, 128, 156, 62, 128,
160, 62, 128, 164, 62, 128, 168, 62, 128, 172, 62, 128, 176, 62, 128, 180,
62, 128, 184, 62, 128, 188, 62, 128, 192, 62, 128, 196, 62, 128, 200, 62,
128, 204, 62, 128, 208, 62, 128, 212, 62, 128, 216, 62, 128, 220, 62, 128,
224, 62, 128, 228, 62, 128, 232, 62, 128, 236, 62, 128, 240, 62, 128, 244,
62, 128, 248, 62, 128, 252, 62, 128, 128, 63, 128, 132, 63, 128, 136, 63,
128, 140, 63, 128, 144, 63, 128, 148, 63, 128, 152, 63, 128, 156, 63, 128,
160, 63, 128, 164, 63, 128, 168, 63, 128, 172, 63, 128, 176, 63, 128, 180,
63, 128, 184, 63, 128, 188, 63, 128, 192, 63, 128, 196, 63, 128, 200, 63,
128, 204, 63, 128, 208, 63, 128, 212, 63, 128, 216, 63, 128, 220, 63, 128,
224, 63, 128, 228, 63, 128, 232, 63, 128, 236, 63, 128, 240, 63, 128, 244,
63, 128, 248, 63, 128, 252, 63};
SeekableInputStream* const stream =
new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer));
std::unique_ptr<RleDecoder> rle =
createRleDecoder(std::unique_ptr<SeekableInputStream>(stream),
true, RleVersion_1, *getDefaultPool());
std::vector<int64_t> data(1);
for (size_t i = 0; i < 2048; i += 10) {
rle->next(data.data(), 1, nullptr);
if (i < 1024) {
EXPECT_EQ(i, data[0]) << "Wrong output at " << i;
} else {
EXPECT_EQ(256 * i, data[0]) << "Wrong output at " << i;
}
if (i < 2038) {
rle->skip(9);
}
rle->skip(0);
}
}
TEST(RLEv1, seekTest) {
// Create the RLE stream from Java's
// TestRunLengthIntegerEncoding.testUncompressedSeek
// for (size_t i = 0; i < 1024; ++i)
// out.write(i / 4);
// for (size_t i = 1024; i < 2048; ++i)
// out.write(2 * i);
// for (size_t i = 0; i < 2048; ++i)
// out.write(junk[i]);
// This causes the first half to be delta encoded and the second half to
// be literal encoded.
const unsigned char buffer[] = {
1, 0, 0, 1, 0, 2, 1, 0, 4, 1, 0, 6, 1, 0, 8, 1,
0, 10, 1, 0, 12, 1, 0, 14, 1, 0, 16, 1, 0, 18, 1, 0,
20, 1, 0, 22, 1, 0, 24, 1, 0, 26, 1, 0, 28, 1, 0, 30,
1, 0, 32, 1, 0, 34, 1, 0, 36, 1, 0, 38, 1, 0, 40, 1,
0, 42, 1, 0, 44, 1, 0, 46, 1, 0, 48, 1, 0, 50, 1, 0,
52, 1, 0, 54, 1, 0, 56, 1, 0, 58, 1, 0, 60, 1, 0, 62,
1, 0, 64, 1, 0, 66, 1, 0, 68, 1, 0, 70, 1, 0, 72, 1,
0, 74, 1, 0, 76, 1, 0, 78, 1, 0, 80, 1, 0, 82, 1, 0,
84, 1, 0, 86, 1, 0, 88, 1, 0, 90, 1, 0, 92, 1, 0, 94,
1, 0, 96, 1, 0, 98, 1, 0, 100, 1, 0, 102, 1, 0, 104, 1,
0, 106, 1, 0, 108, 1, 0, 110, 1, 0, 112, 1, 0, 114, 1, 0,
116, 1, 0, 118, 1, 0, 120, 1, 0, 122, 1, 0, 124, 1, 0, 126,
1, 0, 128, 1, 1, 0, 130, 1, 1, 0, 132, 1, 1, 0, 134, 1,
1, 0, 136, 1, 1, 0, 138, 1, 1, 0, 140, 1, 1, 0, 142, 1,
1, 0, 144, 1, 1, 0, 146, 1, 1, 0, 148, 1, 1, 0, 150, 1,
1, 0, 152, 1, 1, 0, 154, 1, 1, 0, 156, 1, 1, 0, 158, 1,
1, 0, 160, 1, 1, 0, 162, 1, 1, 0, 164, 1, 1, 0, 166, 1,
1, 0, 168, 1, 1, 0, 170, 1, 1, 0, 172, 1, 1, 0, 174, 1,
1, 0, 176, 1, 1, 0, 178, 1, 1, 0, 180, 1, 1, 0, 182, 1,
1, 0, 184, 1, 1, 0, 186, 1, 1, 0, 188, 1, 1, 0, 190, 1,
1, 0, 192, 1, 1, 0, 194, 1, 1, 0, 196, 1, 1, 0, 198, 1,
1, 0, 200, 1, 1, 0, 202, 1, 1, 0, 204, 1, 1, 0, 206, 1,
1, 0, 208, 1, 1, 0, 210, 1, 1, 0, 212, 1, 1, 0, 214, 1,
1, 0, 216, 1, 1, 0, 218, 1, 1, 0, 220, 1, 1, 0, 222, 1,
1, 0, 224, 1, 1, 0, 226, 1, 1, 0, 228, 1, 1, 0, 230, 1,
1, 0, 232, 1, 1, 0, 234, 1, 1, 0, 236, 1, 1, 0, 238, 1,
1, 0, 240, 1, 1, 0, 242, 1, 1, 0, 244, 1, 1, 0, 246, 1,
1, 0, 248, 1, 1, 0, 250, 1, 1, 0, 252, 1, 1, 0, 254, 1,
1, 0, 128, 2, 1, 0, 130, 2, 1, 0, 132, 2, 1, 0, 134, 2,
1, 0, 136, 2, 1, 0, 138, 2, 1, 0, 140, 2, 1, 0, 142, 2,
1, 0, 144, 2, 1, 0, 146, 2, 1, 0, 148, 2, 1, 0, 150, 2,
1, 0, 152, 2, 1, 0, 154, 2, 1, 0, 156, 2, 1, 0, 158, 2,
1, 0, 160, 2, 1, 0, 162, 2, 1, 0, 164, 2, 1, 0, 166, 2,
1, 0, 168, 2, 1, 0, 170, 2, 1, 0, 172, 2, 1, 0, 174, 2,
1, 0, 176, 2, 1, 0, 178, 2, 1, 0, 180, 2, 1, 0, 182, 2,
1, 0, 184, 2, 1, 0, 186, 2, 1, 0, 188, 2, 1, 0, 190, 2,
1, 0, 192, 2, 1, 0, 194, 2, 1, 0, 196, 2, 1, 0, 198, 2,
1, 0, 200, 2, 1, 0, 202, 2, 1, 0, 204, 2, 1, 0, 206, 2,
1, 0, 208, 2, 1, 0, 210, 2, 1, 0, 212, 2, 1, 0, 214, 2,
1, 0, 216, 2, 1, 0, 218, 2, 1, 0, 220, 2, 1, 0, 222, 2,
1, 0, 224, 2, 1, 0, 226, 2, 1, 0, 228, 2, 1, 0, 230, 2,
1, 0, 232, 2, 1, 0, 234, 2, 1, 0, 236, 2, 1, 0, 238, 2,
1, 0, 240, 2, 1, 0, 242, 2, 1, 0, 244, 2, 1, 0, 246, 2,
1, 0, 248, 2, 1, 0, 250, 2, 1, 0, 252, 2, 1, 0, 254, 2,
1, 0, 128, 3, 1, 0, 130, 3, 1, 0, 132, 3, 1, 0, 134, 3,
1, 0, 136, 3, 1, 0, 138, 3, 1, 0, 140, 3, 1, 0, 142, 3,
1, 0, 144, 3, 1, 0, 146, 3, 1, 0, 148, 3, 1, 0, 150, 3,
1, 0, 152, 3, 1, 0, 154, 3, 1, 0, 156, 3, 1, 0, 158, 3,
1, 0, 160, 3, 1, 0, 162, 3, 1, 0, 164, 3, 1, 0, 166, 3,
1, 0, 168, 3, 1, 0, 170, 3, 1, 0, 172, 3, 1, 0, 174, 3,
1, 0, 176, 3, 1, 0, 178, 3, 1, 0, 180, 3, 1, 0, 182, 3,
1, 0, 184, 3, 1, 0, 186, 3, 1, 0, 188, 3, 1, 0, 190, 3,
1, 0, 192, 3, 1, 0, 194, 3, 1, 0, 196, 3, 1, 0, 198, 3,
1, 0, 200, 3, 1, 0, 202, 3, 1, 0, 204, 3, 1, 0, 206, 3,
1, 0, 208, 3, 1, 0, 210, 3, 1, 0, 212, 3, 1, 0, 214, 3,
1, 0, 216, 3, 1, 0, 218, 3, 1, 0, 220, 3, 1, 0, 222, 3,
1, 0, 224, 3, 1, 0, 226, 3, 1, 0, 228, 3, 1, 0, 230, 3,
1, 0, 232, 3, 1, 0, 234, 3, 1, 0, 236, 3, 1, 0, 238, 3,
1, 0, 240, 3, 1, 0, 242, 3, 1, 0, 244, 3, 1, 0, 246, 3,
1, 0, 248, 3, 1, 0, 250, 3, 1, 0, 252, 3, 1, 0, 254, 3,
127, 2, 128, 32, 127, 2, 136, 36, 127, 2, 144, 40, 127, 2, 152, 44,
127, 2, 160, 48, 127, 2, 168, 52, 127, 2, 176, 56, 111, 2, 184, 60,
128, 147, 150, 232, 240, 8, 168, 134, 179, 187, 12, 246, 145, 173, 142, 11,
241, 162, 190, 162, 9, 239, 218, 128, 243, 5, 202, 175, 131, 196, 12, 151,
253, 204, 160, 4, 229, 167, 247, 255, 12, 255, 177, 140, 184, 7, 188, 145,
181, 229, 1, 178, 190, 158, 163, 8, 147, 179, 151, 132, 8, 150, 133, 222,
129, 11, 193, 218, 187, 242, 14, 181, 177, 154, 155, 9, 150, 145, 194, 135,
8, 186, 222, 142, 242, 10, 140, 195, 254, 237, 11, 141, 189, 143, 198, 14,
229, 146, 237, 203, 8, 251, 162, 179, 211, 3, 222, 237, 175, 145, 13, 221,
178, 163, 162, 3, 211, 192, 165, 189, 14, 230, 228, 168, 250, 4, 141, 140,
247, 178, 7, 143, 164, 170, 152, 2, 131, 166, 136, 26, 171, 143, 232, 134,
12, 158, 239, 246, 204, 11, 133, 128, 213, 223, 14, 255, 213, 190, 250, 15,
143, 162, 252, 157, 4, 204, 181, 135, 245, 7, 206, 241, 254, 136, 4, 184,
182, 211, 190, 15, 172, 156, 202, 135, 10, 249, 180, 139, 131, 4, 202, 128,
204, 221, 9, 131, 247, 166, 249, 8, 141, 236, 241, 185, 3, 128, 229, 150,
186, 2, 237, 189, 141, 218, 9, 193, 240, 241, 156, 3, 210, 142, 198, 202,
10, 227, 241, 194, 234, 7, 145, 180, 228, 254, 6, 171, 249, 185, 188, 11,
215, 135, 224, 219, 4, 133, 132, 178, 165, 7, 205, 180, 133, 209, 11, 198,
253, 246, 145, 12, 190, 194, 153, 146, 8, 139, 220, 235, 249, 1, 170, 203,
205, 159, 6, 136, 130, 154, 166, 14, 250, 189, 153, 191, 7, 178, 163, 191,
158, 12, 251, 138, 135, 245, 10, 175, 249, 219, 164, 14, 136, 185, 220, 188,
7, 170, 135, 221, 146, 7, 209, 224, 204, 171, 11, 216, 144, 236, 172, 1,
133, 205, 202, 170, 6, 215, 250, 133, 181, 3, 181, 133, 142, 158, 5, 166,
192, 134, 238, 13, 246, 243, 233, 218, 12, 163, 202, 238, 241, 14, 241, 214,
224, 215, 2, 212, 192, 237, 243, 10, 163, 165, 163, 206, 6, 159, 161, 227,
152, 14, 209, 234, 225, 249, 13, 167, 206, 188, 161, 3, 143, 209, 188, 214,
11, 184, 224, 210, 200, 10, 185, 171, 199, 183, 3, 177, 229, 245, 86, 255,
183, 178, 142, 9, 232, 209, 135, 151, 8, 191, 153, 174, 175, 7, 190, 245,
224, 174, 9, 243, 165, 145, 169, 1, 145, 161, 221, 249, 13, 195, 221, 244,
240, 5, 157, 156, 217, 237, 15, 143, 201, 155, 207, 5, 169, 136, 192, 238,
12, 135, 223, 244, 200, 2, 137, 228, 167, 187, 1, 134, 212, 158, 155, 15,
186, 224, 212, 214, 7, 193, 141, 216, 241, 2, 246, 159, 138, 117, 216, 230,
215, 29, 204, 178, 147, 255, 8, 195, 140, 136, 164, 11, 234, 204, 155, 222,
10, 193, 156, 138, 187, 8, 161, 161, 184, 212, 1, 128, 141, 162, 133, 13,
180, 211, 132, 210, 9, 239, 203, 201, 177, 5, 236, 191, 140, 207, 13, 173,
205, 192, 186, 7, 179, 214, 222, 136, 8, 189, 142, 204, 152, 5, 221, 176,
135, 241, 1, 223, 146, 195, 166, 11, 146, 133, 226, 137, 6, 150, 243, 247,
1, 153, 246, 184, 42, 234, 194, 229, 98, 237, 144, 253, 133, 11, 196, 131,
158, 244, 6, 218, 149, 253, 221, 7, 219, 180, 234, 156, 10, 179, 255, 197,
218, 13, 150, 137, 240, 204, 9, 240, 185, 181, 203, 2, 160, 194, 146, 246,
5, 131, 168, 191, 138, 4, 158, 245, 240, 150, 15, 157, 202, 136, 14, 135,
154, 226, 240, 5, 153, 168, 212, 222, 8, 128, 218, 198, 244, 133, 13, 183,
245, 153, 118, 139, 141, 238, 141, 1, 235, 193, 197, 5, 169, 141, 210, 62,
231, 186, 238, 219, 6, 141, 243, 204, 242, 12, 172, 165, 150, 187, 13, 163,
254, 250, 230, 12, 203, 166, 166, 223, 3, 177, 155, 168, 182, 4, 213, 130,
148, 221, 3, 150, 178, 146, 235, 6, 149, 226, 237, 225, 2, 177, 149, 218,
10, 205, 241, 161, 21, 186, 239, 197, 189, 15, 132, 249, 249, 171, 5, 130,
223, 220, 167, 5, 171, 235, 129, 84, 207, 145, 246, 231, 2, 183, 176, 230,
148, 11, 180, 142, 254, 128, 1, 171, 251, 177, 177, 1, 188, 190, 157, 222,
11, 140, 195, 192, 141, 10, 200, 139, 160, 247, 9, 139, 247, 194, 144, 1,
160, 160, 234, 208, 11, 174, 210, 150, 196, 15, 209, 201, 176, 208, 14, 199,
183, 218, 132, 8, 175, 143, 188, 168, 7, 172, 234, 158, 248, 11, 192, 223,
160, 152, 7, 178, 134, 130, 235, 3, 243, 134, 181, 181, 4, 225, 135, 251,
236, 7, 203, 166, 149, 169, 10, 181, 213, 156, 193, 12, 239, 138, 235, 252,
2, 183, 243, 201, 133, 10, 137, 186, 227, 237, 13, 255, 188, 221, 148, 14,
188, 156, 198, 143, 15, 223, 224, 252, 208, 9, 160, 241, 190, 221, 13, 195,
241, 163, 241, 9, 199, 253, 138, 163, 12, 173, 251, 143, 133, 12, 167, 246,
153, 247, 14, 237, 223, 140, 174, 14, 219, 229, 138, 242, 2, 200, 163, 210,
86, 197, 251, 199, 241, 9, 243, 211, 209, 132, 3, 178, 176, 152, 224, 13,
195, 131, 248, 159, 5, 194, 255, 160, 171, 14, 145, 243, 143, 173, 3, 222,
168, 246, 134, 2, 178, 145, 204, 240, 1, 176, 240, 236, 165, 14, 254, 145,
162, 165, 8, 243, 173, 131, 238, 3, 247, 192, 235, 163, 4, 244, 239, 180,
203, 15, 214, 167, 152, 233, 13, 176, 158, 206, 235, 9, 252, 150, 228, 160,
13, 148, 243, 234, 239, 2, 225, 152, 250, 167, 5, 252, 143, 229, 254, 4,
184, 202, 161, 157, 14, 233, 190, 185, 195, 9, 159, 223, 240, 216, 11, 132,
172, 243, 200, 6, 212, 182, 191, 194, 13, 230, 245, 240, 130, 12, 189, 146,
233, 239, 2, 155, 190, 214, 183, 15, 159, 222, 148, 155, 13, 195, 158, 248,
112, 224, 219, 145, 234, 12, 145, 169, 172, 135, 10, 234, 184, 245, 220, 4,
138, 150, 232, 212, 5, 132, 195, 135, 214, 5, 181, 247, 216, 205, 12, 239,
160, 183, 178, 9, 161, 143, 210, 206, 11, 248, 209, 207, 94, 166, 178, 165,
97, 133, 162, 246, 212, 9, 206, 240, 235, 156, 1, 200, 228, 176, 252, 12,
163, 215, 219, 141, 1, 236, 133, 216, 202, 9, 220, 170, 222, 242, 10, 239,
203, 197, 220, 11, 148, 218, 209, 161, 7, 185, 175, 210, 171, 15, 153, 213,
208, 214, 15, 188, 239, 128, 244, 13, 141, 220, 136, 166, 12, 150, 148, 250,
175, 13, 130, 145, 226, 216, 1, 216, 204, 215, 193, 9, 191, 211, 181, 229,
14, 233, 168, 165, 9, 240, 188, 146, 132, 12, 173, 220, 201, 244, 4, 140,
147, 190, 199, 15, 190, 213, 175, 213, 1, 254, 212, 239, 171, 10, 200, 161,
168, 144, 10, 161, 188, 230, 163, 6, 192, 198, 213, 167, 3, 240, 251, 180,
243, 5, 202, 165, 247, 147, 7, 173, 191, 133, 228, 3, 229, 139, 154, 210,
7, 147, 254, 164, 236, 13, 162, 214, 180, 128, 8, 202, 176, 252, 143, 13,
154, 179, 169, 149, 3, 169, 156, 168, 229, 1, 164, 128, 214, 138, 15, 128,
239, 253, 160, 181, 2, 232, 203, 196, 235, 11, 181, 153, 131, 240, 12, 145,
178, 179, 206, 12, 134, 244, 215, 141, 10, 138, 228, 171, 244, 7, 246, 160,
221, 177, 14, 176, 231, 208, 135, 9, 194, 210, 159, 234, 2, 238, 250, 139,
146, 10, 249, 191, 224, 241, 10, 250, 140, 140, 147, 5, 190, 185, 216, 220,
15, 248, 131, 153, 236, 9, 140, 219, 183, 252, 14, 254, 184, 223, 216, 14,
253, 211, 235, 254, 14, 252, 180, 147, 152, 9, 147, 221, 188, 174, 1, 222,
219, 180, 185, 12, 185, 175, 244, 136, 9, 214, 147, 217, 182, 4, 191, 193,
233, 157, 2, 238, 191, 156, 211, 14, 229, 221, 129, 224, 2, 230, 212, 248,
128, 3, 186, 165, 136, 84, 129, 216, 148, 139, 15, 150, 231, 196, 184, 8,
160, 156, 253, 171, 2, 156, 198, 161, 183, 11, 164, 181, 155, 137, 8, 133,
196, 192, 213, 6, 140, 174, 143, 152, 12, 142, 202, 143, 192, 9, 128, 167,
234, 152, 13, 214, 131, 156, 246, 14, 167, 223, 250, 135, 4, 233, 185, 236,
128, 1, 138, 131, 251, 181, 9, 184, 141, 213, 136, 15, 171, 224, 222, 192,
12, 244, 168, 162, 144, 1, 212, 183, 184, 200, 9, 177, 193, 168, 174, 14,
249, 175, 129, 197, 1, 142, 181, 130, 162, 10, 214, 197, 196, 214, 4, 148,
146, 228, 202, 13, 213, 154, 241, 127, 165, 166, 144, 164, 4, 205, 251, 139,
128, 13, 244, 188, 143, 236, 12, 190, 247, 138, 217, 8, 185, 201, 217, 187,
4, 130, 142, 167, 137, 4, 139, 185, 215, 95, 136, 170, 224, 218, 9, 154,
158, 177, 200, 15, 227, 154, 189, 136, 15, 224, 233, 220, 179, 3, 227, 203,
160, 188, 7, 236, 228, 239, 162, 15, 214, 227, 159, 242, 4, 151, 252, 232,
42, 151, 166, 168, 245, 3, 135, 180, 250, 243, 15, 167, 254, 137, 160, 13,
214, 240, 225, 152, 8, 190, 229, 204, 136, 13, 150, 219, 186, 10, 163, 249,
225, 249, 6, 215, 233, 254, 162, 9, 171, 204, 237, 189, 5, 229, 137, 174,
157, 6, 135, 205, 140, 164, 10, 189, 136, 130, 244, 1, 210, 222, 223, 247,
1, 189, 128, 142, 203, 12, 232, 241, 180, 195, 12, 237, 228, 243, 183, 7,
218, 155, 204, 158, 14, 235, 167, 134, 183, 6, 171, 218, 141, 128, 3, 184,
152, 251, 187, 10, 138, 217, 169, 182, 2, 210, 140, 240, 138, 7, 150, 156,
232, 128, 9, 209, 231, 181, 174, 14, 243, 210, 173, 34, 220, 254, 188, 199,
14, 245, 195, 226, 124, 141, 228, 248, 228, 15, 158, 166, 194, 150, 6, 152,
220, 238, 252, 13, 179, 132, 217, 220, 15, 213, 168, 186, 245, 4, 241, 243,
200, 226, 10, 216, 178, 141, 137, 13, 134, 176, 169, 179, 6, 212, 242, 197,
75, 175, 222, 238, 237, 10, 185, 143, 171, 166, 6, 180, 198, 129, 170, 5,
159, 129, 176, 134, 11, 130, 248, 213, 183, 12, 204, 162, 169, 238, 8, 139,
139, 145, 227, 15, 232, 239, 206, 163, 3, 145, 157, 143, 183, 10, 250, 190,
179, 189, 3, 185, 138, 211, 215, 3, 179, 147, 158, 165, 13, 231, 226, 199,
245, 11, 147, 179, 178, 190, 1, 208, 217, 154, 195, 14, 226, 194, 229, 142,
8, 198, 175, 184, 231, 4, 199, 198, 191, 24, 184, 134, 226, 231, 10, 152,
208, 222, 254, 1, 134, 167, 234, 69, 175, 214, 177, 218, 3, 218, 234, 128,
162, 3, 160, 177, 187, 166, 3, 201, 210, 191, 159, 13, 240, 152, 160, 250,
6, 235, 130, 214, 240, 11, 128, 237, 251, 245, 225, 3, 245, 237, 174, 230,
9, 252, 148, 229, 201, 7, 152, 148, 165, 153, 7, 223, 238, 242, 16, 156,
212, 237, 228, 7, 139, 153, 178, 37, 219, 217, 217, 172, 15, 178, 168, 128,
199, 9, 236, 189, 144, 226, 12, 214, 248, 134, 230, 13, 163, 252, 247, 55,
239, 252, 149, 196, 3, 230, 159, 214, 139, 6, 132, 200, 241, 154, 2, 129,
231, 153, 173, 12, 235, 131, 255, 157, 2, 246, 190, 145, 55, 205, 201, 240,
141, 9, 188, 202, 199, 189, 6, 196, 235, 245, 205, 11, 249, 253, 241, 223,
6, 187, 250, 137, 241, 9, 133, 135, 168, 146, 8, 132, 248, 219, 156, 8,
132, 241, 185, 4, 198, 209, 147, 129, 11, 229, 192, 218, 178, 4, 199, 210,
138, 166, 13, 244, 148, 172, 141, 2, 194, 215, 171, 220, 1, 192, 248, 230,
128, 2, 238, 167, 209, 222, 11, 240, 200, 227, 150, 11, 182, 217, 170, 158,
14, 223, 223, 254, 201, 10, 140, 164, 245, 175, 2, 178, 140, 153, 102, 139,
145, 181, 242, 8, 188, 154, 214, 154, 15, 149, 187, 204, 192, 2, 223, 153,
219, 51, 245, 236, 130, 133, 5, 197, 138, 169, 80, 243, 162, 164, 167, 1,
206, 232, 180, 137, 12, 180, 191, 164, 226, 8, 162, 180, 231, 222, 13, 184,
143, 156, 74, 134, 230, 248, 219, 10, 203, 156, 149, 205, 1, 219, 205, 173,
167, 10, 174, 146, 180, 141, 7, 214, 231, 229, 231, 10, 181, 246, 174, 180,
15, 236, 175, 222, 241, 7, 191, 150, 253, 209, 8, 233, 139, 167, 149, 13,
142, 249, 150, 223, 10, 220, 151, 135, 222, 5, 138, 228, 133, 131, 4, 232,
183, 160, 245, 3, 157, 219, 209, 200, 5, 159, 242, 142, 148, 13, 241, 207,
248, 177, 11, 179, 226, 169, 150, 13, 169, 201, 212, 218, 8, 172, 214, 220,
31, 155, 173, 251, 231, 12, 221, 150, 137, 174, 15, 146, 137, 251, 255, 14,
245, 216, 203, 138, 1, 163, 170, 194, 133, 12, 205, 157, 188, 131, 12, 184,
220, 161, 97, 162, 240, 190, 243, 2, 213, 134, 147, 251, 3, 178, 160, 193,
188, 14, 214, 153, 226, 140, 12, 191, 208, 235, 174, 13, 138, 188, 204, 236,
11, 214, 135, 129, 235, 10, 198, 242, 226, 128, 11, 154, 219, 163, 144, 7,
236, 134, 217, 197, 2, 181, 248, 144, 157, 8, 150, 174, 195, 224, 12, 156,
247, 234, 192, 7, 156, 206, 174, 246, 2, 181, 214, 138, 155, 1, 246, 242,
141, 152, 9, 207, 157, 139, 243, 1, 153, 135, 158, 249, 6, 162, 129, 144,
170, 13, 227, 162, 245, 246, 1, 130, 237, 192, 208, 13, 187, 165, 153, 215,
8, 178, 141, 203, 163, 15, 172, 179, 180, 172, 10, 206, 200, 237, 194, 12,
129, 235, 165, 143, 7, 129, 230, 217, 244, 8, 223, 249, 152, 233, 2, 160,
224, 204, 187, 10, 167, 211, 138, 247, 7, 207, 204, 131, 200, 1, 207, 240,
161, 219, 9, 219, 213, 129, 183, 11, 186, 163, 243, 198, 13, 217, 197, 175,
218, 8, 195, 228, 209, 137, 1, 149, 253, 193, 190, 8, 216, 231, 225, 190,
15, 244, 168, 191, 152, 6, 180, 210, 162, 198, 9, 172, 159, 195, 158, 9,
173, 151, 226, 34, 143, 231, 162, 212, 6, 250, 171, 192, 187, 11, 229, 212,
155, 156, 9, 234, 159, 165, 254, 8, 180, 154, 227, 197, 3, 175, 158, 214,
235, 8, 164, 157, 160, 130, 4, 158, 223, 243, 254, 10, 178, 236, 213, 212,
12, 194, 173, 185, 159, 6, 184, 214, 195, 172, 5, 128, 161, 203, 183, 194,
10, 207, 218, 209, 222, 12, 136, 166, 226, 224, 3, 148, 153, 145, 214, 4,
164, 178, 253, 243, 4, 173, 162, 237, 129, 4, 236, 134, 193, 169, 14, 140,
234, 164, 190, 7, 211, 148, 252, 223, 8, 213, 149, 180, 170, 12, 194, 182,
191, 205, 15, 206, 233, 190, 211, 2, 241, 136, 223, 152, 12, 184, 185, 231,
176, 10, 201, 166, 182, 211, 4, 209, 201, 205, 235, 1, 141, 184, 205, 173,
15, 244, 222, 218, 113, 175, 190, 179, 140, 4, 234, 232, 231, 183, 8, 174,
167, 140, 130, 9, 169, 157, 136, 196, 14, 187, 244, 242, 135, 7, 248, 183,
178, 253, 10, 135, 216, 152, 153, 15, 226, 223, 172, 161, 11, 236, 183, 231,
216, 3, 183, 169, 209, 137, 13, 130, 219, 233, 167, 4, 168, 132, 197, 161,
7, 164, 146, 152, 207, 4, 239, 229, 147, 130, 2, 172, 156, 244, 148, 6,
171, 253, 185, 213, 4, 184, 181, 241, 207, 1, 144, 250, 219, 222, 1, 213,
189, 209, 177, 10, 207, 252, 251, 239, 9, 181, 132, 203, 147, 6, 159, 135,
181, 18, 215, 252, 202, 234, 7, 207, 215, 210, 222, 12, 195, 211, 185, 171,
14, 178, 132, 165, 140, 9, 139, 160, 171, 250, 1, 248, 176, 203, 170, 14,
148, 184, 131, 141, 4, 158, 226, 204, 197, 3, 215, 157, 148, 219, 15, 228,
206, 156, 132, 3, 234, 206, 202, 231, 8, 232, 177, 135, 215, 10, 173, 253,
176, 172, 5, 144, 188, 170, 229, 14, 200, 165, 144, 50, 198, 153, 206, 184,
3, 150, 128, 128, 141, 14, 155, 221, 221, 199, 12, 229, 199, 160, 156, 3,
176, 172, 200, 97, 222, 255, 134, 158, 9, 233, 155, 199, 193, 14, 146, 216,
186, 250, 13, 156, 152, 194, 212, 8, 254, 190, 240, 232, 2, 178, 210, 194,
160, 3, 142, 216, 141, 184, 10, 173, 210, 214, 187, 2, 161, 211, 201, 143,
5, 213, 149, 210, 222, 15, 134, 165, 184, 171, 9, 211, 175, 153, 241, 9,
227, 201, 184, 213, 1, 173, 225, 213, 176, 13, 143, 228, 200, 151, 12, 224,
224, 224, 186, 8, 188, 153, 234, 254, 7, 137, 188, 238, 186, 8, 166, 236,
135, 180, 13, 202, 174, 133, 194, 13, 179, 243, 158, 193, 13, 210, 173, 128,
149, 2, 208, 216, 158, 168, 13, 205, 251, 152, 230, 3, 245, 245, 254, 163,
9, 211, 243, 234, 164, 9, 173, 221, 221, 215, 4, 146, 220, 209, 198, 1,
235, 237, 170, 130, 7, 181, 227, 149, 141, 2, 170, 245, 149, 217, 5, 153,
179, 215, 195, 14, 249, 206, 140, 148, 1, 247, 200, 219, 152, 15, 165, 228,
197, 152, 11, 234, 192, 242, 244, 6, 217, 229, 173, 147, 3, 216, 209, 206,
189, 7, 165, 171, 221, 214, 2, 151, 250, 211, 138, 2, 144, 169, 182, 176,
13, 179, 254, 191, 225, 3, 244, 147, 218, 212, 3, 129, 187, 183, 253, 10,
218, 149, 188, 168, 10, 223, 241, 149, 129, 8, 209, 128, 150, 126, 153, 139,
195, 131, 6, 201, 208, 246, 221, 1, 194, 165, 175, 173, 5, 197, 133, 207,
196, 2, 192, 211, 129, 210, 7, 211, 147, 163, 220, 9, 173, 191, 188, 152,
1, 169, 242, 205, 20, 167, 133, 213, 211, 2, 213, 226, 129, 166, 12, 186,
202, 155, 203, 5, 180, 251, 220, 174, 12, 145, 228, 247, 146, 12, 196, 151,
247, 184, 10, 217, 233, 238, 147, 6, 149, 174, 181, 128, 13, 128, 246, 173,
207, 15, 200, 162, 139, 103, 237, 199, 220, 252, 7, 208, 201, 133, 231, 3,
140, 148, 223, 137, 5, 128, 242, 251, 140, 228, 11, 214, 205, 158, 228, 2,
147, 190, 212, 138, 4, 228, 228, 253, 154, 9, 146, 191, 248, 187, 8, 168,
200, 246, 160, 4, 224, 168, 147, 211, 11, 153, 197, 133, 229, 5, 176, 131,
167, 203, 6, 213, 183, 189, 178, 10, 185, 222, 229, 183, 5, 171, 185, 208,
162, 15, 203, 130, 137, 201, 6, 236, 152, 138, 176, 1, 221, 200, 169, 183,
11, 237, 230, 219, 108, 152, 247, 239, 145, 14, 242, 220, 245, 148, 6, 183,
147, 218, 144, 11, 236, 190, 230, 197, 1, 253, 147, 205, 165, 10, 181, 130,
138, 249, 10, 193, 135, 148, 142, 10, 232, 132, 254, 163, 4, 244, 153, 241,
197, 13, 251, 150, 230, 242, 10, 211, 255, 182, 243, 3, 247, 137, 150, 236,
5, 137, 168, 208, 161, 10, 192, 178, 137, 210, 13, 192, 158, 177, 203, 7,
237, 221, 208, 153, 4, 180, 129, 195, 139, 4, 195, 220, 254, 129, 8, 235,
249, 252, 142, 2, 171, 195, 208, 162, 12, 205, 185, 192, 166, 9, 208, 205,
169, 160, 10, 156, 148, 150, 185, 2, 246, 165, 207, 129, 12, 145, 207, 129,
130, 15, 253, 209, 184, 133, 11, 247, 226, 200, 185, 9, 193, 147, 150, 128,
8, 251, 208, 155, 45, 251, 142, 248, 144, 15, 174, 199, 157, 236, 12, 206,
215, 156, 131, 14, 224, 242, 193, 145, 9, 194, 231, 136, 243, 7, 135, 188,
221, 220, 10, 252, 138, 172, 180, 15, 222, 245, 235, 161, 2, 147, 195, 191,
195, 7, 191, 205, 163, 247, 3, 237, 172, 239, 187, 6, 137, 141, 231, 233,
10, 246, 253, 140, 184, 5, 191, 252, 199, 190, 13, 235, 212, 206, 220, 8,
163, 219, 233, 232, 13, 166, 129, 242, 168, 12, 131, 217, 184, 209, 7, 138,
139, 223, 216, 8, 186, 152, 149, 207, 6, 229, 191, 144, 149, 8, 223, 167,
204, 251, 1, 181, 240, 166, 200, 9, 194, 230, 150, 122, 210, 176, 221, 179,
5, 137, 169, 225, 196, 2, 190, 138, 243, 173, 10, 155, 224, 148, 154, 15,
180, 176, 218, 153, 2, 194, 220, 179, 239, 3, 209, 243, 151, 171, 1, 135,
192, 192, 129, 3, 154, 145, 158, 166, 8, 174, 159, 201, 207, 1, 134, 247,
247, 152, 5, 169, 139, 159, 171, 3, 173, 170, 159, 244, 15, 201, 205, 215,
223, 9, 227, 214, 226, 134, 14, 237, 245, 216, 153, 1, 207, 208, 244, 63,
136, 146, 237, 215, 2, 131, 173, 129, 187, 4, 150, 204, 222, 185, 6, 243,
177, 246, 252, 5, 246, 173, 234, 215, 14, 207, 252, 211, 199, 3, 177, 211,
230, 228, 5, 208, 143, 209, 191, 13, 173, 192, 232, 246, 12, 132, 255, 207,
139, 14, 171, 129, 141, 173, 7, 255, 222, 227, 255, 12, 155, 193, 184, 244,
14, 171, 144, 214, 163, 1, 241, 232, 221, 228, 15, 188, 160, 210, 226, 13,
189, 190, 189, 5, 204, 252, 250, 234, 10, 228, 161, 153, 190, 9, 210, 208,
187, 214, 7, 198, 154, 214, 242, 9, 197, 163, 254, 27, 220, 251, 130, 172,
2, 193, 147, 157, 255, 14, 242, 131, 138, 180, 14, 200, 239, 175, 239, 5,
181, 157, 238, 152, 1, 203, 211, 156, 220, 10, 210, 166, 223, 241, 2, 214,
243, 250, 244, 10, 238, 200, 226, 216, 9, 168, 140, 235, 228, 14, 149, 176,
161, 188, 9, 180, 224, 247, 138, 11, 168, 159, 157, 226, 7, 216, 226, 212,
131, 5, 158, 162, 174, 190, 2, 147, 131, 155, 194, 4, 227, 156, 248, 169,
14, 210, 216, 130, 142, 14, 233, 234, 248, 230, 13, 146, 190, 216, 248, 9,
128, 173, 190, 149, 182, 11, 254, 210, 132, 152, 8, 211, 239, 231, 248, 9,
132, 255, 247, 168, 7, 149, 224, 145, 136, 14, 162, 220, 148, 134, 6, 204,
244, 192, 159, 8, 178, 160, 245, 237, 15, 193, 167, 249, 251, 5, 238, 159,
153, 199, 9, 228, 225, 136, 225, 9, 147, 221, 134, 220, 7, 249, 129, 250,
131, 5, 255, 249, 227, 129, 15, 183, 246, 177, 190, 10, 217, 182, 196, 128,
6, 136, 242, 159, 173, 1, 244, 128, 137, 210, 10, 154, 223, 230, 173, 7,
193, 171, 203, 220, 9, 193, 222, 146, 129, 2, 159, 229, 247, 153, 1, 205,
139, 189, 204, 13, 181, 152, 211, 186, 3, 252, 181, 234, 182, 4, 230, 212,
233, 169, 13, 134, 211, 157, 165, 1, 218, 165, 218, 239, 4, 148, 140, 245,
130, 11, 197, 152, 165, 199, 2, 235, 219, 158, 232, 9, 187, 231, 171, 149,
12, 134, 191, 248, 157, 3, 219, 140, 128, 208, 1, 181, 140, 225, 226, 15,
234, 239, 208, 170, 10, 166, 152, 192, 138, 15, 237, 204, 242, 197, 12, 230,
224, 210, 68, 128, 170, 249, 251, 10, 193, 202, 171, 142, 7, 235, 192, 224,
175, 14, 147, 243, 214, 94, 165, 202, 243, 157, 6, 192, 178, 204, 211, 8,
242, 240, 207, 231, 4, 251, 234, 238, 218, 1, 207, 227, 224, 149, 4, 155,
215, 210, 203, 2, 164, 248, 235, 166, 6, 226, 234, 165, 222, 13, 228, 197,
249, 231, 14, 169, 172, 201, 163, 14, 149, 206, 208, 159, 15, 178, 216, 205,
227, 15, 210, 228, 223, 220, 5, 161, 214, 153, 136, 11, 181, 178, 246, 212,
7, 128, 131, 238, 218, 13, 138, 156, 141, 139, 15, 134, 187, 137, 234, 4,
152, 215, 181, 142, 6, 160, 185, 166, 193, 13, 213, 145, 204, 240, 13, 190,
164, 216, 231, 13, 251, 208, 176, 231, 4, 243, 160, 187, 150, 5, 235, 251,
246, 205, 3, 142, 232, 229, 222, 5, 227, 251, 238, 161, 12, 224, 198, 250,
176, 3, 187, 162, 200, 223, 5, 199, 133, 234, 181, 3, 167, 160, 247, 232,
4, 174, 198, 216, 180, 15, 144, 251, 131, 187, 10, 161, 171, 169, 190, 9,
223, 175, 171, 171, 4, 141, 165, 211, 128, 5, 139, 239, 131, 173, 3, 211,
163, 253, 45, 212, 199, 216, 226, 11, 137, 216, 228, 198, 3, 216, 209, 199,
233, 3, 249, 144, 225, 146, 1, 216, 184, 225, 218, 9, 197, 219, 219, 247,
12, 214, 227, 243, 240, 14, 221, 155, 244, 141, 4, 239, 249, 179, 130, 4,
161, 187, 191, 135, 3, 245, 241, 237, 241, 12, 194, 211, 209, 238, 5, 252,
210, 135, 149, 1, 134, 241, 220, 170, 12, 175, 208, 242, 229, 9, 181, 144,
172, 202, 7, 170, 195, 174, 180, 5, 198, 153, 178, 158, 6, 146, 142, 204,
119, 137, 185, 250, 204, 10, 208, 190, 240, 166, 1, 138, 183, 212, 226, 3,
241, 240, 245, 140, 15, 250, 184, 161, 117, 198, 194, 173, 133, 15, 135, 247,
179, 180, 11, 158, 233, 195, 162, 2, 209, 143, 142, 203, 13, 156, 215, 224,
192, 5, 228, 223, 167, 163, 6, 253, 160, 223, 182, 5, 178, 178, 223, 147,
5, 150, 180, 221, 189, 10, 168, 197, 173, 169, 6, 166, 146, 252, 254, 15,
154, 211, 198, 238, 6, 182, 166, 227, 223, 3, 152, 209, 173, 192, 3, 147,
255, 130, 153, 9, 152, 159, 128, 195, 7, 204, 199, 174, 227, 8, 149, 133,
142, 33, 236, 185, 160, 136, 14, 154, 137, 143, 236, 7, 246, 149, 237, 166,
3, 150, 184, 224, 232, 3, 204, 220, 171, 245, 15, 128, 131, 146, 236, 219,
10, 168, 253, 226, 198, 3, 196, 185, 159, 245, 14, 246, 239, 172, 207, 7,
172, 188, 238, 233, 13, 193, 158, 247, 192, 10, 178, 146, 230, 233, 8, 143,
221, 252, 145, 5, 169, 173, 160, 149, 7, 141, 199, 235, 35, 225, 224, 227,
213, 7, 233, 249, 164, 132, 11, 255, 158, 248, 254, 2, 248, 200, 154, 176,
3, 168, 248, 134, 165, 8, 145, 177, 231, 188, 10, 189, 223, 182, 129, 7,
246, 146, 219, 62, 185, 190, 133, 217, 3, 228, 177, 227, 170, 1, 230, 175,
223, 120, 150, 130, 206, 166, 5, 223, 216, 157, 168, 1, 225, 151, 175, 248,
5, 140, 228, 227, 235, 7, 243, 148, 219, 250, 3, 250, 215, 234, 130, 1,
191, 146, 221, 133, 8, 220, 223, 135, 100, 233, 148, 197, 224, 11, 164, 203,
178, 134, 9, 170, 133, 159, 133, 8, 162, 189, 239, 68, 144, 186, 204, 211,
6, 167, 218, 219, 144, 2, 208, 155, 181, 237, 2, 253, 223, 151, 180, 15,
137, 132, 173, 135, 7, 172, 137, 239, 146, 13, 250, 140, 255, 211, 11, 231,
134, 228, 145, 3, 149, 220, 253, 168, 10, 236, 163, 149, 221, 10, 247, 151,
236, 190, 6, 166, 210, 238, 52, 192, 248, 168, 229, 9, 237, 182, 227, 199,
12, 189, 199, 195, 216, 12, 178, 236, 220, 158, 2, 247, 182, 235, 221, 14,
219, 148, 216, 159, 15, 158, 234, 200, 167, 2, 184, 132, 251, 232, 2, 138,
227, 158, 204, 14, 225, 192, 227, 165, 8, 130, 214, 149, 173, 13, 210, 140,
161, 181, 9, 222, 217, 168, 158, 10, 220, 222, 238, 137, 10, 237, 248, 184,
57, 167, 213, 169, 132, 5, 236, 173, 141, 25, 131, 201, 181, 180, 4, 133,
182, 179, 134, 14, 243, 180, 195, 169, 11, 145, 153, 139, 242, 14, 210, 148,
136, 230, 2, 174, 147, 246, 185, 7, 185, 230, 252, 230, 10, 247, 210, 139,
242, 13, 187, 227, 199, 158, 14, 186, 209, 178, 166, 8, 148, 174, 212, 154,
6, 193, 139, 246, 160, 4, 180, 129, 135, 190, 7, 253, 202, 252, 194, 1,
145, 192, 198, 192, 2, 136, 201, 194, 165, 5, 238, 198, 216, 222, 8, 148,
132, 194, 231, 2, 179, 212, 226, 152, 13, 216, 203, 190, 81, 241, 158, 205,
205, 3, 153, 250, 248, 251, 11, 157, 223, 163, 229, 11, 160, 240, 198, 156,
13, 155, 254, 151, 138, 14, 219, 233, 172, 254, 4, 186, 194, 189, 227, 4,
169, 243, 181, 201, 14, 161, 158, 146, 201, 3, 135, 139, 242, 206, 4, 222,
141, 186, 201, 11, 247, 182, 166, 198, 12, 141, 168, 155, 172, 4, 206, 218,
254, 175, 4, 140, 213, 159, 204, 7, 214, 128, 160, 215, 9, 253, 242, 237,
147, 8, 162, 233, 151, 181, 5, 183, 223, 151, 21, 132, 164, 206, 242, 1,
179, 227, 155, 165, 11, 189, 251, 195, 212, 3, 154, 195, 137, 190, 6, 129,
212, 227, 177, 4, 185, 141, 235, 183, 7, 233, 220, 229, 174, 4, 215, 138,
248, 25, 161, 210, 193, 241, 14, 239, 201, 231, 152, 12, 240, 169, 204, 169,
14, 228, 195, 196, 225, 6, 250, 159, 144, 234, 1, 167, 238, 191, 142, 11,
202, 222, 151, 207, 9, 205, 219, 185, 142, 3, 230, 224, 187, 235, 5, 194,
167, 210, 173, 7, 235, 250, 253, 178, 12, 239, 128, 215, 198, 13, 130, 141,
191, 238, 3, 173, 252, 172, 217, 14, 129, 203, 164, 16, 191, 131, 153, 141,
8, 133, 200, 131, 240, 15, 173, 165, 172, 11, 182, 247, 244, 165, 9, 128,
238, 232, 219, 37, 214, 148, 220, 206, 10, 199, 154, 167, 130, 1, 188, 191,
233, 235, 9, 167, 131, 215, 154, 5, 133, 224, 241, 202, 1, 237, 213, 192,
223, 4, 160, 202, 178, 132, 10, 248, 217, 142, 133, 12, 199, 164, 231, 189,
5, 240, 129, 134, 189, 6, 173, 135, 204, 176, 15, 164, 142, 214, 137, 8,
208, 169, 163, 251, 15, 196, 171, 247, 187, 14, 230, 177, 251, 130, 13, 200,
234, 146, 173, 4, 252, 218, 210, 212, 10, 206, 187, 236, 129, 5, 165, 161,
220, 171, 11, 135, 129, 179, 205, 2, 240, 251, 134, 254, 3, 136, 185, 186,
220, 10, 230, 142, 156, 211, 1, 215, 243, 241, 179, 12, 141, 140, 140, 166,
5, 136, 183, 213, 220, 14, 182, 213, 134, 202, 10, 177, 197, 170, 230, 6,
210, 133, 203, 128, 14, 145, 196, 176, 139, 5, 191, 143, 140, 133, 11, 247,
155, 221, 233, 10, 131, 192, 238, 143, 3, 194, 196, 146, 129, 9, 245, 183,
142, 133, 6, 200, 197, 143, 185, 2, 133, 144, 194, 144, 4, 149, 202, 240,
36, 230, 214, 182, 211, 5, 254, 227, 217, 246, 2, 128, 164, 220, 255, 5,
132, 138, 149, 153, 6, 200, 139, 167, 97, 203, 137, 179, 195, 2, 141, 176,
199, 134, 9, 165, 244, 225, 254, 3, 136, 180, 252, 193, 3, 200, 165, 159,
207, 12, 147, 222, 142, 148, 5, 191, 146, 228, 191, 9, 213, 255, 236, 152,
13, 132, 240, 164, 174, 2, 204, 152, 214, 3, 251, 240, 222, 248, 10, 219,
208, 211, 189, 15, 175, 252, 221, 88, 182, 234, 154, 107, 208, 190, 199, 159,
2, 209, 139, 150, 182, 13, 212, 219, 146, 154, 15, 221, 178, 221, 188, 11,
148, 200, 197, 17, 129, 218, 170, 253, 11, 164, 244, 228, 252, 2, 220, 175,
146, 195, 15, 141, 223, 154, 232, 9, 227, 186, 130, 220, 8, 153, 157, 145,
139, 12, 233, 140, 173, 183, 12, 223, 255, 155, 139, 13, 162, 238, 129, 242,
11, 252, 162, 211, 191, 2, 228, 182, 210, 101, 171, 202, 191, 167, 11, 247,
189, 170, 255, 3, 217, 150, 238, 215, 10, 173, 188, 234, 177, 5, 166, 139,
147, 132, 12, 230, 216, 153, 200, 3, 182, 202, 167, 210, 12, 222, 169, 137,
180, 7, 253, 249, 181, 197, 2, 198, 205, 156, 192, 12, 168, 135, 243, 185,
2, 138, 158, 139, 159, 11, 138, 210, 248, 255, 14, 157, 141, 161, 207, 9,
218, 206, 244, 191, 4, 222, 169, 188, 238, 5, 133, 211, 152, 218, 14, 248,
191, 242, 250, 13, 217, 188, 239, 231, 14, 137, 198, 135, 144, 1, 231, 227,
214, 168, 7, 128, 136, 152, 103, 150, 151, 161, 171, 12, 251, 222, 212, 229,
4, 154, 193, 182, 62, 251, 246, 205, 142, 3, 132, 140, 242, 166, 14, 165,
231, 192, 250, 6, 136, 154, 230, 163, 1, 230, 228, 246, 182, 3, 187, 215,
217, 177, 8, 137, 171, 251, 15, 211, 128, 230, 244, 15, 160, 146, 188, 255,
4, 204, 242, 150, 194, 1, 128, 184, 177, 139, 14, 139, 209, 245, 134, 11,
241, 167, 181, 139, 5, 159, 129, 160, 74, 159, 200, 133, 222, 5, 157, 204,
165, 199, 10, 193, 159, 169, 151, 11, 205, 219, 226, 134, 9, 197, 252, 179,
128, 14, 230, 250, 244, 215, 5, 207, 138, 239, 212, 14, 237, 216, 191, 199,
15, 250, 250, 198, 148, 9, 212, 228, 174, 146, 15, 221, 137, 207, 196, 3,
146, 165, 245, 220, 13, 157, 249, 149, 228, 5, 185, 219, 188, 185, 8, 212,
150, 240, 218, 15, 128, 211, 229, 202, 129, 14, 132, 225, 178, 226, 1, 251,
195, 132, 66, 210, 245, 154, 234, 5, 145, 183, 146, 177, 9, 218, 223, 128,
170, 13, 238, 227, 168, 197, 11, 189, 225, 206, 179, 6, 221, 169, 239, 193,
4, 194, 207, 170, 203, 7, 163, 206, 232, 197, 1, 160, 130, 131, 160, 4,
139, 146, 149, 173, 10, 140, 240, 243, 180, 4, 231, 180, 202, 245, 9, 146,
250, 195, 157, 1, 233, 199, 188, 210, 15, 253, 222, 137, 142, 10, 174, 245,
231, 20, 219, 156, 185, 201, 5, 139, 137, 230, 135, 1, 236, 207, 146, 138,
4, 149, 174, 164, 221, 4, 158, 227, 224, 210, 7, 206, 150, 186, 244, 9,
156, 183, 159, 142, 13, 176, 152, 163, 193, 8, 190, 229, 232, 155, 7, 234,
132, 236, 132, 9, 242, 254, 204, 134, 14, 143, 226, 253, 180, 2, 138, 226,
214, 218, 2, 199, 228, 210, 186, 12, 147, 179, 230, 254, 5, 249, 135, 247,
147, 10, 148, 253, 186, 214, 12, 250, 240, 173, 159, 14, 162, 215, 177, 42,
162, 142, 248, 135, 3, 196, 143, 150, 150, 10, 236, 221, 178, 147, 7, 165,
248, 197, 136, 7, 199, 152, 158, 228, 13, 229, 215, 242, 194, 7, 145, 249,
246, 181, 13, 134, 191, 196, 245, 3, 161, 251, 235, 200, 14, 255, 232, 248,
228, 10, 170, 188, 227, 177, 14, 212, 202, 144, 143, 13, 199, 230, 234, 155,
10, 247, 239, 142, 167, 6, 197, 129, 192, 235, 2, 207, 229, 194, 237, 12,
228, 239, 211, 136, 3, 199, 135, 194, 244, 4, 167, 137, 158, 132, 15, 208,
199, 176, 183, 2, 161, 181, 218, 155, 11, 218, 235, 160, 207, 5, 250, 181,
244, 252, 9, 197, 130, 193, 168, 1, 153, 235, 181, 253, 2, 203, 245, 229,
255, 11, 134, 136, 148, 249, 8, 179, 174, 133, 187, 8, 145, 212, 156, 196,
7, 163, 222, 227, 236, 11, 242, 171, 200, 143, 12, 185, 225, 231, 211, 15,
135, 230, 213, 153, 6, 254, 187, 227, 167, 2, 147, 191, 160, 185, 12, 177,
145, 137, 133, 1, 241, 244, 217, 231, 3, 225, 213, 246, 253, 11, 138, 185,
169, 229, 8, 129, 248, 228, 155, 4, 150, 208, 194, 129, 13, 149, 233, 140,
159, 7, 149, 223, 199, 33, 153, 214, 176, 117, 175, 193, 163, 144, 9, 135,
207, 150, 12, 216, 138, 151, 55, 233, 245, 225, 219, 8, 215, 194, 201, 214,
6, 235, 254, 134, 70, 251, 142, 174, 209, 12, 215, 218, 132, 174, 4, 209,
177, 189, 144, 3, 247, 136, 205, 212, 8, 152, 220, 178, 208, 5, 183, 146,
202, 149, 6, 248, 229, 196, 211, 12, 226, 191, 237, 227, 7, 234, 157, 195,
196, 4, 203, 147, 213, 156, 1, 245, 161, 241, 97, 186, 245, 223, 246, 8,
170, 241, 234, 188, 8, 171, 155, 201, 168, 8, 193, 168, 145, 142, 10, 254,
183, 192, 202, 14, 137, 175, 147, 223, 9, 176, 133, 131, 166, 12, 211, 168,
155, 225, 4, 197, 193, 255, 204, 8, 154, 208, 144, 165, 1, 134, 190, 143,
217, 11, 148, 242, 203, 237, 11, 161, 142, 172, 215, 3, 166, 203, 240, 162,
6, 200, 195, 186, 162, 7, 198, 211, 223, 252, 15, 132, 160, 226, 204, 15,
158, 187, 167, 222, 6, 174, 214, 139, 220, 9, 130, 243, 221, 206, 6, 190,
217, 211, 145, 4, 160, 255, 142, 201, 5, 201, 166, 217, 174, 7, 240, 197,
130, 214, 7, 216, 133, 220, 184, 3, 241, 148, 192, 185, 6, 213, 181, 240,
210, 2, 137, 194, 206, 172, 5, 221, 189, 134, 241, 10, 128, 180, 234, 178,
219, 13, 203, 213, 182, 247, 10, 172, 229, 222, 178, 15, 188, 154, 206, 196,
12, 240, 136, 172, 156, 11, 165, 151, 164, 200, 7, 189, 152, 225, 146, 7,
214, 167, 205, 147, 4, 216, 175, 130, 230, 10, 243, 162, 145, 154, 7, 155,
169, 190, 182, 6, 255, 212, 152, 251, 6, 147, 152, 160, 237, 2, 170, 228,
233, 210, 13, 166, 255, 247, 207, 14, 238, 175, 242, 171, 9, 174, 241, 193,
193, 4, 245, 210, 147, 167, 14, 151, 233, 199, 154, 1, 193, 184, 194, 249,
9, 216, 255, 201, 246, 10, 138, 198, 240, 208, 5, 187, 230, 137, 145, 1,
200, 237, 144, 115, 131, 149, 167, 201, 15, 249, 130, 240, 202, 5, 141, 220,
198, 233, 3, 216, 165, 204, 210, 12, 176, 166, 249, 207, 4, 244, 158, 162,
140, 8, 174, 153, 181, 253, 14, 249, 157, 148, 130, 10, 178, 203, 201, 162,
4, 161, 215, 176, 137, 3, 164, 232, 198, 200, 15, 141, 189, 153, 206, 6,
148, 138, 219, 252, 12, 147, 134, 206, 210, 9, 214, 186, 141, 183, 10, 235,
192, 204, 245, 10, 155, 177, 148, 174, 7, 246, 150, 200, 167, 15, 134, 228,
212, 210, 7, 128, 198, 173, 133, 10, 173, 148, 155, 170, 4, 131, 242, 205,
148, 14, 154, 220, 156, 236, 11, 213, 150, 219, 145, 4, 171, 231, 199, 224,
12, 190, 139, 161, 155, 3, 136, 151, 199, 129, 9, 182, 161, 156, 237, 1,
218, 151, 248, 132, 13, 201, 207, 164, 115, 190, 137, 205, 255, 11, 191, 198,
251, 165, 10, 234, 205, 249, 181, 3, 172, 185, 218, 244, 14, 134, 171, 214,
151, 9, 152, 245, 182, 215, 10, 204, 161, 209, 196, 14, 180, 134, 204, 240,
4, 242, 196, 170, 185, 13, 156, 255, 134, 178, 14, 203, 145, 211, 216, 3,
190, 148, 160, 180, 14, 189, 162, 214, 209, 10, 238, 176, 239, 248, 15, 151,
163, 176, 168, 5, 152, 247, 207, 238, 14, 181, 238, 168, 251, 8, 181, 189,
202, 33, 232, 239, 229, 226, 5, 133, 156, 212, 180, 4, 224, 169, 249, 216,
4, 198, 245, 205, 147, 8, 231, 232, 149, 230, 8, 243, 161, 191, 162, 3,
194, 189, 237, 227, 15, 223, 185, 161, 232, 4, 153, 233, 249, 155, 8, 240,
147, 199, 249, 5, 135, 205, 250, 160, 11, 252, 183, 238, 210, 10, 244, 146,
156, 160, 5, 196, 252, 142, 22, 191, 148, 222, 231, 11, 182, 201, 163, 219,
13, 199, 238, 233, 179, 4, 180, 199, 255, 249, 4, 254, 237, 180, 213, 2,
211, 221, 157, 151, 7, 178, 192, 158, 241, 13, 133, 212, 252, 51, 146, 221,
241, 177, 7, 137, 246, 204, 171, 5, 138, 209, 144, 231, 2, 153, 213, 230,
179, 4, 171, 244, 213, 172, 3, 191, 201, 249, 129, 3, 184, 184, 186, 243,
11, 145, 176, 183, 103, 145, 131, 206, 147, 14, 136, 134, 191, 173, 9, 180,
164, 241, 245, 5, 172, 133, 212, 167, 8, 198, 162, 158, 244, 4, 232, 175,
222, 231, 12, 146, 246, 134, 196, 8, 147, 248, 177, 230, 8, 145, 216, 180,
139, 12, 224, 254, 191, 222, 1, 182, 145, 213, 232, 10, 178, 139, 143, 237,
9, 253, 230, 172, 181, 13, 225, 218, 252, 132, 6, 141, 175, 159, 197, 14,
185, 222, 237, 246, 3, 154, 184, 245, 228, 11, 193, 198, 235, 204, 10, 182,
239, 253, 136, 15, 205, 143, 161, 211, 7, 164, 207, 235, 220, 4, 158, 235,
183, 187, 9, 203, 201, 147, 139, 3, 169, 181, 153, 201, 11, 222, 206, 192,
251, 12, 221, 253, 242, 152, 11, 128, 249, 190, 248, 152, 5, 151, 199, 221,
227, 14, 209, 246, 133, 200, 7, 246, 181, 176, 131, 9, 165, 219, 139, 171,
4, 254, 130, 187, 208, 8, 144, 221, 189, 192, 10, 163, 146, 139, 166, 12,
231, 177, 223, 205, 9, 229, 179, 214, 227, 2, 132, 153, 150, 154, 5, 242,
250, 159, 171, 9, 144, 228, 238, 120, 168, 206, 130, 107, 145, 144, 235, 248,
1, 254, 218, 166, 129, 4, 237, 129, 235, 7, 150, 199, 251, 175, 9, 252,
199, 200, 168, 9, 172, 147, 153, 151, 5, 168, 129, 129, 188, 13, 200, 166,
192, 192, 8, 154, 184, 218, 232, 2, 155, 202, 193, 156, 12, 182, 241, 250,
153, 13, 180, 141, 206, 141, 6, 206, 129, 157, 153, 12, 132, 158, 212, 247,
14, 160, 135, 203, 238, 12, 216, 173, 204, 156, 9, 166, 214, 242, 138, 14,
178, 248, 246, 135, 1, 244, 219, 210, 155, 3, 208, 155, 189, 180, 3, 156,
189, 171, 174, 13, 162, 161, 233, 108, 231, 134, 177, 255, 11, 216, 159, 226,
244, 2, 130, 227, 211, 185, 6, 169, 146, 187, 143, 2, 153, 225, 150, 187,
9, 210, 153, 211, 181, 13, 147, 216, 152, 173, 3, 246, 236, 142, 33, 222,
140, 194, 241, 10, 171, 251, 248, 210, 11, 239, 197, 137, 242, 8, 132, 179,
189, 209, 6, 181, 221, 179, 161, 2, 168, 172, 241, 163, 2, 203, 241, 250,
226, 12, 184, 188, 237, 210, 8, 228, 163, 153, 234, 5, 222, 162, 216, 142,
13, 235, 251, 186, 239, 1, 199, 133, 166, 158, 9, 134, 241, 161, 174, 3,
183, 248, 214, 158, 7, 181, 248, 184, 143, 11, 234, 152, 151, 169, 9, 198,
134, 159, 251, 7, 144, 176, 211, 121, 199, 255, 166, 132, 5, 201, 243, 215,
189, 14, 213, 240, 205, 223, 10, 205, 191, 234, 185, 9, 240, 221, 255, 234,
5, 210, 250, 179, 148, 7, 185, 162, 155, 243, 3, 140, 197, 165, 222, 12,
150, 143, 215, 241, 13, 138, 138, 246, 30, 236, 151, 243, 235, 12, 232, 222,
197, 223, 5, 177, 198, 228, 194, 4, 130, 172, 242, 221, 11, 208, 235, 221,
161, 1, 254, 141, 148, 144, 14, 168, 251, 185, 179, 9, 247, 144, 244, 178,
12, 209, 235, 151, 183, 9, 131, 208, 184, 182, 13, 135, 245, 255, 250, 2,
173, 149, 179, 144, 12, 135, 248, 137, 220, 10, 233, 194, 242, 248, 6, 212,
132, 219, 149, 12, 204, 211, 128, 213, 2, 137, 232, 221, 213, 9, 253, 167,
158, 148, 3, 230, 179, 147, 176, 13, 224, 201, 179, 191, 9, 135, 168, 142,
253, 13, 241, 194, 141, 216, 6, 153, 214, 245, 216, 11, 195, 145, 195, 142,
15, 242, 152, 180, 191, 11, 229, 219, 238, 220, 11, 248, 241, 183, 229, 15,
231, 171, 213, 81, 205, 182, 151, 253, 6, 170, 162, 168, 177, 10, 231, 205,
251, 209, 3, 253, 168, 199, 198, 12, 252, 138, 233, 210, 8, 234, 156, 212,
168, 11, 250, 136, 144, 228, 7, 168, 238, 236, 143, 1, 180, 204, 171, 173,
13, 180, 221, 130, 239, 4, 253, 135, 233, 166, 9, 233, 248, 248, 182, 1,
239, 198, 243, 139, 14, 160, 215, 214, 199, 9, 229, 211, 167, 193, 9, 247,
135, 221, 142, 9, 205, 178, 155, 150, 3, 254, 172, 151, 215, 14, 170, 242,
195, 176, 5, 207, 226, 194, 155, 11, 216, 223, 149, 43, 240, 135, 144, 187,
13, 139, 215, 216, 182, 15, 135, 209, 192, 226, 6, 251, 144, 191, 169, 8,
226, 207, 136, 188, 2, 255, 128, 205, 245, 4, 214, 222, 198, 178, 4, 128,
160, 134, 134, 201, 1, 227, 171, 159, 179, 3, 247, 175, 155, 247, 11, 130,
208, 142, 189, 1, 209, 251, 137, 239, 14, 196, 246, 217, 190, 2, 216, 236,
193, 250, 4, 171, 135, 202, 174, 13, 157, 230, 183, 194, 15, 151, 155, 192,
234, 5, 192, 160, 198, 226, 7, 246, 249, 139, 215, 1, 163, 181, 142, 210,
4, 138, 246, 219, 179, 4, 143, 187, 253, 153, 10, 190, 131, 161, 171, 8,
193, 185, 156, 210, 9, 221, 200, 245, 253, 2, 234, 176, 164, 194, 4, 234,
206, 138, 90, 226, 227, 130, 184, 6, 213, 198, 190, 208, 10, 234, 213, 248,
154, 8, 242, 195, 155, 149, 9, 248, 145, 209, 218, 3, 162, 176, 130, 131,
9, 187, 166, 140, 162, 11, 189, 169, 188, 197, 7, 197, 240, 176, 226, 3,
158, 243, 236, 114, 214, 252, 228, 253, 15, 237, 210, 163, 153, 11, 253, 202,
188, 196, 3, 198, 237, 141, 147, 3, 145, 225, 201, 203, 8, 162, 160, 216,
149, 7, 136, 166, 225, 139, 2, 230, 144, 134, 245, 8, 213, 208, 144, 236,
5, 140, 163, 160, 219, 8, 244, 181, 176, 132, 13, 141, 168, 184, 252, 11,
238, 218, 178, 216, 9, 254, 164, 216, 173, 8, 233, 173, 221, 183, 10, 241,
148, 151, 179, 5, 192, 198, 255, 228, 7, 237, 131, 167, 203, 14, 136, 194,
238, 162, 4, 233, 138, 144, 191, 13, 184, 167, 194, 138, 5, 243, 150, 162,
137, 1, 216, 138, 143, 176, 2, 168, 185, 251, 188, 1, 226, 135, 148, 99,
221, 188, 199, 199, 12, 172, 200, 179, 146, 2, 215, 133, 179, 248, 1, 166,
136, 133, 29, 179, 161, 179, 46, 149, 179, 140, 236, 9, 206, 194, 254, 173,
9, 199, 144, 152, 197, 13, 130, 186, 169, 197, 14, 234, 210, 198, 186, 11,
166, 157, 141, 196, 8, 135, 171, 179, 243, 10, 136, 135, 199, 243, 1, 239,
233, 248, 191, 6, 162, 208, 228, 225, 7, 218, 186, 182, 162, 9, 197, 229,
188, 155, 7, 252, 160, 180, 95, 152, 167, 185, 156, 15, 169, 157, 242, 208,
6, 206, 213, 229, 223, 4, 205, 225, 209, 237, 9, 208, 223, 194, 178, 6,
185, 206, 145, 140, 11, 162, 153, 203, 219, 11, 191, 254, 170, 128, 15, 138,
198, 198, 231, 12, 171, 145, 216, 178, 11, 250, 208, 197, 186, 14, 230, 209,
184, 146, 15, 136, 148, 233, 177, 2, 224, 176, 162, 142, 12, 171, 216, 173,
150, 5, 190, 236, 246, 207, 8, 146, 159, 218, 24, 149, 184, 172, 144, 12,
215, 138, 134, 222, 8, 230, 138, 234, 150, 10, 132, 233, 180, 129, 7, 246,
243, 136, 179, 15, 180, 245, 254, 253, 8, 217, 162, 135, 169, 14, 175, 223,
178, 21, 248, 184, 135, 155, 3, 194, 214, 241, 156, 10, 150, 140, 157, 20,
245, 219, 214, 189, 9, 195, 224, 165, 187, 6, 143, 205, 236, 165, 14, 177,
147, 215, 253, 3, 149, 236, 255, 166, 10, 183, 205, 220, 209, 12, 135, 254,
156, 236, 12, 253, 196, 175, 55, 159, 249, 156, 132, 7, 206, 138, 221, 129,
1, 131, 237, 190, 202, 4, 203, 213, 202, 160, 13, 142, 239, 143, 188, 13,
140, 181, 178, 132, 5, 196, 160, 202, 171, 13, 165, 231, 144, 248, 3, 218,
192, 242, 222, 6, 182, 201, 241, 138, 7, 146, 141, 216, 156, 9, 253, 199,
128, 8, 143, 152, 133, 227, 10, 161, 133, 237, 138, 5, 155, 167, 242, 192,
11, 131, 131, 221, 252, 10, 173, 222, 208, 175, 4, 222, 246, 234, 182, 15,
186, 223, 226, 234, 4, 128, 134, 162, 161, 166, 8, 173, 187, 185, 226, 15,
193, 158, 170, 192, 15, 157, 143, 170, 233, 7, 236, 143, 129, 250, 7, 170,
139, 148, 165, 15, 227, 193, 248, 149, 1, 193, 175, 193, 161, 3, 201, 133,
138, 248, 1, 248, 238, 181, 148, 4, 148, 149, 163, 224, 5, 140, 176, 170,
226, 1, 210, 131, 226, 211, 11, 177, 220, 204, 252, 6, 172, 166, 215, 221,
7, 207, 206, 190, 142, 9, 180, 178, 244, 139, 13, 205, 186, 224, 193, 5,
203, 134, 137, 186, 9, 131, 254, 156, 161, 2, 251, 240, 204, 196, 9, 174,
198, 211, 220, 6, 203, 229, 158, 140, 7, 141, 224, 133, 196, 2, 185, 203,
211, 149, 14, 212, 173, 245, 172, 10, 171, 172, 253, 175, 15, 146, 215, 253,
240, 10, 129, 217, 236, 156, 12, 196, 183, 197, 250, 9, 189, 203, 169, 148,
11, 221, 247, 223, 173, 14, 218, 190, 182, 170, 9, 188, 230, 139, 223, 2,
152, 181, 134, 241, 11, 137, 184, 151, 151, 11, 224, 248, 137, 176, 12, 233,
234, 254, 228, 13, 202, 199, 164, 253, 15, 205, 152, 196, 208, 8, 245, 131,
154, 210, 13, 173, 230, 205, 208, 6, 138, 165, 240, 198, 14, 231, 137, 175,
129, 13, 246, 163, 168, 158, 1, 213, 246, 226, 226, 7, 211, 214, 201, 234,
15, 173, 179, 224, 157, 10, 146, 223, 141, 141, 14, 249, 209, 212, 241, 7,
152, 138, 146, 237, 1, 178, 175, 134, 132, 10, 201, 203, 154, 188, 14, 148,
188, 172, 196, 4, 170, 188, 178, 162, 9, 255, 227, 197, 169, 15, 163, 196,
216, 154, 13, 202, 217, 150, 190, 1, 156, 213, 189, 194, 11, 192, 206, 130,
164, 3, 197, 163, 251, 148, 5, 145, 250, 232, 230, 5, 141, 198, 246, 236,
6, 254, 143, 215, 185, 10, 139, 223, 210, 246, 12, 158, 243, 217, 139, 12,
218, 234, 151, 205, 5, 239, 161, 218, 141, 11, 189, 145, 169, 172, 10, 218,
224, 248, 247, 6, 229, 195, 222, 160, 15, 220, 251, 218, 156, 8, 235, 140,
138, 160, 5, 138, 133, 155, 195, 5, 248, 204, 241, 223, 7, 174, 250, 182,
238, 12, 190, 151, 165, 58, 132, 155, 154, 219, 10, 160, 136, 241, 163, 8,
145, 179, 243, 103, 156, 198, 227, 136, 12, 154, 158, 219, 228, 6, 138, 134,
248, 146, 4, 139, 141, 198, 253, 5, 193, 167, 232, 162, 7, 227, 182, 238,
134, 13, 153, 232, 167, 238, 13, 179, 178, 133, 162, 1, 144, 247, 180, 57,
228, 228, 193, 222, 6, 249, 173, 245, 228, 1, 128, 173, 168, 233, 7, 128,
193, 229, 199, 11, 222, 247, 155, 204, 8, 193, 156, 248, 222, 5, 161, 217,
242, 184, 6, 221, 249, 182, 235, 11, 136, 232, 167, 217, 2, 175, 247, 247,
133, 6, 190, 197, 160, 205, 12, 228, 232, 159, 194, 14, 138, 157, 191, 164,
12, 165, 147, 184, 78, 175, 222, 170, 114, 215, 206, 218, 235, 9, 172, 178,
244, 228, 9, 207, 184, 158, 134, 15, 220, 242, 151, 210, 5, 135, 214, 152,
169, 10, 147, 180, 187, 157, 15, 169, 248, 147, 144, 8, 148, 170, 166, 139,
7, 221, 178, 241, 141, 12, 129, 229, 166, 231, 10, 167, 164, 187, 169, 3,
210, 166, 162, 164, 9, 145, 229, 163, 141, 3, 169, 219, 228, 254, 13, 195,
154, 185, 239, 2, 232, 144, 143, 245, 1, 182, 224, 131, 205, 4, 203, 167,
128, 129, 2, 157, 147, 212, 142, 2, 157, 143, 162, 249, 10, 223, 183, 231,
195, 7, 162, 136, 180, 151, 14, 244, 221, 234, 162, 7, 175, 243, 194, 204,
12, 128, 201, 131, 148, 223, 15, 245, 173, 201, 153, 15, 179, 154, 219, 169,
10, 146, 160, 147, 195, 12, 235, 208, 250, 180, 3, 180, 137, 229, 254, 5,
167, 134, 245, 142, 10, 231, 130, 163, 232, 15, 235, 167, 185, 137, 12, 179,
205, 207, 135, 8, 130, 159, 158, 216, 6, 203, 218, 229, 194, 2, 244, 246,
217, 133, 3, 242, 158, 230, 208, 2, 221, 195, 182, 229, 4, 214, 236, 135,
214, 10, 137, 214, 209, 246, 7, 189, 198, 158, 200, 9, 214, 201, 139, 246,
11, 222, 180, 147, 211, 14, 146, 235, 149, 248, 11, 173, 234, 137, 145, 14,
135, 210, 187, 187, 3, 155, 174, 179, 178, 14, 158, 193, 253, 239, 12, 185,
178, 240, 176, 7, 129, 232, 208, 205, 1, 244, 167, 133, 23, 236, 181, 197,
142, 8, 177, 189, 200, 176, 12, 151, 218, 206, 138, 3, 153, 238, 153, 179,
7, 252, 224, 230, 173, 13, 201, 177, 222, 166, 13, 158, 168, 219, 249, 3,
227, 223, 144, 175, 8, 162, 217, 224, 176, 11, 153, 139, 169, 180, 7, 230,
211, 215, 224, 14, 181, 189, 210, 219, 5, 170, 217, 206, 227, 3, 246, 166,
191, 147, 2, 193, 209, 134, 215, 8, 187, 151, 160, 226, 10, 253, 149, 235,
174, 15, 168, 167, 137, 177, 14, 175, 245, 198, 225, 10, 189, 211, 166, 129,
4, 155, 158, 199, 212, 15, 246, 158, 210, 172, 12, 208, 222, 167, 183, 4,
168, 151, 160, 228, 4, 254, 136, 200, 147, 3, 162, 243, 242, 217, 11, 236,
201, 184, 252, 15, 177, 243, 230, 233, 11, 148, 179, 150, 255, 6, 174, 237,
246, 167, 3, 209, 233, 193, 130, 12, 200, 240, 131, 186, 2, 178, 157, 168,
198, 6, 143, 190, 249, 232, 1, 230, 135, 144, 204, 1, 174, 150, 157, 136,
15, 183, 158, 183, 162, 6, 231, 245, 145, 241, 14, 233, 184, 247, 249, 9,
234, 135, 237, 186, 2, 159, 177, 236, 132, 6, 180, 190, 237, 183, 3, 171,
196, 155, 188, 2, 242, 181, 155, 167, 8, 199, 137, 219, 202, 13, 190, 192,
159, 241, 10, 180, 160, 136, 200, 5, 225, 221, 234, 202, 13, 139, 193, 211,
222, 12, 229, 247, 247, 254, 7, 178, 167, 200, 189, 9, 236, 145, 224, 209,
12, 189, 181, 181, 142, 6, 211, 255, 195, 137, 10, 231, 134, 244, 223, 2,
192, 216, 170, 244, 3, 128, 132, 231, 150, 12, 210, 164, 150, 104, 232, 225,
252, 210, 4, 199, 178, 132, 135, 12, 147, 224, 226, 167, 14, 135, 143, 239,
248, 3, 190, 250, 237, 208, 10, 147, 135, 174, 171, 6, 189, 157, 158, 198,
10, 152, 177, 153, 236, 6, 191, 223, 190, 248, 14, 186, 138, 156, 164, 2,
149, 132, 208, 195, 5, 194, 194, 155, 218, 7, 253, 246, 182, 184, 11, 140,
169, 156, 177, 11, 227, 184, 167, 231, 4, 172, 213, 253, 232, 8, 240, 193,
129, 233, 10, 223, 212, 219, 155, 2, 142, 193, 243, 221, 2, 176, 192, 237,
244, 4, 178, 239, 243, 212, 8, 210, 200, 130, 32, 231, 254, 253, 141, 6,
218, 244, 156, 198, 11, 152, 151, 178, 192, 13, 222, 212, 142, 204, 7, 218,
137, 247, 160, 8, 143, 221, 142, 144, 14, 129, 184, 237, 128, 10, 203, 237,
139, 172, 3, 149, 196, 216, 182, 11, 246, 160, 169, 231, 15, 186, 238, 171,
161, 1, 176, 176, 172, 169, 7, 137, 191, 244, 226, 13, 184, 161, 159, 26,
128, 167, 143, 134, 3, 242, 254, 138, 225, 13, 238, 184, 199, 235, 10, 214,
203, 144, 197, 11, 198, 220, 212, 219, 7, 229, 145, 174, 165, 5, 128, 209,
130, 231, 167, 13, 198, 196, 179, 211, 7, 182, 132, 201, 165, 10, 235, 153,
140, 252, 3, 217, 181, 237, 175, 7, 161, 199, 151, 225, 11, 142, 199, 232,
132, 4, 153, 249, 128, 186, 1, 131, 229, 136, 172, 12, 159, 136, 140, 195,
12, 243, 153, 183, 233, 5, 145, 158, 229, 145, 2, 193, 243, 236, 167, 14,
133, 208, 141, 205, 14, 210, 174, 175, 132, 2, 172, 189, 148, 149, 10, 255,
234, 231, 149, 9, 214, 219, 150, 166, 5, 173, 182, 178, 187, 3, 148, 239,
172, 131, 4, 245, 159, 177, 254, 15, 154, 239, 200, 245, 15, 182, 184, 242,
193, 13, 183, 158, 219, 253, 3, 129, 224, 170, 184, 1, 252, 215, 217, 217,
2, 194, 206, 254, 158, 5, 232, 208, 253, 206, 11, 132, 164, 179, 184, 14,
186, 220, 196, 189, 10, 185, 135, 128, 185, 2, 163, 174, 141, 221, 3, 151,
252, 208, 215, 12, 176, 237, 217, 182, 6, 129, 224, 235, 156, 7, 146, 177,
225, 230, 3, 208, 175, 157, 130, 8, 218, 247, 170, 228, 14, 250, 251, 140,
220, 14, 212, 188, 171, 195, 1, 212, 181, 207, 205, 2, 163, 184, 196, 185,
5, 142, 159, 199, 176, 1, 130, 132, 140, 203, 9, 199, 243, 181, 168, 15,
247, 242, 204, 164, 11, 174, 146, 198, 218, 3, 230, 163, 238, 136, 12, 130,
178, 158, 249, 10, 149, 240, 204, 191, 9, 228, 204, 214, 170, 4, 242, 168,
132, 63, 207, 143, 253, 240, 10, 210, 166, 246, 186, 2, 168, 216, 222, 162,
5, 241, 226, 208, 203, 10, 216, 150, 185, 141, 12, 173, 130, 130, 204, 5,
167, 140, 140, 158, 7, 224, 204, 187, 243, 4, 212, 247, 211, 212, 5, 171,
193, 169, 172, 8, 148, 129, 238, 88, 239, 170, 248, 251, 3, 230, 252, 155,
197, 3, 148, 170, 220, 211, 8, 172, 146, 230, 175, 6, 235, 243, 165, 186,
4, 230, 158, 157, 187, 3, 207, 206, 145, 175, 14, 136, 225, 235, 190, 15,
135, 175, 253, 169, 1, 155, 237, 177, 179, 5, 180, 161, 155, 160, 15, 138,
133, 179, 167, 12, 221, 170, 176, 202, 6, 171, 131, 178, 247, 8, 146, 239,
153, 251, 11, 128, 183, 154, 182, 3, 154, 240, 245, 209, 6, 207, 137, 159,
171, 9, 192, 180, 191, 246, 11, 253, 143, 225, 81, 222, 137, 185, 155, 8,
174, 188, 154, 243, 4, 170, 238, 166, 178, 10, 226, 182, 176, 168, 7, 148,
175, 247, 131, 14, 173, 177, 239, 236, 12, 177, 244, 159, 183, 7, 241, 150,
173, 185, 13, 232, 224, 169, 137, 5, 207, 168, 131, 230, 1, 203, 162, 193,
202, 3, 131, 173, 240, 55, 183, 215, 128, 137, 3, 133, 218, 167, 144, 14,
129, 136, 189, 243, 6, 239, 157, 134, 248, 9, 172, 137, 234, 168, 2, 193,
240, 176, 235, 11, 242, 148, 152, 217, 6, 253, 184, 164, 173, 11, 228, 215,
198, 128, 8, 129, 252, 183, 6, 137, 250, 183, 210, 7, 208, 210, 163, 181,
6, 167, 244, 197, 183, 15, 157, 215, 173, 242, 8, 211, 182, 254, 181, 12,
235, 158, 194, 212, 9, 218, 154, 242, 147, 11, 220, 199, 237, 141, 12, 155,
177, 201, 103, 254, 161, 191, 215, 8, 230, 235, 168, 49, 208, 227, 236, 235,
12, 201, 130, 172, 253, 5, 180, 140, 169, 224, 15, 234, 243, 153, 151, 12,
193, 190, 224, 143, 9, 129, 245, 133, 204, 8, 182, 209, 250, 178, 8, 148,
139, 144, 193, 11, 230, 182, 245, 164, 7, 149, 204, 161, 226, 14, 175, 229,
148, 166, 13, 148, 140, 189, 216, 3};
SeekableInputStream* const stream =
new SeekableArrayInputStream(buffer, ARRAY_SIZE(buffer));
const long junk[] = {
-1192035722, 1672896916, 1491444859, -1244121273, -791680696, 1681943525,
-571055948, -1744759283, -998345856, 240559198, 1110691737, -1078127818,
1478213963, -1999074977, -1236487259, 1081623627, 1461835677, 1591726278,
-1952575303, -1153279155, -490105022, 1763048303, -438594735, -1943318570,
665131315, -992928519, -293947656, -27330946, -1617757142, 1557060559,
-1979359235, -2141705600, -568297608, 1062268262, 546298983, 2078961052,
1350125334, -540110141, 1306099749, -1200938434, -463354631, 329439552,
-1302441847, -432946209, 1420346281, -1051221106, -938249481, -1539784278,
-633078252, -978731267, -1561373991, 1629413219, 1092825247, -261977862,
838447829, 1919107204, 1005793149, 1642588377, -1464918718, -1917550168,
1003195972, 959160789, -1522112553, 181240876, -849957699, -458276524,
-702660955, 1860227091, 1705852155, -1998443154, -360453561, 1463660586,
-887384402, -1905027152, -1872509609, -437752724, -1567069256, 1418352668,
-460909277, -91142489, -1223052800, 1097921652, -989185632, 1256987999,
-177351034, -1872472137, -789485410, -2128291599, -754152008, -1726480917,
-344889284, -196409605, 2041828611, 1030395933, -387646305, 122767355,
31127980, 1207069862, -1514210082, 1440969525, -1135691553, -222758993,
1750352704, 1293980890, -723071736, 1827770358, -1000870743, -1082906010,
-696877983, -252767279, -1516790960, 815546697, 2030795, -44506509,
103592117, -1482662967, 927187170, 1038067053, -1372409134, -1839775706,
1288569419, 347516536, 794972304, -547875330, 2037259599, -14750351,
-789333636, -1172998669, 1751028141, -123944284, -148751174, -5812342,
-65684309, -901631668, -1730780359, 1806879062, -1718574994, -502581670,
-593823449, -500334763, 917654667, -371046539, -11224409, -22297703,
2077801437, 717176386, 712742849, -88095446, -377406568, -1498205212,
135250842, -186007254, 1575202718, 1356337350, 1333002980, -151543238,
1561151504, 2084754583, -1963332201, -1078676964, -981959640, 1602476694,
964958176, 514867609, -592880058, -1053778417, -1385343398, -1679005019,
-399336120, -1348025564, -1859939973, -1900785472, 2029569822, -1292867632,
1842863184, -1326742626, -1647402852, -1615986391, -2004041108, -1927387127,
-388061550, 90851556, -1327038179, -407516410, 1845693465, -704577762,
1924407265, -449969353, 275696175, 252281945, 1918737432, 1112818815,
-518024058, -574451772, 2092342266, 1855130091, 1320798104, 1779205566,
385703114, -712984113, 669819902, 1909731996, -1278685109, -1569593296,
881748738, 1814556074, 1613634931, -385688735, -2071646094, -1773311888,
-118425506, 1721906928, -1349880393, 634302005, 760022405, 761327810,
-1692081627, -1260841016, -1558856657, 99218556, 102018195, -1297008771,
164461607, 1741035812, -148600274, 1286275446, 1462487726, -1573434104,
974796426, -2059029469, -2104104269, 1866472414, -1650530055, 1795114251,
227296321, 1276834604, -1985393888, -9742901, 1614958392, -659109655,
2088223942, 223737183, 1388180799, 1359284324, -842845969, 444248480,
792108792, 960424293, -507555799, -1025721075, -1858379658, 1074173329,
1761578021, 425012429, -240453397, 2024456210, -324280184, 1589154548,
-1728079451, -1692822665, 1356528899, 1061517573, 1931192379, 1215961560,
379843745, 1361149623, -1461456893, 691110717, 2110459487, 1321410812,
2009528006, 1972104767, -2012050687, 1233284414, -182949706, 1670813423,
-1217301469, 594224363, -299708512, 1966313463, -369112947, 403641651,
88148317, -2024969729, 1133025739, 314550032, 1534341518, 1083403602,
-894963971, 1635904390, 1275196039, 1770867136, 2003009771, -545216468,
-135106165, 1264541893, 2022351708, -1678497814, 151276090, 1283919338,
-1927614553, -206580733, 1377848647, 627609963, 1823245450, -134096555,
-574753171, -1744928487, 1723985722, 1167154655, -599470685, 546628481,
-100331078, 1303120516, 2089166733, -2022155954, 456890992, -1002705650,
2049833270, 656668907, -44900108, -525666700, -2134854916, -1778466708,
1099709483, 1753848159, 10966731, -932986450, -1244650092, -735949590,
-836092531, -1380029252, -255869471, 259782569, -1689370655, 1681300596,
-998144311, 1911129837, -863029750, -402765462, 1405052444, 325400133,
950928169, 1208813323, -1927723497, -36025530, 1953996718, -130830587,
-2119112967, 828918159, 1875760908, -2110464282, -660032043, -1445534969,
1754377388, 859122691, 79215786, -1457379224, -845505501, 715141530,
-1483079760, 1668988417, 1189423270, -2117214918, 439999476, -1399973705,
467038141, -494559901, -1783874778, -1599666356, -199642314, 1949521512,
1089253553, 645336035, -25686436, 1450983836, 267113484, 73222595,
-497431960, 438311597, 442985552, -1777857701, 933496376, -1594540214,
-505331447, -1315298171, 1016898878, 966042892, -17718192, 1045280014,
-39208518, -2060138094, 1282411033, 1713508214, 1851842091, -58654482,
-474136376, 817547251, 296628738, -1658010049, -299884790, 57814971,
-1222513255, 869855902, 1558100706, -905854845, -1326530206, -1092944323,
1103855106, 4668482, 1477604451, -590041139, -1784763556, 282428730,
231044577, 269278752, 1575627255, 1500279352, 1910855259, -1419761648,
318679302, 107160345, -1193714758, 2041235102, -336170699, -54224496,
-676354875, -84222627, -175409338, 1620482599, 1176801242, 1844243729,
77824988, 1438587267, -215131942, -1383445358, 953582743, 1451014635,
-2068176283, 1058786294, -1159701920, -1767170805, 1441979975, 769713646,
540064005, 525602292, -747255503, -1765923984, -1528763385, -1768241306,
-1168806485, 33265046, -1719626574, -2061575599, 2013225545, -145323579,
-1616398994, -1614251879, 101988124, 389536785, -531784107, 1942497305,
1624000107, -1793946656, 1590267653, 1454383595, 1477205155, 956593869,
341516726, -1104289307, 1711827851, 1007508942, 392549262, -162616731,
1233239227, -254895976, -932430285, 1789001809, -258910386, 1829247809,
-1165175134, 2050581337, 1388743894, 1680716327, -955562689, -1196112257,
-378740336, 1404672016, -1064391892, -209744680, -1303657512, -1534080366,
1819175133, -1168503149, -144324898, -1139294027, 2079078892, 830990906,
1281643674, 1239967702, -36455895, -893671880, 1538788093, -1237546291,
1206167541, 475817626, -1186645912, 539232082, 1475246031, 1699396377,
838282081, 717780380, -1411838673, -1709848232, 504121732, 627189322,
658484370, -538814615, 1922572726, 1004837510, -1174373674, -1655080299,
2094525857, 355981927, -1636557369, 1393356380, -624347557, -247050857,
-2061086215, 119232442, -549875608, 1132263989, 1210157527, -1950418773,
-947805470, 1473662460, -2039682564, 1511364593, 495775222, -1754933852,
578631361, 974692628, 619906194, -270694776, 827229974, -626474838,
217984348, 233537160, -1394225003, -1325367080, -825843995, -19309008,
-1051287340, -1709856232, -1924609250, 1220845849, -262498310, 1923705916,
550530570, 475633807, -2108852076, 407081906, 1182356405, 1433463924,
-717627223, 1985302280, 52562276, 462014051, 1892679691, -1685829454,
-432280051, 102304536, 1239474159, -1947789045, 1873237513, 1162364430,
378408895, 436753561, 1401009671, -331011223, -687420625, -2112505195,
1253509443, -1326656490, -223810162, -1795864663, -1635326216, 1135351856,
1072514654, -1135464197, 1799420691, 1814080421, -1813241050, 290458473,
1787024936, -509812455, -1245699451, -1246584042, -628864855, 208287497,
-941972342, -282245339, 764591445, -1950018765, -155292605, -2039181884,
-1502132499, 927879221, -422951277, 1004131436, -359377619, -279608972,
1795607112, -504889242, 491472122, -1473703617, 1384613229, -1074969712,
-132300841, -809001677, -232707109, 718661985, -340386147, 1025520864,
-1304716522, -159879127, -21609621, -356163924, -1650473131, 749957789,
1659608794, -1630468361, 1401873890, -826137197, -1745267595, 2096479616,
108095652, -1070305783, 510702184, 681305350, 1581358841, 373543787,
-548048778, 1236252978, 1136594889, 571396628, 1563585072, -777040205,
884269272, -1395109355, -729593757, -2049576534, -881926310, 184632886,
-1534407215, -113998263, 1897790924, 827242297, -1493910748, 207409078,
-1381606655, -1469137051, -1357021665, 574603572, 1818109562, -1462551998,
-523689962, -784515708, -1377438213, 1830890656, 1018570656, -563746679,
548954202, -1075828514, -284139126, -1646923990, -1248333415, 1376072552,
328385806, 1612310907, -2015376329, -1482101887, -1268324540, -1073923297,
-47412286, -2031027134, 1724101079, 1882428903, 1226325168, 1060182497,
-1439411972, 2068153022, 303922543, -1010299082, -527725408, -868084535,
-1453122373, 729915259, -1810431776, -1170855222, -1854748370, 1653489747,
-1024923202, 1166795461, 888317469, -1095897075, -263817712, -1283775515,
128113057, 725330985, -340535877, 1390305951, -2040698894, 295390234,
519468833, -179502313, -404230148, 1113834573, 217655255, 697236931,
-447996629, -2135157399, -1308291941, -1886148018, -161160567, -67015720,
360555652, -598747970, 865850123, -802081914, 1971145595, -477789992,
-776787161, 1811555304, -1735200791, 1891237826, -986816598, -1744598976,
-2001145934, -171623446, -2118892089, 1848264734, -5746591, 1454333734,
1273178226, 1030190121, 1328203427, -29346019, 314597102, -2012456161,
1933656313, 787872740, -160286555, -1438880998, 387705257, 1464818923,
1301041719, 1984783124, -1271147531, 1487861786, 1042524116, 674928812,
333826191, -606298314, -1923024690, 1893750313, -1852775093, 1334513545,
-1533194135, 1098945727, -1334639594, 982450114, -1887582219, 811767569,
1106779430, 2128521241, -801057249, 1282615287, 1309743218, -1036048202,
-675233917, -2015133312, -1407597980, -805866925, 181664900, 1428234298,
987551693, -1305045729, -269637537, -161413456, -1825022695, -464152091,
594365822, 1788687667, 173257923, 654002541, 1479451402, -343189027,
-1317263094, -1632991710, 434048963, -218104622, -2116821787, 1386879989,
2024277523, -1683903287, 71981107, 1472146048, -954561185, -1929121846,
-99278026, -836661907, 1161399456, 645528633, -229497534, -559683816,
-347755982, 846036498, 1843706545, 1988047218, -1916349205, -2046432139,
2117711385, 768342313, -1484993937, -1028574363, 1840103616, 2024908549,
648097475, 820426188, 1813302864, -1862894699, 1853557023, -645272638,
-694642746, -484368118, 770488839, -1646124786, 453988784, -771295390,
-459096420, -646899732, 2068517271, 1404075720, -1273309905, -582314992,
-671770951, -449870790, -48212202, 1579880938, -476878341, 513340524,
-153887805, 1303129644, -1736144611, 1997437163, -551454447, -539393656,
-410513105, -1730002043, 787100897, 156300478, 1655413827, -1314804760,
-1017480219, 725995733, 837174883, 125404041, -1422872133, 174985128,
506105285, -2026814521, 122957373, 2018881699, -1531346372, 304642639,
-1823589353, 738989518, 842332146, -728492095, 691793049, 1406905611,
848671060, 2146403475, 921228493, 503081371, 470135884, -1234198474,
1009780684, 1177932262, -34718027, 1887702646, 1052893773, 443393403,
512495115, 2136307494, -1438483586, 476864340, 2001989218, 1022729211,
1855835926, -1410262945, 1184679065, -689936200, -961809237, -37581255,
-1029470257, -1480892021, -401541056, 453202492, 1112595988, -1405938761,
-941021151, 65758395, -496021405, 179072114, 126610419, 711573643,
-176404016, -797304305, 1052539142, -531326266, 137188861, -1079747744,
104921070, -1577624885, 1214665426, 1079238997, 72216401, 892964488,
-285963924, 383166184, -2067986431, -947233029, 1764614742, 1564468029,
-421298612, -1385150219, 1439869174, -871204348, 55432339, 1314201120,
-1685876151, -1703440863, 300653337, -1977445820, -2046493998, 309926543,
378495260, 1958992069, -1113354289, 1792193921, 1263805225, 1373967983,
1352521646, -60235319, -675624276, 26323830, -591835714, -1885760899,
-1519938874, -1998677577, 375457065, 1000260823, -1450154397, -1864463548,
-1911093470, 1114002525, 833260426, -571392737, 1004593242, -204444351,
-336121865, 710431300, 1173033399, 376979722, -1770804506, 85447404,
-484026297, -1606360717, -1582593999, 1774771216, -1889730446, -669358702,
641183901, -1956035797, -479348625, -619594436, 1553417071, -1684327868,
-583232007, 587191975, 1019475270, 1299447851, -1094565055, 726858321,
-22214620, 254396674, -1515419866, -491290335, 870396109, -589067521,
-998073181, -585938741, -27198124, -1998075025, -1636627064, 1922665080,
907579634, 245499901, -1491598228, 1290991525, -417806055, 783775795,
987384289, -1664073398, -1818943544, 518513473, -1972739863, -17076929,
-1087578336, -2130735619, -11897175, 1247714779, 39549495, 1424721195,
-136636068, 1321021406, -699064532, -212744195, -637015415, 1346785936,
1615976060, -735897892, 869318776, -2064220631, 1083884434, 2142530152,
1941891810, 1747938419, 584211108, 1430935230, 673025767, -1522239571,
-349593668, 534830840, 1439125060, 221479859, -1665023212, -711033607,
1976217028, 1419826523, -912609625, 1879662953, -683020553, -1481737184,
-1453041404, -419287042, 1209159969, -810667515, 328331620, -554189827,
-38670987, 758568371, 392902911, 805013760, 831693442, 102032100,
-339108454, -1214835719, -535575827, 471829764, 1693706596, -692180874,
-1274840224, -1770889195, 316972034, 3851814, -1468783678, -2077914158,
-93044504, 112417435, 301526952, -1801634537, 2040682218, -1540074671,
18395658, -1607816833, 399285522, 2083671022, -1317230535, -1170230962,
-1622288205, -1668653877, -1756594160, 1595947921, 335177918, 106581426,
-1517810326, -536170364, -1434305965, -723341079, 1614963411, 478361139,
1696920219, 994126447, -341229183, 1677955939, 329146836, 1508992901,
2013205637, -1291068239, 603886509, 786926191, -1973621955, 1873694716,
-1987964717, -151056773, -982178036, 108200448, 1655973323, -643471294,
65458253, -417971646, 1919828738, -933763539, 171755140, 460249395,
-1125856734, -16739013, -2135736362, 670532752, 203611302, 1890987520,
-1483650118, -683059705, -77856848, -769700368, -1416934159, -1500850145,
-1215059687, -1879473955, 763272883, -1968038568, -2088236599, 1229512381,
2032523562, -474604143, 1842260297, -776126031, -1134008029, 2108556714,
-1880709482, 237393986, -69243134, 782458217, -1259490761, 1788876781,
1549080823, -859428959, -605940335, 1018516449, -207426450, 570450064,
-1389536390, 592346118, -1331252532, 165183113, -2099745269, -1356937151,
21822807, -748103470, -142393926, 547509238, -634686347, 1026300111,
1330070951, 1759768014, 1142187544, 968694111, 1213038901, 1885970361,
-323991688, 363518085, -1672108324, -804048074, -1363075581, 1701273418,
1911929917, 44447185, 410977169, 1365427170, 959862646, -948485651,
-1849935396, -1009669619, -1801379401, 525897667, -1955430097, -1448024640,
1931243285, 1760694954, -1371363748, -846322684, -381157475, -1725454696,
411728882, -659046884, -2017706580, 326504936, -1505447249, 754195181,
1338936701, -176693411, -399948493, -1610399078, 1200783875, -1135651738,
-1011062025, -1590458258, 1626934009, -2101147741, -832223620, 310144767,
-1670647754, -139535449, -511393081, -1608439153, 1179987525, -566009345,
1746424843, -972134987, -35190731, -123082125, -1225027672, -12768196,
57860780, -1169964405, -896086188, -73457590, -1695925182, -585143980,
-419933289, -1162453564, 755390220, -827933852, 1698208124, 1044230129,
608724853, -164275430, -102639739, 1198259549, 1137531989, -1116284630,
-1356999201, 1957170687, -1307732933, 1650483544, -638806570, -1154478179,
173151245, 1569845123, 1591311498, -494240657, 841880275, 975655140,
2144072931, 2093762562, 904195791, 1304524183, 887864513, 555382367,
747757520, -988490149, 1029722488, 462127468, -865600825, -355339627,
-717869189, -1460719471, 1840667290, -1467405670, 2066471254, 1682556574,
1506116152, -1015317971, -959194655, 557427179, 1449151468, -966928570,
-862440014, -934483264, -382993930, 1831680277, 1962868691, 1253985271,
605568087, -1920103611, -162069068, -1335381537, 1466515436, 755896709,
-152123806, 120724324, -2090132802, -749600957, -513332999, 1697220972,
620702104, 1086605242, 2010555991, -1344440189, 573125337, -412489169,
2089343506, -887304007, 1741382282, -1294582154, 1399959211, -1465487414,
-987925582, 2054751675, 1026201859, 1347793280, -581133591, -1900657794,
1589876493, -555443627, -1711864278, 431235807, 1209591236, 248744027,
1750009325, -120886245, 1610195551, -1381986720, 459223925, 2001423958,
1232784067, 1433853260, 1951017062, 654934426, 1804947769, 1931534286,
-495608934, 1933837599, -1427818655, 2140007479, -713427148, 1995046348,
-1203051419, -35213147, 774683636, -592086787, 630139504, 1094303075,
-1180875316, -438823034, 2117971809, -646196848, -1103051341, 798549240,
-1510953796, 1429065214, 704873658, 23191330, -1585169696, 1840542299,
-591215524, 664793562, 357997439, -963884906, 1863569433, -54498563,
991835977, -716807557, 376575045, -591189325, -449494294, -404697696,
1597459996, -108456969, -1899610313, 1255661956, 794700058, 1115324758,
658753699, 1719389172, 1145101705, -1181105674, -1622578697, 233308080,
1451926619, 1322377945, -1800772031, -810522289, -1951656903, -527284125,
1582214669, -1422750113, 2022685659, -1026827239, 634221522, 1270282959,
-414347878, -1553149269, 1740116911, -1502502767, -697241533, -1983623628,
-1015070121, 1211501947, -582055635, 1158111423, 1409791816, -1650549906,
-1289481332, -372952307, 698533442, 1253310137, 126736648, 112219028,
-260924425, 538236607, -8216695, 1258254795, 1250497022, 695411926,
1807753300, 1141377444, 378228237, -1640510094, 1772051547, 819577690,
1637064807, 2004518786, 1726570960, 1237945196, 1890473363, 142532121,
431642362, 457680616, 1793421134, 114108497, -1609966004, 390875116,
865761473, -284648597, -1270011981, 1801086569, -450041354, 34724667,
1461207855, -1563369174, -1193357688, 890744002, -303462235, 306064148,
-1714379878, 1160621852, 782444786, 1760233647, -251092726, -1239728484,
451165251, -971693596, -1492590107, 1251141173, 1068753315, 127560712,
-675602404, -1943731429, -1442429995, -1268600807, 783284088, 960921257,
-523462813, 1709486406, 1864033227, 32424581, 1723753974, 771274676,
-606900633, 1574849281, 169589480, 1895990143, 1261911764, -1663992892,
-1265826537, -1801917442, -397409604, -1627809111, -1438727684, -932073653,
1633378602, 357569766, -1297857029, -423873023, 1795321075, 1274442352,
-1876019716, -897691833, -1569633677, -2028495970, 1542882873, -1573770995,
2119629948, -85633780, -936570279, 1393887381, -488600436, -1684597311,
1160585918, 1519028021, 1044513341, 150838164, 1792373530, 653285210,
-1248666111, -191831605, -1891529144, 1283118544, -1276441843, -1223401980,
-425946279, 1970465599, 721976469, -1505253544, 45266924, 1806828024,
-2070615494, -908596292, -1117250622, 331420657, -660185152, 589879211,
210813328, -456387314, -1601399804, 198300673, -1995521769, 334183842,
665336620, -1793671638, -2082929039, -782763724, 1042860064, 225541755,
-622972242, 591101317, -1369419464, 1119101151, -1294175841, -400470575,
606374965, 94458805, 864049393, -1426575787, 1101993333, 1230205177,
497689724, 1211124753, -1512147358, -1012370015, -505814051, 120429775,
2145165099, -1502901431, -474452671, 422689635, -1152989257, 962267153,
280766852, 1196475443, -784471083, 1169426630, 1749421434, -1606879751,
1300649655, 1121651007, -1400613749, -724755769, 1045426592, -1958011127,
573427844, -1811022517, 682117596, -143934906, 318890668, 198143572,
103973361, -1685647151, 287732246, -260465004, 30450195, -48654426,
-1321307339, 1256181927, -1817379876, 1951739521, 1537791157, 1145153363,
-1463184068, 255386052, -872356472, 1042060305, 1244057261, -968333667,
100042814, 2043095500, -890128213, 637318503, -1322924135, 858281960,
-1489122205, 1572431441, -2013618080, 1719193989, -1529545814, 1940436029,
2032604275, 320677124, 1625574448, -694531606, 1157552927, 25905097,
-1627753995, -1172357804, 1366114995, 941005378, 2066816251, 1205853530,
-1922099373, -22435800, 431025724, 1372468641, 21209867, -1272633083,
-867481634, -1918735176, -534439129, -1383070475, -1696306012, -1724096388,
-58061119, -943955536, 136028839, -614980418, -1778996582, 1807875015,
675695942, 1790527522, -528619987, 904810541, 950940251, 1238041417,
-8393215, -1446028808, -682467665, -1544440270, -1472962754, -586815383,
2070764975, 648828893, 1113860227, -2116497111, -2080720801, -1049969615,
1067459574, 2052227797, -157225074, -437791713, -260129125, 558283708,
772040010, 237325318, 1564229865, -935958297, 1037756822, -1223152552,
1757318298, -740036263, -1268851110, -303275906, -1279892542, 902459799,
-952359270, -339785735, -1901753053, 1389276010, -2063575830, 1460647369,
-1640863297, 1336454626, -1497707231, -1927020015, 1252446125, 368146846,
1594936652, -1500704261, 1661025840, -1850727093, 2144637413, -1158186535,
-1831026939, -889829783, 1953368389, -1746264692, 166004987, -1043094955,
-2125018538, -1373375703, 1892792265, -1058706557, 248660620, 1346423769,
-1942180581, 608538378, 1244024597, -2056829184, -1772818706, 199415397,
1546106190, 440423328, -693070051, -778903177, -919523719, 1402659839,
-1735022534, 1622883535, 752024237, -1490765944, -1388651615, 931076141,
-2047594739, 1103847150, -704725814, 741564741, 1040069436, 1726406295,
61122015, 1437812418, 1111368208, -108948681, 1619816846, 910911373,
556728709, -802734918, -976030177, -1752026546, -1860499981, -169913498,
60202440, 904411442, -240036733, 1049955136, 1551675456, 1153662447,
-770639649, -864966225, -1589042799, 362084868, -811531736, 1691619679,
1948514866, 1648879429, -82248915, -119887768, -1320899500, 1313770646,
-2019806760, 757267630, -1385371012, -2044161290, -1090682389, 951372426,
-1625173167, -1450498369, -446130452, 1245989289, -416577865, -1877776085,
-385296034, 257025076, 617642011, -269486566, -283804879, -1469334479,
-1010626032, 1903591953, 976050042, -1690852568, -2113044709, -2040081275,
-1385916058, 1681025033, -458183734, 804037210, -1357816212, -2122604724,
-1620519414, -1081733978, 897828801, -338474662, 408632762, 353159097,
-643223791, 1432419115, -1063925125, -1283707295, 1600221803, 1966239023,
1602403017, -1896954519, -465007748, -1931897742, 1728032847, -990776477,
-215620097, 24160762, 1088990582, -1661538137, -413783692, -993213325,
1792858174, -1785449573, 530278927, -1123162098, 1527518801, -994386637,
1980429555, -767184731, 507106901, 288876987, -1165022305, -1445201374,
-2062378367, 1930504660, -1444470104, -538236127, -2101929870, 1657423803,
594868136, 641992148, 423166527, 1570659537, 2143752822, -1587338457,
938659018, 444521303, -1613249129, 329284644, 879036249, -244264840,
214041075, 2021893527, -841410460, -1997684084, -1335815733, 330146293,
-810388560, 461221786, -331575574, 1114860921, -1823171172, 1460924447,
746653722, -1823299441, -1709862982, -1072627187, 1272515033, 1696334966,
-820424031, -1352171498, -369000884, 524637728, 1634525440, 109234473,
623876212, -1617988772, -1920751626, -529392580, 1426964127, -850772426,
-1415825247, 918760524, -2005391328, 306414237, -741998859, 1034121377,
-1535565247, 1528007238, -645197362, 1183823190, 1452290168, -297497904,
366899271, 659402776, 1162771417, 33575465, -819969972, 1550032173,
1812350412, 1019335983, 1108271725, -1895946056, -1343073793, -448887654,
-1533743371, 2121607227, 169180061, 982879256, -1848545221, 27519068,
409070016, 1846632377, 1454960183, 1548882667, 1035638563, -710263923,
-1786568873, 1026978083, 1381572891, -532776566, -989703533, -1578299857,
541921735, -195042893, -1656822082, -1680966160, -781641338, -287090569,
-1920834785, -1959900163, 273017769, 1364365142, -1230830272, 711120619,
-464932247, 540384202, -2145789947, 2136546253, 1813925403, -534472604,
-193288193, 362493438, 703583137, 1559213108, 1938188546, 1406703389,
-328204765, -500280210, -1702502156, 862665560, -969766913, 510405705,
1076079592, 1984257517, 1975623421, 204828458, 349826410, -731418130,
185132999, 1286701313, -2055650532, -1514773692, 497599639, 1619904755,
1469303937, -1274649611, 581620530, 66095673, -1460642792, 330221993,
707515924, -1421482169, 1624712620, -750796951, -971080468, 657945392,
759856618, -1120219222, 93175882, -532613816, 475234099, 1161529994,
855426198, -597998838, 464758707, -1928475560, 2079160388, -178236356,
-724974414, 2047043674, 1651925317, -883296943, -1198932182, 1605581769,
459492800, 891206669, -1253302888, 1600646432, -85730303, 1102520943,
657674007, 1394924437, 981863857, 1883171786, -1724771415, -997457177,
-1804969401, 680867892, -241199656, -480782502, -58592066, -412095964,
-1896150659, -926392833, -1333839736, 311247446, -1588993057, 898827577,
-1523879487, 1074320882, -6749953, -1025965701, 861172904, -2071510292,
-1193653711, -1667222954, -1296582582, 1497253549, 1625141742, -108604494,
1165486207, 51714803, 1723701480, -802521253, 2114265882, 1634942197,
-1224478625, -1153482049, 1127175259, 1544684234, 978234803, -1982083851,
-1784846680, 495428362};
const unsigned long fileLoc[] = {
0, 0, 0, 0, 0, 3, 3, 3, 3, 6, 6,
6, 6, 9, 9, 9, 9, 12, 12, 12, 12, 15,
15, 15, 15, 18, 18, 18, 18, 21, 21, 21, 21,
24, 24, 24, 24, 27, 27, 27, 27, 30, 30, 30,
30, 33, 33, 33, 33, 36, 36, 36, 36, 39, 39,
39, 39, 42, 42, 42, 42, 45, 45, 45, 45, 48,
48, 48, 48, 51, 51, 51, 51, 54, 54, 54, 54,
57, 57, 57, 57, 60, 60, 60, 60, 63, 63, 63,
63, 66, 66, 66, 66, 69, 69, 69, 69, 72, 72,
72, 72, 75, 75, 75, 75, 78, 78, 78, 78, 81,
81, 81, 81, 84, 84, 84, 84, 87, 87, 87, 87,
90, 90, 90, 90, 93, 93, 93, 93, 96, 96, 96,
96, 99, 99, 99, 99, 102, 102, 102, 102, 105, 105,
105, 105, 108, 108, 108, 108, 111, 111, 111, 111, 114,
114, 114, 114, 117, 117, 117, 117, 120, 120, 120, 120,
123, 123, 123, 123, 126, 126, 126, 126, 129, 129, 129,
129, 132, 132, 132, 132, 135, 135, 135, 135, 138, 138,
138, 138, 141, 141, 141, 141, 144, 144, 144, 144, 147,
147, 147, 147, 150, 150, 150, 150, 153, 153, 153, 153,
156, 156, 156, 156, 159, 159, 159, 159, 162, 162, 162,
162, 165, 165, 165, 165, 168, 168, 168, 168, 171, 171,
171, 171, 174, 174, 174, 174, 177, 177, 177, 177, 180,
180, 180, 180, 183, 183, 183, 183, 186, 186, 186, 186,
189, 189, 189, 189, 192, 192, 192, 192, 196, 196, 196,
196, 200, 200, 200, 200, 204, 204, 204, 204, 208, 208,
208, 208, 212, 212, 212, 212, 216, 216, 216, 216, 220,
220, 220, 220, 224, 224, 224, 224, 228, 228, 228, 228,
232, 232, 232, 232, 236, 236, 236, 236, 240, 240, 240,
240, 244, 244, 244, 244, 248, 248, 248, 248, 252, 252,
252, 252, 256, 256, 256, 256, 260, 260, 260, 260, 264,
264, 264, 264, 268, 268, 268, 268, 272, 272, 272, 272,
276, 276, 276, 276, 280, 280, 280, 280, 284, 284, 284,
284, 288, 288, 288, 288, 292, 292, 292, 292, 296, 296,
296, 296, 300, 300, 300, 300, 304, 304, 304, 304, 308,
308, 308, 308, 312, 312, 312, 312, 316, 316, 316, 316,
320, 320, 320, 320, 324, 324, 324, 324, 328, 328, 328,
328, 332, 332, 332, 332, 336, 336, 336, 336, 340, 340,
340, 340, 344, 344, 344, 344, 348, 348, 348, 348, 352,
352, 352, 352, 356, 356, 356, 356, 360, 360, 360, 360,
364, 364, 364, 364, 368, 368, 368, 368, 372, 372, 372,
372, 376, 376, 376, 376, 380, 380, 380, 380, 384, 384,
384, 384, 388, 388, 388, 388, 392, 392, 392, 392, 396,
396, 396, 396, 400, 400, 400, 400, 404, 404, 404, 404,
408, 408, 408, 408, 412, 412, 412, 412, 416, 416, 416,
416, 420, 420, 420, 420, 424, 424, 424, 424, 428, 428,
428, 428, 432, 432, 432, 432, 436, 436, 436, 436, 440,
440, 440, 440, 444, 444, 444, 444, 448, 448, 448, 448,
452, 452, 452, 452, 456, 456, 456, 456, 460, 460, 460,
460, 464, 464, 464, 464, 468, 468, 468, 468, 472, 472,
472, 472, 476, 476, 476, 476, 480, 480, 480, 480, 484,
484, 484, 484, 488, 488, 488, 488, 492, 492, 492, 492,
496, 496, 496, 496, 500, 500, 500, 500, 504, 504, 504,
504, 508, 508, 508, 508, 512, 512, 512, 512, 516, 516,
516, 516, 520, 520, 520, 520, 524, 524, 524, 524, 528,
528, 528, 528, 532, 532, 532, 532, 536, 536, 536, 536,
540, 540, 540, 540, 544, 544, 544, 544, 548, 548, 548,
548, 552, 552, 552, 552, 556, 556, 556, 556, 560, 560,
560, 560, 564, 564, 564, 564, 568, 568, 568, 568, 572,
572, 572, 572, 576, 576, 576, 576, 580, 580, 580, 580,
584, 584, 584, 584, 588, 588, 588, 588, 592, 592, 592,
592, 596, 596, 596, 596, 600, 600, 600, 600, 604, 604,
604, 604, 608, 608, 608, 608, 612, 612, 612, 612, 616,
616, 616, 616, 620, 620, 620, 620, 624, 624, 624, 624,
628, 628, 628, 628, 632, 632, 632, 632, 636, 636, 636,
636, 640, 640, 640, 640, 644, 644, 644, 644, 648, 648,
648, 648, 652, 652, 652, 652, 656, 656, 656, 656, 660,
660, 660, 660, 664, 664, 664, 664, 668, 668, 668, 668,
672, 672, 672, 672, 676, 676, 676, 676, 680, 680, 680,
680, 684, 684, 684, 684, 688, 688, 688, 688, 692, 692,
692, 692, 696, 696, 696, 696, 700, 700, 700, 700, 704,
704, 704, 704, 708, 708, 708, 708, 712, 712, 712, 712,
716, 716, 716, 716, 720, 720, 720, 720, 724, 724, 724,
724, 728, 728, 728, 728, 732, 732, 732, 732, 736, 736,
736, 736, 740, 740, 740, 740, 744, 744, 744, 744, 748,
748, 748, 748, 752, 752, 752, 752, 756, 756, 756, 756,
760, 760, 760, 760, 764, 764, 764, 764, 768, 768, 768,
768, 772, 772, 772, 772, 776, 776, 776, 776, 780, 780,
780, 780, 784, 784, 784, 784, 788, 788, 788, 788, 792,
792, 792, 792, 796, 796, 796, 796, 800, 800, 800, 800,
804, 804, 804, 804, 808, 808, 808, 808, 812, 812, 812,
812, 816, 816, 816, 816, 820, 820, 820, 820, 824, 824,
824, 824, 828, 828, 828, 828, 832, 832, 832, 832, 836,
836, 836, 836, 840, 840, 840, 840, 844, 844, 844, 844,
848, 848, 848, 848, 852, 852, 852, 852, 856, 856, 856,
856, 860, 860, 860, 860, 864, 864, 864, 864, 868, 868,
868, 868, 872, 872, 872, 872, 876, 876, 876, 876, 880,
880, 880, 880, 884, 884, 884, 884, 888, 888, 888, 888,
892, 892, 892, 892, 896, 896, 896, 896, 900, 900, 900,
900, 904, 904, 904, 904, 908, 908, 908, 908, 912, 912,
912, 912, 916, 916, 916, 916, 920, 920, 920, 920, 924,
924, 924, 924, 928, 928, 928, 928, 932, 932, 932, 932,
936, 936, 936, 936, 940, 940, 940, 940, 944, 944, 944,
944, 948, 948, 948, 948, 952, 952, 952, 952, 956, 956,
956, 956, 960, 960, 960, 960, 960, 960, 960, 960, 960,
960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960,
960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960,
960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960,
960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960,
960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960,
960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960,
960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960,
960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960,
960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960,
960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960,
960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 964,
964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964,
964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964,
964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964,
964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964,
964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964,
964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964,
964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964,
964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964,
964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964,
964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964,
964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964,
964, 964, 964, 964, 964, 964, 964, 964, 968, 968, 968,
968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968,
968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968,
968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968,
968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968,
968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968,
968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968,
968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968,
968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968,
968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968,
968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968,
968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968,
968, 968, 968, 968, 968, 968, 972, 972, 972, 972, 972,
972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972,
972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972,
972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972,
972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972,
972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972,
972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972,
972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972,
972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972,
972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972,
972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972,
972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972,
972, 972, 972, 972, 976, 976, 976, 976, 976, 976, 976,
976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976,
976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976,
976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976,
976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976,
976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976,
976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976,
976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976,
976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976,
976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976,
976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976,
976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976,
976, 976, 980, 980, 980, 980, 980, 980, 980, 980, 980,
980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980,
980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980,
980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980,
980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980,
980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980,
980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980,
980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980,
980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980,
980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980,
980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980,
980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980,
984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984,
984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984,
984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984,
984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984,
984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984,
984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984,
984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984,
984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984,
984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984,
984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984,
984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984,
984, 984, 984, 984, 984, 984, 984, 984, 984, 988, 988,
988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988,
988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988,
988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988,
988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988,
988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988,
988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988,
988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988,
988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988,
988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988,
988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988,
988, 988, 988, 992, 992, 992, 992, 992, 992, 992, 992,
992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992,
992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992,
992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992,
992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992,
992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992,
992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992,
992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992,
992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992,
992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992,
992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992,
992, 992, 992, 992, 992, 992, 992, 992, 992, 1625, 1625,
1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
1625, 1625, 1625, 1625, 1625, 2255, 2255, 2255, 2255, 2255, 2255,
2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
2255, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 3515, 3515, 3515,
3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
3515, 3515, 3515, 3515, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784,
4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784,
4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784,
4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784,
4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784,
4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784,
4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784,
4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784,
4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784,
4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784,
4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784, 4784,
4784, 4784, 4784, 4784, 4784, 4784, 4784, 5419, 5419, 5419, 5419,
5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419,
5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419,
5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419,
5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419,
5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419,
5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419,
5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419,
5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419,
5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419,
5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419,
5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419,
5419, 5419, 5419, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047,
6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047,
6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047,
6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047,
6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047,
6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047,
6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047,
6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047,
6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047,
6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047,
6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047,
6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6676,
6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676,
6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676,
6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676,
6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676,
6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676,
6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676,
6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676,
6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676,
6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676,
6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676,
6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676, 6676,
6676, 6676, 6676, 6676, 6676, 6676, 7308, 7308, 7308, 7308, 7308,
7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308,
7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308,
7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308,
7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308,
7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308,
7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308,
7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308,
7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308,
7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308,
7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308,
7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308, 7308,
7308, 7308, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943,
7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943,
7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943,
7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943,
7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943,
7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943,
7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943,
7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943,
7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943,
7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943,
7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943,
7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 7943, 8575, 8575,
8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575,
8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575,
8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575,
8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575,
8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575,
8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575,
8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575,
8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575,
8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575,
8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575,
8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575, 8575,
8575, 8575, 8575, 8575, 8575, 9205, 9205, 9205, 9205, 9205, 9205,
9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205,
9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205,
9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205,
9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205,
9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205,
9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205,
9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205,
9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205,
9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205,
9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205,
9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205, 9205,
9205, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841,
9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841,
9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841,
9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841,
9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841,
9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841,
9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841,
9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841,
9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841,
9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841,
9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841,
9841, 9841, 9841, 9841, 9841, 9841, 9841, 9841, 10478, 10478, 10478,
10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478, 10478,
10478, 10478, 10478, 10478};
const unsigned long rleLoc[] = {
0, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3,
4, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
128, 129, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
126, 127, 128, 129, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
124, 125, 126, 127, 128, 129, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
122, 123, 124, 125, 126, 127, 128, 129, 0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 0, 1, 2, 3, 4, 5,
6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 0, 1, 2, 3,
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 0, 1,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
114, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127
};
std::list<uint64_t> positions[4096];
for (size_t i = 0; i < 4096; ++i) {
positions[i].push_back(fileLoc[i]);
positions[i].push_back(rleLoc[i]);
}
std::unique_ptr<RleDecoder> rle =
createRleDecoder(std::unique_ptr<SeekableInputStream>(stream),
true, RleVersion_1, *getDefaultPool());
std::vector<int64_t> data(2048);
rle->next(data.data(), data.size(), nullptr);
for (size_t i = 0; i < data.size(); ++i) {
if (i < 1024) {
EXPECT_EQ(i/4, data[i]) << "Wrong output at " << i;
} else {
EXPECT_EQ(2 * i, data[i]) << "Wrong output at " << i;
}
}
rle->next(data.data(), data.size(), nullptr);
for (size_t i = 0; i < data.size(); ++i) {
EXPECT_EQ(junk[i], data[i]) << "Wrong output at " << i;
}
size_t i = 4096;
do {
--i;
PositionProvider location(positions[i]);
rle->seek(location);
rle->next(data.data(), 1, nullptr);
if (i < 1024) {
EXPECT_EQ(i/4, data[0]) << "Wrong output at " << i;
} else if (i < 2048) {
EXPECT_EQ(2 * i, data[0]) << "Wrong output at " << i;
} else {
EXPECT_EQ(junk[i - 2048], data[0]) << "Wrong output at " << i;
}
} while (i != 0);
}
TEST(RLEv1, testLeadingNulls) {
const unsigned char buffer[] = {0xfb, 0x01, 0x02, 0x03, 0x04, 0x05};
std::unique_ptr<RleDecoder> rle =
createRleDecoder(std::unique_ptr<SeekableInputStream>
(new SeekableArrayInputStream(buffer,
ARRAY_SIZE(buffer))),
false, RleVersion_1, *getDefaultPool());
std::vector<int64_t> data(10);
const char isNull[] = {0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x01, 0x01};
rle->next(data.data(), 10, isNull);
for (size_t i = 5; i < 10; ++i) {
EXPECT_EQ(i - 4, data[i]) << "Output wrong at " << i;
}
};
} // namespace orc