From 36eaa0681d190200b82866f3dcd8d6b3963b9f48 Mon Sep 17 00:00:00 2001 From: Vibhu Jawa Date: Mon, 3 May 2021 13:43:52 -0700 Subject: [PATCH] Subword Tokenizer HuggingFace like API (#7942) This PR closes https://github.com/rapidsai/cudf/issues/5868 by adding a new tokenizer API. We are seeing speedups even at low batch sizes (10/100) so this should potentially unlock some inference/training use cases for us. ## Benchmarks: (Thanks to @davidwendt for writing the super fast tokenizer :boom: ) | Batch Size | HuggingFace | Rapids Old API | Rapids Tokenizer API | Tokenizer API Speed up vs HuggingFace | Rapids New API Speedup | |- |- |- |- |- |- | | 1 | 0.000242 | 0.006890 | 0.000497 | 0.487 | 13.863 | | 10 | 0.002800 | 0.007030 | 0.000516 | 5.426 | 13.624 | | 100 | 0.016200 | 0.007140 | 0.000537 | 30.168 | 13.296 | | 1000 | 0.149000 | 0.007150 | 0.000517 | 288.201 | 13.830 | ## API Comparision to HuggingFace: The goal of this PR is to ensure our API matches up HuggingFace as much as possible to help with ease of porting. Proposed API in this PR: ```python from cudf.core.subword_tokenizer import SubwordTokenizer tokenizer = SubwordTokenizer('bert-base-cased-vocab-hash.txt',do_lower_case=False) output = tokenizer(str_series, max_num_rows=len(str_series), truncation=True, max_length=seq_len, padding='max_length', add_special_tokens=False, return_tensors='pt') ``` HuggingFace API: ```python from transformers import BertTokenizerFast tokenizer = BertTokenizerFast.from_pretrained('bert-base-cased', do_lower_case=False) output = tokenizer(input_sentence_ls, truncation=True, max_length=seq_len, padding='max_length', add_special_tokens=False, return_tensors = 'pt') output_d = {k:v.cuda() for k,v in output.items()} ``` ## TODO: - [x] Add tests - [x] Throw appropriate warnings for HuggingFace discrepancies - [x] API checks - [X] [ Benchmark/Example Notebook ](https://nbviewer.jupyter.org/gist/VibhuJawa/350a8479b10be3591dd9c4d5da3cfc3b) CC: @raykallen, @BartleyR (from the cyber team) CC: @randerzander , @beckernick (from the workflows team) Authors: - Vibhu Jawa (https://github.com/VibhuJawa) Approvers: - GALI PREM SAGAR (https://github.com/galipremsagar) - AJ Schmidt (https://github.com/ajschmidt8) - Keith Kraus (https://github.com/kkraus14) URL: https://github.com/rapidsai/cudf/pull/7942 --- conda/environments/cudf_dev_cuda11.0.yml | 1 + conda/environments/cudf_dev_cuda11.1.yml | 1 + conda/environments/cudf_dev_cuda11.2.yml | 1 + docs/cudf/source/api.rst | 7 + .../cudf/_lib/cpp/nvtext/subword_tokenize.pxd | 28 +- .../cudf/_lib/nvtext/subword_tokenize.pyx | 58 +- python/cudf/cudf/core/column/string.py | 4 +- python/cudf/cudf/core/subword_tokenizer.py | 295 ++ .../bert_base_cased_sampled/vocab-hash.txt | 4382 +++++++++++++++++ .../bert_base_cased_sampled/vocab.txt | 3500 +++++++++++++ .../subword_tokenizer_data/test_sentences.txt | 100 + .../bert-base-uncased-vocab-5per.txt | 2475 ---------- .../ground_truth_vocab_hash_5per.txt | 3100 ------------ python/cudf/cudf/tests/test_hash_vocab.py | 16 +- .../cudf/cudf/tests/test_subword_tokenizer.py | 112 + .../cuda-11.0/dev_requirements.txt | 2 +- .../cuda-11.1/dev_requirements.txt | 2 +- .../cuda-11.2/dev_requirements.txt | 2 +- python/cudf/setup.py | 1 + 19 files changed, 8491 insertions(+), 5596 deletions(-) create mode 100644 python/cudf/cudf/core/subword_tokenizer.py create mode 100644 python/cudf/cudf/tests/data/subword_tokenizer_data/bert_base_cased_sampled/vocab-hash.txt create mode 100644 python/cudf/cudf/tests/data/subword_tokenizer_data/bert_base_cased_sampled/vocab.txt create mode 100644 python/cudf/cudf/tests/data/subword_tokenizer_data/test_sentences.txt delete mode 100644 python/cudf/cudf/tests/data/vocab_hash/bert-base-uncased-vocab-5per.txt delete mode 100644 python/cudf/cudf/tests/data/vocab_hash/ground_truth_vocab_hash_5per.txt create mode 100644 python/cudf/cudf/tests/test_subword_tokenizer.py diff --git a/conda/environments/cudf_dev_cuda11.0.yml b/conda/environments/cudf_dev_cuda11.0.yml index bb2b92cbbaf..7c9fdc318c1 100644 --- a/conda/environments/cudf_dev_cuda11.0.yml +++ b/conda/environments/cudf_dev_cuda11.0.yml @@ -59,6 +59,7 @@ dependencies: - protobuf - nvtx>=0.2.1 - cachetools + - transformers - pip: - git+https://github.com/dask/dask.git@main - git+https://github.com/dask/distributed.git@main diff --git a/conda/environments/cudf_dev_cuda11.1.yml b/conda/environments/cudf_dev_cuda11.1.yml index 32e95123159..e278454d371 100644 --- a/conda/environments/cudf_dev_cuda11.1.yml +++ b/conda/environments/cudf_dev_cuda11.1.yml @@ -59,6 +59,7 @@ dependencies: - protobuf - nvtx>=0.2.1 - cachetools + - transformers - pip: - git+https://github.com/dask/dask.git@main - git+https://github.com/dask/distributed.git@main diff --git a/conda/environments/cudf_dev_cuda11.2.yml b/conda/environments/cudf_dev_cuda11.2.yml index 927a1ea12e0..02eb40893dc 100644 --- a/conda/environments/cudf_dev_cuda11.2.yml +++ b/conda/environments/cudf_dev_cuda11.2.yml @@ -59,6 +59,7 @@ dependencies: - protobuf - nvtx>=0.2.1 - cachetools + - transformers - pip: - git+https://github.com/dask/dask.git@main - git+https://github.com/dask/distributed.git@main diff --git a/docs/cudf/source/api.rst b/docs/cudf/source/api.rst index b4ca0321073..d3042be2129 100644 --- a/docs/cudf/source/api.rst +++ b/docs/cudf/source/api.rst @@ -206,6 +206,13 @@ Window .. autoclass:: Rolling :members: +SubwordTokenizer +---------------- +.. currentmodule:: cudf.core.subword_tokenizer + +.. autoclass:: SubwordTokenizer + :members: + :special-members: __call__ General utility functions ------------------------- diff --git a/python/cudf/cudf/_lib/cpp/nvtext/subword_tokenize.pxd b/python/cudf/cudf/_lib/cpp/nvtext/subword_tokenize.pxd index 3df0bbc0815..013ce9de8f4 100644 --- a/python/cudf/cudf/_lib/cpp/nvtext/subword_tokenize.pxd +++ b/python/cudf/cudf/_lib/cpp/nvtext/subword_tokenize.pxd @@ -3,7 +3,8 @@ from libcpp cimport bool from libcpp.memory cimport unique_ptr from libcpp.string cimport string -from libc.stdint cimport uint32_t +from libc.stdint cimport uint16_t, uint32_t + from cudf._lib.cpp.column.column cimport column from cudf._lib.cpp.column.column_view cimport column_view @@ -17,6 +18,31 @@ cdef extern from "nvtext/subword_tokenize.hpp" namespace "nvtext" nogil: unique_ptr[column] tensor_attention_mask unique_ptr[column] tensor_metadata + cdef struct hashed_vocabulary "nvtext::hashed_vocabulary": + uint16_t first_token_id + uint16_t separator_token_id + uint16_t unknown_token_id + uint32_t outer_hash_a + uint32_t outer_hash_b + uint16_t num_bin + unique_ptr[column] table + unique_ptr[column] bin_coefficients + unique_ptr[column] bin_offsets + + cdef unique_ptr[hashed_vocabulary] load_vocabulary_file( + const string &filename_hashed_vocabulary + ) except + + + cdef tokenizer_result subword_tokenize( + const column_view & strings, + hashed_vocabulary & hashed_vocablary_obj, + uint32_t max_sequence_length, + uint32_t stride, + bool do_lower, + bool do_truncate, + uint32_t max_rows_tensor + ) except + + cdef tokenizer_result subword_tokenize( const column_view &strings, const string &filename_hashed_vocabulary, diff --git a/python/cudf/cudf/_lib/nvtext/subword_tokenize.pyx b/python/cudf/cudf/_lib/nvtext/subword_tokenize.pyx index 9e1d73326fc..3cf3cbe1ef2 100644 --- a/python/cudf/cudf/_lib/nvtext/subword_tokenize.pyx +++ b/python/cudf/cudf/_lib/nvtext/subword_tokenize.pyx @@ -9,27 +9,74 @@ from libc.stdint cimport uintptr_t from cudf._lib.cpp.column.column cimport column from cudf._lib.cpp.column.column_view cimport column_view -from cudf._lib.cpp.nvtext.subword_tokenize cimport ( +from cudf._lib.cpp.nvtext.subword_tokenize cimport( subword_tokenize as cpp_subword_tokenize, + hashed_vocabulary as cpp_hashed_vocabulary, + load_vocabulary_file as cpp_load_vocabulary_file, tokenizer_result as cpp_tokenizer_result, - move as tr_move + move as tr_move, ) from cudf._lib.column cimport Column -def subword_tokenize( +cdef class Hashed_Vocabulary: + cdef unique_ptr[cpp_hashed_vocabulary] c_obj + + def __cinit__(self, hash_file): + cdef string c_hash_file = str(hash_file).encode() + with nogil: + self.c_obj = move(cpp_load_vocabulary_file(c_hash_file)) + + +def subword_tokenize_inmem_hash( Column strings, - object hash_file, + Hashed_Vocabulary hashed_vocabulary, uint32_t max_sequence_length=64, uint32_t stride=48, bool do_lower=True, bool do_truncate=False, uint32_t max_rows_tensor=500 ): + """ + Subword tokenizes text series by using the pre-loaded hashed vocabulary + """ cdef column_view c_strings = strings.view() - cdef string c_hash_file = str(hash_file).encode() cdef cpp_tokenizer_result c_result + with nogil: + c_result = tr_move( + cpp_subword_tokenize( + c_strings, + hashed_vocabulary.c_obj.get()[0], + max_sequence_length, + stride, + do_lower, + do_truncate, + max_rows_tensor + ) + ) + # return the 3 tensor components + tokens = Column.from_unique_ptr(move(c_result.tensor_token_ids)) + masks = Column.from_unique_ptr(move(c_result.tensor_attention_mask)) + metadata = Column.from_unique_ptr(move(c_result.tensor_metadata)) + return tokens, masks, metadata + +def subword_tokenize_vocab_file( + Column strings, + object hash_file, + uint32_t max_sequence_length=64, + uint32_t stride=48, + bool do_lower=True, + bool do_truncate=False, + uint32_t max_rows_tensor=500 +): + """ + Subword tokenizes text series by using the hashed vocabulary + stored on disk + """ + cdef column_view c_strings = strings.view() + cdef cpp_tokenizer_result c_result + cdef string c_hash_file = str(hash_file).encode() with nogil: c_result = tr_move( cpp_subword_tokenize( @@ -42,7 +89,6 @@ def subword_tokenize( max_rows_tensor ) ) - # return the 3 tensor components tokens = Column.from_unique_ptr(move(c_result.tensor_token_ids)) masks = Column.from_unique_ptr(move(c_result.tensor_attention_mask)) diff --git a/python/cudf/cudf/core/column/string.py b/python/cudf/cudf/core/column/string.py index e4d7b6d4188..044088b68b5 100644 --- a/python/cudf/cudf/core/column/string.py +++ b/python/cudf/cudf/core/column/string.py @@ -41,7 +41,7 @@ porter_stemmer_measure as cpp_porter_stemmer_measure, ) from cudf._lib.nvtext.subword_tokenize import ( - subword_tokenize as cpp_subword_tokenize, + subword_tokenize_vocab_file as cpp_subword_tokenize_vocab_file, ) from cudf._lib.nvtext.tokenize import ( _count_tokens_column as cpp_count_tokens_column, @@ -4617,7 +4617,7 @@ def subword_tokenize( array([[0, 0, 2], [1, 0, 1]], dtype=uint32) """ - tokens, masks, metadata = cpp_subword_tokenize( + tokens, masks, metadata = cpp_subword_tokenize_vocab_file( self._column, hash_file, max_length, diff --git a/python/cudf/cudf/core/subword_tokenizer.py b/python/cudf/cudf/core/subword_tokenizer.py new file mode 100644 index 00000000000..9058491d8e7 --- /dev/null +++ b/python/cudf/cudf/core/subword_tokenizer.py @@ -0,0 +1,295 @@ +# Copyright (c) 2021, NVIDIA CORPORATION. + +from __future__ import annotations +from typing import Union +import cupy as cp +from warnings import warn + +from cudf._lib.nvtext.subword_tokenize import ( + subword_tokenize_inmem_hash as cpp_subword_tokenize, + Hashed_Vocabulary as cpp_hashed_vocabulary, +) + + +def _cast_to_appropriate_type(ar, cast_type): + if cast_type == "cp": + return ar + + if cast_type == "pt": + from torch.utils.dlpack import from_dlpack + + elif cast_type == "tf": + from tf.experimental.dlpack import from_dlpack + + return from_dlpack(ar.astype("int32").toDlpack()) + + +class SubwordTokenizer: + """ + Run CUDA BERT subword tokenizer on cuDF strings column. + Encodes words to token ids using vocabulary from a pretrained + tokenizer. + This function requires about 21x the number of character bytes + in the input strings column as working memory. + + Parameters + ---------- + hash_file : str + Path to hash file containing vocabulary of words with token-ids. + This can be created from the raw vocabulary + using the ``cudf.utils.hash_vocab_utils.hash_vocab`` function + + do_lower : bool, Default is True + If set to True, original text will be lowercased before encoding. + + Returns + ------- + SubwordTokenizer + """ + + def __init__(self, hash_file: str, do_lower_case: bool = True): + + self.do_lower_case = do_lower_case + self.vocab_file = cpp_hashed_vocabulary(hash_file) + + def __call__( + self, + text, + max_length: int, + max_num_rows: int, + add_special_tokens: bool = True, + padding: str = "max_length", + truncation: Union[bool, str] = False, + stride: int = 0, + return_tensors: str = "cp", + return_token_type_ids: bool = False, + ): + """ + Run CUDA BERT subword tokenizer on cuDF strings column. + Encodes words to token ids using vocabulary from a + pretrained tokenizer. + + Parameters + ---------- + text : cudf string series + The batch of sequences to be encoded. + + max_length : int + Controls the maximum length to use or pad to. + + max_num_rows : int + Maximum number of rows for the output token-ids expected to + be generated by the tokenizer. + Used for allocating temporary working memory on the GPU device. + If the output generates a larger number of rows, + behavior is undefined. + This will vary based on stride, truncation, and max_length. + For example, for non-overlapping sequences output rows will be + the same as input rows. + A good default can be twice the max_length + + add_special_tokens : bool, optional, defaults to True + Whether or not to encode the sequences with the special tokens + of the BERT classification model + + padding : "max_length" + Pad to a maximum length specified with the argument max_length + + truncation : bool, defaults to False + True: + Truncate to a maximum length specified with the argument max_length + False or 'do_not_truncate': default + No truncation (Output differs from HuggingFace) + + stride : int, optional, defaults to 0 + The value of this argument defines the number of + overlapping tokens. + The information about the overlapping tokens is + present in the metadata outputed. + + return_tensors : str, {"cp", "pt", "tf"} defaults to "cp" + "cp" : Return cupy cp.ndarray objects + "tf" : Return TensorFlow tf.constant objects + "pt" : Return PyTorch torch.Tensor objects + + + return_token_type_ids : bool, optional + Only False currently supported + + Returns + ------- + An encoding with the following fields: + input_ids:(type defined by return_tensors) + A tensor of token ids to be fed to the model. + attention_mask: (type defined by return_tensors) + A tensor of indices specifying which tokens + should be attended to by the model + metadata: (type defined by return_tensors) + Each row contains the index id of the original string and the + first and last index of the token-ids that are non-padded and + non-overlapping + + Examples + -------- + >>> import cudf + >>> from cudf.utils.hash_vocab_utils import hash_vocab + >>> hash_vocab('bert-base-cased-vocab.txt', 'voc_hash.txt') + + + >>> from cudf.core.subword_tokenizer import SubwordTokenizer + >>> cudf_tokenizer = SubwordTokenizer('voc_hash.txt', + ... do_lower_case=True) + >>> str_series = cudf.Series(['This is the', 'best book']) + >>> tokenizer_output = cudf_tokenizer(str_series, + ... max_length=8, + ... max_num_rows=len(str_series), + ... padding='max_length', + ... return_tensors='pt', + ... truncation=True) + >>> tokenizer_output['input_ids'] + tensor([[ 101, 1142, 1110, 1103, 102, 0, 0, 0], + [ 101, 1436, 1520, 102, 0, 0, 0, 0]], + device='cuda:0', + dtype=torch.int32) + >>> tokenizer_output['attention_mask'] + tensor([[1, 1, 1, 1, 1, 0, 0, 0], + [1, 1, 1, 1, 0, 0, 0, 0]], + device='cuda:0', dtype=torch.int32) + >>> tokenizer_output['metadata'] + tensor([[0, 1, 3], + [1, 1, 2]], device='cuda:0', dtype=torch.int32) + """ + + if return_token_type_ids: + # raise not currently supported + # Can also return zeros + error_msg = "Returning token_type_ids is currently supported" + raise NotImplementedError(error_msg) + + if truncation in (False, "do_not_truncate"): + if add_special_tokens: + error_msg = ( + "Adding special tokens is not supported " + f"with truncation = {truncation}. " + ) + recommendation = ( + "Custom Cupy kernel can potentially " + "be used to add it. For reference " + "see: _bert_add_special_tokens" + ) + raise NotImplementedError(error_msg + recommendation) + + truncation = False + warning_msg = ( + "When truncation is not True, the behaviour currently differs " + "from HuggingFace as cudf always returns overflowing tokens" + ) + warn(warning_msg) + + if padding != "max_length": + error_msg = ( + "Only padding to the provided max_length" + "is currently supported" + ) + raise NotImplementedError(error_msg) + + if max_length <= stride: + error_msg = "Stride should be less than max_length" + raise ValueError(error_msg) + + if return_tensors not in {"cp", "pt", "tf"}: + error_msg = ( + "Only cupy(cp), pytorch(pt) and tensorflow(tf) " + "tensors are supported" + ) + raise NotImplementedError(error_msg) + + stride = max_length - stride + # behaviour varies from subword_tokenize but maps with huggingface + + input_ids, attention_mask, metadata = cpp_subword_tokenize( + text._column, + self.vocab_file, + max_sequence_length=max_length, + stride=stride, + do_lower=self.do_lower_case, + do_truncate=truncation, + max_rows_tensor=max_num_rows, + ) + + tokenizer_output = { + "input_ids": cp.asarray(input_ids).reshape(-1, max_length), + "attention_mask": cp.asarray(attention_mask).reshape( + -1, max_length + ), + "metadata": cp.asarray(metadata).reshape(-1, 3), + } + + if add_special_tokens: + tokenizer_output = _bert_add_special_tokens(tokenizer_output) + + tokenizer_output = { + k: _cast_to_appropriate_type(v, return_tensors) + for k, v in tokenizer_output.items() + } + + return tokenizer_output + + +def _bert_add_special_tokens(token_o): + """ + Adds special tokens (CLS,SEP) which are often used by pre-trained BERT + models to input_ids and adjusts attention_mask and metadata to account + for them. + """ + max_length = token_o["input_ids"].shape[1] + seq_end_col = max_length - (token_o["input_ids"][:, ::-1] != 0).argmax(1) + # clipping to take overflow into account + seq_end_col = cp.clip(seq_end_col + 1, a_max=max_length - 1) + + _bert_add_special_tokens_input_ids(token_o["input_ids"], seq_end_col) + _bert_add_special_tokens_attention_mask( + token_o["attention_mask"], seq_end_col + ) + _bert_add_special_tokens_metadata(token_o["metadata"], max_length) + + return token_o + + +def _bert_add_special_tokens_input_ids(input_ids, seq_end_col): + """ + Add token ids for special tokens ([CLS] and [SEP]) to + the start and end of each sequence + """ + # Mark sequence start with [CLS] token mapping to the start of sequence + input_ids[:, 1:-1] = input_ids[:, 0:-2] + input_ids[:, 0] = 101 + # Mark end of sequence [SEP] + + input_ids[ + cp.arange(0, input_ids.shape[0], dtype=cp.uint32), seq_end_col + ] = 102 + + +def _bert_add_special_tokens_attention_mask(attention_mask, seq_end_col): + """ + Mark attention mask for special tokens ([CLS] and [SEP]) with 1 + """ + # Copy attention masks for all but last two + attention_mask[:, 1:-1] = attention_mask[:, 0:-2] + # Mark [CLS] token with 1 + attention_mask[:, 0] = 1 + # Mark [SEP] token with 1 + attention_mask[ + cp.arange(0, attention_mask.shape[0], dtype=cp.uint32), seq_end_col + ] = 1 + + +def _bert_add_special_tokens_metadata(metadata, max_length): + """ + Edit metadata to account for the added special tokens ([CLS] and [SEP]) + """ + # metadata seq starts from plus 1 + metadata[:, 1] = metadata[:, 1] + 1 + # clip done to take overflow into account + metadata[:, 2] = cp.clip(metadata[:, 2] + 1, a_max=max_length - 2) diff --git a/python/cudf/cudf/tests/data/subword_tokenizer_data/bert_base_cased_sampled/vocab-hash.txt b/python/cudf/cudf/tests/data/subword_tokenizer_data/bert_base_cased_sampled/vocab-hash.txt new file mode 100644 index 00000000000..84b13c9d946 --- /dev/null +++ b/python/cudf/cudf/tests/data/subword_tokenizer_data/bert_base_cased_sampled/vocab-hash.txt @@ -0,0 +1,4382 @@ +26899 +27424 +875 +7428432802425011718 0 +5054974408289448963 6 +18358444369622338053 9 +5716902217424485892 14 +8236612966193239043 18 +15282833726017872390 21 +15533348956988973570 27 +9001315167781089284 29 +7621090240282984451 33 +15337888141402371590 36 +16169070283077377537 42 +15615300272936709634 43 +12338784885023498756 45 +3175624061711419395 49 +9436392785812228615 52 +12978641027296058883 59 +14468815760709033991 62 +15607694490571932163 69 +53295083356623878 72 +0 78 +2230148770582976004 78 +6120456721458209796 82 +15411373208619074054 86 +10274574020114097153 92 +9000294930530661890 93 +13031557903172483076 95 +11350066664294002181 99 +6325605033787362307 104 +2909954277284188676 107 +4104562716099355138 111 +3267092979937387012 113 +17525453481571210244 117 +11532627846208440834 121 +10784672185103672321 123 +11229796758348255749 124 +4379577250247562242 129 +1041161126836283908 131 +3854383966527313413 135 +16467720483237810694 140 +14820844471735454722 146 +13111220924289178119 148 +2548683052821249538 155 +719749806464434178 157 +2121722119826170883 159 +9005614210949580292 162 +7050169108294333445 166 +17351764915062575107 171 +14644698505496219141 174 +11657834349296686081 179 +13626797927783164930 180 +14735048589438940164 182 +1078491261937017863 186 +7952761372439242754 193 +7692446865301965827 195 +4552111108816020995 198 +12455022990418032132 201 +1123962659471997957 205 +3056549312838577156 210 +1025661670765243906 214 +5397331336358247944 216 +7810366437124875782 224 +1195318972358038531 230 +7079722807026103811 233 +2524512050942986248 236 +1208593608912656389 244 +458260789232344578 249 +13194777122325112327 251 +5922704468287492 258 +11746235869336195079 262 +8611574268876189188 269 +7889840228953421829 273 +16998721522558936068 278 +6703563424903621638 282 +8885848295085850114 288 +13776273837475230211 290 +6036043703810622467 293 +2006225773287659526 296 +14202467530861800964 302 +7157057020317447684 306 +16885485872491802629 310 +12800303798361952772 315 +621325108927868418 319 +16727475898656483841 321 +6890112792805515778 322 +2421332377941126151 324 +16243404411124196356 331 +179400401794890244 335 +2630159406474274819 339 +1306609735592145925 342 +14908020842914311174 347 +1684452927247835651 353 +9400495923215416322 356 +8041860727239247878 358 +5619270496913133574 364 +2985476283152588291 370 +18150632792370312198 373 +13075355875451793410 379 +7596576612263365635 381 +7174955249282660868 384 +2272878747426984963 388 +9645618748109430277 391 +5995177571885476868 396 +16871713338758691845 400 +11801224416933808644 405 +15551192014010130949 409 +8196030292452405250 414 +4794784530053649411 416 +68047322062825475 419 +10163451915097363972 422 +4366630365820669955 426 +9174613115382159879 429 +17673253091692480002 436 +10710744348807818249 438 +6301209632168211460 447 +6557199531177304066 451 +10370980735304160259 453 +2426040420413965827 456 +18123352379522220547 459 +15891150425892429319 462 +16507447417454265351 469 +487708338428237827 476 +14107089365716616196 479 +747857609528251395 483 +17357876987202521607 486 +321005419951863300 493 +703083947315053061 497 +0 502 +17149635587492691460 502 +8277651075246678020 506 +1819886593879462403 510 +13106328552418381315 513 +17519686381941948418 516 +10696099526822671877 518 +4627984173327437314 523 +2628632462897246722 525 +3686397216490033667 527 +6617920799692924934 530 +6679301623707790339 536 +2596030458845084674 539 +13288938917088308226 541 +8348492885671808517 543 +6252009608718840325 548 +5807005916268695559 553 +15382799971167504899 560 +14954638692016032262 563 +8963684459383523331 569 +2934745887866391556 572 +8236887590303639044 576 +2016330563068923911 580 +12976290063611676164 587 +9986513189506445831 591 +780378482699725318 598 +383862355994530823 604 +7511344867307093508 611 +1435616864863593988 615 +12590979271693393411 619 +859813995721111047 622 +17910873098448224770 629 +16703366890805911553 631 +6922480979814889987 632 +8200210214462711297 635 +18382541080931060232 636 +12959023536126992897 644 +11055794376142651906 645 +8668012051305565187 647 +6795201209679524868 650 +3864186432644490244 654 +4574634299775772674 658 +2086703290536303619 660 +7145543127561014787 663 +9889572542971630085 666 +3510566585561691650 671 +10482036181312531460 673 +4296479271603189251 677 +17165580381790665732 680 +17931697598514948104 684 +5072138329769649158 692 +17857316349005986308 698 +1196313437880152072 702 +16094827446472526340 710 +6365083142954013701 714 +17639674970007880709 719 +1336948026798963208 724 +15719079816546418177 732 +453771991153695748 733 +15666021623592344581 737 +3887496731301423107 742 +16351565489992748547 745 +12913808626051103749 748 +9427161342471792643 753 +14610089064185748483 756 +11909740995340709890 759 +3386059367942955011 761 +7100313088634791944 764 +14954362273735097348 772 +5300343188950335490 776 +3306636399811602435 778 +15049176780536452612 781 +11478464585367391747 785 +4192691696663825924 788 +1724981527538165256 792 +8923121468991320579 800 +10407927314751914499 803 +4140577061391662082 806 +11024499228689010181 808 +11103397578962422789 813 +16103730809841527300 818 +2161511371026989571 822 +16905537098408481288 825 +14418359835235787780 833 +8643099440826274820 837 +15803230958149170691 841 +2270949347024239618 844 +16607521085023703556 846 +12520505897845165062 850 +10502193626894192132 856 +12350321094518214659 860 +4950437143309872131 863 +938542234576037889 866 +9547302901107668484 867 +7827404372121768966 871 +17757593377946824198 877 +13699186867246955524 883 +9859653826627356163 887 +16394835100035514883 890 +13800374264730731525 893 +16954635983094506500 898 +8015308433863798275 902 +858715644299290630 905 +4519655150699331077 911 +7134867591233050115 916 +6432786657037144579 919 +0 922 +9408341322832972291 922 +13653279902433200130 925 +1249019122170091524 927 +5444522055126761479 931 +18233734556082323457 938 +1838285473517654531 939 +10799019207790220804 942 +2448710159565130755 946 +18425837006146807297 949 +1384258267102048263 950 +6553795393861204486 957 +5022631533298058243 963 +2595435540421003780 966 +18298501952506793480 970 +17380720526409169413 978 +10291550905275666437 983 +8968303908578660869 988 +7762552109517888009 993 +12993351549860134403 1002 +13098482377540869636 1005 +17174134275815044100 1009 +2405939573849534980 1013 +11051603729345690626 1017 +2765842466801084934 1019 +13348255112383532037 1025 +4560899789258637829 1030 +17071422935680193539 1035 +11513452937230732294 1038 +1637355496640499203 1044 +14940739688966611972 1047 +8286559267538602502 1051 +6029036263825492484 1057 +6337648087046756355 1061 +12327119652833755139 1064 +7489768843341343236 1067 +17101806024406781955 1071 +1494687508867621385 1074 +915975103999953922 1083 +14731060910946571783 1085 +7993361195780195330 1092 +13688799604315935236 1094 +7328858946338903047 1098 +2913637027195678723 1105 +18189363439163655681 1108 +11261484070936291332 1109 +1244962005334571010 1113 +12618388435910808066 1115 +655187203027088898 1117 +1699259352638115337 1119 +9837815037477742085 1128 +10558465000768489987 1133 +3128326958710492164 1136 +16210393874387209731 1140 +3831602806328386054 1143 +1858477608543888899 1149 +11203849268139405826 1152 +14876215834473532933 1154 +838167957834962945 1159 +4472540425609859076 1160 +11410947109444917250 1164 +8435818218907397633 1166 +11045000766266457089 1167 +12325335880954441220 1168 +16708265953266297345 1172 +18342265362969646594 1173 +6953158344648897539 1175 +9922701673105435137 1178 +10113283973443524101 1179 +11668798096262926343 1184 +2129351334726026241 1191 +5692959118811792390 1192 +2917574127780044290 1198 +0 1200 +14420924818562740228 1200 +6098057863303978497 1204 +1252966646111680002 1205 +7111078464697947144 1207 +14144456899593720327 1215 +7367692118573781509 1222 +9319588592876439043 1227 +5212294342286609410 1230 +1600499660866511361 1232 +17579747388547180552 1233 +8365608306992954885 1241 +10307394306592963076 1246 +17092600292669807621 1250 +17030981925892977667 1255 +6929843536411176451 1258 +9908722951841282057 1261 +14685407131320535554 1270 +12861962652898171396 1272 +11958437143660911107 1276 +15904867421058229764 1279 +7283769647955500035 1283 +7872121678898447876 1286 +11726527760261815816 1290 +2316085662456682505 1298 +12840093831481137155 1307 +15574983692566917639 1310 +15176154862895929860 1317 +16186650646772958214 1321 +1965140296142659588 1327 +17362020270091437575 1331 +26356620300320263 1338 +4688323194808506371 1345 +470137109846916612 1348 +785647648524588041 1352 +686083037273571331 1361 +8705676087000994307 1364 +15985311040931325446 1367 +8848102120172622345 1373 +14900059783221505542 1382 +11611185676221023751 1388 +5823293000835959809 1395 +11173877492782561286 1396 +5985141512875075076 1402 +16607272189142469634 1406 +7000924871247012354 1408 +12796508861938638339 1410 +16352304696891085315 1413 +12654027566339262469 1416 +17652126895193709571 1421 +2059554016646703617 1424 +8824828815238545922 1425 +8026041213654553606 1427 +189105210507091461 1433 +8038465995762949635 1438 +0 1441 +4346653818095449092 1441 +13441396742193060358 1445 +5067771148519478785 1451 +210369551309682178 1452 +7856429334361659909 1454 +6456628847560069634 1459 +4777640967745320451 1461 +8983636279512822276 1464 +14568805960710332932 1468 +13817574021643753989 1472 +14625711259902278149 1477 +4632056779689710085 1482 +17613320542667293189 1487 +3172012402848437254 1492 +8040798394603101188 1498 +14064841209998140419 1502 +1914908168343121410 1505 +7368139610144548354 1507 +12868473585497306119 1509 +0 1516 +1618708134596732930 1516 +12587973098332420105 1518 +4964388169698209795 1527 +11644359715676310021 1530 +2644060095775605251 1535 +6430078223195648003 1538 +10183198452214045187 1541 +1240799682393062914 1544 +594310634075621378 1546 +2369514519273954820 1548 +10180653661786314245 1552 +954303650251543043 1557 +14430712698160791045 1560 +7362398115224322564 1565 +17170839233019868678 1569 +4334478792852912645 1575 +6976600872204725253 1580 +2757627166710815234 1585 +11581525848542896643 1587 +1902097979216049156 1590 +7092174838851165700 1594 +3776232881097953287 1598 +4956341896516184071 1605 +16560365104979398147 1612 +9985649880040289799 1615 +8870322153106933763 1622 +6905121755133908995 1625 +13368640352340902916 1628 +6681848478588709895 1632 +1825204937600832520 1639 +10492979809894170628 1647 +16021790814379410438 1651 +2537982728896871938 1657 +17110141827238231043 1659 +8972517116882764291 1662 +6878463938568223238 1665 +3653948979877717506 1671 +11414481194651397126 1673 +14522267179648162819 1679 +3098339502618796035 1682 +7079749050994126342 1685 +13571764215085394946 1691 +4748948606525397506 1693 +1577643399485818884 1695 +4080235243237779462 1699 +10874175738252140040 1705 +8407257242091918850 1713 +13208300770644489219 1715 +692428139842995202 1718 +1811883090719733762 1720 +9059362818280152070 1722 +1942856588307002885 1728 +8118332366482353665 1733 +4958069245857057284 1734 +14647311378680886789 1738 +10762024033896625670 1743 +28898254948429830 1749 +9834906317233815042 1755 +14985989359682912259 1757 +1282980713864208388 1760 +6063131598875265027 1764 +11171681444901584901 1767 +9942643440891227650 1772 +7536761905759707139 1774 +17586310513048226310 1777 +5368266791748388869 1783 +14231943828217691651 1788 +12518647321260815877 1791 +129394441281844743 1796 +2483490487411335170 1803 +654244401428041732 1805 +15646533714849457160 1809 +11807354932867949571 1817 +15902831808268765699 1820 +16275101253541722114 1823 +7489443708629377026 1825 +15395914353243975682 1827 +5617555619731661829 1829 +3134100206450675206 1834 +11607495136261988868 1840 +4974806308616426501 1844 +17446584074836170241 1849 +15686830167444742663 1850 +9706307518401206273 1857 +1668062460313515521 1858 +1175330870409010693 1859 +6316020408117881860 1864 +3926008952689808899 1868 +7412001888157663237 1871 +16350342416828571139 1876 +17722048717800707588 1879 +6638262866276511751 1883 +7428951476729761793 1890 +17816197047883941382 1891 +1346568064340942337 1897 +3701787015222295555 1898 +6659812133237486083 1901 +1828541539854978054 1904 +12379063259192634885 1910 +2611769333840765443 1915 +9618163593004828678 1918 +10135224491789939206 1924 +12979651712861326853 1930 +8882180359699969027 1935 +8839565787481092102 1938 +13328456084920556038 1944 +14232512278042323458 1950 +1868952656876792325 1952 +7567044498348088836 1957 +9878469525845452294 1961 +10877666723773861891 1967 +4437849393189355524 1970 +542122243470857732 1974 +4059190346138068994 1978 +14321675947144358916 1980 +14971180244834539009 1984 +7944574903635664900 1985 +6982417546170903047 1989 +9205813465909939715 1996 +14237044737088801799 1999 +636814072910696963 2006 +12520841226045264391 2009 +8898943418672995331 2016 +15646690259358356484 2019 +15618851112604340228 2023 +10285088843216830977 2027 +18286036510192394760 2028 +6450286360774949890 2036 +12025307250191760899 2038 +7044602746592181249 2041 +8270361223031661060 2042 +7199149542695273990 2046 +16798091800673956358 2052 +5285433079037354499 2058 +8498140496880657410 2061 +18434636390635965953 2063 +8780418579830073348 2064 +959965579978681347 2068 +2666650386212475906 2071 +4093783342266269185 2073 +7977153448080645638 2074 +3230317076849645570 2080 +2644129221999468547 2082 +7597431151331275265 2085 +6151418962808616963 2086 +16786361788616914434 2089 +9522044737514147334 2091 +15360350686533802498 2097 +4398995179394704386 2099 +4163122903470647302 2101 +18110267126768664070 2107 +17811600627481865731 2113 +11988559903619469315 2116 +5893679902922151940 2119 +3302430115655037445 2123 +2756050317441962502 2128 +7373324598575981572 2134 +15626353672087051269 2138 +9026268416534243843 2143 +5857105831257628164 2146 +11246462751297413124 2150 +7459631049065515526 2154 +2175352842263141379 2160 +9748465532031254533 2163 +12060676108130005507 2168 +8160425232164846593 2171 +1665947540125783558 2172 +10758171140537368580 2178 +5744770555727548418 2182 +15867521551313803780 2184 +11178209498970826244 2188 +2663862265833334277 2192 +646145646253570050 2197 +6886825228888300036 2199 +5219187155516171272 2203 +16142200027647465989 2211 +8727938199665870852 2216 +1200328579526163971 2220 +12449385538114001417 2223 +14632283715533800450 2232 +5295800027246062086 2234 +8827019094633400323 2240 +14543826221768176641 2243 +12388128316821831686 2244 +3087048392675298821 2250 +17669786912563615747 2255 +3879520399747123716 2258 +15648071975541157893 2262 +5580473107362200071 2267 +6895786389712974853 2274 +17709709086906012676 2279 +9627483233657542665 2283 +9602326803985618949 2292 +6748599026443758086 2297 +11488364339401397254 2303 +6716511183525677573 2309 +16003763240189186563 2314 +6003803301075291138 2317 +15800367754014516746 2319 +2817341800198731782 2329 +2110085916033252869 2335 +10353852055773781511 2340 +8745468498457416193 2347 +15197463976907486213 2348 +11844773108515011075 2353 +10745169896165544965 2356 +9502565595236673539 2361 +18340734722524717062 2364 +0 2370 +4877506240735029250 2370 +6632868101528461318 2372 +1094192348264738308 2378 +15930308455756352518 2382 +7517061312773919237 2388 +11537382714050522116 2393 +15343851421525887493 2397 +15685583084244037124 2402 +11443729733346354693 2406 +18096845502703148037 2411 +13060060807344890377 2416 +8226818503915081731 2425 +5171144332412330499 2428 +5367144440061049859 2431 +4687503341676126209 2434 +8115677569098133507 2435 +8753274682505368066 2438 +6767268893840927749 2440 +10747160183142327300 2445 +5318831768157948930 2449 +16744837601970291208 2451 +3968740997769839108 2459 +1041860322726726147 2463 +13185494599343868419 2466 +3781663100474830852 2469 +8664347289501861378 2473 +7145447006642560001 2475 +977858689003972101 2476 +188865761021926916 2481 +14781205616979726850 2485 +7514076159997088261 2487 +15227633270557658627 2492 +7486357174119883778 2495 +7899052859637422087 2497 +4312982947448530435 2504 +2484418012864310785 2507 +8450324929602980870 2508 +11374778755239228418 2514 +10780034123560756745 2516 +10313953391808102916 2525 +13836623279669341188 2529 +16297706918062760459 2533 +6404560275247226885 2544 +8323769790774729734 2549 +10061687257419431941 2555 +6724033317759518212 2560 +12265972209834273288 2564 +4748706107567735299 2572 +17588235414846031363 2575 +16029681841978911746 2578 +333014962274056196 2580 +2819861156000228870 2584 +17301319418358929926 2590 +14323022738651812355 2596 +17758251407482208260 2599 +9992216596142364674 2603 +5541911712511293955 2605 +1880849355295036931 2608 +15421034026101803523 2611 +2288503501826235907 2614 +2336333131728265731 2617 +15127408664422292997 2620 +6756061181968708102 2625 +2316367058427453443 2631 +13786932856453332482 2634 +17564157627292750852 2636 +5809790665868502019 2640 +9389430036410766853 2643 +15157257604368261123 2648 +523412383725034497 2651 +5270886391729814021 2652 +8987256414287503365 2657 +2751897370690544643 2662 +47819066577966599 2665 +9543124453318907909 2672 +15186331456703232514 2677 +9731347057535958023 2679 +6234700495105510914 2686 +17720066604242729989 2688 +611878128332703234 2693 +6029104170087404549 2695 +14612606995632327172 2700 +7357792311987945475 2704 +6074856230289873410 2707 +13368808999886628358 2709 +5918378978107988995 2715 +15624776793824203778 2718 +4241055509726121476 2720 +12687432015779367427 2724 +4003272975122620932 2727 +17483676776191982087 2731 +2701605488646040584 2738 +7387630099939362308 2746 +16331822462747681798 2750 +2197183442359868933 2756 +17624623361194542087 2761 +1749450990014992388 2768 +2888206094896619010 2772 +12985412669390948353 2774 +9843120678422464515 2775 +15590458610270713859 2778 +5950622975418741251 2781 +17607672802725530117 2784 +1225097419526011394 2789 +3758572251524375044 2791 +5891371767718009858 2795 +6843754938996156419 2797 +13418347525088883204 2800 +2887280155684756490 2804 +7867196614872225796 2814 +10992396837241625094 2818 +15526482250456426497 2824 +7582254907030848515 2825 +14309589056601523716 2828 +2843794758628944386 2832 +10106627892829635078 2834 +11117505412117820418 2840 +17559521087909430786 2842 +18410508844162253834 2844 +7796754440171003912 2854 +1826091018065355268 2862 +5568124937607335426 2866 +9164033835486570503 2868 +7917102923116225537 2875 +10708221634884163076 2876 +966446973350329348 2880 +1882776320247897092 2884 +18137433528115911172 2888 +7577505208556149252 2892 +3902521102041700356 2896 +11942362790107158020 2900 +2328713611561709573 2904 +8376513561567004165 2909 +18415012889800110091 2914 +7983446382889179652 2925 +2304166271864391689 2929 +708759182721729026 2938 +10774631175750681603 2940 +2608247964063907842 2943 +7317603117343176707 2945 +12615180422705001477 2948 +17995452459822326275 2953 +12439250137675515394 2956 +9947610136498965509 2958 +10340600516380348420 2963 +10073894039732477444 2967 +15954561361998232578 2971 +6039226287079734788 2973 +12684813664097613833 2977 +8337524429261820932 2986 +0 2990 +5738139389410570757 2990 +0 2995 +163262518049440773 2995 +11390362112332120070 3000 +7666496378417453571 3006 +17188351170280199170 3009 +14157925477049500677 3011 +16535316221715341826 3016 +701193705161007105 3018 +15417977144980853763 3019 +9623949443365348357 3022 +16537640731048440324 3027 +9880057250380779521 3031 +10507448958568448514 3032 +9901540867816521219 3034 +10882434502571251716 3037 +15939490563935542790 3041 +3818155241101528578 3047 +10810785028031231493 3049 +17268925026504538113 3054 +6000103580025957894 3055 +14492044616225970179 3061 +8964295197943843335 3064 +13244227239481936387 3071 +2072267724499101186 3074 +735562179013069826 3076 +3271477415853879302 3078 +1150251700717751812 3084 +11835839830005115393 3088 +17028480913889055238 3089 +16864969398419772420 3095 +9646252156141336066 3099 +5589333819644110342 3101 +14729039479109188098 3107 +2256025994407046148 3109 +5630416426912279555 3113 +23611161351524356 3116 +16061932977440933889 3120 +7560058124185071106 3121 +8943767870065516551 3123 +17388385529962317834 3130 +11686727589179028995 3140 +2993671307613155843 3143 +7451626547139373061 3146 +12726375988952098305 3151 +0 3152 +1735273330892205060 3152 +2746028049042776065 3156 +17093562035495421445 3157 +7598703106262353411 3162 +17526920923827930631 3165 +0 3172 +18087597149122765317 3172 +11336730259137625602 3177 +9704022087244797957 3179 +14531181144788964866 3184 +5103530438547424773 3186 +7049971328222257156 3191 +2593832991454060548 3195 +2549992206172832771 3199 +2656864556911864322 3202 +3094347590740453380 3204 +0 3208 +10556974365044028932 3208 +12597146506913681926 3212 +18243354473097630721 3218 +4168646291002030084 3219 +8893226051755120644 3223 +7904367695210051587 3227 +17247367703075879942 3230 +1338287165638264836 3236 +6734394253777139715 3240 +14645087877274778627 3243 +1841749727013933062 3246 +0 3252 +9793622484838288388 3252 +15384076833580083718 3256 +14678310837729104389 3262 +8947895455599830021 3267 +12421729442783160325 3272 +14382812703434878978 3277 +3484468606955360259 3279 +2411175954345499653 3282 +18322361710054416389 3287 +8989744845956541448 3292 +9637438279185886726 3300 +8282725403817063939 3306 +10727259769060221446 3309 +280860399088910340 3315 +3074647116268871172 3319 +9311932047626983431 3323 +2990333995786696707 3330 +11415454184475025922 3333 +8194042667332418565 3335 +11269986522125913093 3340 +10773634478079810565 3345 +0 3350 +4302235270674672643 3350 +4579270605621971460 3353 +3687011949425630213 3357 +9678333478858482691 3362 +14661606109051090440 3365 +9504123850532876291 3373 +14299233528797568008 3376 +10370491504729965060 3384 +286239823911254530 3388 +7969121812144744451 3390 +16606218867148559880 3393 +11756345184017143302 3401 +8204961944753809412 3407 +12456910480062157316 3411 +7569786299014196739 3415 +3372309516929818119 3418 +16631131943564946948 3425 +4436969913528429575 3429 +14467771002258720772 3436 +15278270405312088583 3440 +6638334178561090565 3447 +8154814430089498114 3452 +17289464348431017987 3454 +13185969354886446085 3457 +4725380864147687429 3462 +14933071000620043778 3467 +12471883028204926466 3469 +13286302152236950530 3471 +12020003522260348419 3473 +11784545509165047810 3476 +10311182359550097412 3478 +2262872037167824902 3482 +15672162207595698690 3488 +8479660175647360516 3490 +543122224331105283 3494 +8738610060644560897 3497 +15969479020845567490 3498 +3500 +5303047073946667464 +210658854139 +493093586 +15289397349632312454 +5941764183477191834 +3477193953305167424 +236453760381 +7470284155521404014 +24445261 +16426766960960540026 +14549236 +817365937 +1873618471841499416 +71893492 +10694515171064744788 +29330183088506125 +61997475 +4653200 +109445719 +8926052536804313893 +7528330190111771360 +1418462186 +5887104182899575287 +2625321597997091447 +23407864425745813 +1647838213 +6152225753094686522 +14151987057237756511 +18058417591402760409 +538510099 +17855463731522440261 +240752528220 +27920040887059601 +11078361536363433136 +12517601 +15885957841278600403 +518718202 +805438326 +2621553 +1550910461 +2411070513 +59965836 +13012951802392676509 +97518103 +2625321602295859611 +30277976 +546374457 +16759426304739641933 +259654328 +27356063970624739 +1873618458944931675 +6209987959894902621 +5728764444739437994 +18413109988782047308 +13885455448020813663 +13464164481390611573 +5514354709969504081 +6364097374632348674 +2676033351739376985 +1136798196293306910 +5299098874403555921 +2120987217453057458 +17306856587979066781 +1873618532028844481 +5572365145471912335 +18412263926676652075 +105382480 +5303047039553965447 +9881712940254169714 +152830562 +8610102806501591788 +15524263781940136850 +14282671233461718187 +2857298572705729021 +29330122900898936 +10554335258691243263 +8453377129057749572 +18411417864571256842 +811271050 +1873618489038604579 +4657106642463886071 +2676033356038145381 +514654951 +10757572347027851837 +4237766514325588729 +571999061 +9821766011288487605 +7230168968130792223 +2704904949959166469 +1823671323 +103350839 +46006654 +2755882956846859930 +15289397371128186695 +12662636664722033563 +16318735 +18411417894664929297 +5462796894122411284 +9950019064427710530 +6981729909914862956 +1992588707391932346 +63766972 +6422699 +23407808536904833 +15394822466617412826 +16881139139804531782 +14312300901618944289 +2625321593698061230 +9870724570679212 +5780604289886653255 +3870997034531752803 +2531021389865944442 +10908568553618343357 +1860700038481053299 +196215461 +1801847830 +24183115 +18424247431471827427 +14287090 +417019855960 +71631344 +4391052 +61735328 +18413674012989259870 +2625321597996829544 +17957750408840481687 +9870724568648556 +41943405 +2789363542978135882 +18412827950883864637 +548143940 +22151483 +17257283845880874759 +899112529018292807 +538247952 +69599701 +8510664359869943178 +27356081165698156 +27638084672359236 +12255453 +11400819049620310987 +1321272283 +16881139122607162703 +2359405 +3101815889301670444 +518456056 +9232147856523987724 +3758799212073651272 +3591160524196219107 +154600049 +17946608694533885076 +11500631658516907905 +825323275339564903 +9870724566615620 +39911783 +12318365723907459763 +546112310 +18412827980977537092 +536216330 +2676033351739114988 +11069796553860646809 +7880043043777809442 +451412296787 +18411981918872141859 +11678577273375754735 +8856014234050823647 +105120332 +1309344723 +162464400 +681145240220010584 +2626514825137096412 +6589396841525218018 +356832249381 +6156738032733324876 +11202456151687629452 +27638041680086900 +11243723090649876783 +5726358144768542273 +12498251711624252784 +13702827714901707594 +811008904 +8192198 +8714520725396523830 +514392806 +9960543895307946415 +15287141235608259625 +5727354401416546168 +1808894516123993997 +3686437022462641529 +5249797181178709209 +2625321589399030850 +103088691 +3062219857732765097 +830399540494469985 +530117487457144076 +12454108019635062383 +197984938 +8930986418384079868 +818873277 +16056587 +11526999220155450649 +6160551 +63504826 +7621890105505615217 +11847668763332905754 +10377426660276898779 +1873618519132015281 +18092519415945890646 +15882855708139391266 +7993599274919922706 +2789363538679106064 +2150364451440035988 +9870724570416301 +2625321593697799226 +91161094 +1410073577 +23920969 +7513578521803359945 +22279798815198594 +15520597512816297356 +1023125932615797552 +540017436 +8910392170935354895 +195953314 +644809585 +14024943 +71369196 +1873618476141774348 +816841645 +10906583479868327250 +1454041666728626384 +4128904 +18413392005184749654 +108921430 +468609401971 +16204201012116260706 +99025451 +9870724568385196 +18412545943079354421 +11878630053446878902 +18204249488608200784 +5566476545725367766 +17951898368652543383 +7558005371879033601 +16542141154387102177 +6316393479032998553 +11694336983993944146 +11427331956784106382 +4662073785906890031 +1873618454645640429 +537985804 +12999620585941961275 +2295119206548507606 +11993306 +1597536180772867045 +5299098844309358384 +8294669686619703163 +69337553 +1873618506235448739 +518193910 +5406444726343502428 +16765215479188031591 +5460499803636172954 +3431717683755289915 +28202117477106938 +5249797172580910311 +5745384143842643344 +14065038233622153931 +14311172801615955497 +16758489844492275047 +5510538272098551989 +11065487220741573048 +9870724566353399 +5679882735784101879 +259130038 +87097857 +3491703471172619422 +545850164 +18271599167641487963 +5991347923196709309 +1873618458944406678 +7033448275620070919 +812778389 +434977997061097911 +3445982126355516078 +2676033351738852867 +3545799512027105927 +1873618484739311861 +12749251354825264418 +14836382508930370955 +2625321585100000596 +21997756618246082 +8716776809328151764 +15580874176502892132 +3332575624131774585 +4445946672738010859 +5780604328577598853 +2848264744227112681 +1873618441749072804 +257098416 +4930631980557601532 +6877319166685482198 +1005889956380019628 +820642761 +17826079 +23125779236849772 +810746758 +7930050 +8929320279979198383 +9654763076979264499 +11949535972653271176 +1873618514832984063 +514130660 +18066207382028748450 +2573543666009114673 +18613585580197092 +1427238547443354327 +2625321589398768544 +102826544 +5903884228619468800 +4279043148 +7036226112429884975 +818611132 +15794439 +3324580943442478547 +1903640920853056624 +5898403 +1873618497637649718 +1133620887485417426 +10156853965084755435 +63242678 +282723005 +13586095437453200186 +9082058141968173941 +1987794462939089941 +13237708531286474753 +5240852582657493474 +1915314009235720841 +9870724570154139 +90898949 +17090754651615726815 +492307151 +195691169 +11050161621988804687 +23658823 +11623400942792738969 +9304480456320748248 +71107048 +816579498 +23971751058934778 +17869638717220195611 +1873618476141513316 +361675971417279818 +61211034 +1873618501936418049 +3866756 +567411536 +5302201063430292982 +8486888319115725460 +12406930521299355297 +9870724568123690 +11034422950646711803 +4287350254045103750 +5566476545725106758 +1923875870 +547619651 +6366353527348595732 +8597156797828894009 +13590665243542948895 +13237708561380147208 +4254959725487523541 +2907303882175415846 +1873618454645376983 +9230753948926543533 +11731158 +527827717 +5511666307614640107 +1330643932 +69075405 +28202091681942395 +4727296740454696303 +1992881785902860007 +18301216972081072101 +4076606659425995504 +9870724566091296 +39387493 +154075756 +5459976644113468289 +545588016 +12461042340477994821 +223556406340 +32432337723721245 +19595563 +2573543610120276856 +24535874149025753 +5196265237615086368 +17735566651085687884 +6204347601746593065 +1873618484739049815 +812516243 +6152225714402428442 +15291935501556190620 +15505670362359531298 +451411772583 +9484411285755463284 +161940107 +15292499508566297469 +563348302 +506004186 +11238431078799509026 +18323667541285735009 +2625321610894640833 +103179363763488430 +503001580666 +12769025487284210679 +17785259844527786731 +29612147900877606 +15290243377345399572 +17563932 +7667902 +3186488476490139978 +810484612 +1192315333980326167 +1873618514832721746 +15292499491370961900 +513868514 +5347351719937377689 +45220217 +11775490430040476325 +12240192446106372977 +35324256 +2396555433535145871 +7409502855497715015 +7888341864134085054 +4278781002 +1732546121802517809 +2374936041605498895 +21433680820701635 +12189960762281954023 +869984510486186619 +3598203394278688718 +6103488079777762245 +72876542 +16990917635978692369 +818348984 +15532291 +1146796961722731823 +17761874897365304540 +62980530 +4534407021717882867 +5636255 +32714379920409891 +12552846396214610071 +6262673798361580735 +2528483177756102046 +9870724569894177 +9297735470756268616 +5831598115918776853 +32432303331018178 +6064762127302393958 +6156455943246842659 +23396678 +13500652 +16916327697533962956 +70844900 +816317351 +18411699885273055253 +5884848047378859255 +5837238405281154301 +14311736903207619026 +5141736951422061236 +3604608 +31022281504523376 +3599049409094225259 +577045344 +2974323816123992770 +8021450341214588326 +3577503648415550265 +509805280 +9870724567861628 +11098517635487303139 +7462549834646555859 +98501157 +5779476207078475458 +219257375260 +490013379 +4222974949961697922 +6366353553143235674 +3158171969379764633 +21365044 +27638058876667848 +29330140097217635 +1873618454645114642 +2703776923039566000 +68813257 +279448782049 +814285726 +12237654319976351671 +517669620 +5779476284463187670 +10375505326587315831 +18411699915366727708 +6205475624366966000 +3307734082 +39125348 +1087507565178193378 +545325868 +15986098390340470919 +223556143025 +19177592590632702 +8865366478519731984 +19333416 +32432337723461001 +812254097 +11305519054433421356 +1873618484738787248 +5105416417023100899 +572982104 +505742040 +563086155 +104333894 +8070528080642443989 +11327137566841769230 +2625321610894378836 +16377260960560187819 +15586729198848181726 +1873618441748546884 +18413109971585663048 +4825924017323379312 +5915592292141435844 +5832726151436896491 +17247780946628644032 +810222466 +7405754 +11549275701007551889 +10161648502327149991 +570950482 +1873618514832459339 +313841222762 +4452458274095237609 +1445774942907271091 +6101795934071424788 +92406286 +5293539447540681024 +18331491793766525 +197198505 +11199980773228349986 +32432320526091507 +818086838 +1997667722089860216 +2524806027085153844 +1964966944 +15270143 +1370042529145686776 +5565348523104797810 +18331539082773742 +62718382 +2012415014 +18413110001679335503 +5374107 +14282027259104724924 +10375505339483621145 +9887461037680036022 +1873618544926132491 +4662355883991631380 +18412263939573940270 +157614716 +3295137431799204142 +9870724569630759 +491782859 +214958343888 +16875205763331852041 +7241607903360452069 +5408471212899110030 +23134531 +18411417877468545037 +27356081166681957 +644023149 +70582752 +816055205 +3342460 +5246976952665638015 +14212253575230457510 +576783198 +1842511416005692464 +806159226 +5566476498435574920 +15292217517958891614 +13516735047310051359 +5728764487730398405 +468608617008 +4025969582498383295 +16044698410490725659 +1519546451849645365 +9870724567599405 +5566476545724581156 +5619444426388998007 +98239009 +547095362 +27356033875641745 +219257112483 +8140646021471143544 +4713167439824750602 +16357059045845960667 +5462796881224795644 +9138963602338286574 +21102898 +10905173367761798655 +13701595356116683915 +2477484405147109478 +1880166538706292058 +11206864 +1283692271244348427 +68551110 +5885543833259674054 +18413673995792875610 +2352415791 +14947075702982868 +5299098870103476096 +681145240220994278 +163447447 +331038328206 +38863202 +96207382 +153551462 +2625321606595348609 +5461104757014004985 +10744889200825601240 +1988559907 +258343605 +6517011693716180143 +535167753 +2530175340657839273 +811991951 +15291935475760762248 +4397798264919820154 +18413674025886548065 +12109395139072755174 +475082778886408323 +104071746 +161415815 +8697110475982376165 +15584540329550678645 +13669583335851559254 +2625321610894116800 +1873618441748286746 +18412827963781152832 +819856323 +6209141854797957852 +1783548230307677653 +18411981901675757599 +637928298 +7143606 +15855332315905657597 +2625321864544389907 +12020808312486431384 +3076135121411313050 +10139438201185111279 +6152225744495577231 +33560368941368890 +210659313158 +4278256712 +27638024483702949 +24904017 +32432320525830439 +13263754581809432790 +817824692 +15007995 +359800716494834349 +18613516794268696 +9839328478246341893 +62456234 +5111959 +18411981931769430054 +16219982623696489082 +6261827792145090364 +7692717626264324682 +42664306 +13806855580317125108 +9870724569368358 +16269555352897260337 +214958081659 +11214563466575480865 +15636771529559117046 +13271165719268362246 +2652485274356286816 +538968856 +3784724792312663401 +18263821886743185772 +1986666427421953426 +5565348480114297669 +5352348827359053328 +12976359 +1873618476140725820 +421319345246 +70320604 +11703165067112811597 +21715697223994697 +3757107087862401328 +60424594 +3080312 +10697899350700788395 +1873618527730534170 +468608354196 +509280991 +50528646 +1193603335023233930 +16635669954819197974 +15426482629288462533 +5460499803637156023 +2625321602296318353 +9870724567336570 +97976862 +8818864638845060491 +14288223544298637564 +88080898 +6996745855548787140 +5566476571519223063 +546833214 +220421203678071202 +31022238513759415 +1873618458945389823 +6406389097441592980 +20840752 +813761433 +27356085465188671 +68288962 +5865888353649363875 +109394696450803010 +12213481117926952067 +18413391987988365394 +10944716 +517145329 +5723537903358642458 +21715753112570631 +7758478083289188556 +10675690836223986039 +153289315 +95945236 +11547019543992076059 +9649086479758069023 +2625321606595086582 +258081459 +544801575 +5887799994573980828 +2845029447323880298 +18809125 +8510103668314541335 +6205475701751155414 +1990332636357069057 +429916882098 +2673382969485886910 +1873618489039064439 +18413392018082037849 +10914208898869168291 +3773122177597967623 +161153669 +103809598 +14107087915135404740 +6366071515245381876 +18412545955976642616 +15289397371128645360 +5462796868327967227 +1402930148 +28202057290482949 +797695489810761887 +16777494 +18116142943679220675 +5142301044413893172 +17219576355390295334 +5249797112394286460 +13735950183222348532 +6881458 +29048192479791616 +16896582888638318388 +14517406836956661503 +5458848655886518922 +313840698753 +5197393273133271298 +3861350810962691992 +6375653898722412075 +16885380374869314205 +361129707266 +210659050964 +29048123694646491 +3017170418691476659 +1873618450347593089 +15290243360149277503 +14745847 +72090103 +14546784569801180959 +7431889721301470079 +6364097387529111599 +2435475427475262665 +1873618497636600365 +6151097734773868363 +62194086 +17083693200934636558 +32150372909516328 +4849811 +3172873313800750756 +2150364429944620611 +3862478902367620470 +9305858029919208637 +2625321597997287853 +2508194873 +491258567 +1408762855 +5015996636573993090 +2414921941537785811 +538706709 +5734260728554980678 +22610237 +12714212 +70058456 +6208295882974168451 +32714336929384395 +16643035121679272213 +20023641798084435 +4770547828131824981 +2818164 +1930668198955452820 +13726068529822894439 +468608091255 +5569296714050766113 +17490170188584258190 +8694008299851745161 +7073102484926630551 +155058804 +97714714 +40370537 +2625321602296056238 +1703347206 +15895039144349470066 +5352348805862656188 +3068049059797011246 +5880738612678821404 +12309852946450942075 +33560429128451329 +15289397384024950845 +4767727591019973374 +10682570 +10233718743719545342 +850088361543927300 +2792183694107936667 +1107456968073808590 +5759560470823897206 +162923155 +29612216687004362 +5875369269012203157 +95683088 +294416195335096411 +22279760122415532 +5639662680184522626 +17619012653768771484 +13237708544183762948 +8550520059753138843 +27356042474686002 +249849483538007723 +544539427 +13390152586296232130 +10906513561824594910 +18546980 +1873618489038801706 +2676033356038342054 +6313103561496791450 +2063139881 +6848542126596623056 +160891523 +103547450 +14101293042239958 +6151097653090126690 +1584595969 +12424382439595706534 +17698252132056434004 +4129856573689694799 +16885259953617962521 +12393440069873436875 +32432320527338097 +21433680821684597 +8617826180017097033 +1413046597527668667 +3973491001936446780 +819332033 +17305802226190387588 +1873618467542665344 +16515346 +6619310 +6206321690771522709 +4089771542585346905 +1223976962194278208 +13487493291780736605 +2487491354099451134 +8854886172739175692 +9870724570875039 +2625321593698257851 +1535116279 +6262673798362565305 +91619849 +493028049 +5352348797264856883 +8143564249694210398 +6151097683183797493 +9386257309953099582 +196412070 +3865299044899163405 +71827955 +18613366323088485 +18157949162008873831 +7562235583526800081 +817300400 +4618470194090937269 +4587663 +3932922014897081298 +61931938 +1873618497636337289 +2522831856378710008 +6364097413323754682 +6053028402293443390 +42140016 +12287601267178473523 +2625321597997025900 +538444562 +15991329612793777185 +15291089478142986477 +12452064 +2676033644081056812 +2556016 +16508579235574254010 +805372789 +59900299 +14787093348585572176 +2575517759332551933 +2412665810316625225 +7730749911729375728 +6155298010574883251 +10488220504998020326 +1311572948 +883931539946605906 +5352348805862394041 +2786543383251193103 +546308920 +3346269252 +5782296426993943791 +4469799173763958889 +6205475671656957491 +7872981661881076049 +18116424960081923281 +2676033351739311464 +516621038 +1465168459078698840 +5677488692584514734 +105316943 +4562124351240801677 +5245848874158263187 +16432982289349543214 +162661010 +3971798877726246151 +4787251587800828866 +5875369294806846690 +12217235256243064050 +95420943 +5354604868299326678 +4502324021619918399 +544277281 +5940918086979029952 +2014710471177341259 +2140013610 +1873618463243635741 +18284834 +2676033356038079832 +10531295876509927029 +5458848625792321791 +18411699898170343448 +7410231625909407077 +3478039985316562895 +6204347606046083061 +31586254122912349 +6829167320236755019 +27920101074341046 +13165236096819726043 +32432389312220424 +571933524 +5727354401416743090 +10225919154718574351 +4127600472563058730 +160629376 +103285302 +8483828720842049762 +15740334315622960494 +206359759935 +9813006656186419950 +9319686106503382840 +5515085278788979157 +232154663489 +26149204 +6208295848581203181 +3094190453106412515 +6520986101609793850 +32432320527074663 +5245848925746038203 +5942328186188203485 +1873618467542403595 +16253198 +15881445561639371975 +6357162 +63701435 +15515478115209971466 +5833854247140395797 +283181761 +19177532404009207 +16567374854657149772 +684134257893509654 +9870724570613070 +15680489859993767209 +12826571498698443033 +2625321593697995819 +10329316755526125416 +10754752208794748192 +10758418391935812957 +12105446909435186010 +3143159678306028631 +236453432350 +540214046 +14848239906707278405 +29330157293274228 +684134210602468610 +817038254 +4977791693940394179 +71565807 +1873618497636075077 +807142269 +61669791 +11287403619712895066 +4325515 +13819298136066198 +7734678113259293802 +6098975847429179176 +99222062 +18056758355458722638 +9870724568582655 +16224960573811657069 +2625321597996763849 +4078298757842341053 +17625510063045740642 +10528906628815718922 +490734276 +5412367062202975465 +22085946 +12751507524739009261 +538182415 +12189916 +18413109984482951243 +2541195915421354200 +6671860954713623381 +2893509029140760671 +69534164 +747829823970020707 +6770804071406897080 +2293868 +5566476498434524382 +6534429686359852912 +18412263922377556010 +164430493 +9870724566550039 +154534512 +10167299845199168903 +12754891682880490747 +5250413516934022944 +3315661715940248009 +451651625195343029 +32432333423379563 +5941764217869305943 +2141783083 +283748271730 +10161648493728303880 +5240846595623881868 +67502526 +15618641120352995308 +2676033351739049517 +6205475697451599682 +4023356732265137752 +14986955239351847842 +31304272112126853 +516358893 +2207492698791414354 +477207135345 +1309279186 +105054795 +17859691850682797212 +162398863 +4238330517036600601 +152502880 +18412263952471228465 +257295025 +10905173350565414454 +17498716255300421272 +8881019260503721949 +18022689 +534119176 +18411417890365833232 +6293435910568086045 +9374458755688828226 +820839372 +6153071780807051278 +5909364179964069981 +8126661 +3735453693364143828 +6155045908522469290 +745740842898098858 +2625321589398965240 +12142525752872799042 +160367231 +17958290734101235336 +9523554809025136564 +16892239439269464715 +15289397371127860096 +1736311827 +15991050 +63439289 +6095014 +12484855343804124176 +9658025172156550406 +18067928153034001057 +292345808939 +16572875051796793000 +10542598463376395267 +12772641161582545873 +18413674008690163805 +1544487931 +14737352740221028816 +282919615 +12808641794728789765 +2625321593697733840 +17128487303121020 +1706624008 +14101026494875963 +11214563466576463780 +18412827946584768572 +11966722661119888545 +6156455943247300775 +5300226909920168653 +6004915412369541960 +816776108 +4223816177647290930 +71303659 +1873618476141710425 +12477949191893683608 +417019528294 +9511403338599564690 +4063367 +61407645 +2543805385922512178 +9870724578216632 +5407707525201267705 +9870724568320021 +2564752444 +98959914 +15494005608834598990 +15140097999495498431 +21823800 +12734096628671909131 +537920267 +18412827976678441027 +11927769 +69272016 +18411981914573045794 +2571498445011814318 +10592171188278987146 +2057911839619745748 +9870724566287831 +154272366 +545784627 +17616192489740896443 +21715680027609308 +16886908734816455284 +583336804 +2246313005 +516096747 +2625321585099935141 +620888934 +162136717 +331037018572 +477206873177 +503001777494 +15592058013925444099 +1652810939277510396 +10531295803425490030 +3205882223899445065 +31304323701671300 +28484129580057898 +1873618441749006513 +16893851890367073119 +820577224 +16904712944498838074 +1394017249 +17760542 +4160689491693538063 +4047541379259827663 +7864513 +14219872676477209184 +504169174 +17244622751296785814 +2625321589398702921 +4278977611 +7239633818635733091 +5462796868326918190 +1334641629 +73073152 +7460569593843485201 +15287141188316891641 +818545595 +9339868219275806468 +15728902 +5382561551670903978 +9373330690077689939 +18413392000885653589 +5832866 +63177141 +438515402871 +2373415502940997016 +2148672322930150296 +168849237244054062 +12339564610979564477 +8327325764367420682 +7630443591734791098 +12608147700378373379 +9870724570088730 +2150364451439708714 +18412545938780258356 +13221120945827219803 +492241614 +4129856608083381232 +15740733274947783803 +15858116883009440274 +1873618476141446514 +816513961 +17564225130023161250 +13697261 +10668197763104573447 +71041511 +5357143003026951378 +31022281504720056 +1873618501936351339 +3801219 +442814170389 +5701610621477129021 +8520914754064026558 +15289397306641222853 +108593749 +98697768 +9870724568058057 +5780604294184830225 +156041850 +5192881006389626514 +32150304123324262 +219257572663 +18412545968873930811 +5249797099496672683 +11127945220196076778 +9103100569952650951 +11665621 +421318034537 +17619012718254098754 +14443179094226111164 +1873618480440216958 +69009868 +10594427319499622429 +814482337 +13968724050119231192 +28202091681875145 +27638110466671725 +16166203682344470241 +1712194570 +472907842721 +507970270 +15580874172203795679 +23689855033805297 +154010219 +17092164759424403479 +12893049762838873864 +6877309693745106245 +545522479 +5887800020369606783 +14977809576148535095 +19530026 +14105033451515939293 +6795216411027442152 +2543452128325209336 +1385890784 +114426460 +6444189713816225654 +6152225714402364510 +524384476410219715 +17953567922355439196 +17113993018971653874 +573178715 +515834601 +17090754617222956318 +161874570 +1538130937 +47186305 +30458188512103543 +2449021711964768402 +2414448843017751282 +5214737420442796133 +505938649 +2625321610894575340 +13965057806789381527 +970700105235760464 +15223822230290106035 +16285378285009240167 +16940455997476965252 +2601013084734032090 +5248157445900799208 +1580068669843704469 +15043322265989680207 +29048166685607288 +3863606942184311140 +820315079 +17045009756596405420 +29048192480512516 +11510172448171493799 +5885976160280708469 +7602365 +17785259896117529586 +8856014216854897981 +14477731067643038195 +1873618514832657292 +2578187325 +15292499491370895395 +33560368941827284 +13146357072728951328 +17353152791227993245 +159842942 +15530553734630409457 +5569296726948055802 +494159375523777824 +1812923415 +6366353518750729401 +4278715465 +17097308613030775025 +35258719 +1899651063193471062 +12103109825679658143 +6364338522051512284 +2429880031182916564 +11621189233770302317 +72811005 +15466754 +3880024017885400135 +818283447 +62914993 +4076606625033226775 +1873618497637320883 +7746405201714873917 +5570718 +10859426818132543221 +6925759835249836137 +3506237898852665380 +23407812836853915 +1873618523432225060 +17166316876055971050 +18008952305986046279 +43123062 +9870724569826462 +7410173966093388838 +33560399035500221 +511599051947 +214958540605 +13237708557081051143 +20587696099952690 +15339421027537585423 +6104586261132347910 +11103300151687644832 +1456931819 +1873618450346281005 +9181531069949872018 +14650572868605052119 +17783567759008991682 +575239712866634722 +15288269284022357372 +6206321673575138470 +644219759 +13435115 +399811749952817933 +145335345147610979 +70779363 +6366071455058494624 +7529998377695250462 +519635711 +3539071 +576979807 +9568723490388248888 +634323816 +13012951802393594980 +853643387796785445 +98435620 +28766107292140894 +9181555677596944971 +5195701200510977145 +5129024196560096606 +5831598124518278362 +4844858457232050089 +219257310372 +7569568047215545466 +5461104800004441485 +1518418407735101149 +814220189 +11403474 +18005251247539029895 +10333839787251271664 +1836516380 +8054758354584013306 +507708124 +163644058 +9001701177466488459 +2625321606595545096 +153748072 +4787251587801811388 +39059811 +545260331 +2036204584 +5356296971014964874 +19267879 +9714916684781063078 +3055188874828713383 +14576212124415364447 +2150364417046743283 +4662355849599126556 +1372824966366170355 +1318388695 +15289397293744393060 +8423108281783224429 +505676503 +104268357 +477206348880 +5831598081526006949 +4625631396377398109 +2625321610894313322 +6206321759557388696 +12237654281284815334 +17236251 +9391897711091583990 +3891732840317912522 +8856014216854636141 +5758903550139959418 +7340217 +638124907 +810156929 +6206321690772243584 +112132697 +15287987228927658628 +339636063086 +7721139320100816372 +684134305183500639 +22279768720672168 +5831598111619679502 +14814059355306855043 +4211213383 +15290243360149735302 +18411699880973959188 +15204606 +11507341268100646834 +62652845 +6365225483234117329 +5308570 +3491703531359374171 +17791918762976347730 +4127600455366674792 +11130039777759856047 +13951205954302381098 +18115578910873816258 +8659114857360722535 +6153353844499089111 +157549179 +9870724569564298 +16327183209838150989 +491717322 +214958278120 +32432303330691092 +17684252729367202593 +16965951797418331227 +23068994 +2272905061487347697 +1873618450346019367 +7515799761807542411 +815989668 +2576363817137867614 +70517215 +17763448248357489818 +13172970 +3276923 +806093689 +17621268802185464283 +60621205 +18411699911067631643 +576717661 +1685722535145180234 +23689824939607125 +17256155806064642777 +5516892801706297876 +12982659022915898414 +9870724567533791 +15515140725455259155 +547029825 +219257046468 +4180850416920431050 +21037361 +68485573 +11141327 +813958043 +189614828176542708 +1873618480439692390 +279448454880 +16253215886083360174 +572110149897422243 +9896616181508082455 +153485925 +8021450371307931626 +38797665 +19177566795402134 +27356016680241600 +669582195 +2625321606595283106 +554894151 +5512098557251945790 +9568883447315500158 +1440671446449589035 +4502324021620638916 +3249068390006196153 +15292781563660995825 +821822415 +27356063969248337 +18413109967286566983 +10911952793442192048 +6064503826171693679 +11161692095903435283 +1004761907965660269 +2207210695286917386 +6388664954993575829 +46662016 +5885976061401368013 +104006209 +5572809636517250553 +2625321610894051277 +17955470565775510239 +4661227814082512385 +6368045642960996241 +5463642874544129714 +16974104 +533070599 +809894783 +18413109997380239438 +7078069 +637862761 +6288511205539515238 +3974700764184054454 +18613559784442970 +2791055594105669609 +4504298205224635444 +18412263935274844205 +2605266760616185153 +15287987228927396675 +339635799228 +92078603 +8501910827968825512 +5991347884504386492 +210659247559 +17284241873202253123 +16893851873170950707 +651404368114879038 +18411417873169448972 +24838480 +5726226344404977639 +10259573046193883986 +2676958769323838072 +72286714 +6886936648282539655 +14942458 +521143041 +5046422 +13980703149896829784 +1495991284 +62390697 +18199185222634702635 +8834282535679560676 +15925946803693423456 +42598769 +9870724569302153 +5459976661309982295 +11084138473134491150 +5303047078245827995 +214958016090 +12451287838412704489 +5509410202188647833 +2681814701524780811 +10628953736434486617 +9774054990929462949 +18411417903263121427 +3865299049198390675 +12910822 +5356297009705911966 +2421359666 +70255067 +2248112069177510680 +3493395634074945822 +60359057 +12654580528992553525 +519111421 +3808100888100343209 +3014775 +13513632858283052077 +15289397310941235057 +8861613698626554738 +9697577994188492052 +155255415 +10381427610856195682 +9870724567271440 +2625321602296252770 +14512708438227029368 +97911325 +489423554 +4022831255438034250 +30671195 +1873618458945324208 +20775215 +5459976691403654584 +813695896 +12665415616966166285 +5645056620059298667 +68223425 +1319896024 +2390363305266056430 +17634738504986593825 +20305632407192782 +17462509665872383079 +1606616067 +305243098454 +163119765 +48431492 +10590197086357423689 +2787671431665157349 +6366353484357502971 +18413674021587452000 +17620986833073014515 +105775699 +20869665212206112 +4445946672738929841 +95879699 +2625321606595021110 +10906583445476542150 +18412827959482056767 +17205553309096938840 +12294570438877711433 +5461104782808583112 +544736038 +9950019055828534995 +5991347927496394467 +811664269 +5403008449516603011 +18411981897376661534 +572392279 +7677136701370927115 +6155045908523191668 +18067928196024961188 +20587511236070012 +103744061 +161088132 +335336768790 +6155045934318095559 +13322381941750499717 +15291371425760087333 +30740222110467489 +5245848925746498573 +5349308051975768286 +4548309565419816229 +255984301 +5461104787107351969 +16711957 +10906583475570214623 +6365225453139920066 +6177363118375897150 +6815921 +7032232753418799293 +5558136817694803400 +4030203865610717075 +12718336251608304605 +18411981927470333989 +1545208828 +15287141235606883137 +5837238474067478018 +11705421198335413148 +5524868651610213131 +210658985303 +6098975770044925746 +24576334 +13151687854617134836 +4662073803102881076 +72024566 +817497011 +29330157293733695 +17096567568145714575 +1454859013759438228 +14680310 +4784274 +62128549 +1493907215600323645 +6364097387529046615 +12583654612056476062 +12851509922494416016 +1495729137 +15287141218411547437 +828143439367899804 +2523959969279970191 +3919394969679695174 +7595953279435999504 +2625321597997222413 +491193030 +1839046019115124804 +7241043922144659849 +18613499598604650 +18413391983689269329 +10594427319500605883 +12648675 +4861149623842704773 +5782296448490276391 +5516046782590617836 +518849275 +10015828607276288922 +15662612681012938353 +2752627 +60096910 +5133829485924779401 +7003516464553396964 +12903069678853164419 +2625321602295990612 +97649177 +259785401 +5464488953846367762 +546505531 +30409049 +374027977988 +1396769762 +21715680028329254 +5637072609524124450 +7731877951544692100 +1873618458945062288 +6767393152337644543 +9467310877347154547 +5429433323061448040 +10617033 +1730937871 +107356700000258304 +425617786716 +451412690018 +18413392013782941784 +12020684574736647824 +105513554 +3541851256594893702 +16038494049631274933 +497025749 +4661227783988316231 +18412545951677546551 +5565348467217401524 +14428481252717692252 +544473890 +3344434243 +2169005683868174908 +5993603989931887912 +12972952285742288 +13117263636444153530 +811402123 +2676033356038276482 +1873618514833639109 +514786024 +572130134 +160825986 +1938490399 +10280579133800254203 +285938493736356261 +6425213859614951480 +103481913 +11364576519499679975 +1881294612915292853 +15739206202722094240 +4397798316509039896 +17011915733784398286 +1873618446048496233 +14383326641327005 +26345813 +6156455960443095577 +14975681650483333306 +819266496 +16449809 +15288269301218674108 +1873618493337504776 +5782296461386581535 +12162857194684744950 +16633695839999756254 +6553773 +6206321690771457172 +5411573444917201071 +14273081993166850387 +17297538988880889355 +9870724570810095 +339635275824 +101450287 +2625321593698192308 +91554312 +3812049113439014303 +492962512 +15289397349632182266 +342928503145892901 +9257009393629660721 +13674941621707869313 +17952462371364276975 +24314188 +7676326001635166459 +12622921449567619867 +14471968401314024391 +14418163 +71762418 +4522126 +1873618497636273356 +1873618523431177265 +31304285008889193 +2625321597996960522 +42074479 +18895601982637667 +14883032307819284131 +32178524 +490930885 +5459976661309458015 +194314911 +1873618454646032908 +9386257314251803173 +13950077918785243724 +5831598146013367591 +5882159627828332650 +69730775 +6100103913039400051 +15744000533156660854 +12386527 +518587129 +59834762 +9231865831523354279 +2490479 +2148672331528407961 +2908260051937332390 +16876615841046071902 +9950583114428779661 +154731123 +13237708539884666883 +30458205708158447 +2964529530791004471 +40042856 +2933734509745341832 +5459976691403131036 +1730675726 +1873618484739705502 +2676033351739245930 +15215179494928287321 +14866462842593414402 +5463642917535614049 +631243623 +5885261859847867262 +11391362031143292020 +506659547 +105251406 +5778348197355914873 +16324853745603185849 +5509410163496651347 +152699489 +15292499534361856724 +496763604 +544211744 +4078298792234977417 +5461104782808057591 +14648423506775771515 +10504814416598927327 +8709732826087622782 +2544766567488424310 +811139977 +17088205463377873568 +15798241638577276499 +2676033356038014277 +2785415326238639918 +12562453432512743836 +12350988444867431112 +1873618514833377412 +16940553195690134509 +45875581 +103219765 +8854886168440079511 +5941764153383128192 +2625321589399162008 +11818157132458100908 +2785415278947600352 +15257764832492062794 +232154598652 +819004351 +16187661 +4644563108626631009 +4000515045253449269 +16872667624306444468 +1873618493337242815 +6291625 +6156737968247080128 +292346005443 +283116224 +3220426554520570467 +12356593998396393868 +684134257893444250 +17175427809786595961 +9870724570547380 +1992881803100621054 +2625321593697930351 +9450798976826149302 +16655465042802838677 +6474545510181176536 +11740202404159819072 +15289397349631921063 +9714916620293637762 +6098975770044401989 +16364556117061994922 +196084388 +540148509 +24052042 +11065179658016983681 +12480382642832672298 +71500270 +7285785859232107205 +14156017 +17632571483632043275 +61604254 +4259978 +17750109864738752812 +1873618523430913566 +9830100417878166271 +14425661002709010016 +4794173760728861833 +464308734399 +510460641 +2507605048 +41812332 +2679637056 +99156525 +16044698410491643447 +9870724568517151 +5516046735301085409 +6261263733545503259 +3759645248384009814 +538116878 +5779476232874035736 +6104586261131037638 +10531295842117158093 +12124379 +69468627 +5565348505908348542 +814941090 +5299098870104394759 +14322284629040564382 +10440328872292254866 +2228331 +518324983 +16872385650894636566 +6284197438710222140 +8098722631875955846 +5727354392818878727 +9870724566484489 +154468975 +2292825785040636736 +3172873343893834792 +14418466534433295118 +2707725182771857350 +15293345523383077603 +259261111 +19988781 +15371922320578972378 +19741625396299098 +18411699893871247383 +12818875419963886521 +2676033351738984017 +14268291611706526293 +1309213649 +104989258 +6367324841362000185 +7432602967203907143 +11331649863678691999 +15292499534361593441 +1815413785 +5778348223150556659 +5572809636518234139 +11408348231855703653 +2446197814 +13001682102565734253 +17186370630874106258 +2785415274648570354 +14264783202905229777 +7171706723174648069 +820773835 +4645667113710455153 +16425638839461284611 +5353476806987745228 +1840738151924108521 +6153071806601889790 +810877831 +8061124 +5356297048398365877 +4770547841029572913 +12804866717273491655 +15580874133512784221 +514261733 +571605843 +12346762090311779845 +102957618 +10907429529076434052 +2625321589398899121 +5354604872597767596 +4279174221 +27638024484621167 +8483828720841721486 +1459422188 +23689889426704296 +17648172271756969893 +232154335723 +15925513 +10811668319096800853 +6365225478934037607 +9763237054719266042 +11633356565151157114 +63373752 +1873618493336979326 +6029477 +3580814869236944221 +5199085482290645376 +282854078 +2625321593697668091 +9870724570285675 +7449919019336600171 +1839046014815569788 +23789896 +9131616131521448314 +5779476228575003910 +5511666277521099409 +13940760354079114484 +18413109980183855178 +644678512 +71238122 +417019463453 +15131353489256221185 +447360420122266222 +520094464 +3997830 +15096032016463431129 +1873618501936549084 +61342108 +1873618523430651633 +18412263918078459945 +5344573059048999857 +5155859771100236117 +5405598659939206416 +27356033876298083 +2146416200305806198 +5303893093062347743 +21758263 +3189961199463959445 +527958790 +69206479 +11862232 +6364097396127827248 +1320879066 +365262179507571896 +23689855034002659 +1473119215 +18412263948172132400 +31243224015702806 +39518566 +9870724566222277 +545719090 +5301355009924597043 +9391897706793274792 +11514789185312918199 +18411417886066737167 +5299098848607995194 +2284412389694637269 +10530167802300925091 +10427987387505837891 +14322803714593785119 +2625321585099869531 +6829167367527204602 +6013889919468112625 +4181978486829943864 +8698802578697685482 +1654120425802828663 +5569296748444387676 +1873618441748940565 +256967343 +5245848947241584851 +15862817677379702068 +14633483086300318059 +288046714075 +2203332276215481610 +7798976 +810615685 +237175467 +11340219378265033230 +313841615983 +513999587 +18413674004391067740 +2116750858326574509 +8070938101082033295 +2625321589398637514 +25099937047839912 +5245848878456439955 +12118995007347033900 +4562124381333884039 +31586327206235137 +16436648502583690678 +9181481831755875838 +5516046752497929091 +4183106466458307862 +1991460714865167155 +17082847207615301902 +818480058 +15663365 +73007615 +3701600990787603378 +63111604 +5767329 +579208034 +1493907215601306869 +11535686880442518166 +3313969578832561394 +2704904932763174902 +6570315963541227654 +282591932 +5726226297114658480 +17160329975787685834 +8843457619279611284 +18413674034484740195 +9870724570023121 +492176077 +30740204914083091 +21433663625497129 +1629160452 +1873618450346477252 +18412827972379344962 +5243108696682924272 +7260902865540482639 +816448424 +70975974 +15287423196122254433 +1873618501936285414 +5151629580948802356 +3735682 +61079961 +18411981910273949729 +7837634943338155161 +3597357340772992368 +5133829485925763690 +51184007 +10956724774926813288 +98632231 +17309267256018536307 +9870724567992379 +29048106498198701 +3544107379218385465 +14386655907412249373 +219257507157 +21496117 +68944331 +16330874579771459902 +11600084 +11124082762859154482 +5459935770830768809 +814416800 +347984565637089693 +11923578915473263059 +575144796 +517800693 +3297856681506178941 +326737923180 +16038494049632258844 +15104099179857577674 +32996413518841137 +153944682 +2152780467316001469 +8722536002903082945 +10646954815923686447 +545456942 +14458654042895551171 +3935742187522887052 +16064731596255856452 +19464489 +17648172288953812474 +6213874949885069218 +14851060135220743194 +6471725260172231870 +4504298175131421894 +573113178 +11701191021079496730 +12314601354656483126 +13957562954616997312 +161809033 +563217229 +104464968 +1366033375 +1133620930477295468 +6209141923583494372 +2625321610894509848 +5052785364214352114 +6155298040667702671 +5246977012853376412 +4074350485214726972 +27328854 +1873618441748677997 +2000487899013646903 +7465404271946632160 +7239351853821397993 +11742834345080916462 +6368045642961454306 +5516046795487905107 +434216307724 +3493677603186412637 +810353539 +16633695840000739887 +821147663836514852 +18413391996586557524 +7536828 +4151361015346562251 +14540810596246030644 +5995296139937712949 +159777405 +8816997369364548341 +45089144 +18412545934481162291 +9298403582666148514 +15108492788614827244 +35193182 +5568582435113995179 +5570988833963444820 +15289397375428069113 +15401217 +8430474765433179073 +10750398672578676906 +72745468 +5405598728725859379 +9250794030848869727 +62849456 +17422075106091075868 +5505181 +1873618497637255436 +578945889 +13106160036035691955 +282329787 +5570988786672405753 +9870724569761068 +7031431794891230329 +43057525 +1706034183 +491913932 +214958474959 +90505732 +18412545964574834746 +32432303330887118 +846140170598090257 +5458848587099997499 +17607182983838566334 +195297952 +539362075 +5460499872422693597 +23265605 +943759021439519007 +70713826 +816186278 +2207492642904016905 +644154222 +60817815 +806290300 +3473534 +1873618501936022824 +13307798926833551183 +1873618527730926929 +11349795265056081195 +567018319 +9388513449772451585 +165610142 +2625321576501808484 +7290339324003420579 +15287141244205140113 +41025899 +9870724567730368 +5569296739846327213 +98370083 +1531970550 +219257244681 +2065251783916127931 +6151097665987347595 +1407386597 +3973490993339565383 +12463417266756127924 +17631161371525515669 +21233971 +3232498753 +4767727591020628301 +8972557000702888938 +1873618458945784014 +15290525376551717170 +1559626750 +68682184 +12689613402799605860 +527434500 +517538547 +3542979343701772038 +447112610911 +163578521 +326737659857 +30458205707109873 +2625321606595479619 +498702419026 +555090760 +11846037961957312985 +2286775792223980496 +2676819007 +11599686562536949325 +3968978683605551949 +5831598103022077418 +15175534989820758889 +3812049126336301758 +545194794 +12348736218027264207 +12743882002561631754 +12318365723906541324 +8882845388820581451 +12769623874203027091 +1732546160493595960 +10430737389551487761 +9512531412808567772 +21433723812579518 +812123024 +9140909979694467183 +4025048830681353606 +1873618489039455401 +18331530485106038 +5516046791188875281 +6156456003434055463 +12474564753552836994 +17621561863500597513 +104202820 +29612220986426501 +1996555300 +2625321610894247837 +17489156252859434801 +103179363763095696 +15920335005095365860 +13112992413209136128 +2034107431 +17291573824845253535 +9772926989806013640 +819987397 +17170714 +1873618467543321286 +16156684754098128751 +6925759830950740072 +7274680 +16161820259100396848 +3698377064120454404 +10296839827164892306 +13913370016116443160 +1363739614 +92275213 +210659444315 +1784112314702629632 +5461104765611674055 +507299956084 +13237708552781955078 +197067432 +4211147846 +14657391675119111356 +25035091 +1735459858 +15139069 +14426056237756189706 +12771845711499103316 +9940375093616053431 +6523880655054768550 +62587308 +10967349376607587326 +1873618497636993704 +15290807392954681807 +5243033 +1133620917580466754 +1873618523431898109 +11613165301442872555 +282067642 +9870724569498781 +2141513421469058406 +14318336791419094928 +5885976069999102359 +6153917830015027393 +214958212644 +548995910 +90243587 +16101055855214332856 +9409295256684857617 +539099930 +30458248699119542 +23003457 +252379820 +6173800107753209956 +70451678 +13107433 +815924131 +1873618476140856959 +3188833133853148985 +3211386 +60555668 +5514354727165429372 +18430745393540238720 +5566476498435442740 +8821966780582857359 +806028152 +31022281504130688 +15273884660262766886 +17153706162049649384 +15568274631689570656 +98107936 +9870724567468020 +2625321602296449309 +5250413516934940017 +10377197347619277484 +546964288 +2429420595 +68420036 +13840095604897025041 +11075790 +1873618506234530930 +517276402 +31304293607146613 +10225919150420460684 +32714392818354350 +163316374 +17480593072628501093 +3653991426073234491 +28202143271093720 +2625321606595217579 +669516658 +11075097734987253589 +544932649 +5248951136269502637 +24535874148371011 +5247593352907000017 +13750803869111880047 +821756878 +5565348488711963913 +18940198 +23407778443822783 +811860878 +3910652327921846506 +2372569380647405649 +6151097721875664077 +8481290603310483360 +15289115311734721621 +5197393238738928914 +8858552325786961082 +15270695523793439937 +103940672 +6206603741566403719 +151388766 +2531021385567766485 +7563081637033018620 +13044533461222491710 +6154199872212897041 +9126223058424237061 +1160107295621122785 +32714349826081871 +6152225697206437786 +4333982245204396969 +7012532 +5411521012994803182 +5249797159683425776 +570557265 +17619527108083517000 +3758799224970808644 +11069796609748044689 +210659181949 +14926165161459649868 +7570985824906512457 +3234866947851553000 +1906986264008723742 +24772943 +1873618446046923526 +7516607870825792868 +14876921 +72221177 +18411699906768535578 +1495925747 +62325160 +288043895627 +31304259214443724 +3685635809078676834 +4980885 +313838798363 +13951205954302051853 +464309454125 +7151957518376504179 +6153353870293665804 +365428606574 +14319322726341872694 +3493083035910933027 +214957950334 +13222096480399396057 +22741311 +538837783 +12845285 +1675756474409617568 +7676326031729298383 +1873618476140594617 +70189530 +2861086850442987769 +12590629664748537952 +15501473033754248808 +1733166096 +2949238 +5833854255738587405 +6405261049027955879 +60293520 +6364097417622914469 +50397573 +15289397310941170468 +1436145094782551981 +9870724567205432 +155189878 +7996312456522828750 +2413828615876118471 +1818166298 +97845788 +2625321602296187261 +4451323549999957434 +3544953467117898450 +40501610 +6364097443417820330 +1543385872365455415 +12606726616442537392 +16436379939763522008 +7562235540534921217 +546702141 +20709678 +18413109962987470918 +10939233345785957508 +1384869222252743071 +14383042897579063 +245051624454 +813630359 +5881866613803452649 +1455946274504313841 +68157888 +10813643 +4502606072414800438 +9388513432576593267 +517014256 +16739161091967945306 +6203168539198949844 +20305658202031811 +15122676476569913436 +48365955 +5941764144784016877 +12601357272775920269 +5900805793554762144 +163054228 +6155327937823509637 +95814162 +2625321606594955469 +544670501 +11092808190891527547 +6365225423046182853 +3545799490531822688 +5991347927496329957 +2676033356038473537 +6928358494714596151 +18895516000586505 +18413109993081143373 +1317798870 +3242943116712479419 +8468495303965871404 +10215782083327823122 +295544243748734701 +7536133444401891169 +13880529192106527090 +18412263930975748140 +103678524 +8816997365064994109 +5513226652957347114 +13427220419978791304 +4279895118 +2581508047683782932 +151126621 +16436648502584675667 +5245789596497153220 +18411417868870352907 +1574831104 +5512098613140196086 +16646420 +16881311723980129501 +580191075 +6750384 +460010423829 +17142588721119759321 +5411521012994540776 +13331692090551241408 +2236213724530672835 +10512763733196344280 +91750922 +493159123 +210658919829 +5353476789791099071 +2973047420892220660 +102615266471184862 +817431474 +71959029 +14614773 +29330157293667421 +18411417898964025362 +8854886129749066875 +62063012 +1631882651478526261 +1873618497636468806 +1626046306171619904 +4718737 +6971710725545264615 +15463390673086056969 +5996988225456246061 +2625321597997156982 +1258091056198584472 +2365498112266798670 +12258209558853782455 +548471621 +200191596416994196 +5565348480113903112 +10159392401199270768 +538575636 +5782296448490211725 +15289115277341755866 +12583138 +4959080478982475006 +4237766475632413481 +2687090 +60031373 +11241814380293784908 +18413674017288355935 +10162787574158199843 +5625593289148533238 +605557034314828631 +2625321602295925195 +97583640 +16546579671803956126 +546439994 +13513914891881875478 +18412827955182960702 +18142877345697171235 +8716776878113885241 +5991347923197297866 +21715680028265805 +5299098848608717979 +2686971790050919863 +10551496 +2676033351739442523 +5246976935469649046 +4236074403011431549 +5561348123192067576 +516752111 +13525196865559988902 +451412624470 +6813843502384089093 +3452050537366752044 +2723374776553770162 +105448017 +14284319595218536933 +356832576945 +1987904546 +2789363555876800106 +17063697102470777209 +6584302816815089825 +5727354422913010657 +13944415416121166662 +28311895 +11906248855590275274 +3707523343842937215 +18412827985276633157 +821232589 +18415907 +2676033356038210923 +17257283880273643533 +18331556279224644 +9117971362513815455 +18411981923171237924 +309541536868 +113312346 +46072191 +103416376 +27920126869375123 +160760449 +361131345578 +9234597529149245860 +14835085562484362568 +4585257123188181630 +1413046597527538184 +6208295874376239521 +13217980679449939250 +1966081057 +6101795981361546864 +16384272 +10370417990725208293 +4196703391028741586 +6488236 +63832509 +5153885660580611393 +6155045912821630127 +5197393273132877515 +2625321593698126810 +10720606758114626648 +9870724570745030 +30740204914804024 +91488775 +7792373120121047026 +3579577413 +5458848587100981064 +755605599842665887 +17404805271631431757 +417019921504 +9386257335747873389 +817169327 +18413391979390173264 +71696881 +8328637003859953646 +14665059300281706 +6101796011455220816 +4456589 +13070886371126478108 +8733200714257204941 +10913926882465549337 +29330183088310857 +61800865 +14949273699027977966 +1873618523431110190 +3573803894998305775 +5569296709751605280 +5835546375651263675 +9870724568714358 +42008942 +1746899701160150410 +9664889374910385451 +7406761759861377295 +2625321597996894992 +365428082633 +11888218815508973537 +6311975551774360856 +1408369638 +6101795942670075923 +15515140772745448064 +27638058877519937 +13361048879788721990 +2430665780 +22217020 +538313489 +927164962728314711 +69665238 +27638084672424186 +2573543627316201844 +12320990 +2424942 +18413392009483845719 +3660444556051220001 +18412545947378450486 +154665586 +9870724566681132 +546177847 +2229804632046437624 +5245848917148372136 +15906307047154976446 +827351178595273968 +5780604350074062990 +6350640494756627870 +9198943117821938833 +2676033351739180486 +1192315303887243384 +67633599 +6205475723246636047 +17419818910382754661 +162529937 +17083693235326683482 +105185869 +8912366315847026281 +5249797202674912471 +2446394423 +1461650414 +257426098 +17299513133793348673 +4451048243670025981 +14597841535548131734 +14130457194541352666 +15290525359355331959 +9195012299735698785 +524354306 +429916226796 +6153353788611431303 +1728578573 +6153071806602085789 +2676033356037948725 +8257735 +2785415326238575484 +1873618489038408278 +8072726556923202784 +7731878007432940921 +16271603835638319461 +11229884474259868248 +5835546388547569431 +2704904949958969710 +103154228 +2625321589399096275 +6887529782530082437 +45810044 +16365628939578247566 +4408861808311732424 +3554388240579364748 +3431353251379022211 +4131548706499659810 +3229097897723824621 +818938814 +16122124 +10831084194895235709 +6226088 +6366071472254485645 +10441809166173275876 +9538952396691934382 +5994450030541998229 +6835382734606174906 +4397798273518472097 +2625321593697864817 +9870724570481756 +17782439637510195701 +31304332299601191 +4074350515307087985 +10758418391935682553 +11405246090117384413 +196018851 +17943317531894613402 +15289397375426759758 +1801651221 +12716605781588708278 +5353476789790574588 +1873618450346936800 +14462121002204464918 +2785415309041207732 +71434733 +10770155859627543824 +1873618476141841211 +5780604362970367638 +2530739313276357975 +14090480 +5567604589840172352 +296644709200 +11266915032714840583 +4194441 +2200512120787569683 +2549492329236335496 +6211116016906930204 +99090988 +9625506809262378259 +13237708535585570818 +490103571663 +14541340640523322842 +9870724568450966 +1793158821936040552 +9486667438472824267 +21954873 +538051341 +1398211555 +5408700909154273182 +5356297014005859746 +8444237263823374707 +69403090 +2599235317101562153 +15897859265386515143 +6097847713031849822 +2162794 +9796067026192895123 +13117159209037203716 +164299420 +17088031212435737557 +8099682237308012832 +8971880411373045432 +3099205763721988894 +9870724566418979 +545915701 +13237708565679243273 +4449074137450482853 +18115860927276518423 +5247593352907982888 +16533468055605152863 +1873618458944474091 +19923244 +3188833116656765520 +2676033351738918494 +4501477955215362649 +17621268784989013395 +14581169549127125939 +6206321707968234614 +33278352538406314 +516227820 +6890349946557761313 +1411918553413126104 +162267790 +2474797953316292924 +1694703987789596868 +18172096623373846790 +28766090095429261 +1223976979390989739 +3221822110943152678 +104923721 +15185362616787929146 +10003084053115964048 +2625321585100065781 +437798118096833445 +1815348248 +31304323701802109 +152371807 +14046027923586223423 +2021331689141374237 +20869691006257762 +13044533461223476582 +16778219695595128445 +12057002331826554305 +17465760298758178660 +7576852735584046364 +129168850403198609 +820708298 +17891616 +1873618489038145001 +7995587 +11911353550167017696 +4522983015860209939 +12612941966326959190 +102892081 +2625321589398833886 +45547899 +11548493110908749415 +4076606693818764590 +7851156332894489575 +12779163922391107832 +5991347884505304103 +1095239150174145285 +3863606920688567965 +10771469979967884371 +15859976 +14312864964518020808 +17245750799710423012 +5963940 +10655291933708585535 +4162099616697747321 +63308215 +1873618519131818153 +30176189305784773 +53412232 +318140582948 +15611911946388048179 +12640696470018459947 +30176223702288623 +9870724570219682 +33278412725750974 +1409876968 +28766150282773591 +1873618450346674286 +15290243360148359553 +14036340911856223966 +6365225461738636619 +816645035 +417019398489 +6206321673575531611 +12057284352529139627 +71172585 +13828334 +7528870385169533979 +5832726134240118664 +2785415334835848520 +2572415553107265488 +61276571 +3932293 +9870724568188981 +1873618549225491555 +2360543918673038210 +98828841 +12512221777814685432 +17939922315943150958 +6045857707735386835 +21692726 +4502324038816629924 +11490081257974859839 +17639632887023929831 +1316357237551401394 +6101795994259359091 +11796695 +69140942 +18411699889572151318 +12074216556992400767 +1320813529 +8618954206934993224 +164037275 +4160546838840674266 +12591757708863407913 +555549513 +9870724566156739 +154141293 +32714414313178248 +545653553 +223556471268 +12613788024133322735 +812581780 +5778348150066318224 +1500709877 +6741138607599781046 +9227353569080969220 +515965674 +13884327378110449525 +18411699919665823773 +16340493341965880015 +162005644 +620757861 +21997756618049241 +17007720368052373541 +13001845694847518363 +227855238971 +17629469 +1737950228 +9288263741171697848 +20305615210743190 +1873618489037883086 +18613533990193666 +7733439 +313841551493 +15288551330518206781 +17302333254828493968 +6153071832396467338 +2979056014524680527 +8857706336766199103 +2625321589398571980 +45285754 +5991347884505041337 +4502324004423927097 +16874702537456224943 +14911447610171655366 +13944990587222231178 +3308118261903721908 +18413109975884759113 +8412057600244518110 +15597828 +2538734651 +818414521 +17082847207615236134 +18276979644936029994 +5701792 +63046067 +5882159696614657105 +1410790466305853323 +18412263913779363880 +32714379920475611 +539325825270679628 +1873618519131556994 +13536993689470216 +9870724569957729 +43254135 +5153885686374731086 +9387385384162626351 +8336200085500660803 +5303047104041388600 +5512098595943810546 +5717788221838658971 +2324121364801391676 +12012735189037878155 +2192639020 +1873618476141316771 +70910437 +3670145 +2219404100148201532 +2544580112253650683 +61014424 +6155045921420412650 +18412263943873036335 +1873618549225229533 +9870724567926898 +98566694 +29894215892535509 +155910777 +6366353527348399255 +9956242218935388443 +31586340104504804 +219257441372 +13522668389390157414 +18411417881767641102 +11534547 +279448847671 +7242736046355514492 +68878794 +814351263 +1192315299587689576 +2524775482 +34124461934314600 +507839197 +5539270545646881104 +4974759074281293673 +5337229686545450161 +153879145 +12644080653952551280 +30458205707308380 +545391405 +17877509356004052233 +17520266449292560845 +11065487246536017596 +2011949215506761725 +6155045882728942511 +812319634 +1130753852548581517 +573047641 +5299098874402571932 +18413674000091971675 +18331556280207363 +17269866578628118199 +15289397293744523027 +161743496 +10649664295314066054 +6051485356288903427 +4347925833116091776 +30458188511970924 +104399431 +10184384893691038634 +7401639761433855789 +1308623824 +563151692 +2625321610894444316 +7239069803025663720 +11434534198373320614 +1873618441748613384 +5622264654903379074 +29330122899915877 +15636380174699072146 +820184006 +2597848126 +10233694917695638297 +14585410861575638263 +7471291 +85348920764927349 +6366353492955694732 +18413674030185644130 +4127600472562141528 +35127645 +5780604337176709161 +541328159 +2524806001290315567 +13850612818404510827 +18412827968080248897 +15335680 +3493395603981665996 +17858552114457937219 +62783919 +3875793754648151904 +5564423899624572258 +292345154665 +3489447322753895731 +18411981905974853664 +5439644 +42991988 +9870724569695611 +12269921124804135698 +559088458 +33278386930321618 +15289397353931868100 +214958409445 +6219166245997316001 +15289397379726773461 +30458248699315998 +23200068 +12163381674616883890 +70648289 +9000175594581527004 +806224763 +89657146100418951 +15475002888547338265 +3407997 +60752278 +18411981936068526119 +14267039342724252928 +13726068525522684375 +1873618527730862181 +4504298213822565083 +155648632 +98304546 +9870724567665640 +13681696359428851594 +219257178788 +24535844054893958 +50011031689890353 +10532987940533372886 +11272401 +23407795639356361 +68616647 +814089116 +15635925519041823968 +1998521381 +163512984 +797977540607610221 +32150286927595340 +4709060078846741586 +5967447917778832244 +5885976078596834724 +2625321606595414132 +153616999 +1744643526947965735 +17461812017531651650 +987047180239768912 +30740239306197230 +15288833278135765839 +525337347 +5885976155981547843 +18413391992287461459 +10532987970627045461 +56689033 +5722409915131627177 +114033243 +10159956468397444373 +18412545930182066226 +5349367342193968413 +13819010092172884 +104137283 +17953636526298302297 +2224234517276395067 +2789363555875490728 +2625321610894182276 +12426051065400527122 +9355193091131312182 +30740222110861163 +14361095630442006439 +3137288237381257087 +17105177 +819921860 +7209143 +1727529996 +810025856 +805679481429165719 +17298949057997047589 +21997713627284659 +16120716880803858984 +33560368941433940 +1535706104 +10229733804179524009 +18412545960275738681 +9714916620294556051 +4078298775038527628 +5461104765611607541 +210659378559 +92209676 +13418544886826534789 +14264208172476401284 +1917322269 +197001895 +24969554 +5405598728725530322 +15073532 +817890229 +72417787 +1873618471842024407 +17091318705916150977 +5946696443085589628 +5177496 +5847102830955857465 +62521771 +1873618523431831649 +5835546371351184527 +14824583848163281869 +42729843 +9870724569433729 +5780604315680310424 +16385074671182940805 +214958147231 +3007753865419557454 +491586249 +17943317531893566468 +1801912319444323213 +22937920 +539034393 +27356055371580547 +1873618476140792146 +5198803303557629187 +6103488088376871190 +13041896 +1733362705 +70386141 +2306802734 +643826540 +3145849 +14637903957824965363 +519242494 +60490131 +805962615 +5784522635265967958 +1873618527730601376 +18301216972082383618 +11644189250161151139 +2625321602296383846 +9870724567402585 +98042399 +15741861301866530650 +494403323033 +6729754102968812754 +546898751 +6208295835683456476 +33560403333875446 +14409153078548760239 +15530271666638163275 +1873618458945456185 +16951650337051970851 +5144036663261072615 +813826970 +12133908888583014197 +68354499 +11010253 +279448324634 +14749580058850363919 +6633286351216577743 +2089265852158774334 +8929038315166239946 +31586271318836879 +13678484518713821516 +105906772 +96010773 +2625321606595152102 +153354852 +10831360821402142464 +5652457623480305518 +8503320935775669540 +16483453074211931840 +363084051790629688 +544867112 +258146996 +5944020284604679310 +5782296431293302176 +28484176870181368 +23407778443758207 +3973491023432910866 +5778348175860436286 +1873618514834032208 +5438906422044199526 +103875135 +7697026996393675938 +1709507593 +161219206 +13237708548482859013 +3701601059573925529 +879419277503368073 +3822179681402096264 +5565348445721659362 +532291916112267238 +256115374 +1460339693 +13351948495571782591 +14665351642484132 +3008657884776564221 +2341393787733871788 +16904712944497920326 +3967850626592737364 +16843031 +4131548702199581670 +6946995 +809763710 +1928986057181235415 +11964228788262537512 +2989761681675848960 +1873618519132801026 +7276444624641068235 +5994450030542718433 +12284124821458521275 +111739480 +4076606646528706921 +13650504529854072320 +15804734059994287439 +14425661019905001872 +2395604016 +14465116522071263669 +210659116497 +15290243360149343057 +15777957523720635747 +10167863869407233224 +18331517588211470 +12884708026702235763 +14811384 +72155640 +7042731044489660311 +15288269305517836796 +5675796551176948530 +14264208198271043974 +1495860210 +5787083718919720300 +25099894056749168 +683965395648908415 +62259623 +4915348 +12974919760129952993 +6155045917120857525 +1873618523431569790 +9013091190501541709 +4392112055939237960 +2625321597997353452 +15897908900500866947 +6177363174264606048 +15872788267758849077 +491324104 +33560399034844286 +22675774 +17542946455516547053 +2431124533 +538772246 +27920040887322186 +8704274751914773568 +12085352355710699032 +6153353775713551670 +70123993 +27356081166223293 +7885152524183078888 +60227983 +2883701 +11700344903086704893 +7329667560521271617 +518980348 +5833854255738521265 +8618954206935976415 +3901910077209972079 +1713308683 +1992881785903908578 +4530582984922301900 +16130159995999161574 +155124341 +2625321602296121720 +1884114794138700522 +5778348218852443426 +97780251 +4240022615453076686 +6097847786116483627 +6361518319333476776 +30540122 +28484146776247610 +546636604 +5741055947585816645 +6100103891543657570 +8807886331112851129 +813564822 +10223260478367337870 +746324852 +15287423226215073909 +11226550812567014265 +1491796976 +8097653480026868144 +5995296157134227520 +1873618532029106835 +1539245050 +48300418 +331037869860 +95748625 +6314795724398267312 +5888081980883929307 +544604964 +34124418943289166 +5245848947242502849 +32432363517642192 +2676033356038407648 +811533196 +1317733333 +8920676095134336910 +17149817495305717193 +918014392040164136 +103612987 +8695136395555507435 +18349504802666319185 +14847634415788362123 +1584661506 +4287350266942457603 +525512494730316455 +5881302580997523790 +1574765567 +3784125305237867347 +819397570 +8326286517935867839 +16149105318148965958 +16580883 +6684847 +18411699902469439513 +11229983338076703492 +15292499491369977714 +339635406848 +9870724570940976 +100 +101 +102 diff --git a/python/cudf/cudf/tests/data/subword_tokenizer_data/bert_base_cased_sampled/vocab.txt b/python/cudf/cudf/tests/data/subword_tokenizer_data/bert_base_cased_sampled/vocab.txt new file mode 100644 index 00000000000..57c08778e36 --- /dev/null +++ b/python/cudf/cudf/tests/data/subword_tokenizer_data/bert_base_cased_sampled/vocab.txt @@ -0,0 +1,3500 @@ +[PAD] +[unused1] +[unused2] +[unused3] +[unused4] +[unused5] +[unused6] +[unused7] +[unused8] +[unused9] +[unused10] +[unused11] +[unused12] +[unused13] +[unused14] +[unused15] +[unused16] +[unused17] +[unused18] +[unused19] +[unused20] +[unused21] +[unused22] +[unused23] +[unused24] +[unused25] +[unused26] +[unused27] +[unused28] +[unused29] +[unused30] +[unused31] +[unused32] +[unused33] +[unused34] +[unused35] +[unused36] +[unused37] +[unused38] +[unused39] +[unused40] +[unused41] +[unused42] +[unused43] +[unused44] +[unused45] +[unused46] +[unused47] +[unused48] +[unused49] +[unused50] +[unused51] +[unused52] +[unused53] +[unused54] +[unused55] +[unused56] +[unused57] +[unused58] +[unused59] +[unused60] +[unused61] +[unused62] +[unused63] +[unused64] +[unused65] +[unused66] +[unused67] +[unused68] +[unused69] +[unused70] +[unused71] +[unused72] +[unused73] +[unused74] +[unused75] +[unused76] +[unused77] +[unused78] +[unused79] +[unused80] +[unused81] +[unused82] +[unused83] +[unused84] +[unused85] +[unused86] +[unused87] +[unused88] +[unused89] +[unused90] +[unused91] +[unused92] +[unused93] +[unused94] +[unused95] +[unused96] +[unused97] +[unused98] +[unused99] +[UNK] +[CLS] +[SEP] +[MASK] +[unused100] +[unused101] +! +" +# +$ +% +& +' +( +) +* ++ +, +- +. +/ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +: +; +< += +> +? +@ +A +B +C +D +E +F +G +H +I +J +K +L +M +N +O +P +Q +R +S +T +U +V +W +X +Y +Z +[ +\ +] +^ +_ +` +a +b +c +d +e +f +g +h +i +j +k +l +m +n +o +p +q +r +s +t +u +v +w +x +y +z +{ +| +} +~ +¡ +¢ +£ +¥ +§ +¨ +© +ª +« +¬ +® +° +± +² +³ +´ +µ +¶ +· +¹ +º +» +¼ +½ +¾ +¿ +À +Á + +Ä +Å +Æ +Ç +È +É +Í +Î +Ñ +Ó +Ö +× +Ø +Ú +Ü +Þ +ß +à +á +â +ã +ä +å +æ +ç +è +é +ê +ë +ì +í +î +ï +ð +ñ +ò +ó +ô +õ +ö +÷ +ø +ù +ú +û +ü +ý +þ +ÿ +Ā +ā +ă +ą +Ć +ć +Č +č +ď +Đ +đ +ē +ė +ę +ě +ğ +ġ +Ħ +ħ +ĩ +Ī +ī +İ +ı +ļ +Ľ +ľ +Ł +ł +ń +ņ +ň +ŋ +Ō +ō +ŏ +ő +Œ +œ +ř +Ś +ś +Ş +ş +Š +š +Ţ +ţ +ť +ũ +ū +ŭ +ů +ű +ų +ŵ +ŷ +ź +Ż +ż +Ž +ž +Ə +ƒ +ơ +ư +ǎ +ǐ +ǒ +ǔ +ǫ +Ș +ș +Ț +ț +ɐ +ɑ +ɔ +ɕ +ə +ɛ +ɡ +ɣ +ɨ +ɪ +ɲ +ɾ +ʀ +ʁ +ʂ +ʃ +ʊ +ʋ +ʌ +ʐ +ʑ +ʒ +ʔ +ʰ +ʲ +ʳ +ʷ +ʻ +ʼ +ʾ +ʿ +ˈ +ː +ˡ +ˢ +ˣ +́ +̃ +̍ +̯ +͡ +Α +Β +Γ +Δ +Ε +Η +Θ +Ι +Κ +Λ +Μ +Ν +Ο +Π +Σ +Τ +Φ +Χ +Ψ +Ω +ά +έ +ή +ί +α +β +γ +δ +ε +ζ +η +θ +ι +κ +λ +μ +ν +ξ +ο +π +ρ +ς +σ +τ +υ +φ +χ +ψ +ω +ό +ύ +ώ +І +Ј +А +Б +В +Г +Д +Е +Ж +З +И +К +Л +М +Н +О +П +Р +С +Т +У +Ф +Х +Ц +Ч +Ш +Э +Ю +Я +а +б +в +г +д +е +ж +з +и +й +к +л +м +н +о +п +р +с +т +у +ф +х +ц +ч +ш +щ +ъ +ы +ь +э +ю +я +ё +і +ї +ј +њ +ћ +Ա +Հ +ա +ե +ի +կ +մ +յ +ն +ո +ս +տ +ր +ւ +ְ +ִ +ֵ +ֶ +ַ +ָ +ֹ +ּ +א +ב +ג +ד +ה +ו +ז +ח +ט +י +כ +ל +ם +מ +ן +נ +ס +ע +פ +צ +ק +ר +ש +ת +، +ء +آ +أ +إ +ئ +ا +ب +ة +ت +ث +ج +ح +خ +د +ذ +ر +ز +س +ش +ص +ض +ط +ظ +ع +غ +ف +ق +ك +ل +م +ن +ه +و +ى +ي +َ +ِ +ٹ +پ +چ +ک +گ +ہ +ی +ے +ं +आ +क +ग +च +ज +ण +त +द +ध +न +प +ब +भ +म +य +र +ल +व +श +ष +स +ह +ा +ि +ी +ु +े +ो +् +। +॥ +আ +ই +এ +ও +ক +খ +গ +চ +ছ +জ +ট +ত +থ +দ +ধ +ন +প +ব +ম +য +র +ল +শ +স +হ +় +া +ি +ী +ু +ে +ো +্ +য় +க +த +ப +ம +ய +ர +ல +வ +ா +ி +ு +் +ร +་ +ག +ང +ད +ན +བ +མ +ར +ལ +ས +ི +ུ +ེ +ོ +ა +ე +ი +ლ +ნ +ო +რ +ს +ᴬ +ᴵ +ᵀ +ᵃ +ᵇ +ᵈ +ᵉ +ᵍ +ᵏ +ᵐ +ᵒ +ᵖ +ᵗ +ᵘ +ᵢ +ᵣ +ᵤ +ᵥ +ᶜ +ᶠ +ḍ +Ḥ +ḥ +Ḩ +ḩ +ḳ +ṃ +ṅ +ṇ +ṛ +ṣ +ṭ +ạ +ả +ấ +ầ +ẩ +ậ +ắ +ế +ề +ể +ễ +ệ +ị +ọ +ố +ồ +ổ +ộ +ớ +ờ +ợ +ụ +ủ +ứ +ừ +ử +ữ +ự +ỳ +ỹ +ἀ +ἐ +ὁ +ὐ +ὰ +ὶ +ὸ +ῆ +ῖ +ῦ +ῶ +‐ +‑ +‒ +– +— +― +‖ +‘ +’ +‚ +“ +” +„ +† +‡ +• +… +‰ +′ +″ +⁄ +⁰ +ⁱ +⁴ +⁵ +⁶ +⁷ +⁸ +⁹ +⁺ +⁻ +ⁿ +₀ +₁ +₂ +₃ +₄ +₅ +₆ +₇ +₈ +₉ +₊ +₍ +₎ +ₐ +ₑ +ₒ +ₓ +ₕ +ₖ +ₘ +ₙ +ₚ +ₛ +ₜ +₤ +€ +₱ +₹ +ℓ +№ +ℝ +⅓ +← +↑ +→ +↔ +⇌ +⇒ +∂ +∈ +− +∗ +∘ +√ +∞ +∧ +∨ +∩ +∪ +≈ +≠ +≡ +≤ +≥ +⊂ +⊆ +⊕ +⋅ +─ +│ +■ +● +★ +☆ +☉ +♠ +♣ +♥ +♦ +♭ +♯ +⟨ +⟩ +ⱼ +、 +。 +《 +》 +「 +」 +『 +』 +〜 +い +う +え +お +か +き +く +け +こ +さ +し +す +せ +そ +た +ち +つ +て +と +な +に +の +は +ひ +ま +み +む +め +も +や +ゆ +よ +ら +り +る +れ +ん +ア +ィ +イ +ウ +エ +オ +カ +ガ +キ +ク +グ +コ +サ +シ +ジ +ス +ズ +タ +ダ +ッ +テ +デ +ト +ド +ナ +ニ +ハ +バ +パ +フ +ブ +プ +マ +ミ +ム +ャ +ュ +ラ +リ +ル +レ +ロ +ン +・ +ー +一 +三 +上 +下 +中 +事 +二 +井 +京 +人 +亻 +仁 +佐 +侍 +光 +公 +力 +北 +十 +南 +原 +口 +史 +司 +吉 +同 +和 +囗 +国 +國 +土 +城 +士 +大 +天 +太 +夫 +女 +子 +宀 +安 +宮 +宿 +小 +尚 +山 +島 +川 +州 +平 +年 +心 +愛 +戸 +文 +新 +方 +日 +明 +星 +書 +月 +木 +本 +李 +村 +東 +松 +林 +正 +武 +氏 +水 +氵 +江 +河 +海 +版 +犬 +王 +生 +田 +白 +皇 +省 +真 +石 +社 +神 +竹 +美 +義 +花 +藤 +西 +谷 +車 +辶 +道 +郎 +郡 +部 +野 +金 +長 +門 +陽 +青 +食 +馬 +高 +龍 +龸 +사 +씨 +의 +이 +한 +fi +fl +! +( +) +, +- +/ +: +the +of +and +to +in +was +The +is +for +as +on +with +that +##s +his +by +he +at +from +it +her +He +had +an +were +you +be +In +she +are +but +which +It +not +or +have +my +him +one +this +me +has +also +up +their +first +out +who +been +they +She +into +all +would +its +##ing +time +two +##a +##e +said +about +when +over +more +other +can +after +back +them +then +##ed +there +like +so +only +##n +could +##d +##i +##y +what +no +##o +where +This +made +than +if +You +##ly +through +we +before +##r +just +some +##er +years +do +New +##t +down +between +new +now +will +three +most +On +around +year +used +such +being +well +during +They +know +against +under +later +did +part +known +off +while +His +re +... +##l +people +until +way +American +didn +University +your +both +many +get +United +became +head +There +second +As +work +any +But +still +again +born +even +eyes +After +including +de +took +And +long +team +season +family +see +right +same +called +name +because +film +don +10 +found +much +school +##es +going +won +place +away +We +day +left +John +000 +hand +since +World +these +how +make +number +each +life +area +man +four +go +No +here +very +National +##m +played +released +never +began +States +album +home +last +too +held +several +May +own +##on +take +end +School +##h +ll +series +What +want +use +another +city +When +2010 +side +At +may +That +came +face +June +think +game +those +high +March +early +September +##al +2011 +looked +July +state +small +thought +went +January +October +##u +based +August +##us +world +good +April +York +us +12 +2012 +2008 +For +2009 +group +along +few +South +little +##k +following +November +something +2013 +December +set +2007 +old +2006 +2014 +located +##an +music +County +City +former +##in +room +ve +next +All +##man +got +father +house +##g +body +15 +20 +18 +started +If +2015 +town +our +line +War +large +population +named +British +company +member +five +My +single +##en +age +State +moved +February +11 +Her +should +century +government +built +come +best +show +However +within +look +men +door +without +need +wasn +2016 +water +One +system +knew +every +died +League +turned +asked +North +St +wanted +building +received +song +served +though +felt +##ia +station +band +##ers +local +public +himself +different +death +say +##1 +30 +##2 +2005 +16 +night +behind +children +English +members +near +saw +together +son +14 +voice +village +13 +hands +help +##3 +due +French +London +top +told +open +published +third +2017 +play +across +During +put +final +often +include +25 +##le +main +having +2004 +once +ever +let +book +led +gave +late +front +find +club +##4 +German +included +species +College +form +opened +mother +women +enough +West +must +2000 +power +really +17 +making +half +##6 +order +might +##is +given +million +times +days +point +full +service +With +km +major +##7 +original +become +seen +II +north +six +##te +love +##0 +national +International +##5 +24 +So +District +lost +run +couldn +career +always +##9 +2003 +##th +country +##z +House +air +tell +south +worked +woman +player +##A +almost +war +River +##ic +married +continued +Then +James +close +black +short +##8 +##na +using +history +returned +light +car +##ra +sure +William +things +General +##ry +2002 +better +support +100 +among +From +feet +King +anything +21 +19 +established +district +2001 +feel +great +##ton +level +Cup +These +written +games +others +already +title +story +##p +law +thing +US +record +role +however +By +students +England +white +control +least +inside +land +##C +22 +give +community +hard +##ie +non +##c +produced +George +round +period +Park +business +various +##ne +does +present +wife +far +taken +per +reached +David +able +version +working +young +live +created +joined +East +living +appeared +case +High +done +23 +important +President +Award +France +position +office +looking +total +general +class +To +production +##S +football +party +brother +keep +mind +free +Street +hair +announced +development +either +nothing +moment +Church +followed +wrote +why +India +San +election +1999 +lead +How +##ch +##rs +words +European +course +considered +America +arms +Army +political +##la +28 +26 +west +east +ground +further +church +less +site +First +Not +Australia +toward +California +##ness +described +works +An +Council +heart +past +military +27 +##or +heard +field +human +soon +founded +1998 +playing +trying +##x +##ist +##ta +television +mouth +although +taking +win +fire +Division +##ity +Party +Royal +program +Some +Don +Association +According +tried +TV +Paul +outside +daughter +Best +While +someone +match +recorded +Canada +closed +region +Air +above +months +elected +##da +##ian +road +##ar +brought +move +1997 +leave +##um +Thomas +1996 +am +low +Robert +formed +person +services +points +Mr +miles +##b +stop +rest +doing +needed +international +release +floor +start +sound +call +killed +real +dark +research +finished +language +Michael +professional +change +sent +50 +upon +29 +track +hit +event +2018 +term +example +Germany +similar +return +##ism +fact +pulled +stood +says +ran +information +yet +result +developed +girl +##re +God +1995 +areas +signed +decided +##ment +Company +seemed +##el +co +turn +race +common +video +Charles +Indian +##ation +blood +art +red +##able +added +rather +1994 +met +director +addition +design +average +minutes +##ies +##ted +available +bed +coming +friend +idea +kind +Union +Road +remained +##ting +everything +##ma +running +care +finally +Chinese +appointed +1992 +Australian +##ley +popular +mean +teams +probably +##land +usually +project +social +Championship +possible +word +Russian +instead +mi +herself +##T +Peter +Hall +Center +seat +style +money +1993 +else +Department +table +Music +current +31 +features +special +events +character +Two +square +sold +debut +##v +process +Although +Since +##ka +40 +Central +currently +education +placed +lot +China +quickly +forward +seven +##ling +Europe +arm +performed +Japanese +1991 +Henry +Now +Dr +##ion +week +Group +myself +big +UK +Washington +ten +deep +1990 +Club +Japan +space +La +directed +smile +episode +hours +whole +##de +##less +Why +wouldn +designed +strong +training +changed +Society +stage +involved +hadn +towards +leading +police +eight +kept +Institute +study +largest +child +eventually +private +modern +Court +throughout +getting +originally +attack +##E +talk +Great +longer +songs +alone +##ine +wide +dead +walked +shot +##ri +Oh +force +##st +Art +today +friends +Island +Richard +1989 +center +construction +believe +size +White +ship +completed +##B +gone +Just +rock +sat +##R +radio +below +entire +families +league +includes +type +lived +official +range +hold +featured +Most +##ter +president +passed +means +##f +forces +lips +Mary +Do +guitar +##ce +food +wall +Of +spent +Its +performance +hear +##P +Western +reported +sister +##et +morning +##M +especially +##ive +Minister +itself +post +bit +groups +1988 +##tion +Black +##ng +Well +raised +sometimes +Canadian +Paris +Spanish +replaced +schools +Academy +leaving +central +female +Christian +Jack +whose +college +onto +provided +##D +##ville +players +actually +stopped +##son +Museum +doesn +##ts +books +fight +allowed +##ur +beginning +Records +awarded +parents +coach +##os +Red +saying +##ck +Smith +Yes +Lake +##L +aircraft +1987 +##ble +previous +ft +action +Italian +African +happened +vocals +Act +future +court +##ge +1986 +degree +phone +##ro +Is +countries +winning +breath +Love +river +matter +Lord +Other +list +self +parts +##ate +provide +cut +shows +plan +1st +interest +##ized +Africa +stated +Sir +fell +owned +earlier +ended +competition +attention +1985 +lower +nearly +bad +older +stay +Saint +##se +certain +1984 +fingers +blue +try +fourth +Grand +##as +king +##nt +makes +chest +movement +states +moving +data +introduced +model +date +section +Los +deal +##I +skin +entered +middle +success +Texas +##w +summer +island +##N +Republic +length +husband +1980 +##ey +reason +anyone +forced +via +base +500 +job +covered +Festival +Roman +successful +rights +cover +Man +writing +Ireland +##F +related +goal +takes +buildings +true +weeks +1983 +Because +opening +novel +ISBN +meet +gold +##ous +mid +km² +standing +Football +Chicago +shook +whom +##ki +1982 +Day +feeling +scored +boy +higher +Force +leader +heavy +fall +question +sense +army +Second +energy +meeting +themselves +kill +##am +board +census +##ya +##ns +mine +meant +market +required +battle +campaign +attended +approximately +Kingdom +runs +active +##ha +contract +clear +previously +health +1979 +Arts +complete +Catholic +couple +units +##ll +##ty +Committee +shoulder +sea +systems +listed +##O +caught +tournament +##G +northern +author +Film +Your +##men +holding +offered +personal +1981 +southern +artist +traditional +studio +200 +capital +##ful +regular +ask +giving +organization +month +news +Are +read +managed +helped +studied +student +defeated +natural +industry +Year +noted +decision +Government +quite +##id +smiled +1972 +Maybe +tracks +##ke +Mark +al +media +engine +hour +Their +relationship +plays +property +structure +1976 +ago +Hill +Martin +1978 +ready +Many +Like +Bay +immediately +generally +Italy +Greek +practice +caused +division +significant +Joseph +speed +Let +thinking +completely +1974 +primary +mostly +##field +##K +1975 +##to +Even +writer +##led +dropped +magazine +collection +understand +route +highest +particular +films +lines +network +Science +loss +carried +direction +green +1977 +location +producer +according +Women +Queen +neck +thus +independent +view +1970 +Angeles +Soviet +distance +problem +Board +tour +western +income +appearance +access +Mexico +nodded +street +surface +arrived +believed +Old +1968 +1973 +becoming +whether +1945 +figure +singer +stand +Following +issue +window +wrong +pain +everyone +lives +issues +park +slowly +la +act +##va +bring +Lee +operations +key +comes +fine +cold +famous +Navy +1971 +Me +additional +individual +##ner +Zealand +goals +county +contains +Service +minute +2nd +reach +talking +particularly +##ham +movie +Director +glass +paper +studies +##co +railway +standard +Education +45 +represented +Chief +Louis +launched +Star +terms +60 +1969 +experience +watched +Another +Press +Tom +staff +starting +subject +break +Virginia +nine +eye +##age +evidence +foot +##est +companies +Prince +##V +gun +create +Big +People +guy +Green +simply +numerous +##line +increased +twenty +##ga +##do +1967 +award +officer +stone +Before +material +Northern +grew +male +plant +Life +legs +step +Al +unit +35 +except +answer +##U +report +response +Edward +commercial +edition +trade +science +##ca +Irish +Law +shown +rate +failed +##ni +remains +changes +mm +limited +larger +Later +cause +waiting +Time +##wood +cost +Bill +manager +activities +likely +allow +operated +retired +##ping +65 +directly +Who +associated +effect +hell +Florida +straight +hot +Valley +management +girls +expected +eastern +Mike +chance +cast +centre +chair +hurt +problems +##li +walk +programs +Team +characters +Battle +edge +pay +maybe +corner +majority +medical +Joe +Summer +##io +attempt +Pacific +command +Radio +##by +names +municipality +1964 +train +economic +Brown +feature +sex +source +agreed +remember +Three +1966 +1965 +Pennsylvania +victory +senior +annual +III +Southern +results +Sam +serving +religious +Jones +appears +##der +despite +claimed +Both +musical +matches +fast +security +selected +Young +double +complex +hospital +chief +Times +##ve +Championships +filled +Public +Despite +beautiful +Research +plans +Province +##ally +Wales +##ko +artists +metal +nearby +Spain +##il +32 +houses +supported +piece +##no +stared +recording +nature +legal +Russia +##ization +remaining +looks +##sh +bridge +closer +cases +scene +marriage +Little +##é +uses +Earth +specific +Frank +theory +Good +discovered +referred +bass +culture +university +presented +Congress +##go +metres +continue +1960 +isn +Awards +meaning +cell +composed +separate +Series +forms +Blue +cross +##tor +increase +test +computer +slightly +Where +Jewish +Town +tree +status +1944 +variety +responsible +pretty +initially +##way +realized +pass +provides +Captain +Alexander +recent +score +broke +Scott +drive +financial +showed +Line +stories +ordered +soldiers +genus +operation +gaze +sitting +society +Only +hope +actor +follow +Empire +Yeah +technology +happy +focus +policy +spread +situation +##ford +##ba +Mrs +watch +Can +1963 +Commission +touch +earned +troops +Under +1962 +individuals +cannot +19th +##lin +mile +expression +exactly +suddenly +weight +dance +stepped +places +appear +difficult +Railway +anti +numbers +kilometres +star +##ier +department +ice +Britain +removed +Once +##lo +Boston +value +##ant +mission +trees +Order +sports +join +serve +Major +poor +Poland +mainly +Theatre +pushed +Station +##it +Lady +federal +silver +##ler +foreign +##ard +Eastern +##den +box +hall +subsequently +lies +acquired +1942 +ancient +CD +History +Jean +beyond +##ger +El +##les +growing +championship +native +Parliament +Williams +watching +direct +overall +offer +Also +80 +Secretary +spoke +Latin +ability +##ated +safe +presence +##ial +headed +regional +planned +1961 +Johnson +throat +consists +##W +extended +Or +bar +walls +Chris +stations +politician +Olympics +influence +share +fighting +speak +hundred +Carolina +die +stars +##tic +color +Chapter +##ish +fear +sleep +goes +Francisco +oil +Bank +sign +physical +##berg +Dutch +seasons +##rd +Games +Governor +sorry +lack +Centre +memory +baby +smaller +charge +Did +multiple +ships +shirt +Assembly +amount +leaves +3rd +Foundation +conditions +1943 +Rock +Democratic +Daniel +##at +winner +products +##ina +store +latter +Professor +civil +prior +host +1956 +soft +vote +needs +Each +rules +1958 +pressure +letter +normal +proposed +levels +records +1959 +paid +intended +Victoria +purpose +okay +historical +issued +1980s +broadcast +rule +simple +picked +firm +Sea +1941 +Elizabeth +1940 +serious +featuring +highly +graduated +mentioned +choice +1948 +replied +percent +Scotland +##hi +females +constructed +1957 +settled +Steve +recognized +cities +crew +glanced +kiss +competed +flight +knowledge +editor +More +Conference +##H +fifth +elements +##ee +##tes +function +newspaper +recently +Miss +cultural +brown +twice +Office +1939 +truth +Creek +1946 +households +USA +1950 +quality +##tt +border +seconds +destroyed +pre +wait +ahead +build +image +90 +cars +##mi +33 +promoted +professor +et +bank +medal +text +broken +Middle +revealed +sides +wing +seems +channel +1970s +Ben +loved +effort +officers +Will +##ff +70 +Israel +Jim +upper +fully +label +Jr +assistant +powerful +pair +positive +##ary +gives +1955 +20th +races +remain +kitchen +primarily +##ti +Sydney +easy +Tour +whispered +buried +300 +News +Polish +1952 +Duke +Columbia +produce +accepted +00 +approach +minor +1947 +Special +44 +Asian +basis +visit +Fort +Civil +finish +formerly +beside +leaned +##ite +median +rose +coast +effects +supposed +Cross +##hip +Corps +residents +Jackson +##ir +Bob +basketball +36 +Asia +seem +Bishop +Book +##ber +ring +##ze +owner +BBC +##ja +transferred +acting +De +appearances +walking +Le +press +grabbed +1954 +officially +1953 +##pe +risk +taught +review +##X +lay +##well +council +Avenue +seeing +losing +Ohio +Super +province +ones +travel +##sa +projects +equipment +spot +Berlin +administrative +heat +potential +shut +capacity +elections +growth +fought +Republican +mixed +Andrew +teacher +turning +strength +shoulders +beat +wind +1949 +Health +follows +camp +suggested +perhaps +Alex +mountain +contact +divided +candidate +fellow +34 +Show +necessary +workers +ball +horse +ways +questions +protect +gas +activity +younger +bottom +founder +Scottish +screen +treatment +easily +com +##house +dedicated +Master +warm +Night +Georgia +Long +von +##me +perfect +website +1960s +piano +efforts +##ide +Tony +sort +offers +Development +Simon +executive +##nd +save +Over +Senate +1951 +1990s +draw +master +Police +##ius +renamed +boys +initial +prominent +damage +Co +##ov +##za +online +begin +occurred +captured +youth +Top +account +tells +Justice +conducted +forest +##town +bought +teeth +Jersey +##di +purchased +agreement +Michigan +##ure +campus +prison +becomes +product +secret +guess +Route +huge +types +drums +64 +split +defeat +estate +housing +##ot +brothers +Coast +declared +happen +titled +therefore +sun +commonly +alongside +Stadium +library +Home +article +steps +telling +slow +assigned +refused +laughed +wants +Nick +wearing +Rome +Open +##ah +Hospital +pointed +Taylor +lifted +escape +participated +##j +drama +parish +Santa +##per +organized +mass +pick +Airport +gets +Library +unable +pull +Live +##ging +surrounding +##ries +focused +Adam +facilities +##ning +##ny +38 +##ring +notable +era +connected +gained +operating +laid +Regiment +branch +defined +Christmas +machine +Four +academic +Iran +adopted +concept +Men +compared +search +traffic +Max +Maria +greater +##ding +widely +##burg +serves +1938 +37 +Go +hotel +shared +typically +scale +1936 +leg +suffered +yards +pieces +Ministry +Wilson +episodes +empty +1918 +safety +continues +yellow +historic +settlement +400 +Come +Corporation +enemy +content +picture +evening +territory +method +trial +solo +driver +Here +##ls +entrance +Prize +spring +whatever +##ent +75 +##ji +reading +Arthur +##cy +Our +clothes +Prime +Illinois +Kong +code +##ria +sit +Harry +Federal +chosen +administration +bodies +begins +stomach +Though +seats +Hong +density +Sun +leaders +Field +museum +chart +platform +languages +##ron +birth +holds +Gold +##un +fish +combined +##ps +4th +1937 +largely +captain +trust +Game +van +boat diff --git a/python/cudf/cudf/tests/data/subword_tokenizer_data/test_sentences.txt b/python/cudf/cudf/tests/data/subword_tokenizer_data/test_sentences.txt new file mode 100644 index 00000000000..6111117192a --- /dev/null +++ b/python/cudf/cudf/tests/data/subword_tokenizer_data/test_sentences.txt @@ -0,0 +1,100 @@ +This text is included to make sure Unicode is handled properly: 力加勝北区ᴵᴺᵀᵃছজটডণত +This sample text is public domain and was randomly selected from Project Guttenberg. +The rain had only ceased with the gray streaks of morning at Blazing Star, and the settlement awoke to a moral sense of cleanliness, and the finding of forgotten knives, tin cups, and smaller camp utensils, where the heavy showers had washed away the debris and dust heaps before the cabin doors. +Indeed, it was recorded in Blazing Star that a fortunate early riser had once picked up on the highway a solid chunk of gold quartz which the rain had freed from its incumbering soil, and washed into immediate and glittering popularity. +Possibly this may have been the reason why early risers in that locality, during the rainy season, adopted a thoughtful habit of body, and seldom lifted their eyes to the rifted or india-ink washed skies above them. +"Cass" Beard had risen early that morning, but not with a view to discovery. +A leak in his cabin roof,--quite consistent with his careless, improvident habits,--had roused him at 4 A. M., with a flooded "bunk" and wet blankets. +The chips from his wood pile refused to kindle a fire to dry his bed-clothes, and he had recourse to a more provident neighbor's to supply the deficiency. +This was nearly opposite. +Mr. Cassius crossed the highway, and stopped suddenly. +But the Goblin could no longer sit quietly listening to the wisdom and intellect downstairs. No, as soon as the light shone in the evening from the attic it seemed to him as though its beams were strong ropes dragging him up, and he had to go and peep through the key-hole. There he felt the sort of feeling we have looking at the great rolling sea in a storm, and he burst into tears. He could not himself say why he wept, but in spite of his tears he felt quite happy. How beautiful it must be to sit under that tree with the student, but that he could not do; he had to content himself with the key-hole and be happy there! +But, wonderful to relate, not an irregular, shapeless fragment of crude ore, fresh from Nature's crucible, but a bit of jeweler's handicraft in the form of a plain gold ring. +Looking at it more attentively, he saw that it bore the inscription, "May to Cass." +Like most of his fellow gold-seekers, Cass was superstitious. +The fountain of classic wisdom, Hypatia herself. +As the ancient sage--the name is unimportant to a monk--pumped water nightly that he might study by day, so I, the guardian of cloaks and parasols, at the sacred doors of her lecture-room, imbibe celestial knowledge. +From my youth I felt in me a soul above the matter-entangled herd. +She revealed to me the glorious fact, that I am a spark of Divinity itself. +A fallen star, I am, sir!' continued he, pensively, stroking his lean stomach--'a fallen star!--fallen, if the dignity of philosophy will allow of the simile, among the hogs of the lower world--indeed, even into the hog-bucket itself. Well, after all, I will show you the way to the Archbishop's. +There is a philosophic pleasure in opening one's treasures to the modest young. +Perhaps you will assist me by carrying this basket of fruit?' And the little man jumped up, put his basket on Philammon's head, and trotted off up a neighbouring street. +Philammon followed, half contemptuous, half wondering at what this philosophy might be, which could feed the self-conceit of anything so abject as his ragged little apish guide; +but the novel roar and whirl of the street, the perpetual stream of busy faces, the line of curricles, palanquins, laden asses, camels, elephants, which met and passed him, and squeezed him up steps and into doorways, as they threaded their way through the great Moon-gate into the ample street beyond, drove everything from his mind but wondering curiosity, and a vague, helpless dread of that great living wilderness, more terrible than any dead wilderness of sand which he had left behind. +Already he longed for the repose, the silence of the Laura--for faces which knew him and smiled upon him; but it was too late to turn back now. +His guide held on for more than a mile up the great main street, crossed in the centre of the city, at right angles, by one equally magnificent, at each end of which, miles away, appeared, dim and distant over the heads of the living stream of passengers, the yellow sand-hills of the desert; +while at the end of the vista in front of them gleamed the blue harbour, through a network of countless masts. +At last they reached the quay at the opposite end of the street; +and there burst on Philammon's astonished eyes a vast semicircle of blue sea, ringed with palaces and towers. +He stopped involuntarily; and his little guide stopped also, and looked askance at the young monk, to watch the effect which that grand panorama should produce on him. +Nana also troubled him in another way. He had sometimes a feeling that she did not admire him. “I know she admires you tremendously, George,” +Mrs. Darling would assure him, and then she would sign to the children to be specially nice to father. Lovely dances followed, in which the only other servant, Liza, was sometimes allowed to join. +Such a midget she looked in her long skirt and maid's cap, though she had sworn, when engaged, that she would never see ten again. +The gaiety of those romps! +And gayest of all was Mrs. Darling, who would pirouette so wildly that all you could see of her was the kiss, and then if you had dashed at her you might have got it. +There never was a simpler happier family until the coming of Peter Pan. +Finally, I always go to sea as a sailor, because of the wholesome exercise and pure air of the fore-castle deck. +For as in this world, head winds are far more prevalent than winds from astern (that is, if you never violate the Pythagorean maxim), so for the most part the Commodore on the quarter-deck gets his atmosphere at second hand from the sailors on the forecastle. He thinks he breathes it first; but not so. +In much the same way do the commonalty lead their leaders in many other things, at the same time that the leaders little suspect it. +But wherefore it was that after having repeatedly smelt the sea as a merchant sailor, I should now take it into my head to go on a whaling voyage; this the invisible police officer of the Fates, who has the constant surveillance of me, and secretly dogs me, and influences me in some unaccountable way—he can better answer than any one else. +And, doubtless, my going on this whaling voyage, formed part of the grand programme of Providence that was drawn up a long time ago. +It came in as a sort of brief interlude and solo between more extensive performances. +I take it that this part of the bill must have run something like this: +“_Grand Contested Election for the Presidency of the United States._ +“WHALING VOYAGE BY ONE ISHMAEL. “BLOODY BATTLE IN AFFGHANISTAN.” +Amy followed, but she poked her hands out stiffly before her, and jerked herself along as if she went by machinery, and her "Ow!" was more suggestive of pins being run into her than of fear and anguish. +Jo gave a despairing groan, and Meg laughed outright, while Beth let her bread burn as she watched the fun with interest. +"It's no use! Do the best you can when the time comes, and if the audience laughs, don't blame me. Come on, Meg." +Then things went smoothly, for Don Pedro defied the world in a speech of two pages without a single break. Hagar, the witch, chanted an awful incantation over her kettleful of simmering toads, with weird effect. +Roderigo rent his chains asunder manfully, and Hugo died in agonies of remorse and arsenic, with a wild, "Ha! Ha!" +This text is included to make sure Unicode is handled properly: 力加勝北区ᴵᴺᵀᵃছজটডণত +This sample text is public domain and was randomly selected from Project Guttenberg. +The rain had only ceased with the gray streaks of morning at Blazing Star, and the settlement awoke to a moral sense of cleanliness, and the finding of forgotten knives, tin cups, and smaller camp utensils, where the heavy showers had washed away the debris and dust heaps before the cabin doors. +Indeed, it was recorded in Blazing Star that a fortunate early riser had once picked up on the highway a solid chunk of gold quartz which the rain had freed from its incumbering soil, and washed into immediate and glittering popularity. +Possibly this may have been the reason why early risers in that locality, during the rainy season, adopted a thoughtful habit of body, and seldom lifted their eyes to the rifted or india-ink washed skies above them. +"Cass" Beard had risen early that morning, but not with a view to discovery. +A leak in his cabin roof,--quite consistent with his careless, improvident habits,--had roused him at 4 A. M., with a flooded "bunk" and wet blankets. +The chips from his wood pile refused to kindle a fire to dry his bed-clothes, and he had recourse to a more provident neighbor's to supply the deficiency. +This was nearly opposite. +Mr. Cassius crossed the highway, and stopped suddenly. +Something glittered in the nearest red pool before him. +I had one experience with Master Philip before our visitors betook themselves back to Kent, which, unfortunate as it was, I cannot but relate here. My cousin would enter into none of those rough amusements in which I passed my time, for fear, I took it, of spoiling his fine broadcloths or of losing a gold buckle. He never could be got to wrestle, though I challenged him more than once. And he was a well-built lad, and might, with a little practice, have become skilled in that sport. He laughed at the homespun I wore about the farm, saying it was no costume for a gentleman's son, and begged me sneeringly to don leather breeches. He would have none of the company of those lads with whom I found pleasure, young Harvey, and Willis's son, who was being trained as Mr. Starkie's assistant. Nor indeed did I disdain to join in a game with Hugo, who had been given to me, and other negro lads. Philip saw no sport in a wrestle or a fight between two of the boys from the quarters, and marvelled that I could lower myself to bet with Harvey the younger. He took not a spark of interest in the gaming cocks we raised together to compete at the local contests and at the fair, and knew not a gaff from a cockspur. Being one day at my wits' end to amuse my cousin, I proposed to him a game of quoits on the green beside the spring-house, and thither we repaired, followed by Hugo, and young Harvey come to look on. Master Philip, not casting as well as he might, cries out suddenly to Hugo: "Begone, you black dog! What business have you here watching a game between gentlemen?" +But, wonderful to relate, not an irregular, shapeless fragment of crude ore, fresh from Nature's crucible, but a bit of jeweler's handicraft in the form of a plain gold ring. +Looking at it more attentively, he saw that it bore the inscription, "May to Cass." +Like most of his fellow gold-seekers, Cass was superstitious. +The fountain of classic wisdom, Hypatia herself. +As the ancient sage--the name is unimportant to a monk--pumped water nightly that he might study by day, so I, the guardian of cloaks and parasols, at the sacred doors of her lecture-room, imbibe celestial knowledge. +From my youth I felt in me a soul above the matter-entangled herd. +She revealed to me the glorious fact, that I am a spark of Divinity itself. +A fallen star, I am, sir!' continued he, pensively, stroking his lean stomach--'a fallen star!--fallen, if the dignity of philosophy will allow of the simile, among the hogs of the lower world--indeed, even into the hog-bucket itself. Well, after all, I will show you the way to the Archbishop's. +There is a philosophic pleasure in opening one's treasures to the modest young. +Perhaps you will assist me by carrying this basket of fruit?' And the little man jumped up, put his basket on Philammon's head, and trotted off up a neighbouring street. +Philammon followed, half contemptuous, half wondering at what this philosophy might be, which could feed the self-conceit of anything so abject as his ragged little apish guide; +but the novel roar and whirl of the street, the perpetual stream of busy faces, the line of curricles, palanquins, laden asses, camels, elephants, which met and passed him, and squeezed him up steps and into doorways, as they threaded their way through the great Moon-gate into the ample street beyond, drove everything from his mind but wondering curiosity, and a vague, helpless dread of that great living wilderness, more terrible than any dead wilderness of sand which he had left behind. +Already he longed for the repose, the silence of the Laura--for faces which knew him and smiled upon him; but it was too late to turn back now. +His guide held on for more than a mile up the great main street, crossed in the centre of the city, at right angles, by one equally magnificent, at each end of which, miles away, appeared, dim and distant over the heads of the living stream of passengers, the yellow sand-hills of the desert; +while at the end of the vista in front of them gleamed the blue harbour, through a network of countless masts. +and there burst on Philammon's astonished eyes a vast semicircle of blue sea, ringed with palaces and towers. +He stopped involuntarily; and his little guide stopped also, and looked askance at the young monk, to watch the effect which that grand panorama should produce on him. +Nana also troubled him in another way. He had sometimes a feeling that she did not admire him. “I know she admires you tremendously, George,” +Mrs. Darling would assure him, and then she would sign to the children to be specially nice to father. Lovely dances followed, in which the only other servant, Liza, was sometimes allowed to join. +Such a midget she looked in her long skirt and maid's cap, though she had sworn, when engaged, that she would never see ten again. +In the Year 1676, the Prince of _Orange_ having, in concert with the _Spaniards_, resolv'd upon the important Siege of _Maestrich_ (the only Town in the _Dutch_ Provinces, then remaining in the Hands of the _French_) it was accordingly invested about the middle of _June_, with an Army of twenty Thousand Men, under the Command of his Highness Prince +_Waldeck_, with the grand Army covering the Siege. It was some Time before the heavy Cannon, which we expected up the _Maes_, from _Holland_, arrived; which gave Occasion to a Piece of Raillery of Monsieur _Calvo_, the Governor, which was as handsomely repartec'd. That Governor, by a Messenger, intimating his Sorrow to find, we had pawn'd our Cannon for Ammunition Bread. Answer was made, That in a few Days we hoped to give him a Taste of the Loaves, which he should find would be sent him into the Town in extraordinary plenty. I remember another Piece of Raillery, which pass'd some Days after between the _Rhingrave_ and the same _Calvo_. The former sending Word, that he hoped within three Weeks to salute that Governor's Mistress within the Place. _Calvo_ reply'd, He'd give him leave to kiss her all over, if he kiss'd her anywhere in three Months. +And gayest of all was Mrs. Darling, who would pirouette so wildly that all you could see of her was the kiss, and then if you had dashed at her you might have got it. +There never was a simpler happier family until the coming of Peter Pan. +Finally, I always go to sea as a sailor, because of the wholesome exercise and pure air of the fore-castle deck. +For as in this world, head winds are far more prevalent than winds from astern (that is, if you never violate the Pythagorean maxim), so for the most part the Commodore on the quarter-deck gets his atmosphere at second hand from the sailors on the forecastle. He thinks he breathes it first; but not so. +In much the same way do the commonalty lead their leaders in many other things, at the same time that the leaders little suspect it. +But wherefore it was that after having repeatedly smelt the sea as a merchant sailor, I should now take it into my head to go on a whaling voyage; this the invisible police officer of the Fates, who has the constant surveillance of me, and secretly dogs me, and influences me in some unaccountable way—he can better answer than any one else. +And, doubtless, my going on this whaling voyage, formed part of the grand programme of Providence that was drawn up a long time ago. +It came in as a sort of brief interlude and solo between more extensive performances. +The British Isles have been ringing for the last few years with the word 'Art' in its German sense; with 'High Art,' 'Symbolic Art,' 'Ecclesiastical Art,' 'Dramatic Art,' 'Tragic Art,' and so forth; and every well-educated person is expected, nowadays, to know something about Art. Yet in spite of all translations of German 'AEsthetic' treatises, and 'Kunstnovellen,' the mass of the British people cares very little about the matter, and sits contented under the imputation of 'bad taste.' Our stage, long since dead, does not revive; our poetry is dying; our music, like our architecture, only reproduces the past; our painting is only first-rate when it handles landscapes and animals, and seems likely so to remain; but, meanwhile, nobody cares. Some of the deepest and most earnest minds vote the question, in general, a 'sham and a snare,' and whisper to each other +confidentially, that Gothic art is beginning to be a 'bore,' and that Sir Christopher Wren was a very good fellow after all; while the middle classes look on the Art movement half amused, as with a pretty toy, half sulkily suspicious of Popery and Paganism, and think, +apparently, that Art is very well when it means nothing, and is merely used to beautify drawing-rooms and shawl patterns; not to mention that, if there were no painters, Mr. Smith could not hand down to posterity likenesses of himself, Mrs. Smith, and family. But +when 'Art' dares to be in earnest, and to mean something, much more to connect itself with religion, Smith's tone alters. He will teach 'Art' to keep in what he considers its place, and if it refuses, take the law of it, and put it into the Ecclesiastical Court. So he says, and what is more, he means what he says; and as all the world, from Hindostan to Canada, knows by most practical proof, what he means, he sooner or later does, perhaps not always in the wisest way, but still he does it.Ah! It's pleasant to drop into my own easy-chair my dear though a little palpitating what with trotting up-stairs and what with trotting down, and why kitchen stairs should all be corner stairs is for the builders to justify though I do not think they fully understand their trade and never did, else why the sameness and why not more conveniences and fewer +draughts and likewise making a practice of laying the plaster on too thick I am well convinced which holds the damp, and as to chimney-pots putting them on by guess-work like hats at a party and no more knowing what their effect will be upon the smoke bless you than I do if so much, except that it will mostly be either to send it down your throat in a straight form or give it a twist before it goes there. And what I says speaking as I find of those new metal chimneys all manner of shapes (there's a row of 'em at Miss Wozenham's lodging-house lower down on the other side of the way) is that they only work your smoke into artificial patterns for you before you swallow it and that I'd quite as soon swallow mine plain, the flavour being the same, not to mention the conceit of putting up signs on the top of your house to show the forms in which you take your smoke into your inside +Amy followed, but she poked her hands out stiffly before her, and jerked herself along as if she went by machinery, and her "Ow!" was more suggestive of pins being run into her than of fear and anguish. +Jo gave a despairing groan, and Meg laughed outright, while Beth let her bread burn as she watched the fun with interest. +"It's no use! Do the best you can when the time comes, and if the audience laughs, don't blame me. Come on, Meg." +Then things went smoothly, for Don Pedro defied the world in a speech of two pages without a single break. Hagar, the witch, chanted an awful incantation over her kettleful of simmering toads, with weird effect.''' \ No newline at end of file diff --git a/python/cudf/cudf/tests/data/vocab_hash/bert-base-uncased-vocab-5per.txt b/python/cudf/cudf/tests/data/vocab_hash/bert-base-uncased-vocab-5per.txt deleted file mode 100644 index 7d156a38f28..00000000000 --- a/python/cudf/cudf/tests/data/vocab_hash/bert-base-uncased-vocab-5per.txt +++ /dev/null @@ -1,2475 +0,0 @@ -[PAD] -[unused0] -[unused1] -[unused2] -[unused3] -[unused4] -[unused5] -[unused6] -[unused7] -[unused8] -[unused9] -[unused10] -[unused11] -[unused12] -[unused13] -[unused14] -[unused15] -[unused16] -[unused17] -[unused18] -[unused19] -[unused20] -[unused21] -[unused22] -[unused23] -[unused24] -[unused25] -[unused26] -[unused27] -[unused28] -[unused29] -[unused30] -[unused31] -[unused32] -[unused33] -[unused34] -[unused35] -[unused36] -[unused37] -[unused38] -[unused39] -[unused40] -[unused41] -[unused42] -[unused43] -[unused44] -[unused45] -[unused46] -[unused47] -[unused48] -[unused49] -[unused50] -[unused51] -[unused52] -[unused53] -[unused54] -[unused55] -[unused56] -[unused57] -[unused58] -[unused59] -[unused60] -[unused61] -[unused62] -[unused63] -[unused64] -[unused65] -[unused66] -[unused67] -[unused68] -[unused69] -[unused70] -[unused71] -[unused72] -[unused73] -[unused74] -[unused75] -[unused76] -[unused77] -[unused78] -[unused79] -[unused80] -[unused81] -[unused82] -[unused83] -[unused84] -[unused85] -[unused86] -[unused87] -[unused88] -[unused89] -[unused90] -[unused91] -[unused92] -[unused93] -[unused94] -[unused95] -[unused96] -[unused97] -[unused98] -[UNK] -[CLS] -[SEP] -[MASK] -[unused99] -[unused100] -[unused101] -[unused102] -[unused103] -[unused104] -[unused105] -[unused106] -[unused107] -[unused108] -[unused109] -[unused110] -[unused111] -[unused112] -[unused113] -[unused114] -[unused115] -[unused116] -[unused117] -[unused118] -[unused119] -[unused120] -[unused121] -[unused122] -[unused123] -[unused124] -[unused125] -[unused126] -[unused127] -[unused128] -[unused129] -[unused130] -[unused131] -[unused132] -[unused133] -[unused134] -[unused135] -[unused136] -[unused137] -[unused138] -[unused139] -[unused140] -[unused141] -[unused142] -[unused143] -[unused144] -[unused145] -[unused146] -[unused147] -[unused148] -[unused149] -[unused150] -[unused151] -[unused152] -[unused153] -[unused154] -[unused155] -[unused156] -[unused157] -[unused158] -[unused159] -[unused160] -[unused161] -[unused162] -[unused163] -[unused164] -[unused165] -[unused166] -[unused167] -[unused168] -[unused169] -[unused170] -[unused171] -[unused172] -[unused173] -[unused174] -[unused175] -[unused176] -[unused177] -[unused178] -[unused179] -[unused180] -[unused181] -[unused182] -[unused183] -[unused184] -[unused185] -[unused186] -[unused187] -[unused188] -[unused189] -[unused190] -[unused191] -[unused192] -[unused193] -[unused194] -[unused195] -[unused196] -[unused197] -[unused198] -[unused199] -[unused200] -[unused201] -[unused202] -[unused203] -[unused204] -[unused205] -[unused206] -[unused207] -[unused208] -[unused209] -[unused210] -[unused211] -[unused212] -[unused213] -[unused214] -[unused215] -[unused216] -[unused217] -[unused218] -[unused219] -[unused220] -[unused221] -[unused222] -[unused223] -[unused224] -[unused225] -[unused226] -[unused227] -[unused228] -[unused229] -[unused230] -[unused231] -[unused232] -[unused233] -[unused234] -[unused235] -[unused236] -[unused237] -[unused238] -[unused239] -[unused240] -[unused241] -[unused242] -[unused243] -[unused244] -[unused245] -[unused246] -[unused247] -[unused248] -[unused249] -[unused250] -[unused251] -[unused252] -[unused253] -[unused254] -[unused255] -[unused256] -[unused257] -[unused258] -[unused259] -[unused260] -[unused261] -[unused262] -[unused263] -[unused264] -[unused265] -[unused266] -[unused267] -[unused268] -[unused269] -[unused270] -[unused271] -[unused272] -[unused273] -[unused274] -[unused275] -[unused276] -[unused277] -[unused278] -[unused279] -[unused280] -[unused281] -[unused282] -[unused283] -[unused284] -[unused285] -[unused286] -[unused287] -[unused288] -[unused289] -[unused290] -[unused291] -[unused292] -[unused293] -[unused294] -[unused295] -[unused296] -[unused297] -[unused298] -[unused299] -[unused300] -[unused301] -[unused302] -[unused303] -[unused304] -[unused305] -[unused306] -[unused307] -[unused308] -[unused309] -[unused310] -[unused311] -[unused312] -[unused313] -[unused314] -[unused315] -[unused316] -[unused317] -[unused318] -[unused319] -[unused320] -[unused321] -[unused322] -[unused323] -[unused324] -[unused325] -[unused326] -[unused327] -[unused328] -[unused329] -[unused330] -[unused331] -[unused332] -[unused333] -[unused334] -[unused335] -[unused336] -[unused337] -[unused338] -[unused339] -[unused340] -[unused341] -[unused342] -[unused343] -[unused344] -[unused345] -[unused346] -[unused347] -[unused348] -[unused349] -[unused350] -[unused351] -[unused352] -[unused353] -[unused354] -[unused355] -[unused356] -[unused357] -[unused358] -[unused359] -[unused360] -[unused361] -[unused362] -[unused363] -[unused364] -[unused365] -[unused366] -[unused367] -[unused368] -[unused369] -[unused370] -[unused371] -[unused372] -[unused373] -[unused374] -[unused375] -[unused376] -[unused377] -[unused378] -[unused379] -[unused380] -[unused381] -[unused382] -[unused383] -[unused384] -[unused385] -[unused386] -[unused387] -[unused388] -[unused389] -[unused390] -[unused391] -[unused392] -[unused393] -[unused394] -[unused395] -[unused396] -[unused397] -[unused398] -[unused399] -[unused400] -[unused401] -[unused402] -[unused403] -[unused404] -[unused405] -[unused406] -[unused407] -[unused408] -[unused409] -[unused410] -[unused411] -[unused412] -[unused413] -[unused414] -[unused415] -[unused416] -[unused417] -[unused418] -[unused419] -[unused420] -[unused421] -[unused422] -[unused423] -[unused424] -[unused425] -[unused426] -[unused427] -[unused428] -[unused429] -[unused430] -[unused431] -[unused432] -[unused433] -[unused434] -[unused435] -[unused436] -[unused437] -[unused438] -[unused439] -[unused440] -[unused441] -[unused442] -[unused443] -[unused444] -[unused445] -[unused446] -[unused447] -[unused448] -[unused449] -[unused450] -[unused451] -[unused452] -[unused453] -[unused454] -[unused455] -[unused456] -[unused457] -[unused458] -[unused459] -[unused460] -[unused461] -[unused462] -[unused463] -[unused464] -[unused465] -[unused466] -[unused467] -[unused468] -[unused469] -[unused470] -[unused471] -[unused472] -[unused473] -[unused474] -[unused475] -[unused476] -[unused477] -[unused478] -[unused479] -[unused480] -[unused481] -[unused482] -[unused483] -[unused484] -[unused485] -[unused486] -[unused487] -[unused488] -[unused489] -[unused490] -[unused491] -[unused492] -[unused493] -[unused494] -[unused495] -[unused496] -[unused497] -[unused498] -[unused499] -[unused500] -[unused501] -[unused502] -[unused503] -[unused504] -[unused505] -[unused506] -[unused507] -[unused508] -[unused509] -[unused510] -[unused511] -[unused512] -[unused513] -[unused514] -[unused515] -[unused516] -[unused517] -[unused518] -[unused519] -[unused520] -[unused521] -[unused522] -[unused523] -[unused524] -[unused525] -[unused526] -[unused527] -[unused528] -[unused529] -[unused530] -[unused531] -[unused532] -[unused533] -[unused534] -[unused535] -[unused536] -[unused537] -[unused538] -[unused539] -[unused540] -[unused541] -[unused542] -[unused543] -[unused544] -[unused545] -[unused546] -[unused547] -[unused548] -[unused549] -[unused550] -[unused551] -[unused552] -[unused553] -[unused554] -[unused555] -[unused556] -[unused557] -[unused558] -[unused559] -[unused560] -[unused561] -[unused562] -[unused563] -[unused564] -[unused565] -[unused566] -[unused567] -[unused568] -[unused569] -[unused570] -[unused571] -[unused572] -[unused573] -[unused574] -[unused575] -[unused576] -[unused577] -[unused578] -[unused579] -[unused580] -[unused581] -[unused582] -[unused583] -[unused584] -[unused585] -[unused586] -[unused587] -[unused588] -[unused589] -[unused590] -[unused591] -[unused592] -[unused593] -[unused594] -[unused595] -[unused596] -[unused597] -[unused598] -[unused599] -[unused600] -[unused601] -[unused602] -[unused603] -[unused604] -[unused605] -[unused606] -[unused607] -[unused608] -[unused609] -[unused610] -[unused611] -[unused612] -[unused613] -[unused614] -[unused615] -[unused616] -[unused617] -[unused618] -[unused619] -[unused620] -[unused621] -[unused622] -[unused623] -[unused624] -[unused625] -[unused626] -[unused627] -[unused628] -[unused629] -[unused630] -[unused631] -[unused632] -[unused633] -[unused634] -[unused635] -[unused636] -[unused637] -[unused638] -[unused639] -[unused640] -[unused641] -[unused642] -[unused643] -[unused644] -[unused645] -[unused646] -[unused647] -[unused648] -[unused649] -[unused650] -[unused651] -[unused652] -[unused653] -[unused654] -[unused655] -[unused656] -[unused657] -[unused658] -[unused659] -[unused660] -[unused661] -[unused662] -[unused663] -[unused664] -[unused665] -[unused666] -[unused667] -[unused668] -[unused669] -[unused670] -[unused671] -[unused672] -[unused673] -[unused674] -[unused675] -[unused676] -[unused677] -[unused678] -[unused679] -[unused680] -[unused681] -[unused682] -[unused683] -[unused684] -[unused685] -[unused686] -[unused687] -[unused688] -[unused689] -[unused690] -[unused691] -[unused692] -[unused693] -[unused694] -[unused695] -[unused696] -[unused697] -[unused698] -[unused699] -[unused700] -[unused701] -[unused702] -[unused703] -[unused704] -[unused705] -[unused706] -[unused707] -[unused708] -[unused709] -[unused710] -[unused711] -[unused712] -[unused713] -[unused714] -[unused715] -[unused716] -[unused717] -[unused718] -[unused719] -[unused720] -[unused721] -[unused722] -[unused723] -[unused724] -[unused725] -[unused726] -[unused727] -[unused728] -[unused729] -[unused730] -[unused731] -[unused732] -[unused733] -[unused734] -[unused735] -[unused736] -[unused737] -[unused738] -[unused739] -[unused740] -[unused741] -[unused742] -[unused743] -[unused744] -[unused745] -[unused746] -[unused747] -[unused748] -[unused749] -[unused750] -[unused751] -[unused752] -[unused753] -[unused754] -[unused755] -[unused756] -[unused757] -[unused758] -[unused759] -[unused760] -[unused761] -[unused762] -[unused763] -[unused764] -[unused765] -[unused766] -[unused767] -[unused768] -[unused769] -[unused770] -[unused771] -[unused772] -[unused773] -[unused774] -[unused775] -[unused776] -[unused777] -[unused778] -[unused779] -[unused780] -[unused781] -[unused782] -[unused783] -[unused784] -[unused785] -[unused786] -[unused787] -[unused788] -[unused789] -[unused790] -[unused791] -[unused792] -[unused793] -[unused794] -[unused795] -[unused796] -[unused797] -[unused798] -[unused799] -[unused800] -[unused801] -[unused802] -[unused803] -[unused804] -[unused805] -[unused806] -[unused807] -[unused808] -[unused809] -[unused810] -[unused811] -[unused812] -[unused813] -[unused814] -[unused815] -[unused816] -[unused817] -[unused818] -[unused819] -[unused820] -[unused821] -[unused822] -[unused823] -[unused824] -[unused825] -[unused826] -[unused827] -[unused828] -[unused829] -[unused830] -[unused831] -[unused832] -[unused833] -[unused834] -[unused835] -[unused836] -[unused837] -[unused838] -[unused839] -[unused840] -[unused841] -[unused842] -[unused843] -[unused844] -[unused845] -[unused846] -[unused847] -[unused848] -[unused849] -[unused850] -[unused851] -[unused852] -[unused853] -[unused854] -[unused855] -[unused856] -[unused857] -[unused858] -[unused859] -[unused860] -[unused861] -[unused862] -[unused863] -[unused864] -[unused865] -[unused866] -[unused867] -[unused868] -[unused869] -[unused870] -[unused871] -[unused872] -[unused873] -[unused874] -[unused875] -[unused876] -[unused877] -[unused878] -[unused879] -[unused880] -[unused881] -[unused882] -[unused883] -[unused884] -[unused885] -[unused886] -[unused887] -[unused888] -[unused889] -[unused890] -[unused891] -[unused892] -[unused893] -[unused894] -[unused895] -[unused896] -[unused897] -[unused898] -[unused899] -[unused900] -[unused901] -[unused902] -[unused903] -[unused904] -[unused905] -[unused906] -[unused907] -[unused908] -[unused909] -[unused910] -[unused911] -[unused912] -[unused913] -[unused914] -[unused915] -[unused916] -[unused917] -[unused918] -[unused919] -[unused920] -[unused921] -[unused922] -[unused923] -[unused924] -[unused925] -[unused926] -[unused927] -[unused928] -[unused929] -[unused930] -[unused931] -[unused932] -[unused933] -[unused934] -[unused935] -[unused936] -[unused937] -[unused938] -[unused939] -[unused940] -[unused941] -[unused942] -[unused943] -[unused944] -[unused945] -[unused946] -[unused947] -[unused948] -[unused949] -[unused950] -[unused951] -[unused952] -[unused953] -[unused954] -[unused955] -[unused956] -[unused957] -[unused958] -[unused959] -[unused960] -[unused961] -[unused962] -[unused963] -[unused964] -[unused965] -[unused966] -[unused967] -[unused968] -[unused969] -[unused970] -[unused971] -[unused972] -[unused973] -[unused974] -[unused975] -[unused976] -[unused977] -[unused978] -[unused979] -[unused980] -[unused981] -[unused982] -[unused983] -[unused984] -[unused985] -[unused986] -[unused987] -[unused988] -[unused989] -[unused990] -[unused991] -[unused992] -[unused993] -notions -bc -宀 -rudd -1839 -appeals -fabric -charges -roadside -interview -goethe -rr -##ス -heroine -housing -##xx -owens -who -青 -prominent -##ments -spare -sloane -paranormal -昭 -physiological -reply -josiah -mort -316 -descend -pencil -nepal -minus -janata -106 -hardin -enamel -ђ -##urance -scans -happening -advising -identifies -institutional -dominican -charts -convince -51st -kingdoms -heritage -comedy -banker -##me -##its -1611 -##dos -##pire -fog -bulky -light -reborn -consultation -##loading -teachers -ashe -frank -bandits -governmental -##rdon -privileged -##mins -##ᅭ -adherence -ko -motionless -fighters -sui -significant -others -incurred -posts -defected -alexandra -continue -tormented -encourage -delaying -stomach -conscience -deserve -pumps -tanaka -##fles -flushed -parks -##nam -##hold -submitted -duran -monroe -parasites -emptiness -prakash -break -##xley -haynes -neil -gallons -##onus -manages -69 -aragon -memorable -matching -inclination -molten -humboldt -riders -##ː -marketed -##yala -squealed -##qual -talk -tournaments -##boot -##a -##gart -##rra -##ifies -deny -personal -nancy -splits -##ˈ -permitting -projected -fool -attach -pill -1776 -##ს -raoul -cocaine -conservation -luther -appeal -##tal -dq -##gny -##vial -reasonable -unitarian -melville -stephens -##民 -balancing -lowe -swore -matrix -concluded -##cap -tee -capacity -searing -living -lc -qualified -shoes -##sam -rounds -293 -237 -attic -shafts -older -underworld -tehran -simulcast -##abe -##lich -quarterfinals -elton -unreasonable -ষ -m1 -upbringing -faith -misconduct -##ᄀ -miner -sudanese -dense -whimpered -sabre -professionally -ex -grasp -infections -knee -shoving -ł -##ehan -##ʊ -skyscraper -##mont -purchases -fright -drivers -buyer -shit -foreigner -1764 -gloria -##rem -rejecting -petra -spots -memoirs -tracey -##gy -##ades -reused -##igh -3 -hopeless -rita -specialised -〈 -portion -distress -##ו -##tub -jamestown -clause -journalists -network -napoleon -##դ -fortunate -focus -ahead -concordia -168 -hitch -managed -superliga -shu -euroleague -clock -johnny -merits -softened -grimaced -losses -ferdinand -gmbh -wreath -##astic -harlem -den -algae -43rd -##kushima -welding -abilities -##nting -assumption -announcer -auditioned -mathematician -retrospective -##谷 -laced -motive -fixed -joshua -emerging -foreign -brutal -れ -seaside -manfred -connects -##nesian -heir -ս -experience -jem -##sett -mark -harper -##de -one -additive -bypass -assembly -continents -boom -minimal -##wheel -unification -participating -shareholder -arizona -casimir -##স -viet -##inski -restoring -abolished -dea -glowed -aeronautics -selfish -serbia -easily -count -##llet -justified -descendant -racer -authentic -##care -weightlifting -annapolis -songs -abrams -deciduous -costing -silence -spent -##form -##kou -screens -braden -##scribe -1934 -permit -##ric -##ane -gaston -comet -gift -trembled -##fa -everyday -forged -milwaukee -##« -larger -nickel -danes -appropriated -malibu -banquet -shared -26 -##ucher -ky -##urse -ᅴ -divided -##itarian -endeavors -blank -kw -investor -##ners -moldova -veteran -pandit -deposited -involved -pace -experiencing -£ -algorithms -safely -##pore -xp -unite -fin -clearance -intriguing -indications -almighty -##iable -corvette -##uding -panzer -monster -ban -eternal -trap -shot -saxophonist -##iam -dai -studio -##eak -baltic -placed -northern -suppliers -fungus -prasad -##qu -priorities -robinson -list -conner -1960 -hendricks -##ani -shoulder -kite -starting -remorse -mysteriously -##master -lena -1923 -##〜 -##ln -pianist -##ision -adulthood -century -skier -cannot -mai -summarized -oxfordshire -##dded -ordination -##vis -tin -resource -expanse -inmate -doyle -##osa -stained -yemen -spoken -stealth -natalie -neatly -stamp -pens -beautiful -ک -pulp -shortlisted -anastasia -models -theory -coincided -##dor -deception -##rt -comparable -##न -offered -##ק -indonesian -canberra -martinez -whereas -clutch -aqua -roadway -dorothea -triumph -landfall -ernesto -##quist -מ -turk -##bau -##num -teammate -injuring -vampire -##լ -somewhat -sophia -standards -##♦ -actions -judas -electoral -robertson -crap -depictions -inherited -##ffey -byron -demands -gorilla -##mona -misunderstood -dante -##yah -##ark -compiled -gaulle -win -activity -giggling -polynomials -plantation -included -ɛ -kai -282 -vol -1650 -nationally -stick -friar -bourbon -vow -erratic -drifting -pornography -क -remains -##ನ -dumping -rifle -backdrop -found -pondered -gil -##hetic -outlaw -secure -razor -survived -behind -objectives -josef -##空 -##typical -intuitive -within -##秀 -torch -relevant -scoop -sox -buckle -motion -##gging -chorale -genetically -##ར -##· -yell -yielding -##riam -campbell -archive -hillsborough -diamond -somerville -glitter -graduating -##॥ -kendall -天 -videos -disdain -nigerian -##esses -##hoe -jillian -bloomberg -##miya -fleeting -quilt -facebook -witnessed -destruction -cleansing -christophe -explained -mistaken -##toy -college -##arus -islanders -releasing -tourist -psychotic -thrilled -alt -rafael -wessex -pastry -enthusiast -assists -##ress -出 -##aker -eu -specializing -##borg -##if -unofficially -studied -locating -cello -hawks -chevalier -182 -tissues -cactus -onslaught -##kur -purely -清 -invited -##χ -joey -##ered -##uin -##brook -club -billion -culturally -##hale -##hot -##quisite -riches -ghosts -definite -fern -boycott -worse -arrange -##西 -##br -timber -eva -might -truss -nude -r -envisioned -1635 -dependence -##ault -##lding -##nh -eyelashes -##agi -spun -##vich -grouped -problem -helium -##dge -dent -##rick -mustache -progress -cuthbert -##鈴 -hurling -1779 -shepherd -pd -tiffany -pad -modules -scientology -rapper -electors -colorado -enforcement -##inate -##rent -murderer -boise -pollard -mason -drafting -straightforward -accompanying -extensions -scaled -yamamoto -. -facilitate -bombardment -101 -inviting -##mute -198 -dammit -layne -dubai -clint -shelves -briggs -##istan -revised -remembers -soloist -gables -cranes -##ower -##ok -kaladin -1961 -abdul -weiss -startup -thereof -hose -unofficial -##berg -knicks -enroll -das -satisfactory -playwright -functional -##oted -exposure -credited -国 -returned -searched -wii -banning -champaign -asthma -##son -##yk -elias -##ᵉ -directorial -##vos -swing -karin -fours -cbc -##bers -residences -exploration -depending -credentials -sykes -а -##マ -restarted -##nivorous -357 -attacks -trumpets -combinations -banking -stops -##listic -maneuvers -duffy -mutation -stop -explorers -behaviour -subtly -developing -ions -responsibility -racks -colombo -widowed -addison -ironic -ventured -utc -##ゆ -eh -volvo -extinguished -248 -##ク -enclosure -impulse -shocks -rainforest -waiter -##月 -circumstances -windmill -cambrian -granada -nichols -ordained -terraces -renewed -geese -cite -##oc -anticipating -eccentric -macau -jing -##itz -spike -stunt -democratic -talmud -flooded -blew -tate -sharks -##ali -##ロ -blanc -defense -driven -snapped -halfway -whispering -##mist -debuted -##good -legion -sun -alias -##lier -rigid -amounted -mari -relates -allowed -negotiations -rosary -investigators -gossip -transcribed -broker -nocturnal -《 -reckon -##ट -##kla -wil -amid -lincolnshire -н -mister -remarked -##yd -##hardt -##escence -##を -soothe -accounted -pavel -nonstop -baronetcy -##irs -##aly -preparing -specializes -##ena -strategies -steelers -語 -145 -madness -##ays -stresses -isolate -uranium -vu -collections -cabbage -bremen -jews -trailers -森 -##eg -protectorate -174 -collapsing -止 -offer -302 -ached -degrees -421 -physiology -silk -toward -eventual -##court -talents -##ular -cheng -parameters -surge -fifties -##ز -proclaimed -billing -watery -handbook -compositions -##nished -piano -ministries -⽥ -arterial -##nous -##th -publishes -integration -hotter -decision -souza -pitchfork -started -hezbollah -##s -vietnamese -initiated -ubiquitous -と -af -electrical -bend -minnesota -pigeon -cardiovascular -##ol -sparrow -readers -wilkinson -bled -hugo -brute -1811 -dust -distinguishing -##lett -goldstein -pontiac -detainees -bautista -94 -##wald -##45 -年 -blowing -bartholomew -##dit -airplane -projection -##furt -lighting -##ke -1830s -cantata -tumbling -iraqi -shape -mortals -albans -shannon -warlock -ventral -smug -quoting -buy -overboard -kelley -##lifting -order -##50 -foothills -lahore -##ctus -refugee -##ion -deepest -wetland -telugu -น -clears -hiring -freighter -throbbing -attacked -##lian -haiti -repeal -##れ -##59 -paddy -bladder -beating -soviets -pit -blackmail -##ifier -timed -advances -##tment -gesellschaft -ronan -newtown -niger -neon -##boards -barbarians -barrie -longitude -##cio -immigrant -annum -sprint -trumpeter -1956 -uprising -##ও -sustain -interchange -blazed -motif -sediment -absorbing -wah -jun -艹 -310 -##miento -##nas -venture -##idal -extend -locker -constraint -newport -identifying -arctic -##ہ -cary -handkerchief -##ٹ -upright -nouns -म -admitting -contested -duke -healing -##29 -photographers -equestrian -thrusts -##fi -249 -propose -balloons -interfering -terrifying -leinster -sweeps -ₕ -##hi -accuracy -trunk -bundesliga -slug -handled -stance -vibrations -northbound -gamma -##oor -cigar -buster -thirds -loch -##nessy -detector -nascar -terminated -321 -chooses -horizontal -genesis -##urs -##bility -listen -45th -worker -mc -mexican -kendrick -info -##uw -pediatric -rev -isolated -observation -##nified -orient -delicate -breakers -##chet -1662 -hovered -##nl -beck -75 -##tama -hawaii -wrestler -singers -tire -suspected -measurement -ᄊ -sprawling -gordon -excess -support -kind -commemorated -skilled -insertion -consider -mustered -covent -##mad -##vision -##ria -arsenic -ನ -policemen -enrollment -ios -graveyard -peruvian -unemployment -regulations -above -civilians -cents -worry -townspeople -forced -##uru -##sz -cause -sighs -compiler -sable -fact -surgery -dc -##pants -##beat -sings -##field -recall -cape -eyeing -hana -bullshit -baird -navigator -netting -squire -delayed -##nai -cretaceous -medina -presided -lengths -##trix -schedules -cardiac -heal -brody -lal -entire -crossings -preach -brigade -diva -breaks -boogie -##tre -cycling -goblin -spread -engineers -servants -1000 -posthumous -beyond -jerry -¶ -procession -togo -coyote -organist -##abad -them -##view -app -##alle -interviewed -oblivion -##rosis -hu -talking -530 -bombing -philosopher -escalated -miocene -oyster -donkey -assaults -##graphs -honest -falcons -korean -collaborator -azerbaijan -gunpowder -stuck -demo -embryo -forty -##or -finland -wrenched -confederation -eng -paving -##west -baroque -execute -personnel -lars -##oise -yanked -needy -leah -nicknamed -bestowed -guangzhou -hanson -##bbling -hundred -kilometer -night -##│ -##fields -racehorse -curved -後 -median -guantanamo -superstructure -##isan -##odes -grins -み -##channel -burnley -##pins -auxiliary -caine -white -valuation -##lving -expert -##rea -mauritius -iona -font -valentine -tribes -##bate -profitable -##rogate -ebony -soo -initial -marin -helicopters -debates -dragging -decent -##ours -yourself -microscopy -compilation -intensive -bronx -kimberly -wills -digging -rumored -werner -##fleet -bracing -sloan -album -meaningful -marine -essence -hindi -##dorf -doubt -thirties -habits -mangrove -miracles -ballast -` -bodied -persist -browning -mas -##sl -child -historically -certificates -polished -lucivar -benevolent -tipperary -repealed -centennial -##analysis -middle -difficulty -archived -elk -ha -lamp -barrow -##ध -meteor -##cellular -turkey -藤 -dune -xml -##hered -lo -unbearable -ottoman -licked -talon -ლ -yorker -smashed -damage -landau -visited -##ressed -suit -reactors -gracefully -cleveland -baptiste -martini -unified -ratified -kobe -attract -accelerated -##duk -suffix -builders -infection -wit -##qa -entering -ninety -touching -hue -headline -advises -##ש -sand -rms -##am -paddington -ebook -brightened -td -butter -rayon -bilingual -granite -³ -eden -##vres -distinguish -madman -syntax -rigorous -shortages -##sian -bancroft -praised -administrators -##bolic -##pool -paved -compatible -morrow -thumping -declares -convincing -freelance -differently -accelerating -arrive -##nated -preliminary -wraps -fringe -glow -##tension -stockings -emmanuel -according -carmen -sprayed -pulsed -lyman -angola -styled -sewing -confronting -##idad -bitterness -eating -presley -district -stevie -##ddle -##nel -clutches -carry -##¡ -##para -royals -1936 -rebranded -departing -ᵏ -overrun -legend -kitty -##400 -enchanted -funny -activities diff --git a/python/cudf/cudf/tests/data/vocab_hash/ground_truth_vocab_hash_5per.txt b/python/cudf/cudf/tests/data/vocab_hash/ground_truth_vocab_hash_5per.txt deleted file mode 100644 index b63a3b883a4..00000000000 --- a/python/cudf/cudf/tests/data/vocab_hash/ground_truth_vocab_hash_5per.txt +++ /dev/null @@ -1,3100 +0,0 @@ -26899 -27424 -618 -0 0 -9308113254891556867 0 -436896553784417287 3 -2385682838371229189 10 -1558319825288788995 15 -1694636932519955459 18 -10804654694511444996 21 -18098925775253437954 25 -6737924902096233986 27 -12420164637450604548 29 -10052209762446030853 33 -17136277123483534341 38 -3816962228559380485 43 -10000432285949172226 48 -3595721221582369282 50 -8300629869194307073 52 -13201888020163964420 53 -1911143973647033348 57 -6800828846832400386 61 -11236791597074179585 63 -9168098438593696772 64 -7262274946389325317 68 -2138829751639336965 73 -5569775297965074438 78 -6731361918165622787 84 -1000159591814497798 87 -12420398894488158722 93 -17276977059282736646 95 -7635600731429963779 101 -18378821292746091014 104 -2022931426448033286 110 -6648129782745846792 116 -4965400020463248899 124 -5551261944186869761 127 -11423501398563713540 128 -12015445961309659140 132 -14804906647292574211 136 -6319334893796554242 139 -7402632997775432193 141 -11021449308525840900 142 -7668313675584212486 146 -8416534454442286083 152 -14786755608460337669 155 -10252394770332982789 160 -10551221318314345989 165 -16096303530760742404 170 -9259785140742614530 174 -14075929275811587074 176 -317926420102044679 178 -779174831516893192 185 -1715448660039157764 193 -4021514903658568197 197 -14867534496075520001 202 -12719282834178743811 203 -17465980749405462021 206 -8925774748288079874 211 -7623696658283396611 213 -17929326859744067590 216 -12671154751486019589 222 -12039326031585824261 227 -18347446751167835650 232 -17064637144737108996 234 -11021218191937939462 238 -13156493120251779587 244 -8337641745437302789 247 -7529617071985650692 252 -15855511622382862341 256 -9880671126311259651 261 -4648648374527148548 264 -9643729509462706180 268 -16079254189330675202 272 -5912862662665074690 274 -3064447562379233285 276 -4679971614763188741 281 -5680163499515301381 286 -13723289572021756419 291 -12449253329930581508 294 -4151764428362670084 298 -11785134993959286786 302 -3078863087420124165 304 -15185198810953060869 309 -8297057339576492548 314 -13461860185754054147 318 -3436285402337504774 321 -14202036946604226052 327 -1429187245268482565 331 -1523079254859276295 336 -16225831803604224005 343 -7556943554185476098 348 -17338728822182943748 350 -16838388931654467591 354 -5518924113746022405 361 -16613589795813448195 366 -16245874414877492227 369 -16854419533518505478 372 -2539676113398158854 378 -12042249427062731780 384 -18319457514850241026 388 -4667739140302370305 390 -0 391 -6381331313726406148 391 -3908582673448970756 395 -12826200984566221323 399 -1008697446161023492 410 -1045330962753696770 414 -12519080959524890629 416 -3292967686690497028 421 -9027706222753190402 425 -7627948746545135618 427 -7113204062919493122 429 -1902402424944787974 431 -8582449967256837125 437 -5093494603780084229 442 -15952412032150427656 447 -11024499228689010178 455 -6599137048949621252 457 -12441911088884211715 461 -587330806707068418 464 -6920270191183132164 466 -6534248742955117062 470 -17914513122977299972 476 -18340097295513629191 480 -13676127406031174657 487 -1387609897069507076 488 -1763073162200316424 492 -10502193626894192132 500 -6191089615101093380 504 -3995303291068676098 508 -12574723308968873478 510 -9457112246136620037 516 -2659981631401145858 521 -5678978765742315521 523 -2321007311402405891 524 -7262894069470853636 527 -5310255954615393799 531 -0 538 -4947937557054473220 538 -16886302206430107652 542 -1841567627260397061 546 -1726903440913575428 551 -14879875423439711745 555 -10406819091468369412 556 -11283521635310509569 560 -3680912523998301189 561 -15838266909581394435 566 -12391804375709570050 569 -1020307774365172228 571 -1922720619059759621 575 -10324920589640484359 580 -7346645981525338116 587 -14105351180271546371 591 -18409889360013782019 594 -4787164988982490117 597 -10284218591671275522 602 -13929073926559228929 604 -13709653197282269188 605 -11724057172276600835 609 -866864533352873475 612 -1687533916118276610 615 -14962991064861439492 617 -3075368686919669253 621 -7596099351713916421 626 -9307207198362792453 631 -7250040662483023365 636 -3682040329320065539 641 -793686382876029444 644 -14333782297404873732 648 -1825793630924954627 652 -84619541393612289 655 -13182271411077086213 656 -9374841722325437444 661 -11891971769486715395 665 -8043937648578607618 668 -14046873830950905859 670 -8968303908578660869 673 -12592319890201396232 678 -11282395698657584643 686 -3688562500562735107 689 -4497389441661304322 692 -864575183575292419 694 -1036491259062044675 697 -14213351843646783493 700 -7708978415027076099 705 -6987701493730463747 708 -4532132061628409865 711 -1889838133194080259 720 -14464742354403783685 723 -11471457412392914945 728 -17301684950834749955 729 -2740600303999292421 732 -1861681694596322820 737 -2466512513818280965 741 -567322683033477639 746 -4219982383453752324 753 -4414272813071813121 757 -18296812503650796552 758 -14106238638274939908 766 -8343039090563483140 770 -12899982907471985156 774 -5995542065075040773 778 -1943074365889546244 783 -16642415363908390916 787 -681630493618758662 791 -4461862742627854853 797 -3899665054961662466 802 -9373615873629220356 804 -1672886650488992771 808 -16881710947150074885 811 -5794767402723235334 816 -5402108652823464964 822 -11161133355542430211 826 -17005555433296348161 829 -16516779711980265477 830 -1238971681242829316 835 -7495779865157534723 839 -5869815147311233538 842 -12543930235265506819 844 -16347355750539933194 847 -1618182687158588418 857 -5475339393482339330 859 -1820163941351445507 861 -9781870903757679621 864 -6959962931369883652 869 -6165520526154289668 873 -4608135616958660097 877 -5347147311423033859 878 -4274882894736749062 881 -12469579236131750918 887 -14358338421054221826 893 -14307263809632171012 895 -12240285085875511812 899 -3612936311740236807 903 -15402889954020054020 910 -4862865790365874693 914 -12873671979026176002 919 -5762125948543834631 921 -16549663359069884422 928 -17127464586321114627 934 -5489118657490741761 937 -1439915557249128451 938 -5591921604825754115 941 -12215727902556801029 944 -1292449902890727941 949 -252852670543746566 954 -6662678800904557571 960 -11937079555774719491 963 -9580831801307231749 966 -585888224829458434 971 -2614731491636606978 973 -4039106186911400965 975 -85542184548733958 980 -1232905200495278082 986 -12898496382527018499 988 -4488285801271117316 991 -5603423086377753092 995 -2857864416179998726 999 -100295911725428228 1005 -15911528881864497155 1009 -10785833246735411207 1012 -7176774503550155271 1019 -14860337537539733508 1026 -16041518408725938691 1030 -11338701253034655748 1033 -14943908174444697092 1037 -3242489974158897670 1041 -3082940798033554949 1047 -3158850387764404229 1052 -2812954313732796417 1057 -17857707129346166789 1058 -5269004761822808068 1063 -6111611187710453252 1067 -7026790498114792451 1071 -10421187431999041539 1074 -10962946788411535365 1077 -11508567829579753477 1082 -5586796232331222020 1087 -10664688802114188290 1091 -7101223008705196548 1093 -15730557498751873029 1097 -15622178182517453828 1102 -13023280475588667395 1106 -12736192986547669507 1109 -54449156097307139 1112 -7793412450098625026 1115 -13082902456897469447 1117 -11032923750376691202 1124 -768621266939883522 1126 -7680301716982797315 1128 -2529765954999401987 1131 -3092278718215461382 1134 -9721979104592801286 1140 -7638965909717933573 1146 -14786119811292616708 1151 -6950372959952776705 1155 -12443107208611825154 1156 -9339657551534781955 1158 -2637569863210881541 1161 -17203452450577793542 1166 -17969146007912340484 1172 -2200068367901267460 1176 -12757405660591319556 1180 -2215466944120424966 1184 -10360201018982236676 1190 -8757372217936483331 1194 -4619739097826383361 1197 -5258481580443618818 1198 -12767191547735252995 1200 -709131867671395842 1203 -14381518510326427139 1205 -7474380832040809474 1208 -10420528068240579075 1210 -4871472258172502537 1213 -14752872109699970567 1222 -1512107771448952322 1229 -8931318797796630019 1231 -17442635440581817347 1234 -6352160538927010308 1237 -7854574878209706502 1241 -12790477974029380098 1247 -1694268250394806274 1249 -18190476908103646723 1251 -6347737109409161731 1254 -18109962854929396739 1257 -18427225309876158471 1260 -9821587521358472709 1267 -6090671432051474948 1272 -10840793900646830595 1276 -16995529728013218306 1279 -3884460060356541442 1281 -11328174051558773766 1283 -2190762182871099394 1289 -10795994333162192385 1291 -5749185296348500997 1292 -15519907096103866882 1297 -4660993720606920707 1299 -865021105594269187 1302 -15732547829511033859 1305 -10370189278075376644 1308 -5643403162652225545 1312 -7491082473953581573 1321 -10267635999979525638 1326 -16917208132136155651 1332 -14938122712096231426 1335 -10458787752950376965 1337 -4661643778774054919 1342 -7378032314220749314 1349 -18262506560361936388 1351 -1777721411781745668 1355 -16284189979364697095 1359 -465731536183074823 1366 -1279204163871993862 1373 -1281083695929372167 1379 -1248628108208937989 1386 -16877732867220667397 1391 -12694354789085753351 1396 -11607902699193694212 1403 -4736550549618409987 1407 -3707377337025079300 1410 -15252497877242817539 1414 -1387328235986371593 1417 -6603032558061404163 1426 -17360253640789048836 1429 -4366853681792936456 1433 -12654867339467232261 1441 -17526554569512741895 1446 -17362261302665304067 1453 -1571924693327722498 1456 -5346032278378646020 1458 -4905765968575512581 1462 -6735440265877186050 1467 -2684582464658702853 1469 -12305455794035352066 1474 -10214763548894856708 1476 -5898818347968949767 1480 -8853876862443757062 1487 -1778255355643845123 1493 -9880096907488009732 1496 -14128719217189307399 1500 -1038097769717637636 1507 -16182828358028252163 1511 -9758783803467969029 1514 -5734508289193397251 1519 -17317991154864180229 1522 -3929011798945830403 1527 -2397676608572967937 1530 -15050420126488734213 1531 -9030951389346630659 1536 -6828609694434054148 1539 -15161672926172597254 1543 -12561916901436574724 1549 -13175017957196582402 1553 -5163667233751697414 1555 -8298531402410056193 1561 -3302216018490556417 1562 -8188022378496687108 1563 -6899994089344537605 1567 -14371356649301229570 1572 -6234142974089459201 1574 -8108331937702179332 1575 -6988695179225596420 1579 -4783268154102625283 1583 -5158962768530123268 1586 -8451852824882960900 1590 -16684923005574289925 1594 -435360132353818115 1599 -11179708428252470790 1602 -12560590898560496643 1608 -9052444957053236231 1611 -6942914933011863557 1618 -4685132753411777032 1623 -16127598791952926725 1631 -17139405263038539779 1636 -14416974839438770179 1639 -184674079454644738 1642 -15371113443157556742 1644 -6125564898470072836 1650 -6049476413298229761 1654 -2016046076376584709 1655 -9102901609995427333 1660 -14279380086715328002 1665 -16071171343743534084 1667 -3003661872837116932 1671 -1544053734049606146 1675 -17912839388887512068 1677 -18367485572659629066 1681 -62486557281101315 1691 -15341749693046047746 1694 -4462259451528626691 1696 -2198440243211776514 1699 -1739990500338348548 1701 -6736705032720670728 1705 -460022204996210692 1713 -13316259771467543558 1717 -11844773108515011076 1723 -13208087868677074947 1727 -15327490137854692355 1730 -12082487592532424709 1733 -16377323572476873736 1738 -0 1746 -622886781057602561 1746 -16338526270417904138 1747 -9002667202186955781 1757 -8853816989295250439 1762 -11704947860454198788 1769 -10586310579976363524 1773 -12274078960777730562 1777 -9504312777814311939 1779 -12938939440083727877 1782 -4482870732030096900 1787 -11469312931933075457 1791 -3010319078507518468 1792 -11746036803692802052 1796 -2845804857533704708 1800 -6113501269614124035 1804 -1300574605566718978 1807 -10066236704043377154 1809 -7972385596552911875 1811 -9467192894482478598 1814 -14898777861151503875 1820 -1944274375974874115 1823 -10386723956120624646 1826 -18320025862115844613 1832 -1387818835494813188 1837 -18296018469774430211 1841 -14855935328857078786 1844 -6009618969907709956 1846 -2589125298910864388 1850 -16233494802218098697 1854 -2481120375688643077 1863 -17348525962385858053 1868 -12345390066536357892 1873 -11898897602124667396 1877 -2640139887503545347 1881 -6231765986224989698 1884 -9439401787143523334 1886 -12293464382470856197 1892 -16085904910360067589 1897 -7252534814412510724 1902 -11702778818573550086 1906 -9474460568585535494 1912 -5394564267141025283 1918 -2149355951313254402 1921 -17924873918814083585 1923 -598191802606476803 1924 -8284578931129436164 1927 -10209356185787986442 1931 -1435256119122221570 1941 -1751234962195953666 1943 -4311520098760549381 1945 -14246310464944558596 1950 -12371324908926062594 1954 -1728194076248328196 1956 -3206212432676588545 1960 -608028375064114693 1961 -12735035537535459848 1966 -1161317385392644610 1974 -5963411090947829250 1976 -14747492552155802116 1978 -16061594303567645704 1982 -11401558272625990148 1990 -9760118054252460548 1994 -1590553955289263625 1998 -10340997646340822531 2007 -523412383725034499 2010 -611878128332703238 2013 -16958179163660410371 2019 -4049722845406929413 2022 -7868172937392666114 2027 -5918378978107988996 2029 -12787502422435844615 2033 -1060009293879599108 2040 -2360292516675315714 2044 -9882807690136518146 2046 -14696092264443978756 2048 -1467831371341617669 2052 -532975774202937346 2057 -11905286291268558854 2059 -531011598217908739 2065 -828942665123565063 2068 -16920169218690190853 2075 -7591945855482943490 2080 -14985689627450757635 2082 -14044560149551330824 2085 -17188203557127851010 2093 -12477774362747447814 2095 -1435155859536064516 2101 -1383226851914584068 2105 -5950622975418741254 2109 -11573330487936600066 2115 -3499677126004927489 2117 -7754519505545821700 2118 -3063606795384108551 2122 -9141715975960833030 2129 -184455528113873410 2135 -14290946452897026052 2137 -3303218105480425475 2141 -4921212561864013316 2144 -11659206998782866434 2148 -3483784077328335362 2150 -15349300100599457794 2152 -2991158137975641607 2154 -11671836184239777283 2161 -13903348973527331847 2164 -13972685059135606789 2171 -5067855901273612291 2176 -11203581229879824387 2179 -7398166954536630787 2182 -8137301061780033541 2185 -14461051202225956357 2190 -18364391265692359173 2195 -13202854215310531076 2200 -8735953751694682627 2204 -15668075878531113478 2207 -12181518985980303366 2213 -2996117190304599556 2219 -6321134583181571077 2223 -18292784224560228355 2228 -9730339360761143298 2231 -15423393047428954630 2233 -2289663845294497287 2239 -17293282718410542598 2246 -16848796704425902087 2252 -15868806819374243844 2259 -7170876063537340419 2263 -7450653208363214856 2266 -8532024281356555270 2274 -16059255557578908162 2280 -1877124332184628739 2282 -2891997770652300804 2285 -9380477352886239748 2289 -0 2293 -18421659490129039873 2293 -10046669908312212994 2294 -5751756535955732485 2296 -9063799367706849795 2301 -197150231261699074 2304 -12240146887946385922 2306 -14309589056601523716 2308 -1624985398293287428 2312 -7587234449739517958 2316 -15018247234507853314 2322 -14339897192752756740 2324 -241576182571638276 2328 -8692544418167008260 2332 -18142354925381021188 2336 -4357033544932333062 2340 -17783269028567291398 2346 -2150566123188780038 2352 -6826864893756137990 2358 -2570512448148033537 2364 -3926559756499773957 2365 -7320130823370788355 2370 -8279967564081321986 2373 -10487133814282217989 2375 -4474596476108096515 2380 -9162424448056197124 2383 -14148207203733810691 2387 -17544170151884681732 2390 -8376160833193445378 2394 -17178210789916656645 2396 -168694152552959492 2401 -8301334775237721091 2405 -5366880444274330116 2408 -2275685050251168772 2412 -5129073922893954566 2416 -7337914693295266824 2422 -9232645461774346756 2430 -9281558265232282115 2434 -17538929436013548545 2437 -8171970898838379521 2438 -407976145144453637 2439 -11917619836674704901 2444 -7463384942613006339 2449 -11628547823982306307 2452 -8367507709438611460 2455 -7426323158152134659 2459 -4692304143317559813 2462 -3164999859583895048 2467 -2475 -7352605297446749095 -7088047764357120496 -1873618248285620134 -15293063541372749212 -6979009792504496341 -3755115258874496180 -2534438137508857227 -7299919415988454234 -18411981910273949730 -17205553309096936780 -5248951067483899801 -7247233534530159373 -7192573503860179570 -6928015970770550971 -5302201063430293086 -14184058584951490062 -5354604945682204822 -7139887622401884709 -5727354401416546391 -7351759274033218447 -7087201740943589848 -6979855828815315184 -7299073392574923586 -3886521448658569638 -72483853 -6979009762410823886 -6927169947357020323 -3226253748217055407 -6926323880952529025 -15291089452348344358 -11366435697098950012 -13310078522289489702 -28484163972630126 -619366483213223113 -2795970204732164463 -6206321690771458217 -7087201710849917393 -15287705195328439433 -111740332 -7034515829391622532 -15882855708138472805 -7299073362481251131 -13237708561380147209 -9273081553817896179 -7246387481022956270 -18029523497279423740 -6927169917263347868 -13513632858282984745 -7193701599564661409 -7139041568894681606 -15802896446603200075 -7086355687436386745 -7033669805978091884 -17956211270007850924 -4563816462554630517 -11129540511026317143 -13237708531286474754 -7194547635875480252 -9003675253593868694 -18413109975884759114 -17205553334892496668 -7193701569470988954 -1413046541639878608 -946825488890267006 -7033669775884419429 -7352887339644027831 -12155898262057583711 -2989761681675846645 -6980983894426124568 -14604797433968658301 -18412263952471228466 -7245541427515753167 -15292781524969719388 -15846041951231805521 -7192855546057458306 -1873618493337240604 -6928298012967829707 -11016920455496205379 -15289961373839132475 -7085509633929183642 -10531295876509927661 -9870724660790479 -17144416678735644465 -429916096632 -7353733375954846674 -7032823752470888781 -638094591060870297 -16092841662109387098 -7301047494496551813 -8541237495103949042 -7818890396069135776 -5178673286195185763 -8250235334236768512 -1841584140945524876 -18412263922377556011 -6928297982874157252 -7141015700909982288 -7192855515963785851 -1836789879294462027 -9870724716497203 -14947088600271026 -13702113181256910523 -7140169634505490990 -10225919154718574698 -7352041286136824728 -7087483753047196129 -10864467494618334192 -1773948700787017845 -417019004815 -7032823722377216326 -14193031196214429556 -7299355404678529867 -17264773178461980386 -1278770520813602818 -6980137840918921465 -18411417898964025363 -11722522519282124676 -7192009492550255203 -9870725379720958 -6153353810106713963 -4536471466122020769 -6927451959460626604 -1127379439846033088 -6204347640438458139 -7139323611091960342 -7141015670816309833 -292816209 -9407029712610658618 -6600019782220383520 -7300201440989348710 -1682680374277112930 -4859408499100419349 -7247515559531053849 -7299355374584857412 -18411417868870352908 -5272120000921863921 -16551960241296116093 -6927451929366954149 -17186370626574550605 -15292499534362314294 -7139323580998287887 -7086637699539993026 -7298509351171326764 -2625321593698060269 -7033951818081698165 -6979291787411718362 -282724672 -15692070679858513338 -6926605905953423501 -17630638801202448322 -7247515529437381394 -15043322321877076105 -2792885536610780866 -1845823063 -11773758314556753827 -6176104209096443228 -7072090857947137391 -16846695548644688878 -15291935475760760928 -15459386004803160013 -8343160331046226180 -152372727 -7034797854392517008 -13108405724425291903 -7354015418152125410 -7298509321077654309 -929260878924941285 -7033951787988025710 -16107267423789974637 -7246669506023850746 -5138916826085984492 -7245823439619359448 -28766150282052641 -11719741672025753203 -9945828332568577291 -15282335361333069253 -7085791646032789923 -1899651063193470519 -9391897706793207408 -7354015388058452955 -11398792770463140027 -7033105764574495062 -2572415617593705468 -8983295826499536249 -14732267094484321768 -6925759852446220398 -1714226175 -4310109704341227252 -4227285979208156735 -161798587300055395 -18413392000885653590 -1732546113203799682 -7246669475930178291 -90526560417220980 -2522831856378709294 -7193983594471883430 -1378362890422519435 -10318013789890151505 -1910933862240552025 -14683276054533375891 -7141297713013588569 -4847114588453668997 -7353169364644922307 -1934287791725413661 -7033105734480822607 -6981265919427019044 -450064107389060609 -11929763 -6980419853022527746 -18411699911067631644 -7193137571058352782 -7198684663705634814 -7192291504653861484 -17174064760732583170 -1801586532 -7139605623195566623 -524384476410218364 -2209547647594924308 -7032259711067291959 -7526932862385391531 -7353169334551249852 -7931231880446346780 -7300483453092954991 -3584013211340638230 -6981265889333346589 -18412545947378450487 -6979573829608997098 -18015051914722281720 -10683744 -7247797571634660130 -7193137540964680327 -18411699880973959189 -7140451659506385466 -14383047196674041 -14448472746991225173 -7352323311137719204 -7087765778048090605 -7139605593101894168 -33560403334269270 -7806125477758371395 -1574206491118601300 -16092233475575710729 -4721835318523791115 -15292499560155382992 -6979573799515324643 -13614615898053870661 -6927733984461521080 -14782687056266790897 -6926887918057029782 -7247797541540987675 -2843459484954527603 -1786086408025671247 -9289441360305064013 -7138759569688363520 -5566476498435049615 -6672837949675865094 -7352323281044046749 -5459976717197837927 -2325612370 -16165083394671708123 -7087765747954418150 -5566476532828210437 -109033155035858516 -7299637399585751888 -5246976991356848017 -6927733954367848625 -15292499547258292377 -7246951518127457027 -7244428084583335163 -7194265636669162166 -7086698151192823114 -10049924856077420313 -7086919724540887502 -7138759539594691065 -7298791376172221240 -7086073658136396204 -15289397375427675165 -8052454368722028838 -11251542888998503501 -14003328469233502159 -8631928107028383434 -18413674012989259871 -2528053666090387191 -2624757569491043976 -2907319229923985027 -6926041864549826679 -15291935475760891195 -14871830661500634496 -6154481914409125818 -7194265606575489711 -12484855343804385078 -17299513090802386086 -9870724574938647 -7086919694447215047 -7034233812988920186 -7353451376748528588 -15289961386737730869 -7298791346078548785 -7246105464620253924 -17094850760611596031 -6981547931530625325 -15287141218410562876 -12642214096204597433 -7193419583161959063 -18443164073222080895 -491719075 -2844912017228892087 -12020808312486430123 -6103488045384926186 -70256349 -8556410824327300183 -7033387789575389538 -12237172509275325915 -5893456428412241171 -1576180593040230658 -7353451346654856133 -1201738978701542472 -7032541723170898240 -7300765465196561272 -18412827959482056768 -17018729383741883913 -7193419553068286608 -16870411475888572178 -33278412725618157 -10808445661528262808 -15228627241849521321 -10895941260599690580 -7140733671609991747 -1893141935297136496 -7762829005246892330 -814482688 -1873618476140922442 -7352605323241325485 -7088047790151696886 -7033387759481717083 -29894172902294792 -7245259411113050821 -18411981936068526120 -7299919441783030624 -6980701878023422222 -15293063567167325906 -12913795363565864010 -18279521768686553293 -825323228049442984 -2366626164980320297 -7192573529654755960 -6928015996565127361 -7511405001902393465 -12020126521146280357 -17297538988880889455 -3169683337105049483 -4320397392167437764 -2996806038868067480 -13880529192106525749 -12258258950024070758 -9457728271880882414 -1948083978070788460 -7088047760058024431 -6747869491765118557 -396563964949038476 -2283061350295603413 -18411981905974853665 -9870724676257796 -6979009788205400276 -1873618463243831315 -7299919411689358169 -7247233530231063308 -7192573499561083505 -6928015966471454906 -13172383304428291992 -7139887618102788644 -9894329350782060506 -5622264594716035131 -7351759269734122382 -13970089714745935549 -7087201736644493783 -11780790212937254859 -5640826309532256347 -6250067602413848771 -7034515855186198922 -1997667752184056011 -6979855824516219119 -7299073388275827521 -8773391357768107870 -6927169943057924258 -5386265453423232211 -6979009758111727821 -2245985413502404712 -7139041594689257996 -6926323876653432960 -8472178325545420517 -7299073358182155066 -7034515825092526467 -13237708557081051144 -1249061871705589231 -7246387476723860205 -18413110001679335504 -2791055589805656257 -6927169912964251803 -916886386616763786 -15801863628634588225 -8864802475807081547 -2308422057122989461 -9870725183834332 -12011043047629784321 -7193701595265565344 -2203332293412784251 -4203593881757353951 -8253013595490092090 -7139041564595585541 -7758389320980628720 -7086355683137290680 -13519837262133135719 -6064762127302393958 -7033669801678995819 -6985684972259117296 -10277194893975947111 -11865320555827824922 -13067141397934573091 -2940293779302123205 -13237708526987378689 -14428924761094490470 -18413109971585663049 -7194547631576384187 -8910270495612602670 -7193701565171892889 -11835120105125054734 -7353733401749423064 -6922632561930405347 -7352887335344931766 -7033669771585323364 -18412263948172132401 -7245541423216657102 -6980983890127028503 -17070057731888842956 -2071645033680471512 -6156737994042444103 -13228094635257760069 -4799330753387759873 -6928298008668733642 -13889891850651109005 -7192855541758362241 -7085509629630087577 -13143536835616770002 -8031770806726101038 -9140276259359819415 -7140169660300067380 -17094376519214238045 -1693503902275602273 -5778348214553282767 -1773948726581593258 -7032823748171792716 -12757875056923772971 -7353733371655750609 -16812272571148667179 -1009366474452567451 -7301047490197455748 -18412263918078459946 -6108201112818484768 -2707637655416932544 -9407593762612381184 -6928297978575061187 -7141015696610886223 -5214737420442796133 -15394822466617411907 -7140169630206394925 -5109952608322914327 -7032823718078120261 -7087483748748100064 -7352041281837728663 -18411417894664929298 -16275783350713190092 -1092700946662950361 -7299355400379433802 -32432389312218921 -6980137836619825400 -6927451955161530539 -7604559457759135281 -5728764444738258095 -7192009488251159138 -7139323606792864277 -16857332490755245458 -3343560 -464309651771 -11312578691943499042 -10024345359443035686 -5353476841380448450 -882239428633953381 -12060668540762391720 -2052891733976941648 -6979291813206294752 -7300201436690252645 -18411417864571256843 -7247515555231957784 -5887022448955360480 -2787671392973227504 -7299355370285761347 -6619090118045271448 -879419277503366844 -2008078727273646424 -15865913240105781170 -14383064393516769 -12743882002561632192 -13555232411643742491 -15289397319538705607 -812124046 -1873618514833704373 -7139323576699191822 -7086637695240896961 -6908100892141816223 -7298509346872230699 -2695321185936868691 -1945545813249623166 -7033951813782602100 -15289397353931868102 -6979291783112622297 -9632241780191791292 -6926605901654327436 -1631882651478525035 -7247515525138285329 -7245823465413935838 -4442788352416548793 -4443634474708830204 -3239382674005951948 -7034797850093420943 -8597138013777561025 -7354015413853029345 -7033951783688929645 -7246669501724754681 -1873618519133194353 -5462796868327441521 -16038494049631274362 -7245823435320263383 -17008002440344700481 -10420287313124918500 -17164650024200374474 -154011658 -7193983620266459820 -9611454020314924519 -11422235346247419176 -7085791641733693858 -2621625390044283947 -7033105760275398997 -2577002748724381918 -7354015383759356890 -6678552048861382680 -6925759848147124333 -2118540511074649695 -18413391996586557525 -6980419878817104136 -11485232201928082493 -14154340218780386747 -7193983590172787365 -5357989108122126648 -6154199898006423584 -7141297708714492504 -7353169360345826242 -1873618252584388545 -15287141218410825094 -72513270612231730 -6981265915127922979 -6980419848723431681 -7193137566759256717 -4985063574640920329 -18411699906768535579 -14463310864315779363 -7192291500354765419 -8998114985810134320 -10207847739528775756 -12638147294677239230 -7139605618896470558 -15287141188317152890 -7032259706768195894 -7353169330252153787 -13725680859840121166 -7300483448793858926 -5257405381051615158 -6349026413187499377 -18412545943079354422 -6979573825309901033 -7193137536665584262 -15292499474174116987 -2789363547278214886 -7247797567335564065 -4223816177647289670 -1873618458944604000 -9181763921242359034 -4000515045254367287 -12910411188229637865 -7140451655207289401 -8515376925833300352 -7087765773748994540 -7139605588802798103 -7352323306838623139 -7299637425380328278 -8484110780235385151 -11640650963542673608 -14101060887774700 -6927733980162425015 -13724983541464369033 -6979573795216228578 -1419747374885111438 -6926887913757933717 -1930668198955452810 -7138759565389267455 -7087765743655322085 -5675796533981283930 -92079366 -7086073683930972594 -7299637395286655823 -14383047197066244 -6826664259619390926 -7246951513828360962 -6927733950068752560 -9870724846126197 -7194265632370066101 -11653222680468915374 -7822735708193293328 -7086919720241791437 -14378284476977055283 -11527067173424792740 -7298791371873125175 -7086073653837300139 -212338786 -7034233838783496576 -498701699429 -5514354658380875071 -4770844606942742432 -12507909061331388812 -16431008191725831459 -7558005371879032024 -6926041860250730614 -98436550 -15287987237524997760 -18413674008690163806 -571813020932180290 -162989216 -5152482613269497204 -12689613402799605552 -11847668771932013896 -7194265602276393646 -550243203354855282 -17971473236626703405 -8937544163598010547 -15091099644146747549 -7298791341779452720 -7353451372449432523 -7034233808689824121 -6981547927231529260 -7300765490991137662 -7246105460321157859 -18412827985276633158 -16505476999257589058 -12490303189019657716 -7193419578862862998 -11945800880170403371 -692605700306896591 -16294470476861867997 -11823044541028697510 -7033387785276293473 -7354297408760251366 -985637089627933081 -7032541718871802175 -2635993685958396071 -9894523072925796113 -7300765460897465207 -18412827955182960703 -3485224758199257354 -7193419548769190543 -12430143129524439379 -2380943364365616692 -9305145756033811687 -7140733667310895682 -7352605318942229420 -13486365294955398350 -18383714950999639313 -7033387755182621018 -7088047785852600821 -7299919437483934559 -9870724671539207 -7245259406813954756 -6100103917337838794 -2517386234133546535 -6980701873724326157 -5406444717745899883 -18411981931769430055 -7192573525355659895 -16358593412853139153 -6928015992266031296 -12424382439595705495 -7139887643897365034 -10906583509962065513 -2691365739792435341 -12452979941127620409 -2625321597996828341 -5558136804797384674 -17944163576803951650 -7299919407390262104 -18411981901675757600 -6979009783906304211 -6928015962172358841 -6926323902448009350 -7247233525931967243 -10714918364066023692 -14383042897708902 -9562777431589128006 -14399056675416442168 -7139887613803692579 -7087201732345397718 -7351759265435026317 -1094393045078770756 -6979855820217123054 -10709931946762503359 -7034515850887102857 -5782296465685677189 -7299073383976731456 -27356072568228011 -9870724725998874 -10305085813919844606 -12189320918056831076 -2625321585099736377 -6927169938758828193 -813631719 -2538734585 -6926323872354336895 -3722579929450415844 -7139041590390161931 -8109001260751259400 -2103039510800303200 -6591652942651787148 -17675072908219975424 -2113895771772946077 -13237708552781955079 -13964897540691461690 -7034515820793430402 -7299073353883059001 -4081176587746805898 -18413109997380239439 -7246387472424764140 -495542969232394639 -285870162 -14714880334493255623 -13730298810256196609 -7139041560296489476 -9870725380375539 -7193701590966469279 -7086355678838194615 -9087257516001788955 -6500635606105786312 -5353476845680198762 -6293435923465308245 -1042835216333014619 -3191712388857988942 -7033669797379899754 -2791055637096302358 -8238066788924721312 -236521418 -7245541449011233492 -6156456003434055403 -14045391212846450114 -5142301044413892722 -7194547627277288122 -32432363518297616 -33560403333547721 -18413109967286566984 -5779476207078738131 -9870724609606766 -16854238106389710928 -7396235467053271442 -13369405230387234641 -7353733397450326999 -12370327100086618251 -8954142712877746247 -153456695047357500 -7352887331045835701 -6153071780807312570 -7033669767286227299 -11662233534561978119 -18412263943873036336 -28484129580255433 -13672484538110837999 -7245541418917561037 -6980983885827932438 -1873618484739049391 -1469680747315529380 -6928298004369637577 -7192855537459266176 -5778348193057605937 -7085509625330991512 -421317903336 -7140169656000971315 -7353733367356654544 -4312966040774706541 -236453759050 -104307364886481272 -7472754 -7032823743872696651 -6980137862414401790 -18164832428166481311 -3342493899775477828 -7301047485898359683 -17149817495305717253 -18412263913779363881 -17947829764244047033 -15691697526684648453 -7141015692311790158 -1873618454645376268 -15685038007044278084 -7140169625907298860 -13816341447826081654 -13938987348593804675 -6366943767402055912 -12279042692635953334 -7352041277538632598 -7087483744449003999 -17619527108083517127 -7299355396080337737 -16737240503404332379 -14932478444660590859 -15273884660262765959 -18411417890365833233 -6980137832320729335 -15287705229721143272 -6927451950862434474 -7192009483952063073 -10354526296759273115 -460010554417 -5572809636517250537 -7139323602493768212 -13925023889216243624 -7300201432391156580 -1518418403436004696 -3523407702141503062 -6979291808907198687 -17299513159587988488 -7247515550932861719 -5269329687486663025 -1491033538627700799 -11619890057073068122 -9733674716123433175 -17461812064821184287 -15288833316828087421 -7139323572400095757 -2322094249834514694 -7086637690941800896 -3693573093146429379 -1873618527731189820 -1782138217079048145 -7298509342573134634 -7033951809483506035 -28202057289434486 -5150516383306155674 -6049123076685497339 -2625321585099868576 -15703528257170507956 -13819044485072465 -6979291778813526232 -7245823461114839773 -6926605897355231371 -12241985901088998680 -18141240613009360196 -16530489490799724510 -7085791667528270248 -1873618510533364055 -7354015409553933280 -2553424131400403162 -7034797845794324878 -6204347606046082147 -15292138696292895124 -7349438249010596137 -434216371783 -7246669497425658616 -29894241687898103 -7245823431021167318 -7193983615967363755 -11123291787522213546 -9870724570482570 -13819048784561829 -32150304124504126 -16911052854443771624 -7085791637434597793 -3866984390250988963 -7354015379460260825 -16425638839461283996 -11957902820310123780 -7033105755976302932 -2373415502940997012 -6925759843848028268 -18413391992287461460 -4141551246163838791 -14505034101877245842 -15292781563661912115 -6980419874518008071 -7193983585873691300 -2850570111682611307 -5034923912583317800 -10169273990111757991 -14375674833933502504 -7141297704415396439 -1467988623105721525 -5510538250602219377 -16573157102592722994 -7353169356046730177 -6981265910828826914 -18412545968873930812 -7861398105913427821 -8429692928904464468 -7300483474588435316 -13774681046469379319 -11406639409630546199 -18411699902469439514 -7193137562460160652 -5246976944067250249 -6980419844424335616 -13940478354871813627 -13701595356116681867 -16426766960961390571 -7192291496055669354 -5340613827489301924 -7139605614597374493 -11949535933962127511 -11248024162254325150 -5213027855012595380 -13150190137466815618 -6351416861983902064 -1467988623104476637 -7032259702469099829 -15292217517958891213 -9870725207164369 -755605599842665995 -18412545938780258357 -6979573821010804968 -17933750666284107619 -7300483444494762861 -7193137532366488197 -1880166547305399311 -7247797563036468000 -7140451650908193336 -7087765769449898475 -7352323302539527074 -17682574712751982576 -7299637421081232213 -10223260478366353693 -11663374006463433041 -9077802184452213114 -613166273235716174 -6979573790917132513 -2137124098070087866 -6927733975863328950 -878291220490619127 -15361003727878554622 -6926887909458837652 -29330208881903963 -2152780467316000177 -5357989129618589597 -7646567114842638318 -7138759561090171390 -1466296546184988453 -1873618239687690255 -16874641756321417469 -7086073679631876529 -1584662439 -1811826159652440291 -7299637390987559758 -12802594135359554633 -10846196352290785698 -18413674034484740200 -6927733945769656495 -7246951509529264897 -6926041886045307004 -5458848587100981366 -7194265628070970036 -429917013116 -7086919715942695372 -15287987297712736594 -10756726237632137002 -7034233834484400511 -15290807375757707399 -7086073649538204074 -7298791367574029110 -28202074486146284 -9392472737220396979 -14847634415788360916 -15289397366829483851 -6518315999997593014 -15290807392954288538 -6926041855951634549 -18413674004391067741 -7194265597977297581 -527217511716357463 -16363166289661921249 -17620704769380124659 -447112350000 -16699231963845560721 -13522668423781746725 -7298791337480356655 -7353451368150336458 -1894834111096227152 -7034233804390728056 -7300765486692041597 -18412827980977537093 -6981547922932433195 -7246105456022061794 -14266293419834869195 -9302231382455945522 -10803332050175068476 -7193419574563766933 -2211239741711975644 -11079423192795514730 -1945545830446729386 -7140733693105472072 -8758866611300140123 -15936300577150731882 -7354297404461155301 -1873618467543975108 -1040015035110261938 -2710531354671711585 -14424533014481667245 -7033387780977197408 -7032541714572706110 -1459422918 -9870724626318937 -12478172948446053915 -15292781563662043248 -1732546104605738522 -7245259432608531146 -7300765456598369142 -9944700266957440235 -13252643833684952629 -18412827950883864638 -4896553002078767161 -30458188511250577 -18359396230774917168 -7140733663011799617 -11272180868443080721 -16874923798518695576 -5885976095793742930 -7088047781553504756 -7352605314643133355 -7033387750883524953 -168849237244052984 -7245259402514858691 -18411981927470333990 -5249797159683556626 -7299919433184838494 -8328636978065704368 -6980701869425230092 -451651625195341092 -6928015987966935231 -1873618501935892373 -7192573521056563830 -11737382248731378999 -7139887639598268969 -775817183132189744 -15801421542798591337 -3273906465467926857 -17504806456180148447 -4999048390027118623 -5949516568421532902 -6979855846011699444 -14540810596246029752 -15290525359354677342 -17939521450163242260 -7318928098821080086 -7299919403091166039 -6979009779607208146 -18411981897376661535 -7081697764708451986 -7247233521632871178 -969023931668825518 -6926323898148913285 -8108333368108254535 -7139887609504596514 -18169457873000663376 -7087201728046301653 -17740106858442524965 -7351759261135930252 -7299073379677635391 -13010413693461201911 -6979855815918026989 -5910883915778885296 -7034515846588006792 -8618954206934992460 -7246387498219340530 -18129074234833831896 -6927169934459732128 -1873618540628542454 -7139041586091065866 -10442852986254656567 -2395019873428113205 -6926323868055240830 -468604683425 -8087249190780536753 -1251886678142749075 -2719268023842506192 -15484720670843995730 -7741956108160599025 -12822961480931869999 -7034515816494334337 -7029767686712723344 -10163069590560376057 -13237708548482859014 -7194547653071864512 -3698377064121436540 -7246387468125668075 -18413109993081143374 -3404560976776923069 -7139041555997393411 -7193701586667373214 -450980818488526510 -7086355674539098550 -9249568750854341715 -6153071806601889139 -1873618446048036460 -7033669793080803689 -7245541444712137427 -6980983911622508828 -18413109962987470919 -7990307559300466109 -13222096480399393786 -1197790749063775841 -12902749409780696076 -7194547622978192057 -5561192151909205460 -7085509651125567902 -3357575107008071546 -1873618544926787278 -7353733393151230934 -7352887326746739636 -8268575981438895233 -6716515055005533871 -6980983881528836373 -18412263939573940271 -7245541414618464972 -7192855533160170111 -15289115337529558626 -13365777358560822813 -3028626790437816712 -6471725307461895704 -6928298000070541512 -17785259814435424400 -848960360419623992 -3511510786883322944 -1873618497636533880 -7085509621031895447 -7140169651701875250 -7353733363057558479 -8373123327081842861 -7032823739573600586 -7352041303333208988 -2947421221745985235 -15287987271918683167 -747201041967810181 -7301047481599263618 -6980137858115305725 -17447639780156180862 -504901560953342357 -7141015688012694093 -2524806052879271814 -7140169621608202795 -10940245256426751073 -7087483740149907934 -14383051495835695 -6176793320558560244 -7352041273239536533 -7300201458185732970 -9870725054269136 -18411417886066737168 -6980137828021633270 -15169666149850743870 -7299355391781241672 -931541139053413675 -11888218815508972893 -6927451946563338409 -10585391818487171337 -7192009479652967008 -10367111403802331152 -13105031987622054228 -5541264770713322802 -7139323598194672147 -5432665585007396118 -879419204419586170 -7086637716736377286 -1388146554381010284 -14288862971683801479 -16285378285009240167 -39519722 -6979291804608102622 -14947330030372718319 -7300201428092060515 -9009348648356481082 -9870725377033977 -14338844047743256282 -7247515546633765654 -10576074740845971129 -15288269284021110607 -16485145185525761680 -4927877544240416780 -7086637686642704831 -7034797871588901268 -7298509338274038569 -6979291774514430167 -7033951805184409970 -6926605893056135306 -7245823456815743708 -5701497137720395794 -13553803778814903538 -15291089469543613858 -15293909556187366880 -7085791663229174183 -7034797841495228813 -3459957951274485460 -7354015405254837215 -7872981627489289774 -6925759869642604658 -13088377121872283058 -5780604350074062210 -7246669493126562551 -17785259857426319623 -9870724661970361 -14101043691849748 -18413392018082037850 -4009970402599045444 -12596269962708321697 -7245823426722071253 -15417905864638990439 -13819027288885075 -2235142484806141593 -7193983611668267690 -15290807375757968455 -2061656954403227379 -13749155634582652047 -7085791633135501728 -5352762575340504654 -9231301807315879437 -7033105751677206867 -11733354 -6925759839548932203 -879419277504153303 -18413391987988365395 -6980419870218912006 -7093139039356454668 -245051885476 -7193983581574595235 -7192291521850245744 -5670079292018853456 -1731418116379051588 -7141297700116300374 -3295137431799203195 -15287141209812633373 -7353169351747634112 -7300483470289339251 -6981265906529730849 -18412545964574834747 -18411699898170343449 -6980419840125239551 -7193137558161064587 -7140451676702769726 -9282455518003529325 -7192291491756573289 -13517017123900556406 -12909283101122299560 -13001682132658816270 -7139605610298278428 -268323666682316511 -434215519994 -5195983173921998653 -7032259698170003764 -12400858092474729508 -1049541662233592999 -1652992377389188147 -9870724610131038 -6979573816711708903 -18412545934481162292 -7300483440195666796 -8122508159220254825 -6926887935253414042 -4854750274073986812 -7247797558737371935 -7140451646609097271 -8603359422188488186 -7087765765150802410 -7352323298240431009 -17228001359505262946 -830681586991892086 -16575900413863724702 -7299637416782136148 -5223960103625950402 -5622546645510588659 -6927733971564232885 -104307364887005000 -6926887905159741587 -15894193095142279476 -15412359869797107874 -7138759556791075325 -1466296571978319404 -6598609717403059389 -7086073675332780464 -3461791464603256049 -2624757569490846836 -18390735680858949823 -7299637386688463693 -6926041881746210939 -18413674030185644131 -7246951505230168832 -7194265623771873971 -2388013311603639908 -2661960728632166488 -1626046306172405994 -3292988330812113977 -7086919711643599307 -3350348129897809669 -7298791363274933045 -2949113337358451846 -13819040186107746 -7086073645239108009 -460011078998 -5726358075983398113 -3531693765072848000 -13521137881826199057 -7034233830185304446 -14262234001769891808 -15896859674140673387 -7246105481816638184 -15586729198849165186 -12999620585941961130 -6926041851652538484 -5515482706794513640 -18413674000091971676 -8245128912192341302 -4935175925304394923 -2914587895472588825 -16743444847067268462 -5511666307614640418 -9870724573497757 -10183587777134266649 -17461812064821708117 -7032541740367282500 -9870724662102366 -3000062970512082916 -7034233800091631991 -7353451363851240393 -4764015496858961551 -6981547918633337130 -18412827976678441028 -7246105451722965729 -7300765482392945532 -1413046558836524843 -9870724848157861 -6864771691154835689 -7193419570264670868 -2836065437668410391 -7140733688806376007 -5569296739845342906 -988739295852300565 -7033387776678101343 -11272445595878688522 -7354297400162059236 -14795036413642344215 -32432389311890484 -7706082920376043056 -5745384143842640959 -7245259428309435081 -7032541710273610045 -6493133948225848344 -6980701895219806482 -18412827946584768573 -2672695638434121742 -16252369836876630326 -1731136082779636780 -7300765452299273077 -4980727526481134825 -1623790192145992094 -5462796864028870900 -2573543666009113907 -14648423506775771260 -5344573059049392338 -13159245476491953264 -3016351 -28202074485294367 -8850604587316807925 -9433463473978082775 -8898527545369692553 -13497936734142399877 -7140733658712703552 -9242938543921759733 -17504292068232266828 -9870724716561847 -9462223648962578817 -7352605310344037290 -7088047777254408691 -6980701865126134027 -7245259398215762626 -18411981923171237925 -15082773189987797150 -7299919428885742429 -7247233547427447568 -11231012565665252996 -1873618497636796488 -6928015983667839166 -7192573516757467765 -8392045041254729237 -214958343501 -232154924118 -8773072981860484929 -17623817999021377174 -7139887635299172904 -13669583310057374915 -11952920104999651164 -7351759286930506642 -6095117356077024274 -6979855841712603379 -11911353550168000303 -4094565860123281828 -6979009775308112081 -2574671718721652501 -15289115337528575529 -6461237536894486399 -6588601354970859314 -829835576475584056 -12171433882329483024 -10601803635978405977 -6926323893849817220 -15798241638577277014 -13487493291780737431 -7247233517333775113 -7139887605205500449 -8339857016756570529 -32432363517708539 -7351759256836834187 -5781052833705625408 -7087201723747205588 -1873618501936285893 -161798583001876730 -7034515842288910727 -1413046550237676700 -10371546090728785591 -7579950199755704475 -15838740426298100091 -7299073375378539326 -6979855811618930924 -7246387493920244465 -1466296524689441838 -6927169930160636063 -6151097687482829151 -7515235746198914183 -2625039568697361387 -12568193962150069461 -7139041581791969801 -16683469352030111006 -1644749190600984028 -6926323863756144765 -3207856338718361997 -7086355700333674940 -11303992210264950105 -9391897685297203230 -12384683746431141169 -8177758353543530791 -17532367729421977465 -10164317815380509716 -13237708544183762949 -8111257460758677865 -7246387463826572010 -14101039392621716 -18413109988782047309 -7194547648772768447 -12269921124804134294 -5301355009923286798 -7193701582368277149 -460011210063 -7086355670240002485 -17641922897637607789 -14095300710942181622 -2436256590268073848 -7352887352541316026 -7033669788781707624 -7245541440413041362 -2431982719322294696 -6980983907323412763 -7563081637033018877 -4409898123206658145 -5046514566388713097 -14814059329512276972 -15800256793861162595 -11057351737720178980 -17330360441647925497 -7194547618679095992 -1873618523431110529 -11242798885672060886 -3189961255353123861 -7085509646826471837 -12105446909435184997 -17097227825074210038 -1626046323367871520 -7353733388852134869 -13819010092565514 -12633597574996166830 -16921919712692601988 -7352887322447643571 -7301047507393840008 -28202057290090175 -6980983877229740308 -13520119278536099331 -7645347347796264438 -9622122612430014405 -18412263935274844206 -7245541410319368907 -7192855528861074046 -9870724653384918 -5885976121588451299 -6928297995771445447 -7085509616732799382 -7140169647402779185 -10769578373240915520 -9819715104592692881 -7087483765944484324 -7352041299034112923 -7032823735274504521 -33560399034844152 -7301047477300167553 -6980137853816209660 -10944945458828937260 -13669905534306158122 -18026193457867982798 -5993604028623815795 -28766124487935334 -7192009505447543398 -5564352154681083943 -7141015683713598028 -1839019217048569077 -15288269228133516664 -7300201453886636905 -7087483735850811869 -6718814190576731851 -13940760358377162540 -7352041268940440468 -7299355387482145607 -6980137823722537205 -18411417881767641103 -6927451942264242344 -7192009475353870943 -15290807461739890121 -2188969976 -8455366527925159925 -18068492228830365096 -14880915248833168401 -14101065186935955 -7139323593895576082 -14311414805250836811 -9870726375998595 -7086637712437281221 -4958753984641959947 -13105552693218576372 -6979291800309006557 -7300201423792964450 -16165083394671772777 -13808562234416563902 -6926605918850711696 -7247515542334669589 -2624757565191619772 -5881584636093073417 -32150338517076320 -785983290288965090 -7086637682343608766 -7034797867289805203 -2979056014524680069 -9870726617761288 -14540120362423748755 -7298509333974942504 -1521238580360316800 -12976673671053247650 -7033951800885313905 -6926605888757039241 -7245823452516647643 -17952330525185607811 -9870725377427411 -15291935458564376817 -1603012832 -7085791658930078118 -6488020650427614617 -12919095062694397133 -7034797837196132748 -7354015400955741150 -6925759865343508593 -18413392013782941785 -7246669488827466486 -4938567614984488112 -9870724720559650 -7498048152822089063 -7193983607369171625 -7141297725910876764 -27638110467000252 -16349719711739348122 -11636885203347441199 -9106532716476499902 -4548898661544101372 -7085791628836405663 -15502606039934830517 -7562235613620865220 -7033105747378110802 -14426789124208003302 -8393023341868484594 -1251886678143272957 -15788821327926658275 -9870725383784222 -18413391983689269330 -6980419865919815941 -6925759835249836138 -5357989095224838157 -33842436932831545 -7192291517551149679 -11348511994799130885 -1349355141337056383 -7141297695817204309 -1201533247087773761 -32714336928793738 -4543926375081576497 -191950179678159950 -7032259723964580154 -11040187364284696123 -7353169347448538047 -14686192518692538500 -13757953135961245442 -18412545960275738682 -2185568528717121049 -7300483465990243186 -14835653469557491533 -1572796400505981136 -9788517128793228302 -6981265902230634784 -15290807375758362619 -7193137553861968522 -16118290484606469999 -16418446140666480289 -18411699893871247384 -16862372087833823519 -4206448621224592673 -7192291487457477224 -7140451672403673661 -455853151859508766 -5962976017044669465 -7139605605999182363 -8666576866089109507 -7032259693870907699 -6979573812412612838 -7300483435896570731 -8344402900088457576 -18412545930182066227 -5727354427211187592 -2625039560098645916 -5515200746281044358 -6926887930954317977 -5247593352906999919 -7247797554438275870 -7140451642310001206 -7087765760851706345 -7073611506224269312 -7355013769965733687 -13174099600966486052 -7352323293941334944 -11443887989255375246 -4146446263661364495 -7299637412483040083 -1571386258306042085 -5946179046742821181 -7246951531024745222 -6927733967265136820 -10639573055207376941 -6926887900860645522 -6994602712723555674 -5299098861505284222 -15289961412532110933 -5353476845679871617 -13513632884077627122 -7138759552491979260 -1144540847698347111 -7086073671033684399 -1901711630905639974 -31586254121535116 -9870726869747307 -5996988225456506285 -4526720883860178668 -2052034288295085986 -18413674025886548066 -2624475548788787270 -6926041877447114874 -8839539261532342355 -7246951500931072767 -4197549521920329467 -5197111291121763775 -2118540506775095159 -825887278052213957 -7194265619472777906 -5476138965309065280 -16588826745223579283 -7086919707344503242 -7034233825886208381 -7298791358975836980 -7603297094028494723 -7246105477517542119 -6981547944427913520 -6926041847353442419 -5353326642538940524 -16771372229407671518 -18413673995792875611 -1873618501935302415 -9091855447660366104 -2624475535891695220 -5248721418517808451 -695707940923638942 -1784668047839200521 -5123966563937617496 -9476180711086229037 -15289397293744457077 -2363364065503545615 -4187198287186888894 -14772210831162279241 -155104173409961345 -7032541736068186435 -7353451359552144328 -1744698334901438782 -1720270693428495876 -5863211220867680084 -7300765478093849467 -6981547914334241065 -18412827972379344963 -7246105447423869664 -1375340101 -1166767807772951618 -7193419565965574803 -15287141235607340513 -7140733684507279942 -9870726915359992 -427623910551390043 -7354297395862963171 -7352605336138613680 -7033387772379005278 -10744889200825600252 -12314414645940914243 -5835546371352167427 -7032541705974513980 -10066835850599860118 -14525018628252960934 -6980701890920710417 -7245259424010339016 -14735929132254102647 -13413734718255400134 -27920045185435350 -4259434058519872846 -11061538999702718852 -13453688972047942746 -4689994313342912648 -9870724605543603 -15693612750414022248 -7140733654413607487 -21103793 -1576744569957320370 -14491088305759127384 -14386655907411854458 -7088047772955312626 -28484120982325551 -7352605306044941225 -7245259393916666561 -6587273635278948726 -14242239340761843231 -18411981918872141860 -5885543833259738430 -6980701860827037962 -7299919424586646364 -7192573512458371700 -8271097636514235902 -7247233543128351503 -6928015979368743101 -7139887631000076839 -688165077222754128 -2596888135805175368 -805831884 -7351759282631410577 -7087201749541781978 -6979855837413507314 -2730758514787288045 -8477529075407324712 -6971520520943961491 -6979009771009016016 -1996539656478525349 -2783379539012682990 -9840570834876761539 -7247233513034679048 -5831598141713614638 -6926323889550721155 -8795062046652761419 -12021254591056840488 -8901578402287847519 -7351759252537738122 -8386285046382069117 -7087201719448109523 -7299073371079443261 -6979855807319834859 -7034515837989814662 -7218388648619280099 -10542598463376393433 -6927169925861539998 -7246387489621148400 -12120495559683868478 -13802551532558419223 -7139041577492873736 -11739843167758321863 -7086355696034578875 -17274157458060281885 -13267938307966371294 -12545157304493803906 -1413892608044762406 -13237708539884666884 -8487173076311541556 -18413109984482951244 -5991347858709874014 -30740204913755543 -7246387459527475945 -7194547644473672382 -17199514878479894463 -468607961144 -7193701578069181084 -11847668836417537503 -7086355665940906420 -1585891583597414023 -2131214311901497365 -7352887348242219961 -7033669784482611559 -9870725370086799 -12482638774054029707 -851940374707963849 -85348920764663585 -7245541436113945297 -27638024484357488 -6980983903024316698 -1785796031766792562 -32432333424428255 -7192855554655650436 -3909861025052296211 -8482084103035029713 -7194547614379999927 -6313103561496593691 -7085509642527375772 -5674063562281978264 -15287423178926065096 -7353733384553038804 -15398206672049014438 -14477731067643037065 -7301047503094743943 -7352887318148547506 -1584875219904694498 -6980983872930644243 -18412263930975748141 -1065200468752795466 -15177810505157773571 -6928297991472349382 -8054291783896991432 -12361766690509292773 -1053111882941597244 -7192855524561977981 -16593903001780618524 -5782296379703953450 -7141015709508174418 -7085509612433703317 -10965002685862053593 -985637059534194074 -7140169643103683120 -9870726291523332 -16878319014468388994 -1731418094883636884 -7352041294735016858 -7032823730975408456 -7087483761645388259 -6980137849517113595 -3232458045602335021 -827861392871065158 -7301047473001071488 -6446727831346940293 -5779476262966527373 -7192009501148447333 -6927451968058818734 -2625321597996762500 -245619828089948399 -7141015679414501963 -6722191038494869768 -7882137511871513597 -7087483731551715804 -7352041264641344403 -9870725382801118 -9272877412921575399 -7300201449587540840 -9870724775282169 -16436379939763521713 -17202169176751932566 -7299355383183049542 -18411417877468545038 -10754752208794749200 -7192009471054774878 -2430620139577280307 -8611086590374315409 -6927451937965146279 -805963576 -15291935514452624488 -7139323589596480017 -10812503129128502459 -8959988790532114083 -7086637708138185156 -2783943580416542774 -14720813411196273775 -10364150078460660033 -14362448656949381213 -15043322265989679329 -7300201419493868385 -7298509359769518894 -6979291796009910492 -1575898520748295875 -14922019929361876657 -5672976447337596765 -5831598141713745162 -6926605914551615631 -7247515538035573524 -2624475544489559534 -16260410401650050515 -2246314295 -7086637678044512701 -1873618544926328642 -7034797862990709138 -1096931248591407021 -7298509329675846439 -7033951796586217840 -7246669514622042876 -17941158134117828894 -10269743533867795671 -5347675226580976647 -3417860786310088910 -15688521365104690176 -7245823448217551578 -5134111493730665580 -5674104474255755027 -7717191090462393385 -6926605884457943176 -3596136887273981730 -32996417817806584 -7085791654630982053 -11573430836645528786 -7033105773172687192 -7002851749355521472 -5003335381653063809 -7354015396656645085 -7034797832897036683 -18413392009483845720 -7246669484528370421 -13979993538309916391 -6925759861044412528 -7193983603070075560 -10992311089537484262 -16267581173591573925 -2622783424577865887 -13819035887273179 -7141297721611780699 -16904712944498902101 -7033105743079014737 -6981265928025211174 -15289397375428134676 -4858945738627876093 -6149598375218383178 -6925759830950740073 -9870725377820485 -18413391979390173265 -6888657822347363642 -18411699919665823774 -1256116924183939300 -95187572621051114 -6980419861620719876 -7192291513252053614 -18103065826041137485 -10222816969990211254 -7141297691518108244 -7353169343149441982 -1283514803232966177 -2002437706943169624 -7032259719665484089 -5458807696621832226 -7300483461691147121 -7912204187237025199 -5570988786673059738 -18412545955976642617 -10756162204825814253 -6981265897931538719 -8790289859117385450 -13727996608218204062 -7193137549562872457 -18411699889572151319 -7247797580232852260 -12994192120810309276 -7140451668104577596 -7192291483158381159 -12595141854107535638 -530653668674242947 -7352323319735911334 -828143439366588588 -17782439637510194255 -9302231356660189158 -9870724574152005 -6702109864571701358 -7139605601700086298 -12221091663415674606 -7032259689571811634 -6818388851727926589 -6241248994235910470 -1495860772 -16414620023533864954 -6979573808113516773 -6926887926655221912 -764904305988667453 -1945545821847553660 -7247797550139179805 -257824245644068756 -32714354125768093 -5582375653047993645 -7138759578286555650 -7140451638010905141 -7087765756552610280 -18216242462685529942 -9870724653909453 -7352323289642238879 -14665067898537833 -8621549700391504088 -7299637408183944018 -9870726605571596 -7246951526725649157 -6927733962966040755 -1535116265 -11108455537719445229 -6926887896561549457 -3189738274038088907 -546637851 -2835565962349970524 -11203378729712550962 -5095261602624047103 -7138759548192883195 -7086919733139079632 -7022272817292838188 -8784323283773883651 -1559288237147293403 -7086073666734588334 -8223467025204184800 -13165236096819726188 -15603385639994459498 -18413674021587452001 -7246951496631976702 -6926041873148018809 -6206603763061885007 -67325673392440852 -1760429919 -7194265615173681841 -7719447165796222449 -848307201366754599 -7086919703045407177 -1300970856318961162 -7034233821587112316 -481505314442 -7353451385346720718 -16860434610997626540 -7298791354676740915 -9870724715972410 -7246105473218446054 -6981547940128817455 -2710500877822855357 -8910392170934372316 -9870724821026326 -11204987448696309768 -9538952396691932645 -16145254715685996093 -9026822436951032807 -933515197985065029 -17256118064413607864 -9870724723574767 -15637617634654488066 -15167687298960066085 -3229097897723823367 -232710822722865204 -7032541731769090370 -1095239150174733620 -7353451355253048263 -5661738430124328056 -7246105443124773599 -948019863933683111 -12569464285503162148 -18412827968080248898 -12806893037197853951 -6981547910035145000 -7300765473794753402 -7193419561666478738 -8781693865030060215 -9350227582874420345 -2146416191707613108 -5141454990908000668 -7140733680208183877 -99231065340118997 -1384869222252742270 -7088047798749889016 -2755882956846859405 -7033387768079909213 -7352605331839517615 -1854737581649037059 -7245259419711242951 -6980701886621614352 -7032541701675417915 -7192573538252948090 -15287141166821409947 -15009813827273492365 -1873618519132277025 -15859000273729226306 -9194029999668660035 -18061482934504720304 -15620129942127970446 -63936358548900149 -7088047768656216561 -1299603461807998560 -7352605301745845160 -1912255148622875001 -1884114781242131983 -1873618471842023452 -6979009796803592406 -18411981914573045795 -7299919420287550299 -16311679952720365302 -6980701856527941897 -11966722661119886674 -7247233538829255438 -16633803289536038978 -6293788 -7192573508159275635 -6928015975069647036 -7139887626700980774 -15287987246124173226 -7087201745242685913 -7351759278332314512 -10417684559046444665 -6187441192028997511 -6979855833114411249 -1627738421784085859 -9821766011289404660 -2201358182892963955 -2917029403468826036 -6979009766709919951 -6927169951656116388 -7247233508735582983 -6926323885251625090 -15292217457771480209 -17852636614813549786 -7351759248238642057 -7087201715149013458 -1873618510534673791 -7034515833690718597 -17119958815989303480 -9440398924256576696 -7299073366780347196 -10246365349637458074 -13237708565679243274 -6927169921562443933 -3124549171711117404 -7246387485322052335 -6173800107753209956 -8070402889435842339 -7193701603863757474 -5903201844931986950 -9942444152932271115 -7139041573193777671 -17445466366832674018 -7086355691735482810 -16337104745239479432 -39608547845342982 -11685864050243995219 -9870724855301167 -2624475527293240350 -12073088508578760599 -7344550947391473690 -13237708535585570819 -103179325071230022 -10145345834749004124 -15248610667087201439 -7194547640174576317 -18413109980183855179 -9612643166216521167 -2292825785040635134 -464308864142 -7193701573770085019 -7406197765746854162 -16499980877748898004 -8868431006280779480 -8692390532950198617 -10906015674175259968 -7086355661641810355 -7352887343943123896 -10864636259949152234 -8099428861213869098 -4451132852614006819 -7033669780183515494 -6814198485741601955 -7245541431814849232 -12239027656080492550 -6980983898725220633 -9789319859965200232 -6928298017266925772 -7192855550356554371 -10277198458468566225 -10155047267998762621 -33560403333744444 -11548493110908748854 -7085509638228279707 -9870727015827078 -7852905094729042252 -5890488336741041777 -7032823756769984846 -7353733380253942739 -9870724569302118 -2390363305267037366 -7352887313849451441 -7301047498795647878 -2785415304742897065 -5197675268039181352 -2440417245444768861 -18412263926676652076 -18006978259953256063 -1148489064437843751 -6209141837602293106 -6928297987173253317 -7141015705209078353 -7192855520262881916 -6698767362340226194 -7140169638804587055 -1873618501935826611 -7032823726676312391 -7087483757346292194 -15287141265701537621 -7352041290435920793 -9391368372458883286 -7301047468701975423 -18411417903263121428 -15274450213741529511 -2576363855830648001 -6980137845218017530 -7299355408977625932 -16414819240624849959 -7192009496849351268 -12524340376691672164 -29048140890506751 -17786951981635864475 -11226550812567013593 -6927451963759722669 -5812662174917002591 -12350988444867429435 -16904712944497919197 -6444753720828101815 -8249591958531213230 -11026052076656986043 -7141015675115405898 -593494716095857647 -490104423410 -5558136817694804187 -5299098870104786949 -7300201445288444775 -507301005145 -7087483727252619739 -5903884228619468800 -18411417873169448973 -1873618489038734736 -5887800003173221669 -18441542378572155291 -7247515563830149914 -12588077379430713565 -7299355378883953477 -7563081654230386389 -6927451933666050214 -7192009466755678813 -13733412026998916877 -12944621759895439337 -3054485070182287068 -13297153724119713646 -7139323585297383952 -2625321580800574862 -7086637703839089091 -9603332665379260396 -6979291791710814427 -7033951822380794230 -7298509355470422829 -33278412726339059 -18029805427700663298 -7247515533736477459 -7410231591516636514 -6926605910252519566 -17946822069105788673 -7034797858691613073 -4261009806383449657 -447113660592 -7033951792287121775 -7298509325376750374 -7246669510322946811 -4534407021717685362 -882239441530390089 -7245823443918455513 -6926605880158847111 -15287141209813681996 -6155327963617691259 -7085791650331885988 -6520986101609792887 -7354015392357549020 -6208295814188697765 -17554608171616110273 -7033105768873591127 -7246669480229274356 -18413392005184749655 -2803649555476907539 -6925759856745316463 -2599235317102217269 -7193983598770979495 -434216567980 -8106071886713521650 -15746639385482889572 -7042686759039796981 -1154748910884030612 -7141297717312684634 -12243195703567124314 -1873618463243306305 -7353169368944018372 -12450159764203178109 -4148105506751382809 -7033105738779918672 -6981265923726115109 -33560368940713974 -17169981030136022953 -6980419857321623811 -4347925833116092296 -18411699915366727709 -7192291508952957549 -5623513681448666797 -33560403333875172 -9870724666886005 -7139605627494662688 -18158855401059780058 -31586288515352537 -15287987271918618035 -14808173258166110477 -7141297687219012179 -10906583505664280685 -7353169338850345917 -6210168527151630153 -7032259715366388024 -2126679883759814820 -2149273943172056336 -4347925901902415544 -30176172108350955 -7300483457392051056 -6209987959894705607 -18412545951677546552 -6981265893632442654 -7193137545263776392 -5303893075865503190 -1893500283777910651 -18411699885273055254 -7247797575933756195 -5081553090054654323 -7140451663805481531 -8247724729662703889 -15291935458565162174 -7139605597400990233 -7352323315436815269 -7087765782347186670 -7032259685272715569 -316743096613078208 -8854892867934423142 -6979573803814420708 -29612199490947173 -6926887922356125847 -8812300966546965802 -11722969585197581469 -7247797545840083740 -8270229298440046551 -6232418373048731093 -1873618252584978388 -7138759573987459585 -4977791693940394284 -7087765752253514215 -7352323285343142814 -7880607085181405609 -18332726249486944491 -3305725656990746261 -7299637403884847953 -5729046448243673423 -7246951522426553092 -71108415 -6927733958666944690 -17393050773869299132 -2928740603216529441 -7138759543893787130 -16150166559522883585 -10364366638615365781 -7086919728839983567 -13883199269509858330 -6478223379528812725 -6661826795216177518 -7086073662435492269 -1873618441748613473 -17733865212901721719 -12164227723825907371 -936899463602964420 -7246951492332880637 -10590197086357423139 -18413674017288355936 -6926041868848922744 -6736241924278258064 -16008494395543127400 -11957793163459888268 -7194265610874585776 -13819010092238498 -9966383549812704714 -27356055372105278 -14101043691783933 -11185827869741483157 -7086919698746311112 -7034233817288016251 -1411918557712287647 -18056758355458721953 -10913804840997816088 -7298791350377644850 -1627738408887257463 -7353451381047624653 -5565348488711768192 -2560318637201230152 -6981547935829721390 -7246105468919349989 -9181763891149276690 -8262357255499876300 -7193419587461055128 -496747170645214674 -10898149942002910916 -13913370016116443282 -5992475971611657642 -7353451350953952198 -9759732344438719525 -15945141101920192007 -7032541727469994305 -9735614383619770157 -18412827963781152833 -7300765469495657337 -10284111861439072375 -6981547905736048935 -7193419557367382673 -14137369733883168373 -2392267112159643424 -2150364374056305808 -5724666024857831081 -7140733675909087812 -7033387763780813148 -515898869092 -7352605327540421550 -7088047794450792951 -6980701882322518287 -7245259415412146886 -12083278685454862534 -5532932791479699590 -7192573533953852025 -4144026118870010131 -5248951067485144858 -6928016000864223426 -30740204914411808 -12245079979070720255 -5622546645511767792 -16663012318422238821 -15860561610643605152 -31304293607146765 -795150206 -785983290289883252 -100 -101 -102 diff --git a/python/cudf/cudf/tests/test_hash_vocab.py b/python/cudf/cudf/tests/test_hash_vocab.py index 698dcba650f..529552cb2d9 100644 --- a/python/cudf/cudf/tests/test_hash_vocab.py +++ b/python/cudf/cudf/tests/test_hash_vocab.py @@ -1,4 +1,4 @@ -# Copyright (c) 2020, NVIDIA CORPORATION. +# Copyright (c) 2020-2021, NVIDIA CORPORATION. from cudf.utils.hash_vocab_utils import hash_vocab import os import filecmp @@ -7,18 +7,16 @@ @pytest.fixture(scope="module") def datadir(datadir): - return os.path.join(datadir, "vocab_hash") + return os.path.join( + datadir, "subword_tokenizer_data", "bert_base_cased_sampled" + ) def test_correct_bert_base_vocab_hash(datadir, tmpdir): - # The vocabulary is 5% drawn from bert-base-uncased - # sampling script at: - # https://gist.github.com/VibhuJawa/4fc5981d2cbba1ab8b1e78cdf6aede72 - vocab_path = os.path.join(datadir, "bert-base-uncased-vocab-5per.txt") + # The vocabulary is drawn from bert-base-cased + vocab_path = os.path.join(datadir, "vocab.txt") - groundtruth_path = os.path.join( - datadir, "ground_truth_vocab_hash_5per.txt" - ) + groundtruth_path = os.path.join(datadir, "vocab-hash.txt") output_path = tmpdir.join("cudf-vocab-hash.txt") hash_vocab(vocab_path, output_path) diff --git a/python/cudf/cudf/tests/test_subword_tokenizer.py b/python/cudf/cudf/tests/test_subword_tokenizer.py new file mode 100644 index 00000000000..bdb343a41f7 --- /dev/null +++ b/python/cudf/cudf/tests/test_subword_tokenizer.py @@ -0,0 +1,112 @@ +# Copyright (c) 2020-2021, NVIDIA CORPORATION. +from transformers import BertTokenizer +import pytest +import os +import numpy as np + +import cudf +from cudf.core.subword_tokenizer import SubwordTokenizer + + +@pytest.fixture(scope="module") +def datadir(datadir): + return os.path.join(datadir, "subword_tokenizer_data") + + +def assert_equal_tokenization_outputs(hf_output, cudf_output): + assert ( + np.sum(hf_output["input_ids"] != cudf_output["input_ids"].get()) == 0 + ) + assert ( + np.sum( + hf_output["attention_mask"] != cudf_output["attention_mask"].get() + ) + == 0 + ) + + +def test_subword_tokenize_on_disk_vocab_str_api(datadir): + """ + Tests the subword-tokenizer API where + the vocabulary is not pre-loaded + and is accessed via the string accessor + """ + with open(os.path.join(datadir, "test_sentences.txt")) as file: + input_sentence_ls = [line.strip() for line in file] + + vocab_dir = os.path.join(datadir, "bert_base_cased_sampled") + vocab_hash_path = os.path.join(vocab_dir, "vocab-hash.txt") + + ser = cudf.Series(input_sentence_ls) + tokens, masks, metadata = ser.str.subword_tokenize( + vocab_hash_path, + max_length=32, + stride=32, + do_lower=True, + max_rows_tensor=len(ser), + ) + + +@pytest.mark.parametrize("seq_len", [32, 64]) +@pytest.mark.parametrize("stride", [0, 15, 30]) +@pytest.mark.parametrize("add_special_tokens", [True, False]) +@pytest.mark.parametrize("do_lower_case", [True, False]) +def test_subword_tokenize( + seq_len, stride, add_special_tokens, do_lower_case, datadir +): + with open(os.path.join(datadir, "test_sentences.txt")) as file: + input_sentence_ls = [line.strip() for line in file] + + vocab_dir = os.path.join(datadir, "bert_base_cased_sampled") + + hf_tokenizer = BertTokenizer.from_pretrained( + vocab_dir, do_lower_case=do_lower_case + ) + + hf_output = hf_tokenizer( + input_sentence_ls, + max_length=seq_len, + stride=stride, + padding="max_length", + return_tensors="np", + truncation=True, + add_special_tokens=add_special_tokens, + ) + + vocab_hash = os.path.join(vocab_dir, "vocab-hash.txt") + str_series = cudf.Series(input_sentence_ls) + cudf_tokenizer = SubwordTokenizer(vocab_hash, do_lower_case=do_lower_case) + cudf_output = cudf_tokenizer( + str_series, + max_length=seq_len, + max_num_rows=len(str_series), + stride=stride, + padding="max_length", + return_tensors="cp", + truncation=True, + add_special_tokens=add_special_tokens, + ) + assert_equal_tokenization_outputs(hf_output, cudf_output) + + +def test_subword_tokenize_with_truncation(datadir): + vocab_dir = os.path.join(datadir, "bert_base_cased_sampled") + vocab_hash = os.path.join(vocab_dir, "vocab-hash.txt") + str_series = cudf.Series(["Test error"]) + cudf_tokenizer = SubwordTokenizer(vocab_hash) + + error_msg = ( + "Adding special tokens is not supported with truncation = False. " + "Custom Cupy kernel can potentially " + "be used to add it. For reference " + "see: _bert_add_special_tokens" + ) + + with pytest.raises(NotImplementedError, match=error_msg): + cudf_tokenizer( + str_series, + max_length=64, + max_num_rows=len(str_series), + truncation=False, + add_special_tokens=True, + ) diff --git a/python/cudf/requirements/cuda-11.0/dev_requirements.txt b/python/cudf/requirements/cuda-11.0/dev_requirements.txt index 4721694f59f..455258d2e2e 100644 --- a/python/cudf/requirements/cuda-11.0/dev_requirements.txt +++ b/python/cudf/requirements/cuda-11.0/dev_requirements.txt @@ -36,6 +36,6 @@ sphinx-copybutton sphinx-markdown-tables sphinx_rtd_theme sphinxcontrib-websupport -typing_extensions +transformers typing_extensions wheel diff --git a/python/cudf/requirements/cuda-11.1/dev_requirements.txt b/python/cudf/requirements/cuda-11.1/dev_requirements.txt index adc1619a619..4cad661b5c4 100644 --- a/python/cudf/requirements/cuda-11.1/dev_requirements.txt +++ b/python/cudf/requirements/cuda-11.1/dev_requirements.txt @@ -36,6 +36,6 @@ sphinx-copybutton sphinx-markdown-tables sphinx_rtd_theme sphinxcontrib-websupport -typing_extensions +transformers typing_extensions wheel diff --git a/python/cudf/requirements/cuda-11.2/dev_requirements.txt b/python/cudf/requirements/cuda-11.2/dev_requirements.txt index 7328e3f222a..a7e5f1c0993 100644 --- a/python/cudf/requirements/cuda-11.2/dev_requirements.txt +++ b/python/cudf/requirements/cuda-11.2/dev_requirements.txt @@ -36,6 +36,6 @@ sphinx-copybutton sphinx-markdown-tables sphinx_rtd_theme sphinxcontrib-websupport -typing_extensions +transformers typing_extensions wheel diff --git a/python/cudf/setup.py b/python/cudf/setup.py index 21d7ed56d58..b8c7dc5868f 100644 --- a/python/cudf/setup.py +++ b/python/cudf/setup.py @@ -40,6 +40,7 @@ "hypothesis" "mimesis", "pyorc", "msgpack", + "transformers", ] }