1*86ee64e7SAndroid Build Coastguard Worker // Copyright 2020 The Chromium Authors
2*86ee64e7SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*86ee64e7SAndroid Build Coastguard Worker // found in the Chromium source repository LICENSE file.
4*86ee64e7SAndroid Build Coastguard Worker
5*86ee64e7SAndroid Build Coastguard Worker #include "infcover.h"
6*86ee64e7SAndroid Build Coastguard Worker
7*86ee64e7SAndroid Build Coastguard Worker #include <cstddef>
8*86ee64e7SAndroid Build Coastguard Worker #include <vector>
9*86ee64e7SAndroid Build Coastguard Worker
10*86ee64e7SAndroid Build Coastguard Worker #include "compression_utils_portable.h"
11*86ee64e7SAndroid Build Coastguard Worker #include "gtest.h"
12*86ee64e7SAndroid Build Coastguard Worker
13*86ee64e7SAndroid Build Coastguard Worker #if !defined(CMAKE_STANDALONE_UNITTESTS)
14*86ee64e7SAndroid Build Coastguard Worker #include "base/files/file_path.h"
15*86ee64e7SAndroid Build Coastguard Worker #include "base/files/scoped_temp_dir.h"
16*86ee64e7SAndroid Build Coastguard Worker
17*86ee64e7SAndroid Build Coastguard Worker #include "third_party/zlib/contrib/minizip/unzip.h"
18*86ee64e7SAndroid Build Coastguard Worker #include "third_party/zlib/contrib/minizip/zip.h"
19*86ee64e7SAndroid Build Coastguard Worker #endif
20*86ee64e7SAndroid Build Coastguard Worker
21*86ee64e7SAndroid Build Coastguard Worker #include "zlib.h"
22*86ee64e7SAndroid Build Coastguard Worker
TestPayloads(size_t input_size,zlib_internal::WrapperType type,const int compression_level=Z_DEFAULT_COMPRESSION)23*86ee64e7SAndroid Build Coastguard Worker void TestPayloads(size_t input_size, zlib_internal::WrapperType type,
24*86ee64e7SAndroid Build Coastguard Worker const int compression_level = Z_DEFAULT_COMPRESSION) {
25*86ee64e7SAndroid Build Coastguard Worker std::vector<unsigned char> input;
26*86ee64e7SAndroid Build Coastguard Worker input.reserve(input_size);
27*86ee64e7SAndroid Build Coastguard Worker for (size_t i = 1; i <= input_size; ++i)
28*86ee64e7SAndroid Build Coastguard Worker input.push_back(i & 0xff);
29*86ee64e7SAndroid Build Coastguard Worker
30*86ee64e7SAndroid Build Coastguard Worker // If it is big enough for GZIP, will work for other wrappers.
31*86ee64e7SAndroid Build Coastguard Worker std::vector<unsigned char> compressed(
32*86ee64e7SAndroid Build Coastguard Worker zlib_internal::GzipExpectedCompressedSize(input.size()));
33*86ee64e7SAndroid Build Coastguard Worker std::vector<unsigned char> decompressed(input.size());
34*86ee64e7SAndroid Build Coastguard Worker
35*86ee64e7SAndroid Build Coastguard Worker // Libcores's java/util/zip/Deflater default settings: ZLIB,
36*86ee64e7SAndroid Build Coastguard Worker // DEFAULT_COMPRESSION and DEFAULT_STRATEGY.
37*86ee64e7SAndroid Build Coastguard Worker unsigned long compressed_size = static_cast<unsigned long>(compressed.size());
38*86ee64e7SAndroid Build Coastguard Worker int result = zlib_internal::CompressHelper(
39*86ee64e7SAndroid Build Coastguard Worker type, compressed.data(), &compressed_size, input.data(), input.size(),
40*86ee64e7SAndroid Build Coastguard Worker compression_level, nullptr, nullptr);
41*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(result, Z_OK);
42*86ee64e7SAndroid Build Coastguard Worker
43*86ee64e7SAndroid Build Coastguard Worker unsigned long decompressed_size =
44*86ee64e7SAndroid Build Coastguard Worker static_cast<unsigned long>(decompressed.size());
45*86ee64e7SAndroid Build Coastguard Worker result = zlib_internal::UncompressHelper(type, decompressed.data(),
46*86ee64e7SAndroid Build Coastguard Worker &decompressed_size,
47*86ee64e7SAndroid Build Coastguard Worker compressed.data(), compressed_size);
48*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(result, Z_OK);
49*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(input, decompressed);
50*86ee64e7SAndroid Build Coastguard Worker }
51*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,ZlibWrapper)52*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, ZlibWrapper) {
53*86ee64e7SAndroid Build Coastguard Worker // Minimal ZLIB wrapped short stream size is about 8 bytes.
54*86ee64e7SAndroid Build Coastguard Worker for (size_t i = 1; i < 1024; ++i)
55*86ee64e7SAndroid Build Coastguard Worker TestPayloads(i, zlib_internal::WrapperType::ZLIB);
56*86ee64e7SAndroid Build Coastguard Worker }
57*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,GzipWrapper)58*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, GzipWrapper) {
59*86ee64e7SAndroid Build Coastguard Worker // GZIP should be 12 bytes bigger than ZLIB wrapper.
60*86ee64e7SAndroid Build Coastguard Worker for (size_t i = 1; i < 1024; ++i)
61*86ee64e7SAndroid Build Coastguard Worker TestPayloads(i, zlib_internal::WrapperType::GZIP);
62*86ee64e7SAndroid Build Coastguard Worker }
63*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,RawWrapper)64*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, RawWrapper) {
65*86ee64e7SAndroid Build Coastguard Worker // RAW has no wrapper (V8 Blobs is a known user), size
66*86ee64e7SAndroid Build Coastguard Worker // should be payload_size + 2 for short payloads.
67*86ee64e7SAndroid Build Coastguard Worker for (size_t i = 1; i < 1024; ++i)
68*86ee64e7SAndroid Build Coastguard Worker TestPayloads(i, zlib_internal::WrapperType::ZRAW);
69*86ee64e7SAndroid Build Coastguard Worker }
70*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,LargePayloads)71*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, LargePayloads) {
72*86ee64e7SAndroid Build Coastguard Worker static const size_t lengths[] = { 6000, 8000, 10'000, 15'000, 20'000, 30'000,
73*86ee64e7SAndroid Build Coastguard Worker 50'000, 100'000, 150'000, 2'500'000,
74*86ee64e7SAndroid Build Coastguard Worker 5'000'000, 10'000'000, 20'000'000 };
75*86ee64e7SAndroid Build Coastguard Worker
76*86ee64e7SAndroid Build Coastguard Worker for (size_t length: lengths) {
77*86ee64e7SAndroid Build Coastguard Worker TestPayloads(length, zlib_internal::WrapperType::ZLIB);
78*86ee64e7SAndroid Build Coastguard Worker TestPayloads(length, zlib_internal::WrapperType::GZIP);
79*86ee64e7SAndroid Build Coastguard Worker }
80*86ee64e7SAndroid Build Coastguard Worker }
81*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,CompressionLevels)82*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, CompressionLevels) {
83*86ee64e7SAndroid Build Coastguard Worker static const int levels[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
84*86ee64e7SAndroid Build Coastguard Worker for (int level: levels) {
85*86ee64e7SAndroid Build Coastguard Worker TestPayloads(5'000'000, zlib_internal::WrapperType::ZLIB, level);
86*86ee64e7SAndroid Build Coastguard Worker TestPayloads(5'000'000, zlib_internal::WrapperType::GZIP, level);
87*86ee64e7SAndroid Build Coastguard Worker }
88*86ee64e7SAndroid Build Coastguard Worker }
89*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,InflateCover)90*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, InflateCover) {
91*86ee64e7SAndroid Build Coastguard Worker cover_support();
92*86ee64e7SAndroid Build Coastguard Worker cover_wrap();
93*86ee64e7SAndroid Build Coastguard Worker cover_back();
94*86ee64e7SAndroid Build Coastguard Worker cover_inflate();
95*86ee64e7SAndroid Build Coastguard Worker // TODO(cavalcantii): enable this last test.
96*86ee64e7SAndroid Build Coastguard Worker // cover_trees();
97*86ee64e7SAndroid Build Coastguard Worker cover_fast();
98*86ee64e7SAndroid Build Coastguard Worker }
99*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,InflateCVE)100*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, InflateCVE) {
101*86ee64e7SAndroid Build Coastguard Worker cover_CVE_2022_37434();
102*86ee64e7SAndroid Build Coastguard Worker }
103*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,DeflateStored)104*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, DeflateStored) {
105*86ee64e7SAndroid Build Coastguard Worker const int no_compression = 0;
106*86ee64e7SAndroid Build Coastguard Worker const zlib_internal::WrapperType type = zlib_internal::WrapperType::GZIP;
107*86ee64e7SAndroid Build Coastguard Worker std::vector<unsigned char> input(1 << 10, 42);
108*86ee64e7SAndroid Build Coastguard Worker std::vector<unsigned char> compressed(
109*86ee64e7SAndroid Build Coastguard Worker zlib_internal::GzipExpectedCompressedSize(input.size()));
110*86ee64e7SAndroid Build Coastguard Worker std::vector<unsigned char> decompressed(input.size());
111*86ee64e7SAndroid Build Coastguard Worker unsigned long compressed_size = static_cast<unsigned long>(compressed.size());
112*86ee64e7SAndroid Build Coastguard Worker int result = zlib_internal::CompressHelper(
113*86ee64e7SAndroid Build Coastguard Worker type, compressed.data(), &compressed_size, input.data(), input.size(),
114*86ee64e7SAndroid Build Coastguard Worker no_compression, nullptr, nullptr);
115*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(result, Z_OK);
116*86ee64e7SAndroid Build Coastguard Worker
117*86ee64e7SAndroid Build Coastguard Worker unsigned long decompressed_size =
118*86ee64e7SAndroid Build Coastguard Worker static_cast<unsigned long>(decompressed.size());
119*86ee64e7SAndroid Build Coastguard Worker result = zlib_internal::UncompressHelper(type, decompressed.data(),
120*86ee64e7SAndroid Build Coastguard Worker &decompressed_size,
121*86ee64e7SAndroid Build Coastguard Worker compressed.data(), compressed_size);
122*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(result, Z_OK);
123*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(input, decompressed);
124*86ee64e7SAndroid Build Coastguard Worker }
125*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,StreamingInflate)126*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, StreamingInflate) {
127*86ee64e7SAndroid Build Coastguard Worker uint8_t comp_buf[4096], decomp_buf[4096];
128*86ee64e7SAndroid Build Coastguard Worker z_stream comp_strm, decomp_strm;
129*86ee64e7SAndroid Build Coastguard Worker int ret;
130*86ee64e7SAndroid Build Coastguard Worker
131*86ee64e7SAndroid Build Coastguard Worker std::vector<uint8_t> src;
132*86ee64e7SAndroid Build Coastguard Worker for (size_t i = 0; i < 1000; i++) {
133*86ee64e7SAndroid Build Coastguard Worker for (size_t j = 0; j < 40; j++) {
134*86ee64e7SAndroid Build Coastguard Worker src.push_back(j);
135*86ee64e7SAndroid Build Coastguard Worker }
136*86ee64e7SAndroid Build Coastguard Worker }
137*86ee64e7SAndroid Build Coastguard Worker
138*86ee64e7SAndroid Build Coastguard Worker // Deflate src into comp_buf.
139*86ee64e7SAndroid Build Coastguard Worker comp_strm.zalloc = Z_NULL;
140*86ee64e7SAndroid Build Coastguard Worker comp_strm.zfree = Z_NULL;
141*86ee64e7SAndroid Build Coastguard Worker comp_strm.opaque = Z_NULL;
142*86ee64e7SAndroid Build Coastguard Worker ret = deflateInit(&comp_strm, Z_BEST_COMPRESSION);
143*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
144*86ee64e7SAndroid Build Coastguard Worker comp_strm.next_out = comp_buf;
145*86ee64e7SAndroid Build Coastguard Worker comp_strm.avail_out = sizeof(comp_buf);
146*86ee64e7SAndroid Build Coastguard Worker comp_strm.next_in = src.data();
147*86ee64e7SAndroid Build Coastguard Worker comp_strm.avail_in = src.size();
148*86ee64e7SAndroid Build Coastguard Worker ret = deflate(&comp_strm, Z_FINISH);
149*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_STREAM_END);
150*86ee64e7SAndroid Build Coastguard Worker size_t comp_sz = sizeof(comp_buf) - comp_strm.avail_out;
151*86ee64e7SAndroid Build Coastguard Worker
152*86ee64e7SAndroid Build Coastguard Worker // Inflate comp_buf one 4096-byte buffer at a time.
153*86ee64e7SAndroid Build Coastguard Worker decomp_strm.zalloc = Z_NULL;
154*86ee64e7SAndroid Build Coastguard Worker decomp_strm.zfree = Z_NULL;
155*86ee64e7SAndroid Build Coastguard Worker decomp_strm.opaque = Z_NULL;
156*86ee64e7SAndroid Build Coastguard Worker ret = inflateInit(&decomp_strm);
157*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
158*86ee64e7SAndroid Build Coastguard Worker decomp_strm.next_in = comp_buf;
159*86ee64e7SAndroid Build Coastguard Worker decomp_strm.avail_in = comp_sz;
160*86ee64e7SAndroid Build Coastguard Worker
161*86ee64e7SAndroid Build Coastguard Worker while (decomp_strm.avail_in > 0) {
162*86ee64e7SAndroid Build Coastguard Worker decomp_strm.next_out = decomp_buf;
163*86ee64e7SAndroid Build Coastguard Worker decomp_strm.avail_out = sizeof(decomp_buf);
164*86ee64e7SAndroid Build Coastguard Worker ret = inflate(&decomp_strm, Z_FINISH);
165*86ee64e7SAndroid Build Coastguard Worker ASSERT_TRUE(ret == Z_OK || ret == Z_STREAM_END || ret == Z_BUF_ERROR);
166*86ee64e7SAndroid Build Coastguard Worker
167*86ee64e7SAndroid Build Coastguard Worker // Verify the output bytes.
168*86ee64e7SAndroid Build Coastguard Worker size_t num_out = sizeof(decomp_buf) - decomp_strm.avail_out;
169*86ee64e7SAndroid Build Coastguard Worker for (size_t i = 0; i < num_out; i++) {
170*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(decomp_buf[i], src[decomp_strm.total_out - num_out + i]);
171*86ee64e7SAndroid Build Coastguard Worker }
172*86ee64e7SAndroid Build Coastguard Worker }
173*86ee64e7SAndroid Build Coastguard Worker
174*86ee64e7SAndroid Build Coastguard Worker // Cleanup memory (i.e. makes ASAN bot happy).
175*86ee64e7SAndroid Build Coastguard Worker ret = deflateEnd(&comp_strm);
176*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(ret, Z_OK);
177*86ee64e7SAndroid Build Coastguard Worker ret = inflateEnd(&decomp_strm);
178*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(ret, Z_OK);
179*86ee64e7SAndroid Build Coastguard Worker }
180*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,CRCHashBitsCollision)181*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, CRCHashBitsCollision) {
182*86ee64e7SAndroid Build Coastguard Worker // The CRC32c of the hex sequences 2a,14,14,14 and 2a,14,db,14 have the same
183*86ee64e7SAndroid Build Coastguard Worker // lower 9 bits. Since longest_match doesn't check match[2], a bad match could
184*86ee64e7SAndroid Build Coastguard Worker // be chosen when the number of hash bits is <= 9. For this reason, the number
185*86ee64e7SAndroid Build Coastguard Worker // of hash bits must be set higher, regardless of the memlevel parameter, when
186*86ee64e7SAndroid Build Coastguard Worker // using CRC32c hashing for string matching. See https://crbug.com/1113596
187*86ee64e7SAndroid Build Coastguard Worker
188*86ee64e7SAndroid Build Coastguard Worker std::vector<uint8_t> src = {
189*86ee64e7SAndroid Build Coastguard Worker // Random byte; zlib doesn't match at offset 0.
190*86ee64e7SAndroid Build Coastguard Worker 123,
191*86ee64e7SAndroid Build Coastguard Worker
192*86ee64e7SAndroid Build Coastguard Worker // This will look like 5-byte match.
193*86ee64e7SAndroid Build Coastguard Worker 0x2a,
194*86ee64e7SAndroid Build Coastguard Worker 0x14,
195*86ee64e7SAndroid Build Coastguard Worker 0xdb,
196*86ee64e7SAndroid Build Coastguard Worker 0x14,
197*86ee64e7SAndroid Build Coastguard Worker 0x15,
198*86ee64e7SAndroid Build Coastguard Worker
199*86ee64e7SAndroid Build Coastguard Worker // Offer a 4-byte match to bump the next expected match length to 5.
200*86ee64e7SAndroid Build Coastguard Worker 0x2a,
201*86ee64e7SAndroid Build Coastguard Worker 0x14,
202*86ee64e7SAndroid Build Coastguard Worker 0x14,
203*86ee64e7SAndroid Build Coastguard Worker 0x14,
204*86ee64e7SAndroid Build Coastguard Worker
205*86ee64e7SAndroid Build Coastguard Worker 0x2a,
206*86ee64e7SAndroid Build Coastguard Worker 0x14,
207*86ee64e7SAndroid Build Coastguard Worker 0x14,
208*86ee64e7SAndroid Build Coastguard Worker 0x14,
209*86ee64e7SAndroid Build Coastguard Worker 0x15,
210*86ee64e7SAndroid Build Coastguard Worker };
211*86ee64e7SAndroid Build Coastguard Worker
212*86ee64e7SAndroid Build Coastguard Worker z_stream stream;
213*86ee64e7SAndroid Build Coastguard Worker stream.zalloc = nullptr;
214*86ee64e7SAndroid Build Coastguard Worker stream.zfree = nullptr;
215*86ee64e7SAndroid Build Coastguard Worker
216*86ee64e7SAndroid Build Coastguard Worker // Using a low memlevel to try to reduce the number of hash bits. Negative
217*86ee64e7SAndroid Build Coastguard Worker // windowbits means raw deflate, i.e. without the zlib header.
218*86ee64e7SAndroid Build Coastguard Worker int ret = deflateInit2(&stream, /*comp level*/ 2, /*method*/ Z_DEFLATED,
219*86ee64e7SAndroid Build Coastguard Worker /*windowbits*/ -15, /*memlevel*/ 2,
220*86ee64e7SAndroid Build Coastguard Worker /*strategy*/ Z_DEFAULT_STRATEGY);
221*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
222*86ee64e7SAndroid Build Coastguard Worker std::vector<uint8_t> compressed(100, '\0');
223*86ee64e7SAndroid Build Coastguard Worker stream.next_out = compressed.data();
224*86ee64e7SAndroid Build Coastguard Worker stream.avail_out = compressed.size();
225*86ee64e7SAndroid Build Coastguard Worker stream.next_in = src.data();
226*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = src.size();
227*86ee64e7SAndroid Build Coastguard Worker ret = deflate(&stream, Z_FINISH);
228*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_STREAM_END);
229*86ee64e7SAndroid Build Coastguard Worker compressed.resize(compressed.size() - stream.avail_out);
230*86ee64e7SAndroid Build Coastguard Worker deflateEnd(&stream);
231*86ee64e7SAndroid Build Coastguard Worker
232*86ee64e7SAndroid Build Coastguard Worker ret = inflateInit2(&stream, /*windowbits*/ -15);
233*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
234*86ee64e7SAndroid Build Coastguard Worker std::vector<uint8_t> decompressed(src.size(), '\0');
235*86ee64e7SAndroid Build Coastguard Worker stream.next_in = compressed.data();
236*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = compressed.size();
237*86ee64e7SAndroid Build Coastguard Worker stream.next_out = decompressed.data();
238*86ee64e7SAndroid Build Coastguard Worker stream.avail_out = decompressed.size();
239*86ee64e7SAndroid Build Coastguard Worker ret = inflate(&stream, Z_FINISH);
240*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_STREAM_END);
241*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(0U, stream.avail_out);
242*86ee64e7SAndroid Build Coastguard Worker inflateEnd(&stream);
243*86ee64e7SAndroid Build Coastguard Worker
244*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(src, decompressed);
245*86ee64e7SAndroid Build Coastguard Worker }
246*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,CRCHashAssert)247*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, CRCHashAssert) {
248*86ee64e7SAndroid Build Coastguard Worker // The CRC32c of the hex sequences ff,ff,5e,6f and ff,ff,13,ff have the same
249*86ee64e7SAndroid Build Coastguard Worker // lower 15 bits. This means longest_match's assert that match[2] == scan[2]
250*86ee64e7SAndroid Build Coastguard Worker // won't hold. However, such hash collisions are only possible when one of the
251*86ee64e7SAndroid Build Coastguard Worker // other four bytes also mismatch. This tests that zlib's assert handles this
252*86ee64e7SAndroid Build Coastguard Worker // case.
253*86ee64e7SAndroid Build Coastguard Worker
254*86ee64e7SAndroid Build Coastguard Worker std::vector<uint8_t> src = {
255*86ee64e7SAndroid Build Coastguard Worker // Random byte; zlib doesn't match at offset 0.
256*86ee64e7SAndroid Build Coastguard Worker 123,
257*86ee64e7SAndroid Build Coastguard Worker
258*86ee64e7SAndroid Build Coastguard Worker // This has the same hash as the last byte sequence, and the first two and
259*86ee64e7SAndroid Build Coastguard Worker // last two bytes match; though the third and the fourth don't.
260*86ee64e7SAndroid Build Coastguard Worker 0xff,
261*86ee64e7SAndroid Build Coastguard Worker 0xff,
262*86ee64e7SAndroid Build Coastguard Worker 0x5e,
263*86ee64e7SAndroid Build Coastguard Worker 0x6f,
264*86ee64e7SAndroid Build Coastguard Worker 0x12,
265*86ee64e7SAndroid Build Coastguard Worker 0x34,
266*86ee64e7SAndroid Build Coastguard Worker
267*86ee64e7SAndroid Build Coastguard Worker // Offer a 5-byte match to bump the next expected match length to 6
268*86ee64e7SAndroid Build Coastguard Worker // (because the two first and two last bytes need to match).
269*86ee64e7SAndroid Build Coastguard Worker 0xff,
270*86ee64e7SAndroid Build Coastguard Worker 0xff,
271*86ee64e7SAndroid Build Coastguard Worker 0x13,
272*86ee64e7SAndroid Build Coastguard Worker 0xff,
273*86ee64e7SAndroid Build Coastguard Worker 0x12,
274*86ee64e7SAndroid Build Coastguard Worker
275*86ee64e7SAndroid Build Coastguard Worker 0xff,
276*86ee64e7SAndroid Build Coastguard Worker 0xff,
277*86ee64e7SAndroid Build Coastguard Worker 0x13,
278*86ee64e7SAndroid Build Coastguard Worker 0xff,
279*86ee64e7SAndroid Build Coastguard Worker 0x12,
280*86ee64e7SAndroid Build Coastguard Worker 0x34,
281*86ee64e7SAndroid Build Coastguard Worker };
282*86ee64e7SAndroid Build Coastguard Worker
283*86ee64e7SAndroid Build Coastguard Worker z_stream stream;
284*86ee64e7SAndroid Build Coastguard Worker stream.zalloc = nullptr;
285*86ee64e7SAndroid Build Coastguard Worker stream.zfree = nullptr;
286*86ee64e7SAndroid Build Coastguard Worker
287*86ee64e7SAndroid Build Coastguard Worker int ret = deflateInit2(&stream, /*comp level*/ 5, /*method*/ Z_DEFLATED,
288*86ee64e7SAndroid Build Coastguard Worker /*windowbits*/ -15, /*memlevel*/ 8,
289*86ee64e7SAndroid Build Coastguard Worker /*strategy*/ Z_DEFAULT_STRATEGY);
290*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
291*86ee64e7SAndroid Build Coastguard Worker std::vector<uint8_t> compressed(100, '\0');
292*86ee64e7SAndroid Build Coastguard Worker stream.next_out = compressed.data();
293*86ee64e7SAndroid Build Coastguard Worker stream.avail_out = compressed.size();
294*86ee64e7SAndroid Build Coastguard Worker stream.next_in = src.data();
295*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = src.size();
296*86ee64e7SAndroid Build Coastguard Worker ret = deflate(&stream, Z_FINISH);
297*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_STREAM_END);
298*86ee64e7SAndroid Build Coastguard Worker compressed.resize(compressed.size() - stream.avail_out);
299*86ee64e7SAndroid Build Coastguard Worker deflateEnd(&stream);
300*86ee64e7SAndroid Build Coastguard Worker
301*86ee64e7SAndroid Build Coastguard Worker ret = inflateInit2(&stream, /*windowbits*/ -15);
302*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
303*86ee64e7SAndroid Build Coastguard Worker std::vector<uint8_t> decompressed(src.size(), '\0');
304*86ee64e7SAndroid Build Coastguard Worker stream.next_in = compressed.data();
305*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = compressed.size();
306*86ee64e7SAndroid Build Coastguard Worker stream.next_out = decompressed.data();
307*86ee64e7SAndroid Build Coastguard Worker stream.avail_out = decompressed.size();
308*86ee64e7SAndroid Build Coastguard Worker ret = inflate(&stream, Z_FINISH);
309*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_STREAM_END);
310*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(0U, stream.avail_out);
311*86ee64e7SAndroid Build Coastguard Worker inflateEnd(&stream);
312*86ee64e7SAndroid Build Coastguard Worker
313*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(src, decompressed);
314*86ee64e7SAndroid Build Coastguard Worker }
315*86ee64e7SAndroid Build Coastguard Worker
316*86ee64e7SAndroid Build Coastguard Worker // Fuzzer generated.
317*86ee64e7SAndroid Build Coastguard Worker static const uint8_t checkMatchCrashData[] = {
318*86ee64e7SAndroid Build Coastguard Worker 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00,
319*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
320*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
321*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
322*86ee64e7SAndroid Build Coastguard Worker 0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x01, 0x39, 0x6e, 0x6e,
323*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0xf7, 0xff, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e,
324*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x0a, 0x9a, 0x00, 0x00, 0x6e, 0x6e, 0x6e, 0x2a, 0x00, 0x00,
325*86ee64e7SAndroid Build Coastguard Worker 0x00, 0xd5, 0xf0, 0x00, 0x81, 0x02, 0xf3, 0xfd, 0xff, 0xab, 0xf3, 0x6e,
326*86ee64e7SAndroid Build Coastguard Worker 0x7e, 0x04, 0x5b, 0xf6, 0x2a, 0x2c, 0xf8, 0x00, 0x54, 0xf3, 0xa5, 0x0e,
327*86ee64e7SAndroid Build Coastguard Worker 0xfd, 0x6e, 0xff, 0x00, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
328*86ee64e7SAndroid Build Coastguard Worker 0x00, 0xa4, 0x0b, 0xa5, 0x2a, 0x0d, 0x10, 0x01, 0x26, 0xf6, 0x04, 0x0e,
329*86ee64e7SAndroid Build Coastguard Worker 0xff, 0x6e, 0x6e, 0x6e, 0x76, 0x00, 0x00, 0x87, 0x01, 0xfe, 0x0d, 0xb6,
330*86ee64e7SAndroid Build Coastguard Worker 0x6e, 0x6e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
331*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0xfd, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x9b,
332*86ee64e7SAndroid Build Coastguard Worker 0x02, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
333*86ee64e7SAndroid Build Coastguard Worker 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x6e, 0xff, 0xff, 0x00,
334*86ee64e7SAndroid Build Coastguard Worker 0x00, 0xd5, 0xf0, 0x00, 0xff, 0x40, 0x7e, 0x0b, 0xa5, 0x10, 0x67, 0x01,
335*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00,
336*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,
337*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x40, 0x7e, 0x0b, 0xa5, 0x10, 0x67,
338*86ee64e7SAndroid Build Coastguard Worker 0x7e, 0x32, 0x6e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x40, 0x0b, 0xa5,
339*86ee64e7SAndroid Build Coastguard Worker 0x10, 0x67, 0x01, 0xfe, 0x0d, 0xb6, 0x2a, 0x00, 0x00, 0x58, 0x00, 0x00,
340*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x6e, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
341*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x3d, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00,
342*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0xd6, 0x2d, 0x2d, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
343*86ee64e7SAndroid Build Coastguard Worker 0x8a, 0x8a, 0x8a, 0x8a, 0x66, 0x8a, 0x8a, 0x8a, 0xee, 0x1d, 0x00, 0x00,
344*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x02, 0x00, 0x00, 0x00, 0xee, 0x0a, 0x00, 0x00, 0x00, 0x54, 0x40,
345*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
346*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
347*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0xff, 0xff, 0x23, 0x7e, 0x00, 0x1e,
348*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0xd5, 0xf0, 0x00, 0xff, 0x40, 0x0b, 0xa5, 0x10, 0x67, 0x01,
349*86ee64e7SAndroid Build Coastguard Worker 0xfe, 0x0d, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
350*86ee64e7SAndroid Build Coastguard Worker 0x8a, 0x8a, 0x8a, 0x2d, 0x6e, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0e,
351*86ee64e7SAndroid Build Coastguard Worker 0xfb, 0x00, 0x10, 0x24, 0x00, 0x00, 0xfb, 0xff, 0x00, 0x00, 0xff, 0x1f,
352*86ee64e7SAndroid Build Coastguard Worker 0xb3, 0x00, 0x04, 0x3d, 0x00, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
353*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00,
354*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
355*86ee64e7SAndroid Build Coastguard Worker 0x01, 0x45, 0x3d, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x11, 0x21, 0x00, 0x1e,
356*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x0c, 0xb3, 0xfe, 0x0e, 0xee, 0x02, 0x00, 0x1d, 0x00, 0x00, 0x00,
357*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x6e, 0x00,
358*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x87, 0x00, 0x33, 0x38, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x00, 0x00,
359*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x38, 0x00, 0x00, 0xff, 0xff, 0xff, 0x04, 0x3f, 0xff, 0xff, 0xff,
360*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0xff, 0x00, 0x31, 0x13, 0x13, 0x13,
361*86ee64e7SAndroid Build Coastguard Worker 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0x30, 0x83, 0x33,
362*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xff, 0xff, 0x7d, 0xff, 0x00, 0x01,
363*86ee64e7SAndroid Build Coastguard Worker 0x10, 0x0d, 0x2a, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x11,
364*86ee64e7SAndroid Build Coastguard Worker 0x21, 0x00, 0xa5, 0x00, 0x68, 0x68, 0x68, 0x67, 0x00, 0x00, 0xff, 0xff,
365*86ee64e7SAndroid Build Coastguard Worker 0x02, 0x00, 0x00, 0x68, 0x68, 0x68, 0x68, 0x00, 0x00, 0xfa, 0xff, 0xff,
366*86ee64e7SAndroid Build Coastguard Worker 0x03, 0x01, 0xff, 0x02, 0x00, 0x00, 0x68, 0x68, 0x68, 0x68, 0x0a, 0x10,
367*86ee64e7SAndroid Build Coastguard Worker 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
368*86ee64e7SAndroid Build Coastguard Worker 0x06, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
369*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0xfa, 0xff, 0xff, 0x08, 0xff, 0xff, 0xff, 0x00, 0x06, 0x04,
370*86ee64e7SAndroid Build Coastguard Worker 0x00, 0xf8, 0xff, 0xff, 0x00, 0x01, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
371*86ee64e7SAndroid Build Coastguard Worker 0x00, 0xff, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
372*86ee64e7SAndroid Build Coastguard Worker 0x78, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0x06, 0x04, 0x6e,
373*86ee64e7SAndroid Build Coastguard Worker 0x7e, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00,
374*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x6e, 0x6e, 0x6e,
375*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x01, 0x38, 0xd5, 0xf0, 0x00, 0x00, 0x2a, 0xfe, 0x04, 0x5b, 0x0d,
376*86ee64e7SAndroid Build Coastguard Worker 0xfd, 0x6e, 0x92, 0x28, 0xf9, 0xfb, 0xff, 0x07, 0xd2, 0xd6, 0x2d, 0x2d,
377*86ee64e7SAndroid Build Coastguard Worker 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
378*86ee64e7SAndroid Build Coastguard Worker 0x8a, 0x8a, 0xc2, 0x91, 0x00, 0x5b, 0xef, 0xde, 0xf2, 0x6e, 0x6e, 0xfd,
379*86ee64e7SAndroid Build Coastguard Worker 0x0c, 0x02, 0x91, 0x62, 0x91, 0xfd, 0x6e, 0x6e, 0xd3, 0x06, 0x00, 0x00,
380*86ee64e7SAndroid Build Coastguard Worker 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00,
381*86ee64e7SAndroid Build Coastguard Worker 0xd5, 0xf0, 0x00, 0xff, 0x00, 0x00, 0x31, 0x13, 0x13, 0x13, 0x04, 0x00,
382*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x04, 0x00, 0x13, 0x0a, 0x00, 0x00,
383*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x6e, 0x00, 0x00, 0x01,
384*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x09, 0x00, 0x6a, 0x24, 0x26, 0x30, 0x01, 0x2e, 0x2a, 0xfe,
385*86ee64e7SAndroid Build Coastguard Worker 0x04, 0x5b, 0x0d, 0xfd, 0x6e, 0x6e, 0xd7, 0x06, 0x6e, 0x6e, 0x6e, 0x00,
386*86ee64e7SAndroid Build Coastguard Worker 0x00, 0xb1, 0xb1, 0xb1, 0xb1, 0x00, 0x00, 0x00, 0x6e, 0x5b, 0x00, 0x00,
387*86ee64e7SAndroid Build Coastguard Worker 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
388*86ee64e7SAndroid Build Coastguard Worker 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
389*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
390*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
391*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
392*86ee64e7SAndroid Build Coastguard Worker 0x1e, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
393*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00,
394*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
395*86ee64e7SAndroid Build Coastguard Worker 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
396*86ee64e7SAndroid Build Coastguard Worker 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
397*86ee64e7SAndroid Build Coastguard Worker 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x0b,
398*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x24, 0x2a, 0x6e, 0x5c, 0x24,
399*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
400*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb,
401*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
402*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
403*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
404*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
405*86ee64e7SAndroid Build Coastguard Worker 0x05, 0x00, 0x00, 0x00, 0x5d, 0x10, 0x6e, 0x6e, 0xa5, 0x2f, 0x00, 0x00,
406*86ee64e7SAndroid Build Coastguard Worker 0x95, 0x87, 0x00, 0x6e};
407*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,CheckMatchCrash)408*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, CheckMatchCrash) {
409*86ee64e7SAndroid Build Coastguard Worker // See https://crbug.com/1113142.
410*86ee64e7SAndroid Build Coastguard Worker z_stream stream;
411*86ee64e7SAndroid Build Coastguard Worker stream.zalloc = nullptr;
412*86ee64e7SAndroid Build Coastguard Worker stream.zfree = nullptr;
413*86ee64e7SAndroid Build Coastguard Worker
414*86ee64e7SAndroid Build Coastguard Worker // Low windowbits to hit window sliding also with a relatively small input.
415*86ee64e7SAndroid Build Coastguard Worker int ret = deflateInit2(&stream, /*comp level*/ 5, /*method*/ Z_DEFLATED,
416*86ee64e7SAndroid Build Coastguard Worker /*windowbits*/ -9, /*memlevel*/ 8,
417*86ee64e7SAndroid Build Coastguard Worker /*strategy*/ Z_DEFAULT_STRATEGY);
418*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
419*86ee64e7SAndroid Build Coastguard Worker
420*86ee64e7SAndroid Build Coastguard Worker uint8_t compressed[sizeof(checkMatchCrashData) * 2];
421*86ee64e7SAndroid Build Coastguard Worker stream.next_out = compressed;
422*86ee64e7SAndroid Build Coastguard Worker stream.avail_out = sizeof(compressed);
423*86ee64e7SAndroid Build Coastguard Worker
424*86ee64e7SAndroid Build Coastguard Worker for (size_t i = 0; i < sizeof(checkMatchCrashData); i++) {
425*86ee64e7SAndroid Build Coastguard Worker ASSERT_GT(stream.avail_out, 0U);
426*86ee64e7SAndroid Build Coastguard Worker stream.next_in = (uint8_t*)&checkMatchCrashData[i];
427*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = 1;
428*86ee64e7SAndroid Build Coastguard Worker ret = deflate(&stream, Z_NO_FLUSH);
429*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
430*86ee64e7SAndroid Build Coastguard Worker }
431*86ee64e7SAndroid Build Coastguard Worker
432*86ee64e7SAndroid Build Coastguard Worker stream.next_in = nullptr;
433*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = 0;
434*86ee64e7SAndroid Build Coastguard Worker ASSERT_GT(stream.avail_out, 0U);
435*86ee64e7SAndroid Build Coastguard Worker ret = deflate(&stream, Z_FINISH);
436*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_STREAM_END);
437*86ee64e7SAndroid Build Coastguard Worker size_t compressed_sz = sizeof(compressed) - stream.avail_out;
438*86ee64e7SAndroid Build Coastguard Worker deflateEnd(&stream);
439*86ee64e7SAndroid Build Coastguard Worker
440*86ee64e7SAndroid Build Coastguard Worker uint8_t decompressed[sizeof(checkMatchCrashData)];
441*86ee64e7SAndroid Build Coastguard Worker ret = inflateInit2(&stream, -15);
442*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
443*86ee64e7SAndroid Build Coastguard Worker stream.next_in = compressed;
444*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = compressed_sz;
445*86ee64e7SAndroid Build Coastguard Worker stream.next_out = decompressed;
446*86ee64e7SAndroid Build Coastguard Worker stream.avail_out = sizeof(decompressed);
447*86ee64e7SAndroid Build Coastguard Worker ret = inflate(&stream, Z_FINISH);
448*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_STREAM_END);
449*86ee64e7SAndroid Build Coastguard Worker inflateEnd(&stream);
450*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(
451*86ee64e7SAndroid Build Coastguard Worker memcmp(checkMatchCrashData, decompressed, sizeof(checkMatchCrashData)),
452*86ee64e7SAndroid Build Coastguard Worker 0);
453*86ee64e7SAndroid Build Coastguard Worker }
454*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,DeflateRLEUninitUse)455*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, DeflateRLEUninitUse) {
456*86ee64e7SAndroid Build Coastguard Worker // MSan would complain about use of uninitialized values in deflate_rle if the
457*86ee64e7SAndroid Build Coastguard Worker // window isn't zero-initialized. See crbug.com/1137613. Similar problems
458*86ee64e7SAndroid Build Coastguard Worker // exist in other places in zlib, e.g. longest_match (crbug.com/1144420) but
459*86ee64e7SAndroid Build Coastguard Worker // we don't have as nice test cases.
460*86ee64e7SAndroid Build Coastguard Worker
461*86ee64e7SAndroid Build Coastguard Worker int level = 9;
462*86ee64e7SAndroid Build Coastguard Worker int windowBits = 9;
463*86ee64e7SAndroid Build Coastguard Worker int memLevel = 8;
464*86ee64e7SAndroid Build Coastguard Worker int strategy = Z_RLE;
465*86ee64e7SAndroid Build Coastguard Worker const std::vector<uint8_t> src{
466*86ee64e7SAndroid Build Coastguard Worker 0x31, 0x64, 0x38, 0x32, 0x30, 0x32, 0x30, 0x36, 0x65, 0x35, 0x38, 0x35,
467*86ee64e7SAndroid Build Coastguard Worker 0x32, 0x61, 0x30, 0x36, 0x65, 0x35, 0x32, 0x66, 0x30, 0x34, 0x38, 0x37,
468*86ee64e7SAndroid Build Coastguard Worker 0x61, 0x31, 0x38, 0x36, 0x37, 0x37, 0x31, 0x39, 0x0a, 0x65, 0x62, 0x00,
469*86ee64e7SAndroid Build Coastguard Worker 0x9f, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0x09, 0x00, 0x62, 0x00, 0x9f, 0xff,
470*86ee64e7SAndroid Build Coastguard Worker 0xc6, 0xc6, 0xc6, 0xff, 0x09, 0x00, 0x62, 0x00, 0x9f, 0xff, 0xc6, 0xc6,
471*86ee64e7SAndroid Build Coastguard Worker 0xc6, 0xff, 0x09, 0x00, 0x62, 0x00, 0x9f, 0xff, 0xc6, 0xc6, 0xc6, 0x95,
472*86ee64e7SAndroid Build Coastguard Worker 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0e, 0x0a, 0x54, 0x52,
473*86ee64e7SAndroid Build Coastguard Worker 0x58, 0x56, 0xab, 0x26, 0x13, 0x53, 0x5a, 0xb5, 0x30, 0xbb, 0x96, 0x44,
474*86ee64e7SAndroid Build Coastguard Worker 0x80, 0xe6, 0xc5, 0x0a, 0xd0, 0x47, 0x7a, 0xa0, 0x4e, 0xbe, 0x30, 0xdc,
475*86ee64e7SAndroid Build Coastguard Worker 0xa1, 0x08, 0x54, 0xe1, 0x51, 0xd1, 0xea, 0xef, 0xdb, 0xa1, 0x2d, 0xb4,
476*86ee64e7SAndroid Build Coastguard Worker 0xb9, 0x58, 0xb1, 0x2f, 0xf0, 0xae, 0xbc, 0x07, 0xd1, 0xba, 0x7f, 0x14,
477*86ee64e7SAndroid Build Coastguard Worker 0xa4, 0xde, 0x99, 0x7f, 0x4d, 0x3e, 0x25, 0xd9, 0xef, 0xee, 0x4f, 0x38,
478*86ee64e7SAndroid Build Coastguard Worker 0x7b, 0xaf, 0x3f, 0x6b, 0x53, 0x5a, 0xcb, 0x1f, 0x97, 0xb5, 0x43, 0xa3,
479*86ee64e7SAndroid Build Coastguard Worker 0xe8, 0xff, 0x09, 0x00, 0x62, 0x00, 0x9f, 0xff, 0xc6, 0xc6, 0xc6, 0xff,
480*86ee64e7SAndroid Build Coastguard Worker 0x09, 0x00, 0x62, 0x00, 0x9f, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0x09, 0x00,
481*86ee64e7SAndroid Build Coastguard Worker 0x62, 0x00, 0x9f, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0x09, 0x00, 0x62, 0x00,
482*86ee64e7SAndroid Build Coastguard Worker 0x9f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
483*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
484*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
485*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
486*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
487*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
488*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
489*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
490*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
491*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
492*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
493*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
494*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
495*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
496*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
497*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
498*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
499*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
500*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
501*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
502*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
503*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3c,
504*86ee64e7SAndroid Build Coastguard Worker 0x73, 0x70, 0x23, 0x87, 0xec, 0xf8, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
505*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
506*86ee64e7SAndroid Build Coastguard Worker 0xc1, 0x00, 0x00, 0x9f, 0xc6, 0xc6, 0xff, 0x09, 0x00, 0x62, 0x00, 0x9f,
507*86ee64e7SAndroid Build Coastguard Worker 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0x09, 0x00, 0x62, 0x00, 0x9f, 0xff, 0x00,
508*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
509*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
510*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
511*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
512*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
513*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
514*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
515*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
516*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
517*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
518*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
519*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
520*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
521*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
522*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
523*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
524*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
525*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
526*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
527*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
528*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
529*86ee64e7SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
530*86ee64e7SAndroid Build Coastguard Worker };
531*86ee64e7SAndroid Build Coastguard Worker
532*86ee64e7SAndroid Build Coastguard Worker z_stream stream;
533*86ee64e7SAndroid Build Coastguard Worker stream.zalloc = Z_NULL;
534*86ee64e7SAndroid Build Coastguard Worker stream.zfree = Z_NULL;
535*86ee64e7SAndroid Build Coastguard Worker
536*86ee64e7SAndroid Build Coastguard Worker // Compress the data one byte at a time to exercise the streaming code.
537*86ee64e7SAndroid Build Coastguard Worker int ret =
538*86ee64e7SAndroid Build Coastguard Worker deflateInit2(&stream, level, Z_DEFLATED, windowBits, memLevel, strategy);
539*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
540*86ee64e7SAndroid Build Coastguard Worker std::vector<uint8_t> compressed(src.size() * 2 + 1000);
541*86ee64e7SAndroid Build Coastguard Worker stream.next_out = compressed.data();
542*86ee64e7SAndroid Build Coastguard Worker stream.avail_out = compressed.size();
543*86ee64e7SAndroid Build Coastguard Worker for (uint8_t b : src) {
544*86ee64e7SAndroid Build Coastguard Worker stream.next_in = &b;
545*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = 1;
546*86ee64e7SAndroid Build Coastguard Worker ret = deflate(&stream, Z_NO_FLUSH);
547*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
548*86ee64e7SAndroid Build Coastguard Worker }
549*86ee64e7SAndroid Build Coastguard Worker stream.next_in = Z_NULL;
550*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = 0;
551*86ee64e7SAndroid Build Coastguard Worker ret = deflate(&stream, Z_FINISH);
552*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_STREAM_END);
553*86ee64e7SAndroid Build Coastguard Worker deflateEnd(&stream);
554*86ee64e7SAndroid Build Coastguard Worker }
555*86ee64e7SAndroid Build Coastguard Worker
556*86ee64e7SAndroid Build Coastguard Worker static const char zFixedCorruptionData[] =
557*86ee64e7SAndroid Build Coastguard Worker "AAABAACAADAAEAAFAAGAAHAAIAAJAAKAALAAMAANAAOAAPAAQAARAASAATAAUAAVAAWAAXAAYA"
558*86ee64e7SAndroid Build Coastguard Worker "AZABBABCABDABEABFABGABHABIABJABKABLABMABNABOABPABQABRABSABTABUABVABWABXABY"
559*86ee64e7SAndroid Build Coastguard Worker "ABZACBACCACDACEACFACGACHACIACJACKACLACMACNACOACPACQACRACSACTACUACVACWACXAC"
560*86ee64e7SAndroid Build Coastguard Worker "YACZADBADCADDADEADFADGADHADIADJADKADLADMADNADOADPADQADRADSADTADUADVADWADXA"
561*86ee64e7SAndroid Build Coastguard Worker "DYADZAEBAECAEDAEEAEFAEGAEHAEIAEJAEKAELAEMAENAEOAEPAEQAERAESAETAEUAEVAEWAEX"
562*86ee64e7SAndroid Build Coastguard Worker "AEYAEZAFBAFCAFDAFEAFFAFGAFHAFIAFJAFKAFLAFMAFNAFOAFPAFQAFRAFSAFTAFUAFVAFWAF"
563*86ee64e7SAndroid Build Coastguard Worker "XAFYAFZAGBAGCAGDAGEAGFAGGAGHAGIAGJAGKAGLAGMAGNAGOAGPAGQAGRAGSAGTAGUAGVAGWA"
564*86ee64e7SAndroid Build Coastguard Worker "GXAGYAGZAHBAHCAHDAHEAHFAHGAHHAHIAHJAHKAHLAHMAHNAHOAHPAHQAHRAHSAHTAHUAHVAHW"
565*86ee64e7SAndroid Build Coastguard Worker "AHXAHYAHZAIBAICAIDAIEAIFAIGAIHAIIAIJAIKAILAIMAINAIOAIPAIQAIRAISAITAIUAIVAI"
566*86ee64e7SAndroid Build Coastguard Worker "WAIXAIYAIZAJBAJCAJDAJEAJFAJGAJHAJIAJJAJKAJLAJMAJNAJOAJPAJQAJRAJSAJTAJUAJVA"
567*86ee64e7SAndroid Build Coastguard Worker "JWAJXAJYAJZAKBAKCAKDAKEAKFAKGAKHAKIAKJAKKAKLAKMAKNAKOAKPAKQAKRAKSAKTAKUAKV"
568*86ee64e7SAndroid Build Coastguard Worker "AKWAKXAKYAKZALBALCALDALEALFALGALHALIALJALKALLALMALNALOALPALQALRALSALTALUAL"
569*86ee64e7SAndroid Build Coastguard Worker "VALWALXALYALZAMBAMCAMDAMEAMFAMGAMHAMIAMJAMKAMLAMMAMNAMOAMPAMQAMRAMSAMTAMUA"
570*86ee64e7SAndroid Build Coastguard Worker "MVAMWAMXAMYAMZANBANCANDANEANFANGANHANIANJANKANLANMANNANOANPANQANRANSANTANU"
571*86ee64e7SAndroid Build Coastguard Worker "ANVANWANXANYANZAOBAOCAODAOEAOFAOGAOHAOIAOJAOKAOLAOMAONAOOAOPAOQAORAOSAOTAO"
572*86ee64e7SAndroid Build Coastguard Worker "UAOVAOWAOXAOYAOZAPBAPCAPDAPEAPFAPGAPHAPIAPJAPKAPLAPMAPNAPOAPPAPQAPRAPSAPTA"
573*86ee64e7SAndroid Build Coastguard Worker "PUAPVAPWAPXAPYAPZAQBAQCAQDAQEAQFAQGAQHAQIAQJAQKAQLAQMAQNAQOAQPAQQAQRAQSAQT"
574*86ee64e7SAndroid Build Coastguard Worker "AQUAQVAQWAQXAQYAQZARBARCARDAREARFARGARHARIARJARKARLARMARNAROARPARQARRARSAR"
575*86ee64e7SAndroid Build Coastguard Worker "TARUARVARWARXARYARZASBASCASDASEASFASGASHASIASJASKASLASMASNASOASPASQASRASSA"
576*86ee64e7SAndroid Build Coastguard Worker "STASUASVASWASXASYASZATBATCATDATEATFATGATHATIATJATKATLATMATNATOATPATQATRATS"
577*86ee64e7SAndroid Build Coastguard Worker "ATTATUATVATWATXATYATZAUBAUCAUDAUEAUFAUGAUHAUIAUJAUKAULAUMAUNAUOAUPAUQAURAU"
578*86ee64e7SAndroid Build Coastguard Worker "SAUTAUUAUVAUWAUXAUYAUZAVBAVCAVDAVEAVFAVGAVHAVIAVJAVKAVLAVMAVNAVOAVPAVQAVRA"
579*86ee64e7SAndroid Build Coastguard Worker "VSAVTAVUAVVAVWAVXAVYAVZAWBAWCAWDAWEAWFAWGAWHAWIAWJAWKAWLAWMAWNAWOAWPAWQAWR"
580*86ee64e7SAndroid Build Coastguard Worker "AWSAWTAWUAWVAWWAWXAWYAWZAXBAXCAXDAXEAXFAXGAXHAXIAXJAXKAXLAXMAXNAXOAXPAXQAX"
581*86ee64e7SAndroid Build Coastguard Worker "RAXSAXTAXUAXVAXWAXXAXYAXZAYBAYCAYDAYEAYFAYGAYHAYIAYJAYKAYLAYMAYNAYOAYPAYQA"
582*86ee64e7SAndroid Build Coastguard Worker "YRAYSAYTAYUAYVAYWAYXAYYAYZAZBAZCAZDAZEAZFAZGAZHAZIAZJAZKAZLAZMAZNAZOAZPAZQ"
583*86ee64e7SAndroid Build Coastguard Worker "AZRAZSAZTAZUAZVAZWAZXAZYAZZBBBCBBDBBEBBFBBGBBHBBIBBJBBKBBLBBMBBNBBOBBPBBQB"
584*86ee64e7SAndroid Build Coastguard Worker "BRBBSBBTBBUBBVBBWBBXBBYBBZBCCBCDBCEBCFBCGBCHBCIBCJBCKBCLBCMBCNBCOBCPBCQBCR"
585*86ee64e7SAndroid Build Coastguard Worker "BCSBCTBCUBCVBCWBCXBCYBCZBDCBDDBDEBDFBDGBDHBDIBDJBDKBDLBDMBDNBDOBDPBDQBDRBD"
586*86ee64e7SAndroid Build Coastguard Worker "SBDTBDUBDVBDWBDXBDYBDZBECBEDBEEBEFBEGBEHBEIBEJBEKBELBEMBENBEOBEPBEQBERBESB"
587*86ee64e7SAndroid Build Coastguard Worker "ETBEUBEVBEWBEXBEYBEZBFCBFDBFEBFFBFGBFHBFIBFJBFKBFLBFMBFNBFOBFPBFQBFRBFSBFT"
588*86ee64e7SAndroid Build Coastguard Worker "BFUBFVBFWBFXBFYBFZBGCBGDBGEBGFBGGBGHBGIBGJBGKBGLBGMBGNBGOBGPBGQBGRBGSBGTBG"
589*86ee64e7SAndroid Build Coastguard Worker "UBGVBGWBGXBGYBGZBHCBHDBHEBHFBHGBHHBHIBHJBHKBHLBHMBHNBHOBHPBHQBHRBHSBHTBHUB"
590*86ee64e7SAndroid Build Coastguard Worker "HVBHWBHXBHYBHZBICBIDBIEBIFBIGBIHBIIBIJBIKBILBIMBINBIOBIPBIQBIRBISBITBIUBIV"
591*86ee64e7SAndroid Build Coastguard Worker "BIWBIXBIYBIZBJCBJDBJEBJFBJGBJHBJIBJJBJKBJLBJMBJNBJOBJPBJQBJRBJSBJTBJUBJVBJ"
592*86ee64e7SAndroid Build Coastguard Worker "WBJXBJYBJZBKCBKDBKEBKFBKGBKHBKIBKJBKKBKLBKMBKNBKOBKPBKQBKRBKSBKTBKUBKVBKWB"
593*86ee64e7SAndroid Build Coastguard Worker "KXBKYBKZBLCBLDBLEBLFBLGBLHBLIBLJBLKBLLBLMBLNBLOBLPBLQBLRBLSBLTBLUBLVBLWBLX"
594*86ee64e7SAndroid Build Coastguard Worker "BLYBLZBMCBMDBMEBMFBMGBMHBMIBMJBMKBMLBMMBMNBMOBMPBMQBMRBMSBMTBMUBMVBMWBMXBM"
595*86ee64e7SAndroid Build Coastguard Worker "YBMZBNCBNDBNEBNFBNGBNHBNIBNJBNKBNLBNMBNNBNOBNPBNQBNRBNSBNTBNUBNVBNWBNXBNYB"
596*86ee64e7SAndroid Build Coastguard Worker "NZBOCBODBOEBOFBOGBOHBOIBOJBOKBOLBOMBONBOOBOPBOQBORBOSBOTBOUBOVBOWBOXBOYBOZ"
597*86ee64e7SAndroid Build Coastguard Worker "BPCBPDBPEBPFBPGBPHBPIBPJBPKBPLBPMBPNBPOBPPBPQBPRBPSBPTBPUBPVBPWBPXBPYBPZBQ"
598*86ee64e7SAndroid Build Coastguard Worker "CBQDBQEBQFBQGBQHBQIBQJBQKBQLBQMBQNBQOBQPBQQBQRBQSBQTBQUBQVBQWBQXBQYBQZBRCB"
599*86ee64e7SAndroid Build Coastguard Worker "RDBREBRFBRGBRHBRIBRJBRKBRLBRMBRNBROBRPBRQBRRBRSBRTBRUBRVBRWBRXBRYBRZBSCBSD"
600*86ee64e7SAndroid Build Coastguard Worker "BSEBSFBSGBSHBSIBSJBSKBSLBSMBSNBSOBSPBSQBSRBSSBSTBSUBSVBSWBSXBSYBSZBTCBTDBT"
601*86ee64e7SAndroid Build Coastguard Worker "EBTFBTGBTHBTIBTJBTKBTLBTMBTNBTOBTPBTQBTRBTSBTTBTUBTVBTWBTXBTYBTZBUCBUDBUEB"
602*86ee64e7SAndroid Build Coastguard Worker "UFBUGBUHBUIBUJBUKBULBUMBUNBUOBUPBUQBURBUSBUTBUUBUVBUWBUXBUYBUZBVCBVDBVEBVF"
603*86ee64e7SAndroid Build Coastguard Worker "BVGBVHBVIBVJBVKBVLBVMBVNBVOBVPBVQBVRBVSBVTBVUBVVBVWBVXBVYBVZBWCBWDBWEBWFBW"
604*86ee64e7SAndroid Build Coastguard Worker "GBWHBWIBWJBWKBWLBWMBWNBWOBWPBWQBWRBWSBWTBWUBWVBWWBWXBWYBWZBXCBXDBXEBXFBXGB"
605*86ee64e7SAndroid Build Coastguard Worker "XHBXIBXJBXKBXLBXMBXNBXOBXPBXQBXRBXSBXTBXUBXVBXWBXXBXYBXZBYCBYDBYEBYFBYGBYH"
606*86ee64e7SAndroid Build Coastguard Worker "BYIBYJBYKBYLBYMBYNBYOBYPBYQBYRBYSBYTBYUBYVBYWBYXBYYBYZBZCBZDBZEBZFBZGBZHBZ"
607*86ee64e7SAndroid Build Coastguard Worker "IBZJBZKBZLBZMBZNBZOBZPBZQBZRBZSBZTBZUBZVBZWBZXBZYBZZCCCDCCECCFCCGCCHCCICCJ"
608*86ee64e7SAndroid Build Coastguard Worker "CCKCCLCCMCCNCCOCCPCCQCCRCCSCCTCCUCCVCCWCCXCCYCCZCDDCDECDFCDGCDHCDICDJCDKCD"
609*86ee64e7SAndroid Build Coastguard Worker "LCDMCDNCDOCDPCDQCDRCDSCDTCDUCDVCDWCDXCDYCDZCEDCEECEFCEGCEHCEICEJCEKCELCEMC"
610*86ee64e7SAndroid Build Coastguard Worker "ENCEOCEPCEQCERCESCETCEUCEVCEWCEXCEYCEZCFDCFECFFCFGCFHCFICFJCFKCFLCFMCFNCFO"
611*86ee64e7SAndroid Build Coastguard Worker "CFPCFQCFRCFSCFTCFUCFVCFWCFXCFYCFZCGDCGECGFCGGCGHCGICGJCGKCGLCGMCGNCGOCGPCG"
612*86ee64e7SAndroid Build Coastguard Worker "QCGRCGSCGTCGUCGVCGWCGXCGYCGZCHDCHECHFCHGCHHCHICHJCHKCHLCHMCHNCHOCHPCHQCHRC"
613*86ee64e7SAndroid Build Coastguard Worker "HSCHTCHUCHVCHWCHXCHYCHZCIDCIECIFCIGCIHCIICIJCIKCILCIMCINCIOCIPCIQCIRCISCIT"
614*86ee64e7SAndroid Build Coastguard Worker "CIUCIVCIWCIXCIYCIZCJDCJECJFCJGCJHCJICJJCJKCJLCJMCJNCJOCJPCJQCJRCJSCJTCJUCJ"
615*86ee64e7SAndroid Build Coastguard Worker "VCJWCJXCJYCJZCKDCKECKFCKGCKHCKICKJCKKCKLCKMCKNCKOCKPCKQCKRCKSCKTCKUCKVCKWC"
616*86ee64e7SAndroid Build Coastguard Worker "KXCKYCKZCLDCLECLFCLGCLHCLICLJCLKCLLCLMCLNCLOCLPCLQCLRCLSCLTCLUCLVCLWCLXCLY"
617*86ee64e7SAndroid Build Coastguard Worker "CLZCMDCMECMFCMGCMHCMICMJCMKCMLCMMCMNCMOCMPCMQCMRCMSCMTCMUCMVCMWCMXCMYCMZCN"
618*86ee64e7SAndroid Build Coastguard Worker "DCNECNFCNGCNHCNICNJCNKCNLCNMCNNCNOCNPCNQCNRCNSCNTCNUCNVCNWCNXCNYCNZCODCOEC"
619*86ee64e7SAndroid Build Coastguard Worker "OFCOGCOHCOICOJCOKCOLCOMCONCOOCOPCOQCORCOSCOTCOUCOVCOWCOXCOYCOZCPDCPECPFCPG"
620*86ee64e7SAndroid Build Coastguard Worker "CPHCPICPJCPKCPLCPMCPNCPOCPPCPQCPRCPSCPTCPUCPVCPWCPXCPYCPZCQDCQECQFCQGCQHCQ"
621*86ee64e7SAndroid Build Coastguard Worker "ICQJCQKCQLCQMCQNCQOCQPCQQCQRCQSCQTCQUCQVCQWCQXCQYCQZCRDCRECRFCRGCRHCRICRJC"
622*86ee64e7SAndroid Build Coastguard Worker "RKCRLCRMCRNCROCRPCRQCRRCRSCRTCRUCRVCRWCRXCRYCRZCSDCSECSFCSGCSHCSICSJCSKCSL"
623*86ee64e7SAndroid Build Coastguard Worker "CSMCSNCSOCSPCSQCSRCSSCSTCSUCSVCSWCSXCSYCSZCTDCTECTFCTGCTHCTICTJCTKCTLCTMCT"
624*86ee64e7SAndroid Build Coastguard Worker "NCTOCTPCTQCTRCTSCTTCTUCTVCTWCTXCTYCTZCUDCUECUFCUGCUHCUICUJCUKCULCUMCUNCUOC"
625*86ee64e7SAndroid Build Coastguard Worker "UPCUQCURCUSCUTCUUCUVCUWCUXCUYCUZCVDCVECVFCVGCVHCVICVJCVKCVLCVMCVNCVOCVPCVQ"
626*86ee64e7SAndroid Build Coastguard Worker "CVRCVSCVTCVUCVVCVWCVXCVYCVZCWDCWECWFCWGCWHCWICWJCWKCWLCWMCWNCWOCWPCWQCWRCW"
627*86ee64e7SAndroid Build Coastguard Worker "SCWTCWUCWVCWWCWXCWYCWZCXDCXECXFCXGCXHCXICXJCXKCXLCXMCXNCXOCXPCXQCXRCXSCXTC"
628*86ee64e7SAndroid Build Coastguard Worker "XUCXVCXWCXXCXYCXZCYDCYECYFCYGCYHCYICYJCYKCYLCYMCYNCYOCYPCYQCYRCYSCYTCYUCYV"
629*86ee64e7SAndroid Build Coastguard Worker "CYWCYXCYYCYZCZDCZECZFCZGCZHCZICZJCZKCZLCZMCZNCZOCZPCZQCZRCZSCZTCZUCZVCZWCZ"
630*86ee64e7SAndroid Build Coastguard Worker "XCZYCZZDDDEDDFDDGDDHDDIDDJDDKDDLDDMDDNDDODDPDDQDDRDDSDDTDDUDDVDDWDDXDDYDDZ"
631*86ee64e7SAndroid Build Coastguard Worker "DEEDEFDEGDEHDEIDEJDEKDELDEMDENDEODEPDEQDERDESDETDEUDEVDEWDEXDEYDEZDFEDFFDF"
632*86ee64e7SAndroid Build Coastguard Worker "GDFHDFIDFJDFKDFLDFMDFNDFODFPDFQDFRDFSDFTDFUDFVDFWDFXDFYDFZDGEDGFDGGDGHDGID"
633*86ee64e7SAndroid Build Coastguard Worker "GJDGKDGLDGMDGNDGODGPDGQDGRDGSDGTDGUDGVDGWDGXDGYDGZDHEDHFDHGDHHDHIDHJDHKDHL"
634*86ee64e7SAndroid Build Coastguard Worker "DHMDHNDHODHPDHQDHRDHSDHTDHUDHVDHWDHXDHYDHZDIEDIFDIGDIHDIIDIJDIKDILDIMDINDI"
635*86ee64e7SAndroid Build Coastguard Worker "ODIPDIQDIRDISDITDIUDIVDIWDIXDIYDIZDJEDJFDJGDJHDJIDJJDJKDJLDJMDJNDJODJPDJQD"
636*86ee64e7SAndroid Build Coastguard Worker "JRDJSDJTDJUDJVDJWDJXDJYDJZDKEDKFDKGDKHDKIDKJDKKDKLDKMDKNDKODKPDKQDKRDKSDKT"
637*86ee64e7SAndroid Build Coastguard Worker "DKUDKVDKWDKXDKYDKZDLEDLFDLGDLHDLIDLJDLKDLLDLMDLNDLODLPDLQDLRDLSDLTDLUDLVDL"
638*86ee64e7SAndroid Build Coastguard Worker "WDLXDLYDLZDMEDMFDMGDMHDMIDMJDMKDMLDMMDMNDMODMPDMQDMRDMSDMTDMUDMVDMWDMXDMYD"
639*86ee64e7SAndroid Build Coastguard Worker "MZDNEDNFDNGDNHDNIDNJDNKDNLDNMDNNDNODNPDNQDNRDNSDNTDNUDNVDNWDNXDNYDNZDOEDOF"
640*86ee64e7SAndroid Build Coastguard Worker "DOGDOHDOIDOJDOKDOLDOMDONDOODOPDOQDORDOSDOTDOUDOVDOWDOXDOYDOZDPEDPFDPGDPHDP"
641*86ee64e7SAndroid Build Coastguard Worker "IDPJDPKDPLDPMDPNDPODPPDPQDPRDPSDPTDPUDPVDPWDPXDPYDPZDQEDQFDQGDQHDQIDQJDQKD"
642*86ee64e7SAndroid Build Coastguard Worker "QLDQMDQNDQODQPDQQDQRDQSDQTDQUDQVDQWDQXDQYDQZDREDRFDRGDRHDRIDRJDRKDRLDRMDRN"
643*86ee64e7SAndroid Build Coastguard Worker "DRODRPDRQDRRDRSDRTDRUDRVDRWDRXDRYDRZDSEDSFDSGDSHDSIDSJDSKDSLDSMDSNDSODSPDS"
644*86ee64e7SAndroid Build Coastguard Worker "QDSRDSSDSTDSUDSVDSWDSXDSYDSZDTEDTFDTGDTHDTIDTJDTKDTLDTMDTNDTODTPDTQDTRDTSD"
645*86ee64e7SAndroid Build Coastguard Worker "TTDTUDTVDTWDTXDTYDTZDUEDUFDUGDUHDUIDUJDUKDULDUMDUNDUODUPDUQDURDUSDUTDUUDUV"
646*86ee64e7SAndroid Build Coastguard Worker "DUWDUXDUYDUZDVEDVFDVGDVHDVIDVJDVKDVLDVMDVNDVODVPDVQDVRDVSDVTDVUDVVDVWDVXDV"
647*86ee64e7SAndroid Build Coastguard Worker "YDVZDWEDWFDWGDWHDWIDWJDWKDWLDWMDWNDWODWPDWQDWRDWSDWTDWUDWVDWWDWXDWYDWZDXED"
648*86ee64e7SAndroid Build Coastguard Worker "XFDXGDXHDXIDXJDXKDXLDXMDXNDXODXPDXQDXRDXSDXTDXUDXVDXWDXXDXYDXZDYEDYFDYGDYH"
649*86ee64e7SAndroid Build Coastguard Worker "DYIDYJDYKDYLDYMDYNDYODYPDYQDYRDYSDYTDYUDYVDYWDYXDYYDYZDZEDZFDZGDZHDZIDZJDZ"
650*86ee64e7SAndroid Build Coastguard Worker "KDZLDZMDZNDZODZPDZQDZRDZSDZTDZUDZVDZWDZXDZYDZZEEEFEEGEEHEEIEEJEEKEELEEMEEN"
651*86ee64e7SAndroid Build Coastguard Worker "EEOEEPEEQEEREESEETEEUEEVEEWEEXEEYEEZEFFEFGEFHEFIEFJEFKEFLEFMEFNEFOEFPEFQEF"
652*86ee64e7SAndroid Build Coastguard Worker "REFSEFTEFUEFVEFWEFXEFYEFZEGFEGGEGHEGIEGJEGKEGLEGMEGNEGOEGPEGQEGREGSEGTEGUE"
653*86ee64e7SAndroid Build Coastguard Worker "GVEGWEGXEGYEGZEHFEHGEHHEHIEHJEHKEHLEHMEHNEHOEHPEHQEHREHSEHTEHUEHVEHWEHXEHY"
654*86ee64e7SAndroid Build Coastguard Worker "EHZEIFEIGEIHEIIEIJEIKEILEIMEINEIOEIPEIQEIREISEITEIUEIVEIWEIXEIYEIZEJFEJGEJ"
655*86ee64e7SAndroid Build Coastguard Worker "HEJIEJJEJKEJLEJMEJNEJOEJPEJQEJREJSEJTEJUEJVEJWEJXEJYEJZEKFEKGEKHEKIEKJEKKE"
656*86ee64e7SAndroid Build Coastguard Worker "KLEKMEKNEKOEKPEKQEKREKSEKTEKUEKVEKWEKXEKYEKZELFELGELHELIELJELKELLELMELNELO"
657*86ee64e7SAndroid Build Coastguard Worker "ELPELQELRELSELTELUELVELWELXELYELZEMFEMGEMHEMIEMJEMKEMLEMMEMNEMOEMPEMQEMREM"
658*86ee64e7SAndroid Build Coastguard Worker "SEMTEMUEMVEMWEMXEMYEMZENFENGENHENIENJENKENLENMENNENOENPENQENRENSENTENUENVE"
659*86ee64e7SAndroid Build Coastguard Worker "NWENXENYENZEOFEOGEOHEOIEOJEOKEOLEOMEONEOOEOPEOQEOREOSEOTEOUEOVEOWEOXEOYEOZ"
660*86ee64e7SAndroid Build Coastguard Worker "EPFEPGEPHEPIEPJEPKEPLEPMEPNEPOEPPEPQEPREPSEPTEPUEPVEPWEPXEPYEPZEQFEQGEQHEQ"
661*86ee64e7SAndroid Build Coastguard Worker "IEQJEQKEQLEQMEQNEQOEQPEQQEQREQSEQTEQUEQVEQWEQXEQYEQZERFERGERHERIERJERKERLE"
662*86ee64e7SAndroid Build Coastguard Worker "RMERNEROERPERQERRERSERTERUERVERWERXERYERZESFESGESHESIESJESKESLESMESNESOESP"
663*86ee64e7SAndroid Build Coastguard Worker "ESQESRESSESTESUESVESWESXESYESZETFETGETHETIETJETKETLETMETNETOETPETQETRETSET"
664*86ee64e7SAndroid Build Coastguard Worker "TETUETVETWETXETYETZEUFEUGEUHEUIEUJEUKEULEUMEUNEUOEUPEUQEUREUSEUTEUUEUVEUWE"
665*86ee64e7SAndroid Build Coastguard Worker "UXEUYEUZEVFEVGEVHEVIEVJEVKEVLEVMEVNEVOEVPEVQEVREVSEVTEVUEVVEVWEVXEVYEVZEWF"
666*86ee64e7SAndroid Build Coastguard Worker "EWGEWHEWIEWJEWKEWLEWMEWNEWOEWPEWQEWREWSEWTEWUEWVEWWEWXEWYEWZEXFEXGEXHEXIEX"
667*86ee64e7SAndroid Build Coastguard Worker "JEXKEXLEXMEXNEXOEXPEXQEXREXSEXTEXUEXVEXWEXXEXYEXZEYFEYGEYHEYIEYJEYKEYLEYME"
668*86ee64e7SAndroid Build Coastguard Worker "YNEYOEYPEYQEYREYSEYTEYUEYVEYWEYXEYYEYZEZFEZGEZHEZIEZJEZKEZLEZMEZNEZOEZPEZQ"
669*86ee64e7SAndroid Build Coastguard Worker "EZREZSEZTEZUEZVEZWEZXEZYEZZFFFGFFHFFIFFJFFKFFLFFMFFNFFOFFPFFQFFRFFSFFTFFUF"
670*86ee64e7SAndroid Build Coastguard Worker "FVFFWFFXFFYFFZFGGFGHFGIFGJFGKFGLFGMFGNFGOFGPFGQFGRFGSFGTFGUFGVFGWFGXFGYFGZ"
671*86ee64e7SAndroid Build Coastguard Worker "FHGFHHFHIFHJFHKFHLFHMFHNFHOFHPFHQFHRFHSFHTFHUFHVFHWFHXFHYFHZFIGFIHFIIFIJFI"
672*86ee64e7SAndroid Build Coastguard Worker "KFILFIMFINFIOFIPFIQFIRFISFITFIUFIVFIWFIXFIYFIZFJGFJHFJIFJJFJKFJLFJMFJNFJOF"
673*86ee64e7SAndroid Build Coastguard Worker "JPFJQFJRFJSFJTFJUFJVFJWFJXFJYFJZFKGFKHFKIFKJFKKFKLFKMFKNFKOFKPFKQFKRFKSFKT"
674*86ee64e7SAndroid Build Coastguard Worker "FKUFKVFKWFKXFKYFKZFLGFLHFLIFLJFLKFLLFLMFLNFLOFLPFLQFLRFLSFLTFLUFLVFLWFLXFL"
675*86ee64e7SAndroid Build Coastguard Worker "YFLZFMGFMHFMIFMJFMKFMLFMMFMNFMOFMPFMQFMRFMSFMTFMUFMVFMWFMXFMYFMZFNGFNHFNIF"
676*86ee64e7SAndroid Build Coastguard Worker "NJFNKFNLFNMFNNFNOFNPFNQFNRFNSFNTFNUFNVFNWFNXFNYFNZFOGFOHFOIFOJFOKFOLFOMFON"
677*86ee64e7SAndroid Build Coastguard Worker "FOOFOPFOQFORFOSFOTFOUFOVFOWFOXFOYFOZFPGFPHFPIFPJFPKFPLFPMFPNFPOFPPFPQFPRFP"
678*86ee64e7SAndroid Build Coastguard Worker "SFPTFPUFPVFPWFPXFPYFPZFQGFQHFQIFQJFQKFQLFQMFQNFQOFQPFQQFQRFQSFQTFQUFQVFQWF"
679*86ee64e7SAndroid Build Coastguard Worker "QXFQYFQZFRGFRHFRIFRJFRKFRLFRMFRNFROFRPFRQFRRFRSFRTFRUFRVFRWFRXFRYFRZFSGFSH"
680*86ee64e7SAndroid Build Coastguard Worker "FSIFSJFSKFSLFSMFSNFSOFSPFSQFSRFSSFSTFSUFSVFSWFSXFSYFSZFTGFTHFTIFTJFTKFTLFT"
681*86ee64e7SAndroid Build Coastguard Worker "MFTNFTOFTPFTQFTRFTSFTTFTUFTVFTWFTXFTYFTZFUGFUHFUIFUJFUKFULFUMFUNFUOFUPFUQF"
682*86ee64e7SAndroid Build Coastguard Worker "URFUSFUTFUUFUVFUWFUXFUYFUZFVGFVHFVIFVJFVKFVLFVMFVNFVOFVPFVQFVRFVSFVTFVUFVV"
683*86ee64e7SAndroid Build Coastguard Worker "FVWFVXFVYFVZFWGFWHFWIFWJFWKFWLFWMFWNFWOFWPFWQFWRFWSFWTFWUFWVFWWFWXFWYFWZFX"
684*86ee64e7SAndroid Build Coastguard Worker "GFXHFXIFXJFXKFXLFXMFXNFXOFXPFXQFXRFXSFXTFXUFXVFXWFXXFXYFXZFYGFYHFYIFYJFYKF"
685*86ee64e7SAndroid Build Coastguard Worker "YLFYMFYNFYOFYPFYQFYRFYSFYTFYUFYVFYWFYXFYYFYZFZGFZHFZIFZJFZKFZLFZMFZNFZOFZP"
686*86ee64e7SAndroid Build Coastguard Worker "FZQFZRFZSFZTFZUFZVFZWFZXFZYFZZGGGHGGIGGJGGKGGLGGMGGNGGOGGPGGQGGRGGSGGTGGUG"
687*86ee64e7SAndroid Build Coastguard Worker "GVGGWGGXGGYGGZGHHGHIGHJGHKGHLGHMGHNGHOGHPGHQGHRGHSGHTGHUGHVGHWGHXGHYGHZGIH"
688*86ee64e7SAndroid Build Coastguard Worker "GIIGIJGIKGILGIMGINGIOGIPGIQGIRGISGITGIUGIVGIWGIXGIYGIZGJHGJIGJJGJKGJLGJMGJ"
689*86ee64e7SAndroid Build Coastguard Worker "NGJOGJPGJQGJRGJSGJTGJUGJVGJWGJXGJYGJZGKHGKIGKJGKKGKLGKMGKNGKOGKPGKQGKRGKSG"
690*86ee64e7SAndroid Build Coastguard Worker "KTGKUGKVGKWGKXGKYGKZGLHGLIGLJGLKGLLGLMGLNGLOGLPGLQGLRGLSGLTGLUGLVGLWGLXGLY"
691*86ee64e7SAndroid Build Coastguard Worker "GLZGMHGMIGMJGMKGMLGMMGMNGMOGMPGMQGMRGMSGMTGMUGMVGMWGMXGMYGMZGNHGNIGNJGNKGN"
692*86ee64e7SAndroid Build Coastguard Worker "LGNMGNNGNOGNPGNQGNRGNSGNTGNUGNVGNWGNXGNYGNZGOHGOIGOJGOKGOLGOMGONGOOGOPGOQG"
693*86ee64e7SAndroid Build Coastguard Worker "ORGOSGOTGOUGOVGOWGOXGOYGOZGPHGPIGPJGPKGPLGPMGPNGPOGPPGPQGPRGPSGPTGPUGPVGPW"
694*86ee64e7SAndroid Build Coastguard Worker "GPXGPYGPZGQHGQIGQJGQKGQLGQMGQNGQOGQPGQQGQRGQSGQTGQUGQVGQWGQXGQYGQZGRHGRIGR"
695*86ee64e7SAndroid Build Coastguard Worker "JGRKGRLGRMGRNGROGRPGRQGRRGRSGRTGRUGRVGRWGRXGRYGRZGSHGSIGSJGSKGSLGSMGSNGSOG"
696*86ee64e7SAndroid Build Coastguard Worker "SPGSQGSRGSSGSTGSUGSVGSWGSXGSYGSZGTHGTIGTJGTKGTLGTMGTNGTOGTPGTQGTRGTSGTTGTU"
697*86ee64e7SAndroid Build Coastguard Worker "GTVGTWGTXGTYGTZGUHGUIGUJGUKGULGUMGUNGUOGUPGUQGURGUSGUTGUUGUVGUWGUXGUYGUZGV"
698*86ee64e7SAndroid Build Coastguard Worker "HGVIGVJGVKGVLGVMGVNGVOGVPGVQGVRGVSGVTGVUGVVGVWGVXGVYGVZGWHGWIGWJGWKGWLGWMG"
699*86ee64e7SAndroid Build Coastguard Worker "WNGWOGWPGWQGWRGWSGWTGWUGWVGWWGWXGWYGWZGXHGXIGXJGXKGXLGXMGXNGXOGXPGXQGXRGXS"
700*86ee64e7SAndroid Build Coastguard Worker "GXTGXUGXVGXWGXXGXYGXZGYHGYIGYJGYKGYLGYMGYNGYOGYPGYQGYRGYSGYTGYUGYVGYWGYXGY"
701*86ee64e7SAndroid Build Coastguard Worker "YGYZGZHGZIGZJGZKGZLGZMGZNGZOGZPGZQGZRGZSGZTGZUGZVGZWGZXGZYGZZHHHIHHJHHKHHL"
702*86ee64e7SAndroid Build Coastguard Worker "HHMHHNHHOHHPHHQHHRHHSHHTHHUHHVHHWHHXHHYHHZHIIHIJHIKHILHIMHINHIOHIPHIQHIRHI"
703*86ee64e7SAndroid Build Coastguard Worker "SHITHIUHIVHIWHIXHIYHIZHJIHJJHJKHJLHJMHJNHJOHJPHJQHJRHJSHJTHJUHJVHJWHJXHJYH"
704*86ee64e7SAndroid Build Coastguard Worker "JZHKIHKJHKKHKLHKMHKNHKOHKPHKQHKRHKSHKTHKUHKVHKWHKXHKYHKZHLIHLJHLKHLLHLMHLN"
705*86ee64e7SAndroid Build Coastguard Worker "HLOHLPHLQHLRHLSHLTHLUHLVHLWHLXHLYHLZHMIHMJHMKHMLHMMHMNHMOHMPHMQHMRHMSHMTHM"
706*86ee64e7SAndroid Build Coastguard Worker "UHMVHMWHMXHMYHMZHNIHNJHNKHNLHNMHNNHNOHNPHNQHNRHNSHNTHNUHNVHNWHNXHNYHNZHOIH"
707*86ee64e7SAndroid Build Coastguard Worker "OJHOKHOLHOMHONHOOHOPHOQHORHOSHOTHOUHOVHOWHOXHOYHOZHPIHPJHPKHPLHPMHPNHPOHPP"
708*86ee64e7SAndroid Build Coastguard Worker "HPQHPRHPSHPTHPUHPVHPWHPXHPYHPZHQIHQJHQKHQLHQMHQNHQOHQPHQQHQRHQSHQTHQUHQVHQ"
709*86ee64e7SAndroid Build Coastguard Worker "WHQXHQYHQZHRIHRJHRKHRLHRMHRNHROHRPHRQHRRHRSHRTHRUHRVHRWHRXHRYHRZHSIHSJHSKH"
710*86ee64e7SAndroid Build Coastguard Worker "SLHSMHSNHSOHSPHSQHSRHSSHSTHSUHSVHSWHSXHSYHSZHTIHTJHTKHTLHTMHTNHTOHTPHTQHTR"
711*86ee64e7SAndroid Build Coastguard Worker "HTSHTTHTUHTVHTWHTXHTYHTZHUIHUJHUKHULHUMHUNHUOHUPHUQHURHUSHUTHUUHUVHUWHUXHU"
712*86ee64e7SAndroid Build Coastguard Worker "YHUZHVIHVJHVKHVLHVMHVNHVOHVPHVQHVRHVSHVTHVUHVVHVWHVXHVYHVZHWIHWJHWKHWLHWMH"
713*86ee64e7SAndroid Build Coastguard Worker "WNHWOHWPHWQHWRHWSHWTHWUHWVHWWHWXHWYHWZHXIHXJHXKHXLHXMHXNHXOHXPHXQHXRHXSHXT"
714*86ee64e7SAndroid Build Coastguard Worker "HXUHXVHXWHXXHXYHXZHYIHYJHYKHYLHYMHYNHYOHYPHYQHYRHYSHYTHYUHYVHYWHYXHYYHYZHZ"
715*86ee64e7SAndroid Build Coastguard Worker "IHZJHZKHZLHZMHZNHZOHZPHZQHZRHZSHZTHZUHZVHZWHZXHZYHZZIIIJIIKIILIIMIINIIOIIP"
716*86ee64e7SAndroid Build Coastguard Worker "IIQIIRIISIITIIUIIVIIWIIXIIYIIZIJJIJKIJLIJMIJNIJOIJPIJQIJRIJSIJTIJUIJVIJWIJ"
717*86ee64e7SAndroid Build Coastguard Worker "XIJYIJZIKJIKKIKLIKMIKNIKOIKPIKQIKRIKSIKTIKUIKVIKWIKXIKYIKZILJILKILLILMILNI"
718*86ee64e7SAndroid Build Coastguard Worker "LOILPILQILRILSILTILUILVILWILXILYILZIMJIMKIMLIMMIMNIMOIMPIMQIMRIMSIMTIMUIMV"
719*86ee64e7SAndroid Build Coastguard Worker "IMWIMXIMYIMZINJINKINLINMINNINOINPINQINRINSINTINUINVINWINXINYINZIOJIOKIOLIO"
720*86ee64e7SAndroid Build Coastguard Worker "MIONIOOIOPIOQIORIOSIOTIOUIOVIOWIOXIOYIOZIPJIPKIPLIPMIPNIPOIPPIPQIPRIPSIPTI"
721*86ee64e7SAndroid Build Coastguard Worker "PUIPVIPWIPXIPYIPZIQJIQKIQLIQMIQNIQOIQPIQQIQRIQSIQTIQUIQVIQWIQXIQYIQZIRJIRK"
722*86ee64e7SAndroid Build Coastguard Worker "IRLIRMIRNIROIRPIRQIRRIRSIRTIRUIRVIRWIRXIRYIRZISJISKISLISMISNISOISPISQISRIS"
723*86ee64e7SAndroid Build Coastguard Worker "SISTISUISVISWISXISYISZITJITKITLITMITNITOITPITQITRITSITTITUITVITWITXITYITZI"
724*86ee64e7SAndroid Build Coastguard Worker "UJIUKIULIUMIUNIUOIUPIUQIURIUSIUTIUUIUVIUWIUXIUYIUZIVJIVKIVLIVMIVNIVOIVPIVQ"
725*86ee64e7SAndroid Build Coastguard Worker "IVRIVSIVTIVUIVVIVWIVXIVYIVZIWJIWKIWLIWMIWNIWOIWPIWQIWRIWSIWTIWUIWVIWWIWXIW"
726*86ee64e7SAndroid Build Coastguard Worker "YIWZIXJIXKIXLIXMIXNIXOIXPIXQIXRIXSIXTIXUIXVIXWIXXIXYIXZIYJIYKIYLIYMIYNIYOI"
727*86ee64e7SAndroid Build Coastguard Worker "YPIYQIYRIYSIYTIYUIYVIYWIYXIYYIYZIZJIZKIZLIZMIZNIZOIZPIZQIZRIZSIZTIZUIZVIZW"
728*86ee64e7SAndroid Build Coastguard Worker "IZXIZYIZZJJJKJJLJJMJJNJJOJJPJJQJJRJJSJJTJJUJJVJJWJJXJJYJJZJKKJKLJKMJKNJKOJ"
729*86ee64e7SAndroid Build Coastguard Worker "KPJKQJKRJKSJKTJKUJKVJKWJKXJKYJKZJLKJLLJLMJLNJLOJLPJLQJLRJLSJLTJLUJLVJLWJLX"
730*86ee64e7SAndroid Build Coastguard Worker "JLYJLZJMKJMLJMMJMNJMOJMPJMQJMRJMSJMTJMUJMVJMWJMXJMYJMZJNKJNLJNMJNNJNOJNPJN"
731*86ee64e7SAndroid Build Coastguard Worker "QJNRJNSJNTJNUJNVJNWJNXJNYJNZJOKJOLJOMJONJOOJOPJOQJORJOSJOTJOUJOVJOWJOXJOYJ"
732*86ee64e7SAndroid Build Coastguard Worker "OZJPKJPLJPMJPNJPOJPPJPQJPRJPSJPTJPUJPVJPWJPXJPYJPZJQKJQLJQMJQNJQOJQPJQQJQR"
733*86ee64e7SAndroid Build Coastguard Worker "JQSJQTJQUJQVJQWJQXJQYJQZJRKJRLJRMJRNJROJRPJRQJRRJRSJRTJRUJRVJRWJRXJRYJRZJS"
734*86ee64e7SAndroid Build Coastguard Worker "KJSLJSMJSNJSOJSPJSQJSRJSSJSTJSUJSVJSWJSXJSYJSZJTKJTLJTMJTNJTOJTPJTQJTRJTSJ"
735*86ee64e7SAndroid Build Coastguard Worker "TTJTUJTVJTWJTXJTYJTZJUKJULJUMJUNJUOJUPJUQJURJUSJUTJUUJUVJUWJUXJUYJUZJVKJVL"
736*86ee64e7SAndroid Build Coastguard Worker "JVMJVNJVOJVPJVQJVRJVSJVTJVUJVVJVWJVXJVYJVZJWKJWLJWMJWNJWOJWPJWQJWRJWSJWTJW"
737*86ee64e7SAndroid Build Coastguard Worker "UJWVJWWJWXJWYJWZJXKJXLJXMJXNJXOJXPJXQJXRJXSJXTJXUJXVJXWJXXJXYJXZJYKJYLJYMJ"
738*86ee64e7SAndroid Build Coastguard Worker "YNJYOJYPJYQJYRJYSJYTJYUJYVJYWJYXJYYJYZJZKJZLJZMJZNJZOJZPJZQJZRJZSJZTJZUJZV"
739*86ee64e7SAndroid Build Coastguard Worker "JZWJZXJZYJZZKKKLKKMKKNKKOKKPKKQKKRKKSKKTKKUKKVKKWKKXKKYKKZKLLKLMKLNKLOKLPK"
740*86ee64e7SAndroid Build Coastguard Worker "LQKLRKLSKLTKLUKLVKLWKLXKLYKLZKMLKMMKMNKMOKMPKMQKMRKMSKMTKMUKMVKMWKMXKMYKMZ"
741*86ee64e7SAndroid Build Coastguard Worker "KNLKNMKNNKNOKNPKNQKNRKNSKNTKNUKNVKNWKNXKNYKNZKOLKOMKONKOOKOPKOQKORKOSKOTKO"
742*86ee64e7SAndroid Build Coastguard Worker "UKOVKOWKOXKOYKOZKPLKPMKPNKPOKPPKPQKPRKPSKPTKPUKPVKPWKPXKPYKPZKQLKQMKQNKQOK"
743*86ee64e7SAndroid Build Coastguard Worker "QPKQQKQRKQSKQTKQUKQVKQWKQXKQYKQZKRLKRMKRNKROKRPKRQKRRKRSKRTKRUKRVKRWKRXKRY"
744*86ee64e7SAndroid Build Coastguard Worker "KRZKSLKSMKSNKSOKSPKSQKSRKSSKSTKSUKSVKSWKSXKSYKSZKTLKTMKTNKTOKTPKTQKTRKTSKT"
745*86ee64e7SAndroid Build Coastguard Worker "TKTUKTVKTWKTXKTYKTZKULKUMKUNKUOKUPKUQKURKUSKUTKUUKUVKUWKUXKUYKUZKVLKVMKVNK"
746*86ee64e7SAndroid Build Coastguard Worker "VOKVPKVQKVRKVSKVTKVUKVVKVWKVXKVYKVZKWLKWMKWNKWOKWPKWQKWRKWSKWTKWUKWVKWWKWX"
747*86ee64e7SAndroid Build Coastguard Worker "KWYKWZKXLKXMKXNKXOKXPKXQKXRKXSKXTKXUKXVKXWKXXKXYKXZKYLKYMKYNKYOKYPKYQKYRKY"
748*86ee64e7SAndroid Build Coastguard Worker "SKYTKYUKYVKYWKYXKYYKYZKZLKZMKZNKZOKZPKZQKZRKZSKZTKZUKZVKZWKZXKZYKZZLLLMLLN"
749*86ee64e7SAndroid Build Coastguard Worker "LLOLLPLLQLLRLLSLLTLLULLVLLWLLXLLYLLZLMMLMNLMOLMPLMQLMRLMSLMTLMULMVLMWLMXLM"
750*86ee64e7SAndroid Build Coastguard Worker "YLMZLNMLNNLNOLNPLNQLNRLNSLNTLNULNVLNWLNXLNYLNZLOMLONLOOLOPLOQLORLOSLOTLOUL"
751*86ee64e7SAndroid Build Coastguard Worker "OVLOWLOXLOYLOZLPMLPNLPOLPPLPQLPRLPSLPTLPULPVLPWLPXLPYLPZLQMLQNLQOLQPLQQLQR"
752*86ee64e7SAndroid Build Coastguard Worker "LQSLQTLQULQVLQWLQXLQYLQZLRMLRNLROLRPLRQLRRLRSLRTLRULRVLRWLRXLRYLRZLSMLSNLS"
753*86ee64e7SAndroid Build Coastguard Worker "OLSPLSQLSRLSSLSTLSULSVLSWLSXLSYLSZLTMLTNLTOLTPLTQLTRLTSLTTLTULTVLTWLTXLTYL"
754*86ee64e7SAndroid Build Coastguard Worker "TZLUMLUNLUOLUPLUQLURLUSLUTLUULUVLUWLUXLUYLUZLVMLVNLVOLVPLVQLVRLVSLVTLVULVV"
755*86ee64e7SAndroid Build Coastguard Worker "LVWLVXLVYLVZLWMLWNLWOLWPLWQLWRLWSLWTLWULWVLWWLWXLWYLWZLXMLXNLXOLXPLXQLXRLX"
756*86ee64e7SAndroid Build Coastguard Worker "SLXTLXULXVLXWLXXLXYLXZLYMLYNLYOLYPLYQLYRLYSLYTLYULYVLYWLYXLYYLYZLZMLZNLZOL"
757*86ee64e7SAndroid Build Coastguard Worker "ZPLZQLZRLZSLZTLZULZVLZWLZXLZYLZZMMMNMMOMMPMMQMMRMMSMMTMMUMMVMMWMMXMMYMMZMN"
758*86ee64e7SAndroid Build Coastguard Worker "NMNOMNPMNQMNRMNSMNTMNUMNVMNWMNXMNYMNZMONMOOMOPMOQMORMOSMOTMOUMOVMOWMOXMOYM"
759*86ee64e7SAndroid Build Coastguard Worker "OZMPNMPOMPPMPQMPRMPSMPTMPUMPVMPWMPXMPYMPZMQNMQOMQPMQQMQRMQSMQTMQUMQVMQWMQX"
760*86ee64e7SAndroid Build Coastguard Worker "MQYMQZMRNMROMRPMRQMRRMRSMRTMRUMRVMRWMRXMRYMRZMSNMSOMSPMSQMSRMSSMSTMSUMSVMS"
761*86ee64e7SAndroid Build Coastguard Worker "WMSXMSYMSZMTNMTOMTPMTQMTRMTSMTTMTUMTVMTWMTXMTYMTZMUNMUOMUPMUQMURMUSMUTMUUM"
762*86ee64e7SAndroid Build Coastguard Worker "UVMUWMUXMUYMUZMVNMVOMVPMVQMVRMVSMVTMVUMVVMVWMVXMVYMVZMWNMWOMWPMWQMWRMWSMWT"
763*86ee64e7SAndroid Build Coastguard Worker "MWUMWVMWWMWXMWYMWZMXNMXOMXPMXQMXRMXSMXTMXUMXVMXWMXXMXYMXZMYNMYOMYPMYQMYRMY"
764*86ee64e7SAndroid Build Coastguard Worker "SMYTMYUMYVMYWMYXMYYMYZMZNMZOMZPMZQMZRMZSMZTMZUMZVMZWMZXMZYMZZNNNONNPNNQNNR"
765*86ee64e7SAndroid Build Coastguard Worker "NNSNNTNNUNNVNNWNNXNNYNNZNOONOPNOQNORNOSNOTNOUNOVNOWNOXNOYNOZNPONPPNPQNPRNP"
766*86ee64e7SAndroid Build Coastguard Worker "SNPTNPUNPVNPWNPXNPYNPZNQONQPNQQNQRNQSNQTNQUNQVNQWNQXNQYNQZNRONRPNRQNRRNRSN"
767*86ee64e7SAndroid Build Coastguard Worker "RTNRUNRVNRWNRXNRYNRZNSONSPNSQNSRNSSNSTNSUNSVNSWNSXNSYNSZNTONTPNTQNTRNTSNTT"
768*86ee64e7SAndroid Build Coastguard Worker "NTUNTVNTWNTXNTYNTZNUONUPNUQNURNUSNUTNUUNUVNUWNUXNUYNUZNVONVPNVQNVRNVSNVTNV"
769*86ee64e7SAndroid Build Coastguard Worker "UNVVNVWNVXNVYNVZNWONWPNWQNWRNWSNWTNWUNWVNWWNWXNWYNWZNXONXPNXQNXRNXSNXTNXUN"
770*86ee64e7SAndroid Build Coastguard Worker "XVNXWNXXNXYNXZNYONYPNYQNYRNYSNYTNYUNYVNYWNYXNYYNYZNZONZPNZQNZRNZSNZTNZUNZV"
771*86ee64e7SAndroid Build Coastguard Worker "NZWNZXNZYNZZOOOPOOQOOROOSOOTOOUOOVOOWOOXOOYOOZOPPOPQOPROPSOPTOPUOPVOPWOPXO"
772*86ee64e7SAndroid Build Coastguard Worker "PYOPZOQPOQQOQROQSOQTOQUOQVOQWOQXOQYOQZORPORQORRORSORTORUORVORWORXORYORZOSP"
773*86ee64e7SAndroid Build Coastguard Worker "OSQOSROSSOSTOSUOSVOSWOSXOSYOSZOTPOTQOTROTSOTTOTUOTVOTWOTXOTYOTZOUPOUQOUROU"
774*86ee64e7SAndroid Build Coastguard Worker "SOUTOUUOUVOUWOUXOUYOUZOVPOVQOVROVSOVTOVUOVVOVWOVXOVYOVZOWPOWQOWROWSOWTOWUO"
775*86ee64e7SAndroid Build Coastguard Worker "WVOWWOWXOWYOWZOXPOXQOXROXSOXTOXUOXVOXWOXXOXYOXZOYPOYQOYROYSOYTOYUOYVOYWOYX"
776*86ee64e7SAndroid Build Coastguard Worker "OYYOYZOZPOZQOZROZSOZTOZUOZVOZWOZXOZYOZZPPPQPPRPPSPPTPPUPPVPPWPPXPPYPPZPQQP"
777*86ee64e7SAndroid Build Coastguard Worker "QRPQSPQTPQUPQVPQWPQXPQYPQZPRQPRRPRSPRTPRUPRVPRWPRXPRYPRZPSQPSRPSSPSTPSUPSV"
778*86ee64e7SAndroid Build Coastguard Worker "PSWPSXPSYPSZPTQPTRPTSPTTPTUPTVTABUABVABWABXABYABZACBACCACDACEACFACGACHACIA"
779*86ee64e7SAndroid Build Coastguard Worker "CJACKACLACMACNACOACPACQACRACSACTACUACVACWACXACYACZADBADCADDADEADFADGADHADI"
780*86ee64e7SAndroid Build Coastguard Worker "ADJADKADLADMADAAABAACAADAAEAAFAAGAAHAAIAAJAAKAALAAMAANAAOAAPAAQAARAASAATAA"
781*86ee64e7SAndroid Build Coastguard Worker "UAAVAAWAAXAAYAAZABBABCABDABEABFABGABHABIABJABKABLABMABNABOABPABQABRABSABHA"
782*86ee64e7SAndroid Build Coastguard Worker "FIAFJAFKAFLAFMAFNAFOAFPAFQAFRAFSAFTAFUAFVAFWAFXAFYAFZAGBAGCAGDAGEAGFAGGAGH"
783*86ee64e7SAndroid Build Coastguard Worker "AGIAGJAGKAGLAGMAGNAGOAGPAGQAGRAGSAGTAGUAGVAGWAGXAGYAGZAHNADOADPADQADRADSAD"
784*86ee64e7SAndroid Build Coastguard Worker "TADUADVADWADXADYADZAEBAECAEDAEEAEFAEGAEHAEIAEJAEKAELAEMAENAEOAEPAEQAERAESA"
785*86ee64e7SAndroid Build Coastguard Worker "ETAEUAEVAEWAEXAEYAEZAFBAFCAFDAFEAFFAFGAFUAIVAIWAIXAIYAIZAJBAJCAJDAJEAJFAJG"
786*86ee64e7SAndroid Build Coastguard Worker "AJHAJIAJJAJKAJLAJMAJNAJOAJPAJQAJRAJSAJTAJUAJVAJWAJXAJYAJZAKBAKCAKDAKEAKFAK"
787*86ee64e7SAndroid Build Coastguard Worker "GAKHAKIAKJAKKAKLAKMAKNAKBAHCAHDAHEAHFAHGAHHAHIAHJAHKAHLAHMAHNAHOAHPAHQAHRA"
788*86ee64e7SAndroid Build Coastguard Worker "HSAHTAHUAHVAHWAHXAHYAHZAIBAICAIDAIEAIFAIGAIHAIIAIJAIKAILAIMAINAIOAIPAIQAIR"
789*86ee64e7SAndroid Build Coastguard Worker "AISAITAIIAMJAMKAMLAMMAMNAMOAMPAMQAMRAMSAMTAMUAMVAMWAMXAMYAMZANBANCANDANEAN"
790*86ee64e7SAndroid Build Coastguard Worker "FANGANHANIANJANKANLANMANNANOANPANQANRANSANTANUANVANWANXANYANZAOBAOOAKPAKQA"
791*86ee64e7SAndroid Build Coastguard Worker "KRAKSAKTAKUAKVAKWAKXAKYAKZALBALCALDALEALFALGALHALIALJALKALLALMALNALOALPALQ"
792*86ee64e7SAndroid Build Coastguard Worker "ALRALSALTALUALVALWALXALYALZAMBAMCAMDAMEAMFAMGAMHAMVAPWAPXAPYAPZAQBAQCAQDAQ"
793*86ee64e7SAndroid Build Coastguard Worker "EAQFAQGAQHAQIAQJAQKAQLAQMAQNAQOAQPAQQAQRAQSAQTAQUAQVAQWAQXAQYAQZARBARCARDA"
794*86ee64e7SAndroid Build Coastguard Worker "REARFARGARHARIARJARKARLARMARNAROARCAODAOEAOFAOGAOHAOIAOJAOKAOLAOMAONAOOAOP"
795*86ee64e7SAndroid Build Coastguard Worker "AOQAORAOSAOTAOUAOVAOWAOXAOYAOZAPBAPCAPDAPEAPFAPGAPHAPIAPJAPKAPLAPMAPNAPOAP"
796*86ee64e7SAndroid Build Coastguard Worker "PAPQAPRAPSAPTAPUAPJATKATLATMATNATOATPATQATRATSATTATUATVATWATXATYATZAUBAUCA"
797*86ee64e7SAndroid Build Coastguard Worker "UDAUEAUFAUGAUHAUIAUJAUKAULAUMAUNAUOAUPAUQAURAUSAUTAUUAUVAUWAUXAUYAUZAVBAVC"
798*86ee64e7SAndroid Build Coastguard Worker "AVPARQARRARSARTARUARVARWARXARYARZASBASCASDASEASFASGASHASIASJASKASLASMASNAS"
799*86ee64e7SAndroid Build Coastguard Worker "OASPASQASRASSASTASUASVASWASXASYASZATBATCATDATEATFATGATHATIATWAWXAWYAWZAXBA"
800*86ee64e7SAndroid Build Coastguard Worker "XCAXDAXEAXFAXGAXHAXIAXJAXKAXLAXMAXNAXOAXPAXQAXRAXSAXTAXUAXVAXWAXXAXYAXZAYB"
801*86ee64e7SAndroid Build Coastguard Worker "AYCAYDAYEAYFAYGAYHAYIAYJAYKAYLAYMAYNAYOAYPAYDAVEAVFAVGAVHAVIAVJAVKAVLAVMAV"
802*86ee64e7SAndroid Build Coastguard Worker "NAVOAVPAVQAVRAVSAVTAVUAVVAVWAVXAVYAVZAWBAWCAWDAWEAWFAWGAWHAWIAWJAWKAWLAWMA"
803*86ee64e7SAndroid Build Coastguard Worker "WNAWOAWPAWQAWRAWSAWTAWUAWVAWBLBBMBBNBBOBBPBBQBBRBBSBBTBBUBBVBBWBBXBBYBBZBC"
804*86ee64e7SAndroid Build Coastguard Worker "CBCDBCEBCFBCGBCHBCIBCJBCKBCLBCMBCNBCOBCPBCQBCRBCSBCTBCUBCVBCWBCXBCYBCZBDCB"
805*86ee64e7SAndroid Build Coastguard Worker "DDBDEBDFBDGBQAYRAYSAYTAYUAYVAYWAYXAYYAYZAZBAZCAZDAZEAZFAZGAZHAZIAZJAZKAZLA"
806*86ee64e7SAndroid Build Coastguard Worker "ZMAZNAZOAZPAZQAZRAZSAZTAZUAZVAZWAZXAZYAZZBBBCBBDBBEBBFBBGBBHBBIBBJBBKBFDBF"
807*86ee64e7SAndroid Build Coastguard Worker "EBFFBFGBFHBFIBFJBFKBFLBFMBFNBFOBFPBFQBFRBFSBFTBFUBFVBFWBFXBFYBFZBGCBGDBGEB"
808*86ee64e7SAndroid Build Coastguard Worker "GFBGGBGHBGIBGJBGKBGLBGMBGNBGOBGPBGQBGRBGSBGTBGUBGVBGWBDHBDIBDJBDKBDLBDMBDN"
809*86ee64e7SAndroid Build Coastguard Worker "BDOBDPBDQBDRBDSBDTBDUBDVBDWBDXBDYBDZBECBEDBEEBEFBEGBEHBEIBEJBEKBELBEMBENBE"
810*86ee64e7SAndroid Build Coastguard Worker "OBEPBEQBERBESBETBEUBEVBEWBEXBEYBEZBFCBITBIUBIVBIWBIXBIYBIZBJCBJDBJEBJFBJGB"
811*86ee64e7SAndroid Build Coastguard Worker "JHBJIBJJBJKBJLBJMBJNBJOBJPBJQBJRBJSBJTBJUBJVBJWBJXBJYBJZBKCBKDBKEBKFBKGBKH"
812*86ee64e7SAndroid Build Coastguard Worker "BKIBKJBKKBKLBKMBKNBKOBGXBGYBGZBHCBHDBHEBHFBHGBHHBHIBHJBHKBHLBHMBHNBHOBHPBH"
813*86ee64e7SAndroid Build Coastguard Worker "QBHRBHSBHTBHUBHVBHWBHXBHYBHZBICBIDBIEBIFBIGBIHBIIBIJBIKBILBIMBINBIOBIPBIQB"
814*86ee64e7SAndroid Build Coastguard Worker "IRBISBMLBMMBMNBMOBMPBMQBMRBMSBMTBMUBMVBMWBMXBMYBMZBNCBNDBNEBNFBNGBNHBNIBNJ"
815*86ee64e7SAndroid Build Coastguard Worker "BNKBNLBNMBNNBNOBNPBNQBNRBNSBNTBNUBNVBNWBNXBNYBNZBOCBODBOEBOFBOGBKPBKQBKRBK"
816*86ee64e7SAndroid Build Coastguard Worker "SBKTBKUBKVBKWBKXBKYBKZBLCBLDBLEBLFBLGBLHBLIBLJBLKBLLBLMBLNBLOBLPBLQBLRBLSB"
817*86ee64e7SAndroid Build Coastguard Worker "LTBLUBLVBLWBLXBLYBLZBMCBMDBMEBMFBMGBMHBMIBMJBMKBQDBQEBQFBQGBQHBQIBQJBQKBQL"
818*86ee64e7SAndroid Build Coastguard Worker "BQMBQNBQOBQPBQQBQRBQSBQTBQUBQVBQWBQXBQYBQZBRCBRDBREBRFBRGBRHBRIBRJBRKBRLBR"
819*86ee64e7SAndroid Build Coastguard Worker "MBRNBROBRPBRQBRRBRSBRTBRUBRVBRWBOHBOIBOJBOKBOLBOMBONBOOBOPBOQBORBOSBOTBOUB"
820*86ee64e7SAndroid Build Coastguard Worker "OVBOWBOXBOYBOZBPCBPDBPEBPFBPGBPHBPIBPJBPKBPLBPMBPNBPOBPPBPQBPRBPSBPTBPUBPV"
821*86ee64e7SAndroid Build Coastguard Worker "BPWBPXBPYBPZBQCBTTBTUBTVBTWBTXBTYBTZBUCBUDBUEBUFBUGBUHBUIBUJBUKBULBUMBUNBU"
822*86ee64e7SAndroid Build Coastguard Worker "OBUPBUQBURBUSBUTBUUBUVBUWBUXBUYBUZBVCBVDBVEBVFBVGBVHBVIBVJBVKBVLBVMBVNBVOB"
823*86ee64e7SAndroid Build Coastguard Worker "RXBRYBRZBSCBSDBSEBSFBSGBSHBSIBSJBSKBSLBSMBSNBSOBSPBSQBSRBSSBSTBSUBSVBSWBSX"
824*86ee64e7SAndroid Build Coastguard Worker "BSYBSZBTCBTDBTEBTFBTGBTHBTIBTJBTKBTLBTMBTNBTOBTPBTQBTRBTSBXLBXMBXNBXOBXPBX"
825*86ee64e7SAndroid Build Coastguard Worker "QBXRBXSBXTBXUBXVBXWBXXBXYBXZBYCBYDBYEBYFBYGBYHBYIBYJBYKBYLBYMBYNBYOBYPBYQB"
826*86ee64e7SAndroid Build Coastguard Worker "YRBYSBYTBYUBYVBYWBYXBYYBYZBZCBZDBZEBZFBZGBVPBVQBVRBVSBVTBVUBVVBVWBVXBVYBVZ"
827*86ee64e7SAndroid Build Coastguard Worker "BWCBWDBWEBWFBWGBWHBWIBWJBWKBWLBWMBWNBWOBWPBWQBWRBWSBWTBWUBWVBWWBWXBWYBWZBX"
828*86ee64e7SAndroid Build Coastguard Worker "CBXDBXEBXFBXGBXHBXIBXJBXKBCDFCDGCDHCDICDJCDKCDLCDMCDNCDOCDPCDQCDRCDSCDTCDU"
829*86ee64e7SAndroid Build Coastguard Worker "CDVCDWCDXCDYCDZCEDCEECEFCEGCEHCEICEJCEKCELCEMCENCEOCEPCEQCERCESCETCEUCEVCE"
830*86ee64e7SAndroid Build Coastguard Worker "WCEXCEYCEZZHBZIBZJBZKBZLBZMBZNBZOBZPBZQBZRBZSBZTBZUBZVBZWBZXBZYBZZCCCDCCEC"
831*86ee64e7SAndroid Build Coastguard Worker "CFCCGCCHCCICCJCCKCCLCCMCCNCCOCCPCCQCCRCCSCCTCCUCCVCCWCCXCCYCCZCDDCDECGYCGZ"
832*86ee64e7SAndroid Build Coastguard Worker "CHDCHECHFCHGCHHCHICHJCHKCHLCHMCHNCHOCHPCHQCHRCHSCHTCHUCHVCHWCHXCHYCHZCIDCI"
833*86ee64e7SAndroid Build Coastguard Worker "ECIFCIGCIHCIICIJCIKCILCIMCINCIOCIPCIQCIRCISCITCIUCIVCFDCFECFFCFGCFHCFICFJC"
834*86ee64e7SAndroid Build Coastguard Worker "FKCFLCFMCFNCFOCFPCFQCFRCFSCFTCFUCFVCFWCFXCFYCFZCGDCGECGFCGGCGHCGICGJCGKCGL"
835*86ee64e7SAndroid Build Coastguard Worker "CGMCGNCGOCGPCGQCGRCGSCGTCGUCGVCGWCGXCKUCKVCKWCKXCKYCKZCLDCLECLFCLGCLHCLICL"
836*86ee64e7SAndroid Build Coastguard Worker "JCLKCLLCLMCLNCLOCLPCLQCLRCLSCLTCLUCLVCLWCLXCLYCLZCMDCMECMFCMGCMHCMICMJCMKC"
837*86ee64e7SAndroid Build Coastguard Worker "MLCMMCMNCMOCMPCMQCMRCIWCIXCIYCIZCJDCJECJFCJGCJHCJICJJCJKCJLCJMCJNCJOCJPCJQ"
838*86ee64e7SAndroid Build Coastguard Worker "CJRCJSCJTCJUCJVCJWCJXCJYCJZCKDCKECKFCKGCKHCKICKJCKKCKLCKMCKNCKOCKPCKQCKRCK"
839*86ee64e7SAndroid Build Coastguard Worker "SCKTCOQCORCOSCOTCOUCOVCOWCOXCOYCOZCPDCPECPFCPGCPHCPICPJCPKCPLCPMCPNCPOCPPC"
840*86ee64e7SAndroid Build Coastguard Worker "PQCPRCPSCPTCPUCPVCPWCPXCPYCPZCQDCQECQFCQGCQHCQICQJCQKCQLCQMCQNCMSCMTCMUCMV"
841*86ee64e7SAndroid Build Coastguard Worker "CMWCMXCMYCMZCNDCNECNFCNGCNHCNICNJCNKCNLCNMCNNCNOCNPCNQCNRCNSCNTCNUCNVCNWCN"
842*86ee64e7SAndroid Build Coastguard Worker "XCNYCNZCODCOECOFCOGCOHCOICOJCOKCOLCOMCONCOOCOPCSMCSNCSOCSPCSQCSRCSSCSTCSUC"
843*86ee64e7SAndroid Build Coastguard Worker "SVCSWCSXCSYCSZCTDCTECTFCTGCTHCTICTJCTKCTLCTMCTNCTOCTPCTQCTRCTSCTTCTUCTVCTW"
844*86ee64e7SAndroid Build Coastguard Worker "CTXCTYCTZCUDCUECUFCUGCUHCUICUJCQOCQPCQQCQRCQSCQTCQUCQVCQWCQXCQYCQZCRDCRECR"
845*86ee64e7SAndroid Build Coastguard Worker "FCRGCRHCRICRJCRKCRLCRMCRNCROCRPCRQCRRCRSCRTCRUCRVCRWCRXCRYCRZCSDCSECSFCSGC"
846*86ee64e7SAndroid Build Coastguard Worker "SHCSICSJCSKCSLCWICWJCWKCWLCWMCWNCWOCWPCWQCWRCWSCWTCWUCWVCWWCWXCWYCWZCXDCXE"
847*86ee64e7SAndroid Build Coastguard Worker "CXFCXGCXHCXICXJCXKCXLCXMCXNCXOCXPCXQCXRCXSCXTCXUCXVCXWCXXCXYCXZCYDCYECYFCU"
848*86ee64e7SAndroid Build Coastguard Worker "KCULCUMCUNCUOCUPCUQCURCUSCUTCUUCUVCUWCUXCUYCUZCVDCVECVFCVGCVHCVICVJCVKCVLC"
849*86ee64e7SAndroid Build Coastguard Worker "VMCVNCVOCVPCVQCVRCVSCVTCVUCVVCVWCVXCVYCVZCWDCWECWFCWGCWHEDDFDDGDDHDDIDDJDD"
850*86ee64e7SAndroid Build Coastguard Worker "KDDLDDMDDNDDODDPDDQDDRDDSDDTDDUDDVDDWDDXDDYDDZDEEDEFDEGDEHDEIDEJDEKDELDEMD"
851*86ee64e7SAndroid Build Coastguard Worker "ENDEODEPDEQDERDESDETDEUDEVDEWDEXDEYDEZDFCYGCYHCYICYJCYKCYLCYMCYNCYOCYPCYQC"
852*86ee64e7SAndroid Build Coastguard Worker "YRCYSCYTCYUCYVCYWCYXCYYCYZCZDCZECZFCZGCZHCZICZJCZKCZLCZMCZNCZOCZPCZQCZRCZS"
853*86ee64e7SAndroid Build Coastguard Worker "CZTCZUCZVCZWCZXCZYCZZDDDEDHFDHGDHHDHIDHJDHKDHLDHMDHNDHODHPDHQDHRDHSDHTDHUD"
854*86ee64e7SAndroid Build Coastguard Worker "HVDHWDHXDHYDHZDIEDIFDIGDIHDIIDIJDIKDILDIMDINDIODIPDIQDIRDISDITDIUDIVDIWDIX"
855*86ee64e7SAndroid Build Coastguard Worker "DIYDIZDJEDFFDFGDFHDFIDFJDFKDFLDFMDFNDFODFPDFQDFRDFSDFTDFUDFVDFWDFXDFYDFZDG"
856*86ee64e7SAndroid Build Coastguard Worker "EDGFDGGDGHDGIDGJDGKDGLDGMDGNDGODGPDGQDGRDGSDGTDGUDGVDGWDGXDGYDGZDHEDLFDLGD"
857*86ee64e7SAndroid Build Coastguard Worker "LHDLIDLJDLKDLLDLMDLNDLODLPDLQDLRDLSDLTDLUDLVDLWDLXDLYDLZDMEDMFDMGDMHDMIDMJ"
858*86ee64e7SAndroid Build Coastguard Worker "DMKDMLDMMDMNDMODMPDMQDMRDMSDMTDMUDMVDMWDMXDMYDMZDNEDJFDJGDJHDJIDJJDJKDJLDJ"
859*86ee64e7SAndroid Build Coastguard Worker "MDJNDJODJPDJQDJRDJSDJTDJUDJVDJWDJXDJYDJZDKEDKFDKGDKHDKIDKJDKKDKLDKMDKNDKOD"
860*86ee64e7SAndroid Build Coastguard Worker "KPDKQDKRDKSDKTDKUDKVDKWDKXDKYDKZDLEDPFDPGDPHDPIDPJDPKDPLDPMDPNDPODPPDPQDPR"
861*86ee64e7SAndroid Build Coastguard Worker "DPSDPTDPUDPVDPWDPXDPYDPZDQEDQFDQGDQHDQIDQJDQKDQLDQMDQNDQODQPDQQDQRDQSDQTDQ"
862*86ee64e7SAndroid Build Coastguard Worker "UDQVDQWDQXDQYDQZDREDNFDNGDNHDNIDNJDNKDNLDNMDNNDNODNPDNQDNRDNSDNTDNUDNVDNWD"
863*86ee64e7SAndroid Build Coastguard Worker "NXDNYDNZDOEDOFDOGDOHDOIDOJDOKDOLDOMDONDOODOPDOQDORDOSDOTDOUDOVDOWDOXDOYDOZ"
864*86ee64e7SAndroid Build Coastguard Worker "DPEDTFDTGDTHDTIDTJDTKDTLDTMDTNDTODTPDTQDTRDTSDTTDTUDTVDTWDTXDTYDTZDUEDUFDU"
865*86ee64e7SAndroid Build Coastguard Worker "GDUHDUIDUJDUKDULDUMDUNDUODUPDUQDURDUSDUTDUUDUVDUWDUXDUYDUZDVEDRFDRGDRHDRID"
866*86ee64e7SAndroid Build Coastguard Worker "RJDRKDRLDRMDRNDRODRPDRQDRRDRSDRTDRUDRVDRWDRXDRYDRZDSEDSFDSGDSHDSIDSJDSKDSL"
867*86ee64e7SAndroid Build Coastguard Worker "DSMDSNDSODSPDSQDSRDSSDSTDSUDSVDSWDSXDSYDSZDTEDXFDXGDXHDXIDXJDXKDXLDXMDXNDX"
868*86ee64e7SAndroid Build Coastguard Worker "ODXPDXQDXRDXSDXTDXUDXVDXWDXXDXYDXZDYEDYFDYGDYHDYIDYJDYKDYLDYMDYNDYODYPDYQD"
869*86ee64e7SAndroid Build Coastguard Worker "YRDYSDYTDYUDYVDYWDYXDYYDYZDZEDVFDVGDVHDVIDVJDVKDVLDVMDVNDVODVPDVQDVRDVSDVT"
870*86ee64e7SAndroid Build Coastguard Worker "DVUDVVDVWDVXDVYDVZDWEDWFDWGDWHDWIDWJDWKDWLDWMDWNDWODWPDWQDWRDWSDWTDWUDWVDW"
871*86ee64e7SAndroid Build Coastguard Worker "WDWXDWYDWZDXFGEFHEFIEFJEFKEFLEFMEFNEFOEFPEFQEFREFSEFTEFUEFVEFWEFXEFYEFZEGF"
872*86ee64e7SAndroid Build Coastguard Worker "EGGEGHEGIEGJEGKEGLEGMEGNEGOEGPEGQEGREGSEGTEGUEGVEGWEGXEGYEGZEHFEHGEHHEEDZF"
873*86ee64e7SAndroid Build Coastguard Worker "DZGDZHDZIDZJDZKDZLDZMDZNDZODZPDZQDZRDZSDZTDZUDZVDZWDZXDZYDZZEEEFEEGEEHEEIE"
874*86ee64e7SAndroid Build Coastguard Worker "EJEEKEELEEMEENEEOEEPEEQEEREESEETEEUEEVEEWEEXEEYEEZEFFEJKEJLEJMEJNEJOEJPEJQ"
875*86ee64e7SAndroid Build Coastguard Worker "EJREJSEJTEJUEJVEJWEJXEJYEJZEKFEKGEKHEKIEKJEKKEKLEKMEKNEKOEKPEKQEKREKSEKTEK"
876*86ee64e7SAndroid Build Coastguard Worker "UEKVEKWEKXEKYEKZELFELGELHELIELJELKELLEHIEHJEHKEHLEHMEHNEHOEHPEHQEHREHSEHTE"
877*86ee64e7SAndroid Build Coastguard Worker "HUEHVEHWEHXEHYEHZEIFEIGEIHEIIEIJEIKEILEIMEINEIOEIPEIQEIREISEITEIUEIVEIWEIX"
878*86ee64e7SAndroid Build Coastguard Worker "EIYEIZEJFEJGEJHEJIEJJENOENPENQENRENSENTENUENVENWENXENYENZEOFEOGEOHEOIEOJEO"
879*86ee64e7SAndroid Build Coastguard Worker "KEOLEOMEONEOOEOPEOQEOREOSEOTEOUEOVEOWEOXEOYEOZEPFEPGEPHEPIEPJEPKEPLEPMEPNE"
880*86ee64e7SAndroid Build Coastguard Worker "POEPPELMELNELOELPELQELRELSELTELUELVELWELXELYELZEMFEMGEMHEMIEMJEMKEMLEMMEMN"
881*86ee64e7SAndroid Build Coastguard Worker "EMOEMPEMQEMREMSEMTEMUEMVEMWEMXEMYEMZENFENGENHENIENJENKENLENMENNERSERTERUER"
882*86ee64e7SAndroid Build Coastguard Worker "VERWERXERYERZESFESGESHESIESJESKESLESMESNESOESPESQESRESSESTESUESVESWESXESYE"
883*86ee64e7SAndroid Build Coastguard Worker "SZETFETGETHETIETJETKETLETMETNETOETPETQETRETSETTEPQEPREPSEPTEPUEPVEPWEPXEPY"
884*86ee64e7SAndroid Build Coastguard Worker "EPZEQFEQGEQHEQIEQJEQKEQLEQMEQNEQOEQPEQQEQREQSEQTEQUEQVEQWEQXEQYEQZERFERGER"
885*86ee64e7SAndroid Build Coastguard Worker "HERIERJERKERLERMERNEROERPERQERREVWEVXEVYEVZEWFEWGEWHEWIEWJEWKEWLEWMEWNEWOE"
886*86ee64e7SAndroid Build Coastguard Worker "WPEWQEWREWSEWTEWUEWVEWWEWXEWYEWZEXFEXGEXHEXIEXJEXKEXLEXMEXNEXOEXPEXQEXREXS"
887*86ee64e7SAndroid Build Coastguard Worker "EXTEXUEXVEXWEXXETUETVETWETXETYETZEUFEUGEUHEUIEUJEUKEULEUMEUNEUOEUPEUQEUREU"
888*86ee64e7SAndroid Build Coastguard Worker "SEUTEUUEUVEUWEUXEUYEUZEVFEVGEVHEVIEVJEVKEVLEVMEVNEVOEVPEVQEVREVSEVTEVUEVVE"
889*86ee64e7SAndroid Build Coastguard Worker "FFGFFHFFIFFJFFKFFLFFMFFNFFOFFPFFQFFRFFSFFTFFUFFVFFWFFXFFYFFZFGGFGHFGIFGJFG"
890*86ee64e7SAndroid Build Coastguard Worker "KFGLFGMFGNFGOFGPFGQFGRFGSFGTFGUFGVFGWFGXFGYFGZFHGFHHFHIFHJXYEXZEYFEYGEYHEY"
891*86ee64e7SAndroid Build Coastguard Worker "IEYJEYKEYLEYMEYNEYOEYPEYQEYREYSEYTEYUEYVEYWEYXEYYEYZEZFEZGEZHEZIEZJEZKEZLE"
892*86ee64e7SAndroid Build Coastguard Worker "ZMEZNEZOEZPEZQEZREZSEZTEZUEZVEZWEZXEZYEZZFFJOFJPFJQFJRFJSFJTFJUFJVFJWFJXFJ"
893*86ee64e7SAndroid Build Coastguard Worker "YFJZFKGFKHFKIFKJFKKFKLFKMFKNFKOFKPFKQFKRFKSFKTFKUFKVFKWFKXFKYFKZFLGFLHFLIF"
894*86ee64e7SAndroid Build Coastguard Worker "LJFLKFLLFLMFLNFLOFLPFLQFLRFHKFHLFHMFHNFHOFHPFHQFHRFHSFHTFHUFHVFHWFHXFHYFHZ"
895*86ee64e7SAndroid Build Coastguard Worker "FIGFIHFIIFIJFIKFILFIMFINFIOFIPFIQFIRFISFITFIUFIVFIWFIXFIYFIZFJGFJHFJIFJJFJ"
896*86ee64e7SAndroid Build Coastguard Worker "KFJLFJMFJNFNWFNXFNYFNZFOGFOHFOIFOJFOKFOLFOMFONFOOFOPFOQFORFOSFOTFOUFOVFOWF"
897*86ee64e7SAndroid Build Coastguard Worker "OXFOYFOZFPGFPHFPIFPJFPKFPLFPMFPNFPOFPPFPQFPRFPSFPTFPUFPVFPWFPXFPYFPZFLSFLT"
898*86ee64e7SAndroid Build Coastguard Worker "FLUFLVFLWFLXFLYFLZFMGFMHFMIFMJFMKFMLFMMFMNFMOFMPFMQFMRFMSFMTFMUFMVFMWFMXFM"
899*86ee64e7SAndroid Build Coastguard Worker "YFMZFNGFNHFNIFNJFNKFNLFNMFNNFNOFNPFNQFNRFNSFNTFNUFNVFSKFSLFSMFSNFSOFSPFSQF"
900*86ee64e7SAndroid Build Coastguard Worker "SRFSSFSTFSUFSVFSWFSXFSYFSZFTGFTHFTIFTJFTKFTLFTMFTNFTOFTPFTQFTRFTSFTTFTUFTV"
901*86ee64e7SAndroid Build Coastguard Worker "FTWFTXFTYFTZFUGFUHFUIFUJFUKFULFUMFUNFQGFQHFQIFQJFQKFQLFQMFQNFQOFQPFQQFQRFQ"
902*86ee64e7SAndroid Build Coastguard Worker "SFQTFQUFQVFQWFQXFQYFQZFRGFRHFRIFRJFRKFRLFRMFRNFROFRPFRQFRRFRSFRTFRUFRVFRWF"
903*86ee64e7SAndroid Build Coastguard Worker "RXFRYFRZFSGFSHFSIFSJFWSFWTFWUFWVFWWFWXFWYFWZFXGFXHFXIFXJFXKFXLFXMFXNFXOFXP"
904*86ee64e7SAndroid Build Coastguard Worker "FXQFXRFXSFXTFXUFXVFXWFXXFXYFXZFYGFYHFYIFYJFYKFYLFYMFYNFYOFYPFYQFYRFYSFYTFY"
905*86ee64e7SAndroid Build Coastguard Worker "UFYVFUOFUPFUQFURFUSFUTFUUFUVFUWFUXFUYFUZFVGFVHFVIFVJFVKFVLFVMFVNFVOFVPFVQF"
906*86ee64e7SAndroid Build Coastguard Worker "VRFVSFVTFVUFVVFVWFVXFVYFVZFWGFWHFWIFWJFWKFWLFWMFWNFWOFWPFWQFWRHGHIGHJGHKGH"
907*86ee64e7SAndroid Build Coastguard Worker "LGHMGHNGHOGHPGHQGHRGHSGHTGHUGHVGHWGHXGHYGHZGIHGIIGIJGIKGILGIMGINGIOGIPGIQG"
908*86ee64e7SAndroid Build Coastguard Worker "IRGISGITGIUGIVGIWGIXGIYGIZGJHGJIGJJGJKGJLGJMGJFYWFYXFYYFYZFZGFZHFZIFZJFZKF"
909*86ee64e7SAndroid Build Coastguard Worker "ZLFZMFZNFZOFZPFZQFZRFZSFZTFZUFZVFZWFZXFZYFZZGGGHGGIGGJGGKGGLGGMGGNGGOGGPGG"
910*86ee64e7SAndroid Build Coastguard Worker "QGGRGGSGGTGGUGGVGGWGGXGGYGGZGHTGLUGLVGLWGLXGLYGLZGMHGMIGMJGMKGMLGMMGMNGMOG"
911*86ee64e7SAndroid Build Coastguard Worker "MPGMQGMRGMSGMTGMUGMVGMWGMXGMYGMZGNHGNIGNJGNKGNLGNMGNNGNOGNPGNQGNRGNSGNTGNU"
912*86ee64e7SAndroid Build Coastguard Worker "GNVGNWGNXGNYGNNGJOGJPGJQGJRGJSGJTGJUGJVGJWGJXGJYGJZGKHGKIGKJGKKGKLGKMGKNGK"
913*86ee64e7SAndroid Build Coastguard Worker "OGKPGKQGKRGKSGKTGKUGKVGKWGKXGKYGKZGLHGLIGLJGLKGLLGLMGLNGLOGLPGLQGLRGLSGLMG"
914*86ee64e7SAndroid Build Coastguard Worker "QNGQOGQPGQQGQRGQSGQTGQUGQVGQWGQXGQYGQZGRHGRIGRJGRKGRLGRMGRNGROGRPGRQGRRGRS"
915*86ee64e7SAndroid Build Coastguard Worker "GRTGRUGRVGRWGRXGRYGRZGSHGSIGSJGSKGSLGSMGSNGSOGSPGSQGSRGSZGOHGOIGOJGOKGOLGO"
916*86ee64e7SAndroid Build Coastguard Worker "MGONGOOGOPGOQGORGOSGOTGOUGOVGOWGOXGOYGOZGPHGPIGPJGPKGPLGPMGPNGPOGPPGPQGPRG"
917*86ee64e7SAndroid Build Coastguard Worker "PSGPTGPUGPVGPWGPXGPYGPZGQHGQIGQJGQKGQLGQYGUZGVHGVIGVJGVKGVLGVMGVNGVOGVPGVQ"
918*86ee64e7SAndroid Build Coastguard Worker "GVRGVSGVTGVUGVVGVWGVXGVYGVZGWHGWIGWJGWKGWLGWMGWNGWOGWPGWQGWRGWSGWTGWUGWVGW"
919*86ee64e7SAndroid Build Coastguard Worker "WGWXGWYGWZGXHGXIGXJGXKGXSGSTGSUGSVGSWGSXGSYGSZGTHGTIGTJGTKGTLGTMGTNGTOGTPG"
920*86ee64e7SAndroid Build Coastguard Worker "TQGTRGTSGTTGTUGTVGTWGTXGTYGTZGUHGUIGUJGUKGULGUMGUNGUOGUPGUQGURGUSGUTGUUGUV"
921*86ee64e7SAndroid Build Coastguard Worker "GUWGUXGURGZSGZTGZUGZVGZWGZXGZYGZZHHHIHHJHHKHHLHHMHHNHHOHHPHHQHHRHHSHHTHHUH"
922*86ee64e7SAndroid Build Coastguard Worker "HVHHWHHXHHYHHZHIIHIJHIKHILHIMHINHIOHIPHIQHIRHISHITHIUHIVHIWHIXHIYHLGXMGXNG"
923*86ee64e7SAndroid Build Coastguard Worker "XOGXPGXQGXRGXSGXTGXUGXVGXWGXXGXYGXZGYHGYIGYJGYKGYLGYMGYNGYOGYPGYQGYRGYSGYT"
924*86ee64e7SAndroid Build Coastguard Worker "GYUGYVGYWGYXGYYGYZGZHGZIGZJGZKGZLGZMGZNGZOGZPGZQGZLPHLQHLRHLSHLTHLUHLVHLWH"
925*86ee64e7SAndroid Build Coastguard Worker "LXHLYHLZHMIHMJHMKHMLHMMHMNHMOHMPHMQHMRHMSHMTHMUHMVHMWHMXHMYHMZHNIHNJHNKHNL"
926*86ee64e7SAndroid Build Coastguard Worker "HNMHNNHNOHNPHNQHNRHNSHNTHNUHNVHNWHIZHJIHJJHJKHJLHJMHJNHJOHJPHJQHJRHJSHJTHJ"
927*86ee64e7SAndroid Build Coastguard Worker "UHJVHJWHJXHJYHJZHKIHKJHKKHKLHKMHKNHKOHKPHKQHKRHKSHKTHKUHKVHKWHKXHKYHKZHLIH"
928*86ee64e7SAndroid Build Coastguard Worker "LJHLKHLLHLMHLNHLOHQNHQOHQPHQQHQRHQSHQTHQUHQVHQWHQXHQYHQZHRIHRJHRKHRLHRMHRN"
929*86ee64e7SAndroid Build Coastguard Worker "HROHRPHRQHRRHRSHRTHRUHRVHRWHRXHRYHRZHSIHSJHSKHSLHSMHSNHSOHSPHSQHSRHSSHSTHS"
930*86ee64e7SAndroid Build Coastguard Worker "UHNXHNYHNZHOIHOJHOKHOLHOMHONHOOHOPHOQHORHOSHOTHOUHOVHOWHOXHOYHOZHPIHPJHPKH"
931*86ee64e7SAndroid Build Coastguard Worker "PLHPMHPNHPOHPPHPQHPRHPSHPTHPUHPVHPWHPXHPYHPZHQIHQJHQKHQLHQMHVLHVMHVNHVOHVP"
932*86ee64e7SAndroid Build Coastguard Worker "HVQHVRHVSHVTHVUHVVHVWHVXHVYHVZHWIHWJHWKHWLHWMHWNHWOHWPHWQHWRHWSHWTHWUHWVHW"
933*86ee64e7SAndroid Build Coastguard Worker "WHWXHWYHWZHXIHXJHXKHXLHXMHXNHXOHXPHXQHXRHXSHSVHSWHSXHSYHSZHTIHTJHTKHTLHTMH"
934*86ee64e7SAndroid Build Coastguard Worker "TNHTOHTPHTQHTRHTSHTTHTUHTVHTWHTXHTYHTZHUIHUJHUKHULHUMHUNHUOHUPHUQHURHUSHUT"
935*86ee64e7SAndroid Build Coastguard Worker "HUUHUVHUWHUXHUYHUZHVIHVJHVKHIIKIILIIMIINIIOIIPIIQIIRIISIITIIUIIVIIWIIXIIYI"
936*86ee64e7SAndroid Build Coastguard Worker "IZIJJIJKIJLIJMIJNIJOIJPIJQIJRIJSIJTIJUIJVIJWIJXIJYIJZIKJIKKIKLIKMIKNIKOIKP"
937*86ee64e7SAndroid Build Coastguard Worker "IKQIKRIKSIKTXTHXUHXVHXWHXXHXYHXZHYIHYJHYKHYLHYMHYNHYOHYPHYQHYRHYSHYTHYUHYV"
938*86ee64e7SAndroid Build Coastguard Worker "HYWHYXHYYHYZHZIHZJHZKHZLHZMHZNHZOHZPHZQHZRHZSHZTHZUHZVHZWHZXHZYHZZIIIJINNI"
939*86ee64e7SAndroid Build Coastguard Worker "NOINPINQINRINSINTINUINVINWINXINYINZIOJIOKIOLIOMIONIOOIOPIOQIORIOSIOTIOUIOV"
940*86ee64e7SAndroid Build Coastguard Worker "IOWIOXIOYIOZIPJIPKIPLIPMIPNIPOIPPIPQIPRIPSIPTIPUIPVIPWIKUIKVIKWIKXIKYIKZIL"
941*86ee64e7SAndroid Build Coastguard Worker "JILKILLILMILNILOILPILQILRILSILTILUILVILWILXILYILZIMJIMKIMLIMMIMNIMOIMPIMQI"
942*86ee64e7SAndroid Build Coastguard Worker "MRIMSIMTIMUIMVIMWIMXIMYIMZINJINKINLINMISQISRISSISTISUISVISWISXISYISZITJITK"
943*86ee64e7SAndroid Build Coastguard Worker "ITLITMITNITOITPITQITRITSITTITUITVITWITXITYITZIUJIUKIULIUMIUNIUOIUPIUQIURIU"
944*86ee64e7SAndroid Build Coastguard Worker "SIUTIUUIUVIUWIUXIUYIUZIPXIPYIPZIQJIQKIQLIQMIQNIQOIQPIQQIQRIQSIQTIQUIQVIQWI"
945*86ee64e7SAndroid Build Coastguard Worker "QXIQYIQZIRJIRKIRLIRMIRNIROIRPIRQIRRIRSIRTIRUIRVIRWIRXIRYIRZISJISKISLISMISN"
946*86ee64e7SAndroid Build Coastguard Worker "ISOISPIXTIXUIXVIXWIXXIXYIXZIYJIYKIYLIYMIYNIYOIYPIYQIYRIYSIYTIYUIYVIYWIYXIY"
947*86ee64e7SAndroid Build Coastguard Worker "YIYZIZJIZKIZLIZMIZNIZOIZPIZQIZRIZSIZTIZUIZVIZWIZXIZYIZZJJJKJJLJJIVJIVKIVLI"
948*86ee64e7SAndroid Build Coastguard Worker "VMIVNIVOIVPIVQIVRIVSIVTIVUIVVIVWIVXIVYIVZIWJIWKIWLIWMIWNIWOIWPIWQIWRIWSIWT"
949*86ee64e7SAndroid Build Coastguard Worker "IWUIWVIWWIWXIWYIWZIXJIXKIXLIXMIXNIXOIXPIXQIXRIXSYJLZJMKJMLJMMJMNJMOJMPJMQJ"
950*86ee64e7SAndroid Build Coastguard Worker "MRJMSJMTJMUJMVJMWJMXJMYJMZJNKJNLJNMJNNJNOJNPJNQJNRJNSJNTJNUJNVJNWJNXJNYJNZ"
951*86ee64e7SAndroid Build Coastguard Worker "JOKJOLJOMJONJOOJOPJOQJORJOSJOTJOMJJNJJOJJPJJQJJRJJSJJTJJUJJVJJWJJXJJYJJZJK"
952*86ee64e7SAndroid Build Coastguard Worker "KJKLJKMJKNJKOJKPJKQJKRJKSJKTJKUJKVJKWJKXJKYJKZJLKJLLJLMJLNJLOJLPJLQJLRJLSJ"
953*86ee64e7SAndroid Build Coastguard Worker "LTJLUJLVJLWJLXJLQJRRJRSJRTJRUJRVJRWJRXJRYJRZJSKJSLJSMJSNJSOJSPJSQJSRJSSJST"
954*86ee64e7SAndroid Build Coastguard Worker "JSUJSVJSWJSXJSYJSZJTKJTLJTMJTNJTOJTPJTQJTRJTSJTTJTUJTVJTWJTXJTYJTZJUKJULJU"
955*86ee64e7SAndroid Build Coastguard Worker "UJOVJOWJOXJOYJOZJPKJPLJPMJPNJPOJPPJPQJPRJPSJPTJPUJPVJPWJPXJPYJPZJQKJQLJQMJ"
956*86ee64e7SAndroid Build Coastguard Worker "QNJQOJQPJQQJQRJQSJQTJQUJQVJQWJQXJQYJQZJRKJRLJRMJRNJROJRPJRYJWZJXKJXLJXMJXN"
957*86ee64e7SAndroid Build Coastguard Worker "JXOJXPJXQJXRJXSJXTJXUJXVJXWJXXJXYJXZJYKJYLJYMJYNJYOJYPJYQJYRJYSJYTJYUJYVJY"
958*86ee64e7SAndroid Build Coastguard Worker "WJYXJYYJYZJZKJZLJZMJZNJZOJZPJZQJZRJZSJZTJZMJUNJUOJUPJUQJURJUSJUTJUUJUVJUWJ"
959*86ee64e7SAndroid Build Coastguard Worker "UXJUYJUZJVKJVLJVMJVNJVOJVPJVQJVRJVSJVTJVUJVVJVWJVXJVYJVZJWKJWLJWMJWNJWOJWP"
960*86ee64e7SAndroid Build Coastguard Worker "JWQJWRJWSJWTJWUJWVJWWJWXJWMTKMUKMVKMWKMXKMYKMZKNLKNMKNNKNOKNPKNQKNRKNSKNTK"
961*86ee64e7SAndroid Build Coastguard Worker "NUKNVKNWKNXKNYKNZKOLKOMKONKOOKOPKOQKORKOSKOTKOUKOVKOWKOXKOYKOZKPLKPMKPNKPO"
962*86ee64e7SAndroid Build Coastguard Worker "KPPKPQKPRKUJZVJZWJZXJZYJZZKKKLKKMKKNKKOKKPKKQKKRKKSKKTKKUKKVKKWKKXKKYKKZKL"
963*86ee64e7SAndroid Build Coastguard Worker "LKLMKLNKLOKLPKLQKLRKLSKLTKLUKLVKLWKLXKLYKLZKMLKMMKMNKMOKMPKMQKMRKMSKSRKSSK"
964*86ee64e7SAndroid Build Coastguard Worker "STKSUKSVKSWKSXKSYKSZKTLKTMKTNKTOKTPKTQKTRKTSKTTKTUKTVKTWKTXKTYKTZKULKUMKUN"
965*86ee64e7SAndroid Build Coastguard Worker "KUOKUPKUQKURKUSKUTKUUKUVKUWKUXKUYKUZKVLKVMKVNKVOKVPKPSKPTKPUKPVKPWKPXKPYKP"
966*86ee64e7SAndroid Build Coastguard Worker "ZKQLKQMKQNKQOKQPKQQKQRKQSKQTKQUKQVKQWKQXKQYKQZKRLKRMKRNKROKRPKRQKRRKRSKRTK"
967*86ee64e7SAndroid Build Coastguard Worker "RUKRVKRWKRXKRYKRZKSLKSMKSNKSOKSPKSQKYPKYQKYRKYSKYTKYUKYVKYWKYXKYYKYZKZLKZM"
968*86ee64e7SAndroid Build Coastguard Worker "KZNKZOKZPKZQKZRKZSKZTKZUKZVKZWKZXKZYKZZLLLMLLNLLOLLPLLQLLRLLSLLTLLULLVLLWL"
969*86ee64e7SAndroid Build Coastguard Worker "LXLLYLLZLMMLMNLMOLMPVQKVRKVSKVTKVUKVVKVWKVXKVYKVZKWLKWMKWNKWOKWPKWQKWRKWSK"
970*86ee64e7SAndroid Build Coastguard Worker "WTKWUKWVKWWKWXKWYKWZKXLKXMKXNKXOKXPKXQKXRKXSKXTKXUKXVKXWKXXKXYKXZKYLKYMKYN"
971*86ee64e7SAndroid Build Coastguard Worker "KYOKLPSLPTLPULPVLPWLPXLPYLPZLQMLQNLQOLQPLQQLQRLQSLQTLQULQVLQWLQXLQYLQZLRML"
972*86ee64e7SAndroid Build Coastguard Worker "RNLROLRPLRQLRRLRSLRTLRULRVLRWLRXLRYLRZLSMLSNLSOLSPLSQLSRLSSLSTLMQLMRLMSLMT"
973*86ee64e7SAndroid Build Coastguard Worker "LMULMVLMWLMXLMYLMZLNMLNNLNOLNPLNQLNRLNSLNTLNULNVLNWLNXLNYLNZLOMLONLOOLOPLO"
974*86ee64e7SAndroid Build Coastguard Worker "QLORLOSLOTLOULOVLOWLOXLOYLOZLPMLPNLPOLPPLPQLPRLVWLVXLVYLVZLWMLWNLWOLWPLWQL"
975*86ee64e7SAndroid Build Coastguard Worker "WRLWSLWTLWULWVLWWLWXLWYLWZLXMLXNLXOLXPLXQLXRLXSLXTLXULXVLXWLXXLXYLXZLYMLYN"
976*86ee64e7SAndroid Build Coastguard Worker "LYOLYPLYQLYRLYSLYTLYULYVLYWLYXLSULSVLSWLSXLSYLSZLTMLTNLTOLTPLTQLTRLTSLTTLT"
977*86ee64e7SAndroid Build Coastguard Worker "ULTVLTWLTXLTYLTZLUMLUNLUOLUPLUQLURLUSLUTLUULUVLUWLUXLUYLUZLVMLVNLVOLVPLVQL"
978*86ee64e7SAndroid Build Coastguard Worker "VRLVSLVTLVULVVOMOPMOQMORMOSMOTMOUMOVMOWMOXMOYMOZMPNMPOMPPMPQMPRMPSMPTMPUMP"
979*86ee64e7SAndroid Build Coastguard Worker "VMPWMPXMPYMPZMQNMQOMQPMQQMQRMQSMQTMQUMQVMQWMQXMQYMQZMRNMROMRPMRQMRRMRSMRLY"
980*86ee64e7SAndroid Build Coastguard Worker "YLYZLZMLZNLZOLZPLZQLZRLZSLZTLZULZVLZWLZXLZYLZZMMMNMMOMMPMMQMMRMMSMMTMMUMMV"
981*86ee64e7SAndroid Build Coastguard Worker "MMWMMXMMYMMZMNNMNOMNPMNQMNRMNSMNTMNUMNVMNWMNXMNYMNZMONMOYMUZMVNMVOMVPMVQMV"
982*86ee64e7SAndroid Build Coastguard Worker "RMVSMVTMVUMVVMVWMVXMVYMVZMWNMWOMWPMWQMWRMWSMWTMWUMWVMWWMWXMWYMWZMXNMXOMXPM"
983*86ee64e7SAndroid Build Coastguard Worker "XQMXRMXSMXTMXUMXVMXWMXXMXYMXZMYNMYOMYPMYTMRUMRVMRWMRXMRYMRZMSNMSOMSPMSQMSR"
984*86ee64e7SAndroid Build Coastguard Worker "MSSMSTMSUMSVMSWMSXMSYMSZMTNMTOMTPMTQMTRMTSMTTMTUMTVMTWMTXMTYMTZMUNMUOMUPMU"
985*86ee64e7SAndroid Build Coastguard Worker "QMURMUSMUTMUUMUVMUWMUXMUOXNOYNOZNPONPPNPQNPRNPSNPTNPUNPVNPWNPXNPYNPZNQONQP"
986*86ee64e7SAndroid Build Coastguard Worker "NQQNQRNQSNQTNQUNQVNQWNQXNQYNQZNRONRPNRQNRRNRSNRTNRUNRVNRWNRXNRYNRZNSONSPNS"
987*86ee64e7SAndroid Build Coastguard Worker "QNSRNSSNQMYRMYSMYTMYUMYVMYWMYXMYYMYZMZNMZOMZPMZQMZRMZSMZTMZUMZVMZWMZXMZYMZ"
988*86ee64e7SAndroid Build Coastguard Worker "ZNNNONNPNNQNNRNNSNNTNNUNNVNNWNNXNNYNNZNOONOPNOQNORNOSNOTNOUNOVNOWNWPNWQNWR"
989*86ee64e7SAndroid Build Coastguard Worker "NWSNWTNWUNWVNWWNWXNWYNWZNXONXPNXQNXRNXSNXTNXUNXVNXWNXXNXYNXZNYONYPNYQNYRNY"
990*86ee64e7SAndroid Build Coastguard Worker "SNYTNYUNYVNYWNYXNYYNYZNZONZPNZQNZRNZSNZTNZUNZVNZWNSTNSUNSVNSWNSXNSYNSZNTON"
991*86ee64e7SAndroid Build Coastguard Worker "TPNTQNTRNTSNTTNTUNTVNTWNTXNTYNTZNUONUPNUQNURNUSNUTNUUNUVNUWNUXNUYNUZNVONVP"
992*86ee64e7SAndroid Build Coastguard Worker "NVQNVRNVSNVTNVUNVVNVWNVXNVYNVZNWONORXORYORZOSPOSQOSROSSOSTOSUOSVOSWOSXOSYO"
993*86ee64e7SAndroid Build Coastguard Worker "SZOTPOTQOTROTSOTTOTUOTVOTWOTXOTYOTZOUPOUQOUROUSOUTOUUOUVOUWOUXOUYOUZOVPOVQ"
994*86ee64e7SAndroid Build Coastguard Worker "OVROVSOVTOVUOVVOVWZXNZYNZZOOOPOOQOOROOSOOTOOUOOVOOWOOXOOYOOZOPPOPQOPROPSOP"
995*86ee64e7SAndroid Build Coastguard Worker "TOPUOPVOPWOPXOPYOPZOQPOQQOQROQSOQTOQUOQVOQWOQXOQYOQZORPORQORRORSORTORUORVO"
996*86ee64e7SAndroid Build Coastguard Worker "RWOZXOZYOZZPPPQPPRPPSPPTPPUPPVPPWPPXPPYPPZPQQPQRPQSPQTPQUPQVPQWPQXPQYPQZPR"
997*86ee64e7SAndroid Build Coastguard Worker "QPRRPRSPRTPRUPRVPRWPRXPRYPRZPSQPSRPSSPSTPSUPSVPSWPSXPSYPSZPTOVXOVYOVZOWPOW"
998*86ee64e7SAndroid Build Coastguard Worker "QOWROWSOWTOWUOWVOWWOWXOWYOWZOXPOXQOXROXSOXTOXUOXVOXWOXXOXYOXZOYPOYQOYROYSO"
999*86ee64e7SAndroid Build Coastguard Worker "YTOYUOYVOYWOYXOYYOYZOZPOZQOZROZSOZTOZUOZVOZWQPTRPTSPTTPTUPTV";
1000*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,DeflateZFixedCorruption)1001*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, DeflateZFixedCorruption) {
1002*86ee64e7SAndroid Build Coastguard Worker // Tavis's test case from
1003*86ee64e7SAndroid Build Coastguard Worker // https://www.openwall.com/lists/oss-security/2022/03/26/1
1004*86ee64e7SAndroid Build Coastguard Worker // The upstream fix,
1005*86ee64e7SAndroid Build Coastguard Worker // https://github.com/madler/zlib/commit/5c44459c3b28a9bd3283aaceab7c615f8020c531,
1006*86ee64e7SAndroid Build Coastguard Worker // was merged in Chromium in #583975.
1007*86ee64e7SAndroid Build Coastguard Worker
1008*86ee64e7SAndroid Build Coastguard Worker z_stream stream;
1009*86ee64e7SAndroid Build Coastguard Worker stream.zalloc = Z_NULL;
1010*86ee64e7SAndroid Build Coastguard Worker stream.zfree = Z_NULL;
1011*86ee64e7SAndroid Build Coastguard Worker
1012*86ee64e7SAndroid Build Coastguard Worker int level = Z_DEFAULT_COMPRESSION;
1013*86ee64e7SAndroid Build Coastguard Worker int windowBits = 15;
1014*86ee64e7SAndroid Build Coastguard Worker int memLevel = 1;
1015*86ee64e7SAndroid Build Coastguard Worker int strategy = Z_FIXED;
1016*86ee64e7SAndroid Build Coastguard Worker
1017*86ee64e7SAndroid Build Coastguard Worker int ret =
1018*86ee64e7SAndroid Build Coastguard Worker deflateInit2(&stream, level, Z_DEFLATED, windowBits, memLevel, strategy);
1019*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
1020*86ee64e7SAndroid Build Coastguard Worker std::vector<uint8_t> compressed(
1021*86ee64e7SAndroid Build Coastguard Worker deflateBound(&stream, strlen(zFixedCorruptionData)));
1022*86ee64e7SAndroid Build Coastguard Worker stream.next_out = compressed.data();
1023*86ee64e7SAndroid Build Coastguard Worker stream.avail_out = compressed.size();
1024*86ee64e7SAndroid Build Coastguard Worker stream.next_in = (uint8_t*)zFixedCorruptionData;
1025*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = strlen(zFixedCorruptionData);
1026*86ee64e7SAndroid Build Coastguard Worker ret = deflate(&stream, Z_FINISH);
1027*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_STREAM_END);
1028*86ee64e7SAndroid Build Coastguard Worker size_t compressed_sz = compressed.size() - stream.avail_out;
1029*86ee64e7SAndroid Build Coastguard Worker deflateEnd(&stream);
1030*86ee64e7SAndroid Build Coastguard Worker
1031*86ee64e7SAndroid Build Coastguard Worker std::vector<uint8_t> decompressed(strlen(zFixedCorruptionData));
1032*86ee64e7SAndroid Build Coastguard Worker ret = inflateInit2(&stream, windowBits);
1033*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
1034*86ee64e7SAndroid Build Coastguard Worker stream.next_in = compressed.data();
1035*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = compressed_sz;
1036*86ee64e7SAndroid Build Coastguard Worker stream.next_out = decompressed.data();
1037*86ee64e7SAndroid Build Coastguard Worker stream.avail_out = decompressed.size();
1038*86ee64e7SAndroid Build Coastguard Worker ret = inflate(&stream, Z_FINISH);
1039*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_STREAM_END);
1040*86ee64e7SAndroid Build Coastguard Worker inflateEnd(&stream);
1041*86ee64e7SAndroid Build Coastguard Worker
1042*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(decompressed.size(), strlen(zFixedCorruptionData));
1043*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(
1044*86ee64e7SAndroid Build Coastguard Worker memcmp(zFixedCorruptionData, decompressed.data(), decompressed.size()),
1045*86ee64e7SAndroid Build Coastguard Worker 0);
1046*86ee64e7SAndroid Build Coastguard Worker }
1047*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,DeflateCopy)1048*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, DeflateCopy) {
1049*86ee64e7SAndroid Build Coastguard Worker // Check that deflateCopy() works.
1050*86ee64e7SAndroid Build Coastguard Worker
1051*86ee64e7SAndroid Build Coastguard Worker z_stream stream1;
1052*86ee64e7SAndroid Build Coastguard Worker stream1.zalloc = Z_NULL;
1053*86ee64e7SAndroid Build Coastguard Worker stream1.zfree = Z_NULL;
1054*86ee64e7SAndroid Build Coastguard Worker int ret =
1055*86ee64e7SAndroid Build Coastguard Worker deflateInit(&stream1, Z_DEFAULT_COMPRESSION);
1056*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
1057*86ee64e7SAndroid Build Coastguard Worker std::vector<uint8_t> compressed(
1058*86ee64e7SAndroid Build Coastguard Worker deflateBound(&stream1, strlen(zFixedCorruptionData)));
1059*86ee64e7SAndroid Build Coastguard Worker stream1.next_out = compressed.data();
1060*86ee64e7SAndroid Build Coastguard Worker stream1.avail_out = compressed.size();
1061*86ee64e7SAndroid Build Coastguard Worker
1062*86ee64e7SAndroid Build Coastguard Worker // Compress the first 1000 bytes.
1063*86ee64e7SAndroid Build Coastguard Worker stream1.next_in = (uint8_t*)zFixedCorruptionData;
1064*86ee64e7SAndroid Build Coastguard Worker stream1.avail_in = 1000;
1065*86ee64e7SAndroid Build Coastguard Worker ret = deflate(&stream1, Z_NO_FLUSH);
1066*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
1067*86ee64e7SAndroid Build Coastguard Worker
1068*86ee64e7SAndroid Build Coastguard Worker // Copy the stream state.
1069*86ee64e7SAndroid Build Coastguard Worker z_stream stream2;
1070*86ee64e7SAndroid Build Coastguard Worker ret = deflateCopy(&stream2, &stream1);
1071*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
1072*86ee64e7SAndroid Build Coastguard Worker deflateEnd(&stream1);
1073*86ee64e7SAndroid Build Coastguard Worker
1074*86ee64e7SAndroid Build Coastguard Worker // Compress the remaining bytes.
1075*86ee64e7SAndroid Build Coastguard Worker stream2.next_in = (uint8_t*)zFixedCorruptionData + (1000 - stream2.avail_in);
1076*86ee64e7SAndroid Build Coastguard Worker stream2.avail_in = strlen(zFixedCorruptionData) - (1000 - stream2.avail_in);
1077*86ee64e7SAndroid Build Coastguard Worker ret = deflate(&stream2, Z_FINISH);
1078*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_STREAM_END);
1079*86ee64e7SAndroid Build Coastguard Worker size_t compressed_sz = compressed.size() - stream2.avail_out;
1080*86ee64e7SAndroid Build Coastguard Worker deflateEnd(&stream2);
1081*86ee64e7SAndroid Build Coastguard Worker
1082*86ee64e7SAndroid Build Coastguard Worker // Check that decompression is successful.
1083*86ee64e7SAndroid Build Coastguard Worker std::vector<uint8_t> decompressed(strlen(zFixedCorruptionData));
1084*86ee64e7SAndroid Build Coastguard Worker z_stream stream;
1085*86ee64e7SAndroid Build Coastguard Worker stream.zalloc = Z_NULL;
1086*86ee64e7SAndroid Build Coastguard Worker stream.zfree = Z_NULL;
1087*86ee64e7SAndroid Build Coastguard Worker ret = inflateInit(&stream);
1088*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
1089*86ee64e7SAndroid Build Coastguard Worker stream.next_in = compressed.data();
1090*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = compressed_sz;
1091*86ee64e7SAndroid Build Coastguard Worker stream.next_out = decompressed.data();
1092*86ee64e7SAndroid Build Coastguard Worker stream.avail_out = decompressed.size();
1093*86ee64e7SAndroid Build Coastguard Worker ret = inflate(&stream, Z_FINISH);
1094*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_STREAM_END);
1095*86ee64e7SAndroid Build Coastguard Worker inflateEnd(&stream);
1096*86ee64e7SAndroid Build Coastguard Worker
1097*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(decompressed.size(), strlen(zFixedCorruptionData));
1098*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(
1099*86ee64e7SAndroid Build Coastguard Worker memcmp(zFixedCorruptionData, decompressed.data(), decompressed.size()),
1100*86ee64e7SAndroid Build Coastguard Worker 0);
1101*86ee64e7SAndroid Build Coastguard Worker }
1102*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,GzipStored)1103*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, GzipStored) {
1104*86ee64e7SAndroid Build Coastguard Worker // Check that deflating uncompressed blocks with a gzip header doesn't write
1105*86ee64e7SAndroid Build Coastguard Worker // out of bounds (crbug.com/325990053).
1106*86ee64e7SAndroid Build Coastguard Worker z_stream stream;
1107*86ee64e7SAndroid Build Coastguard Worker stream.zalloc = Z_NULL;
1108*86ee64e7SAndroid Build Coastguard Worker stream.zfree = Z_NULL;
1109*86ee64e7SAndroid Build Coastguard Worker static const int kGzipWrapper = 16;
1110*86ee64e7SAndroid Build Coastguard Worker int ret = deflateInit2(&stream, Z_NO_COMPRESSION, Z_DEFLATED,
1111*86ee64e7SAndroid Build Coastguard Worker 9 + kGzipWrapper, 9, Z_DEFAULT_STRATEGY);
1112*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
1113*86ee64e7SAndroid Build Coastguard Worker
1114*86ee64e7SAndroid Build Coastguard Worker const std::vector<uint8_t> src(512 * 1024);
1115*86ee64e7SAndroid Build Coastguard Worker stream.next_in = (unsigned char*)src.data();
1116*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = src.size();
1117*86ee64e7SAndroid Build Coastguard Worker
1118*86ee64e7SAndroid Build Coastguard Worker std::vector<uint8_t> out(1000);
1119*86ee64e7SAndroid Build Coastguard Worker stream.next_out = (unsigned char*)out.data();
1120*86ee64e7SAndroid Build Coastguard Worker stream.avail_out = out.size();
1121*86ee64e7SAndroid Build Coastguard Worker
1122*86ee64e7SAndroid Build Coastguard Worker ret = deflate(&stream, Z_NO_FLUSH);
1123*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
1124*86ee64e7SAndroid Build Coastguard Worker
1125*86ee64e7SAndroid Build Coastguard Worker deflateEnd(&stream);
1126*86ee64e7SAndroid Build Coastguard Worker }
1127*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,DeflateBound)1128*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, DeflateBound) {
1129*86ee64e7SAndroid Build Coastguard Worker // Check that the deflateBound() isn't too low when using non-default
1130*86ee64e7SAndroid Build Coastguard Worker // parameters (crbug.com/40270738).
1131*86ee64e7SAndroid Build Coastguard Worker const int level = 9;
1132*86ee64e7SAndroid Build Coastguard Worker const int windowBits = 15;
1133*86ee64e7SAndroid Build Coastguard Worker const int memLevel = 1;
1134*86ee64e7SAndroid Build Coastguard Worker const int strategy = Z_FIXED;
1135*86ee64e7SAndroid Build Coastguard Worker const uint8_t src[] = {
1136*86ee64e7SAndroid Build Coastguard Worker 49, 255, 255, 20, 45, 49, 167, 56, 55, 255, 255, 255, 223, 255, 49,
1137*86ee64e7SAndroid Build Coastguard Worker 255, 3, 78, 0, 0, 141, 253, 209, 163, 29, 195, 43, 60, 199, 123,
1138*86ee64e7SAndroid Build Coastguard Worker 112, 35, 134, 13, 148, 102, 212, 4, 184, 103, 7, 102, 225, 102, 156,
1139*86ee64e7SAndroid Build Coastguard Worker 164, 78, 48, 70, 49, 125, 162, 55, 116, 161, 174, 83, 0, 59, 0,
1140*86ee64e7SAndroid Build Coastguard Worker 225, 140, 0, 0, 63, 63, 4, 15, 198, 30, 126, 196, 33, 99, 135,
1141*86ee64e7SAndroid Build Coastguard Worker 41, 192, 82, 28, 105, 216, 170, 221, 14, 61, 1, 0, 0, 22, 195,
1142*86ee64e7SAndroid Build Coastguard Worker 45, 53, 244, 163, 167, 158, 229, 68, 18, 112, 49, 174, 43, 75, 90,
1143*86ee64e7SAndroid Build Coastguard Worker 161, 85, 19, 36, 163, 118, 228, 169, 180, 161, 237, 234, 253, 197, 234,
1144*86ee64e7SAndroid Build Coastguard Worker 66, 106, 12, 42, 124, 96, 160, 144, 183, 194, 157, 167, 202, 217};
1145*86ee64e7SAndroid Build Coastguard Worker
1146*86ee64e7SAndroid Build Coastguard Worker z_stream stream;
1147*86ee64e7SAndroid Build Coastguard Worker stream.zalloc = Z_NULL;
1148*86ee64e7SAndroid Build Coastguard Worker stream.zfree = Z_NULL;
1149*86ee64e7SAndroid Build Coastguard Worker int ret =
1150*86ee64e7SAndroid Build Coastguard Worker deflateInit2(&stream, level, Z_DEFLATED, windowBits, memLevel, strategy);
1151*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_OK);
1152*86ee64e7SAndroid Build Coastguard Worker size_t deflate_bound = deflateBound(&stream, sizeof(src));
1153*86ee64e7SAndroid Build Coastguard Worker
1154*86ee64e7SAndroid Build Coastguard Worker uint8_t out[sizeof(src) * 10];
1155*86ee64e7SAndroid Build Coastguard Worker stream.next_in = (uint8_t*)src;
1156*86ee64e7SAndroid Build Coastguard Worker stream.avail_in = sizeof(src);
1157*86ee64e7SAndroid Build Coastguard Worker stream.next_out = out;
1158*86ee64e7SAndroid Build Coastguard Worker stream.avail_out = sizeof(out);
1159*86ee64e7SAndroid Build Coastguard Worker ret = deflate(&stream, Z_FINISH);
1160*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(ret, Z_STREAM_END);
1161*86ee64e7SAndroid Build Coastguard Worker
1162*86ee64e7SAndroid Build Coastguard Worker size_t out_size = sizeof(out) - stream.avail_out;
1163*86ee64e7SAndroid Build Coastguard Worker EXPECT_LE(out_size, deflate_bound);
1164*86ee64e7SAndroid Build Coastguard Worker
1165*86ee64e7SAndroid Build Coastguard Worker deflateEnd(&stream);
1166*86ee64e7SAndroid Build Coastguard Worker }
1167*86ee64e7SAndroid Build Coastguard Worker
1168*86ee64e7SAndroid Build Coastguard Worker // TODO(gustavoa): make these tests run standalone.
1169*86ee64e7SAndroid Build Coastguard Worker #ifndef CMAKE_STANDALONE_UNITTESTS
1170*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,ZipFilenameCommentSize)1171*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, ZipFilenameCommentSize) {
1172*86ee64e7SAndroid Build Coastguard Worker // Check that minizip rejects zip member filenames or comments longer than
1173*86ee64e7SAndroid Build Coastguard Worker // the zip format can represent.
1174*86ee64e7SAndroid Build Coastguard Worker
1175*86ee64e7SAndroid Build Coastguard Worker base::ScopedTempDir temp_dir;
1176*86ee64e7SAndroid Build Coastguard Worker ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
1177*86ee64e7SAndroid Build Coastguard Worker base::FilePath zip_file = temp_dir.GetPath().AppendASCII("crbug1470539.zip");
1178*86ee64e7SAndroid Build Coastguard Worker
1179*86ee64e7SAndroid Build Coastguard Worker zipFile zf = zipOpen(zip_file.AsUTF8Unsafe().c_str(), APPEND_STATUS_CREATE);
1180*86ee64e7SAndroid Build Coastguard Worker ASSERT_NE(zf, nullptr);
1181*86ee64e7SAndroid Build Coastguard Worker
1182*86ee64e7SAndroid Build Coastguard Worker // Adding a member with 2^16 byte filename is okay.
1183*86ee64e7SAndroid Build Coastguard Worker std::string long_filename(UINT16_MAX, 'a');
1184*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(zipOpenNewFileInZip(zf, long_filename.c_str(), nullptr, nullptr, 0,
1185*86ee64e7SAndroid Build Coastguard Worker nullptr, 0, nullptr, Z_DEFLATED,
1186*86ee64e7SAndroid Build Coastguard Worker Z_DEFAULT_COMPRESSION),
1187*86ee64e7SAndroid Build Coastguard Worker ZIP_OK);
1188*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(zipWriteInFileInZip(zf, "1", 1), ZIP_OK);
1189*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(zipCloseFileInZip(zf), ZIP_OK);
1190*86ee64e7SAndroid Build Coastguard Worker
1191*86ee64e7SAndroid Build Coastguard Worker // Adding a member with 2^16+1 byte filename is NOT okay.
1192*86ee64e7SAndroid Build Coastguard Worker std::string too_long_filename = long_filename + 'a';
1193*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(zipOpenNewFileInZip(zf, too_long_filename.c_str(), nullptr, nullptr,
1194*86ee64e7SAndroid Build Coastguard Worker 0, nullptr, 0, nullptr, Z_DEFLATED,
1195*86ee64e7SAndroid Build Coastguard Worker Z_DEFAULT_COMPRESSION),
1196*86ee64e7SAndroid Build Coastguard Worker ZIP_PARAMERROR);
1197*86ee64e7SAndroid Build Coastguard Worker
1198*86ee64e7SAndroid Build Coastguard Worker // Adding a member with 2^16 byte comment is okay.
1199*86ee64e7SAndroid Build Coastguard Worker std::string long_comment(UINT16_MAX, 'x');
1200*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(zipOpenNewFileInZip(zf, "x", nullptr, nullptr, 0, nullptr, 0,
1201*86ee64e7SAndroid Build Coastguard Worker long_comment.c_str(), Z_DEFLATED,
1202*86ee64e7SAndroid Build Coastguard Worker Z_DEFAULT_COMPRESSION),
1203*86ee64e7SAndroid Build Coastguard Worker ZIP_OK);
1204*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(zipCloseFileInZip(zf), ZIP_OK);
1205*86ee64e7SAndroid Build Coastguard Worker
1206*86ee64e7SAndroid Build Coastguard Worker // Adding a member with 2^16+1 byte comment is NOT okay.
1207*86ee64e7SAndroid Build Coastguard Worker std::string too_long_comment = long_comment + 'x';
1208*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(zipOpenNewFileInZip(zf, "x", nullptr, nullptr, 0, nullptr, 0,
1209*86ee64e7SAndroid Build Coastguard Worker too_long_comment.c_str(), Z_DEFLATED,
1210*86ee64e7SAndroid Build Coastguard Worker Z_DEFAULT_COMPRESSION),
1211*86ee64e7SAndroid Build Coastguard Worker ZIP_PARAMERROR);
1212*86ee64e7SAndroid Build Coastguard Worker
1213*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(zipClose(zf, nullptr), ZIP_OK);
1214*86ee64e7SAndroid Build Coastguard Worker
1215*86ee64e7SAndroid Build Coastguard Worker // Check that the long filename and comment members were successfully added.
1216*86ee64e7SAndroid Build Coastguard Worker unzFile uzf = unzOpen(zip_file.AsUTF8Unsafe().c_str());
1217*86ee64e7SAndroid Build Coastguard Worker ASSERT_NE(uzf, nullptr);
1218*86ee64e7SAndroid Build Coastguard Worker char buf[UINT16_MAX + 2];
1219*86ee64e7SAndroid Build Coastguard Worker
1220*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(unzGoToFirstFile(uzf), UNZ_OK);
1221*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(unzGetCurrentFileInfo(uzf, nullptr, buf, sizeof(buf), nullptr, 0,
1222*86ee64e7SAndroid Build Coastguard Worker nullptr, 0),
1223*86ee64e7SAndroid Build Coastguard Worker UNZ_OK);
1224*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(std::string(buf), long_filename);
1225*86ee64e7SAndroid Build Coastguard Worker
1226*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(unzGoToNextFile(uzf), UNZ_OK);
1227*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(unzGetCurrentFileInfo(uzf, nullptr, nullptr, 0, nullptr, 0, buf,
1228*86ee64e7SAndroid Build Coastguard Worker sizeof(buf)),
1229*86ee64e7SAndroid Build Coastguard Worker UNZ_OK);
1230*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(std::string(buf), long_comment);
1231*86ee64e7SAndroid Build Coastguard Worker
1232*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(unzGoToNextFile(uzf), UNZ_END_OF_LIST_OF_FILE);
1233*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(unzClose(uzf), UNZ_OK);
1234*86ee64e7SAndroid Build Coastguard Worker }
1235*86ee64e7SAndroid Build Coastguard Worker
TEST(ZlibTest,ZipExtraFieldSize)1236*86ee64e7SAndroid Build Coastguard Worker TEST(ZlibTest, ZipExtraFieldSize) {
1237*86ee64e7SAndroid Build Coastguard Worker // Check that minizip rejects zip members with too large extra fields.
1238*86ee64e7SAndroid Build Coastguard Worker
1239*86ee64e7SAndroid Build Coastguard Worker std::string extra_field;
1240*86ee64e7SAndroid Build Coastguard Worker extra_field.append("\x12\x34"); // Header ID.
1241*86ee64e7SAndroid Build Coastguard Worker extra_field.append("\xfb\xff"); // Data size (not including the header).
1242*86ee64e7SAndroid Build Coastguard Worker extra_field.append(UINT16_MAX - 4, 'a');
1243*86ee64e7SAndroid Build Coastguard Worker
1244*86ee64e7SAndroid Build Coastguard Worker base::ScopedTempDir temp_dir;
1245*86ee64e7SAndroid Build Coastguard Worker ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
1246*86ee64e7SAndroid Build Coastguard Worker base::FilePath zip_file = temp_dir.GetPath().AppendASCII("extrafield.zip");
1247*86ee64e7SAndroid Build Coastguard Worker
1248*86ee64e7SAndroid Build Coastguard Worker zipFile zf = zipOpen(zip_file.AsUTF8Unsafe().c_str(), APPEND_STATUS_CREATE);
1249*86ee64e7SAndroid Build Coastguard Worker ASSERT_NE(zf, nullptr);
1250*86ee64e7SAndroid Build Coastguard Worker
1251*86ee64e7SAndroid Build Coastguard Worker // Adding a member with 2^16 byte extra field should work.
1252*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(zipOpenNewFileInZip(zf, "a", nullptr, extra_field.data(),
1253*86ee64e7SAndroid Build Coastguard Worker extra_field.size(), extra_field.data(),
1254*86ee64e7SAndroid Build Coastguard Worker extra_field.size(), nullptr, Z_DEFLATED,
1255*86ee64e7SAndroid Build Coastguard Worker Z_DEFAULT_COMPRESSION),
1256*86ee64e7SAndroid Build Coastguard Worker ZIP_OK);
1257*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(zipWriteInFileInZip(zf, "1", 1), ZIP_OK);
1258*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(zipCloseFileInZip(zf), ZIP_OK);
1259*86ee64e7SAndroid Build Coastguard Worker
1260*86ee64e7SAndroid Build Coastguard Worker // More then 2^16 bytes doesn't work. Neither for size_extrafield_local, nor
1261*86ee64e7SAndroid Build Coastguard Worker // size_extrafield_global.
1262*86ee64e7SAndroid Build Coastguard Worker std::string extra_field_long = extra_field + 'x';
1263*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(
1264*86ee64e7SAndroid Build Coastguard Worker zipOpenNewFileInZip(zf, "b", nullptr, nullptr, 0, extra_field_long.data(),
1265*86ee64e7SAndroid Build Coastguard Worker extra_field_long.size(), nullptr, Z_DEFLATED,
1266*86ee64e7SAndroid Build Coastguard Worker Z_DEFAULT_COMPRESSION),
1267*86ee64e7SAndroid Build Coastguard Worker ZIP_PARAMERROR);
1268*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(zipOpenNewFileInZip(zf, "b", nullptr, extra_field_long.data(),
1269*86ee64e7SAndroid Build Coastguard Worker extra_field_long.size(), nullptr, 0, nullptr,
1270*86ee64e7SAndroid Build Coastguard Worker Z_DEFLATED, Z_DEFAULT_COMPRESSION),
1271*86ee64e7SAndroid Build Coastguard Worker ZIP_PARAMERROR);
1272*86ee64e7SAndroid Build Coastguard Worker
1273*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(zipClose(zf, nullptr), ZIP_OK);
1274*86ee64e7SAndroid Build Coastguard Worker
1275*86ee64e7SAndroid Build Coastguard Worker // Check that the data can be read back.
1276*86ee64e7SAndroid Build Coastguard Worker unzFile uzf = unzOpen(zip_file.AsUTF8Unsafe().c_str());
1277*86ee64e7SAndroid Build Coastguard Worker ASSERT_NE(uzf, nullptr);
1278*86ee64e7SAndroid Build Coastguard Worker char buf[UINT16_MAX + 1] = {0};
1279*86ee64e7SAndroid Build Coastguard Worker
1280*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(unzGoToFirstFile(uzf), UNZ_OK);
1281*86ee64e7SAndroid Build Coastguard Worker ASSERT_EQ(unzGetCurrentFileInfo(uzf, nullptr, nullptr, 0, buf,
1282*86ee64e7SAndroid Build Coastguard Worker sizeof(buf) - 1, nullptr, 0),
1283*86ee64e7SAndroid Build Coastguard Worker UNZ_OK);
1284*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(std::string(buf), extra_field);
1285*86ee64e7SAndroid Build Coastguard Worker
1286*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(unzGoToNextFile(uzf), UNZ_END_OF_LIST_OF_FILE);
1287*86ee64e7SAndroid Build Coastguard Worker EXPECT_EQ(unzClose(uzf), UNZ_OK);
1288*86ee64e7SAndroid Build Coastguard Worker }
1289*86ee64e7SAndroid Build Coastguard Worker
1290*86ee64e7SAndroid Build Coastguard Worker #endif
1291